guint screen_num_desktops;
guint screen_num_monitors;
guint screen_desktop;
-guint screen_last_desktop = 1;
-guint screen_old_desktop;
-gboolean screen_desktop_timeout = TRUE;
-Size screen_physical_size;
+guint screen_last_desktop;
gboolean screen_showing_desktop;
ObDesktopLayout screen_desktop_layout;
gchar **screen_desktop_names;
Window screen_support_win;
Time screen_desktop_user_time = CurrentTime;
+static Size screen_physical_size;
+static guint screen_old_desktop;
+static gboolean screen_desktop_timeout = TRUE;
/*! An array of desktops, holding array of areas per monitor */
static Rect *monitor_area = NULL;
/*! An array of desktops, holding an array of struts */
supported[i++] = prop_atoms.net_wm_sync_request;
supported[i++] = prop_atoms.net_wm_sync_request_counter;
#endif
+ supported[i++] = prop_atoms.net_wm_pid;
+ supported[i++] = prop_atoms.net_wm_ping;
supported[i++] = prop_atoms.kde_wm_change_state;
supported[i++] = prop_atoms.kde_net_wm_frame_strut;
supported[i++] = prop_atoms.ob_wm_state_undecorated;
supported[i++] = prop_atoms.openbox_pid;
supported[i++] = prop_atoms.ob_theme;
+ supported[i++] = prop_atoms.ob_config_file;
supported[i++] = prop_atoms.ob_control;
g_assert(i == num_support);
screen_num_desktops = 0;
if (PROP_GET32(RootWindow(ob_display, ob_screen),
net_number_of_desktops, cardinal, &d))
+ {
+ if (d != config_desktops_num) {
+ /* TRANSLATORS: If you need to specify a different order of the
+ arguments, you can use %1$d for the first one and %2$d for the
+ second one. For example,
+ "The current session has %2$d desktops, but Openbox is configured for %1$d ..." */
+ g_warning(_("Openbox is configured for %d desktops, but the current session has %d. Overriding the Openbox configuration."),
+ config_desktops_num, d);
+ }
screen_set_num_desktops(d);
+ }
/* restore from session if possible */
else if (session_num_desktops)
screen_set_num_desktops(session_num_desktops);
PROP_SET32(RootWindow(ob_display, ob_screen),
net_current_desktop, cardinal, num);
+ /* This whole thing decides when/how to save the screen_last_desktop so
+ that it can be restored later if you want */
if (screen_desktop_timeout) {
- if (screen_desktop == screen_last_desktop) {
- screen_last_desktop = previous;
+ /* If screen_desktop_timeout is true, then we've been on this desktop
+ long enough and we can save it as the last desktop. */
+
+ if (screen_last_desktop == previous)
+ /* this is the startup state only */
screen_old_desktop = screen_desktop;
- } else {
+ else {
+ /* save the "last desktop" as the "old desktop" */
screen_old_desktop = screen_last_desktop;
+ /* save the desktop we're coming from as the "last desktop" */
screen_last_desktop = previous;
}
- } else {
+ }
+ else {
+ /* If screen_desktop_timeout is false, then we just got to this desktop
+ and we are moving away again. */
+
if (screen_desktop == screen_last_desktop) {
+ /* If we are moving to the "last desktop" .. */
if (previous == screen_old_desktop) {
+ /* .. from the "old desktop", change the last desktop to
+ be where we are coming from */
screen_last_desktop = screen_old_desktop;
- } else if (screen_last_desktop == screen_old_desktop) {
+ }
+ else if (screen_last_desktop == screen_old_desktop) {
+ /* .. and also to the "old desktop", change the "last
+ desktop" to be where we are coming from */
screen_last_desktop = previous;
- } else {
+ }
+ else {
+ /* .. from some other desktop, then set the "last desktop" to
+ be the saved "old desktop", i.e. where we were before the
+ "last desktop" */
screen_last_desktop = screen_old_desktop;
}
- } else {
+ }
+ else {
+ /* If we are moving to any desktop besides the "last desktop"..
+ (this is the normal case) */
if (screen_desktop == screen_old_desktop) {
- /* do nothing */
- } else if (previous == screen_old_desktop) {
- /* do nothing */
- } else if (screen_last_desktop == screen_old_desktop) {
+ /* If moving to the "old desktop", which is not the
+ "last desktop", don't save anything */
+ }
+ else if (previous == screen_old_desktop) {
+ /* If moving from the "old desktop", and not to the
+ "last desktop", don't save anything */
+ }
+ else if (screen_last_desktop == screen_old_desktop) {
+ /* If the "last desktop" is the same as "old desktop" and
+ you're not moving to the "last desktop" then save where
+ we're coming from as the "last desktop" */
screen_last_desktop = previous;
- } else {
- /* do nothing */
+ }
+ else {
+ /* If the "last desktop" is different from the "old desktop"
+ and you're not moving to the "last desktop", then don't save
+ anything */
}
}
}