diff options
author | Alberts Muktupāvels <alberts.muktupavels@gmail.com> | 2015-04-03 22:24:22 +0300 |
---|---|---|
committer | Alberts Muktupāvels <alberts.muktupavels@gmail.com> | 2015-04-03 22:24:22 +0300 |
commit | 4ccb99a50c54f345c4c7d9ac77f1ea76bc6c7c74 (patch) | |
tree | fbe1930f9d2d57901211b4366b123298c8a7fdc4 | |
parent | 8f699b71bd7e5581ec2f2804ea9650597618dfe1 (diff) | |
download | metacity-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.h | 1 | ||||
-rw-r--r-- | 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 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); |