[Xfce4-commits] <xfdesktop:master> Fix some runtime warnings

Eric Koegel noreply at xfce.org
Mon Jan 13 08:26:01 CET 2014


Updating branch refs/heads/master
         to ae085d7a1b961870b70e0b22916d7cae67b992eb (commit)
       from 8e84a7f57a3d3c8dfe788d537e4b14ae16d22608 (commit)

commit ae085d7a1b961870b70e0b22916d7cae67b992eb
Author: Eric Koegel <eric.koegel at gmail.com>
Date:   Sun Jan 12 15:04:02 2014 +0300

    Fix some runtime warnings
    
    This patch fixes it so that the file icon manager won't attempt to
    remove pending icons from the icon view as they won't be there yet.
    It also removes an icon migration function that shouldn't be needed
    anymore.

 src/xfdesktop-file-icon-manager.c |  102 ++++++++++++-------------------------
 1 file changed, 32 insertions(+), 70 deletions(-)

diff --git a/src/xfdesktop-file-icon-manager.c b/src/xfdesktop-file-icon-manager.c
index 857329a..a3201e6 100644
--- a/src/xfdesktop-file-icon-manager.c
+++ b/src/xfdesktop-file-icon-manager.c
@@ -502,62 +502,6 @@ xfdesktop_file_icon_manager_icon_view_manager_init(XfdesktopIconViewManagerIface
     iface->propose_drop_action = xfdesktop_file_icon_manager_propose_drop_action;
 }
 
-
-
-/* FIXME: remove this before 4.4.0; leave it for now to migrate older beta
-* installs from the old location */
-static void
-__migrate_old_icon_positions(XfdesktopFileIconManager *fmanager)
-{
-    gchar relpath[PATH_MAX], *old_file;
-    
-    g_snprintf(relpath, PATH_MAX, "xfce4/desktop/icons.screen%d-%dx%d.rc",
-               gdk_screen_get_number(fmanager->priv->gscreen),
-               gdk_screen_get_width(fmanager->priv->gscreen),
-               gdk_screen_get_height(fmanager->priv->gscreen));
-    
-    old_file = xfce_resource_save_location(XFCE_RESOURCE_CACHE, relpath, FALSE);
-    
-    if(G_UNLIKELY(old_file) && g_file_test(old_file, G_FILE_TEST_EXISTS)) {
-        gchar *new_file = xfce_resource_save_location(XFCE_RESOURCE_CONFIG,
-                                                      relpath, FALSE);
-        if(G_LIKELY(new_file)) {
-            if(rename(old_file, new_file)) {
-                /* grumble, have to do this the hard way */
-                gchar *contents = NULL;
-                gsize length = 0;
-                GError *error = NULL;
-                
-                if(g_file_get_contents(old_file, &contents, &length, &error)) {
-                    if(!g_file_set_contents(new_file, contents, length,
-                                            &error))
-                    {
-                        g_critical("Unable to write to %s: %s", new_file,
-                                   error->message);
-                        g_error_free(error);
-                    }
-
-                    g_free(contents);
-                } else {
-                    g_critical("Unable to read from %s: %s", old_file,
-                               error->message);
-                    g_error_free(error);
-                }
-            }
-        } else
-            g_critical("Unable to migrate icon position file to new location.");
-        
-        /* i debate removing the old file even if the migration failed,
-         * but i think this is the best way to avoid bug reports that
-         * aren't my problem. */
-        unlink(old_file);
-        
-        g_free(new_file);
-    }
-    
-    g_free(old_file);
-}
-
 static gboolean
 xfdesktop_file_icon_manager_check_create_desktop_folder(GFile *folder)
 {
@@ -2341,8 +2285,20 @@ xfdesktop_remove_icons_ht(gpointer key,
                           gpointer value,
                           gpointer user_data)
 {
-    xfdesktop_icon_view_remove_item(XFDESKTOP_ICON_VIEW(user_data),
-                                    XFDESKTOP_ICON(value));
+    XfdesktopFileIconManager *fmanager = XFDESKTOP_FILE_ICON_MANAGER(user_data);
+    XfdesktopIcon *icon = XFDESKTOP_ICON(value);
+    GList *item = NULL;
+
+    /* find out if the icon was pending creation */
+    if(fmanager->priv->pending_icons)
+        item = g_queue_find(fmanager->priv->pending_icons, icon);
+
+    /* Remove the icon if it was in the icon view */
+    if(item == NULL) {
+        xfdesktop_icon_view_remove_item(fmanager->priv->icon_view,
+                                        XFDESKTOP_ICON(value));
+    }
+
     return TRUE;
 }
 
@@ -2377,7 +2333,7 @@ xfdesktop_file_icon_manager_refresh_icons(XfdesktopFileIconManager *fmanager)
     if(fmanager->priv->icons) {
         g_hash_table_foreach_remove(fmanager->priv->icons,
                                     (GHRFunc)xfdesktop_remove_icons_ht,
-                                    fmanager->priv->icon_view);
+                                    fmanager);
     }
     
 #if defined(DEBUG) && DEBUG > 0
