]> Dogcows Code - chaz/openbox/blobdiff - openbox/openbox.c
generalize the window managing process into window_manage, which handles dock apps...
[chaz/openbox] / openbox / openbox.c
index 0551a587d23724ce7900a56dcd9bafe5dece18ea..95a58198249d9dcf9ce66b33315021d0c66e6b8f 100644 (file)
@@ -21,7 +21,6 @@
 #include "openbox.h"
 #include "session.h"
 #include "dock.h"
-#include "modkeys.h"
 #include "event.h"
 #include "menu.h"
 #include "client.h"
@@ -34,6 +33,7 @@
 #include "focus_cycle_popup.h"
 #include "moveresize.h"
 #include "frame.h"
+#include "framerender.h"
 #include "keyboard.h"
 #include "mouse.h"
 #include "menuframe.h"
 #include "group.h"
 #include "config.h"
 #include "ping.h"
-#include "mainloop.h"
 #include "gettext.h"
-#include "parser/parse.h"
 #include "render/render.h"
 #include "render/theme.h"
 #include "obt/display.h"
 #include "obt/prop.h"
+#include "obt/keyboard.h"
+#include "obt/parse.h"
 
 #ifdef HAVE_FCNTL_H
 #  include <fcntl.h>
@@ -116,6 +116,8 @@ gint main(gint argc, gchar **argv)
 
     state = OB_STATE_STARTING;
 
+    ob_debug_startup();
+
     /* initialize the locale */
     if (!setlocale(LC_ALL, ""))
         g_message("Couldn't set locale from environment.");
@@ -123,10 +125,6 @@ gint main(gint argc, gchar **argv)
     bind_textdomain_codeset(PACKAGE_NAME, "UTF-8");
     textdomain(PACKAGE_NAME);
 
-    if (chdir(g_get_home_dir()) == -1)
-        g_message(_("Unable to change to home directory '%s': %s"),
-                  g_get_home_dir(), g_strerror(errno));
-
     /* parse the command line args, which can change the argv[0] */
     parse_args(&argc, argv);
     /* parse the environment variables */
@@ -135,11 +133,8 @@ gint main(gint argc, gchar **argv)
     program_name = g_path_get_basename(argv[0]);
     g_set_prgname(program_name);
 
-    if (!remote_control) {
-        parse_paths_startup();
-
+    if (!remote_control)
         session_startup(argc, argv);
-    }
 
     if (!obt_display_open(NULL))
         ob_exit_with_error(_("Failed to open the display from the DISPLAY environment variable."));
@@ -148,13 +143,13 @@ gint main(gint argc, gchar **argv)
         /* Send client message telling the OB process to:
          * remote_control = 1 -> reconfigure
          * remote_control = 2 -> restart */
-        OBT_PROP_MSG(ob_screen, RootWindow(obt_display, ob_screen),
+        OBT_PROP_MSG(ob_screen, obt_root(ob_screen),
                      OB_CONTROL, remote_control, 0, 0, 0, 0);
         obt_display_close(obt_display);
         exit(EXIT_SUCCESS);
     }
 
-    ob_main_loop = obt_main_loop_new(obt_display);
+    ob_main_loop = obt_main_loop_new();
 
     /* set up signal handler */
     obt_main_loop_signal_add(ob_main_loop, SIGUSR1, signal_handler, NULL,NULL);
@@ -181,7 +176,7 @@ gint main(gint argc, gchar **argv)
 
     /* set the DISPLAY environment variable for any lauched children, to the
        display we're using, so they open in the right place. */
-    putenv(g_strdup_printf("DISPLAY=%s", DisplayString(obt_display)));
+    setenv("DISPLAY", DisplayString(obt_display), TRUE);
 
     /* create available cursors */
     cursors[OB_CURSOR_NONE] = None;
