]> Dogcows Code - chaz/openbox/blobdiff - openbox/actions/unfocus.c
add the unfocus action
[chaz/openbox] / openbox / actions / unfocus.c
diff --git a/openbox/actions/unfocus.c b/openbox/actions/unfocus.c
new file mode 100644 (file)
index 0000000..d581864
--- /dev/null
@@ -0,0 +1,53 @@
+#include "openbox/actions.h"
+#include "openbox/focus.h"
+
+typedef struct {
+    gboolean tobottom;
+} Options;
+
+static gpointer setup_func(ObParseInst *i, xmlDocPtr doc, xmlNodePtr node);
+static void     free_func(gpointer options);
+static gboolean run_func(ObActionsData *data, gpointer options);
+
+void action_unfocus_startup()
+{
+    actions_register("Unfocus",
+                     setup_func,
+                     free_func,
+                     run_func,
+                     NULL, NULL);
+}
+
+static gpointer setup_func(ObParseInst *i, xmlDocPtr doc, xmlNodePtr node)
+{
+    xmlNodePtr n;
+    Options *o;
+
+    o = g_new0(Options, 1);
+    o->tobottom = TRUE;
+
+    if ((n = parse_find_node("tobottom", node)))
+        o->tobottom = parse_bool(doc, n);
+    return o;
+}
+
+static void free_func(gpointer options)
+{
+    Options *o = options;
+
+    g_free(o);
+}
+
+/* Always return FALSE because its not interactive */
+static gboolean run_func(ObActionsData *data, gpointer options)
+{
+    Options *o = options;
+
+    if (data->client && data->client == focus_client) {
+        if (o->tobottom)
+            focus_order_to_bottom(data->client);
+        focus_fallback(FALSE, FALSE, TRUE);
+    }
+
+    return FALSE;
+}
This page took 0.021062 seconds and 4 git commands to generate.