kov changed gksu/trunk/ChangeLog,
gksu/trunk/nautilus-gksu/libnautilus-gksu.c
Gustavo Noronha
kov at costa.debian.org
Mon Jul 10 16:52:33 UTC 2006
Mensagem de log:
handles desktop files, and frees stuff correctly
-----
Modified: gksu/trunk/ChangeLog
===================================================================
--- gksu/trunk/ChangeLog 2006-07-09 22:58:30 UTC (rev 645)
+++ gksu/trunk/ChangeLog 2006-07-10 16:52:33 UTC (rev 646)
@@ -1,3 +1,8 @@
+2006-07-10 Gustavo Noronha Silva <gustavo.noronha at mds.gov.br>
+
+ * nautilus-gksu/libnautilus-gksu.c:
+ - handle .desktop files, as well, by reading their Exec key
+
2006-07-09 Gustavo Noronha Silva <kov at debian.org>
* nautilus-gksu:
Modified: gksu/trunk/nautilus-gksu/libnautilus-gksu.c
===================================================================
--- gksu/trunk/nautilus-gksu/libnautilus-gksu.c 2006-07-09 22:58:30 UTC (rev 645)
+++ gksu/trunk/nautilus-gksu/libnautilus-gksu.c 2006-07-10 16:52:33 UTC (rev 646)
@@ -4,8 +4,10 @@
#include <string.h>
#include <pthread.h>
+#include <glib/gkeyfile.h>
#include <gtk/gtk.h>
#include <libgnomevfs/gnome-vfs-mime-handlers.h>
+#include <libgnomevfs/gnome-vfs-utils.h>
#include <libnautilus-extension/nautilus-extension-types.h>
#include <libnautilus-extension/nautilus-menu-provider.h>
@@ -137,7 +139,6 @@
argv[1] = full_cmd;
argv[2] = NULL;
- g_printerr ("sgt: full_cmd: %s\n", full_cmd);
g_spawn_async (NULL, argv, NULL, G_SPAWN_SEARCH_PATH, NULL, NULL,
&pid, NULL);
@@ -158,15 +159,39 @@
gchar *cmd = NULL;
gchar *full_cmd = NULL;
gchar *tmp = NULL;
+ gboolean is_desktop = FALSE;
uri = nautilus_file_info_get_uri (file);
mime_type = nautilus_file_info_get_mime_type (file);
- vfsapp = gnome_vfs_mime_get_default_application_for_uri (uri, mime_type);
- g_free (mime_type);
+ if (!strcmp (mime_type, "application/x-desktop"))
+ { /* we're handling a .desktop file */
+ GKeyFile *key_file = g_key_file_new ();
+ GnomeVFSResult result;
+ gint file_size = 0;
+ gchar *content = NULL;
+ gint retval = 0;
- cmd = g_strdup (gnome_vfs_mime_application_get_exec (vfsapp));
+ is_desktop = TRUE;
+ result = gnome_vfs_read_entire_file (uri, &file_size, &content);
+ if (result == GNOME_VFS_OK)
+ {
+ retval = g_key_file_load_from_data (key_file, content, file_size, 0, NULL);
+ if (retval)
+ cmd = g_key_file_get_string (key_file, "Desktop Entry", "Exec", NULL);
+ g_key_file_free (key_file);
+ g_free (content);
+ }
+ }
+ else
+ {
+ vfsapp = gnome_vfs_mime_get_default_application_for_uri (uri, mime_type);
+
+ cmd = g_strdup (gnome_vfs_mime_application_get_exec (vfsapp));
+ gnome_vfs_mime_application_free (vfsapp);
+ }
+
/*
* FIXME: remove any FreeDesktop substitution variable for now; we
* need to process them!
@@ -174,16 +199,22 @@
tmp = strstr (cmd, "%");
*tmp = '\0';
- full_cmd = g_strdup_printf ("%s '%s'", cmd, uri);
- g_printerr ("full_cmd: %s\n", full_cmd);
+ if (is_desktop)
+ full_cmd = cmd;
+ else
+ {
+ full_cmd = g_strdup_printf ("%s '%s'", cmd, uri);
+ g_free (cmd);
+ }
{
pthread_t new_thread;
pthread_create (&new_thread, NULL, start_gksu_thread, (void*)full_cmd);
}
- gnome_vfs_mime_application_free (vfsapp);
+ /* full_cmd is freed by start_gksu_thread */
g_free (uri);
+ g_free (mime_type);
}
/* --- extension interface --- */
More information about the gksu-commits
mailing list