@@ -204,24 +199,22 @@ gint main(gint argc, gchar **argv)
 
     if (screen_annex()) { /* it will be ours! */
         do {
-            modkeys_startup(reconfigure);
+            if (reconfigure) obt_keyboard_reload();
 
             /* get the keycodes for keys we use */
-            keys[OB_KEY_RETURN] = modkeys_sym_to_code(XK_Return);
-            keys[OB_KEY_ESCAPE] = modkeys_sym_to_code(XK_Escape);
-            keys[OB_KEY_LEFT] = modkeys_sym_to_code(XK_Left);
-            keys[OB_KEY_RIGHT] = modkeys_sym_to_code(XK_Right);
-            keys[OB_KEY_UP] = modkeys_sym_to_code(XK_Up);
-            keys[OB_KEY_DOWN] = modkeys_sym_to_code(XK_Down);
+            keys[OB_KEY_RETURN] = obt_keyboard_keysym_to_keycode(XK_Return);
+            keys[OB_KEY_ESCAPE] = obt_keyboard_keysym_to_keycode(XK_Escape);
+            keys[OB_KEY_LEFT] = obt_keyboard_keysym_to_keycode(XK_Left);
+            keys[OB_KEY_RIGHT] = obt_keyboard_keysym_to_keycode(XK_Right);
+            keys[OB_KEY_UP] = obt_keyboard_keysym_to_keycode(XK_Up);
+            keys[OB_KEY_DOWN] = obt_keyboard_keysym_to_keycode(XK_Down);
 
             {
-                ObParseInst *i;
-                xmlDocPtr doc;
-                xmlNodePtr node;
+                ObtParseInst *i;
 
                 /* startup the parsing so everything can register sections
                    of the rc */
-                i = parse_startup();
+                i = obt_parse_instance_new();
 
                 /* register all the available actions */
                 actions_startup(reconfigure);
@@ -229,20 +222,21 @@ gint main(gint argc, gchar **argv)
                 config_startup(i);
 
                 /* parse/load user options */
-                if (parse_load_rc(NULL, &doc, &node)) {
-                    parse_tree(i, doc, node->xmlChildrenNode);
-                    parse_close(doc);
+                if (obt_parse_load_config_file(i, "openbox", "rc.xml",
+                                               "openbox_config"))
+                {
+                    obt_parse_tree_from_root(i);
+                    obt_parse_close(i);
                 } else
                     g_message(_("Unable to find a valid config file, using some simple defaults"));
 
 /*
                 if (config_type != NULL)
-                    PROP_SETS(RootWindow(obt_display, ob_screen),
-                              ob_config, config_type);
+                    PROP_SETS(obt_root(ob_screen), ob_config, config_type);
 */
 
                 /* we're done with parsing now, kill it */
-                parse_shutdown(i);
+                obt_parse_instance_unref(i);
             }
 
             /* load the theme specified in the rc file */
@@ -261,7 +255,7 @@ gint main(gint argc, gchar **argv)
                 if (ob_rr_theme == NULL)
                     ob_exit_with_error(_("Unable to load a theme."));
 
-                OBT_PROP_SETS(RootWindow(obt_display, ob_screen),
+                OBT_PROP_SETS(obt_root(ob_screen),
                               OB_THEME, utf8, ob_rr_theme->name);
             }
 
@@ -300,14 +294,13 @@ gint main(gint argc, gchar **argv)
                 ObWindow *w;
 
                 /* get all the existing windows */
-                client_manage_all();
+                window_manage_all();
                 focus_nothing();
 
                 /* focus what was focused if a wm was already running */
-                if (OBT_PROP_GET32(RootWindow(obt_display, ob_screen),
+                if (OBT_PROP_GET32(obt_root(ob_screen),
                                    NET_ACTIVE_WINDOW, WINDOW, &xid) &&
-                    (w = g_hash_table_lookup(window_map, &xid)) &&
-                    WINDOW_IS_CLIENT(w))
+                    (w = window_find(xid)) && WINDOW_IS_CLIENT(w))
                 {
                     client_focus(WINDOW_AS_CLIENT(w));
                 }
@@ -334,10 +327,8 @@ gint main(gint argc, gchar **argv)
             obt_main_loop_run(ob_main_loop);
             state = OB_STATE_EXITING;
 
-            if (!reconfigure) {
-                dock_remove_all();
-                client_unmanage_all();
-            }
+            if (!reconfigure)
+                window_unmanage_all();
 
             menu_shutdown(reconfigure);
             menu_frame_shutdown(reconfigure);
@@ -359,7 +350,6 @@ gint main(gint argc, gchar **argv)
             event_shutdown(reconfigure);
             config_shutdown();
             actions_shutdown(reconfigure);
-            modkeys_shutdown(reconfigure);
         } while (reconfigure);
     }
 
@@ -372,8 +362,6 @@ gint main(gint argc, gchar **argv)
 
     obt_display_close(obt_display);
 
-    parse_paths_shutdown();
-
     if (restart) {
         if (restart_path != NULL) {
             gint argcp;
@@ -428,6 +416,8 @@ gint main(gint argc, gchar **argv)
     g_free(ob_sm_id);
     g_free(program_name);
 
+    ob_debug_shutdown();
+
     return exitcode;
 }
 
@@ -435,11 +425,11 @@ static void signal_handler(gint signal, gpointer data)
 {
     switch (signal) {
     case SIGUSR1:
-        ob_debug("Caught signal %d. Restarting.\n", signal);
+        ob_debug("Caught signal %d. Restarting.", signal);
         ob_restart();
         break;
     case SIGUSR2:
-        ob_debug("Caught signal %d. Reconfiguring.\n", signal);
+        ob_debug("Caught signal %d. Reconfiguring.", signal);
         ob_reconfigure();
         break;
     case SIGCHLD:
@@ -447,7 +437,7 @@ static void signal_handler(gint signal, gpointer data)
         while (waitpid(-1, NULL, WNOHANG) > 0);
         break;
     default:
-        ob_debug("Caught signal %d. Exiting.\n", signal);
+        ob_debug("Caught signal %d. Exiting.", signal);
         /* TERM and INT return a 0 code */
         ob_exit(!(signal == SIGTERM || signal == SIGINT));
     }
@@ -481,6 +471,7 @@ static void print_help()
     g_print(_("  --sync              Run in synchronous mode\n"));
     g_print(_("  --debug             Display debugging output\n"));
     g_print(_("  --debug-focus       Display debugging output for focus handling\n"));
+    g_print(_("  --debug-session     Display debugging output for session managment\n"));
     g_print(_("  --debug-xinerama    Split the display into fake xinerama screens\n"));
     g_print(_("\nPlease report bugs at %s\n"), PACKAGE_BUGREPORT);
 }
@@ -499,9 +490,7 @@ static void remove_args(gint *argc, gchar **argv, gint index, gint num)
 static void parse_env()
 {
     /* unset this so we don't pass it on unknowingly */
-    gchar *s = g_strdup("DESKTOP_STARTUP_ID");
-    putenv(s);
-    g_free(s);
+    unsetenv("DESKTOP_STARTUP_ID");
 }
 
 static void parse_args(gint *argc, gchar **argv)
@@ -529,16 +518,19 @@ static void parse_args(gint *argc, gchar **argv)
             xsync = TRUE;
         }
         else if (!strcmp(argv[i], "--debug")) {
-            ob_debug_show_output(TRUE);
-            ob_debug_enable(OB_DEBUG_SM, TRUE);
+            ob_debug_enable(OB_DEBUG_NORMAL, TRUE);
             ob_debug_enable(OB_DEBUG_APP_BUGS, TRUE);
         }
         else if (!strcmp(argv[i], "--debug-focus")) {
-            ob_debug_show_output(TRUE);
-            ob_debug_enable(OB_DEBUG_SM, TRUE);
+            ob_debug_enable(OB_DEBUG_NORMAL, TRUE);
             ob_debug_enable(OB_DEBUG_APP_BUGS, TRUE);
             ob_debug_enable(OB_DEBUG_FOCUS, TRUE);
         }
+        else if (!strcmp(argv[i], "--debug-session")) {
+            ob_debug_enable(OB_DEBUG_NORMAL, TRUE);
+            ob_debug_enable(OB_DEBUG_APP_BUGS, TRUE);
+            ob_debug_enable(OB_DEBUG_SM, TRUE);
+        }
         else if (!strcmp(argv[i], "--debug-xinerama")) {
             ob_debug_xinerama = TRUE;
         }
@@ -559,7 +551,7 @@ static void parse_args(gint *argc, gchar **argv)
                 ob_sm_save_file = g_strdup(argv[i+1]);
                 remove_args(argc, argv, i, 2);
                 --i; /* this arg was removed so go back */
-                ob_debug_type(OB_DEBUG_SM, "--sm-save-file %s\n",
+                ob_debug_type(OB_DEBUG_SM, "--sm-save-file %s",
                               ob_sm_save_file);
             }
         }
@@ -571,7 +563,7 @@ static void parse_args(gint *argc, gchar **argv)
                 ob_sm_id = g_strdup(argv[i+1]);
                 remove_args(argc, argv, i, 2);
                 --i; /* this arg was removed so go back */
-                ob_debug_type(OB_DEBUG_SM, "--sm-client-id %s\n", ob_sm_id);
+                ob_debug_type(OB_DEBUG_SM, "--sm-client-id %s", ob_sm_id);
             }
         }
         else if (!strcmp(argv[i], "--sm-disable")) {
This page took 0.034245 seconds and 4 git commands to generate.