From 6e1dc92e17e2c35673581b08a247d5224aeaa668 Mon Sep 17 00:00:00 2001
From: Olivier Fourdan <fourdan.olivier@wanadoo.fr>
Date: Sat, 23 Dec 2006 15:21:15 +0000
Subject: [PATCH] Forgot to update the NET_WM_STATE when the client requests an
 update of NET_WM_STATE_DEMANDS_ATTENTION (Bug #2678)

(Old svn revision: 24174)
---
 src/netwm.c | 37 ++++++++++++++++++++-----------------
 1 file changed, 20 insertions(+), 17 deletions(-)

diff --git a/src/netwm.c b/src/netwm.c
index 429d3e610..6ed81248f 100644
--- a/src/netwm.c
+++ b/src/netwm.c
@@ -334,23 +334,6 @@ clientUpdateNetState (Client * c, XClientMessageEvent * ev)
         }
     }
 
-    if ((first  == display_info->atoms[NET_WM_STATE_DEMANDS_ATTENTION]) ||
-        (second == display_info->atoms[NET_WM_STATE_DEMANDS_ATTENTION]))
-    {
-        if (action == NET_WM_STATE_ADD)
-        {
-            FLAG_SET (c->flags, CLIENT_FLAG_DEMANDS_ATTENTION);
-        }
-        else if (action == NET_WM_STATE_REMOVE)
-        {
-            FLAG_UNSET (c->flags, CLIENT_FLAG_DEMANDS_ATTENTION);
-        }
-        else if (action == NET_WM_STATE_TOGGLE)
-        {
-            FLAG_TOGGLE (c->flags, CLIENT_FLAG_DEMANDS_ATTENTION);
-        }
-    }
-
     if ((first  == display_info->atoms[NET_WM_STATE_MAXIMIZED_HORZ]) ||
         (second == display_info->atoms[NET_WM_STATE_MAXIMIZED_HORZ]) ||
         (first  == display_info->atoms[NET_WM_STATE_MAXIMIZED_VERT]) ||
@@ -542,6 +525,26 @@ clientUpdateNetState (Client * c, XClientMessageEvent * ev)
         }
         frameDraw (c, TRUE);
     }
+
+    if ((first  == display_info->atoms[NET_WM_STATE_DEMANDS_ATTENTION]) ||
+        (second == display_info->atoms[NET_WM_STATE_DEMANDS_ATTENTION]))
+    {
+        if ((action == NET_WM_STATE_ADD) && !FLAG_TEST (c->flags, CLIENT_FLAG_DEMANDS_ATTENTION))
+        {
+            FLAG_SET (c->flags, CLIENT_FLAG_DEMANDS_ATTENTION);
+            clientSetNetState (c);
+        }
+        else if ((action == NET_WM_STATE_REMOVE) && FLAG_TEST (c->flags, CLIENT_FLAG_DEMANDS_ATTENTION))
+        {
+            FLAG_UNSET (c->flags, CLIENT_FLAG_DEMANDS_ATTENTION);
+            clientSetNetState (c);
+        }
+        else if (action == NET_WM_STATE_TOGGLE)
+        {
+            FLAG_TOGGLE (c->flags, CLIENT_FLAG_DEMANDS_ATTENTION);
+            clientSetNetState (c);
+        }
+    }
 }
 
 void
-- 
GitLab