summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCarlos Soriano <csoriano@gnome.org>2016-03-29 21:57:59 +0200
committerCarlos Soriano <csoriano@gnome.org>2016-04-05 15:13:51 +0200
commitab9e9828d496ec488f0555649fb3611b89c0a9a3 (patch)
tree1a6a35054c8cddeacb2a0fdae96d7def006f3aa1
parent05227a80afb5b8fe5d0d4fca5c382abfafabe7f5 (diff)
downloadnautilus-ab9e9828d496ec488f0555649fb3611b89c0a9a3.tar.gz
desktop-directory: override creation of files
So we use inheritance instead of special casing, making possible to remove the desktop dependency for the creation of the desktop files.
-rw-r--r--libnautilus-private/nautilus-desktop-directory.c26
-rw-r--r--libnautilus-private/nautilus-directory.c11
2 files changed, 27 insertions, 10 deletions
diff --git a/libnautilus-private/nautilus-desktop-directory.c b/libnautilus-private/nautilus-desktop-directory.c
index 4064ed84a..2b610c20e 100644
--- a/libnautilus-private/nautilus-desktop-directory.c
+++ b/libnautilus-private/nautilus-desktop-directory.c
@@ -23,6 +23,7 @@
#include <config.h>
#include "nautilus-desktop-directory.h"
+#include "nautilus-desktop-directory-file.h"
#include "nautilus-directory-private.h"
#include "nautilus-file.h"
@@ -484,6 +485,30 @@ update_desktop_directory (NautilusDesktopDirectory *desktop)
desktop->details->real_directory = real_directory;
}
+static NautilusFile *
+real_new_file_from_filename (NautilusDirectory *directory,
+ const char *filename,
+ gboolean self_owned)
+{
+ NautilusFile *file;
+
+ g_assert (NAUTILUS_IS_DIRECTORY (directory));
+ g_assert (filename != NULL);
+ g_assert (filename[0] != '\0');
+
+ if (self_owned) {
+ file = NAUTILUS_FILE (g_object_new (NAUTILUS_TYPE_DESKTOP_DIRECTORY_FILE, NULL));
+ } else {
+ g_critical ("Accessing desktop uris directly is not supported.");
+
+ return NULL;
+ }
+
+ nautilus_file_set_directory (file, directory);
+
+ return file;
+}
+
static void
desktop_directory_changed_callback (gpointer data)
{
@@ -522,6 +547,7 @@ nautilus_desktop_directory_class_init (NautilusDesktopDirectoryClass *class)
directory_class->force_reload = desktop_force_reload;
directory_class->are_all_files_seen = desktop_are_all_files_seen;
directory_class->is_not_empty = desktop_is_not_empty;
+ directory_class->new_file_from_filename = real_new_file_from_filename;
/* Override get_file_list so that we can return the list of files
* in NautilusDesktopDirectory->details->real_directory,
* in addition to the list of standard desktop icons on the desktop.
diff --git a/libnautilus-private/nautilus-directory.c b/libnautilus-private/nautilus-directory.c
index 06cb6a738..3d4f9858b 100644
--- a/libnautilus-private/nautilus-directory.c
+++ b/libnautilus-private/nautilus-directory.c
@@ -568,16 +568,7 @@ real_new_file_from_filename (NautilusDirectory *directory,
g_assert (filename != NULL);
g_assert (filename[0] != '\0');
- if (NAUTILUS_IS_DESKTOP_DIRECTORY (directory)) {
- g_print ("DIRECTORY FILE\n");
- if (self_owned) {
- file = NAUTILUS_FILE (g_object_new (NAUTILUS_TYPE_DESKTOP_DIRECTORY_FILE, NULL));
- } else {
- /* This doesn't normally happen, unless the user somehow types in a uri
- * that references a file like this. (See #349840) */
- file = NAUTILUS_FILE (g_object_new (NAUTILUS_TYPE_VFS_FILE, NULL));
- }
- } else if (NAUTILUS_IS_SEARCH_DIRECTORY (directory)) {
+ if (NAUTILUS_IS_SEARCH_DIRECTORY (directory)) {
if (self_owned) {
file = NAUTILUS_FILE (g_object_new (NAUTILUS_TYPE_SEARCH_DIRECTORY_FILE, NULL));
} else {