X-Git-Url: https://git.dogcows.com/gitweb?a=blobdiff_plain;ds=sidebyside;f=openbox%2Factions%2Fdesktop.c;h=6c30d56de3fb9e28df54e36d4bc358c8083a2bb0;hb=e61fd8874a8352fb5fa1c4b2ab84d29679fa7b0c;hp=14f6ef20c4f328ea4e57519588fd6e16d207458f;hpb=1a348576400b26dad3a58a81415c4c833fb4915c;p=chaz%2Fopenbox diff --git a/openbox/actions/desktop.c b/openbox/actions/desktop.c index 14f6ef20..6c30d56d 100644 --- a/openbox/actions/desktop.c +++ b/openbox/actions/desktop.c @@ -2,7 +2,7 @@ #include "openbox/screen.h" #include "openbox/client.h" #include "openbox/openbox.h" -#include +#include "obt/keyboard.h" typedef enum { LAST, @@ -43,6 +43,7 @@ static gboolean run_func(ObActionsData *data, gpointer options); static gboolean i_pre_func(guint state, gpointer options); static gboolean i_input_func(guint initial_state, XEvent *e, + ObtIC *ic, gpointer options, gboolean *used); static void i_post_func(gpointer options); @@ -160,8 +161,8 @@ static gpointer setup_func(xmlNodePtr node, /* wrap by default - it's handy! */ o->u.rel.wrap = TRUE; - if ((n = obt_parse_find_node(node, "to"))) { - gchar *s = obt_parse_node_string(n); + if ((n = obt_xml_find_node(node, "to"))) { + gchar *s = obt_xml_node_string(n); if (!g_ascii_strcasecmp(s, "last")) o->type = LAST; else if (!g_ascii_strcasecmp(s, "next")) { @@ -201,8 +202,8 @@ static gpointer setup_func(xmlNodePtr node, g_free(s); } - if ((n = obt_parse_find_node(node, "wrap"))) - o->u.rel.wrap = obt_parse_node_bool(n); + if ((n = obt_xml_find_node(node, "wrap"))) + o->u.rel.wrap = obt_xml_node_bool(n); return o; } @@ -240,8 +241,8 @@ static gpointer setup_send_func(xmlNodePtr node, o->send = TRUE; o->follow = TRUE; - if ((n = obt_parse_find_node(node, "follow"))) - o->follow = obt_parse_node_bool(n); + if ((n = obt_xml_find_node(node, "follow"))) + o->follow = obt_xml_node_bool(n); if (o->type == RELATIVE && o->follow) { o->interactive = TRUE; @@ -297,25 +298,32 @@ 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) { + 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) 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) 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)) { return FALSE; } @@ -348,8 +356,8 @@ static gpointer setup_follow(xmlNodePtr node) Options *o = g_new0(Options, 1); o->send = TRUE; o->follow = TRUE; - if ((n = obt_parse_find_node(node, "follow"))) - o->follow = obt_parse_node_bool(n); + if ((n = obt_xml_find_node(node, "follow"))) + o->follow = obt_xml_node_bool(n); return o; } @@ -372,8 +380,8 @@ static gpointer setup_go_abs_func(xmlNodePtr node) xmlNodePtr n; Options *o = g_new0(Options, 1); o->type = ABSOLUTE; - if ((n = obt_parse_find_node(node, "desktop"))) - o->u.abs.desktop = obt_parse_node_int(n) - 1; + if ((n = obt_xml_find_node(node, "desktop"))) + o->u.abs.desktop = obt_xml_node_int(n) - 1; else o->u.abs.desktop = screen_desktop; return o; @@ -384,8 +392,8 @@ static gpointer setup_send_abs_func(xmlNodePtr node) xmlNodePtr n; Options *o = setup_follow(node); o->type = ABSOLUTE; - if ((n = obt_parse_find_node(node, "desktop"))) - o->u.abs.desktop = obt_parse_node_int(n) - 1; + if ((n = obt_xml_find_node(node, "desktop"))) + o->u.abs.desktop = obt_xml_node_int(n) - 1; else o->u.abs.desktop = screen_desktop; return o; @@ -404,8 +412,8 @@ static void setup_rel(Options *o, xmlNodePtr node, gboolean lin, o->u.rel.dir = dir; o->u.rel.wrap = TRUE; - if ((n = obt_parse_find_node(node, "wrap"))) - o->u.rel.wrap = obt_parse_node_bool(n); + if ((n = obt_xml_find_node(node, "wrap"))) + o->u.rel.wrap = obt_xml_node_bool(n); if (input) { o->interactive = TRUE;