summaryrefslogtreecommitdiff
path: root/xfce-base/xfce4-appfinder/files/xfce4-appfinder-4.10.0-icon-theme-segfault.patch
blob: 02e3e7b1256e5dcf5700b61cbcfe73c877d71677 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
From eb46f5acd4b0b985a94bee6942d6527f9f620b84 Mon Sep 17 00:00:00 2001
From: Nick Schermer <nick@xfce.org>
Date: Sat, 16 Mar 2013 18:03:01 +0000
Subject: Detatch from icon theme to avoid segfault (bug #9730).

---
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);
--
cgit v0.9.1