diff options
author | sky@chromium.org <sky@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-03-19 22:39:11 +0000 |
---|---|---|
committer | sky@chromium.org <sky@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-03-19 22:39:11 +0000 |
commit | 6c1bac287cf971236b20ff9ac9fa8845c8935ce1 (patch) | |
tree | 1c41733901ba08337002c89429b68d49a6a50bd8 /app | |
parent | bb8581e1ffe87daefd4aea0491f1849cd0e37ed0 (diff) | |
download | chromium_src-6c1bac287cf971236b20ff9ac9fa8845c8935ce1.zip chromium_src-6c1bac287cf971236b20ff9ac9fa8845c8935ce1.tar.gz chromium_src-6c1bac287cf971236b20ff9ac9fa8845c8935ce1.tar.bz2 |
Fixes bug in ActiveWindowWatcherX. It appears that in newer versions
of gdk gdk itself maintains the mask to apply and ends up blowing away
our request for property change events. Using gdk_set_events doesn't
seem to have this problem.
BUG=none
TEST=none
Review URL: http://codereview.chromium.org/1076007
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@42158 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'app')
-rw-r--r-- | app/active_window_watcher_x.cc | 10 |
1 files changed, 7 insertions, 3 deletions
diff --git a/app/active_window_watcher_x.cc b/app/active_window_watcher_x.cc index 3c11b15..04cb3d0 100644 --- a/app/active_window_watcher_x.cc +++ b/app/active_window_watcher_x.cc @@ -30,11 +30,15 @@ void ActiveWindowWatcherX::Init() { gdk_screen_get_display(gdk_screen_get_default()), kNetActiveWindow); GdkWindow* root = gdk_get_default_root_window(); + // Set up X Event filter to listen for PropertyChange X events. These events // tell us when the active window changes. - gdk_window_add_filter(root, &ActiveWindowWatcherX::OnWindowXEvent, this); - XSelectInput( - GDK_WINDOW_XDISPLAY(root), GDK_WINDOW_XID(root), PropertyChangeMask); + // Don't use XSelectInput directly here, as gdk internally seems to cache the + // mask and reapply XSelectInput after this, resetting any mask we set here. + gdk_window_set_events(root, + static_cast<GdkEventMask>(gdk_window_get_events(root) | + GDK_PROPERTY_CHANGE_MASK)); + gdk_window_add_filter(NULL, &ActiveWindowWatcherX::OnWindowXEvent, this); } void ActiveWindowWatcherX::NotifyActiveWindowChanged() { |