summaryrefslogtreecommitdiffstats
path: root/app
diff options
context:
space:
mode:
authorsky@chromium.org <sky@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-03-19 22:39:11 +0000
committersky@chromium.org <sky@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-03-19 22:39:11 +0000
commit6c1bac287cf971236b20ff9ac9fa8845c8935ce1 (patch)
tree1c41733901ba08337002c89429b68d49a6a50bd8 /app
parentbb8581e1ffe87daefd4aea0491f1849cd0e37ed0 (diff)
downloadchromium_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.cc10
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() {