[Xfce4-commits] r23649 - xfdesktop/trunk/src

Brian Tarricone kelnos at xfce.org
Sat Nov 4 14:13:21 CET 2006


Author: kelnos
Date: 2006-11-04 13:13:21 +0000 (Sat, 04 Nov 2006)
New Revision: 23649

Modified:
   xfdesktop/trunk/src/xfdesktop-file-icon-manager.c
Log:
if ~/Desktop disappears, reload and try to recreate it.  should hopefully fix
100% CPU issue (bug 2160)


Modified: xfdesktop/trunk/src/xfdesktop-file-icon-manager.c
===================================================================
--- xfdesktop/trunk/src/xfdesktop-file-icon-manager.c	2006-11-04 13:12:21 UTC (rev 23648)
+++ xfdesktop/trunk/src/xfdesktop-file-icon-manager.c	2006-11-04 13:13:21 UTC (rev 23649)
@@ -77,46 +77,6 @@
 #define BORDER     8
 
 
-static void xfdesktop_file_icon_manager_set_property(GObject *object,
-                                                     guint property_id,
-                                                     const GValue *value,
-                                                     GParamSpec *pspec);
-static void xfdesktop_file_icon_manager_get_property(GObject *object,
-                                                     guint property_id,
-                                                     GValue *value,
-                                                     GParamSpec *pspec);
-static void xfdesktop_file_icon_manager_finalize(GObject *obj);
-static void xfdesktop_file_icon_manager_icon_view_manager_init(XfdesktopIconViewManagerIface *iface);
-
-static gboolean xfdesktop_file_icon_manager_real_init(XfdesktopIconViewManager *manager,
-                                                      XfdesktopIconView *icon_view);
-static void xfdesktop_file_icon_manager_fini(XfdesktopIconViewManager *manager);
-
-static gboolean xfdesktop_file_icon_manager_drag_drop(XfdesktopIconViewManager *manager,
-                                                      XfdesktopIcon *drop_icon,
-                                                      GdkDragContext *context,
-                                                      guint16 row,
-                                                      guint16 col,
-                                                      guint time);
-static void xfdesktop_file_icon_manager_drag_data_received(XfdesktopIconViewManager *manager,
-                                                           XfdesktopIcon *drop_icon,
-                                                           GdkDragContext *context,
-                                                           guint16 row,
-                                                           guint16 col,
-                                                           GtkSelectionData *data,
-                                                           guint info,
-                                                           guint time);
-static void xfdesktop_file_icon_manager_drag_data_get(XfdesktopIconViewManager *manager,
-                                                      GList *drag_icons,
-                                                      GdkDragContext *context,
-                                                      GtkSelectionData *data,
-                                                      guint info,
-                                                      guint time);
-
-static void xfdesktop_file_icon_manager_load_desktop_folder(XfdesktopFileIconManager *fmanager);
-static void xfdesktop_file_icon_manager_load_removable_media(XfdesktopFileIconManager *fmanager);
-static void xfdesktop_file_icon_manager_remove_removable_media(XfdesktopFileIconManager *fmanager);
-
 enum
 {
     PROP0 = 0,
@@ -160,7 +120,48 @@
 #endif
 };
 
+static void xfdesktop_file_icon_manager_set_property(GObject *object,
+                                                     guint property_id,
+                                                     const GValue *value,
+                                                     GParamSpec *pspec);
+static void xfdesktop_file_icon_manager_get_property(GObject *object,
+                                                     guint property_id,
+                                                     GValue *value,
+                                                     GParamSpec *pspec);
+static void xfdesktop_file_icon_manager_finalize(GObject *obj);
+static void xfdesktop_file_icon_manager_icon_view_manager_init(XfdesktopIconViewManagerIface *iface);
 
