X-Git-Url: https://git.dogcows.com/gitweb?a=blobdiff_plain;ds=sidebyside;f=openbox%2Factions%2Fexecute.c;h=bde7f5d25a24ff4dc66dbd154fa160580646597e;hb=965ed8907a5dd81d5ffbc93b67a672fa78833854;hp=81aa6d22b881d0b795de19e186aba0e958388348;hpb=9676757a08b3e2e508c47f7795326bda8e54dc53;p=chaz%2Fopenbox diff --git a/openbox/actions/execute.c b/openbox/actions/execute.c index 81aa6d22..bde7f5d2 100644 --- a/openbox/actions/execute.c +++ b/openbox/actions/execute.c @@ -33,7 +33,7 @@ static void i_cancel_func(gpointer options); void action_execute_startup(void) { - actions_register("Execute", setup_func, free_func, run_func, NULL, NULL); + actions_register("Execute", setup_func, free_func, run_func); } static gpointer setup_func(xmlNodePtr node) @@ -96,11 +96,15 @@ static Options* dup_options(Options *in) static gboolean run_func(ObActionsData *data, gpointer options); -static void prompt_cb(ObPrompt *p, gint result, gpointer options) +static gboolean prompt_cb(ObPrompt *p, gint result, gpointer options) { if (result) run_func(NULL, options); + return TRUE; /* call the cleanup func */ +} +static void prompt_cleanup(ObPrompt *p, gpointer options) +{ prompt_unref(p); free_func(options); } @@ -124,7 +128,8 @@ static gboolean run_func(ObActionsData *data, gpointer options) }; ocp = dup_options(options); - p = prompt_new(o->prompt, answers, 2, 0, 0, prompt_cb, ocp); + p = prompt_new(o->prompt, _("Execute"), answers, 2, 0, 0, + prompt_cb, prompt_cleanup, ocp); prompt_show(p, NULL, FALSE); return FALSE; @@ -139,7 +144,7 @@ static gboolean run_func(ObActionsData *data, gpointer options) if (data->client) { gchar *c, *before, *expand; - /* replace occurances of $pid and $window */ + /* replace occurrences of $pid and $wid */ expand = NULL; before = cmd; @@ -163,13 +168,12 @@ static gboolean run_func(ObActionsData *data, gpointer options) before = c + 4; /* 4 = strlen("$pid") */ } - - if ((c[1] == 'w' || c[1] == 'W') && - (c[2] == 'i' || c[2] == 'I') && - (c[3] == 'd' || c[3] == 'D') && - !g_ascii_isalnum(c[7])) + else if ((c[1] == 'w' || c[1] == 'W') && + (c[2] == 'i' || c[2] == 'I') && + (c[3] == 'd' || c[3] == 'D') && + !g_ascii_isalnum(c[4])) { - /* found $window */ + /* found $wid */ gchar *tmp; *c = '\0'; @@ -180,8 +184,10 @@ static gboolean run_func(ObActionsData *data, gpointer options) data->client->window); g_free(tmp); - before = c + 7; /* 4 = strlen("$window") */ + before = c + 4; /* 4 = strlen("$wid") */ } + else + before = c + 1; /* no infinite loops plz */ } if (expand) { @@ -204,7 +210,7 @@ static gboolean run_func(ObActionsData *data, gpointer options) e = NULL; if (!g_shell_parse_argv(cmd, NULL, &argv, &e)) { - g_message(_("Failed to execute \"%s\": %s"), o->cmd, e->message); + g_message(e->message, o->cmd); g_error_free(e); } else { @@ -226,8 +232,7 @@ static gboolean run_func(ObActionsData *data, gpointer options) G_SPAWN_DO_NOT_REAP_CHILD, NULL, NULL, NULL, &e); if (!ok) { - g_message(_("Failed to execute \"%s\": %s"), - o->cmd, e->message); + g_message(e->message, o->cmd); g_error_free(e); }