| Index: aura/event_x.cc
|
| ===================================================================
|
| --- aura/event_x.cc (revision 100961)
|
| +++ aura/event_x.cc (working copy)
|
| @@ -1,193 +0,0 @@
|
| -// Copyright (c) 2011 The Chromium Authors. All rights reserved.
|
| -// Use of this source code is governed by a BSD-style license that can be
|
| -// found in the LICENSE file.
|
| -
|
| -#include "aura/event.h"
|
| -
|
| -#include <X11/Xlib.h>
|
| -#include <X11/extensions/XInput2.h>
|
| -
|
| -#include "base/logging.h"
|
| -#include "ui/base/keycodes/keyboard_code_conversion_x.h"
|
| -
|
| -namespace aura {
|
| -
|
| -namespace {
|
| -
|
| -int GetEventFlagsFromXState(unsigned int state) {
|
| - int flags = 0;
|
| - if (state & ControlMask)
|
| - flags |= ui::EF_CONTROL_DOWN;
|
| - if (state & ShiftMask)
|
| - flags |= ui::EF_SHIFT_DOWN;
|
| - if (state & Mod1Mask)
|
| - flags |= ui::EF_ALT_DOWN;
|
| - if (state & LockMask)
|
| - flags |= ui::EF_CAPS_LOCK_DOWN;
|
| - if (state & Button1Mask)
|
| - flags |= ui::EF_LEFT_BUTTON_DOWN;
|
| - if (state & Button2Mask)
|
| - flags |= ui::EF_MIDDLE_BUTTON_DOWN;
|
| - if (state & Button3Mask)
|
| - flags |= ui::EF_RIGHT_BUTTON_DOWN;
|
| -
|
| - return flags;
|
| -}
|
| -
|
| -// Get the event flag for the button in XButtonEvent. During a ButtonPress
|
| -// event, |state| in XButtonEvent does not include the button that has just been
|
| -// pressed. Instead |state| contains flags for the buttons (if any) that had
|
| -// already been pressed before the current button, and |button| stores the most
|
| -// current pressed button. So, if you press down left mouse button, and while
|
| -// pressing it down, press down the right mouse button, then for the latter
|
| -// event, |state| would have Button1Mask set but not Button3Mask, and |button|
|
| -// would be 3.
|
| -int GetEventFlagsForButton(int button) {
|
| - switch (button) {
|
| - case 1:
|
| - return ui::EF_LEFT_BUTTON_DOWN;
|
| - case 2:
|
| - return ui::EF_MIDDLE_BUTTON_DOWN;
|
| - case 3:
|
| - return ui::EF_RIGHT_BUTTON_DOWN;
|
| - }
|
| -
|
| - DLOG(WARNING) << "Unexpected button (" << button << ") received.";
|
| - return 0;
|
| -}
|
| -
|
| -int GetButtonMaskForX2Event(XIDeviceEvent* xievent) {
|
| - int buttonflags = 0;
|
| -
|
| - for (int i = 0; i < 8 * xievent->buttons.mask_len; i++) {
|
| - if (XIMaskIsSet(xievent->buttons.mask, i)) {
|
| - buttonflags |= GetEventFlagsForButton(i);
|
| - }
|
| - }
|
| -
|
| - return buttonflags;
|
| -}
|
| -
|
| -ui::EventType EventTypeFromNative(NativeEvent native_event) {
|
| - switch (native_event->type) {
|
| - case KeyPress:
|
| - return ui::ET_KEY_PRESSED;
|
| - case KeyRelease:
|
| - return ui::ET_KEY_RELEASED;
|
| - case ButtonPress:
|
| - if (native_event->xbutton.button == 4 ||
|
| - native_event->xbutton.button == 5)
|
| - return ui::ET_MOUSEWHEEL;
|
| - return ui::ET_MOUSE_PRESSED;
|
| - case ButtonRelease:
|
| - if (native_event->xbutton.button == 4 ||
|
| - native_event->xbutton.button == 5)
|
| - return ui::ET_MOUSEWHEEL;
|
| - return ui::ET_MOUSE_RELEASED;
|
| - case MotionNotify:
|
| - if (native_event->xmotion.state &
|
| - (Button1Mask | Button2Mask | Button3Mask))
|
| - return ui::ET_MOUSE_DRAGGED;
|
| - return ui::ET_MOUSE_MOVED;
|
| - case GenericEvent: {
|
| - XIDeviceEvent* xievent =
|
| - static_cast<XIDeviceEvent*>(native_event->xcookie.data);
|
| - // TODO(sad): Determine if sourceid is a touch device.
|
| - switch (xievent->evtype) {
|
| - case XI_ButtonPress:
|
| - return (xievent->detail == 4 || xievent->detail == 5) ?
|
| - ui::ET_MOUSEWHEEL : ui::ET_MOUSE_PRESSED;
|
| - case XI_ButtonRelease:
|
| - return (xievent->detail == 4 || xievent->detail == 5) ?
|
| - ui::ET_MOUSEWHEEL : ui::ET_MOUSE_RELEASED;
|
| - case XI_Motion:
|
| - return GetButtonMaskForX2Event(xievent) ? ui::ET_MOUSE_DRAGGED :
|
| - ui::ET_MOUSE_MOVED;
|
| - }
|
| - }
|
| - default:
|
| - NOTREACHED();
|
| - break;
|
| - }
|
| - return ui::ET_UNKNOWN;
|
| -}
|
| -
|
| -gfx::Point GetEventLocation(XEvent* xev) {
|
| - switch (xev->type) {
|
| - case ButtonPress:
|
| - case ButtonRelease:
|
| - return gfx::Point(xev->xbutton.x, xev->xbutton.y);
|
| -
|
| - case MotionNotify:
|
| - return gfx::Point(xev->xmotion.x, xev->xmotion.y);
|
| -
|
| - case GenericEvent: {
|
| - XIDeviceEvent* xievent =
|
| - static_cast<XIDeviceEvent*>(xev->xcookie.data);
|
| - return gfx::Point(static_cast<int>(xievent->event_x),
|
| - static_cast<int>(xievent->event_y));
|
| - }
|
| - }
|
| -
|
| - return gfx::Point();
|
| -}
|
| -
|
| -int GetLocatedEventFlags(XEvent* xev) {
|
| - switch (xev->type) {
|
| - case ButtonPress:
|
| - case ButtonRelease:
|
| - return GetEventFlagsFromXState(xev->xbutton.state) |
|
| - GetEventFlagsForButton(xev->xbutton.button);
|
| -
|
| - case MotionNotify:
|
| - return GetEventFlagsFromXState(xev->xmotion.state);
|
| -
|
| - case GenericEvent: {
|
| - XIDeviceEvent* xievent = static_cast<XIDeviceEvent*>(xev->xcookie.data);
|
| - bool touch = false; // TODO(sad): Determine if xievent->sourceid is a
|
| - // touch device.
|
| - switch (xievent->evtype) {
|
| - case XI_ButtonPress:
|
| - case XI_ButtonRelease:
|
| - return GetButtonMaskForX2Event(xievent) |
|
| - GetEventFlagsFromXState(xievent->mods.effective) |
|
| - (touch ? 0 : GetEventFlagsForButton(xievent->detail));
|
| -
|
| - case XI_Motion:
|
| - return GetButtonMaskForX2Event(xievent) |
|
| - GetEventFlagsFromXState(xievent->mods.effective);
|
| - }
|
| - }
|
| - }
|
| -
|
| - return 0;
|
| -}
|
| -
|
| -} // namespace
|
| -
|
| -void Event::Init() {
|
| - memset(&native_event_, 0, sizeof(native_event_));
|
| -}
|
| -
|
| -void Event::InitWithNativeEvent(NativeEvent native_event) {
|
| - native_event_ = native_event;
|
| -}
|
| -
|
| -LocatedEvent::LocatedEvent(NativeEvent native_event)
|
| - : Event(native_event, EventTypeFromNative(native_event),
|
| - GetLocatedEventFlags(native_event)),
|
| - location_(GetEventLocation(native_event)) {
|
| -}
|
| -
|
| -MouseEvent::MouseEvent(NativeEvent native_event)
|
| - : LocatedEvent(native_event) {
|
| -}
|
| -
|
| -KeyEvent::KeyEvent(NativeEvent native_event)
|
| - : Event(native_event,
|
| - EventTypeFromNative(native_event),
|
| - GetEventFlagsFromXState(native_event->xbutton.state)),
|
| - key_code_(ui::KeyboardCodeFromXKeyEvent(native_event)) {
|
| -}
|
| -
|
| -} // namespace aura
|
|
|