X-Git-Url: https://git.brokenzipper.com/gitweb?a=blobdiff_plain;f=openbox%2Factions%2Fcyclewindows.c;h=52349091f8954689796212bf074e7de57d5509f5;hb=d45af3cb45f35ba639efac15675ed10b3515a7f0;hp=28618ef32c8ecd6438d5bba6241d2ea911cf099e;hpb=a03b817aeb7fe32be881c30d50fab79455db08c5;p=chaz%2Fopenbox diff --git a/openbox/actions/cyclewindows.c b/openbox/actions/cyclewindows.c index 28618ef3..52349091 100644 --- a/openbox/actions/cyclewindows.c +++ b/openbox/actions/cyclewindows.c @@ -5,6 +5,7 @@ #include "openbox/focus_cycle.h" #include "openbox/openbox.h" #include "gettext.h" +#include "obt/keyboard.h" typedef struct { gboolean linear; @@ -42,6 +43,7 @@ static void free_func(gpointer options); static gboolean run_func(ObActionsData *data, gpointer options); static gboolean i_input_func(guint initial_state, XEvent *e, + ObtIC *ic, gpointer options, gboolean *used); static void i_cancel_func(gpointer options); @@ -67,33 +69,33 @@ static gpointer setup_func(xmlNodePtr node, o->bar = TRUE; o->dialog_mode = OB_FOCUS_CYCLE_POPUP_MODE_LIST; - if ((n = obt_parse_find_node(node, "linear"))) - o->linear = obt_parse_node_bool(n); - if ((n = obt_parse_find_node(node, "dialog"))) { - if (obt_parse_node_contains(n, "none")) + if ((n = obt_xml_find_node(node, "linear"))) + o->linear = obt_xml_node_bool(n); + if ((n = obt_xml_find_node(node, "dialog"))) { + if (obt_xml_node_contains(n, "none")) o->dialog_mode = OB_FOCUS_CYCLE_POPUP_MODE_NONE; - else if (obt_parse_node_contains(n, "icons")) + else if (obt_xml_node_contains(n, "icons")) o->dialog_mode = OB_FOCUS_CYCLE_POPUP_MODE_ICONS; } - if ((n = obt_parse_find_node(node, "bar"))) - o->bar = obt_parse_node_bool(n); - if ((n = obt_parse_find_node(node, "raise"))) - o->raise = obt_parse_node_bool(n); - if ((n = obt_parse_find_node(node, "panels"))) - o->dock_windows = obt_parse_node_bool(n); - if ((n = obt_parse_find_node(node, "desktop"))) - o->desktop_windows = obt_parse_node_bool(n); - if ((n = obt_parse_find_node(node, "allDesktops"))) - o->all_desktops = obt_parse_node_bool(n); - - if ((n = obt_parse_find_node(node, "finalactions"))) { + if ((n = obt_xml_find_node(node, "bar"))) + o->bar = obt_xml_node_bool(n); + if ((n = obt_xml_find_node(node, "raise"))) + o->raise = obt_xml_node_bool(n); + if ((n = obt_xml_find_node(node, "panels"))) + o->dock_windows = obt_xml_node_bool(n); + if ((n = obt_xml_find_node(node, "desktop"))) + o->desktop_windows = obt_xml_node_bool(n); + if ((n = obt_xml_find_node(node, "allDesktops"))) + o->all_desktops = obt_xml_node_bool(n); + + if ((n = obt_xml_find_node(node, "finalactions"))) { xmlNodePtr m; - m = obt_parse_find_node(n->children, "action"); + m = obt_xml_find_node(n->children, "action"); while (m) { ObActionsAct *action = actions_parse(m); if (action) o->actions = g_slist_append(o->actions, action); - m = obt_parse_find_node(m->next, "action"); + m = obt_xml_find_node(m->next, "action"); } } else { @@ -168,31 +170,39 @@ static gboolean run_func(ObActionsData *data, gpointer options) static gboolean i_input_func(guint initial_state, XEvent *e, + ObtIC *ic, gpointer options, gboolean *used) { Options *o = options; + guint mods; + + mods = obt_keyboard_only_modmasks(e->xkey.state); + if (e->type == KeyRelease) { + /* remove from the state the mask of the modifier key being + released, if it is a modifier key being released that is */ + mods &= ~obt_keyboard_keycode_to_modmask(e->xkey.keycode); + } if (e->type == KeyPress) { + KeySym sym = obt_keyboard_keypress_to_keysym(e); + /* Escape cancels no matter what */ - if (ob_keycode_match(e->xkey.keycode, OB_KEY_ESCAPE)) { + if (sym == XK_Escape) { o->cancel = TRUE; o->state = e->xkey.state; return FALSE; } /* There were no modifiers and they pressed enter */ - else if (ob_keycode_match(e->xkey.keycode, OB_KEY_RETURN) && - !initial_state) - { + else if (sym == XK_Return && !initial_state) { o->cancel = FALSE; o->state = e->xkey.state; return FALSE; } } /* They released the modifiers */ - else if (e->type == KeyRelease && initial_state && - (e->xkey.state & initial_state) == 0) + else if (e->type == KeyRelease && initial_state && !(mods & initial_state)) { o->cancel = FALSE; o->state = e->xkey.state;