X-Git-Url: https://git.dogcows.com/gitweb?a=blobdiff_plain;ds=sidebyside;f=openbox%2Fscreen.c;h=c0569c29406eadd79027b0d7631b8fa4346e4a62;hb=ea088eb88d7c29558fa59563a934545bc122d5eb;hp=2d34f2632cd07060886f94b0dd0e6f16167999a5;hpb=48f237203b8766e7d13af3f6e2d5deecc14b6651;p=chaz%2Fopenbox diff --git a/openbox/screen.c b/openbox/screen.c index 2d34f263..c0569c29 100644 --- a/openbox/screen.c +++ b/openbox/screen.c @@ -422,6 +422,7 @@ void screen_set_num_desktops(guint num) void screen_set_desktop(guint num) { + ObClient *c; GList *it; guint old; @@ -459,21 +460,16 @@ void screen_set_desktop(guint num) } } - event_ignore_queued_enters(); - - focus_hilite = focus_fallback_target(TRUE, focus_client); - 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, sometimes the window - you click on another desktop ends up losing focus cuz of the - focus change here. - */ - /*if (!focus_client)*/ - client_focus(focus_hilite); + /* have to try focus here because when you leave an empty desktop + there is no focus out to watch for */ + if ((c = focus_fallback_target(TRUE, focus_client))) { + /* reduce flicker by hiliting now rather than waiting for the server + FocusIn event */ + frame_adjust_focus(c->frame, TRUE); + client_focus(c); } + + event_ignore_queued_enters(); } static void get_row_col(guint d, guint *r, guint *c) @@ -895,21 +891,12 @@ void screen_show_desktop(gboolean show) break; } } else { + ObClient *c; + /* use NULL for the "old" argument because the desktop was focused and we don't want to fallback to the desktop by default */ - focus_hilite = focus_fallback_target(TRUE, NULL); - 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, sometimes the window - you click on another desktop ends up losing focus cuz of the - focus change here. - */ - /*if (!focus_client)*/ - client_focus(focus_hilite); - } + if ((c = focus_fallback_target(TRUE, NULL))) + client_focus(c); } show = !!show; /* make it boolean */