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

index 002b50c..6d58e90 100644 (file)
@@ -160,6 +160,7 @@ openbox_openbox_SOURCES = \
        openbox/actions/execute.c \
        openbox/actions/exit.c \
        openbox/actions/reconfigure.c \
+       openbox/actions/restart.c \
        openbox/actions/showdesktop.c \
        openbox/actions/showmenu.c \
        openbox/actions.c \
index eba3c95..0c241b4 100644 (file)
@@ -781,16 +781,6 @@ ActionString actionstrings[] =
         NULL
     },
     {
-        "restart",
-        action_restart,
-        NULL
-    },
-    {
-        "exit",
-        action_exit,
-        NULL
-    },
-    {
         "sendtotoplayer",
         action_send_to_layer,
         setup_action_top_layer
@@ -1701,15 +1691,6 @@ void action_resize(union ActionData *data)
     moveresize_start(c, data->any.x, data->any.y, data->any.button, corner);
 }
 
-void action_restart(union ActionData *data)
-{
-    ob_restart_other(data->execute.path);
-}
-
-void action_exit(union ActionData *data)
-{
-}
-
 void action_cycle_windows(union ActionData *data)
 {
     /* if using focus_delay, stop the timer now so that focus doesn't go moving
index 13068b7..141fd12 100644 (file)
@@ -8,4 +8,5 @@ void action_all_startup()
     action_showdesktop_startup();
     action_reconfigure_startup();
     action_exit_startup();
+    action_restart_startup();
 }
index dadfc3f..789cce3 100644 (file)
@@ -9,5 +9,6 @@ void action_showmenu_startup();
 void action_showdesktop_startup();
 void action_reconfigure_startup();
 void action_exit_startup();
+void action_restart_startup();
 
 #endif
diff --git a/openbox/actions/restart.c b/openbox/actions/restart.c
new file mode 100644 (file)
index 0000000..f7f1dfc
--- /dev/null
@@ -0,0 +1,54 @@
+#include "openbox/actions.h"
+#include "openbox/openbox.h"
+
+typedef struct {
+    gchar   *cmd;
+} 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_restart_startup()
+{
+    actions_register("Restart",
+                     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("execute", node))) {
+        gchar *s = parse_string(doc, n);
+        o->cmd = parse_expand_tilde(s);
+        g_free(s);
+    }
+    return o;
+}
+
+static void free_func(gpointer options)
+{
+    Options *o = options;
+
+    if (o) {
+        g_free(o->cmd);
+        g_free(o);
+    }
+}
+
+/* Always return FALSE because its not interactive */
+static gboolean run_func(ObActionsData *data, gpointer options)
+{
+    Options *o = options;
+
+    ob_restart_other(o->cmd);
+
+    return FALSE;
+}