]> Dogcows Code - chaz/openbox/commitdiff
use the X protocol to reconfigure instead of signals, works over the network too
authorMikael Magnusson <mikachu@comhem.se>
Sun, 4 Mar 2007 20:05:00 +0000 (20:05 +0000)
committerMikael Magnusson <mikachu@comhem.se>
Sun, 4 Mar 2007 20:05:00 +0000 (20:05 +0000)
openbox/event.c
openbox/openbox.c
openbox/prop.c
openbox/prop.h

index 42fd26ba9bd22987fc8c5aca90456b96862b3e63..daf87f54a1f8fed0a1df463258d24ac0c481ba7e 100644 (file)
@@ -596,6 +596,11 @@ static void event_handle_root(XEvent *e)
                 screen_set_num_desktops(d);
         } else if (msgtype == prop_atoms.net_showing_desktop) {
             screen_show_desktop(e->xclient.data.l[0] != 0);
+        } else if (msgtype == prop_atoms.ob_control) {
+            if ((Atom)e->xclient.data.l[0] == prop_atoms.ob_reconfigure)
+                action_run_string("reconfigure", NULL);
+            else if ((Atom)e->xclient.data.l[0] == prop_atoms.ob_restart)
+                action_run_string("restart", NULL);
         }
         break;
     case PropertyNotify:
index 1c4a8706cd1069ccb26978ee78115ddcf3935c06..a8b445d89942ef3d655614d65fa3b23ea659d808 100644 (file)
@@ -86,7 +86,8 @@ static gchar    *restart_path = NULL;
 static Cursor    cursors[OB_NUM_CURSORS];
 static KeyCode   keys[OB_NUM_KEYS];
 static gint      exitcode = 0;
-static gboolean  reconfigure_and_exit = FALSE;
+static gboolean  message_and_exit = FALSE;
+static Atom     *message;
 static gboolean  being_replaced = FALSE;
 
 static void signal_handler(gint signal, gpointer data);
@@ -116,7 +117,7 @@ gint main(gint argc, gchar **argv)
     /* parse out command line args */
     parse_args(argc, argv);
 
-    if (!reconfigure_and_exit) {
+    if (!message_and_exit) {
         parse_paths_startup();
 
         session_startup(argc, argv);
@@ -128,24 +129,14 @@ gint main(gint argc, gchar **argv)
     if (fcntl(ConnectionNumber(ob_display), F_SETFD, 1) == -1)
         ob_exit_with_error("Failed to set display as close-on-exec.");
 
-    if (reconfigure_and_exit) {
-        guint32 pid;
-        gboolean ret;
+    if (message_and_exit) {
+        prop_startup();
 
-        prop_startup(); /* get atoms values for the display */
-        ret = PROP_GET32(RootWindow(ob_display, DefaultScreen(ob_display)),
-                                    openbox_pid, cardinal, &pid);
+        /* Send client message telling the OB process to reconfigure */
+        prop_message(RootWindow(ob_display, ob_screen), prop_atoms.ob_control,
+                     *message, 0, 0, 0, SubstructureNotifyMask);
         XCloseDisplay(ob_display);
-        if (!ret) {
-            g_print("Openbox does not appear to be running on this "
-                    "display.\n");
-        } else {
-            g_print("Telling the Openbox process # %u to reconfigure.\n", pid);
-            ret = (kill(pid, SIGUSR2) == 0);
-            if (!ret)
-                g_print("Error: %s.\n", strerror(errno));
-        }
-        exit(ret ? EXIT_SUCCESS : EXIT_FAILURE);
+        exit(0);
     }
 
     ob_main_loop = ob_main_loop_new(ob_display);
@@ -441,7 +432,11 @@ static void parse_args(gint argc, gchar **argv)
         } else if (!strcmp(argv[i], "--debug")) {
             ob_debug_show_output(TRUE);
         } else if (!strcmp(argv[i], "--reconfigure")) {
-            reconfigure_and_exit = TRUE;
+            message_and_exit = TRUE;
+            message = &prop_atoms.ob_reconfigure;
+        } else if (!strcmp(argv[i], "--restart")) {
+            message_and_exit = TRUE;
+            message = &prop_atoms.ob_restart;
         }
     }
 }
index c35bba990cf063df24bba38199146a38d3475d0b..3d40f637495f39b111aeac6ea65a405a4e7f4da6 100644 (file)
@@ -152,6 +152,9 @@ void prop_startup()
 
     CREATE(openbox_pid, "_OPENBOX_PID");
     CREATE(ob_wm_state_undecorated, "_OB_WM_STATE_UNDECORATED");
+    CREATE(ob_control, "_OB_CONTROL");
+    CREATE(ob_reconfigure, "_OB_RECONFIGURE");
+    CREATE(ob_restart, "_OB_RESTART");
 }
 
 #include <X11/Xutil.h>
index fa45d5cdd81d4b30cb1673ec62f0245864501451..f65dd1355351863233b6e0af8c15695ab386d4db 100644 (file)
@@ -165,6 +165,9 @@ typedef struct Atoms {
      
     Atom openbox_pid;
     Atom ob_wm_state_undecorated;
+    Atom ob_control;
+    Atom ob_reconfigure;
+    Atom ob_restart;
 } Atoms;
 Atoms prop_atoms;
 
This page took 0.0322 seconds and 4 git commands to generate.