X-Git-Url: https://git.dogcows.com/gitweb?a=blobdiff_plain;f=openbox%2Factions%2Fexecute.c;h=77244d8f1d5dc1ad686a50e161cc91744882cb90;hb=b06b684589a618a2481ccc2745d5e03abb6bd5e0;hp=81aa6d22b881d0b795de19e186aba0e958388348;hpb=93a38d46bfec781ff9783c0d5ff065f7b2f2b875;p=chaz%2Fopenbox diff --git a/openbox/actions/execute.c b/openbox/actions/execute.c index 81aa6d22..77244d8f 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) @@ -43,27 +43,27 @@ static gpointer setup_func(xmlNodePtr node) o = g_new0(Options, 1); - if ((n = obt_parse_find_node(node, "command")) || - (n = obt_parse_find_node(node, "execute"))) + if ((n = obt_xml_find_node(node, "command")) || + (n = obt_xml_find_node(node, "execute"))) { - gchar *s = obt_parse_node_string(n); + gchar *s = obt_xml_node_string(n); o->cmd = obt_paths_expand_tilde(s); g_free(s); } - if ((n = obt_parse_find_node(node, "prompt"))) - o->prompt = obt_parse_node_string(n); + if ((n = obt_xml_find_node(node, "prompt"))) + o->prompt = obt_xml_node_string(n); - if ((n = obt_parse_find_node(node, "startupnotify"))) { + if ((n = obt_xml_find_node(node, "startupnotify"))) { xmlNodePtr m; - if ((m = obt_parse_find_node(n->children, "enabled"))) - o->sn = obt_parse_node_bool(m); - if ((m = obt_parse_find_node(n->children, "name"))) - o->sn_name = obt_parse_node_string(m); - if ((m = obt_parse_find_node(n->children, "icon"))) - o->sn_icon = obt_parse_node_string(m); - if ((m = obt_parse_find_node(n->children, "wmclass"))) - o->sn_wmclass = obt_parse_node_string(m); + if ((m = obt_xml_find_node(n->children, "enabled"))) + o->sn = obt_xml_node_bool(m); + if ((m = obt_xml_find_node(n->children, "name"))) + o->sn_name = obt_xml_node_string(m); + if ((m = obt_xml_find_node(n->children, "icon"))) + o->sn_icon = obt_xml_node_string(m); + if ((m = obt_xml_find_node(n->children, "wmclass"))) + o->sn_wmclass = obt_xml_node_string(m); } return o; } @@ -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); }