]> Dogcows Code - chaz/openbox/blobdiff - openbox/openbox.c
remove the event dispatcher
[chaz/openbox] / openbox / openbox.c
index 62b08db7e5ef73977e210d9de47cf1be7b6af098..59ba762779005965f845304bb467822eb4e85937 100644 (file)
@@ -5,7 +5,6 @@
 #include "event.h"
 #include "menu.h"
 #include "client.h"
-#include "dispatch.h"
 #include "xerror.h"
 #include "prop.h"
 #include "startup.h"
@@ -13,6 +12,8 @@
 #include "focus.h"
 #include "moveresize.h"
 #include "frame.h"
+#include "keyboard.h"
+#include "mouse.h"
 #include "extensions.h"
 #include "grab.h"
 #include "plugin.h"
@@ -64,11 +65,9 @@ static Cursor    cursors[OB_NUM_CURSORS];
 static KeyCode   keys[OB_NUM_KEYS];
 static gchar    *sm_save_file;
 
-static void signal_handler(const ObEvent *e, void *data);
+static void signal_handler(int signal);
 static void parse_args(int argc, char **argv);
 
-static void exit_with_error(gchar *msg);
-
 int main(int argc, char **argv)
 {
     struct sigaction action;
@@ -90,13 +89,9 @@ int main(int argc, char **argv)
     bind_textdomain_codeset(PACKAGE_NAME, "UTF-8");
     textdomain(PACKAGE_NAME);
 
-    /* start our event dispatcher and register for signals */
-    dispatch_startup();
-    dispatch_register(Event_Signal, signal_handler, NULL);
-
     /* set up signal handler */
     sigemptyset(&sigset);
-    action.sa_handler = dispatch_signal;
+    action.sa_handler = signal_handler;
     action.sa_mask = sigset;
     action.sa_flags = SA_NOCLDSTOP | SA_NODEFER;
     sigaction(SIGUSR1, &action, (struct sigaction *) NULL);
@@ -130,11 +125,12 @@ int main(int argc, char **argv)
 
     ob_display = XOpenDisplay(NULL);
     if (ob_display == NULL)
-       exit_with_error("Failed to open the display.");
+       ob_exit_with_error("Failed to open the display.");
     if (fcntl(ConnectionNumber(ob_display), F_SETFD, 1) == -1)
-        exit_with_error("Failed to set display as close-on-exec.");
+        ob_exit_with_error("Failed to set display as close-on-exec.");
 
-    session_load(sm_save_file);
+    if (sm_save_file)
+        session_load(sm_save_file);
     session_startup(argc, argv);
 
 #ifdef USE_LIBSN
@@ -145,7 +141,7 @@ int main(int argc, char **argv)
 
     ob_rr_inst = RrInstanceNew(ob_display, ob_screen);
     if (ob_rr_inst == NULL)
-        exit_with_error("Failed to initialize the render library.");
+        ob_exit_with_error("Failed to initialize the render library.");
 
     /* XXX fork self onto other screens */
      
@@ -209,8 +205,10 @@ int main(int argc, char **argv)
     startup_save();
 
     if (screen_annex()) { /* it will be ours! */
+        ObParseInst *i;
+
         /* startup the parsing so everything can register sections of the rc */
-        parse_startup();
+        i = parse_startup();
 
         /* anything that is going to read data from the rc file needs to be 
            in this group */
@@ -223,27 +221,32 @@ int main(int argc, char **argv)
         window_startup();
         plugin_startup();
         /* load the plugins specified in the pluginrc */
-        plugin_loadall();
+        plugin_loadall(i);
 
         /* set up the kernel config shit */
-        config_startup();
-        menu_startup();
+        config_startup(i);
+        menu_startup(i);
         /* parse/load user options */
         if (parse_load_rc(&doc, &node))
-            parse_tree(doc, node->xmlChildrenNode, NULL);
+            parse_tree(i, doc, node->xmlChildrenNode);
         /* we're done with parsing now, kill it */
-        parse_shutdown();
+        xmlFreeDoc(doc);
+        parse_shutdown(i);
+
+        menu_parse();
 
         /* load the theme specified in the rc file */
         ob_rr_theme = RrThemeNew(ob_rr_inst, config_theme);
         if (ob_rr_theme == NULL)
-            exit_with_error("Unable to load a theme.");
+            ob_exit_with_error("Unable to load a theme.");
 
         moveresize_startup();
        screen_startup();
         group_startup();
        client_startup();
         dock_startup();
+        keyboard_startup();
+        mouse_startup();
 
         /* call startup for all the plugins */
         plugin_startall();
@@ -260,13 +263,15 @@ int main(int argc, char **argv)
        client_unmanage_all();
 
         plugin_shutdown(); /* calls all the plugins' shutdown functions */
+        menu_shutdown();
+        mouse_shutdown();
+        keyboard_shutdown();
         dock_shutdown();
        client_shutdown();
         group_shutdown();
        screen_shutdown();
        focus_shutdown();
         moveresize_shutdown();
-        menu_shutdown();
         window_shutdown();
         grab_shutdown();
        event_shutdown();
@@ -274,14 +279,16 @@ int main(int argc, char **argv)
         config_shutdown();
     }
 
-    dispatch_shutdown();
-
     RrThemeFree(ob_rr_theme);
     RrInstanceFree(ob_rr_inst);
 
     session_shutdown();
     g_free(ob_sm_id);
 
+#ifdef USE_LIBSN
+    sn_display_unref(ob_sn_display);
+#endif
+
     XCloseDisplay(ob_display);
 
     if (restart) {
@@ -307,12 +314,9 @@ int main(int argc, char **argv)
     return 0;
 }
 
-static void signal_handler(const ObEvent *e, void *data)
+static void signal_handler(int sig)
 {
-    int s;
-
-    s = e->data.s.signal;
-    switch (s) {
+    switch (sig) {
     case SIGUSR1:
        fprintf(stderr, "Caught SIGUSR1 signal. Restarting.");
         ob_restart();
@@ -322,13 +326,13 @@ static void signal_handler(const ObEvent *e, void *data)
     case SIGINT:
     case SIGTERM:
     case SIGPIPE:
-       fprintf(stderr, "Caught signal %d. Exiting.", s);
+       fprintf(stderr, "Caught signal %d. Exiting.", sig);
         ob_exit();
        break;
 
     case SIGFPE:
     case SIGSEGV:
-        fprintf(stderr, "Caught signal %d. Aborting and dumping core.", s);
+        fprintf(stderr, "Caught signal %d. Aborting and dumping core.", sig);
         abort();
     }
 }
@@ -403,7 +407,7 @@ static void parse_args(int argc, char **argv)
     }
 }
 
-static void exit_with_error(gchar *msg)
+void ob_exit_with_error(gchar *msg)
 {
     g_critical(msg);
     session_shutdown();
This page took 0.025002 seconds and 4 git commands to generate.