From a7c7a05775c359c890b8a3a793d65ddab6a86322 Mon Sep 17 00:00:00 2001
From: Olivier Fourdan <fourdan.olivier@wanadoo.fr>
Date: Fri, 12 Mar 2004 21:07:00 +0000
Subject: [PATCH] Fix for client not accepting focus

(Old svn revision: 11629)
---
 src/client.c | 19 ++++++++++++-------
 1 file changed, 12 insertions(+), 7 deletions(-)

diff --git a/src/client.c b/src/client.c
index 3c61f1eb5..eb6db6035 100644
--- a/src/client.c
+++ b/src/client.c
@@ -4735,13 +4735,12 @@ clientAcceptFocus (Client * c)
     {
         return FALSE;
     }
-    /* then try ICCCM */
-    else if (FLAG_TEST (c->wm_flags, WM_FLAG_TAKEFOCUS))
+    if (!FLAG_TEST_ALL (c->wm_flags, WM_FLAG_INPUT | WM_FLAG_TAKEFOCUS))
     {
-        return TRUE;
+        return FALSE;
     }
-    /* At last, use wmhints */
-    return (FLAG_TEST (c->wm_flags, WM_FLAG_INPUT) ? TRUE : FALSE);
+    
+    return TRUE;
 }
 
 static inline void
@@ -4870,12 +4869,18 @@ clientSetFocus (Client * c, unsigned short flags)
         {
             clientSortRing(c);
         }
-        XSetInputFocus (dpy, c->window, RevertToNone, CurrentTime);
-        XFlush (dpy);
+        
+        if (FLAG_TEST (c->wm_flags, WM_FLAG_INPUT))
+        {
+            XSetInputFocus (dpy, c->window, RevertToNone, CurrentTime);
+            XFlush (dpy);
+        }
+        
         if (FLAG_TEST(c->wm_flags, WM_FLAG_TAKEFOCUS))
         {
             sendClientMessage (c->window, wm_protocols, wm_takefocus, CurrentTime);
         }
+        
         if ((c->legacy_fullscreen) || FLAG_TEST(c->flags, CLIENT_FLAG_FULLSCREEN))
         {
             clientSetLayer (c, WIN_LAYER_ABOVE_DOCK);
-- 
GitLab