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

index b067543..5134c9c 100644 (file)
@@ -161,6 +161,7 @@ openbox_openbox_SOURCES = \
        openbox/actions/cyclewindows.c \
        openbox/actions/debug.c \
        openbox/actions/decorations.c \
+       openbox/actions/desktop.c \
        openbox/actions/directionalcyclewindows.c \
        openbox/actions/directionaltargetwindow.c \
        openbox/actions/execute.c \
@@ -173,6 +174,7 @@ openbox_openbox_SOURCES = \
        openbox/actions/maximize.c \
        openbox/actions/maximizehorizontal.c \
        openbox/actions/maximizevertical.c \
+       openbox/actions/menu.c \
        openbox/actions/move.c \
        openbox/actions/moverelative.c \
        openbox/actions/moveto.c \
@@ -184,7 +186,6 @@ openbox_openbox_SOURCES = \
        openbox/actions/restart.c \
        openbox/actions/shade.c \
        openbox/actions/showdesktop.c \
-       openbox/actions/showmenu.c \
        openbox/actions/unfocus.c \
        openbox/actions.c \
        openbox/actions.h \
index 2dca0dd..58a0e61 100644 (file)
@@ -162,13 +162,6 @@ void setup_action_send_to_desktop_down(ObAction **a, ObUserAction uact)
     (*a)->data.sendtodir.follow = TRUE;
 }
 
-void setup_action_desktop(ObAction **a, ObUserAction uact)
-{
-/*
-    (*a)->data.desktop.inter.any.interactive = FALSE;
-*/
-}
-
 void setup_action_desktop_prev(ObAction **a, ObUserAction uact)
 {
     (*a)->data.desktopdir.inter.any.interactive = TRUE;
@@ -398,11 +391,6 @@ ActionString actionstrings[] =
         setup_action_send_to_desktop_down
     },
     {
-        "desktop",
-        action_desktop,
-        setup_action_desktop
-    },
-    {
         "desktopnext",
         action_desktop_dir,
         setup_action_desktop_next
@@ -821,19 +809,6 @@ void action_send_to_desktop(union ActionData *data)
     }
 }
 
-void action_desktop(union ActionData *data)
-{
-    /* XXX add the interactive/dialog option back again once the dialog
-       has been made to not use grabs */
-    if (data->desktop.desk < screen_num_desktops ||
-        data->desktop.desk == DESKTOP_ALL)
-    {
-        screen_set_desktop(data->desktop.desk, TRUE);
-        if (data->inter.any.interactive)
-            screen_desktop_popup(data->desktop.desk, TRUE);
-    }
-}
-
 void action_desktop_dir(union ActionData *data)
 {
     guint d;
index 78bcb80..3fb4f81 100644 (file)
@@ -32,4 +32,5 @@ void action_all_startup()
     action_directionaltargetwindow_startup();
     action_resize_startup();
     action_decorations_startup();
+    action_desktop_startup();
 }
index b9ae7f4..290c8f1 100644 (file)
@@ -33,5 +33,6 @@ void action_directionalcyclewindows_startup();
 void action_directionaltargetwindow_startup();
 void action_resize_startup();
 void action_decorations_startup();
+void action_desktop_startup();
 
 #endif
diff --git a/openbox/actions/desktop.c b/openbox/actions/desktop.c
new file mode 100644 (file)
index 0000000..7461d84
--- /dev/null
@@ -0,0 +1,50 @@
+#include "openbox/actions.h"
+#include "openbox/screen.h"
+#include <glib.h>
+
+typedef struct {
+    guint desktop;
+} 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_desktop_startup()
+{
+    actions_register("desktop",
+                     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);
+
+    if ((n = parse_find_node("desktop", node)))
+        o->desktop = parse_int(doc, n) - 1;
+    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 (o->desktop < screen_num_desktops)
+        screen_set_desktop(o->desktop, TRUE);
+
+    return FALSE;
+}