]> Dogcows Code - chaz/openbox/blobdiff - openbox/openbox.c
make openbox base-dir spec compliant, and change the theme dir structure, so that...
[chaz/openbox] / openbox / openbox.c
index 3f32917b25f58703bc04b9f5bb32549db79723cb..a8102c3ad582dc88c837bc7a64c5c0cb42ba1bd6 100644 (file)
@@ -29,7 +29,6 @@
 #  include <fcntl.h>
 #endif
 #ifdef HAVE_SIGNAL_H
-#define __USE_UNIX98
 #  include <signal.h>
 #endif
 #ifdef HAVE_STDLIB_H
@@ -68,8 +67,6 @@ static void parse_args(int argc, char **argv);
 
 int main(int argc, char **argv)
 {
-    char *path;
-
 #ifdef DEBUG
     ob_debug_show_output(TRUE);
 #endif
@@ -83,24 +80,12 @@ int main(int argc, char **argv)
     bind_textdomain_codeset(PACKAGE_NAME, "UTF-8");
     textdomain(PACKAGE_NAME);
 
-    /* create the ~/.openbox dir */
-    path = g_build_filename(g_get_home_dir(), ".openbox", NULL);
-    mkdir(path, (S_IRUSR | S_IWUSR | S_IXUSR | S_IRGRP | S_IWGRP | S_IXGRP |
-                 S_IROTH | S_IWOTH | S_IXOTH));
-    g_free(path);
-    /* create the ~/.openbox/themes dir */
-    path = g_build_filename(g_get_home_dir(), ".openbox", "themes", NULL);
-    mkdir(path, (S_IRUSR | S_IWUSR | S_IXUSR | S_IRGRP | S_IWGRP | S_IXGRP |
-                 S_IROTH | S_IWOTH | S_IXOTH));
-    g_free(path);
-    /* create the ~/.openbox/sessions dir */
-    path = g_build_filename(g_get_home_dir(), ".openbox", "sessions", NULL);
-    mkdir(path, (S_IRUSR | S_IWUSR | S_IXUSR | S_IRGRP | S_IWGRP | S_IXGRP |
-                 S_IROTH | S_IWOTH | S_IXOTH));
-    g_free(path);
-
     g_set_prgname(argv[0]);
      
+    parse_paths_startup();
+
+    session_startup(&argc, &argv);
+
     /* parse out command line args */
     parse_args(argc, argv);
 
@@ -120,8 +105,6 @@ int main(int argc, char **argv)
     ob_main_loop_signal_add(ob_main_loop, SIGHUP, signal_handler, NULL, NULL);
     ob_main_loop_signal_add(ob_main_loop, SIGPIPE, signal_handler, NULL, NULL);
 
-    session_startup(&argc, &argv);
-
     ob_screen = DefaultScreen(ob_display);
 
     ob_rr_inst = RrInstanceNew(ob_display, ob_screen);
@@ -189,14 +172,6 @@ int main(int argc, char **argv)
 
     if (screen_annex()) { /* it will be ours! */
         do {
-            event_startup(reconfigure);
-            grab_startup(reconfigure);
-            /* focus_backup is used for stacking, so this needs to come before
-               anything that calls stacking_add */
-            focus_startup(reconfigure);
-            window_startup(reconfigure);
-            sn_startup(reconfigure);
-
             {
                 ObParseInst *i;
                 xmlDocPtr doc;
@@ -218,17 +193,35 @@ int main(int argc, char **argv)
             /* load the theme specified in the rc file */
             {
                 RrTheme *theme;
-                if ((theme = RrThemeNew(ob_rr_inst, config_theme)))
+                if ((theme = RrThemeNew(ob_rr_inst, config_theme))) {
+                    RrThemeFree(ob_rr_theme);
                     ob_rr_theme = theme;
+                }
                 if (ob_rr_theme == NULL)
                     ob_exit_with_error("Unable to load a theme.");
             }
 
-            moveresize_startup(reconfigure);
+            if (reconfigure) {
+                GList *it;
+
+                /* update all existing windows for the new theme */
+                for (it = client_list; it; it = g_list_next(it)) {
+                    ObClient *c = it->data;
+                    frame_adjust_theme(c->frame);
+                }
+            }
+            event_startup(reconfigure);
+            grab_startup(reconfigure);
+            /* focus_backup is used for stacking, so this needs to come before
+               anything that calls stacking_add */
+            focus_startup(reconfigure);
+            window_startup(reconfigure);
+            sn_startup(reconfigure);
             screen_startup(reconfigure);
             group_startup(reconfigure);
             client_startup(reconfigure);
             dock_startup(reconfigure);
+            moveresize_startup(reconfigure);
             keyboard_startup(reconfigure);
             mouse_startup(reconfigure);
             menu_startup(reconfigure);
@@ -242,7 +235,7 @@ int main(int argc, char **argv)
                 /* redecorate all existing windows */
                 for (it = client_list; it; it = g_list_next(it)) {
                     ObClient *c = it->data;
-                    frame_adjust_theme(c->frame);
+                    frame_adjust_area(c->frame, TRUE, TRUE, FALSE);
                 }
             }
 
@@ -260,12 +253,12 @@ int main(int argc, char **argv)
             menu_shutdown(reconfigure);
             mouse_shutdown(reconfigure);
             keyboard_shutdown(reconfigure);
+            moveresize_shutdown(reconfigure);
             dock_shutdown(reconfigure);
             client_shutdown(reconfigure);
             group_shutdown(reconfigure);
             screen_shutdown(reconfigure);
             focus_shutdown(reconfigure);
-            moveresize_shutdown(reconfigure);
             sn_shutdown(reconfigure);
             window_shutdown(reconfigure);
             grab_shutdown(reconfigure);
@@ -281,6 +274,8 @@ int main(int argc, char **argv)
 
     XCloseDisplay(ob_display);
 
+    parse_paths_shutdown();
+
     if (restart) {
         if (restart_path != NULL) {
             int argcp;
@@ -394,6 +389,12 @@ void ob_restart()
     ob_exit();
 }
 
+void ob_reconfigure()
+{
+    reconfigure = TRUE;
+    ob_exit();
+}
+
 void ob_exit()
 {
     ob_main_loop_exit(ob_main_loop);
@@ -415,24 +416,3 @@ ObState ob_state()
 {
     return state;
 }
-
-gchar *ob_expand_tilde(const gchar *f)
-{
-    gchar **spl;
-    gchar *ret, *mid;
-
-    if (!f)
-        return NULL;
-    spl = g_strsplit(f, "~", 0);
-    mid = g_strconcat(g_get_home_dir(), G_DIR_SEPARATOR_S, NULL);
-    ret = g_strjoinv(mid, spl);
-    g_free(mid);
-    g_strfreev(spl);
-    return ret;
-}
-
-void ob_reconfigure()
-{
-    reconfigure = TRUE;
-    ob_exit();
-}
This page took 0.025697 seconds and 4 git commands to generate.