]> Dogcows Code - chaz/openbox/blobdiff - openbox/openbox.c
break focus. or maybe make it better.
[chaz/openbox] / openbox / openbox.c
index a571b18498494e895e95d2fb0712474309a6590d..a3adb1028237857d8e565271e14fcb521bef2eba 100644 (file)
@@ -53,8 +53,6 @@ RrTheme    *ob_rr_theme;
 ObMainLoop *ob_main_loop;
 Display    *ob_display;
 gint        ob_screen;
-gboolean    ob_sm_use = TRUE;
-gchar      *ob_sm_id;
 gboolean    ob_replace_wm;
 
 static ObState   state;
@@ -64,7 +62,6 @@ static gboolean  restart;
 static char     *restart_path;
 static Cursor    cursors[OB_NUM_CURSORS];
 static KeyCode   keys[OB_NUM_KEYS];
-static gchar    *sm_save_file;
 
 static void signal_handler(int signal, gpointer data);
 static void parse_args(int argc, char **argv);
@@ -104,6 +101,8 @@ int main(int argc, char **argv)
 
     g_set_prgname(argv[0]);
      
+    session_startup(&argc, &argv);
+
     /* parse out command line args */
     parse_args(argc, argv);
 
@@ -123,10 +122,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);
 
-    if (sm_save_file)
-        session_load(sm_save_file);
-    session_startup(argc, argv);
-
     ob_screen = DefaultScreen(ob_display);
 
     ob_rr_inst = RrInstanceNew(ob_display, ob_screen);
@@ -194,14 +189,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;
@@ -223,17 +210,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);
@@ -247,7 +252,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);
                 }
             }
 
@@ -265,12 +270,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);
@@ -283,7 +288,6 @@ int main(int argc, char **argv)
     RrInstanceFree(ob_rr_inst);
 
     session_shutdown();
-    g_free(ob_sm_id);
 
     XCloseDisplay(ob_display);
 
@@ -305,6 +309,7 @@ int main(int argc, char **argv)
 
         /* re-run me */
         execvp(argv[0], argv); /* try how we were run */
+        execlp(argv[0], g_path_get_basename(argv[0])); /* last resort */
     }
      
     return 0;
@@ -372,20 +377,6 @@ static void parse_args(int argc, char **argv)
             xsync = TRUE;
         } else if (!strcmp(argv[i], "--debug")) {
             ob_debug_show_output(TRUE);
-#ifdef USE_SM
-        } else if (!strcmp(argv[i], "--sm-client-id")) {
-            if (i == argc - 1) /* no args left */
-                g_printerr(_("--sm-client-id requires an argument\n"));
-            else
-                ob_sm_id = g_strdup(argv[++i]);
-        } else if (!strcmp(argv[i], "--sm-save-file")) {
-            if (i == argc - 1) /* no args left */
-                g_printerr(_("--sm-save-file requires an argument\n"));
-            else
-                sm_save_file = argv[++i];
-        } else if (!strcmp(argv[i], "--sm-disable")) {
-            ob_sm_use = FALSE;
-#endif
         } else {
             g_printerr("Invalid option: '%s'\n\n", argv[i]);
             print_help();
@@ -438,14 +429,12 @@ ObState ob_state()
 gchar *ob_expand_tilde(const gchar *f)
 {
     gchar **spl;
-    gchar *ret, *mid;
+    gchar *ret;
 
     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);
+    ret = g_strjoinv(g_get_home_dir(), spl);
     g_strfreev(spl);
     return ret;
 }
This page took 0.024308 seconds and 4 git commands to generate.