[Xfce4-commits] <xfce4-appfinder:master> Detatch from icon theme to avoid segfault (bug #9730).

Nick Schermer noreply at xfce.org
Sat Mar 16 19:04:02 CET 2013


Updating branch refs/heads/master
         to eb46f5acd4b0b985a94bee6942d6527f9f620b84 (commit)
       from 7cae7f4f9669ae614bf1b66a32f166456595595f (commit)

commit eb46f5acd4b0b985a94bee6942d6527f9f620b84
Author: Nick Schermer <nick at xfce.org>
Date:   Sat Mar 16 19:03:01 2013 +0100

    Detatch from icon theme to avoid segfault (bug #9730).

 src/appfinder-window.c |   15 ++++++++++++---
 1 files changed, 12 insertions(+), 3 deletions(-)

diff --git a/src/appfinder-window.c b/src/appfinder-window.c
index d3cd567..b5ca272 100644
--- a/src/appfinder-window.c
+++ b/src/appfinder-window.c
@@ -129,6 +129,8 @@ struct _XfceAppfinderWindow
 
   XfceAppfinderActions       *actions;
 
+  GtkIconTheme               *icon_theme;
+
   GtkEntryCompletion         *completion;
 
   XfconfChannel              *channel;
@@ -204,7 +206,6 @@ xfce_appfinder_window_init (XfceAppfinderWindow *window)
   GtkWidget          *bbox;
   GtkWidget          *button;
   GtkEntryCompletion *completion;
-  GtkIconTheme       *icon_theme;
   gint                integer;
 
   window->channel = xfconf_channel_get ("xfce4-appfinder");
@@ -400,9 +401,10 @@ xfce_appfinder_window_init (XfceAppfinderWindow *window)
   image = gtk_image_new_from_stock (GTK_STOCK_EXECUTE, GTK_ICON_SIZE_BUTTON);
   gtk_button_set_image (GTK_BUTTON (button), image);
 
-  icon_theme = gtk_icon_theme_get_for_screen (gtk_window_get_screen (GTK_WINDOW (window)));
-  g_signal_connect_swapped (G_OBJECT (icon_theme), "changed",
+  window->icon_theme = gtk_icon_theme_get_for_screen (gtk_window_get_screen (GTK_WINDOW (window)));
+  g_signal_connect_swapped (G_OBJECT (window->icon_theme), "changed",
       G_CALLBACK (xfce_appfinder_window_icon_theme_changed), window);
+  g_object_ref (G_OBJECT (window->icon_theme));
 
   /* load categories in the model */
   xfce_appfinder_window_category_set_categories (NULL, window);
@@ -432,6 +434,11 @@ xfce_appfinder_window_finalize (GObject *object)
   g_signal_handler_disconnect (window->channel, window->property_watch_id);
   g_signal_handler_disconnect (window->model, window->categories_changed_id);
 
+  /* release our reference on the icon theme */
+  g_signal_handlers_disconnect_by_func (G_OBJECT (window->icon_theme),
+      xfce_appfinder_window_icon_theme_changed, window);
+  g_object_unref (G_OBJECT (window->icon_theme));
+
   g_object_unref (G_OBJECT (window->model));
   g_object_unref (G_OBJECT (window->category_model));
   g_object_unref (G_OBJECT (window->completion));
@@ -1520,6 +1527,8 @@ xfce_appfinder_window_row_activated (XfceAppfinderWindow *window)
 static void
 xfce_appfinder_window_icon_theme_changed (XfceAppfinderWindow *window)
 {
+  appfinder_return_if_fail (XFCE_IS_APPFINDER_WINDOW (window));
+
   if (window->icon_find != NULL)
     g_object_unref (G_OBJECT (window->icon_find));
   window->icon_find = xfce_appfinder_model_load_pixbuf (GTK_STOCK_FIND, XFCE_APPFINDER_ICON_SIZE_48);


More information about the Xfce4-commits mailing list