add focusable/nonfocusable to If action
authorMikael Magnusson <mikachu@gmail.com>
Sun, 23 Feb 2020 13:12:31 +0000 (14:12 +0100)
committerMikael Magnusson <mikachu@gmail.com>
Mon, 20 Mar 2023 06:28:02 +0000 (07:28 +0100)
openbox/actions/if.c

index 8ae1010ae398664bd95741b3ab3e4181d48d0ae2..f897576717e76c1bb3f775c799935013f56cd893 100644 (file)
@@ -62,6 +62,8 @@ typedef struct {
     gboolean fullscreen_off;
     gboolean focused;
     gboolean unfocused;
+    gboolean focusable;
+    gboolean nonfocusable;
     gboolean urgent_on;
     gboolean urgent_off;
     gboolean decor_off;
@@ -186,6 +188,7 @@ static void setup_query(Options* o, xmlNodePtr node, QueryTarget target) {
     set_bool(node, "iconified", &q->iconic_on, &q->iconic_off);
     set_bool(node, "fullscreen", &q->fullscreen_on, &q->fullscreen_off);
     set_bool(node, "focused", &q->focused, &q->unfocused);
+    set_bool(node, "focusable", &q->focusable, &q->nonfocusable);
     set_bool(node, "urgent", &q->urgent_on, &q->urgent_off);
     set_bool(node, "undecorated", &q->decor_off, &q->decor_on);
     set_bool(node, "omnipresent", &q->omnipresent_on, &q->omnipresent_off);
@@ -376,6 +379,11 @@ static gboolean run_func_if(ObActionsData *data, gpointer options)
         if (q->unfocused)
             is_true &= query_target != focus_client;
 
+        if (q->focusable)
+            is_true &= query_target->can_focus;
+        if (q->nonfocusable)
+            is_true &= !query_target->can_focus;
+
         gboolean is_urgent =
             query_target->urgent || query_target->demands_attention;
         if (q->urgent_on)