X-Git-Url: http://cgit.babelmonkeys.de/?p=jubjub.git;a=blobdiff_plain;f=src%2Fgui%2Fgtk%2FJubGtkRosterUI.m;h=5711ee68dfe0a21eeb73f0da2e3fe4305493c238;hp=e7e36f723a86fa53a1ca67ca533e3dbcd12e9abd;hb=2403af8101a00532124246578afb88c1c8e34c14;hpb=dae5253e2578ff6a470579e70731af4bba972932 diff --git a/src/gui/gtk/JubGtkRosterUI.m b/src/gui/gtk/JubGtkRosterUI.m index e7e36f7..5711ee6 100644 --- a/src/gui/gtk/JubGtkRosterUI.m +++ b/src/gui/gtk/JubGtkRosterUI.m @@ -50,6 +50,7 @@ static void presence_changed(GtkComboBox *combo_box, gpointer data) static gboolean filter_roster_by_presence(GtkTreeModel *model, GtkTreeIter *iter, gpointer data) { + bool *showOffline = data; char *status; gtk_tree_model_get(model, iter, 2, &status, -1); @@ -57,12 +58,18 @@ static gboolean filter_roster_by_presence(GtkTreeModel *model, if (!status) return TRUE; - if (!strcmp(status, "unavailable")) + if (!*showOffline && !strcmp(status, "unavailable")) return FALSE; return TRUE; } +static void menu_show_offline(GtkCheckMenuItem *checkmenuitem, gpointer data) +{ + JubGtkRosterUI *ui = data; + ui.showOffline = gtk_check_menu_item_get_active(checkmenuitem); +} + static void dialog_response_callback(GtkDialog *dialog, gint response_id, gpointer user_data) { @@ -77,6 +84,7 @@ static void dialog_response_callback(GtkDialog *dialog, gint response_id, self = [super init]; @try { + GtkCheckMenuItem *show_offline_menu_item; GtkTreeView *roster_view; GtkBuilder *builder; @@ -108,7 +116,7 @@ static void dialog_response_callback(GtkDialog *dialog, gint response_id, gtk_builder_get_object(builder, "RosterTreeModelFilter")); gtk_tree_model_filter_set_visible_func(_roster_filter, - filter_roster_by_presence, NULL, NULL); + filter_roster_by_presence, &_showOffline, NULL); roster_view = GTK_TREE_VIEW(gtk_builder_get_object(builder, "RosterTreeView")); @@ -123,6 +131,13 @@ static void dialog_response_callback(GtkDialog *dialog, gint response_id, g_signal_connect(_presence_combo, "changed", G_CALLBACK(presence_changed), client); + show_offline_menu_item = + GTK_CHECK_MENU_ITEM(gtk_builder_get_object(builder, + "showOfflineCheckMenuItem")); + + g_signal_connect(show_offline_menu_item, "toggled", + G_CALLBACK(menu_show_offline), self); + g_object_unref(G_OBJECT(builder)); } @catch (id e) { [self release]; @@ -450,7 +465,8 @@ static void dialog_response_callback(GtkDialog *dialog, gint response_id, OFArray *groups = contact.rosterItem.groups;; GdkPixbuf *avatar = - gdk_pixbuf_new_from_file([avatarFile UTF8String], NULL); + gdk_pixbuf_new_from_file_at_size([avatarFile UTF8String], + 32, 32, NULL); if (groups == nil) groups = @[ @"General" ]; @@ -507,4 +523,17 @@ static void dialog_response_callback(GtkDialog *dialog, gint response_id, [tooltip UTF8String]); }); } + +- (bool)showOffline +{ + OF_GETTER(_showOffline, YES); +} + +- (void)setShowOffline: (bool)showOffline +{ + _showOffline = showOffline; + g_idle_add_block(^{ + gtk_tree_model_filter_refilter(_roster_filter); + }); +} @end