diff options
author | Kristian Høgsberg <krh@redhat.com> | 2006-07-14 01:00:45 -0400 |
---|---|---|
committer | Kristian Høgsberg <krh@redhat.com> | 2006-07-14 01:00:45 -0400 |
commit | d2986d1f4e395e35a5974874387cfa9ab9e37fb2 (patch) | |
tree | 633fb9e9ae4e5688bb37d57f42de5865cb3052a9 | |
parent | 272475fb90b5ddce862fbc8d27bc7661a3ef0e5b (diff) |
Use g_shell_parse_argv() for parsing exec line an filter %u etc.
-rw-r--r-- | dock.c | 32 |
1 files changed, 28 insertions, 4 deletions
@@ -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) |