summaryrefslogtreecommitdiff
path: root/community/caja/4f1e756e08e61840eb9a52de4debee30006ea31e.diff
blob: 0ab9e1febfc0cf718b1f2aadd86fbc3ecd7afe90 (plain)
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
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
diff --git a/src/caja-application.c b/src/caja-application.c
index 3f4282c..47c86c8 100644
--- a/src/caja-application.c
+++ b/src/caja-application.c
@@ -961,6 +961,15 @@ queue_accel_map_save_callback (GtkAccelMap *object, gchar *accel_path,
     }
 }
 
+static gboolean
+desktop_changed_callback_connect (CajaApplication *application)
+{
+    g_signal_connect_swapped (caja_preferences, "changed::" CAJA_PREFERENCES_DESKTOP_IS_HOME_DIR,
+                              G_CALLBACK(desktop_location_changed_callback),
+                              G_OBJECT (application));
+    return FALSE;
+}
+
 void
 caja_application_startup (CajaApplication *application,
                           gboolean kill_shell,
@@ -1029,9 +1038,8 @@ caja_application_startup (CajaApplication *application,
 
         /* Monitor the preference to have the desktop */
         /* point to the Unix home folder */
-        g_signal_connect_swapped (caja_preferences, "changed::" CAJA_PREFERENCES_DESKTOP_IS_HOME_DIR,
-                                  G_CALLBACK(desktop_location_changed_callback),
-                                  G_OBJECT (application));
+        g_timeout_add_seconds (30, (GSourceFunc) desktop_changed_callback_connect, application);
+
         /* Create the other windows. */
         if (urls != NULL || !no_default_window)
         {
diff --git a/src/caja-window-manage-views.c b/src/caja-window-manage-views.c
index c7918e6..616e85b 100644
--- a/src/caja-window-manage-views.c
+++ b/src/caja-window-manage-views.c
@@ -49,6 +49,7 @@
 #include <eel/eel-gtk-macros.h>
 #include <eel/eel-stock-dialogs.h>
 #include <eel/eel-string.h>
+#include <eel/eel-vfs-extensions.h>
 #include <gtk/gtk.h>
 #include <gdk/gdkx.h>
 #include <glib/gi18n.h>
@@ -527,8 +528,10 @@ caja_window_slot_open_location_full (CajaWindowSlot *slot,
     char *old_uri, *new_uri;
     int new_slot_position;
     GList *l;
-    gboolean target_navigation = FALSE, target_same = FALSE;
-    gboolean is_desktop, is_navigation;
+    gboolean target_navigation = FALSE;
+    gboolean target_same = FALSE;
+    gboolean is_desktop = FALSE;
+    gboolean is_navigation = FALSE;
 
     window = slot->pane->window;
 
@@ -567,7 +570,12 @@ caja_window_slot_open_location_full (CajaWindowSlot *slot,
             * otherwise it's the same window.
             */
             if (is_desktop) {
-            	target_navigation = TRUE;
+                new_uri = g_file_get_uri (location);
+                if (g_str_has_prefix (new_uri, EEL_DESKTOP_URI))
+                    target_same = TRUE;
+                else
+                    target_navigation = TRUE;
+                g_free (new_uri);
             } else {
             	target_same = TRUE;
             }
@@ -676,7 +684,7 @@ caja_window_slot_open_location_full (CajaWindowSlot *slot,
         }
     }
 
-    if ((target_window == window && target_slot == slot &&
+    if (!(is_desktop && target_same) && (target_window == window && target_slot == slot &&
              old_location && g_file_equal (old_location, location))) {
 
         if (callback != NULL) {
@@ -688,7 +696,7 @@ caja_window_slot_open_location_full (CajaWindowSlot *slot,
     }
 
     begin_location_change (target_slot, location, old_location, new_selection,
-                           CAJA_LOCATION_CHANGE_STANDARD, 0, NULL, callback, user_data);
+                           (is_desktop && target_same) ? CAJA_LOCATION_CHANGE_RELOAD : CAJA_LOCATION_CHANGE_STANDARD, 0, NULL, callback, user_data);
 
     /* Additionally, load this in all slots that have no location, this means
        we load both panes in e.g. a newly opened dual pane window. */