Thu, 18 Aug 2022 23:16:24 -0500
Remove the refresh timer, visible preference, and delete-event from gtkblist.
The refresh timer is a polling method of every buddy in the blist and needs to
be fixed regardless.
The visible preference doesn't make sense in a world where there will be no
buddy list window.
The delete event doesn't make sense as it quit the program which is handled
differently now.
Testing Done:
Ran the program, made sure the contact list showed up and that it didn't close the program when closing the window.
Reviewed at https://reviews.imfreedom.org/r/1608/
| pidgin/gtkblist.c | file | annotate | diff | comparison | revisions | |
| pidgin/gtkblist.h | file | annotate | diff | comparison | revisions |
--- a/pidgin/gtkblist.c Thu Aug 18 23:01:51 2022 -0500 +++ b/pidgin/gtkblist.c Thu Aug 18 23:16:24 2022 -0500 @@ -100,7 +100,6 @@ BLIST_COLUMNS }; -static GdkVisibilityState gtk_blist_visibility = GDK_VISIBILITY_UNOBSCURED; static gboolean editing_blist = FALSE; static GList *pidgin_blist_sort_methods = NULL; @@ -113,7 +112,6 @@ static PidginBuddyList *gtkblist = NULL; static GList *groups_tree(void); -static gboolean pidgin_blist_refresh_timer(PurpleBuddyList *list); static void pidgin_blist_update_buddy(PurpleBuddyList *list, PurpleBlistNode *node, gboolean status_change); static void pidgin_blist_selection_changed(GtkTreeSelection *selection, gpointer data); static void pidgin_blist_update(PurpleBuddyList *list, PurpleBlistNode *node); @@ -139,57 +137,6 @@ /*************************************************** * Callbacks * ***************************************************/ -static gboolean gtk_blist_visibility_cb(GtkWidget *w, GdkEventVisibility *event, gpointer data) -{ - GdkVisibilityState old_state = gtk_blist_visibility; - gtk_blist_visibility = event->state; - - if (gtk_blist_visibility == GDK_VISIBILITY_FULLY_OBSCURED && - old_state != GDK_VISIBILITY_FULLY_OBSCURED) { - - /* no longer fully obscured */ - pidgin_blist_refresh_timer(purple_blist_get_default()); - } - - /* continue to handle event normally */ - return FALSE; -} - -static gboolean gtk_blist_window_state_cb(GtkWidget *w, GdkEventWindowState *event, gpointer data) -{ - if(event->changed_mask & GDK_WINDOW_STATE_WITHDRAWN) { - if(event->new_window_state & GDK_WINDOW_STATE_WITHDRAWN) - purple_prefs_set_bool(PIDGIN_PREFS_ROOT "/blist/list_visible", FALSE); - else { - purple_prefs_set_bool(PIDGIN_PREFS_ROOT "/blist/list_visible", TRUE); - pidgin_blist_refresh_timer(purple_blist_get_default()); - } - } - - if(event->changed_mask & GDK_WINDOW_STATE_MAXIMIZED) { - if(event->new_window_state & GDK_WINDOW_STATE_MAXIMIZED) - purple_prefs_set_bool(PIDGIN_PREFS_ROOT "/blist/list_maximized", TRUE); - else - purple_prefs_set_bool(PIDGIN_PREFS_ROOT "/blist/list_maximized", FALSE); - } - - /* Refresh gtkblist if un-iconifying */ - if (event->changed_mask & GDK_WINDOW_STATE_ICONIFIED){ - if (!(event->new_window_state & GDK_WINDOW_STATE_ICONIFIED)) - pidgin_blist_refresh_timer(purple_blist_get_default()); - } - - return FALSE; -} - -static gboolean gtk_blist_delete_cb(GtkWidget *w, GdkEventAny *event, gpointer data) -{ - purple_core_quit(); - - /* we handle everything, event should not propagate further */ - return TRUE; -} - static void set_node_custom_icon_cb(GtkWidget *widget, gint response, gpointer data) { @@ -2826,34 +2773,6 @@ return text; } -static gboolean pidgin_blist_refresh_timer(PurpleBuddyList *list) -{ - PurpleBlistNode *gnode, *cnode; - - if (gtk_blist_visibility == GDK_VISIBILITY_FULLY_OBSCURED - || !gtk_widget_get_visible(gtkblist->window)) - return TRUE; - - for (gnode = purple_blist_get_root(list); gnode; gnode = gnode->next) { - if(!PURPLE_IS_GROUP(gnode)) - continue; - for(cnode = gnode->child; cnode; cnode = cnode->next) { - if(PURPLE_IS_CONTACT(cnode)) { - PurpleBuddy *buddy; - - buddy = purple_contact_get_priority_buddy((PurpleContact*)cnode); - - if (buddy && - purple_presence_is_idle(purple_buddy_get_presence(buddy))) - pidgin_blist_update_contact(list, PURPLE_BLIST_NODE(buddy)); - } - } - } - - /* keep on going */ - return TRUE; -} - static void pidgin_blist_hide_node(PurpleBuddyList *list, PurpleBlistNode *node, gboolean update) { PidginBlistNode *gtknode = g_object_get_data(G_OBJECT(node), UI_DATA); @@ -3196,11 +3115,6 @@ GtkEventController *key_controller = NULL; GtkTreeSelection *selection; - if (gtkblist && gtkblist->window) { - purple_blist_set_visible(purple_prefs_get_bool(PIDGIN_PREFS_ROOT "/blist/list_visible")); - return; - } - gtkblist = PIDGIN_BUDDY_LIST(list); gtkblist->window = pidgin_contact_list_window_new(); @@ -3214,11 +3128,6 @@ */ gtkblist->vbox = pidgin_contact_list_window_get_vbox(PIDGIN_CONTACT_LIST_WINDOW(gtkblist->window)); - g_signal_connect(G_OBJECT(gtkblist->window), "delete_event", G_CALLBACK(gtk_blist_delete_cb), NULL); - g_signal_connect(G_OBJECT(gtkblist->window), "visibility_notify_event", G_CALLBACK(gtk_blist_visibility_cb), NULL); - g_signal_connect(G_OBJECT(gtkblist->window), "window_state_event", G_CALLBACK(gtk_blist_window_state_cb), NULL); - gtk_widget_add_events(gtkblist->window, GDK_VISIBILITY_NOTIFY_MASK); - /****************************** GtkTreeView **********************************/ gtkblist->treemodel = gtk_tree_store_new(BLIST_COLUMNS, GDK_TYPE_PIXBUF, /* Status icon */ @@ -3302,9 +3211,6 @@ gtk_widget_show_all(GTK_WIDGET(gtkblist->vbox)); purple_blist_set_visible(purple_prefs_get_bool(PIDGIN_PREFS_ROOT "/blist/list_visible")); - /* start the refresh timer */ - gtkblist->refresh_timer = g_timeout_add_seconds(30, (GSourceFunc)pidgin_blist_refresh_timer, list); - handle = pidgin_blist_get_handle(); /* sorting */ @@ -4211,8 +4117,6 @@ /* Initialize prefs */ purple_prefs_add_none(PIDGIN_PREFS_ROOT "/blist"); - purple_prefs_add_bool(PIDGIN_PREFS_ROOT "/blist/list_visible", FALSE); - purple_prefs_add_bool(PIDGIN_PREFS_ROOT "/blist/list_maximized", FALSE); purple_prefs_add_string(PIDGIN_PREFS_ROOT "/blist/sort_type", "alphabetical"); purple_prefs_add_string(PIDGIN_PREFS_ROOT "/blist/theme", ""); @@ -4266,11 +4170,6 @@ gtk_widget_destroy(gtkblist->window); - if (gtkblist->refresh_timer) { - g_source_remove(gtkblist->refresh_timer); - gtkblist->refresh_timer = 0; - } - gtkblist->window = gtkblist->vbox = gtkblist->treeview = NULL; g_clear_object(>kblist->treemodel);