X-Git-Url: https://git.dogcows.com/gitweb?a=blobdiff_plain;f=openbox%2Faction.c;h=b01f9d3e59298c6bf54db472377acf0dcb00ecbb;hb=3addcd8bb9c65db54c43d6c829c2b041e4959ca9;hp=aa9465b8eb7fe366541db0b9ac9904e6aadd2e03;hpb=a019ee1028c396f7d5ec107d100b43222c945b59;p=chaz%2Fopenbox diff --git a/openbox/action.c b/openbox/action.c index aa9465b8..b01f9d3e 100644 --- a/openbox/action.c +++ b/openbox/action.c @@ -260,7 +260,9 @@ void setup_action_send_to_desktop_down(ObAction **a, ObUserAction uact) void setup_action_desktop(ObAction **a, ObUserAction uact) { +/* (*a)->data.desktop.inter.any.interactive = FALSE; +*/ } void setup_action_desktop_prev(ObAction **a, ObUserAction uact) @@ -1013,9 +1015,11 @@ ObAction *action_parse(ObParseInst *i, xmlDocPtr doc, xmlNodePtr node, if ((n = parse_find_node("desktop", node->xmlChildrenNode))) act->data.desktop.desk = parse_int(doc, n); if (act->data.desktop.desk > 0) act->data.desktop.desk--; +/* if ((n = parse_find_node("dialog", node->xmlChildrenNode))) act->data.desktop.inter.any.interactive = parse_bool(doc, n); +*/ } else if (act->func == action_send_to_desktop) { if ((n = parse_find_node("desktop", node->xmlChildrenNode))) act->data.sendto.desk = parse_int(doc, n); @@ -1139,7 +1143,7 @@ void action_run_list(GSList *acts, ObClient *c, ObFrameContext context, button release gettnig processed first. answer: don't queue moveresize starts. UGLY HACK XXX */ if (a->data.any.interactive || a->func == action_move || - a->func == action_resize) + a->func == action_resize || a->func == action_showmenu) { /* interactive actions are not queued */ a->func(&a->data); @@ -1206,27 +1210,14 @@ void action_execute(union ActionData *data) GError *e = NULL; gchar *cmd, **argv = 0; if (data->execute.path) { - /* Ungrab the keyboard before running the action. - - If there is an interactive action going on, then cancel it to - release the keyboard. If not, then call XUngrabKeyboard(). - - We call XUngrabKeyboard because a key press causes a passive - grab on the keyboard, and so if program we are executing wants to - grab the keyboard, it will fail if the button is still held down - (which is likely). - - Use the X function not out own, because we're not considering - a grab to be in place at all so our function won't try ungrab - anything. - */ - if (keyboard_interactively_grabbed()) - keyboard_interactive_cancel(); - else - XUngrabKeyboard(ob_display, data->any.time); - cmd = g_filename_from_utf8(data->execute.path, -1, NULL, NULL, NULL); if (cmd) { + /* If there is an interactive action going on, then cancel it + to release the keyboard, so that the run application + can grab the keyboard if it wants to. */ + if (keyboard_interactively_grabbed()) + keyboard_interactive_cancel(); + if (!g_shell_parse_argv (cmd, NULL, &argv, &e)) { g_message(_("Failed to execute '%s': %s"), cmd, e->message); @@ -1318,7 +1309,7 @@ void action_focus(union ActionData *data) void action_unfocus (union ActionData *data) { if (data->client.any.c == focus_client) - focus_fallback(TRUE); + focus_fallback(FALSE); } void action_iconify(union ActionData *data) @@ -1600,18 +1591,15 @@ void action_send_to_desktop(union ActionData *data) void action_desktop(union ActionData *data) { - if (!data->inter.any.interactive || - (!data->inter.cancel && !data->inter.final)) + /* XXX add the interactive/dialog option back again once the dialog + has been made to not use grabs */ + if (data->desktop.desk < screen_num_desktops || + data->desktop.desk == DESKTOP_ALL) { - if (data->desktop.desk < screen_num_desktops || - data->desktop.desk == DESKTOP_ALL) - { - screen_set_desktop(data->desktop.desk, TRUE); - if (data->inter.any.interactive) - screen_desktop_popup(data->desktop.desk, TRUE); - } - } else - screen_desktop_popup(0, FALSE); + screen_set_desktop(data->desktop.desk, TRUE); + if (data->inter.any.interactive) + screen_desktop_popup(data->desktop.desk, TRUE); + } } void action_desktop_dir(union ActionData *data)