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;