b818ebdd96db2308e12dacafa33eb3a7ab4616f6
[gentoo.git] /
1 Adjusted to build against 1.6.3 by removing the is_navigation boolean.
2
3 From 4f1e756e08e61840eb9a52de4debee30006ea31e Mon Sep 17 00:00:00 2001
4 From: Stefano Karapetsas <stefano@karapetsas.com>
5 Date: Tue, 18 Mar 2014 18:16:45 +0100
6 Subject: [PATCH] Possible solution for x-caja-desktop issue
7
8 ---
9  src/caja-application.c         | 14 +++++++++++---
10  src/caja-window-manage-views.c | 18 +++++++++++++-----
11  2 files changed, 24 insertions(+), 8 deletions(-)
12
13 diff --git a/src/caja-application.c b/src/caja-application.c
14 index 3f4282c..47c86c8 100644
15 --- a/src/caja-application.c
16 +++ b/src/caja-application.c
17 @@ -961,6 +961,15 @@ static void     drive_listen_for_eject_button      (GDrive *drive,
18      }
19  }
20  
21 +static gboolean
22 +desktop_changed_callback_connect (CajaApplication *application)
23 +{
24 +    g_signal_connect_swapped (caja_preferences, "changed::" CAJA_PREFERENCES_DESKTOP_IS_HOME_DIR,
25 +                              G_CALLBACK(desktop_location_changed_callback),
26 +                              G_OBJECT (application));
27 +    return FALSE;
28 +}
29 +
30  void
31  caja_application_startup (CajaApplication *application,
32                            gboolean kill_shell,
33 @@ -1029,9 +1038,8 @@ static void     drive_listen_for_eject_button      (GDrive *drive,
34  
35          /* Monitor the preference to have the desktop */
36          /* point to the Unix home folder */
37 -        g_signal_connect_swapped (caja_preferences, "changed::" CAJA_PREFERENCES_DESKTOP_IS_HOME_DIR,
38 -                                  G_CALLBACK(desktop_location_changed_callback),
39 -                                  G_OBJECT (application));
40 +        g_timeout_add_seconds (30, (GSourceFunc) desktop_changed_callback_connect, application);
41 +
42          /* Create the other windows. */
43          if (urls != NULL || !no_default_window)
44          {
45 diff --git a/src/caja-window-manage-views.c b/src/caja-window-manage-views.c
46 index c7918e6..616e85b 100644
47 --- a/src/caja-window-manage-views.c
48 +++ b/src/caja-window-manage-views.c
49 @@ -49,6 +49,7 @@
50  #include <eel/eel-gtk-macros.h>
51  #include <eel/eel-stock-dialogs.h>
52  #include <eel/eel-string.h>
53 +#include <eel/eel-vfs-extensions.h>
54  #include <gtk/gtk.h>
55  #include <gdk/gdkx.h>
56  #include <glib/gi18n.h>
57 @@ -527,8 +528,9 @@ static void load_new_location                         (CajaWindowSlot         *s
58      char *old_uri, *new_uri;
59      int new_slot_position;
60      GList *l;
61 -    gboolean target_navigation = FALSE, target_same = FALSE;
62 -    gboolean is_desktop;
63 +    gboolean target_navigation = FALSE;
64 +    gboolean target_same = FALSE;
65 +    gboolean is_desktop = FALSE;
66  
67      window = slot->pane->window;
68  
69 @@ -567,7 +570,12 @@ static void load_new_location                         (CajaWindowSlot         *s
70              * otherwise it's the same window.
71              */
72              if (is_desktop) {
73 -               target_navigation = TRUE;
74 +                new_uri = g_file_get_uri (location);
75 +                if (g_str_has_prefix (new_uri, EEL_DESKTOP_URI))
76 +                    target_same = TRUE;
77 +                else
78 +                    target_navigation = TRUE;
79 +                g_free (new_uri);
80              } else {
81                 target_same = TRUE;
82              }
83 @@ -676,7 +684,7 @@ static void load_new_location                         (CajaWindowSlot         *s
84          }
85      }
86  
87 -    if ((target_window == window && target_slot == slot &&
88 +    if (!(is_desktop && target_same) && (target_window == window && target_slot == slot &&
89               old_location && g_file_equal (old_location, location))) {
90  
91          if (callback != NULL) {
92 @@ -688,7 +696,7 @@ static void load_new_location                         (CajaWindowSlot         *s
93      }
94  
95      begin_location_change (target_slot, location, old_location, new_selection,
96 -                           CAJA_LOCATION_CHANGE_STANDARD, 0, NULL, callback, user_data);
97 +                           (is_desktop && target_same) ? CAJA_LOCATION_CHANGE_RELOAD : CAJA_LOCATION_CHANGE_STANDARD, 0, NULL, callback, user_data);
98  
99      /* Additionally, load this in all slots that have no location, this means
100         we load both panes in e.g. a newly opened dual pane window. */
101 -- 
102 1.9.1
103