[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