@@ -2730,12 +2686,19 @@ xfdesktop_file_icon_manager_files_ready(GFileEnumerator *enumerator,
                                         GAsyncResult *result,
                                         gpointer user_data)
 {
-    XfdesktopFileIconManager *fmanager = XFDESKTOP_FILE_ICON_MANAGER(user_data);
+    XfdesktopFileIconManager *fmanager;
     GError *error = NULL;
     GList *files, *l;
     gboolean is_hidden;
 
-    g_return_if_fail(enumerator == fmanager->priv->enumerator);
+    /* Sanity check */
+    if(user_data == NULL || !XFDESKTOP_IS_FILE_ICON_MANAGER(user_data))
+        return;
+
+    fmanager = XFDESKTOP_FILE_ICON_MANAGER(user_data);
+
+    if(enumerator != fmanager->priv->enumerator)
+        return;
 
     files = g_file_enumerator_next_files_finish(enumerator, result, &error);
 
@@ -2987,9 +2950,6 @@ xfdesktop_file_icon_manager_real_init(XfdesktopIconViewManager *manager,
     
     fmanager->priv->gscreen = gtk_widget_get_screen(GTK_WIDGET(icon_view));
     
-    /* FIXME: remove for 4.4.0 */
-    __migrate_old_icon_positions(fmanager);
-    
     if(!clipboard_manager) {
         GdkDisplay *gdpy = gdk_screen_get_display(fmanager->priv->gscreen);
         clipboard_manager = xfdesktop_clipboard_manager_get_for_display(gdpy);
@@ -3118,7 +3078,7 @@ xfdesktop_file_icon_manager_fini(XfdesktopIconViewManager *manager)
     if(fmanager->priv->icons) {
         g_hash_table_foreach_remove(fmanager->priv->icons,
                                     (GHRFunc)xfdesktop_remove_icons_ht,
-                                    fmanager->priv->icon_view);
+                                    fmanager);
     }
 
     /* Stop the idle callback adding pending icons */
@@ -3135,11 +3095,13 @@ xfdesktop_file_icon_manager_fini(XfdesktopIconViewManager *manager)
     }
     
     /* disconnect from the file monitor and release it */
-    g_signal_handlers_disconnect_by_func(fmanager->priv->monitor,
-                                         G_CALLBACK(xfdesktop_file_icon_manager_file_changed),
-                                         fmanager);
-    g_object_unref(fmanager->priv->monitor);
-    fmanager->priv->monitor = NULL;
+    if(fmanager->priv->monitor) {
+        g_signal_handlers_disconnect_by_func(fmanager->priv->monitor,
+                                             G_CALLBACK(xfdesktop_file_icon_manager_file_changed),
+                                             fmanager);
+        g_object_unref(fmanager->priv->monitor);
+        fmanager->priv->monitor = NULL;
+    }
     
     g_object_unref(G_OBJECT(fmanager->priv->desktop_icon));
     fmanager->priv->desktop_icon = NULL;


More information about the Xfce4-commits mailing list