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

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

Issue 750593003: Ozone X11 platform Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: cleanup leftover stuff Created 6 years 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/x/events_x.h ('k') | ui/gl/gl_surface_egl.h » ('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/x/events_x.cc b/ui/events/x/events_x.cc
index 301431655a32b2b6abf4291b91cebe079d2da7d0..dc4400c9fd3ac63cd63c50c56b066b260f42fb7a 100644
--- a/ui/events/x/events_x.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/event_constants.h"
+#include "ui/events/x/events_x.h"
#include <cmath>
#include <string.h>
@@ -27,6 +27,12 @@
#include "ui/gfx/x/x11_atom_cache.h"
#include "ui/gfx/x/x11_types.h"
+#if defined(USE_OZONE)
+#include "ui/ozone/platform/x11/x11_surface_factory.h"
+#endif
+
+#include "ui/platform_window/x11/x11_window.h"
+
namespace {
// Scroll amount for each wheelscroll event. 53 is also the value used for GTK+.
@@ -59,7 +65,7 @@ class XModifierStateWatcher{
}
}
- void UpdateStateFromXEvent(const base::NativeEvent& native_event) {
+ void UpdateStateFromXEvent(const XEvent* native_event) {
ui::KeyboardCode keyboard_code = ui::KeyboardCodeFromNative(native_event);
unsigned int mask = StateFromKeyboardCode(keyboard_code);
// Floating device can't access the modifer state from master device.
@@ -113,7 +119,7 @@ class XModifierStateWatcher{
// A 'special event' is a touch event with maximum radius and pressure at
// location (0, 0).
// This needs to be done in a cleaner way: http://crbug.com/169256
-bool TouchEventIsGeneratedHack(const base::NativeEvent& native_event) {
+bool TouchEventIsGeneratedHack(const XEvent* native_event) {
XIDeviceEvent* event =
static_cast<XIDeviceEvent*>(native_event->xcookie.data);
CHECK(event->evtype == XI_TouchBegin ||
@@ -164,7 +170,7 @@ int GetEventFlagsFromXState(unsigned int state) {
return flags;
}
-int GetEventFlagsFromXKeyEvent(XEvent* xevent) {
+int GetEventFlagsFromXKeyEvent(const XEvent* xevent) {
DCHECK(xevent->type == KeyPress || xevent->type == KeyRelease);
#if defined(OS_CHROMEOS)
@@ -187,17 +193,18 @@ int GetEventFlagsFromXKeyEvent(XEvent* xevent) {
fabricated_by_xim ? ui::EF_IME_FABRICATED_KEY : 0;
#endif
+ KeySym key = XLookupKeysym(const_cast<XKeyEvent*>(&xevent->xkey), 0);
+
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) |
+ (IsKeypadKey(key) ? ui::EF_NUMPAD_KEY : 0) |
+ (IsFunctionKey(key) ? ui::EF_FUNCTION_KEY : 0) | ime_fabricated_flag;
}
-int GetEventFlagsFromXGenericEvent(XEvent* xevent) {
+int GetEventFlagsFromXGenericEvent(const XEvent* xevent) {
DCHECK(xevent->type == GenericEvent);
- XIDeviceEvent* xievent = static_cast<XIDeviceEvent*>(xevent->xcookie.data);
+ const XIDeviceEvent* xievent =
+ static_cast<const XIDeviceEvent*>(xevent->xcookie.data);
DCHECK((xievent->evtype == XI_KeyPress) ||
(xievent->evtype == XI_KeyRelease));
return GetEventFlagsFromXState(xievent->mods.effective) |
@@ -241,7 +248,7 @@ int GetButtonMaskForX2Event(XIDeviceEvent* xievent) {
return buttonflags;
}
-ui::EventType GetTouchEventType(const base::NativeEvent& native_event) {
+ui::EventType GetTouchEventType(const XEvent* native_event) {
XIDeviceEvent* event =
static_cast<XIDeviceEvent*>(native_event->xcookie.data);
switch(event->evtype) {
@@ -275,21 +282,22 @@ ui::EventType GetTouchEventType(const base::NativeEvent& native_event) {
return ui::ET_UNKNOWN;
}
-double GetTouchParamFromXEvent(XEvent* xev,
- ui::DeviceDataManagerX11::DataType val,
- double default_value) {
+double GetTouchParamFromXEvent(const XEvent* xev,
+ ui::DeviceDataManagerX11::DataType val,
+ double default_value) {
ui::DeviceDataManagerX11::GetInstance()->GetEventData(
*xev, val, &default_value);
return default_value;
}
-void ScaleTouchRadius(XEvent* xev, double* radius) {
+void ScaleTouchRadius(const XEvent* xev, double* radius) {
DCHECK_EQ(GenericEvent, xev->type);
XIDeviceEvent* xiev = static_cast<XIDeviceEvent*>(xev->xcookie.data);
ui::DeviceDataManagerX11::GetInstance()->ApplyTouchRadiusScale(
xiev->sourceid, radius);
}
+#if defined(USE_X11)
unsigned int UpdateX11EventFlags(int ui_flags, unsigned int old_x_flags) {
static struct {
int ui;
@@ -330,8 +338,9 @@ unsigned int UpdateX11EventButton(int ui_flag, unsigned int old_x_button) {
}
NOTREACHED();
}
+#endif
-bool GetGestureTimes(const base::NativeEvent& native_event,
+bool GetGestureTimes(const XEvent* native_event,
double* start_time,
double* end_time) {
if (!ui::DeviceDataManagerX11::GetInstance()->HasGestureTimes(native_event))
@@ -359,7 +368,7 @@ void UpdateDeviceList() {
DeviceDataManagerX11::GetInstance()->UpdateDeviceList(display);
}
-EventType EventTypeFromNative(const base::NativeEvent& native_event) {
+EventType EventTypeFromNative(const XEvent* native_event) {
// Allow the DeviceDataManager to block the event. If blocked return
// ET_UNKNOWN as the type so this event will not be further processed.
// NOTE: During some events unittests there is no device data manager.
@@ -458,7 +467,7 @@ EventType EventTypeFromNative(const base::NativeEvent& native_event) {
return ET_UNKNOWN;
}
-int EventFlagsFromNative(const base::NativeEvent& native_event) {
+int EventFlagsFromNative(const XEvent* native_event) {
switch (native_event->type) {
case KeyPress:
case KeyRelease: {
@@ -523,7 +532,7 @@ int EventFlagsFromNative(const base::NativeEvent& native_event) {
return 0;
}
-base::TimeDelta EventTimeFromNative(const base::NativeEvent& native_event) {
+base::TimeDelta EventTimeFromNative(const XEvent* native_event) {
switch(native_event->type) {
case KeyPress:
case KeyRelease:
@@ -562,7 +571,7 @@ base::TimeDelta EventTimeFromNative(const base::NativeEvent& native_event) {
return base::TimeDelta();
}
-gfx::Point EventLocationFromNative(const base::NativeEvent& native_event) {
+gfx::Point EventLocationFromNative(const XEvent* native_event) {
switch (native_event->type) {
case EnterNotify:
case LeaveNotify:
@@ -595,8 +604,7 @@ gfx::Point EventLocationFromNative(const base::NativeEvent& native_event) {
return gfx::Point();
}
-gfx::Point EventSystemLocationFromNative(
- const base::NativeEvent& native_event) {
+gfx::Point EventSystemLocationFromNative(const XEvent* native_event) {
switch (native_event->type) {
case EnterNotify:
case LeaveNotify: {
@@ -622,7 +630,7 @@ gfx::Point EventSystemLocationFromNative(
return gfx::Point();
}
-int EventButtonFromNative(const base::NativeEvent& native_event) {
+int EventButtonFromNative(const XEvent* native_event) {
CHECK_EQ(GenericEvent, native_event->type);
XIDeviceEvent* xievent =
static_cast<XIDeviceEvent*>(native_event->xcookie.data);
@@ -632,16 +640,16 @@ int EventButtonFromNative(const base::NativeEvent& native_event) {
DeviceDataManagerX11::GetInstance()->GetMappedButton(button) : button;
}
-KeyboardCode KeyboardCodeFromNative(const base::NativeEvent& native_event) {
+KeyboardCode KeyboardCodeFromNative(const XEvent* native_event) {
return KeyboardCodeFromXKeyEvent(native_event);
}
-DomCode CodeFromNative(const base::NativeEvent& native_event) {
+DomCode CodeFromNative(const XEvent* native_event) {
return CodeFromXEvent(native_event);
}
-uint32 PlatformKeycodeFromNative(const base::NativeEvent& native_event) {
- XKeyEvent* xkey = NULL;
+uint32 PlatformKeycodeFromNative(const XEvent* native_event) {
+ const XKeyEvent* xkey = NULL;
XEvent xkey_from_xi2;
switch (native_event->type) {
case KeyPress:
@@ -671,16 +679,15 @@ uint32 PlatformKeycodeFromNative(const base::NativeEvent& native_event) {
}
KeySym keysym = XK_VoidSymbol;
if (xkey)
- XLookupString(xkey, NULL, 0, &keysym, NULL);
+ XLookupString(const_cast<XKeyEvent*>(xkey), NULL, 0, &keysym, NULL);
return keysym;
}
-bool IsCharFromNative(const base::NativeEvent& native_event) {
+bool IsCharFromNative(const XEvent* native_event) {
return false;
}
-int GetChangedMouseButtonFlagsFromNative(
- const base::NativeEvent& native_event) {
+int GetChangedMouseButtonFlagsFromNative(const XEvent* native_event) {
switch (native_event->type) {
case ButtonPress:
case ButtonRelease:
@@ -702,7 +709,7 @@ int GetChangedMouseButtonFlagsFromNative(
return 0;
}
-gfx::Vector2d GetMouseWheelOffset(const base::NativeEvent& native_event) {
+gfx::Vector2d GetMouseWheelOffset(const XEvent* native_event) {
float x_offset, y_offset;
if (GetScrollOffsets(
native_event, &x_offset, &y_offset, NULL, NULL, NULL)) {
@@ -727,7 +734,7 @@ gfx::Vector2d GetMouseWheelOffset(const base::NativeEvent& native_event) {
}
}
-base::NativeEvent CopyNativeEvent(const base::NativeEvent& event) {
+XEvent* CopyNativeEvent(const XEvent* event) {
if (!event || event->type == GenericEvent)
return NULL;
XEvent* copy = new XEvent;
@@ -735,11 +742,11 @@ base::NativeEvent CopyNativeEvent(const base::NativeEvent& event) {
return copy;
}
-void ReleaseCopiedNativeEvent(const base::NativeEvent& event) {
+void ReleaseCopiedNativeEvent(const XEvent* event) {
delete event;
}
-void IncrementTouchIdRefCount(const base::NativeEvent& xev) {
+void IncrementTouchIdRefCount(const XEvent* xev) {
ui::DeviceDataManagerX11* manager = ui::DeviceDataManagerX11::GetInstance();
double tracking_id;
if (!manager->GetEventData(
@@ -751,7 +758,7 @@ void IncrementTouchIdRefCount(const base::NativeEvent& xev) {
factory->AcquireSlotForTrackingID(tracking_id);
}
-void ClearTouchIdIfReleased(const base::NativeEvent& xev) {
+void ClearTouchIdIfReleased(const XEvent* xev) {
ui::EventType type = ui::EventTypeFromNative(xev);
if (type == ui::ET_TOUCH_CANCELLED ||
type == ui::ET_TOUCH_RELEASED) {
@@ -765,7 +772,7 @@ void ClearTouchIdIfReleased(const base::NativeEvent& xev) {
}
}
-int GetTouchId(const base::NativeEvent& xev) {
+int GetTouchId(const XEvent* xev) {
double slot = 0;
ui::DeviceDataManagerX11* manager = ui::DeviceDataManagerX11::GetInstance();
double tracking_id;
@@ -779,26 +786,26 @@ int GetTouchId(const base::NativeEvent& xev) {
return slot;
}
-float GetTouchRadiusX(const base::NativeEvent& native_event) {
+float GetTouchRadiusX(const XEvent* native_event) {
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) {
+float GetTouchRadiusY(const XEvent* native_event) {
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) {
+float GetTouchAngle(const XEvent* native_event) {
return GetTouchParamFromXEvent(native_event,
ui::DeviceDataManagerX11::DT_TOUCH_ORIENTATION, 0.0) / 2.0;
}
-float GetTouchForce(const base::NativeEvent& native_event) {
+float GetTouchForce(const XEvent* native_event) {
double force = 0.0;
force = GetTouchParamFromXEvent(native_event,
ui::DeviceDataManagerX11::DT_TOUCH_PRESSURE, 0.0);
@@ -811,7 +818,7 @@ float GetTouchForce(const base::NativeEvent& native_event) {
return force;
}
-bool GetScrollOffsets(const base::NativeEvent& native_event,
+bool GetScrollOffsets(const XEvent* native_event,
float* x_offset,
float* y_offset,
float* x_offset_ordinal,
@@ -843,7 +850,7 @@ bool GetScrollOffsets(const base::NativeEvent& native_event,
return true;
}
-bool GetFlingData(const base::NativeEvent& native_event,
+bool GetFlingData(const XEvent* native_event,
float* vx,
float* vy,
float* vx_ordinal,
@@ -871,6 +878,7 @@ bool GetFlingData(const base::NativeEvent& native_event,
return true;
}
+#if defined(USE_X11)
void UpdateX11EventForFlags(Event* event) {
XEvent* xev = event->native_event();
if (!xev)
@@ -919,5 +927,124 @@ void UpdateX11EventForChangedButtonFlags(MouseEvent* event) {
break;
}
}
+#endif
+
+#if defined(USE_OZONE) && !defined(USE_X11)
+
+base::NativeEvent TranslateXI2Event(XEvent* xev) {
+ XIDeviceEvent* xievent = static_cast<XIDeviceEvent*>(xev->xcookie.data);
+ EventType event_type = EventTypeFromNative(xev);
+ gfx::PointF location = gfx::PointF(xievent->event_x, xievent->event_y);
+ gfx::PointF root_location = gfx::PointF(xievent->root_x, xievent->root_y);
+ int flags = EventFlagsFromNative(xev);
+ switch (event_type) {
+ case ET_KEY_PRESSED:
+ case ET_KEY_RELEASED:
+ return new KeyEvent(event_type, KeyboardCodeFromNative(xev), flags);
+ case ET_MOUSE_PRESSED:
+ case ET_MOUSE_MOVED:
+ case ET_MOUSE_DRAGGED:
+ case ET_MOUSE_RELEASED:
+ return new MouseEvent(event_type, location, root_location, flags,
+ GetChangedMouseButtonFlagsFromNative(xev));
+ case ET_MOUSEWHEEL:
+ return new MouseWheelEvent(GetMouseWheelOffset(xev), location,
+ root_location, flags,
+ GetChangedMouseButtonFlagsFromNative(xev));
+ case ET_SCROLL_FLING_START:
+ case ET_SCROLL_FLING_CANCEL: {
+ float x_offset, y_offset, x_offset_ordinal, y_offset_ordinal;
+ GetFlingData(xev, &x_offset, &y_offset, &x_offset_ordinal,
+ &y_offset_ordinal, nullptr);
+ return new ScrollEvent(event_type, location, EventTimeFromNative(xev),
+ flags, x_offset, y_offset, x_offset_ordinal,
+ y_offset_ordinal, 0);
+ }
+ case ET_SCROLL: {
+ float x_offset, y_offset, x_offset_ordinal, y_offset_ordinal;
+ int finger_count;
+ GetScrollOffsets(xev, &x_offset, &y_offset, &x_offset_ordinal,
+ &y_offset_ordinal, &finger_count);
+ return new ScrollEvent(event_type, location, EventTimeFromNative(xev),
+ flags, x_offset, y_offset, x_offset_ordinal,
+ y_offset_ordinal, finger_count);
+ }
+ case ET_TOUCH_MOVED:
+ case ET_TOUCH_PRESSED:
+ case ET_TOUCH_CANCELLED:
+ case ET_TOUCH_RELEASED:
+ return new TouchEvent(event_type, location, GetTouchId(xev),
+ EventTimeFromNative(xev));
+ case ET_UNKNOWN:
+ return nullptr;
+ default:
+ break;
+ }
+ return nullptr;
+}
+
+base::NativeEvent TranslateXEventToNativeEvent(XEvent* xev) {
+ int flags = EventFlagsFromNative(xev);
+ switch (xev->type) {
+ case LeaveNotify:
+ case EnterNotify:
+ // EnterNotify creates ET_MOUSE_MOVED. Mark as synthesized as this is
+ // not real mouse move event.
+ // int flags = GetEventFlagsFromXState(xev->xcrossing.state);
+ if (xev->type == EnterNotify)
+ flags |= EF_IS_SYNTHESIZED;
+ return new MouseEvent(
+ ET_MOUSE_MOVED, gfx::PointF(xev->xcrossing.x, xev->xcrossing.y),
+ gfx::PointF(xev->xcrossing.x_root, xev->xcrossing.y_root), flags, 0);
+
+ case KeyPress:
+ case KeyRelease:
+ return new KeyEvent(EventTypeFromNative(xev), KeyboardCodeFromNative(xev),
+ flags);
+
+ case ButtonPress:
+ case ButtonRelease: {
+ gfx::PointF location = gfx::PointF(xev->xbutton.x, xev->xbutton.y);
+ gfx::PointF root_location =
+ gfx::PointF(xev->xbutton.x_root, xev->xbutton.y_root);
+ switch (EventTypeFromNative(xev)) {
+ case ET_MOUSEWHEEL:
+ return new MouseWheelEvent(GetMouseWheelOffset(xev), location,
+ root_location, flags, 0);
+ case ET_MOUSE_PRESSED:
+ case ET_MOUSE_RELEASED:
+ return new MouseEvent(EventTypeFromNative(xev), location,
+ root_location, flags,
+ GetChangedMouseButtonFlagsFromNative(xev));
+ case ET_UNKNOWN:
+ // No event is created for X11-release events for mouse-wheel
+ // buttons.
+ break;
+ default:
+ NOTREACHED();
+ }
+ break;
+ }
+
+ case FocusOut:
+ case Expose:
+ case ConfigureNotify:
+ case ClientMessage: {
+ // This is a windowing message that needs to be passed to the platform
+ // window directly.
+ X11Window* window =
+ static_cast<X11SurfaceFactory*>(SurfaceFactoryOzone::GetInstance())
+ ->FindWindow(xev->xany.window);
+ if (window)
+ window->ProcessWindowEvent(xev);
+ return nullptr;
+ }
+
+ case GenericEvent:
+ return TranslateXI2Event(xev);
+ }
+ return nullptr;
+}
+#endif
} // namespace ui
« no previous file with comments | « ui/events/x/events_x.h ('k') | ui/gl/gl_surface_egl.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698