X-Git-Url: https://git.dogcows.com/gitweb?a=blobdiff_plain;f=openbox%2Fclient.c;h=e3d3013eded536321b0648a754c8fd336f8facd6;hb=eea1a9fef91686a511ae0a8590dbb6df02c26470;hp=1b010e4b263acc452d45771bd654738b4e5d63b1;hpb=98b02c6b60bbde2a5db026b3ee3e6e6dc44d1a92;p=chaz%2Fopenbox diff --git a/openbox/client.c b/openbox/client.c index 1b010e4b..e3d3013e 100644 --- a/openbox/client.c +++ b/openbox/client.c @@ -717,11 +717,13 @@ static gboolean client_can_steal_focus(ObClient *self, /* This is focus stealing prevention */ ob_debug("Want to focus window 0x%x at time %u " "launched at %u (last user interaction time %u) " - "request from %s, allow other desktop: %s", + "request from %s, allow other desktop: %s, " + "desktop switch time %u", self->window, steal_time, launch_time, event_last_user_time, (request_from_user ? "user" : "other"), - (allow_other_desktop ? "yes" : "no")); + (allow_other_desktop ? "yes" : "no"), + screen_desktop_user_time); /* if no launch time is provided for an application, make one up. @@ -777,18 +779,24 @@ static gboolean client_can_steal_focus(ObClient *self, } /* if it's on another desktop - then if allow_other_desktop is true, we don't want to let it steal + and if allow_other_desktop is true, we generally let it steal focus. + but if it didn't come from the user, don't let it steal unless it was + launched before the user switched desktops. focus, unless it was launched after we changed desktops and the request came from the user */ - if (!(self->desktop == screen_desktop || - self->desktop == DESKTOP_ALL) && - (!allow_other_desktop || - (request_from_user && screen_desktop_user_time && - !event_time_after(launch_time, screen_desktop_user_time)))) - { - steal = FALSE; - ob_debug("Not focusing the window because its on another desktop\n"); + if (!screen_compare_desktops(screen_desktop, self->desktop)) { + /* must be allowed */ + if (!allow_other_desktop) { + steal = FALSE; + ob_debug("Not focusing the window because its on another desktop"); + } + /* if we don't know when the desktop changed, but request is from an + application, don't let it change desktop on you */ + else if (!request_from_user) { + steal = FALSE; + ob_debug("Not focusing the window because non-user request"); + } } /* If something is focused... */ else if (focus_client) {