[nautilus] desktop: ensure desktop directory on application init



commit 3d254047281eb1fdcab7d9c67c70c24fb195d73d
Author: Carlos Soriano <csoriano gnome org>
Date:   Tue Mar 29 21:58:56 2016 +0200

    desktop: ensure desktop directory on application init
    
    Until now we were creating the desktop directory in a lazy way, like
    any other cached directory.
    
    However, we have the problem that at some point we have to dispatch
    between different types of files, when creating them for the cache.
    
    We cannot know when we will need to create the desktop directory for
    first time in order to discern between that type of directory, or the
    regular one.
    
    What we can do is ensure that we created the desktop directory before
    any other part of nautilus request it. In this way, we can create it
    on our subclasses of the desktop, and after that, nautilus will request
    the cache as a regular use, without the need to special case the
    desktop.
    
    For that, create the desktop directory when the desktop application
    starts, holding the reference so the cache doesn't release it, and then
    let nautilus work as expected.
    
    For that, in previous commits we moved the file dispatching to be inside
    the directory, so now any file creation happens inside the directory,
    and therefore we can control, when creating the desktop directory, what
    subclass will be called.
    
    https://bugzilla.gnome.org/show_bug.cgi?id=712620

 libnautilus-private/nautilus-directory.c |   25 ++++++++++++++++++++-----
 libnautilus-private/nautilus-directory.h |    2 ++
 src/nautilus-desktop-application.c       |    7 +++++++
 3 files changed, 29 insertions(+), 5 deletions(-)
---
diff --git a/libnautilus-private/nautilus-directory.c b/libnautilus-private/nautilus-directory.c
index 3d4f985..f28d713 100644
--- a/libnautilus-private/nautilus-directory.c
+++ b/libnautilus-private/nautilus-directory.c
@@ -33,8 +33,6 @@
 #include "nautilus-lib-self-check-functions.h"
 #include "nautilus-metadata.h"
 #include "nautilus-profile.h"
-#include "nautilus-desktop-directory.h"
-#include "nautilus-desktop-directory-file.h"
 #include "nautilus-vfs-directory.h"
 #include <eel/eel-glib-extensions.h>
 #include <eel/eel-string.h>
@@ -455,6 +453,25 @@ nautilus_directory_get_for_file (NautilusFile *file)
        return directory;
 }
 
+void
+nautilus_directory_add_to_cache (NautilusDirectory *directory)
+{
+       NautilusDirectory *existing_directory;
+       GFile *location;
+
+       location = nautilus_directory_get_location (directory);
+       existing_directory = nautilus_directory_get_existing (location);
+       if (existing_directory == NULL) {
+               /* Put it in the hash table. */
+               g_hash_table_insert (directories,
+                                    directory->details->location,
+                                    directory);
+       } else {
+               nautilus_directory_unref (existing_directory);
+       }
+}
+
+
 /* Returns a reffed NautilusFile object for this directory.
  */
 NautilusFile *
@@ -593,9 +610,7 @@ nautilus_directory_new (GFile *location)
 
        uri = g_file_get_uri (location);
 
-       if (eel_uri_is_desktop (uri)) {
-               type = NAUTILUS_TYPE_DESKTOP_DIRECTORY;
-       } else if (eel_uri_is_search (uri)) {
+       if (eel_uri_is_search (uri)) {
                type = NAUTILUS_TYPE_SEARCH_DIRECTORY;
        } else {
                type = NAUTILUS_TYPE_VFS_DIRECTORY;
diff --git a/libnautilus-private/nautilus-directory.h b/libnautilus-private/nautilus-directory.h
index de3c0d9..3fa92f2 100644
--- a/libnautilus-private/nautilus-directory.h
+++ b/libnautilus-private/nautilus-directory.h
@@ -238,6 +238,8 @@ gboolean           nautilus_directory_is_editable              (NautilusDirector
 
 void               nautilus_directory_dump                     (NautilusDirectory         *directory);
 
+void               nautilus_directory_add_to_cache             (NautilusDirectory         *directory);
+
 NautilusFile *     nautilus_directory_new_file_from_filename   (NautilusDirectory *directory,
                                                                 const char        *filename,
                                                                 gboolean           self_owned);
diff --git a/src/nautilus-desktop-application.c b/src/nautilus-desktop-application.c
index 53ab6d7..7880779 100644
--- a/src/nautilus-desktop-application.c
+++ b/src/nautilus-desktop-application.c
@@ -20,6 +20,7 @@
 
 #include "nautilus-desktop-application.h"
 #include "nautilus-desktop-window.h"
+#include "nautilus-desktop-directory.h"
 
 #include "nautilus-freedesktop-generated.h"
 
@@ -28,6 +29,7 @@
 #include <gdk/gdkx.h>
 
 static NautilusFreedesktopFileManager1 *freedesktop_proxy = NULL;
+static NautilusDirectory *desktop_directory = NULL;
 
 struct _NautilusDesktopApplication
 {
@@ -232,6 +234,11 @@ nautilus_desktop_application_class_init (NautilusDesktopApplicationClass *klass)
 static void
 nautilus_desktop_application_init (NautilusDesktopApplication *self)
 {
+  g_autoptr (GFile) desktop_location;
+
+  desktop_location = g_file_new_for_uri (EEL_DESKTOP_URI);
+  desktop_directory = g_object_new (NAUTILUS_TYPE_DESKTOP_DIRECTORY, "location", desktop_location, NULL);
+  nautilus_directory_add_to_cache (NAUTILUS_DIRECTORY (desktop_directory));
 }
 
 NautilusDesktopApplication *


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]