Author: kelnos
Date: 2007-10-20 23:58:38 +0000 (Sat, 20 Oct 2007)
New Revision: 26167

Modified:
   xfdesktop/trunk/src/xfdesktop-file-icon-manager.c
   xfdesktop/trunk/src/xfdesktop-window-icon-manager.c
Log:
fix crash when switching icon styles


Modified: xfdesktop/trunk/src/xfdesktop-file-icon-manager.c
===================================================================
--- xfdesktop/trunk/src/xfdesktop-file-icon-manager.c   2007-10-20 21:40:35 UTC 
(rev 26166)
+++ xfdesktop/trunk/src/xfdesktop-file-icon-manager.c   2007-10-20 23:58:38 UTC 
(rev 26167)
@@ -88,6 +88,7 @@
 {
     gboolean inited;
     
+    GtkWidget *desktop;
     XfdesktopIconView *icon_view;
     
     GdkScreen *gscreen;
@@ -2732,7 +2733,6 @@
     XfdesktopFileIconManager *fmanager = XFDESKTOP_FILE_ICON_MANAGER(manager);
     ThunarVfsInfo *desktop_info;
     gint i;
-    GtkWidget *toplevel;
 #ifdef HAVE_THUNARX
     ThunarxProviderFactory *thunarx_pfac;
 #endif
@@ -2741,8 +2741,8 @@
     
     fmanager->priv->icon_view = icon_view;
     
-    toplevel = gtk_widget_get_toplevel(GTK_WIDGET(icon_view));
-    g_signal_connect(G_OBJECT(toplevel), "populate-root-menu",
+    fmanager->priv->desktop = gtk_widget_get_toplevel(GTK_WIDGET(icon_view));
+    g_signal_connect(G_OBJECT(fmanager->priv->desktop), "populate-root-menu",
                      
G_CALLBACK(xfdesktop_file_icon_manager_populate_context_menu),
                      fmanager);
     
@@ -2838,7 +2838,6 @@
 {
     XfdesktopFileIconManager *fmanager = XFDESKTOP_FILE_ICON_MANAGER(manager);
     gint i;
-    GtkWidget *toplevel;
     
     g_return_if_fail(fmanager->priv->inited);
     
@@ -2876,8 +2875,7 @@
         fmanager->priv->active_trash_calls = NULL;
     }
     
-    toplevel = gtk_widget_get_toplevel(GTK_WIDGET(fmanager->priv->icon_view));
-    g_signal_handlers_disconnect_by_func(G_OBJECT(toplevel),
+    g_signal_handlers_disconnect_by_func(G_OBJECT(fmanager->priv->desktop),
                                          
G_CALLBACK(xfdesktop_file_icon_manager_populate_context_menu),
                                          fmanager);
     

Modified: xfdesktop/trunk/src/xfdesktop-window-icon-manager.c
===================================================================
--- xfdesktop/trunk/src/xfdesktop-window-icon-manager.c 2007-10-20 21:40:35 UTC 
(rev 26166)
+++ xfdesktop/trunk/src/xfdesktop-window-icon-manager.c 2007-10-20 23:58:38 UTC 
(rev 26167)
@@ -65,6 +65,9 @@
 
 struct _XfdesktopWindowIconManagerPrivate
 {
+    gboolean inited;
+    
+    GtkWidget *desktop;
     XfdesktopIconView *icon_view;
     
     GdkScreen *gscreen;
@@ -150,17 +153,12 @@
 xfdesktop_window_icon_manager_finalize(GObject *obj)
 {
     XfdesktopWindowIconManager *wmanager = XFDESKTOP_WINDOW_ICON_MANAGER(obj);
-    gint i;
     
-    if(wmanager->priv->icon_workspaces) {
-        for(i = 0; i < wmanager->priv->nworkspaces; ++i) {
-            if(wmanager->priv->icon_workspaces[i]->icons)
-                
g_hash_table_destroy(wmanager->priv->icon_workspaces[i]->icons);
-            g_free(wmanager->priv->icon_workspaces[i]);
-        }
-        g_free(wmanager->priv->icon_workspaces);
-    }
+    TRACE("entering");
     
+    if(wmanager->priv->inited)
+        
xfdesktop_window_icon_manager_fini(XFDESKTOP_ICON_VIEW_MANAGER(wmanager));
+    
     G_OBJECT_CLASS(xfdesktop_window_icon_manager_parent_class)->finalize(obj);
 }
 
@@ -528,7 +526,6 @@
     XfdesktopWindowIconManager *wmanager = 
XFDESKTOP_WINDOW_ICON_MANAGER(manager);
     GList *windows, *l;
     gint i;
-    GtkWidget *toplevel;
     
     wmanager->priv->icon_view = icon_view;
     xfdesktop_icon_view_set_selection_mode(icon_view, GTK_SELECTION_SINGLE);
@@ -536,8 +533,8 @@
                      
G_CALLBACK(xfdesktop_window_icon_manager_icon_selected_cb),
                      wmanager);
     
-    toplevel = gtk_widget_get_toplevel(GTK_WIDGET(icon_view));
-    g_signal_connect(G_OBJECT(toplevel), "populate-root-menu",
+    wmanager->priv->desktop = gtk_widget_get_toplevel(GTK_WIDGET(icon_view));
+    g_signal_connect(G_OBJECT(wmanager->priv->desktop), "populate-root-menu",
                      
G_CALLBACK(xfdesktop_window_icon_manager_populate_context_menu),
                      wmanager);
     
@@ -575,6 +572,8 @@
     
     workspace_changed_cb(wmanager->priv->netk_screen, wmanager);
     
+    wmanager->priv->inited = TRUE;
+    
     return TRUE;
 }
 
@@ -584,8 +583,11 @@
     XfdesktopWindowIconManager *wmanager = 
XFDESKTOP_WINDOW_ICON_MANAGER(manager);
     gint i;
     GList *windows, *l;
-    GtkWidget *toplevel;
     
+    TRACE("entering");
+    
+    wmanager->priv->inited = FALSE;
+    
     g_signal_handlers_disconnect_by_func(G_OBJECT(wmanager->priv->netk_screen),
                                          G_CALLBACK(workspace_changed_cb),
                                          wmanager);
@@ -599,8 +601,7 @@
                                          G_CALLBACK(workspace_destroyed_cb),
                                          wmanager);
     
-    toplevel = gtk_widget_get_toplevel(GTK_WIDGET(wmanager->priv->icon_view));
-    g_signal_handlers_disconnect_by_func(G_OBJECT(toplevel),
+    g_signal_handlers_disconnect_by_func(G_OBJECT(wmanager->priv->desktop),
                                          
G_CALLBACK(xfdesktop_window_icon_manager_populate_context_menu),
                                          wmanager);
     

_______________________________________________
Xfce4-commits mailing list
[email protected]
http://foo-projects.org/mailman/listinfo/xfce4-commits

Reply via email to