Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(117)

Unified Diff: ui/events/x/events_x.cc

Issue 1287103004: Sync ui/events to chromium @ https://codereview.chromium.org/1210203002 (Closed) Base URL: https://github.com/domokit/mojo.git@master
Patch Set: rebased Created 5 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « ui/events/touchscreen_device.cc ('k') | ui/events/x/events_x_unittest.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: ui/events/x/events_x.cc
diff --git a/ui/events/platform/x11/platform_event_utils_x11.cc b/ui/events/x/events_x.cc
similarity index 79%
rename from ui/events/platform/x11/platform_event_utils_x11.cc
rename to ui/events/x/events_x.cc
index 056dc26ce3400b5a7774dd989ff4bd11c271afb5..64da7ca6c8626085e4308056c225f829659c9a1f 100644
--- a/ui/events/platform/x11/platform_event_utils_x11.cc
+++ b/ui/events/x/events_x.cc
@@ -2,7 +2,7 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-#include "ui/events/platform/platform_event_utils.h"
+#include "ui/events/event_constants.h"
#include <string.h>
#include <X11/extensions/XInput.h>
@@ -14,16 +14,16 @@
#include "base/logging.h"
#include "base/memory/singleton.h"
+#include "ui/events/devices/x11/device_data_manager_x11.h"
+#include "ui/events/devices/x11/device_list_cache_x11.h"
+#include "ui/events/devices/x11/touch_factory_x11.h"
#include "ui/events/event.h"
-#include "ui/events/event_constants.h"
#include "ui/events/event_utils.h"
-#include "ui/events/platform/x11/device_data_manager_x11.h"
-#include "ui/events/platform/x11/device_list_cache_x.h"
-#include "ui/events/platform/x11/keyboard_code_conversion_x11.h"
-#include "ui/events/platform/x11/touch_factory_x11.h"
+#include "ui/events/keycodes/keyboard_code_conversion_x.h"
#include "ui/gfx/display.h"
-#include "ui/gfx/point.h"
-#include "ui/gfx/rect.h"
+#include "ui/gfx/geometry/point.h"
+#include "ui/gfx/geometry/rect.h"
+#include "ui/gfx/screen.h"
#include "ui/gfx/x/x11_atom_cache.h"
#include "ui/gfx/x/x11_types.h"
@@ -38,7 +38,7 @@ const int kMaxWheelButton = 7;
// A class to track current modifier state on master device. Only track ctrl,
// alt, shift and caps lock keys currently. The tracked state can then be used
// by floating device.
-class XModifierStateWatcher {
+class XModifierStateWatcher{
public:
static XModifierStateWatcher* GetInstance() {
return Singleton<XModifierStateWatcher>::get();
@@ -102,14 +102,13 @@ class XModifierStateWatcher {
private:
friend struct DefaultSingletonTraits<XModifierStateWatcher>;
- XModifierStateWatcher() : state_(0) {}
+ XModifierStateWatcher() : state_(0) { }
unsigned int state_;
DISALLOW_COPY_AND_ASSIGN(XModifierStateWatcher);
};
-#if defined(USE_XI2_MT)
// Detects if a touch event is a driver-generated 'special event'.
// A 'special event' is a touch event with maximum radius and pressure at
// location (0, 0).
@@ -117,7 +116,8 @@ class XModifierStateWatcher {
bool TouchEventIsGeneratedHack(const base::NativeEvent& native_event) {
XIDeviceEvent* event =
static_cast<XIDeviceEvent*>(native_event->xcookie.data);
- CHECK(event->evtype == XI_TouchBegin || event->evtype == XI_TouchUpdate ||
+ CHECK(event->evtype == XI_TouchBegin ||
+ event->evtype == XI_TouchUpdate ||
event->evtype == XI_TouchEnd);
// Force is normalized to [0, 1].
@@ -132,13 +132,12 @@ bool TouchEventIsGeneratedHack(const base::NativeEvent& native_event) {
unsigned int deviceid =
static_cast<XIDeviceEvent*>(native_event->xcookie.data)->sourceid;
if (!ui::DeviceDataManagerX11::GetInstance()->GetDataRange(
- deviceid, ui::DeviceDataManagerX11::DT_TOUCH_MAJOR, &min, &max)) {
+ deviceid, ui::DeviceDataManagerX11::DT_TOUCH_MAJOR, &min, &max)) {
return false;
}
return radius * 2 == max;
}
-#endif
int GetEventFlagsFromXState(unsigned int state) {
int flags = 0;
@@ -162,6 +161,8 @@ int GetEventFlagsFromXState(unsigned int state) {
flags |= ui::EF_MIDDLE_MOUSE_BUTTON;
if (state & Button3Mask)
flags |= ui::EF_RIGHT_MOUSE_BUTTON;
+ // There are no masks for EF_BACK_MOUSE_BUTTON and
+ // EF_FORWARD_MOUSE_BUTTON.
return flags;
}
@@ -182,18 +183,15 @@ int GetEventFlagsFromXKeyEvent(XEvent* xevent) {
// handle the character compositions.
const unsigned int shift_lock_mask = ShiftMask | LockMask;
const bool fabricated_by_xim =
- xevent->xkey.keycode == 0 && (xevent->xkey.state & ~shift_lock_mask) == 0;
+ xevent->xkey.keycode == 0 &&
+ (xevent->xkey.state & ~shift_lock_mask) == 0;
const int ime_fabricated_flag =
fabricated_by_xim ? ui::EF_IME_FABRICATED_KEY : 0;
#endif
return GetEventFlagsFromXState(xevent->xkey.state) |
- (xevent->xkey.send_event ? ui::EF_FINAL : 0) |
- (IsKeypadKey(XLookupKeysym(&xevent->xkey, 0)) ? ui::EF_NUMPAD_KEY
- : 0) |
- (IsFunctionKey(XLookupKeysym(&xevent->xkey, 0)) ? ui::EF_FUNCTION_KEY
- : 0) |
- ime_fabricated_flag;
+ (xevent->xkey.send_event ? ui::EF_FINAL : 0) |
+ ime_fabricated_flag;
}
int GetEventFlagsFromXGenericEvent(XEvent* xevent) {
@@ -202,11 +200,7 @@ int GetEventFlagsFromXGenericEvent(XEvent* xevent) {
DCHECK((xievent->evtype == XI_KeyPress) ||
(xievent->evtype == XI_KeyRelease));
return GetEventFlagsFromXState(xievent->mods.effective) |
- (xevent->xkey.send_event ? ui::EF_FINAL : 0) |
- (IsKeypadKey(
- XkbKeycodeToKeysym(xievent->display, xievent->detail, 0, 0))
- ? ui::EF_NUMPAD_KEY
- : 0);
+ (xevent->xkey.send_event ? ui::EF_FINAL : 0);
}
// Get the event flag for the button in XButtonEvent. During a ButtonPress
@@ -225,6 +219,10 @@ int GetEventFlagsForButton(int button) {
return ui::EF_MIDDLE_MOUSE_BUTTON;
case 3:
return ui::EF_RIGHT_MOUSE_BUTTON;
+ case 8:
+ return ui::EF_BACK_MOUSE_BUTTON;
+ case 9:
+ return ui::EF_FORWARD_MOUSE_BUTTON;
default:
return 0;
}
@@ -234,10 +232,8 @@ int GetButtonMaskForX2Event(XIDeviceEvent* xievent) {
int buttonflags = 0;
for (int i = 0; i < 8 * xievent->buttons.mask_len; i++) {
if (XIMaskIsSet(xievent->buttons.mask, i)) {
- int button =
- (xievent->sourceid == xievent->deviceid)
- ? ui::DeviceDataManagerX11::GetInstance()->GetMappedButton(i)
- : i;
+ int button = (xievent->sourceid == xievent->deviceid) ?
+ ui::DeviceDataManagerX11::GetInstance()->GetMappedButton(i) : i;
buttonflags |= GetEventFlagsForButton(button);
}
}
@@ -247,19 +243,17 @@ int GetButtonMaskForX2Event(XIDeviceEvent* xievent) {
ui::EventType GetTouchEventType(const base::NativeEvent& native_event) {
XIDeviceEvent* event =
static_cast<XIDeviceEvent*>(native_event->xcookie.data);
-#if defined(USE_XI2_MT)
- switch (event->evtype) {
+ switch(event->evtype) {
case XI_TouchBegin:
- return TouchEventIsGeneratedHack(native_event) ? ui::ET_UNKNOWN
- : ui::ET_TOUCH_PRESSED;
+ return TouchEventIsGeneratedHack(native_event) ? ui::ET_UNKNOWN :
+ ui::ET_TOUCH_PRESSED;
case XI_TouchUpdate:
- return TouchEventIsGeneratedHack(native_event) ? ui::ET_UNKNOWN
- : ui::ET_TOUCH_MOVED;
+ return TouchEventIsGeneratedHack(native_event) ? ui::ET_UNKNOWN :
+ ui::ET_TOUCH_MOVED;
case XI_TouchEnd:
- return TouchEventIsGeneratedHack(native_event) ? ui::ET_TOUCH_CANCELLED
- : ui::ET_TOUCH_RELEASED;
+ return TouchEventIsGeneratedHack(native_event) ? ui::ET_TOUCH_CANCELLED :
+ ui::ET_TOUCH_RELEASED;
}
-#endif // defined(USE_XI2_MT)
DCHECK(ui::TouchFactory::GetInstance()->IsTouchDevice(event->sourceid));
switch (event->evtype) {
@@ -270,7 +264,8 @@ ui::EventType GetTouchEventType(const base::NativeEvent& native_event) {
case XI_Motion:
// Should not convert any emulated Motion event from touch device to
// touch event.
- if (!(event->flags & XIPointerEmulated) && GetButtonMaskForX2Event(event))
+ if (!(event->flags & XIPointerEmulated) &&
+ GetButtonMaskForX2Event(event))
return ui::ET_TOUCH_MOVED;
return ui::ET_UNKNOWN;
default:
@@ -280,18 +275,58 @@ ui::EventType GetTouchEventType(const base::NativeEvent& native_event) {
}
double GetTouchParamFromXEvent(XEvent* xev,
- ui::DeviceDataManagerX11::DataType val,
- double default_value) {
- ui::DeviceDataManagerX11::GetInstance()->GetEventData(*xev, val,
- &default_value);
+ ui::DeviceDataManagerX11::DataType val,
+ double default_value) {
+ ui::DeviceDataManagerX11::GetInstance()->GetEventData(
+ *xev, val, &default_value);
return default_value;
}
void ScaleTouchRadius(XEvent* xev, double* radius) {
DCHECK_EQ(GenericEvent, xev->type);
XIDeviceEvent* xiev = static_cast<XIDeviceEvent*>(xev->xcookie.data);
- ui::DeviceDataManagerX11::GetInstance()->ApplyTouchRadiusScale(xiev->sourceid,
- radius);
+ ui::DeviceDataManagerX11::GetInstance()->ApplyTouchRadiusScale(
+ xiev->sourceid, radius);
+}
+
+unsigned int UpdateX11EventFlags(int ui_flags, unsigned int old_x_flags) {
+ static struct {
+ int ui;
+ int x;
+ } flags[] = {
+ {ui::EF_CONTROL_DOWN, ControlMask},
+ {ui::EF_SHIFT_DOWN, ShiftMask},
+ {ui::EF_ALT_DOWN, Mod1Mask},
+ {ui::EF_CAPS_LOCK_DOWN, LockMask},
+ {ui::EF_ALTGR_DOWN, Mod5Mask},
+ {ui::EF_COMMAND_DOWN, Mod4Mask},
+ {ui::EF_MOD3_DOWN, Mod3Mask},
+ {ui::EF_LEFT_MOUSE_BUTTON, Button1Mask},
+ {ui::EF_MIDDLE_MOUSE_BUTTON, Button2Mask},
+ {ui::EF_RIGHT_MOUSE_BUTTON, Button3Mask},
+ };
+ unsigned int new_x_flags = old_x_flags;
+ for (size_t i = 0; i < arraysize(flags); ++i) {
+ if (ui_flags & flags[i].ui)
+ new_x_flags |= flags[i].x;
+ else
+ new_x_flags &= ~flags[i].x;
+ }
+ return new_x_flags;
+}
+
+unsigned int UpdateX11EventButton(int ui_flag, unsigned int old_x_button) {
+ switch (ui_flag) {
+ case ui::EF_LEFT_MOUSE_BUTTON:
+ return Button1;
+ case ui::EF_MIDDLE_MOUSE_BUTTON:
+ return Button2;
+ case ui::EF_RIGHT_MOUSE_BUTTON:
+ return Button3;
+ default:
+ return old_x_button;
+ }
+ NOTREACHED();
}
bool GetGestureTimes(const base::NativeEvent& native_event,
@@ -317,7 +352,7 @@ namespace ui {
void UpdateDeviceList() {
XDisplay* display = gfx::GetXDisplay();
- DeviceListCacheX::GetInstance()->UpdateDeviceList(display);
+ DeviceListCacheX11::GetInstance()->UpdateDeviceList(display);
TouchFactory::GetInstance()->UpdateDeviceList(display);
DeviceDataManagerX11::GetInstance()->UpdateDeviceList(display);
}
@@ -327,8 +362,8 @@ EventType EventTypeFromNative(const base::NativeEvent& native_event) {
// ET_UNKNOWN as the type so this event will not be further processed.
// NOTE: During some events unittests there is no device data manager.
if (DeviceDataManager::HasInstance() &&
- static_cast<DeviceDataManagerX11*>(DeviceDataManager::GetInstance())
- ->IsEventBlocked(native_event)) {
+ static_cast<DeviceDataManagerX11*>(DeviceDataManager::GetInstance())->
+ IsEventBlocked(native_event)) {
return ET_UNKNOWN;
}
@@ -407,6 +442,14 @@ EventType EventTypeFromNative(const base::NativeEvent& native_event) {
return ET_UMA_DATA;
if (GetButtonMaskForX2Event(xievent))
return ET_MOUSE_DRAGGED;
+ if (DeviceDataManagerX11::GetInstance()->HasEventData(
+ xievent, DeviceDataManagerX11::DT_CMT_SCROLL_X) ||
+ DeviceDataManagerX11::GetInstance()->HasEventData(
+ xievent, DeviceDataManagerX11::DT_CMT_SCROLL_Y)) {
+ // Don't produce mouse move events for mousewheel scrolls.
+ return ET_UNKNOWN;
+ }
+
return ET_MOUSE_MOVED;
}
case XI_KeyPress:
@@ -446,7 +489,6 @@ int EventFlagsFromNative(const base::NativeEvent& native_event) {
static_cast<XIDeviceEvent*>(native_event->xcookie.data);
switch (xievent->evtype) {
-#if defined(USE_XI2_MT)
case XI_TouchBegin:
case XI_TouchUpdate:
case XI_TouchEnd:
@@ -455,7 +497,6 @@ int EventFlagsFromNative(const base::NativeEvent& native_event) {
GetEventFlagsFromXState(
XModifierStateWatcher::GetInstance()->state());
break;
-#endif
case XI_ButtonPress:
case XI_ButtonRelease: {
const bool touch =
@@ -489,7 +530,7 @@ int EventFlagsFromNative(const base::NativeEvent& native_event) {
}
base::TimeDelta EventTimeFromNative(const base::NativeEvent& native_event) {
- switch (native_event->type) {
+ switch(native_event->type) {
case KeyPress:
case KeyRelease:
return base::TimeDelta::FromMilliseconds(native_event->xkey.time);
@@ -511,9 +552,9 @@ base::TimeDelta EventTimeFromNative(const base::NativeEvent& native_event) {
// If the driver supports gesture times, use them.
return base::TimeDelta::FromMicroseconds(end * 1000000);
} else if (DeviceDataManagerX11::GetInstance()->GetEventData(
- *native_event,
- DeviceDataManagerX11::DT_TOUCH_RAW_TIMESTAMP,
- &touch_timestamp)) {
+ *native_event,
+ DeviceDataManagerX11::DT_TOUCH_RAW_TIMESTAMP,
+ &touch_timestamp)) {
return base::TimeDelta::FromMicroseconds(touch_timestamp * 1000000);
} else {
XIDeviceEvent* xide =
@@ -593,16 +634,15 @@ int EventButtonFromNative(const base::NativeEvent& native_event) {
static_cast<XIDeviceEvent*>(native_event->xcookie.data);
int button = xievent->detail;
- return (xievent->sourceid == xievent->deviceid)
- ? DeviceDataManagerX11::GetInstance()->GetMappedButton(button)
- : button;
+ return (xievent->sourceid == xievent->deviceid) ?
+ DeviceDataManagerX11::GetInstance()->GetMappedButton(button) : button;
}
KeyboardCode KeyboardCodeFromNative(const base::NativeEvent& native_event) {
return KeyboardCodeFromXKeyEvent(native_event);
}
-const char* CodeFromNative(const base::NativeEvent& native_event) {
+DomCode CodeFromNative(const base::NativeEvent& native_event) {
return CodeFromXEvent(native_event);
}
@@ -650,7 +690,7 @@ int GetChangedMouseButtonFlagsFromNative(
switch (native_event->type) {
case ButtonPress:
case ButtonRelease:
- return GetEventFlagsFromXState(native_event->xbutton.state);
+ return GetEventFlagsForButton(native_event->xbutton.button);
case GenericEvent: {
XIDeviceEvent* xievent =
static_cast<XIDeviceEvent*>(native_event->xcookie.data);
@@ -670,14 +710,14 @@ int GetChangedMouseButtonFlagsFromNative(
gfx::Vector2d GetMouseWheelOffset(const base::NativeEvent& native_event) {
float x_offset, y_offset;
- if (GetScrollOffsets(native_event, &x_offset, &y_offset, NULL, NULL, NULL)) {
+ if (GetScrollOffsets(
+ native_event, &x_offset, &y_offset, NULL, NULL, NULL)) {
return gfx::Vector2d(static_cast<int>(x_offset),
static_cast<int>(y_offset));
}
- int button = native_event->type == GenericEvent
- ? EventButtonFromNative(native_event)
- : native_event->xbutton.button;
+ int button = native_event->type == GenericEvent ?
+ EventButtonFromNative(native_event) : native_event->xbutton.button;
switch (button) {
case 4:
@@ -693,27 +733,27 @@ gfx::Vector2d GetMouseWheelOffset(const base::NativeEvent& native_event) {
}
}
-void IncrementTouchIdRefCount(const base::NativeEvent& xev) {
- ui::DeviceDataManagerX11* manager = ui::DeviceDataManagerX11::GetInstance();
- double tracking_id;
- if (!manager->GetEventData(
- *xev, ui::DeviceDataManagerX11::DT_TOUCH_TRACKING_ID, &tracking_id)) {
- return;
- }
+base::NativeEvent CopyNativeEvent(const base::NativeEvent& event) {
+ if (!event || event->type == GenericEvent)
+ return NULL;
+ XEvent* copy = new XEvent;
+ *copy = *event;
+ return copy;
+}
- ui::TouchFactory* factory = ui::TouchFactory::GetInstance();
- factory->AcquireSlotForTrackingID(tracking_id);
+void ReleaseCopiedNativeEvent(const base::NativeEvent& event) {
+ delete event;
}
void ClearTouchIdIfReleased(const base::NativeEvent& xev) {
ui::EventType type = ui::EventTypeFromNative(xev);
- if (type == ui::ET_TOUCH_CANCELLED || type == ui::ET_TOUCH_RELEASED) {
+ if (type == ui::ET_TOUCH_CANCELLED ||
+ type == ui::ET_TOUCH_RELEASED) {
ui::TouchFactory* factory = ui::TouchFactory::GetInstance();
ui::DeviceDataManagerX11* manager = ui::DeviceDataManagerX11::GetInstance();
double tracking_id;
- if (manager->GetEventData(*xev,
- ui::DeviceDataManagerX11::DT_TOUCH_TRACKING_ID,
- &tracking_id)) {
+ if (manager->GetEventData(
+ *xev, ui::DeviceDataManagerX11::DT_TOUCH_TRACKING_ID, &tracking_id)) {
factory->ReleaseSlotForTrackingID(tracking_id);
}
}
@@ -724,7 +764,7 @@ int GetTouchId(const base::NativeEvent& xev) {
ui::DeviceDataManagerX11* manager = ui::DeviceDataManagerX11::GetInstance();
double tracking_id;
if (!manager->GetEventData(
- *xev, ui::DeviceDataManagerX11::DT_TOUCH_TRACKING_ID, &tracking_id)) {
+ *xev, ui::DeviceDataManagerX11::DT_TOUCH_TRACKING_ID, &tracking_id)) {
LOG(ERROR) << "Could not get the tracking ID for the event. Using 0.";
} else {
ui::TouchFactory* factory = ui::TouchFactory::GetInstance();
@@ -734,39 +774,33 @@ int GetTouchId(const base::NativeEvent& xev) {
}
float GetTouchRadiusX(const base::NativeEvent& native_event) {
- double radius =
- GetTouchParamFromXEvent(native_event,
- ui::DeviceDataManagerX11::DT_TOUCH_MAJOR, 0.0) /
- 2.0;
+ double radius = GetTouchParamFromXEvent(native_event,
+ ui::DeviceDataManagerX11::DT_TOUCH_MAJOR, 0.0) / 2.0;
ScaleTouchRadius(native_event, &radius);
return radius;
}
float GetTouchRadiusY(const base::NativeEvent& native_event) {
- double radius =
- GetTouchParamFromXEvent(native_event,
- ui::DeviceDataManagerX11::DT_TOUCH_MINOR, 0.0) /
- 2.0;
+ double radius = GetTouchParamFromXEvent(native_event,
+ ui::DeviceDataManagerX11::DT_TOUCH_MINOR, 0.0) / 2.0;
ScaleTouchRadius(native_event, &radius);
return radius;
}
float GetTouchAngle(const base::NativeEvent& native_event) {
return GetTouchParamFromXEvent(native_event,
- ui::DeviceDataManagerX11::DT_TOUCH_ORIENTATION,
- 0.0) /
- 2.0;
+ ui::DeviceDataManagerX11::DT_TOUCH_ORIENTATION, 0.0) / 2.0;
}
float GetTouchForce(const base::NativeEvent& native_event) {
double force = 0.0;
- force = GetTouchParamFromXEvent(
- native_event, ui::DeviceDataManagerX11::DT_TOUCH_PRESSURE, 0.0);
+ force = GetTouchParamFromXEvent(native_event,
+ ui::DeviceDataManagerX11::DT_TOUCH_PRESSURE, 0.0);
unsigned int deviceid =
static_cast<XIDeviceEvent*>(native_event->xcookie.data)->sourceid;
// Force is normalized to fall into [0, 1]
if (!ui::DeviceDataManagerX11::GetInstance()->NormalizeData(
- deviceid, ui::DeviceDataManagerX11::DT_TOUCH_PRESSURE, &force))
+ deviceid, ui::DeviceDataManagerX11::DT_TOUCH_PRESSURE, &force))
force = 0.0;
return force;
}
@@ -796,7 +830,9 @@ bool GetScrollOffsets(const base::NativeEvent& native_event,
finger_count = &finger_count_;
DeviceDataManagerX11::GetInstance()->GetScrollOffsets(
- native_event, x_offset, y_offset, x_offset_ordinal, y_offset_ordinal,
+ native_event,
+ x_offset, y_offset,
+ x_offset_ordinal, y_offset_ordinal,
finger_count);
return true;
}
@@ -829,4 +865,53 @@ bool GetFlingData(const base::NativeEvent& native_event,
return true;
}
+void UpdateX11EventForFlags(Event* event) {
+ XEvent* xev = event->native_event();
+ if (!xev)
+ return;
+ switch (xev->type) {
+ case KeyPress:
+ case KeyRelease:
+ xev->xkey.state = UpdateX11EventFlags(event->flags(), xev->xkey.state);
+ break;
+ case ButtonPress:
+ case ButtonRelease:
+ xev->xbutton.state =
+ UpdateX11EventFlags(event->flags(), xev->xbutton.state);
+ break;
+ case GenericEvent: {
+ XIDeviceEvent* xievent = static_cast<XIDeviceEvent*>(xev->xcookie.data);
+ DCHECK(xievent);
+ xievent->mods.effective =
+ UpdateX11EventFlags(event->flags(), xievent->mods.effective);
+ break;
+ }
+ default:
+ break;
+ }
+}
+
+void UpdateX11EventForChangedButtonFlags(MouseEvent* event) {
+ XEvent* xev = event->native_event();
+ if (!xev)
+ return;
+ switch (xev->type) {
+ case ButtonPress:
+ case ButtonRelease:
+ xev->xbutton.button = UpdateX11EventButton(event->changed_button_flags(),
+ xev->xbutton.button);
+ break;
+ case GenericEvent: {
+ XIDeviceEvent* xievent = static_cast<XIDeviceEvent*>(xev->xcookie.data);
+ CHECK(xievent && (xievent->evtype == XI_ButtonPress ||
+ xievent->evtype == XI_ButtonRelease));
+ xievent->detail =
+ UpdateX11EventButton(event->changed_button_flags(), xievent->detail);
+ break;
+ }
+ default:
+ break;
+ }
+}
+
} // namespace ui
« no previous file with comments | « ui/events/touchscreen_device.cc ('k') | ui/events/x/events_x_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698