From bee6563769a320102ca81ba9208e9f6d7a8f30aa Mon Sep 17 00:00:00 2001 From: Mikael Magnusson Date: Sun, 2 Mar 2008 02:37:43 +0100 Subject: [PATCH] Allow the SendKeyEvent action to send keys to the "usual" target, so you can use it in AllClients. --- openbox/actions/sendkeyevent.c | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/openbox/actions/sendkeyevent.c b/openbox/actions/sendkeyevent.c index 129eb501..2b3a6adf 100644 --- a/openbox/actions/sendkeyevent.c +++ b/openbox/actions/sendkeyevent.c @@ -8,6 +8,7 @@ typedef struct { KeyCode key; + gboolean target; } Options; static gpointer setup_sendkey_func(xmlNodePtr node); @@ -49,6 +50,7 @@ static gpointer setup_sendkey_func(xmlNodePtr node) Options *o; o = g_new0(Options, 1); + o->target = TRUE; if ((n = obt_parse_find_node(node, "key"))) { gchar *s = obt_parse_node_string(n); @@ -56,6 +58,8 @@ static gpointer setup_sendkey_func(xmlNodePtr node) g_free(s); } else o->key = parse_key("space"); + if ((n = obt_parse_find_node(node, "usetarget"))) + o->target = obt_parse_node_bool(n); return o; } @@ -65,18 +69,26 @@ static gboolean sendkey(ObActionsData *data, gpointer options) { Options *o = options; XEvent ev; + Window win; if (!o->key) /* the key couldn't be parsed */ return FALSE; - ev.xkey.window = target; + if (o->target) + win = target; + else if (data->client) + win = data->client->window; + else + return FALSE; + + ev.xkey.window = win; ev.xkey.state = 0; ev.xkey.keycode = o->key; obt_display_ignore_errors(TRUE); ev.type = KeyPress; - XSendEvent(obt_display, target, False, 0, &ev); + XSendEvent(obt_display, win, False, 0, &ev); ev.type = KeyRelease; - XSendEvent(obt_display, target, False, 0, &ev); + XSendEvent(obt_display, win, False, 0, &ev); obt_display_ignore_errors(FALSE); return FALSE; -- 2.34.1