diff --git a/src/client.h b/src/client.h index 30752e412cabf8ba6e4d9e76304181a54f201ee7..b1999b450959b056777b9770502c46ae3573f1df 100644 --- a/src/client.h +++ b/src/client.h @@ -198,10 +198,6 @@ #define CLIENT_CAN_STICK_WINDOW(c) (!(c->transient_for) && \ FLAG_TEST(c->xfwm_flags, XFWM_FLAG_HAS_STICK)) -#define HINTS_ACCEPT_INPUT(wmhints) (!(wmhints) || \ - ((wmhints) && !(wmhints->flags & InputHint)) || \ - ((wmhints) && (wmhints->flags & InputHint) && (wmhints->input))) - typedef enum { UNSET = 0, diff --git a/src/focus.c b/src/focus.c index f875529212f5c4cd59234eb672a5b2a56525cdd0..489654bd30d94818e9ca955ddc16ff885f8626c5 100644 --- a/src/focus.c +++ b/src/focus.c @@ -540,6 +540,12 @@ clientSetFocus (ScreenInfo *screen_info, Client * c, Time timestamp, unsigned sh } clientUpdateOpacity (screen_info, c); } + else if (!client_focus) + { + /* Hack to prevent loosing focus when all remaining windows won't accept focus, see bug #1853 */ + XSetInputFocus (myScreenGetXDisplay (screen_info), screen_info->xfwm4_win, RevertToPointerRoot, timestamp); + } + if (FLAG_TEST(c->wm_flags, WM_FLAG_TAKEFOCUS)) { pending_focus = c;