summaryrefslogtreecommitdiff
path: root/src/nautilus-file-utilities.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/nautilus-file-utilities.c')
-rw-r--r--src/nautilus-file-utilities.c1745
1 files changed, 939 insertions, 806 deletions
diff --git a/src/nautilus-file-utilities.c b/src/nautilus-file-utilities.c
index 6ed4127a0..4a9100fa2 100644
--- a/src/nautilus-file-utilities.c
+++ b/src/nautilus-file-utilities.c
@@ -1,24 +1,23 @@
-
/* nautilus-file-utilities.c - implementation of file manipulation routines.
-
- Copyright (C) 1999, 2000, 2001 Eazel, Inc.
-
- The Gnome Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Library General Public License as
- published by the Free Software Foundation; either version 2 of the
- License, or (at your option) any later version.
-
- The Gnome Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Library General Public License for more details.
-
- You should have received a copy of the GNU Library General Public
- License along with the Gnome Library; see the file COPYING.LIB. If not,
- see <http://www.gnu.org/licenses/>.
-
- Authors: John Sullivan <sullivan@eazel.com>
-*/
+ *
+ * Copyright (C) 1999, 2000, 2001 Eazel, Inc.
+ *
+ * The Gnome Library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public License as
+ * published by the Free Software Foundation; either version 2 of the
+ * License, or (at your option) any later version.
+ *
+ * The Gnome Library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with the Gnome Library; see the file COPYING.LIB. If not,
+ * see <http://www.gnu.org/licenses/>.
+ *
+ * Authors: John Sullivan <sullivan@eazel.com>
+ */
#include <config.h>
#include "nautilus-file-utilities.h"
@@ -52,255 +51,301 @@
/* This or something equivalent will eventually go into glib/guri.h */
gboolean
nautilus_uri_parse (const char *uri,
- char **host,
- guint16 *port,
- char **userinfo)
+ char **host,
+ guint16 *port,
+ char **userinfo)
{
- char *tmp_str;
- const char *start, *p;
- char c;
-
- g_return_val_if_fail (uri != NULL, FALSE);
-
- if (host)
- *host = NULL;
+ char *tmp_str;
+ const char *start, *p;
+ char c;
- if (port)
- *port = 0;
+ g_return_val_if_fail (uri != NULL, FALSE);
- if (userinfo)
- *userinfo = NULL;
+ if (host)
+ {
+ *host = NULL;
+ }
- /* From RFC 3986 Decodes:
- * URI = scheme ":" hier-part [ "?" query ] [ "#" fragment ]
- * hier-part = "//" authority path-abempty
- * path-abempty = *( "/" segment )
- * authority = [ userinfo "@" ] host [ ":" port ]
- */
+ if (port)
+ {
+ *port = 0;
+ }
- /* Check we have a valid scheme */
- tmp_str = g_uri_parse_scheme (uri);
+ if (userinfo)
+ {
+ *userinfo = NULL;
+ }
- if (tmp_str == NULL)
- return FALSE;
+ /* From RFC 3986 Decodes:
+ * URI = scheme ":" hier-part [ "?" query ] [ "#" fragment ]
+ * hier-part = "//" authority path-abempty
+ * path-abempty = *( "/" segment )
+ * authority = [ userinfo "@" ] host [ ":" port ]
+ */
- g_free (tmp_str);
+ /* Check we have a valid scheme */
+ tmp_str = g_uri_parse_scheme (uri);
- /* Decode hier-part:
- * hier-part = "//" authority path-abempty
- */
- p = uri;
- start = strstr (p, "//");
+ if (tmp_str == NULL)
+ {
+ return FALSE;
+ }
- if (start == NULL)
- return FALSE;
+ g_free (tmp_str);
- start += 2;
+ /* Decode hier-part:
+ * hier-part = "//" authority path-abempty
+ */
+ p = uri;
+ start = strstr (p, "//");
- if (strchr (start, '@') != NULL)
+ if (start == NULL)
{
- /* Decode userinfo:
- * userinfo = *( unreserved / pct-encoded / sub-delims / ":" )
- * unreserved = ALPHA / DIGIT / "-" / "." / "_" / "~"
- * pct-encoded = "%" HEXDIG HEXDIG
- */
- p = start;
- while (1)
- {
- c = *p++;
+ return FALSE;
+ }
- if (c == '@')
- break;
+ start += 2;
- /* pct-encoded */
- if (c == '%')
- {
- if (!(g_ascii_isxdigit (p[0]) ||
- g_ascii_isxdigit (p[1])))
- return FALSE;
+ if (strchr (start, '@') != NULL)
+ {
+ /* Decode userinfo:
+ * userinfo = *( unreserved / pct-encoded / sub-delims / ":" )
+ * unreserved = ALPHA / DIGIT / "-" / "." / "_" / "~"
+ * pct-encoded = "%" HEXDIG HEXDIG
+ */
+ p = start;
+ while (1)
+ {
+ c = *p++;
+
+ if (c == '@')
+ {
+ break;
+ }
+
+ /* pct-encoded */
+ if (c == '%')
+ {
+ if (!(g_ascii_isxdigit (p[0]) ||
+ g_ascii_isxdigit (p[1])))
+ {
+ return FALSE;
+ }
- p++;
+ p++;
- continue;
- }
+ continue;
+ }
- /* unreserved / sub-delims / : */
- if (!(g_ascii_isalnum (c) ||
- strchr (G_URI_OTHER_UNRESERVED, c) ||
- strchr (G_URI_RESERVED_CHARS_SUBCOMPONENT_DELIMITERS, c) ||
- c == ':'))
- return FALSE;
- }
+ /* unreserved / sub-delims / : */
+ if (!(g_ascii_isalnum (c) ||
+ strchr (G_URI_OTHER_UNRESERVED, c) ||
+ strchr (G_URI_RESERVED_CHARS_SUBCOMPONENT_DELIMITERS, c) ||
+ c == ':'))
+ {
+ return FALSE;
+ }
+ }
- if (userinfo)
- *userinfo = g_strndup (start, p - start - 1);
+ if (userinfo)
+ {
+ *userinfo = g_strndup (start, p - start - 1);
+ }
- start = p;
+ start = p;
}
- else
+ else
{
- p = start;
+ p = start;
}
- /* decode host:
- * host = IP-literal / IPv4address / reg-name
- * reg-name = *( unreserved / pct-encoded / sub-delims )
- */
+ /* decode host:
+ * host = IP-literal / IPv4address / reg-name
+ * reg-name = *( unreserved / pct-encoded / sub-delims )
+ */
- /* If IPv6 or IPvFuture */
- if (*p == '[')
+ /* If IPv6 or IPvFuture */
+ if (*p == '[')
{
- start++;
- p++;
- while (1)
- {
- c = *p++;
-
- if (c == ']')
- break;
-
- /* unreserved / sub-delims */
- if (!(g_ascii_isalnum (c) ||
- strchr (G_URI_OTHER_UNRESERVED, c) ||
- strchr (G_URI_RESERVED_CHARS_SUBCOMPONENT_DELIMITERS, c) ||
- c == ':' ||
- c == '.'))
- goto error;
- }
+ start++;
+ p++;
+ while (1)
+ {
+ c = *p++;
+
+ if (c == ']')
+ {
+ break;
+ }
+
+ /* unreserved / sub-delims */
+ if (!(g_ascii_isalnum (c) ||
+ strchr (G_URI_OTHER_UNRESERVED, c) ||
+ strchr (G_URI_RESERVED_CHARS_SUBCOMPONENT_DELIMITERS, c) ||
+ c == ':' ||
+ c == '.'))
+ {
+ goto error;
+ }
+ }
}
- else
+ else
{
- while (1)
- {
- c = *p++;
-
- if (c == ':' ||
- c == '/' ||
- c == '?' ||
- c == '#' ||
- c == '\0')
- break;
-
- /* pct-encoded */
- if (c == '%')
- {
- if (!(g_ascii_isxdigit (p[0]) ||
- g_ascii_isxdigit (p[1])))
- goto error;
+ while (1)
+ {
+ c = *p++;
+
+ if (c == ':' ||
+ c == '/' ||
+ c == '?' ||
+ c == '#' ||
+ c == '\0')
+ {
+ break;
+ }
+
+ /* pct-encoded */
+ if (c == '%')
+ {
+ if (!(g_ascii_isxdigit (p[0]) ||
+ g_ascii_isxdigit (p[1])))
+ {
+ goto error;
+ }
- p++;
+ p++;
- continue;
- }
+ continue;
+ }
- /* unreserved / sub-delims */
- if (!(g_ascii_isalnum (c) ||
- strchr (G_URI_OTHER_UNRESERVED, c) ||
- strchr (G_URI_RESERVED_CHARS_SUBCOMPONENT_DELIMITERS, c)))
- goto error;
- }
+ /* unreserved / sub-delims */
+ if (!(g_ascii_isalnum (c) ||
+ strchr (G_URI_OTHER_UNRESERVED, c) ||
+ strchr (G_URI_RESERVED_CHARS_SUBCOMPONENT_DELIMITERS, c)))
+ {
+ goto error;
+ }
+ }
}
- if (host)
- *host = g_uri_unescape_segment (start, p - 1, NULL);
-
- if (c == ':')
+ if (host)
{
- /* Decode pot:
- * port = *DIGIT
- */
- guint tmp = 0;
-
- while (1)
- {
- c = *p++;
-
- if (c == '/' ||
- c == '?' ||
- c == '#' ||
- c == '\0')
- break;
-
- if (!g_ascii_isdigit (c))
- goto error;
-
- tmp = (tmp * 10) + (c - '0');
+ *host = g_uri_unescape_segment (start, p - 1, NULL);
+ }
- if (tmp > 65535)
- goto error;
- }
- if (port)
- *port = (guint16) tmp;
+ if (c == ':')
+ {
+ /* Decode pot:
+ * port = *DIGIT
+ */
+ guint tmp = 0;
+
+ while (1)
+ {
+ c = *p++;
+
+ if (c == '/' ||
+ c == '?' ||
+ c == '#' ||
+ c == '\0')
+ {
+ break;
+ }
+
+ if (!g_ascii_isdigit (c))
+ {
+ goto error;
+ }
+
+ tmp = (tmp * 10) + (c - '0');
+
+ if (tmp > 65535)
+ {
+ goto error;
+ }
+ }
+ if (port)
+ {
+ *port = (guint16) tmp;
+ }
}
- return TRUE;
+ return TRUE;
error:
- if (host && *host)
+ if (host && *host)
{
- g_free (*host);
- *host = NULL;
+ g_free (*host);
+ *host = NULL;
}
- if (userinfo && *userinfo)
+ if (userinfo && *userinfo)
{
- g_free (*userinfo);
- *userinfo = NULL;
+ g_free (*userinfo);
+ *userinfo = NULL;
}
- return FALSE;
+ return FALSE;
}
char *
nautilus_compute_title_for_location (GFile *location)
{
- NautilusFile *file;
- GMount *mount;
- char *title;
+ NautilusFile *file;
+ GMount *mount;
+ char *title;
- /* TODO-gio: This doesn't really work all that great if the
- info about the file isn't known atm... */
+ /* TODO-gio: This doesn't really work all that great if the
+ * info about the file isn't known atm... */
- if (nautilus_is_home_directory (location)) {
- return g_strdup (_("Home"));
- }
+ if (nautilus_is_home_directory (location))
+ {
+ return g_strdup (_("Home"));
+ }
+
+ if ((mount = nautilus_get_mounted_mount_for_root (location)) != NULL)
+ {
+ title = g_mount_get_name (mount);
+
+ g_object_unref (mount);
- if ((mount = nautilus_get_mounted_mount_for_root (location)) != NULL) {
- title = g_mount_get_name(mount);
+ return title;
+ }
- g_object_unref(mount);
+ title = NULL;
+ if (location)
+ {
+ file = nautilus_file_get (location);
- return title;
+ if (nautilus_file_is_other_locations (file))
+ {
+ title = g_strdup (_("Other Locations"));
}
-
- title = NULL;
- if (location) {
- file = nautilus_file_get (location);
-
- if (nautilus_file_is_other_locations (file)) {
- title = g_strdup (_("Other Locations"));
- } else {
- title = nautilus_file_get_description (file);
-
- if (title == NULL) {
- title = nautilus_file_get_display_name (file);
- }
- }
- nautilus_file_unref (file);
- }
-
- if (title == NULL) {
- title = g_file_get_basename (location);
- }
-
- return title;
+ else
+ {
+ title = nautilus_file_get_description (file);
+
+ if (title == NULL)
+ {
+ title = nautilus_file_get_display_name (file);
+ }
+ }
+ nautilus_file_unref (file);
+ }
+
+ if (title == NULL)
+ {
+ title = g_file_get_basename (location);
+ }
+
+ return title;
}
/**
* nautilus_get_user_directory:
- *
+ *
* Get the path for the directory containing nautilus settings.
*
* Return value: the directory path.
@@ -308,24 +353,25 @@ nautilus_compute_title_for_location (GFile *location)
char *
nautilus_get_user_directory (void)
{
- char *user_directory = NULL;
-
- user_directory = g_build_filename (g_get_user_config_dir (),
- NAUTILUS_USER_DIRECTORY_NAME,
- NULL);
-
- if (!g_file_test (user_directory, G_FILE_TEST_EXISTS)) {
- g_mkdir (user_directory, DEFAULT_NAUTILUS_DIRECTORY_MODE);
- /* FIXME bugzilla.gnome.org 41286:
- * How should we handle the case where this mkdir fails?
- * Note that nautilus_application_startup will refuse to launch if this
- * directory doesn't get created, so that case is OK. But the directory
- * could be deleted after Nautilus was launched, and perhaps
- * there is some bad side-effect of not handling that case.
- */
- }
-
- return user_directory;
+ char *user_directory = NULL;
+
+ user_directory = g_build_filename (g_get_user_config_dir (),
+ NAUTILUS_USER_DIRECTORY_NAME,
+ NULL);
+
+ if (!g_file_test (user_directory, G_FILE_TEST_EXISTS))
+ {
+ g_mkdir (user_directory, DEFAULT_NAUTILUS_DIRECTORY_MODE);
+ /* FIXME bugzilla.gnome.org 41286:
+ * How should we handle the case where this mkdir fails?
+ * Note that nautilus_application_startup will refuse to launch if this
+ * directory doesn't get created, so that case is OK. But the directory
+ * could be deleted after Nautilus was launched, and perhaps
+ * there is some bad side-effect of not handling that case.
+ */
+ }
+
+ return user_directory;
}
/**
@@ -338,25 +384,26 @@ nautilus_get_user_directory (void)
char *
nautilus_get_scripts_directory_path (void)
{
- return g_build_filename (g_get_user_data_dir (), "nautilus", "scripts", NULL);
+ return g_build_filename (g_get_user_data_dir (), "nautilus", "scripts", NULL);
}
static const char *
get_desktop_path (void)
{
- const char *desktop_path;
+ const char *desktop_path;
- desktop_path = g_get_user_special_dir (G_USER_DIRECTORY_DESKTOP);
- if (desktop_path == NULL) {
- desktop_path = g_get_home_dir ();
- }
+ desktop_path = g_get_user_special_dir (G_USER_DIRECTORY_DESKTOP);
+ if (desktop_path == NULL)
+ {
+ desktop_path = g_get_home_dir ();
+ }
- return desktop_path;
+ return desktop_path;
}
/**
* nautilus_get_desktop_directory:
- *
+ *
* Get the path for the directory containing files on the desktop.
*
* Return value: the directory path.
@@ -364,34 +411,35 @@ get_desktop_path (void)
char *
nautilus_get_desktop_directory (void)
{
- const char *desktop_directory;
-
- desktop_directory = get_desktop_path ();
-
- /* Don't try to create a home directory */
- if (!g_file_test (desktop_directory, G_FILE_TEST_EXISTS)) {
- g_mkdir (desktop_directory, DEFAULT_DESKTOP_DIRECTORY_MODE);
- /* FIXME bugzilla.gnome.org 41286:
- * How should we handle the case where this mkdir fails?
- * Note that nautilus_application_startup will refuse to launch if this
- * directory doesn't get created, so that case is OK. But the directory
- * could be deleted after Nautilus was launched, and perhaps
- * there is some bad side-effect of not handling that case.
- */
- }
-
- return g_strdup (desktop_directory);
+ const char *desktop_directory;
+
+ desktop_directory = get_desktop_path ();
+
+ /* Don't try to create a home directory */
+ if (!g_file_test (desktop_directory, G_FILE_TEST_EXISTS))
+ {
+ g_mkdir (desktop_directory, DEFAULT_DESKTOP_DIRECTORY_MODE);
+ /* FIXME bugzilla.gnome.org 41286:
+ * How should we handle the case where this mkdir fails?
+ * Note that nautilus_application_startup will refuse to launch if this
+ * directory doesn't get created, so that case is OK. But the directory
+ * could be deleted after Nautilus was launched, and perhaps
+ * there is some bad side-effect of not handling that case.
+ */
+ }
+
+ return g_strdup (desktop_directory);
}
GFile *
nautilus_get_desktop_location (void)
{
- return g_file_new_for_path (get_desktop_path ());
+ return g_file_new_for_path (get_desktop_path ());
}
/**
* nautilus_get_desktop_directory_uri:
- *
+ *
* Get the uri for the directory containing files on the desktop.
*
* Return value: the directory path.
@@ -399,49 +447,49 @@ nautilus_get_desktop_location (void)
char *
nautilus_get_desktop_directory_uri (void)
{
- char *desktop_path;
- char *desktop_uri;
-
- desktop_path = nautilus_get_desktop_directory ();
- desktop_uri = g_filename_to_uri (desktop_path, NULL, NULL);
- g_free (desktop_path);
-
- return desktop_uri;
+ char *desktop_path;
+ char *desktop_uri;
+
+ desktop_path = nautilus_get_desktop_directory ();
+ desktop_uri = g_filename_to_uri (desktop_path, NULL, NULL);
+ g_free (desktop_path);
+
+ return desktop_uri;
}
char *
nautilus_get_home_directory_uri (void)
{
- return g_filename_to_uri (g_get_home_dir (), NULL, NULL);
+ return g_filename_to_uri (g_get_home_dir (), NULL, NULL);
}
gboolean
nautilus_should_use_templates_directory (void)
{
- const char *dir;
- gboolean res;
+ const char *dir;
+ gboolean res;
- dir = g_get_user_special_dir (G_USER_DIRECTORY_TEMPLATES);
- res = dir && (g_strcmp0 (dir, g_get_home_dir ()) != 0);
- return res;
+ dir = g_get_user_special_dir (G_USER_DIRECTORY_TEMPLATES);
+ res = dir && (g_strcmp0 (dir, g_get_home_dir ()) != 0);
+ return res;
}
char *
nautilus_get_templates_directory (void)
{
- return g_strdup (g_get_user_special_dir (G_USER_DIRECTORY_TEMPLATES));
+ return g_strdup (g_get_user_special_dir (G_USER_DIRECTORY_TEMPLATES));
}
char *
nautilus_get_templates_directory_uri (void)
{
- char *directory, *uri;
+ char *directory, *uri;
- directory = nautilus_get_templates_directory ();
- uri = g_filename_to_uri (directory, NULL, NULL);
- g_free (directory);
- return uri;
+ directory = nautilus_get_templates_directory ();
+ uri = g_filename_to_uri (directory, NULL, NULL);
+ g_free (directory);
+ return uri;
}
/* These need to be reset to NULL when desktop_is_home_dir changes */
@@ -452,232 +500,241 @@ static char *desktop_dir_filename = NULL;
static void
update_desktop_dir (void)
{
- const char *path;
- char *dirname;
-
- path = get_desktop_path ();
- desktop_dir = g_file_new_for_path (path);
-
- dirname = g_path_get_dirname (path);
- desktop_dir_dir = g_file_new_for_path (dirname);
- g_free (dirname);
- desktop_dir_filename = g_path_get_basename (path);
+ const char *path;
+ char *dirname;
+
+ path = get_desktop_path ();
+ desktop_dir = g_file_new_for_path (path);
+
+ dirname = g_path_get_dirname (path);
+ desktop_dir_dir = g_file_new_for_path (dirname);
+ g_free (dirname);
+ desktop_dir_filename = g_path_get_basename (path);
}
gboolean
-nautilus_is_home_directory_file (GFile *dir,
- const char *filename)
+nautilus_is_home_directory_file (GFile *dir,
+ const char *filename)
{
- char *dirname;
- static GFile *home_dir_dir = NULL;
- static char *home_dir_filename = NULL;
-
- if (home_dir_dir == NULL) {
- dirname = g_path_get_dirname (g_get_home_dir ());
- home_dir_dir = g_file_new_for_path (dirname);
- g_free (dirname);
- home_dir_filename = g_path_get_basename (g_get_home_dir ());
- }
-
- return (g_file_equal (dir, home_dir_dir) &&
- strcmp (filename, home_dir_filename) == 0);
+ char *dirname;
+ static GFile *home_dir_dir = NULL;
+ static char *home_dir_filename = NULL;
+
+ if (home_dir_dir == NULL)
+ {
+ dirname = g_path_get_dirname (g_get_home_dir ());
+ home_dir_dir = g_file_new_for_path (dirname);
+ g_free (dirname);
+ home_dir_filename = g_path_get_basename (g_get_home_dir ());
+ }
+
+ return (g_file_equal (dir, home_dir_dir) &&
+ strcmp (filename, home_dir_filename) == 0);
}
gboolean
nautilus_is_home_directory (GFile *dir)
{
- static GFile *home_dir = NULL;
-
- if (home_dir == NULL) {
- home_dir = g_file_new_for_path (g_get_home_dir ());
- }
+ static GFile *home_dir = NULL;
+
+ if (home_dir == NULL)
+ {
+ home_dir = g_file_new_for_path (g_get_home_dir ());
+ }
- return g_file_equal (dir, home_dir);
+ return g_file_equal (dir, home_dir);
}
gboolean
nautilus_is_root_directory (GFile *dir)
{
- static GFile *root_dir = NULL;
-
- if (root_dir == NULL) {
- root_dir = g_file_new_for_path ("/");
- }
+ static GFile *root_dir = NULL;
+
+ if (root_dir == NULL)
+ {
+ root_dir = g_file_new_for_path ("/");
+ }
- return g_file_equal (dir, root_dir);
+ return g_file_equal (dir, root_dir);
}
-
-
+
+
gboolean
-nautilus_is_desktop_directory_file (GFile *dir,
- const char *file)
+nautilus_is_desktop_directory_file (GFile *dir,
+ const char *file)
{
+ if (desktop_dir == NULL)
+ {
+ update_desktop_dir ();
+ }
- if (desktop_dir == NULL) {
- update_desktop_dir ();
- }
-
- return (g_file_equal (dir, desktop_dir_dir) &&
- strcmp (file, desktop_dir_filename) == 0);
+ return (g_file_equal (dir, desktop_dir_dir) &&
+ strcmp (file, desktop_dir_filename) == 0);
}
gboolean
nautilus_is_desktop_directory (GFile *dir)
{
+ if (desktop_dir == NULL)
+ {
+ update_desktop_dir ();
+ }
- if (desktop_dir == NULL) {
- update_desktop_dir ();
- }
-
- return g_file_equal (dir, desktop_dir);
+ return g_file_equal (dir, desktop_dir);
}
gboolean
nautilus_is_search_directory (GFile *dir)
{
- g_autofree gchar *uri = NULL;
+ g_autofree gchar *uri = NULL;
- uri = g_file_get_uri (dir);
- return eel_uri_is_search (uri);
+ uri = g_file_get_uri (dir);
+ return eel_uri_is_search (uri);
}
GMount *
nautilus_get_mounted_mount_for_root (GFile *location)
{
- GVolumeMonitor *volume_monitor;
- GList *mounts;
- GList *l;
- GMount *mount;
- GMount *result = NULL;
- GFile *root = NULL;
- GFile *default_location = NULL;
-
- volume_monitor = g_volume_monitor_get ();
- mounts = g_volume_monitor_get_mounts (volume_monitor);
-
- for (l = mounts; l != NULL; l = l->next) {
- mount = l->data;
-
- if (g_mount_is_shadowed (mount)) {
- continue;
- }
-
- root = g_mount_get_root (mount);
- if (g_file_equal (location, root)) {
- result = g_object_ref (mount);
- break;
- }
-
- default_location = g_mount_get_default_location (mount);
- if (!g_file_equal (default_location, root) &&
- g_file_equal (location, default_location)) {
- result = g_object_ref (mount);
- break;
- }
- }
-
- g_clear_object (&root);
- g_clear_object (&default_location);
- g_list_free_full (mounts, g_object_unref);
-
- return result;
+ GVolumeMonitor *volume_monitor;
+ GList *mounts;
+ GList *l;
+ GMount *mount;
+ GMount *result = NULL;
+ GFile *root = NULL;
+ GFile *default_location = NULL;
+
+ volume_monitor = g_volume_monitor_get ();
+ mounts = g_volume_monitor_get_mounts (volume_monitor);
+
+ for (l = mounts; l != NULL; l = l->next)
+ {
+ mount = l->data;
+
+ if (g_mount_is_shadowed (mount))
+ {
+ continue;
+ }
+
+ root = g_mount_get_root (mount);
+ if (g_file_equal (location, root))
+ {
+ result = g_object_ref (mount);
+ break;
+ }
+
+ default_location = g_mount_get_default_location (mount);
+ if (!g_file_equal (default_location, root) &&
+ g_file_equal (location, default_location))
+ {
+ result = g_object_ref (mount);
+ break;
+ }
+ }
+
+ g_clear_object (&root);
+ g_clear_object (&default_location);
+ g_list_free_full (mounts, g_object_unref);
+
+ return result;
}
GFile *
nautilus_generate_unique_file_in_directory (GFile *directory,
const char *basename)
{
- g_autofree char *basename_without_extension = NULL;
- const char *extension;
- GFile *child;
- int copy;
+ g_autofree char *basename_without_extension = NULL;
+ const char *extension;
+ GFile *child;
+ int copy;
- g_return_val_if_fail (directory != NULL, NULL);
- g_return_val_if_fail (basename != NULL, NULL);
- g_return_val_if_fail (g_file_query_exists (directory, NULL), NULL);
+ g_return_val_if_fail (directory != NULL, NULL);
+ g_return_val_if_fail (basename != NULL, NULL);
+ g_return_val_if_fail (g_file_query_exists (directory, NULL), NULL);
- basename_without_extension = eel_filename_strip_extension (basename);
- extension = eel_filename_get_extension_offset (basename);
+ basename_without_extension = eel_filename_strip_extension (basename);
+ extension = eel_filename_get_extension_offset (basename);
- child = g_file_get_child (directory, basename);
+ child = g_file_get_child (directory, basename);
- copy = 1;
- while (g_file_query_exists (child, NULL)) {
- g_autofree char *filename;
+ copy = 1;
+ while (g_file_query_exists (child, NULL))
+ {
+ g_autofree char *filename;
- g_object_unref (child);
+ g_object_unref (child);
- filename = g_strdup_printf ("%s (%d)%s",
- basename_without_extension,
- copy,
- extension ? extension : "");
- child = g_file_get_child (directory, filename);
+ filename = g_strdup_printf ("%s (%d)%s",
+ basename_without_extension,
+ copy,
+ extension ? extension : "");
+ child = g_file_get_child (directory, filename);
- copy++;
- }
+ copy++;
+ }
- return child;
+ return child;
}
GFile *
nautilus_find_existing_uri_in_hierarchy (GFile *location)
{
- GFileInfo *info;
- GFile *tmp;
-
- g_assert (location != NULL);
-
- location = g_object_ref (location);
- while (location != NULL) {
- info = g_file_query_info (location,
- G_FILE_ATTRIBUTE_STANDARD_NAME,
- 0, NULL, NULL);
- g_object_unref (info);
- if (info != NULL) {
- return location;
- }
- tmp = location;
- location = g_file_get_parent (location);
- g_object_unref (tmp);
- }
-
- return location;
+ GFileInfo *info;
+ GFile *tmp;
+
+ g_assert (location != NULL);
+
+ location = g_object_ref (location);
+ while (location != NULL)
+ {
+ info = g_file_query_info (location,
+ G_FILE_ATTRIBUTE_STANDARD_NAME,
+ 0, NULL, NULL);
+ g_object_unref (info);
+ if (info != NULL)
+ {
+ return location;
+ }
+ tmp = location;
+ location = g_file_get_parent (location);
+ g_object_unref (tmp);
+ }
+
+ return location;
}
static gboolean
have_program_in_path (const char *name)
{
- gchar *path;
- gboolean result;
+ gchar *path;
+ gboolean result;
- path = g_find_program_in_path (name);
- result = (path != NULL);
- g_free (path);
- return result;
+ path = g_find_program_in_path (name);
+ result = (path != NULL);
+ g_free (path);
+ return result;
}
static GIcon *
special_directory_get_icon (GUserDirectory directory,
- gboolean symbolic)
+ gboolean symbolic)
{
+#define ICON_CASE(x) \
+ case G_USER_DIRECTORY_ ## x: \
+ return (symbolic) ? g_themed_icon_new (NAUTILUS_ICON_FOLDER_ ## x) : g_themed_icon_new (NAUTILUS_ICON_FULLCOLOR_FOLDER_ ## x);
-#define ICON_CASE(x) \
- case G_USER_DIRECTORY_ ## x: \
- return (symbolic) ? g_themed_icon_new (NAUTILUS_ICON_FOLDER_ ## x) : g_themed_icon_new (NAUTILUS_ICON_FULLCOLOR_FOLDER_ ## x);
-
- switch (directory) {
-
- ICON_CASE (DOCUMENTS);
- ICON_CASE (DOWNLOAD);
- ICON_CASE (MUSIC);
- ICON_CASE (PICTURES);
- ICON_CASE (PUBLIC_SHARE);
- ICON_CASE (TEMPLATES);
- ICON_CASE (VIDEOS);
-
- default:
- return (symbolic) ? g_themed_icon_new (NAUTILUS_ICON_FOLDER) : g_themed_icon_new (NAUTILUS_ICON_FULLCOLOR_FOLDER);
- }
+ switch (directory)
+ {
+ ICON_CASE (DOCUMENTS);
+ ICON_CASE (DOWNLOAD);
+ ICON_CASE (MUSIC);
+ ICON_CASE (PICTURES);
+ ICON_CASE (PUBLIC_SHARE);
+ ICON_CASE (TEMPLATES);
+ ICON_CASE (VIDEOS);
+
+ default:
+ return (symbolic) ? g_themed_icon_new (NAUTILUS_ICON_FOLDER) : g_themed_icon_new (NAUTILUS_ICON_FULLCOLOR_FOLDER);
+ }
#undef ICON_CASE
}
@@ -685,510 +742,583 @@ special_directory_get_icon (GUserDirectory directory,
GIcon *
nautilus_special_directory_get_symbolic_icon (GUserDirectory directory)
{
- return special_directory_get_icon (directory, TRUE);
+ return special_directory_get_icon (directory, TRUE);
}
GIcon *
nautilus_special_directory_get_icon (GUserDirectory directory)
{
- return special_directory_get_icon (directory, FALSE);
+ return special_directory_get_icon (directory, FALSE);
}
gboolean
nautilus_is_file_roller_installed (void)
{
- static int installed = - 1;
+ static int installed = -1;
- if (installed < 0) {
- if (have_program_in_path ("file-roller")) {
- installed = 1;
- } else {
- installed = 0;
- }
- }
+ if (installed < 0)
+ {
+ if (have_program_in_path ("file-roller"))
+ {
+ installed = 1;
+ }
+ else
+ {
+ installed = 0;
+ }
+ }
- return installed > 0 ? TRUE : FALSE;
+ return installed > 0 ? TRUE : FALSE;
}
/* Returns TRUE if the file is in XDG_DATA_DIRS. This is used for
- deciding if a desktop file is "trusted" based on the path */
+ * deciding if a desktop file is "trusted" based on the path */
gboolean
nautilus_is_in_system_dir (GFile *file)
{
- const char * const * data_dirs;
- char *path;
- int i;
- gboolean res;
-
- if (!g_file_is_native (file)) {
- return FALSE;
- }
-
- path = g_file_get_path (file);
-
- res = FALSE;
-
- data_dirs = g_get_system_data_dirs ();
- for (i = 0; path != NULL && data_dirs[i] != NULL; i++) {
- if (g_str_has_prefix (path, data_dirs[i])) {
- res = TRUE;
- break;
- }
-
- }
-
- g_free (path);
-
- return res;
+ const char * const *data_dirs;
+ char *path;
+ int i;
+ gboolean res;
+
+ if (!g_file_is_native (file))
+ {
+ return FALSE;
+ }
+
+ path = g_file_get_path (file);
+
+ res = FALSE;
+
+ data_dirs = g_get_system_data_dirs ();
+ for (i = 0; path != NULL && data_dirs[i] != NULL; i++)
+ {
+ if (g_str_has_prefix (path, data_dirs[i]))
+ {
+ res = TRUE;
+ break;
+ }
+ }
+
+ g_free (path);
+
+ return res;
}
GHashTable *
-nautilus_trashed_files_get_original_directories (GList *files,
- GList **unhandled_files)
+nautilus_trashed_files_get_original_directories (GList *files,
+ GList **unhandled_files)
{
- GHashTable *directories;
- NautilusFile *file, *original_file, *original_dir;
- GList *l, *m;
-
- directories = NULL;
-
- if (unhandled_files != NULL) {
- *unhandled_files = NULL;
- }
-
- for (l = files; l != NULL; l = l->next) {
- file = NAUTILUS_FILE (l->data);
- original_file = nautilus_file_get_trash_original_file (file);
-
- original_dir = NULL;
- if (original_file != NULL) {
- original_dir = nautilus_file_get_parent (original_file);
- }
-
- if (original_dir != NULL) {
- if (directories == NULL) {
- directories = g_hash_table_new_full (g_direct_hash, g_direct_equal,
- (GDestroyNotify) nautilus_file_unref,
- (GDestroyNotify) nautilus_file_list_free);
- }
- nautilus_file_ref (original_dir);
- m = g_hash_table_lookup (directories, original_dir);
- if (m != NULL) {
- g_hash_table_steal (directories, original_dir);
- nautilus_file_unref (original_dir);
- }
- m = g_list_append (m, nautilus_file_ref (file));
- g_hash_table_insert (directories, original_dir, m);
- } else if (unhandled_files != NULL) {
- *unhandled_files = g_list_append (*unhandled_files, nautilus_file_ref (file));
- }
-
- nautilus_file_unref (original_file);
- nautilus_file_unref (original_dir);
- }
-
- return directories;
+ GHashTable *directories;
+ NautilusFile *file, *original_file, *original_dir;
+ GList *l, *m;
+
+ directories = NULL;
+
+ if (unhandled_files != NULL)
+ {
+ *unhandled_files = NULL;
+ }
+
+ for (l = files; l != NULL; l = l->next)
+ {
+ file = NAUTILUS_FILE (l->data);
+ original_file = nautilus_file_get_trash_original_file (file);
+
+ original_dir = NULL;
+ if (original_file != NULL)
+ {
+ original_dir = nautilus_file_get_parent (original_file);
+ }
+
+ if (original_dir != NULL)
+ {
+ if (directories == NULL)
+ {
+ directories = g_hash_table_new_full (g_direct_hash, g_direct_equal,
+ (GDestroyNotify) nautilus_file_unref,
+ (GDestroyNotify) nautilus_file_list_free);
+ }
+ nautilus_file_ref (original_dir);
+ m = g_hash_table_lookup (directories, original_dir);
+ if (m != NULL)
+ {
+ g_hash_table_steal (directories, original_dir);
+ nautilus_file_unref (original_dir);
+ }
+ m = g_list_append (m, nautilus_file_ref (file));
+ g_hash_table_insert (directories, original_dir, m);
+ }
+ else if (unhandled_files != NULL)
+ {
+ *unhandled_files = g_list_append (*unhandled_files, nautilus_file_ref (file));
+ }
+
+ nautilus_file_unref (original_file);
+ nautilus_file_unref (original_dir);
+ }
+
+ return directories;
}
static GList *
locations_from_file_list (GList *file_list)
{
- NautilusFile *file;
- GList *l, *ret;
+ NautilusFile *file;
+ GList *l, *ret;
- ret = NULL;
+ ret = NULL;
- for (l = file_list; l != NULL; l = l->next) {
- file = NAUTILUS_FILE (l->data);
- ret = g_list_prepend (ret, nautilus_file_get_location (file));
- }
+ for (l = file_list; l != NULL; l = l->next)
+ {
+ file = NAUTILUS_FILE (l->data);
+ ret = g_list_prepend (ret, nautilus_file_get_location (file));
+ }
- return g_list_reverse (ret);
+ return g_list_reverse (ret);
}
-typedef struct {
- GHashTable *original_dirs_hash;
- GtkWindow *parent_window;
+typedef struct
+{
+ GHashTable *original_dirs_hash;
+ GtkWindow *parent_window;
} RestoreFilesData;
static void
-ensure_dirs_task_ready_cb (GObject *_source,
- GAsyncResult *res,
- gpointer user_data)
+ensure_dirs_task_ready_cb (GObject *_source,
+ GAsyncResult *res,
+ gpointer user_data)
{
- NautilusFile *original_dir;
- GFile *original_dir_location;
- GList *original_dirs, *files, *locations, *l;
- RestoreFilesData *data = user_data;
+ NautilusFile *original_dir;
+ GFile *original_dir_location;
+ GList *original_dirs, *files, *locations, *l;
+ RestoreFilesData *data = user_data;
- original_dirs = g_hash_table_get_keys (data->original_dirs_hash);
- for (l = original_dirs; l != NULL; l = l->next) {
- original_dir = NAUTILUS_FILE (l->data);
- original_dir_location = nautilus_file_get_location (original_dir);
+ original_dirs = g_hash_table_get_keys (data->original_dirs_hash);
+ for (l = original_dirs; l != NULL; l = l->next)
+ {
+ original_dir = NAUTILUS_FILE (l->data);
+ original_dir_location = nautilus_file_get_location (original_dir);
- files = g_hash_table_lookup (data->original_dirs_hash, original_dir);
- locations = locations_from_file_list (files);
+ files = g_hash_table_lookup (data->original_dirs_hash, original_dir);
+ locations = locations_from_file_list (files);
- nautilus_file_operations_move
- (locations, NULL,
- original_dir_location,
- data->parent_window,
- NULL, NULL);
+ nautilus_file_operations_move
+ (locations, NULL,
+ original_dir_location,
+ data->parent_window,
+ NULL, NULL);
- g_list_free_full (locations, g_object_unref);
- g_object_unref (original_dir_location);
- }
+ g_list_free_full (locations, g_object_unref);
+ g_object_unref (original_dir_location);
+ }
- g_list_free (original_dirs);
+ g_list_free (original_dirs);
- g_hash_table_unref (data->original_dirs_hash);
- g_slice_free (RestoreFilesData, data);
+ g_hash_table_unref (data->original_dirs_hash);
+ g_slice_free (RestoreFilesData, data);
}
static void
-ensure_dirs_task_thread_func (GTask *task,
- gpointer source,
- gpointer task_data,
- GCancellable *cancellable)
+ensure_dirs_task_thread_func (GTask *task,
+ gpointer source,
+ gpointer task_data,
+ GCancellable *cancellable)
{
- RestoreFilesData *data = task_data;
- NautilusFile *original_dir;
- GFile *original_dir_location;
- GList *original_dirs, *l;
+ RestoreFilesData *data = task_data;
+ NautilusFile *original_dir;
+ GFile *original_dir_location;
+ GList *original_dirs, *l;
- original_dirs = g_hash_table_get_keys (data->original_dirs_hash);
- for (l = original_dirs; l != NULL; l = l->next) {
- original_dir = NAUTILUS_FILE (l->data);
- original_dir_location = nautilus_file_get_location (original_dir);
+ original_dirs = g_hash_table_get_keys (data->original_dirs_hash);
+ for (l = original_dirs; l != NULL; l = l->next)
+ {
+ original_dir = NAUTILUS_FILE (l->data);
+ original_dir_location = nautilus_file_get_location (original_dir);
- g_file_make_directory_with_parents (original_dir_location, cancellable, NULL);
- g_object_unref (original_dir_location);
- }
+ g_file_make_directory_with_parents (original_dir_location, cancellable, NULL);
+ g_object_unref (original_dir_location);
+ }
- g_task_return_pointer (task, NULL, NULL);
+ g_task_return_pointer (task, NULL, NULL);
}
static void
restore_files_ensure_parent_directories (GHashTable *original_dirs_hash,
- GtkWindow *parent_window)
+ GtkWindow *parent_window)
{
- RestoreFilesData *data;
- GTask *ensure_dirs_task;
+ RestoreFilesData *data;
+ GTask *ensure_dirs_task;
- data = g_slice_new0 (RestoreFilesData);
- data->parent_window = parent_window;
- data->original_dirs_hash = g_hash_table_ref (original_dirs_hash);
+ data = g_slice_new0 (RestoreFilesData);
+ data->parent_window = parent_window;
+ data->original_dirs_hash = g_hash_table_ref (original_dirs_hash);
- ensure_dirs_task = g_task_new (NULL, NULL, ensure_dirs_task_ready_cb, data);
- g_task_set_task_data (ensure_dirs_task, data, NULL);
- g_task_run_in_thread (ensure_dirs_task, ensure_dirs_task_thread_func);
- g_object_unref (ensure_dirs_task);
+ ensure_dirs_task = g_task_new (NULL, NULL, ensure_dirs_task_ready_cb, data);
+ g_task_set_task_data (ensure_dirs_task, data, NULL);
+ g_task_run_in_thread (ensure_dirs_task, ensure_dirs_task_thread_func);
+ g_object_unref (ensure_dirs_task);
}
void
-nautilus_restore_files_from_trash (GList *files,
- GtkWindow *parent_window)
+nautilus_restore_files_from_trash (GList *files,
+ GtkWindow *parent_window)
{
- NautilusFile *file;
- GHashTable *original_dirs_hash;
- GList *unhandled_files, *l;
- char *message, *file_name;
-
- original_dirs_hash = nautilus_trashed_files_get_original_directories (files, &unhandled_files);
-
- for (l = unhandled_files; l != NULL; l = l->next) {
- file = NAUTILUS_FILE (l->data);
- file_name = nautilus_file_get_display_name (file);
- message = g_strdup_printf (_("Could not determine original location of “%s” "), file_name);
- g_free (file_name);
-
- eel_show_warning_dialog (message,
- _("The item cannot be restored from trash"),
- parent_window);
- g_free (message);
- }
-
- if (original_dirs_hash != NULL) {
- restore_files_ensure_parent_directories (original_dirs_hash, parent_window);
- g_hash_table_unref (original_dirs_hash);
- }
-
- nautilus_file_list_unref (unhandled_files);
+ NautilusFile *file;
+ GHashTable *original_dirs_hash;
+ GList *unhandled_files, *l;
+ char *message, *file_name;
+
+ original_dirs_hash = nautilus_trashed_files_get_original_directories (files, &unhandled_files);
+
+ for (l = unhandled_files; l != NULL; l = l->next)
+ {
+ file = NAUTILUS_FILE (l->data);
+ file_name = nautilus_file_get_display_name (file);
+ message = g_strdup_printf (_("Could not determine original location of “%s” "), file_name);
+ g_free (file_name);
+
+ eel_show_warning_dialog (message,
+ _("The item cannot be restored from trash"),
+ parent_window);
+ g_free (message);
+ }
+
+ if (original_dirs_hash != NULL)
+ {
+ restore_files_ensure_parent_directories (original_dirs_hash, parent_window);
+ g_hash_table_unref (original_dirs_hash);
+ }
+
+ nautilus_file_list_unref (unhandled_files);
}
-typedef struct {
- NautilusMountGetContent callback;
- gpointer user_data;
+typedef struct
+{
+ NautilusMountGetContent callback;
+ gpointer user_data;
} GetContentTypesData;
static void
-get_types_cb (GObject *source_object,
- GAsyncResult *res,
- gpointer user_data)
+get_types_cb (GObject *source_object,
+ GAsyncResult *res,
+ gpointer user_data)
{
- GetContentTypesData *data;
- char **types;
-
- data = user_data;
- types = g_mount_guess_content_type_finish (G_MOUNT (source_object), res, NULL);
-
- g_object_set_data_full (source_object,
- "nautilus-content-type-cache",
- g_strdupv (types),
- (GDestroyNotify)g_strfreev);
-
- if (data->callback) {
- data->callback ((const char **) types, data->user_data);
- }
- g_strfreev (types);
- g_slice_free (GetContentTypesData, data);
+ GetContentTypesData *data;
+ char **types;
+
+ data = user_data;
+ types = g_mount_guess_content_type_finish (G_MOUNT (source_object), res, NULL);
+
+ g_object_set_data_full (source_object,
+ "nautilus-content-type-cache",
+ g_strdupv (types),
+ (GDestroyNotify) g_strfreev);
+
+ if (data->callback)
+ {
+ data->callback ((const char **) types, data->user_data);
+ }
+ g_strfreev (types);
+ g_slice_free (GetContentTypesData, data);
}
void
-nautilus_get_x_content_types_for_mount_async (GMount *mount,
- NautilusMountGetContent callback,
- GCancellable *cancellable,
- gpointer user_data)
+nautilus_get_x_content_types_for_mount_async (GMount *mount,
+ NautilusMountGetContent callback,
+ GCancellable *cancellable,
+ gpointer user_data)
{
- char **cached;
- GetContentTypesData *data;
-
- if (mount == NULL) {
- if (callback) {
- callback (NULL, user_data);
- }
- return;
- }
-
- cached = g_object_get_data (G_OBJECT (mount), "nautilus-content-type-cache");
- if (cached != NULL) {
- if (callback) {
- callback ((const char **) cached, user_data);
- }
- return;
- }
-
- data = g_slice_new0 (GetContentTypesData);
- data->callback = callback;
- data->user_data = user_data;
-
- g_mount_guess_content_type (mount,
- FALSE,
- cancellable,
- get_types_cb,
- data);
+ char **cached;
+ GetContentTypesData *data;
+
+ if (mount == NULL)
+ {
+ if (callback)
+ {
+ callback (NULL, user_data);
+ }
+ return;
+ }
+
+ cached = g_object_get_data (G_OBJECT (mount), "nautilus-content-type-cache");
+ if (cached != NULL)
+ {
+ if (callback)
+ {
+ callback ((const char **) cached, user_data);
+ }
+ return;
+ }
+
+ data = g_slice_new0 (GetContentTypesData);
+ data->callback = callback;
+ data->user_data = user_data;
+
+ g_mount_guess_content_type (mount,
+ FALSE,
+ cancellable,
+ get_types_cb,
+ data);
}
char **
nautilus_get_cached_x_content_types_for_mount (GMount *mount)
{
- char **cached;
+ char **cached;
- if (mount == NULL) {
- return NULL;
- }
+ if (mount == NULL)
+ {
+ return NULL;
+ }
- cached = g_object_get_data (G_OBJECT (mount), "nautilus-content-type-cache");
- if (cached != NULL) {
- return g_strdupv (cached);
- }
+ cached = g_object_get_data (G_OBJECT (mount), "nautilus-content-type-cache");
+ if (cached != NULL)
+ {
+ return g_strdupv (cached);
+ }
- return NULL;
+ return NULL;
}
char *
get_message_for_content_type (const char *content_type)
{
- char *message;
- char *description;
-
- description = g_content_type_get_description (content_type);
-
- /* Customize greeting for well-known content types */
- /* translators: these describe the contents of removable media */
- if (strcmp (content_type, "x-content/audio-cdda") == 0) {
- message = g_strdup (_("Audio CD"));
- } else if (strcmp (content_type, "x-content/audio-dvd") == 0) {
- message = g_strdup (_("Audio DVD"));
- } else if (strcmp (content_type, "x-content/video-dvd") == 0) {
- message = g_strdup (_("Video DVD"));
- } else if (strcmp (content_type, "x-content/video-vcd") == 0) {
- message = g_strdup (_("Video CD"));
- } else if (strcmp (content_type, "x-content/video-svcd") == 0) {
- message = g_strdup (_("Super Video CD"));
- } else if (strcmp (content_type, "x-content/image-photocd") == 0) {
- message = g_strdup (_("Photo CD"));
- } else if (strcmp (content_type, "x-content/image-picturecd") == 0) {
- message = g_strdup (_("Picture CD"));
- } else if (strcmp (content_type, "x-content/image-dcf") == 0) {
- message = g_strdup (_("Contains digital photos"));
- } else if (strcmp (content_type, "x-content/audio-player") == 0) {
- message = g_strdup (_("Contains music"));
- } else if (strcmp (content_type, "x-content/unix-software") == 0) {
- message = g_strdup (_("Contains software"));
- } else {
- /* fallback to generic greeting */
- message = g_strdup_printf (_("Detected as “%s”"), description);
- }
-
- g_free (description);
-
- return message;
+ char *message;
+ char *description;
+
+ description = g_content_type_get_description (content_type);
+
+ /* Customize greeting for well-known content types */
+ /* translators: these describe the contents of removable media */
+ if (strcmp (content_type, "x-content/audio-cdda") == 0)
+ {
+ message = g_strdup (_("Audio CD"));
+ }
+ else if (strcmp (content_type, "x-content/audio-dvd") == 0)
+ {
+ message = g_strdup (_("Audio DVD"));
+ }
+ else if (strcmp (content_type, "x-content/video-dvd") == 0)
+ {
+ message = g_strdup (_("Video DVD"));
+ }
+ else if (strcmp (content_type, "x-content/video-vcd") == 0)
+ {
+ message = g_strdup (_("Video CD"));
+ }
+ else if (strcmp (content_type, "x-content/video-svcd") == 0)
+ {
+ message = g_strdup (_("Super Video CD"));
+ }
+ else if (strcmp (content_type, "x-content/image-photocd") == 0)
+ {
+ message = g_strdup (_("Photo CD"));
+ }
+ else if (strcmp (content_type, "x-content/image-picturecd") == 0)
+ {
+ message = g_strdup (_("Picture CD"));
+ }
+ else if (strcmp (content_type, "x-content/image-dcf") == 0)
+ {
+ message = g_strdup (_("Contains digital photos"));
+ }
+ else if (strcmp (content_type, "x-content/audio-player") == 0)
+ {
+ message = g_strdup (_("Contains music"));
+ }
+ else if (strcmp (content_type, "x-content/unix-software") == 0)
+ {
+ message = g_strdup (_("Contains software"));
+ }
+ else
+ {
+ /* fallback to generic greeting */
+ message = g_strdup_printf (_("Detected as “%s”"), description);
+ }
+
+ g_free (description);
+
+ return message;
}
char *
get_message_for_two_content_types (const char * const *content_types)
{
- char *message;
-
- g_assert (content_types[0] != NULL);
- g_assert (content_types[1] != NULL);
-
- /* few combinations make sense */
- if (strcmp (content_types[0], "x-content/image-dcf") == 0
- || strcmp (content_types[1], "x-content/image-dcf") == 0) {
-
- /* translators: these describe the contents of removable media */
- if (strcmp (content_types[0], "x-content/audio-player") == 0) {
- message = g_strdup (_("Contains music and photos"));
- } else if (strcmp (content_types[1], "x-content/audio-player") == 0) {
- message = g_strdup (_("Contains photos and music"));
- } else {
- message = g_strdup (_("Contains digital photos"));
- }
- } else if ((strcmp (content_types[0], "x-content/video-vcd") == 0
- || strcmp (content_types[1], "x-content/video-vcd") == 0)
- && (strcmp (content_types[0], "x-content/video-dvd") == 0
- || strcmp (content_types[1], "x-content/video-dvd") == 0)) {
- message = g_strdup_printf ("%s/%s",
- get_message_for_content_type (content_types[0]),
- get_message_for_content_type (content_types[1]));
- } else {
- message = get_message_for_content_type (content_types[0]);
- }
-
- return message;
+ char *message;
+
+ g_assert (content_types[0] != NULL);
+ g_assert (content_types[1] != NULL);
+
+ /* few combinations make sense */
+ if (strcmp (content_types[0], "x-content/image-dcf") == 0
+ || strcmp (content_types[1], "x-content/image-dcf") == 0)
+ {
+ /* translators: these describe the contents of removable media */
+ if (strcmp (content_types[0], "x-content/audio-player") == 0)
+ {
+ message = g_strdup (_("Contains music and photos"));
+ }
+ else if (strcmp (content_types[1], "x-content/audio-player") == 0)
+ {
+ message = g_strdup (_("Contains photos and music"));
+ }
+ else
+ {
+ message = g_strdup (_("Contains digital photos"));
+ }
+ }
+ else if ((strcmp (content_types[0], "x-content/video-vcd") == 0
+ || strcmp (content_types[1], "x-content/video-vcd") == 0)
+ && (strcmp (content_types[0], "x-content/video-dvd") == 0
+ || strcmp (content_types[1], "x-content/video-dvd") == 0))
+ {
+ message = g_strdup_printf ("%s/%s",
+ get_message_for_content_type (content_types[0]),
+ get_message_for_content_type (content_types[1]));
+ }
+ else
+ {
+ message = get_message_for_content_type (content_types[0]);
+ }
+
+ return message;
}
gboolean
should_handle_content_type (const char *content_type)
{
- GAppInfo *default_app;
+ GAppInfo *default_app;
- default_app = g_app_info_get_default_for_type (content_type, FALSE);
+ default_app = g_app_info_get_default_for_type (content_type, FALSE);
- return !g_str_has_prefix (content_type, "x-content/blank-") &&
- !g_content_type_is_a (content_type, "x-content/win32-software") &&
- default_app != NULL;
+ return !g_str_has_prefix (content_type, "x-content/blank-") &&
+ !g_content_type_is_a (content_type, "x-content/win32-software") &&
+ default_app != NULL;
}
gboolean
-should_handle_content_types (const char * const * content_types)
+should_handle_content_types (const char * const *content_types)
{
- int i;
+ int i;
- for (i = 0; content_types[i] != NULL; i++) {
- if (should_handle_content_type (content_types[i]))
- return TRUE;
+ for (i = 0; content_types[i] != NULL; i++)
+ {
+ if (should_handle_content_type (content_types[i]))
+ {
+ return TRUE;
}
+ }
- return FALSE;
+ return FALSE;
}
gboolean
nautilus_file_selection_equal (GList *selection_a,
- GList *selection_b)
+ GList *selection_b)
{
- GList *al, *bl;
- gboolean selection_matches;
+ GList *al, *bl;
+ gboolean selection_matches;
- if (selection_a == NULL || selection_b == NULL) {
- return (selection_a == selection_b);
- }
-
- if (g_list_length (selection_a) != g_list_length (selection_b)) {
- return FALSE;
- }
-
- selection_matches = TRUE;
+ if (selection_a == NULL || selection_b == NULL)
+ {
+ return (selection_a == selection_b);
+ }
- for (al = selection_a; al; al = al->next) {
- GFile *a_location = nautilus_file_get_location (NAUTILUS_FILE (al->data));
- gboolean found = FALSE;
+ if (g_list_length (selection_a) != g_list_length (selection_b))
+ {
+ return FALSE;
+ }
- for (bl = selection_b; bl; bl = bl->next) {
- GFile *b_location = nautilus_file_get_location (NAUTILUS_FILE (bl->data));
- found = g_file_equal (b_location, a_location);
- g_object_unref (b_location);
+ selection_matches = TRUE;
- if (found) {
- break;
- }
- }
+ for (al = selection_a; al; al = al->next)
+ {
+ GFile *a_location = nautilus_file_get_location (NAUTILUS_FILE (al->data));
+ gboolean found = FALSE;
+
+ for (bl = selection_b; bl; bl = bl->next)
+ {
+ GFile *b_location = nautilus_file_get_location (NAUTILUS_FILE (bl->data));
+ found = g_file_equal (b_location, a_location);
+ g_object_unref (b_location);
+
+ if (found)
+ {
+ break;
+ }
+ }
- selection_matches = found;
- g_object_unref (a_location);
+ selection_matches = found;
+ g_object_unref (a_location);
- if (!selection_matches) {
- break;
- }
- }
+ if (!selection_matches)
+ {
+ break;
+ }
+ }
- return selection_matches;
+ return selection_matches;
}
char *
nautilus_get_common_filename_prefix (GList *file_list,
int min_required_len)
{
- GList *l;
- GList *strs = NULL;
- char *name;
- char *result;
+ GList *l;
+ GList *strs = NULL;
+ char *name;
+ char *result;
- if (file_list == NULL)
- return NULL;
+ if (file_list == NULL)
+ {
+ return NULL;
+ }
- for (l = file_list; l != NULL; l = l->next) {
- g_return_val_if_fail (NAUTILUS_IS_FILE (l->data), NULL);
+ for (l = file_list; l != NULL; l = l->next)
+ {
+ g_return_val_if_fail (NAUTILUS_IS_FILE (l->data), NULL);
- name = nautilus_file_get_display_name (l->data);
- strs = g_list_append (strs, name);
- }
+ name = nautilus_file_get_display_name (l->data);
+ strs = g_list_append (strs, name);
+ }
- result = nautilus_get_common_filename_prefix_from_filenames (strs, min_required_len);
- g_list_free_full (strs, g_free);
+ result = nautilus_get_common_filename_prefix_from_filenames (strs, min_required_len);
+ g_list_free_full (strs, g_free);
- return result;
+ return result;
}
char *
nautilus_get_common_filename_prefix_from_filenames (GList *filenames,
int min_required_len)
{
- char *common_prefix;
- char *truncated;
- int common_prefix_len;
+ char *common_prefix;
+ char *truncated;
+ int common_prefix_len;
- common_prefix = eel_str_get_common_prefix (filenames, min_required_len);
+ common_prefix = eel_str_get_common_prefix (filenames, min_required_len);
- if (common_prefix == NULL)
- return NULL;
+ if (common_prefix == NULL)
+ {
+ return NULL;
+ }
- truncated = eel_filename_strip_extension (common_prefix);
- g_free (common_prefix);
- common_prefix = truncated;
+ truncated = eel_filename_strip_extension (common_prefix);
+ g_free (common_prefix);
+ common_prefix = truncated;
- truncated = eel_str_rtrim_punctuation (common_prefix);
- g_free (common_prefix);
+ truncated = eel_str_rtrim_punctuation (common_prefix);
+ g_free (common_prefix);
- common_prefix_len = g_utf8_strlen (truncated, -1);
- if (common_prefix_len < min_required_len) {
- g_free (truncated);
- return NULL;
- }
+ common_prefix_len = g_utf8_strlen (truncated, -1);
+ if (common_prefix_len < min_required_len)
+ {
+ g_free (truncated);
+ return NULL;
+ }
- return truncated;
+ return truncated;
}
#if !defined (NAUTILUS_OMIT_SELF_CHECK)
@@ -1201,22 +1331,22 @@ nautilus_self_check_file_utilities (void)
void
nautilus_ensure_extension_builtins (void)
{
- g_type_ensure (NAUTILUS_TYPE_SEARCH_DIRECTORY);
+ g_type_ensure (NAUTILUS_TYPE_SEARCH_DIRECTORY);
}
void
nautilus_ensure_extension_points (void)
{
- static gsize once_init_value = 0;
+ static gsize once_init_value = 0;
- if (g_once_init_enter (&once_init_value))
+ if (g_once_init_enter (&once_init_value))
{
- GIOExtensionPoint *extension_point;
+ GIOExtensionPoint *extension_point;
- extension_point = g_io_extension_point_register (NAUTILUS_DIRECTORY_PROVIDER_EXTENSION_POINT_NAME);
- g_io_extension_point_set_required_type (extension_point, NAUTILUS_TYPE_DIRECTORY);
+ extension_point = g_io_extension_point_register (NAUTILUS_DIRECTORY_PROVIDER_EXTENSION_POINT_NAME);
+ g_io_extension_point_set_required_type (extension_point, NAUTILUS_TYPE_DIRECTORY);
- g_once_init_leave (&once_init_value, 1);
+ g_once_init_leave (&once_init_value, 1);
}
}
@@ -1228,11 +1358,14 @@ nautilus_file_can_rename_files (GList *files)
GList *l;
NautilusFile *file;
- for (l = files; l != NULL; l = l->next) {
+ for (l = files; l != NULL; l = l->next)
+ {
file = NAUTILUS_FILE (l->data);
if (!nautilus_file_can_rename (file))
+ {
return FALSE;
+ }
}
return TRUE;