]> Dogcows Code - chaz/openbox/blobdiff - openbox/keyboard.c
export if an interactive grab is in progress
[chaz/openbox] / openbox / keyboard.c
index 54de380c4a38a8fc6d05a381df6ec8370d0230b9..1499421353597377dff61036373fef075a0eac3f 100644 (file)
@@ -39,7 +39,7 @@ KeyBindingTree *keyboard_firstnode;
 typedef struct {
     guint state;
     ObClient *client;
-    ObAction *action;
+    GSList *actions;
     ObFrameContext context;
 } ObInteractiveState;
 
@@ -155,6 +155,11 @@ gboolean keyboard_bind(GList *keylist, ObAction *action)
     return TRUE;
 }
 
+gboolean keyboard_interactive_grab_in_progress()
+{
+    return interactive_states != NULL;
+}
+
 void keyboard_interactive_grab(guint state, ObClient *client,
                                ObAction *action)
 {
@@ -178,7 +183,7 @@ void keyboard_interactive_grab(guint state, ObClient *client,
 
     s->state = state;
     s->client = client;
-    s->action = action;
+    s->actions = g_slist_append(NULL, action);
 
     interactive_states = g_slist_append(interactive_states, s);
 }
@@ -186,8 +191,9 @@ void keyboard_interactive_grab(guint state, ObClient *client,
 void keyboard_interactive_end(ObInteractiveState *s,
                               guint state, gboolean cancel)
 {
-    action_run_interactive(s->action, s->client, state, cancel, TRUE);
+    action_run_interactive(s->actions, s->client, state, cancel, TRUE);
 
+    g_slist_free(s->actions);
     g_free(s);
 
     interactive_states = g_slist_remove(interactive_states, s);
@@ -276,13 +282,11 @@ void keyboard_event(ObClient *client, const XEvent *e)
                 curpos = p;
                 grab_keys(TRUE);
             } else {
-                GSList *it;
-
-                for (it = p->actions; it; it = it->next)
-                    action_run_key(it->data, client, e->xkey.state,
-                                   e->xkey.x_root, e->xkey.y_root);
 
                 keyboard_reset_chains();
+
+                action_run_key(p->actions, client, e->xkey.state,
+                               e->xkey.x_root, e->xkey.y_root);
             }
             break;
         }
This page took 0.023692 seconds and 4 git commands to generate.