X-Git-Url: https://git.brokenzipper.com/gitweb?a=blobdiff_plain;f=openbox%2Fscreen.c;h=a54b2b564074f771ba2bacae86b61045413ac5fe;hb=dc43b74abdfdf9f8d847ba562accd8ea6dcd52b1;hp=1705fa8957fd03a38fac74a0e95c9112ae05f9b6;hpb=c03c08415f01a52584158aa4f0356f3a0d7a46aa;p=chaz%2Fopenbox diff --git a/openbox/screen.c b/openbox/screen.c index 1705fa89..a54b2b56 100644 --- a/openbox/screen.c +++ b/openbox/screen.c @@ -166,7 +166,7 @@ gboolean screen_annex() CopyFromParent, InputOutput, CopyFromParent, CWOverrideRedirect, &attrib); - XMapRaised(ob_display, screen_support_win); + XMapWindow(ob_display, screen_support_win); if (!replace_wm()) { XDestroyWindow(ob_display, screen_support_win); @@ -300,8 +300,16 @@ void screen_startup(gboolean reconfig) screen_num_desktops = 0; screen_set_num_desktops(config_desktops_num); if (!reconfig) { - screen_set_desktop(MIN(config_screen_firstdesk, screen_num_desktops) - - 1); + guint32 d; + /* start on the current desktop when a wm was already running */ + if (PROP_GET32(RootWindow(ob_display, ob_screen), + net_current_desktop, cardinal, &d) && + d < screen_num_desktops) + { + screen_set_desktop(d); + } else + screen_set_desktop(MIN(config_screen_firstdesk, + screen_num_desktops) - 1); /* don't start in showing-desktop mode */ screen_showing_desktop = FALSE; @@ -414,6 +422,7 @@ void screen_set_num_desktops(guint num) void screen_set_desktop(guint num) { + ObClient *c; GList *it; guint old; @@ -451,21 +460,12 @@ void screen_set_desktop(guint num) } } - event_ignore_queued_enters(); + /* reduce flicker by hiliting now rather than waiting for the server + FocusIn event */ + if ((c = focus_fallback_target(TRUE, focus_client))) + frame_adjust_focus(c->frame, TRUE); - 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); - } + event_ignore_queued_enters(); } static void get_row_col(guint d, guint *r, guint *c) @@ -887,7 +887,12 @@ void screen_show_desktop(gboolean show) break; } } else { - focus_fallback(TRUE); + 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 */ + if ((c = focus_fallback_target(TRUE, NULL))) + client_focus(c); } show = !!show; /* make it boolean */