add the decorations action
authorDana Jansens <danakj@orodu.net>
Fri, 22 Jun 2007 18:51:28 +0000 (18:51 +0000)
committerDana Jansens <danakj@orodu.net>
Fri, 22 Jun 2007 18:51:28 +0000 (18:51 +0000)
Makefile.am
openbox/action.c
openbox/actions/all.c
openbox/actions/all.h
openbox/actions/decorations.c [new file with mode: 0644]

index 4d2b78a..b067543 100644 (file)
@@ -160,6 +160,7 @@ openbox_openbox_SOURCES = \
        openbox/actions/close.c \
        openbox/actions/cyclewindows.c \
        openbox/actions/debug.c \
+       openbox/actions/decorations.c \
        openbox/actions/directionalcyclewindows.c \
        openbox/actions/directionaltargetwindow.c \
        openbox/actions/execute.c \
index 61c2972..2dca0dd 100644 (file)
@@ -433,11 +433,6 @@ ActionString actionstrings[] =
         setup_action_desktop_down
     },
     {
-        "toggledecorations",
-        action_toggle_decorations,
-        setup_client_action
-    },
-    {
         "toggledockautohide",
         action_toggle_dockautohide,
         NULL
@@ -890,16 +885,6 @@ void action_desktop_last(union ActionData *data)
         screen_set_desktop(screen_last_desktop, TRUE);
 }
 
-void action_toggle_decorations(union ActionData *data)
-{
-    ObClient *c = data->client.any.c;
-
-    client_action_start(data);
-    client_set_undecorated(c, !c->undecorated);
-    client_action_end(data, FALSE);
-}
-
-
 void action_directional_focus(union ActionData *data)
 {
     /* if using focus_delay, stop the timer now so that focus doesn't go moving
index c41c5f8..7297d23 100644 (file)
@@ -31,4 +31,5 @@ void action_all_startup()
     action_directionalcyclewindows_startup();
     action_directionaltargetwindow_startup();
     action_resize_startup();
+    action_decorations_startup();
 }
index cae5031..477b5fe 100644 (file)
@@ -32,5 +32,6 @@ void action_omnipresent_startup();
 void action_directionalcyclewindows_startup();
 void action_directionaltargetwindow_startup();
 void action_resize_startup();
+void action_decorations_startup();
 
 #endif
diff --git a/openbox/actions/decorations.c b/openbox/actions/decorations.c
new file mode 100644 (file)
index 0000000..8a816ae
--- /dev/null
@@ -0,0 +1,62 @@
+#include "openbox/actions.h"
+#include "openbox/client.h"
+
+typedef struct {
+    gboolean toggle;
+    gboolean on;
+} 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_decorations_startup()
+{
+    actions_register("Decorations",
+                     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->toggle = TRUE;
+
+    if ((n = parse_find_node("decorations", node))) {
+        gchar *s = parse_string(doc, n);
+        if (g_ascii_strcasecmp(s, "toggle")) {
+            o->toggle = FALSE;
+            o->on = parse_bool(doc, n);
+        }
+        g_free(s);
+    }
+
+    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) {
+        actions_client_move(data, TRUE);
+        if (o->toggle || o->on != !data->client->undecorated)
+            client_set_undecorated(data->client, !data->client->undecorated);
+        actions_client_move(data, FALSE);
+    }
+
+    return FALSE;
+}