+static gboolean xfdesktop_file_icon_manager_real_init(XfdesktopIconViewManager *manager,
+                                                      XfdesktopIconView *icon_view);
+static void xfdesktop_file_icon_manager_fini(XfdesktopIconViewManager *manager);
+
+static gboolean xfdesktop_file_icon_manager_drag_drop(XfdesktopIconViewManager *manager,
+                                                      XfdesktopIcon *drop_icon,
+                                                      GdkDragContext *context,
+                                                      guint16 row,
+                                                      guint16 col,
+                                                      guint time);
+static void xfdesktop_file_icon_manager_drag_data_received(XfdesktopIconViewManager *manager,
+                                                           XfdesktopIcon *drop_icon,
+                                                           GdkDragContext *context,
+                                                           guint16 row,
+                                                           guint16 col,
+                                                           GtkSelectionData *data,
+                                                           guint info,
+                                                           guint time);
+static void xfdesktop_file_icon_manager_drag_data_get(XfdesktopIconViewManager *manager,
+                                                      GList *drag_icons,
+                                                      GdkDragContext *context,
+                                                      GtkSelectionData *data,
+                                                      guint info,
+                                                      guint time);
+
+static gboolean xfdesktop_file_icon_manager_check_create_desktop_folder(ThunarVfsPath *path);
+static void xfdesktop_file_icon_manager_load_desktop_folder(XfdesktopFileIconManager *fmanager);
+static void xfdesktop_file_icon_manager_load_removable_media(XfdesktopFileIconManager *fmanager);
+static void xfdesktop_file_icon_manager_remove_removable_media(XfdesktopFileIconManager *fmanager);
+
+
 G_DEFINE_TYPE_EXTENDED(XfdesktopFileIconManager,
                        xfdesktop_file_icon_manager,
                        G_TYPE_OBJECT, 0,
@@ -248,33 +249,8 @@
     switch(property_id) {
         case PROP_FOLDER:
             fmanager->priv->folder = thunar_vfs_path_ref((ThunarVfsPath *)g_value_get_boxed(value));
-            if(fmanager->priv->folder) {
-                gchar *pathname = thunar_vfs_path_dup_string(fmanager->priv->folder);
-                if(!g_file_test(pathname, G_FILE_TEST_EXISTS)) {
-                    /* would prefer to use thunar_vfs_make_directory() here,
-                     * but i don't want to use an async operation */
-                    if(mkdir(pathname, 0700)) {
-                        gchar *primary = g_markup_printf_escaped(_("Xfdesktop was unable to create the folder \"%s\" to store desktop items:"),
-                                                                 pathname);
-                        xfce_message_dialog(NULL, _("Create Folder Failed"),
-                                            GTK_STOCK_DIALOG_WARNING, primary,
-                                            strerror(errno), GTK_STOCK_CLOSE,
-                                            GTK_RESPONSE_ACCEPT, NULL);
-                        g_free(primary);
-                    }
-                } else if(!g_file_test(pathname, G_FILE_TEST_IS_DIR)) {
-                    gchar *primary = g_markup_printf_escaped(_("Xfdesktop is unable to use \"%s\" to hold desktop items because it is not a folder."),
-                                                             pathname);
-                    xfce_message_dialog(NULL, _("Create Folder Failed"),
-                                        GTK_STOCK_DIALOG_WARNING, primary,
-                                        _("Please delete or rename the file."),
-                                        GTK_STOCK_CLOSE, GTK_RESPONSE_ACCEPT,
-                                        NULL);
-                    g_free(primary);
-                }
-                
-                g_free(pathname);
-            }
+            if(fmanager->priv->folder)
+                xfdesktop_file_icon_manager_check_create_desktop_folder(fmanager->priv->folder);
             break;
         
         default:
@@ -327,6 +303,7 @@
 }
 
 
+
 /* FIXME: remove this before 4.4.0; leave it for now to migrate older beta
 * installs from the old location */
 static void
@@ -393,7 +370,48 @@
     g_free(old_file);
 }
 
+static gboolean
+xfdesktop_file_icon_manager_check_create_desktop_folder(ThunarVfsPath *path)
+{
+    gboolean ret = TRUE;
+    gchar *pathname;
+    
+    g_return_val_if_fail(path, FALSE);
+    
+    pathname = thunar_vfs_path_dup_string(path);
+    if(!g_file_test(pathname, G_FILE_TEST_EXISTS)) {
+        /* would prefer to use thunar_vfs_make_directory() here,
+         * but i don't want to use an async operation */
+        if(mkdir(pathname, 0700)) {
+            gchar *primary = g_markup_printf_escaped(_("Xfdesktop was unable to create the folder \"%s\" to store desktop items:"),
+                                                     pathname);
+            xfce_message_dialog(NULL, _("Create Folder Failed"),
+                                GTK_STOCK_DIALOG_WARNING, primary,
+                                strerror(errno), GTK_STOCK_CLOSE,
+                                GTK_RESPONSE_ACCEPT, NULL);
+            g_free(primary);
+            
+            ret = FALSE;
+        }
+    } else if(!g_file_test(pathname, G_FILE_TEST_IS_DIR)) {
+        gchar *primary = g_markup_printf_escaped(_("Xfdesktop is unable to use \"%s\" to hold desktop items because it is not a folder."),
+                                                 pathname);
+        xfce_message_dialog(NULL, _("Create Folder Failed"),
+                            GTK_STOCK_DIALOG_WARNING, primary,
+                            _("Please delete or rename the file."),
+                            GTK_STOCK_CLOSE, GTK_RESPONSE_ACCEPT,
+                            NULL);
+        g_free(primary);
+        
+        ret = FALSE;
+    }
+    
+    g_free(pathname);
+    
+    return ret;
+}
 
+
 /* icon signal handlers */
 
 static void
@@ -2417,6 +2435,15 @@
                 xfdesktop_icon_view_remove_item(fmanager->priv->icon_view,
                                                 XFDESKTOP_ICON(icon));
                 g_hash_table_remove(fmanager->priv->icons, event_path);
+            } else {
+                const ThunarVfsInfo *info = xfdesktop_file_icon_peek_info(fmanager->priv->desktop_icon);
+                if(!info || thunar_vfs_path_equal(event_path, info->path)) {
+                    DBG("~/Desktop disappeared!");
+                    /* yes, refresh before and after is correct */
+                    xfdesktop_file_icon_manager_refresh_icons(fmanager);
+                    xfdesktop_file_icon_manager_check_create_desktop_folder(fmanager->priv->folder);
+                    xfdesktop_file_icon_manager_refresh_icons(fmanager);
+                }
             }
             break;
         



More information about the Xfce4-commits mailing list