diff -r a601304dcf51 -r fd8325d6e0fd pidgin/gtkstatusbox.c --- a/pidgin/gtkstatusbox.c Wed May 22 16:03:19 2019 -0500 +++ b/pidgin/gtkstatusbox.c Sat May 25 05:44:58 2019 -0400 @@ -435,34 +435,21 @@ static void destroy_icon_box(PidginStatusBox *statusbox) { - if (statusbox->icon_box == NULL) - return; + g_clear_pointer(&statusbox->icon_box, gtk_widget_destroy); - gtk_widget_destroy(statusbox->icon_box); + g_clear_object(&statusbox->hand_cursor); + g_clear_object(&statusbox->arrow_cursor); - g_object_unref(statusbox->hand_cursor); - g_object_unref(statusbox->arrow_cursor); + g_clear_object(&statusbox->buddy_icon_img); - if (statusbox->buddy_icon_img) - g_object_unref(statusbox->buddy_icon_img); - - g_object_unref(G_OBJECT(statusbox->buddy_icon)); - g_object_unref(G_OBJECT(statusbox->buddy_icon_hover)); + g_clear_object(&statusbox->buddy_icon); + g_clear_object(&statusbox->buddy_icon_hover); - if (statusbox->buddy_icon_sel) - gtk_widget_destroy(statusbox->buddy_icon_sel); + g_clear_pointer(&statusbox->buddy_icon_sel, gtk_widget_destroy); - if (statusbox->icon_box_menu) - gtk_widget_destroy(statusbox->icon_box_menu); + g_clear_pointer(&statusbox->icon_box_menu, gtk_widget_destroy); statusbox->icon = NULL; - statusbox->icon_box = NULL; - statusbox->icon_box_menu = NULL; - statusbox->buddy_icon_img = NULL; - statusbox->buddy_icon = NULL; - statusbox->buddy_icon_hover = NULL; - statusbox->hand_cursor = NULL; - statusbox->arrow_cursor = NULL; } static void @@ -506,6 +493,14 @@ } static void +pidgin_status_box_dispose(GObject *obj) +{ + PidginStatusBox *statusbox = PIDGIN_STATUS_BOX(obj); + + destroy_icon_box(statusbox); +} + +static void pidgin_status_box_finalize(GObject *obj) { PidginStatusBox *statusbox = PIDGIN_STATUS_BOX(obj); @@ -514,8 +509,6 @@ purple_signals_disconnect_by_handle(statusbox); purple_prefs_disconnect_by_handle(statusbox); - destroy_icon_box(statusbox); - if (statusbox->active_row) gtk_tree_row_reference_free(statusbox->active_row); @@ -560,6 +553,7 @@ object_class = (GObjectClass *)klass; + object_class->dispose = pidgin_status_box_dispose; object_class->finalize = pidgin_status_box_finalize; object_class->get_property = pidgin_status_box_get_property;