X-Git-Url: https://git.dogcows.com/gitweb?a=blobdiff_plain;f=openbox%2Factions%2Fdirectionalwindows.c;h=e8410c96cc217fb954dc611bb771ee0f3b699748;hb=6c760c5a63a2e49bc2a5a4f39f8b4b9ed285bd7e;hp=0d1476c7936b3c1aab7b037c89524a015f534edc;hpb=d18d9c9379e3387073fc9346e9857fdde077b985;p=chaz%2Fopenbox diff --git a/openbox/actions/directionalwindows.c b/openbox/actions/directionalwindows.c index 0d1476c7..e8410c96 100644 --- a/openbox/actions/directionalwindows.c +++ b/openbox/actions/directionalwindows.c @@ -6,6 +6,7 @@ #include "openbox/openbox.h" #include "openbox/misc.h" #include "gettext.h" +#include "obt/keyboard.h" typedef struct { gboolean interactive; @@ -31,6 +32,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); @@ -137,18 +139,18 @@ static gpointer setup_func(xmlNodePtr node) o->dialog = TRUE; o->bar = TRUE; - if ((n = obt_parse_find_node(node, "dialog"))) - o->dialog = obt_parse_node_bool(n); - 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, "direction"))) { - gchar *s = obt_parse_node_string(n); + if ((n = obt_xml_find_node(node, "dialog"))) + o->dialog = obt_xml_node_bool(n); + 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, "direction"))) { + gchar *s = obt_xml_node_string(n); if (!g_ascii_strcasecmp(s, "north") || !g_ascii_strcasecmp(s, "up")) o->direction = OB_DIRECTION_NORTH; @@ -172,14 +174,14 @@ static gpointer setup_func(xmlNodePtr node) g_free(s); } - if ((n = obt_parse_find_node(node, "finalactions"))) { + 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 { @@ -253,9 +255,19 @@ static gboolean run_func(ObActionsData *data, gpointer options) static gboolean i_input_func(guint initial_state, XEvent *e, + ObtIC *ic, gpointer options, gboolean *used) { + 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) { /* Escape cancels no matter what */ if (ob_keycode_match(e->xkey.keycode, OB_KEY_ESCAPE)) { @@ -272,8 +284,7 @@ static gboolean i_input_func(guint initial_state, } } /* 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)) { end_cycle(FALSE, e->xkey.state, options); return FALSE;