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
|