X-Git-Url: https://git.brokenzipper.com/gitweb?a=blobdiff_plain;f=openbox%2Fscreen.c;h=932b157e1cf54add2dab54b01feb749d0c951643;hb=3a03a554f0d5fc78ae211b5cf7cd162ea524e157;hp=5e0f67d4453d2205b507df3abeb8cfcd5f000152;hpb=8a2adbb0585dfc150c4809327a2c41265174b533;p=chaz%2Fopenbox diff --git a/openbox/screen.c b/openbox/screen.c index 5e0f67d4..932b157e 100644 --- a/openbox/screen.c +++ b/openbox/screen.c @@ -60,15 +60,15 @@ 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; 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 */ @@ -289,6 +289,8 @@ gboolean screen_annex(void) 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; @@ -400,7 +402,13 @@ void screen_startup(gboolean reconfig) screen_num_desktops = 0; if (PROP_GET32(RootWindow(ob_display, ob_screen), net_number_of_desktops, cardinal, &d)) + { + if (d != config_desktops_num) { + 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); @@ -605,32 +613,61 @@ void screen_set_desktop(guint num, gboolean dofocus) 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_timeout is true, then we've been on this desktop + long enough and we can save it as the last desktop. */ + + /* 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 { + /* 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) { - screen_last_desktop = previous; - screen_old_desktop = screen_desktop; - } else { - screen_old_desktop = screen_last_desktop; - screen_last_desktop = previous; - } - } else { - 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 */ } } }