summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKristian Høgsberg <krh@redhat.com>2006-07-14 01:00:45 -0400
committerKristian Høgsberg <krh@redhat.com>2006-07-14 01:00:45 -0400
commitd2986d1f4e395e35a5974874387cfa9ab9e37fb2 (patch)
tree633fb9e9ae4e5688bb37d57f42de5865cb3052a9
parent272475fb90b5ddce862fbc8d27bc7661a3ef0e5b (diff)
Use g_shell_parse_argv() for parsing exec line an filter %u etc.
-rw-r--r--dock.c32
1 files changed, 28 insertions, 4 deletions
diff --git a/dock.c b/dock.c
index fc87307..27fa132 100644
--- a/dock.c
+++ b/dock.c
@@ -532,10 +532,37 @@ static gboolean
kiba_launcher_exec (gpointer data)
{
KibaLauncher *launcher = data;
- char **argv;
+ int argc;
+ char **argv, **p, **q;
GError *error = NULL;
const KibaDockLayoutData *d;
+ /* FIXME: Support drag and drop on launchers with %U and %F */
+ if (!g_shell_parse_argv (launcher->exec, &argc, &argv, &error))
+ {
+ g_error ("failed to parse '%s': %s\n", launcher->exec, error->message);
+ g_error_free (error);
+ return FALSE;
+ }
+
+ for (p = argv, q = argv; *p != NULL; p++)
+ {
+ if (*p[0] == '%' || strlen (*p) == 2)
+ switch (*p[1])
+ {
+ case 'U':
+ case 'u':
+ case 'F':
+ case 'f':
+ default:
+ g_free (*p);
+ break;
+ }
+ else
+ *q++ = *p;
+ }
+ *q++ = NULL;
+
/* Bounce the icon. */
d = &kiba_dock_layout_data[launcher->dock->position];
@@ -546,9 +573,6 @@ kiba_launcher_exec (gpointer data)
launcher->object->previous_position.y +=
(d->valignment - 1) * g_random_double_range (5, 10);
- /* FIXME: Support drag and drop on launchers with %U and %F */
- /* FIXME: Use g_shell_quote or split or whatever it was... */
- argv = g_strsplit (launcher->exec, " ", 0);
g_spawn_async (NULL, argv, NULL, G_SPAWN_SEARCH_PATH,
NULL, NULL, NULL, &error);
if (error != NULL)