X-Git-Url: https://git.dogcows.com/gitweb?a=blobdiff_plain;f=openbox%2Fscreen.c;h=b9cbdd2cd8dc2d88270780131f13e40e11e92b69;hb=1cafe0ba4c11baf1f2214c10c1e00ea930d63adc;hp=26920f408966ce9141c77a6cfee13bccd27d1043;hpb=a16f1374eed70bc30a85f35f56c05d3073c6f0e0;p=chaz%2Fopenbox diff --git a/openbox/screen.c b/openbox/screen.c index 26920f40..b9cbdd2c 100644 --- a/openbox/screen.c +++ b/openbox/screen.c @@ -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 */