summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlberts Muktupāvels <alberts.muktupavels@gmail.com>2015-04-03 22:24:22 +0300
committerAlberts Muktupāvels <alberts.muktupavels@gmail.com>2015-04-03 22:24:22 +0300
commit4ccb99a50c54f345c4c7d9ac77f1ea76bc6c7c74 (patch)
treefbe1930f9d2d57901211b4366b123298c8a7fdc4
parent8f699b71bd7e5581ec2f2804ea9650597618dfe1 (diff)
downloadmetacity-4ccb99a50c54f345c4c7d9ac77f1ea76bc6c7c74.tar.gz
window: add _NET_WM_STATE_FOCUSED hint to _NET_WM_STATE
Based on mutter commit: https://git.gnome.org/browse/mutter/commit/?id=6e47f0e846968ebf7e9637f09af17bbf3cd36fca
-rw-r--r--src/core/atomnames.h1
-rw-r--r--src/core/window.c25
2 files changed, 19 insertions, 7 deletions
diff --git a/src/core/atomnames.h b/src/core/atomnames.h
index 9e20cf58..f3892903 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 be9094f4..35906276 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);