nautilus r14692 - in trunk: . libnautilus-private src/file-manager
- From: alexl svn gnome org
- To: svn-commits-list gnome org
- Subject: nautilus r14692 - in trunk: . libnautilus-private src/file-manager
- Date: Mon, 6 Oct 2008 12:43:37 +0000 (UTC)
Author: alexl
Date: Mon Oct 6 12:43:37 2008
New Revision: 14692
URL: http://svn.gnome.org/viewvc/nautilus?rev=14692&view=rev
Log:
2008-10-06 Alexander Larsson <alexl redhat com>
* libnautilus-private/nautilus-link.[ch]:
* src/file-manager/fm-properties-window.c:
Use GKeyFile instead of GnomeDesktopItemp
Modified:
trunk/ChangeLog
trunk/libnautilus-private/nautilus-link.c
trunk/libnautilus-private/nautilus-link.h
trunk/src/file-manager/fm-properties-window.c
Modified: trunk/libnautilus-private/nautilus-link.c
==============================================================================
--- trunk/libnautilus-private/nautilus-link.c (original)
+++ trunk/libnautilus-private/nautilus-link.c Mon Oct 6 12:43:37 2008
@@ -38,6 +38,8 @@
#include <stdlib.h>
#include <string.h>
+#define MAIN_GROUP "Desktop Entry"
+
#define NAUTILUS_LINK_GENERIC_TAG "Link"
#define NAUTILUS_LINK_TRASH_TAG "X-nautilus-trash"
#define NAUTILUS_LINK_MOUNT_TAG "FSDevice"
@@ -97,28 +99,91 @@
return res;
}
+static gboolean
+_g_key_file_load_from_gfile (GKeyFile *key_file,
+ GFile *file,
+ GKeyFileFlags flags,
+ GError **error)
+{
+ char *data;
+ gsize len;
+ gboolean res;
+
+ if (!g_file_load_contents (file, NULL, &data, &len, NULL, error)) {
+ return FALSE;
+ }
+
+ res = g_key_file_load_from_data (key_file, data, len, flags, error);
+
+ g_free (data);
+
+ return res;
+}
+
+static gboolean
+_g_key_file_save_to_gfile (GKeyFile *key_file,
+ GFile *file,
+ GError **error)
+{
+ char *data;
+ gsize len;
+
+ data = g_key_file_to_data (key_file, &len, error);
+ if (data == NULL) {
+ return FALSE;
+ }
+
+ if (!g_file_replace_contents (file,
+ data, len,
+ NULL, FALSE,
+ G_FILE_CREATE_NONE,
+ NULL, NULL, error)) {
+ g_free (data);
+ return FALSE;
+ }
+ g_free (data);
+ return TRUE;
+}
+
+
+
+static GKeyFile *
+_g_key_file_new_from_uri (const char *uri,
+ GKeyFileFlags flags,
+ GError **error)
+{
+ GKeyFile *key_file;
+ GFile *file;
+
+ file = g_file_new_for_uri (uri);
+ key_file = g_key_file_new ();
+ if (!_g_key_file_load_from_gfile (key_file, file, flags, error)) {
+ g_key_file_free (key_file);
+ key_file = NULL;
+ }
+ g_object_unref (file);
+ return key_file;
+}
+
static char *
slurp_key_string (const char *uri,
const char *keyname,
gboolean localize)
{
- GnomeDesktopItem *desktop_file;
- const char *text;
+ GKeyFile *key_file;
char *result;
- desktop_file = gnome_desktop_item_new_from_uri (uri, 0, NULL);
- if (desktop_file == NULL) {
+ key_file = _g_key_file_new_from_uri (uri, G_KEY_FILE_NONE, NULL);
+ if (key_file == NULL) {
return NULL;
}
if (localize) {
- text = gnome_desktop_item_get_localestring (desktop_file, keyname);
+ result = g_key_file_get_locale_string (key_file, MAIN_GROUP, keyname, NULL, NULL);
} else {
- text = gnome_desktop_item_get_string (desktop_file, keyname);
+ result = g_key_file_get_string (key_file, MAIN_GROUP, keyname, NULL);
}
-
- result = g_strdup (text);
- gnome_desktop_item_unref (desktop_file);
+ g_key_file_free (key_file);
return result;
}
@@ -135,7 +200,7 @@
{
char *real_directory_uri;
char *uri, *contents;
- GnomeDesktopItem *desktop_item;
+ GFile *file;
GList dummy_list;
NautilusFileChangesQueuePosition item;
@@ -162,9 +227,11 @@
g_free (real_directory_uri);
return FALSE;
}
+ file = g_file_new_for_uri (uri);
+ g_free (uri);
} else {
char *link_name;
- GFile *dir, *link;
+ GFile *dir;
link_name = g_strdup_printf ("%s.desktop", base_name);
@@ -172,13 +239,10 @@
g_strdelimit (link_name, "/", '-');
dir = g_file_new_for_uri (directory_uri);
- link = g_file_get_child (dir, link_name);
-
- uri = g_file_get_uri (link);
+ file = g_file_get_child (dir, link_name);
g_free (link_name);
g_object_unref (dir);
- g_object_unref (link);
}
g_free (real_directory_uri);
@@ -194,32 +258,26 @@
image != NULL ? "Icon=" : "",
image != NULL ? image : "");
- desktop_item = gnome_desktop_item_new_from_string (uri,
- contents,
- strlen (contents),
- 0,
- NULL);
- if (!desktop_item) {
- g_free (contents);
- g_free (uri);
- return FALSE;
- }
- if (!gnome_desktop_item_save (desktop_item, uri, TRUE, NULL)) {
- gnome_desktop_item_unref (desktop_item);
+ if (!g_file_replace_contents (file,
+ contents, strlen (contents),
+ NULL, FALSE,
+ G_FILE_CREATE_NONE,
+ NULL, NULL, NULL)) {
g_free (contents);
- g_free (uri);
+ g_object_unref (file);
return FALSE;
}
+ g_free (contents);
- dummy_list.data = uri;
+ dummy_list.data = file;
dummy_list.next = NULL;
dummy_list.prev = NULL;
- nautilus_directory_notify_files_added_by_uri (&dummy_list);
- nautilus_directory_schedule_metadata_remove_by_uri (&dummy_list);
+ nautilus_directory_notify_files_added (&dummy_list);
+ nautilus_directory_schedule_metadata_remove (&dummy_list);
if (point != NULL) {
- item.location = g_file_new_for_uri (uri);
+ item.location = file;
item.set = TRUE;
item.point.x = point->x;
item.point.y = point->y;
@@ -229,34 +287,56 @@
dummy_list.prev = NULL;
nautilus_directory_schedule_position_set (&dummy_list);
- g_object_unref (item.location);
}
- gnome_desktop_item_unref (desktop_item);
- g_free (contents);
- g_free (uri);
+ g_object_unref (file);
return TRUE;
}
-gboolean
-nautilus_link_local_set_text (const char *uri,
- const char *text)
+static gboolean
+nautilus_link_local_set_key (const char *uri,
+ const char *key,
+ const char *value)
{
- GnomeDesktopItem *desktop_file;
gboolean success;
-
- desktop_file = gnome_desktop_item_new_from_uri (uri, 0, NULL);
- if (desktop_file == NULL) {
+ GKeyFile *key_file;
+ GFile *file;
+
+ file = g_file_new_for_uri (uri);
+ key_file = g_key_file_new ();
+ if (!_g_key_file_load_from_gfile (key_file, file, G_KEY_FILE_KEEP_COMMENTS, NULL)) {
+ g_key_file_free (key_file);
+ g_object_unref (file);
return FALSE;
}
- gnome_desktop_item_set_localestring (desktop_file, "Name", text);
- success = gnome_desktop_item_save (desktop_file, NULL, FALSE, NULL);
- gnome_desktop_item_unref (desktop_file);
+ g_key_file_set_locale_string (key_file,
+ MAIN_GROUP,
+ key,
+ NULL, value);
+
+ success = _g_key_file_save_to_gfile (key_file, file, NULL);
+ g_key_file_free (key_file);
+ g_object_unref (file);
return success;
}
+gboolean
+nautilus_link_local_set_text (const char *uri,
+ const char *text)
+{
+ return nautilus_link_local_set_key (uri, "Name", text);
+}
+
+
+gboolean
+nautilus_link_local_set_icon (const char *uri,
+ const char *icon)
+{
+ return nautilus_link_local_set_key (uri, "Icon", icon);
+}
+
char *
nautilus_link_local_get_text (const char *path)
{
@@ -296,31 +376,32 @@
}
static char *
-nautilus_link_get_link_uri_from_desktop (GnomeDesktopItem *desktop_file)
+nautilus_link_get_link_uri_from_desktop (GKeyFile *key_file, const char *desktop_file_uri)
{
GFile *file, *parent;
- const char *type;
+ char *type;
char *retval;
char *scheme;
retval = NULL;
- type = gnome_desktop_item_get_string (desktop_file, "Type");
+ type = g_key_file_get_string (key_file, MAIN_GROUP, "Type", NULL);
if (type == NULL) {
return NULL;
}
if (strcmp (type, "URL") == 0) {
/* Some old broken desktop files use this nonstandard feature, we need handle it though */
- retval = g_strdup (gnome_desktop_item_get_string (desktop_file, "Exec"));
+ retval = g_key_file_get_string (key_file, MAIN_GROUP, "Exec", NULL);
} else if ((strcmp (type, NAUTILUS_LINK_GENERIC_TAG) == 0) ||
(strcmp (type, NAUTILUS_LINK_MOUNT_TAG) == 0) ||
(strcmp (type, NAUTILUS_LINK_TRASH_TAG) == 0) ||
(strcmp (type, NAUTILUS_LINK_HOME_TAG) == 0)) {
- retval = g_strdup (gnome_desktop_item_get_string (desktop_file, "URL"));
+ retval = g_key_file_get_string (key_file, MAIN_GROUP, "URL", NULL);
}
+ g_free (type);
- if (retval != NULL) {
+ if (retval != NULL && desktop_file_uri != NULL) {
/* Handle local file names.
* Ideally, we'd be able to use
* g_file_parse_name(), but it does not know how to resolve
@@ -328,7 +409,7 @@
*/
scheme = g_uri_parse_scheme (retval);
if (scheme == NULL) {
- file = g_file_new_for_uri (gnome_desktop_item_get_location (desktop_file));
+ file = g_file_new_for_uri (desktop_file_uri);
parent = g_file_get_parent (file);
g_object_unref (file);
@@ -346,86 +427,77 @@
}
static char *
-nautilus_link_get_link_name_from_desktop (GnomeDesktopItem *desktop_file)
+nautilus_link_get_link_name_from_desktop (GKeyFile *key_file)
{
- return g_strdup (gnome_desktop_item_get_localestring (desktop_file, "Name"));
+ return g_key_file_get_locale_string (key_file, MAIN_GROUP, "Name", NULL, NULL);
}
static char *
-nautilus_link_get_link_icon_from_desktop (GnomeDesktopItem *desktop_file)
+nautilus_link_get_link_icon_from_desktop (GKeyFile *key_file)
{
- char *icon_uri, *icon_copy, *p;
- const char *icon;
- GnomeDesktopItemType desktop_type;
+ char *icon_uri, *icon, *p, *type;
- icon_uri = g_strdup (gnome_desktop_item_get_string (desktop_file, "X-Nautilus-Icon"));
+ icon_uri = g_key_file_get_string (key_file, MAIN_GROUP, "X-Nautilus-Icon", NULL);
if (icon_uri != NULL) {
return icon_uri;
}
- icon = gnome_desktop_item_get_string (desktop_file, GNOME_DESKTOP_ITEM_ICON);
+ icon = g_key_file_get_string (key_file, MAIN_GROUP, "Icon", NULL);
if (icon != NULL) {
- icon_copy = g_strdup (icon);
- if (!g_path_is_absolute (icon_copy)) {
+ if (!g_path_is_absolute (icon)) {
/* Strip out any extension on non-filename icons. Old desktop files may have this */
- p = strchr (icon_copy, '.');
+ p = strchr (icon, '.');
/* Only strip known icon extensions */
if ((p != NULL) &&
- ((g_ascii_strcasecmp (p, ".png") == 0)
- || (g_ascii_strcasecmp (p, ".svn") == 0)
- || (g_ascii_strcasecmp (p, ".jpg") == 0)
- || (g_ascii_strcasecmp (p, ".xpm") == 0)
- || (g_ascii_strcasecmp (p, ".bmp") == 0)
- || (g_ascii_strcasecmp (p, ".jpeg") == 0))) {
+ ((g_ascii_strcasecmp (p, ".png") == 0)
+ || (g_ascii_strcasecmp (p, ".svn") == 0)
+ || (g_ascii_strcasecmp (p, ".jpg") == 0)
+ || (g_ascii_strcasecmp (p, ".xpm") == 0)
+ || (g_ascii_strcasecmp (p, ".bmp") == 0)
+ || (g_ascii_strcasecmp (p, ".jpeg") == 0))) {
*p = 0;
}
}
- return icon_copy;
+ return icon;
}
- desktop_type = gnome_desktop_item_get_entry_type (desktop_file);
- switch (desktop_type) {
- case GNOME_DESKTOP_ITEM_TYPE_APPLICATION:
- return g_strdup ("gnome-fs-executable");
-
- case GNOME_DESKTOP_ITEM_TYPE_LINK:
- return g_strdup ("gnome-dev-symlink");
-
- case GNOME_DESKTOP_ITEM_TYPE_FSDEVICE:
- return g_strdup ("gnome-dev-harddisk");
-
- case GNOME_DESKTOP_ITEM_TYPE_DIRECTORY:
- return g_strdup (NAUTILUS_ICON_FOLDER);
-
- case GNOME_DESKTOP_ITEM_TYPE_SERVICE:
- case GNOME_DESKTOP_ITEM_TYPE_SERVICE_TYPE:
- return g_strdup ("gnome-fs-web");
-
- default:
- return g_strdup ("gnome-fs-regular");
+ type = g_key_file_get_string (key_file, MAIN_GROUP, "Type", NULL);
+ if (strcmp (type, "Application") == 0) {
+ icon = g_strdup ("gnome-fs-executable");
+ } else if (strcmp (type, "Link") == 0) {
+ icon = g_strdup ("gnome-dev-symlink");
+ } else if (strcmp (type, "FSDevice") == 0) {
+ icon = g_strdup ("gnome-dev-harddisk");
+ } else if (strcmp (type, "Directory") == 0) {
+ icon = g_strdup (NAUTILUS_ICON_FOLDER);
+ } else if (strcmp (type, "Service") == 0 ||
+ strcmp (type, "ServiceType") == 0) {
+ icon = g_strdup ("gnome-fs-web");
+ } else {
+ icon = g_strdup ("gnome-fs-regular");
}
+ g_free (type);
- g_assert_not_reached ();
- return NULL;
+ return icon;
}
char *
nautilus_link_local_get_link_uri (const char *uri)
{
- GnomeDesktopItem *desktop_file;
+ GKeyFile *key_file;
char *retval;
if (!is_local_file_a_link (uri)) {
return NULL;
}
- desktop_file = gnome_desktop_item_new_from_uri (uri, 0, NULL);
- if (desktop_file == NULL) {
+ key_file = _g_key_file_new_from_uri (uri, G_KEY_FILE_NONE, NULL);
+ if (key_file == NULL) {
return NULL;
}
- retval = nautilus_link_get_link_uri_from_desktop (desktop_file);
- gnome_desktop_item_unref (desktop_file);
+ retval = nautilus_link_get_link_uri_from_desktop (key_file, uri);
+ g_key_file_free (key_file);
return retval;
}
@@ -439,72 +511,35 @@
char **icon,
gboolean *is_launcher)
{
- GnomeDesktopItem *desktop_file;
- const char *type;
+ GKeyFile *key_file;
+ char *type;
if (!is_link_data (file_contents, link_file_size)) {
return;
}
- desktop_file = gnome_desktop_item_new_from_string (NULL, file_contents, link_file_size, 0, NULL);
- if (desktop_file == NULL) {
+ key_file = g_key_file_new ();
+ if (!g_key_file_load_from_data (key_file,
+ file_contents,
+ link_file_size,
+ G_KEY_FILE_NONE,
+ NULL)) {
+ g_key_file_free (key_file);
return;
}
- gnome_desktop_item_set_location (desktop_file, file_uri);
-
- *uri = nautilus_link_get_link_uri_from_desktop (desktop_file);
- *name = nautilus_link_get_link_name_from_desktop (desktop_file);
- *icon = nautilus_link_get_link_icon_from_desktop (desktop_file);
+ *uri = nautilus_link_get_link_uri_from_desktop (key_file, file_uri);
+ *name = nautilus_link_get_link_name_from_desktop (key_file);
+ *icon = nautilus_link_get_link_icon_from_desktop (key_file);
*is_launcher = FALSE;
- type = gnome_desktop_item_get_string (desktop_file, "Type");
+ type = g_key_file_get_string (key_file, MAIN_GROUP, "Type", NULL);
if (type != NULL &&
strcmp (type, "Application") == 0 &&
- gnome_desktop_item_get_string (desktop_file, "Exec") != NULL) {
+ g_key_file_has_key (key_file, MAIN_GROUP, "Exec", NULL)) {
*is_launcher = TRUE;
}
+ g_free (type);
- gnome_desktop_item_unref (desktop_file);
-}
-
-void
-nautilus_link_local_create_from_gnome_entry (GnomeDesktopItem *entry,
- const char *dest_uri,
- const GdkPoint *position,
- int screen)
-{
- GList dummy_list;
- NautilusFileChangesQueuePosition item;
- GnomeDesktopItem *new_entry;
- char *file_uri;
- const char *name;
-
- name = gnome_desktop_item_get_string (entry, GNOME_DESKTOP_ITEM_NAME);
- file_uri = g_strdup_printf ("%s/%s.desktop", dest_uri, name);
-
- new_entry = gnome_desktop_item_copy (entry);
- gnome_desktop_item_save (new_entry, file_uri, TRUE, NULL);
-
- dummy_list.data = file_uri;
- dummy_list.next = NULL;
- dummy_list.prev = NULL;
- nautilus_directory_notify_files_added_by_uri (&dummy_list);
- nautilus_directory_schedule_metadata_remove_by_uri (&dummy_list);
-
- if (position != NULL) {
- item.location = g_file_new_for_uri (file_uri);
- item.set = TRUE;
- item.point.x = position->x;
- item.point.y = position->y;
- item.screen = screen;
-
- dummy_list.data = &item;
- dummy_list.next = NULL;
- dummy_list.prev = NULL;
-
- nautilus_directory_schedule_position_set (&dummy_list);
- g_object_unref (item.location);
- }
- gnome_desktop_item_unref (new_entry);
+ g_key_file_free (key_file);
}
Modified: trunk/libnautilus-private/nautilus-link.h
==============================================================================
--- trunk/libnautilus-private/nautilus-link.h (original)
+++ trunk/libnautilus-private/nautilus-link.h Mon Oct 6 12:43:37 2008
@@ -26,7 +26,6 @@
#define NAUTILUS_LINK_H
#include <gdk/gdk.h>
-#include <libgnome/gnome-desktop-item.h>
gboolean nautilus_link_local_create (const char *directory_uri,
const char *base_name,
@@ -38,6 +37,8 @@
gboolean unique_filename);
gboolean nautilus_link_local_set_text (const char *uri,
const char *text);
+gboolean nautilus_link_local_set_icon (const char *uri,
+ const char *icon);
char * nautilus_link_local_get_text (const char *uri);
char * nautilus_link_local_get_additional_text (const char *uri);
char * nautilus_link_local_get_link_uri (const char *uri);
@@ -48,9 +49,5 @@
char **name,
char **icon,
gboolean *is_launcher);
-void nautilus_link_local_create_from_gnome_entry (GnomeDesktopItem *entry,
- const char *dest_uri,
- const GdkPoint *position,
- int screen);
#endif /* NAUTILUS_LINK_H */
Modified: trunk/src/file-manager/fm-properties-window.c
==============================================================================
--- trunk/src/file-manager/fm-properties-window.c (original)
+++ trunk/src/file-manager/fm-properties-window.c Mon Oct 6 12:43:37 2008
@@ -5583,7 +5583,6 @@
set_icon (const char* icon_uri, FMPropertiesWindow *properties_window)
{
NautilusFile *file;
- GnomeDesktopItem *ditem;
char *file_uri;
char *icon_path;
char *real_icon_uri;
@@ -5602,16 +5601,7 @@
file_uri = nautilus_file_get_uri (file);
if (nautilus_file_is_mime_type (file, "application/x-desktop")) {
- ditem = gnome_desktop_item_new_from_uri (file_uri,
- 0,
- NULL);
-
- if (ditem != NULL) {
- gnome_desktop_item_set_string (ditem,
- GNOME_DESKTOP_ITEM_ICON,
- icon_path);
- gnome_desktop_item_save (ditem, NULL, TRUE, NULL);
- gnome_desktop_item_unref (ditem);
+ if (nautilus_link_local_set_icon (file_uri, icon_path)) {
nautilus_file_invalidate_attributes (file,
NAUTILUS_FILE_ATTRIBUTE_INFO |
NAUTILUS_FILE_ATTRIBUTE_LINK_INFO);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]