]> Dogcows Code - chaz/openbox/blobdiff - openbox/screen.c
set the desktop names when there are too few from the config file when possible....
[chaz/openbox] / openbox / screen.c
index 26920f408966ce9141c77a6cfee13bccd27d1043..b9cbdd2cd8dc2d88270780131f13e40e11e92b69 100644 (file)
@@ -56,7 +56,7 @@ guint    screen_desktop;
 guint    screen_last_desktop;
 Size     screen_physical_size;
 gboolean screen_showing_desktop;
-DesktopLayout screen_desktop_layout;
+ObDesktopLayout screen_desktop_layout;
 gchar  **screen_desktop_names;
 Window   screen_support_win;
 Time     screen_desktop_user_time = CurrentTime;
@@ -215,6 +215,7 @@ gboolean screen_annex()
         (wm_supported_pos - prop_atoms_start) - 1;
     i = 0;
     supported = g_new(gulong, num_support);
+    supported[i++] = prop_atoms.net_supporting_wm_check;
     supported[i++] = prop_atoms.net_wm_full_placement;
     supported[i++] = prop_atoms.net_current_desktop;
     supported[i++] = prop_atoms.net_number_of_desktops;
@@ -256,6 +257,8 @@ gboolean screen_annex()
     supported[i++] = prop_atoms.net_wm_action_fullscreen;
     supported[i++] = prop_atoms.net_wm_action_change_desktop;
     supported[i++] = prop_atoms.net_wm_action_close;
+    supported[i++] = prop_atoms.net_wm_action_above;
+    supported[i++] = prop_atoms.net_wm_action_below;
     supported[i++] = prop_atoms.net_wm_state;
     supported[i++] = prop_atoms.net_wm_state_modal;
     supported[i++] = prop_atoms.net_wm_state_maximized_vert;
@@ -281,10 +284,6 @@ gboolean screen_annex()
     supported[i++] = prop_atoms.net_wm_sync_request_counter;
 #endif
 
-    supported[i++] = prop_atoms.net_supporting_wm_check;
-    supported[i++] = prop_atoms.net_wm_action_above;
-    supported[i++] = prop_atoms.net_wm_action_below;
-
     supported[i++] = prop_atoms.kde_wm_change_state;
     supported[i++] = prop_atoms.kde_net_wm_frame_strut;
     supported[i++] = prop_atoms.kde_net_wm_window_type_override;
@@ -307,7 +306,7 @@ void screen_startup(gboolean reconfig)
 {
     guint i, numnames;
     gchar **names;
-    GSList *it;
+    GSList *it, *namelist;
     guint32 d;
 
     desktop_cycle_popup = pager_popup_new(FALSE);
@@ -325,10 +324,12 @@ void screen_startup(gboolean reconfig)
     screen_resize();
 
     /* get the desktop names */
-    numnames = g_slist_length(config_desktops_names);
+    namelist = session_desktop_names ?
+        session_desktop_names : config_desktops_names;
+    numnames = g_slist_length(namelist);
     names = g_new(gchar*, numnames + 1);
     names[numnames] = NULL;
-    for (i = 0, it = config_desktops_names; it; ++i, it = g_slist_next(it))
+    for (i = 0, it = namelist; it; ++i, it = g_slist_next(it))
         names[i] = g_strdup(it->data);
 
     /* set the root window property */
@@ -338,7 +339,10 @@ void screen_startup(gboolean reconfig)
 
     /* set the number of desktops */
     screen_num_desktops = 0;
-    screen_set_num_desktops(config_desktops_num);
+    if (session_num_desktops)
+        screen_set_num_desktops(session_num_desktops);
+    else
+        screen_set_num_desktops(config_desktops_num);
 
     /* start on the current desktop when a wm was already running */
     if (PROP_GET32(RootWindow(ob_display, ob_screen),
@@ -358,7 +362,10 @@ void screen_startup(gboolean reconfig)
     PROP_SET32(RootWindow(ob_display, ob_screen),
                net_showing_desktop, cardinal, screen_showing_desktop);
 
-    screen_update_layout();
+    if (session_desktop_layout_present)
+        screen_desktop_layout = session_desktop_layout;
+    else
+        screen_update_layout();
 }
 
 void screen_shutdown(gboolean reconfig)
@@ -893,11 +900,28 @@ void screen_update_desktop_names()
     else
         i = 0;
     if (i < screen_num_desktops) {
+        GSList *it;
+
         screen_desktop_names = g_renew(gchar*, screen_desktop_names,
                                        screen_num_desktops + 1);
         screen_desktop_names[screen_num_desktops] = NULL;
-        for (; i < screen_num_desktops; ++i)
-            screen_desktop_names[i] = g_strdup_printf("desktop %i", i + 1);
+
+        it = g_slist_nth(config_desktops_names, i);
+
+        for (; i < screen_num_desktops; ++i) {
+            if (it)
+                /* use the names from the config file when possible */
+                screen_desktop_names[i] = g_strdup(it->data);
+            else
+                /* make up a nice name if it's not though */
+                screen_desktop_names[i] = g_strdup_printf("desktop %i", i + 1);
+            if (it) it = g_slist_next(it);
+        }
+
+        /* if we changed any names, then set the root property so we can
+           all agree on the names */
+        PROP_SETSS(RootWindow(ob_display, ob_screen), net_desktop_names,
+                   screen_desktop_names);
     }
 
     /* resize the pager for these names */
This page took 0.0241749999999999 seconds and 4 git commands to generate.