diff options
author | sadrul@chromium.org <sadrul@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-10-19 23:39:39 +0000 |
---|---|---|
committer | sadrul@chromium.org <sadrul@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-10-19 23:39:39 +0000 |
commit | 5a243fa5749a93102e8eafdea83b64f2a82dc77d (patch) | |
tree | eebb1464852abcf599a3c8249534ec2284e0bf3e | |
parent | 5e6de7a1d954a550f4aa5603422ae879b9f34f0c (diff) | |
download | chromium_src-5a243fa5749a93102e8eafdea83b64f2a82dc77d.zip chromium_src-5a243fa5749a93102e8eafdea83b64f2a82dc77d.tar.gz chromium_src-5a243fa5749a93102e8eafdea83b64f2a82dc77d.tar.bz2 |
Fix XI_HierarchyChanged event processing in touchui=1 chromeos=1
Original CL by Gajendra Singh <wxjg68@motorola.com>
(http://codereview.chromium.org/8231006/):
XGetEventData() fix in touchui=1 and chromeos=1 build
XGetEventData() should not be called multiple times for same event cookie.
MessagePumpX::ProcessXEvent() calls XGetEventData() before forwarding to
MessageLoopForUI::Observer's ProcessedXEvent();
BUG=none
TEST=manually
patch from issue 8231006
Review URL: http://codereview.chromium.org/8344062
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@106410 0039d316-1c4b-4281-b951-d872f2087c98
-rw-r--r-- | chrome/browser/chromeos/xinput_hierarchy_changed_event_listener.cc | 16 |
1 files changed, 11 insertions, 5 deletions
diff --git a/chrome/browser/chromeos/xinput_hierarchy_changed_event_listener.cc b/chrome/browser/chromeos/xinput_hierarchy_changed_event_listener.cc index 1d381a3..9e30df3 100644 --- a/chrome/browser/chromeos/xinput_hierarchy_changed_event_listener.cc +++ b/chrome/browser/chromeos/xinput_hierarchy_changed_event_listener.cc @@ -99,7 +99,11 @@ void XInputHierarchyChangedEventListener::Stop() { #if defined(TOUCH_UI) || !defined(TOOLKIT_USES_GTK) base::EventStatus XInputHierarchyChangedEventListener::WillProcessEvent( const base::NativeEvent& event) { - return ProcessedXEvent(event) ? base::EVENT_HANDLED : base::EVENT_CONTINUE; + // There may be multiple listeners for the XI_HierarchyChanged event. So + // always return EVENT_CONTINUE to make sure all the listeners receive the + // event. + ProcessedXEvent(event); + return base::EVENT_CONTINUE; } void XInputHierarchyChangedEventListener::DidProcessEvent( @@ -123,18 +127,20 @@ bool XInputHierarchyChangedEventListener::ProcessedXEvent(XEvent* xevent) { (xevent->xcookie.extension != xiopcode_)) { return false; } +#if !defined(TOUCH_UI) if (!XGetEventData(xevent->xgeneric.display, &xevent->xcookie)) { VLOG(1) << "XGetEventData failed"; return false; } - +#endif XGenericEventCookie* cookie = &(xevent->xcookie); const bool should_consume = (cookie->evtype == XI_HierarchyChanged); - if (should_consume) { + if (should_consume) HandleHierarchyChangedEvent(static_cast<XIHierarchyEvent*>(cookie->data)); - } - XFreeEventData(xevent->xgeneric.display, cookie); +#if !defined(TOUCH_UI) + XFreeEventData(xevent->xgeneric.display, cookie); +#endif return should_consume; } |