[metacity] window: add _NET_WM_STATE_FOCUSED hint to _NET_WM_STATE



commit 4ccb99a50c54f345c4c7d9ac77f1ea76bc6c7c74
Author: Alberts Muktupāvels <alberts muktupavels gmail com>
Date:   Fri Apr 3 22:24:22 2015 +0300

    window: add _NET_WM_STATE_FOCUSED hint to _NET_WM_STATE
    
    Based on mutter commit:
    https://git.gnome.org/browse/mutter/commit/?id=6e47f0e846968ebf7e9637f09af17bbf3cd36fca

 src/core/atomnames.h |    1 +
 src/core/window.c    |   25 ++++++++++++++++++-------
 2 files changed, 19 insertions(+), 7 deletions(-)
---
diff --git a/src/core/atomnames.h b/src/core/atomnames.h
index 9e20cf5..f389290 100644
--- a/src/core/atomnames.h
+++ b/src/core/atomnames.h
@@ -157,6 +157,7 @@ item(_NET_WM_ACTION_ABOVE)
 item(_NET_WM_ACTION_BELOW)
 item(_NET_WM_STATE_STICKY)
 item(_NET_WM_FULLSCREEN_MONITORS)
+item(_NET_WM_STATE_FOCUSED)
 item(_NET_RESTACK_WINDOW)
 
 /* eof atomnames.h */
diff --git a/src/core/window.c b/src/core/window.c
index be9094f..3590627 100644
--- a/src/core/window.c
+++ b/src/core/window.c
@@ -1212,7 +1212,7 @@ static void
 set_net_wm_state (MetaWindow *window)
 {
   int i;
-  unsigned long data[12];
+  unsigned long data[13];
 
   i = 0;
   if (window->shaded)
@@ -1275,6 +1275,11 @@ set_net_wm_state (MetaWindow *window)
       data[i] = window->display->atom__NET_WM_STATE_STICKY;
       ++i;
     }
+  if (meta_window_appears_focused (window))
+    {
+      data[i] = window->display->atom__NET_WM_STATE_FOCUSED;
+      ++i;
+    }
 
   meta_verbose ("Setting _NET_WM_STATE with %d atoms\n", i);
 
@@ -5448,6 +5453,15 @@ meta_window_client_message (MetaWindow *window,
 }
 
 static void
+meta_window_appears_focused_changed (MetaWindow *window)
+{
+  set_net_wm_state (window);
+
+  if (window->frame)
+    meta_frame_queue_draw (window->frame);
+}
+
+static void
 check_ancestor_focus_appearance (MetaWindow *window)
 {
   MetaWindow *parent = meta_window_get_transient_for (window);
@@ -5458,8 +5472,7 @@ check_ancestor_focus_appearance (MetaWindow *window)
   if (window->type != META_WINDOW_MODAL_DIALOG || !parent || parent == window)
     return;
 
-  if (parent->frame)
-    meta_frame_queue_draw (parent->frame);
+  meta_window_appears_focused_changed (parent);
 
   check_ancestor_focus_appearance (parent);
 }
@@ -5573,8 +5586,7 @@ meta_window_notify_focus (MetaWindow *window,
                                 window);
             }
 
-          if (window->frame)
-            meta_frame_queue_draw (window->frame);
+          meta_window_appears_focused_changed (window);
 
           meta_error_trap_push (window->display);
           XInstallColormap (window->display->xdisplay,
@@ -5633,8 +5645,7 @@ meta_window_notify_focus (MetaWindow *window,
           /* parent window become active. */
           check_ancestor_focus_appearance (window);
 
-          if (window->frame)
-            meta_frame_queue_draw (window->frame);
+          meta_window_appears_focused_changed (window);
 
           meta_compositor_set_active_window (window->display->compositor,
                                              window->screen, NULL);


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]