X-Git-Url: https://git.dogcows.com/gitweb?a=blobdiff_plain;f=openbox%2Fscreen.c;h=379a12d82524c5bb1a21d3b8f21eb82f938dd2bb;hb=7bd8e97fbb751f2a4b9b4feea140a703540bc4e3;hp=e81b9590ee48e47253543736ed065ada47984d6e;hpb=b3764dd433f8e8511bf3045e4ea5e0e5df6b2a70;p=chaz%2Fopenbox diff --git a/openbox/screen.c b/openbox/screen.c index e81b9590..379a12d8 100644 --- a/openbox/screen.c +++ b/openbox/screen.c @@ -79,6 +79,10 @@ static GSList *struts_bottom = NULL; static ObPagerPopup *desktop_popup; +/*! The number of microseconds that you need to be on a desktop before it will + replace the remembered "last desktop" */ +#define REMEMBER_LAST_DESKTOP_TIME 750000 + static gboolean replace_wm(void) { gchar *wm_sn; @@ -601,39 +605,68 @@ 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 */ } } } screen_desktop_timeout = FALSE; ob_main_loop_timeout_remove(ob_main_loop, last_desktop_func); - ob_main_loop_timeout_add(ob_main_loop, 500000, last_desktop_func, - NULL, NULL, NULL); + ob_main_loop_timeout_add(ob_main_loop, REMEMBER_LAST_DESKTOP_TIME, + last_desktop_func, NULL, NULL, NULL); ob_debug("Moving to desktop %d\n", num+1);