X-Git-Url: https://git.dogcows.com/gitweb?a=blobdiff_plain;ds=sidebyside;f=openbox%2Fscreen.c;h=d2fe9c5bc4196f2c7e30f9993d2633fcf600f6ad;hb=df436132bda79134e822fd56a896ed28cdc289e0;hp=a8f3b71cc8ee3647bb8eedd2414394c68857b04b;hpb=ad29434250f6c34ed2af8f99bed7a4e8d6b5053b;p=chaz%2Fopenbox diff --git a/openbox/screen.c b/openbox/screen.c index a8f3b71c..d2fe9c5b 100644 --- a/openbox/screen.c +++ b/openbox/screen.c @@ -438,16 +438,16 @@ void screen_set_desktop(guint num) /* show windows before hiding the rest to lessen the enter/leave events */ /* show windows from top to bottom */ - for (it = stacking_list; it != NULL; it = it->next) { + for (it = stacking_list; it; it = g_list_next(it)) { if (WINDOW_IS_CLIENT(it->data)) { ObClient *c = it->data; - if (!c->frame->visible && client_should_show(c)) + if (client_should_show(c)) frame_show(c->frame); } } /* hide windows from bottom to top */ - for (it = g_list_last(stacking_list); it != NULL; it = it->prev) { + for (it = g_list_last(stacking_list); it; it = g_list_previous(it)) { if (WINDOW_IS_CLIENT(it->data)) { ObClient *c = it->data; if (c->frame->visible && !client_should_show(c)) @@ -457,7 +457,18 @@ void screen_set_desktop(guint num) event_ignore_queued_enters(); - focus_fallback(OB_FOCUS_FALLBACK_NOFOCUS); + focus_hilite = focus_fallback_target(OB_FOCUS_FALLBACK_NOFOCUS); + if (focus_hilite) { + frame_adjust_focus(focus_hilite->frame, TRUE); + + /*! + When this focus_client check is not used, you can end up with races, + as demonstrated with gnome-panel, sometmies the window you click on + another desktop ends up losing focus cuz of the focus change here. + */ + /*if (!focus_client)*/ + client_focus(focus_hilite); + } } static void get_row_col(guint d, guint *r, guint *c)