summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorsadrul@chromium.org <sadrul@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-10-19 23:39:39 +0000
committersadrul@chromium.org <sadrul@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-10-19 23:39:39 +0000
commit5a243fa5749a93102e8eafdea83b64f2a82dc77d (patch)
treeeebb1464852abcf599a3c8249534ec2284e0bf3e
parent5e6de7a1d954a550f4aa5603422ae879b9f34f0c (diff)
downloadchromium_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.cc16
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;
}