| OLD | NEW |
| 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "views/focus/accelerator_handler.h" | 5 #include "views/focus/accelerator_handler.h" |
| 6 | 6 |
| 7 #include <bitset> | 7 #include <bitset> |
| 8 #include <gtk/gtk.h> | 8 #include <gtk/gtk.h> |
| 9 #if defined(HAVE_XINPUT2) | |
| 10 #include <X11/extensions/XInput2.h> | 9 #include <X11/extensions/XInput2.h> |
| 11 #else | |
| 12 #include <X11/Xlib.h> | |
| 13 #endif | |
| 14 | 10 |
| 15 #include "views/accelerator.h" | 11 #include "views/accelerator.h" |
| 16 #include "views/events/event.h" | 12 #include "views/events/event.h" |
| 17 #include "views/focus/focus_manager.h" | 13 #include "views/focus/focus_manager.h" |
| 18 #include "views/ime/input_method.h" | 14 #include "views/ime/input_method.h" |
| 19 #include "views/touchui/touch_factory.h" | 15 #include "views/touchui/touch_factory.h" |
| 20 #include "views/view.h" | 16 #include "views/view.h" |
| 21 #include "views/widget/native_widget.h" | 17 #include "views/widget/native_widget.h" |
| 22 | 18 |
| 23 namespace views { | 19 namespace views { |
| (...skipping 12 matching lines...) Expand all Loading... |
| 36 | 32 |
| 37 if (!widget) { | 33 if (!widget) { |
| 38 DLOG(WARNING) << "no NativeWidgetGtk found for that GtkWidget"; | 34 DLOG(WARNING) << "no NativeWidgetGtk found for that GtkWidget"; |
| 39 return NULL; | 35 return NULL; |
| 40 } | 36 } |
| 41 return widget; | 37 return widget; |
| 42 } | 38 } |
| 43 | 39 |
| 44 } // namespace | 40 } // namespace |
| 45 | 41 |
| 46 #if defined(HAVE_XINPUT2) | |
| 47 bool DispatchX2Event(Widget* widget, XEvent* xev) { | 42 bool DispatchX2Event(Widget* widget, XEvent* xev) { |
| 48 XGenericEventCookie* cookie = &xev->xcookie; | 43 XGenericEventCookie* cookie = &xev->xcookie; |
| 49 switch (cookie->evtype) { | 44 switch (cookie->evtype) { |
| 50 case XI_KeyPress: | 45 case XI_KeyPress: |
| 51 case XI_KeyRelease: { | 46 case XI_KeyRelease: { |
| 52 // TODO(sad): We don't capture XInput2 events from keyboard yet. | 47 // TODO(sad): We don't capture XInput2 events from keyboard yet. |
| 53 break; | 48 break; |
| 54 } | 49 } |
| 55 case XI_ButtonPress: | 50 case XI_ButtonPress: |
| 56 case XI_ButtonRelease: | 51 case XI_ButtonRelease: |
| (...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 99 mouseev.IsOnlyRightMouseButton()); | 94 mouseev.IsOnlyRightMouseButton()); |
| 100 TouchFactory::GetInstance()->SetCursorVisible(true, start_timer); | 95 TouchFactory::GetInstance()->SetCursorVisible(true, start_timer); |
| 101 | 96 |
| 102 return widget->OnMouseEvent(mouseev); | 97 return widget->OnMouseEvent(mouseev); |
| 103 } | 98 } |
| 104 } | 99 } |
| 105 } | 100 } |
| 106 return false; | 101 return false; |
| 107 } | 102 } |
| 108 | 103 |
| 109 #endif // HAVE_XINPUT2 | |
| 110 | |
| 111 bool DispatchXEvent(XEvent* xev) { | 104 bool DispatchXEvent(XEvent* xev) { |
| 112 GdkDisplay* gdisp = gdk_display_get_default(); | 105 GdkDisplay* gdisp = gdk_display_get_default(); |
| 113 XID xwindow = xev->xany.window; | 106 XID xwindow = xev->xany.window; |
| 114 | 107 |
| 115 #if defined(HAVE_XINPUT2) | |
| 116 if (xev->type == GenericEvent) { | 108 if (xev->type == GenericEvent) { |
| 117 if (!TouchFactory::GetInstance()->ShouldProcessXI2Event(xev)) | 109 if (!TouchFactory::GetInstance()->ShouldProcessXI2Event(xev)) |
| 118 return true; // Consume the event. | 110 return true; // Consume the event. |
| 119 | 111 |
| 120 XGenericEventCookie* cookie = &xev->xcookie; | 112 XGenericEventCookie* cookie = &xev->xcookie; |
| 121 if (cookie->evtype == XI_HierarchyChanged) { | 113 if (cookie->evtype == XI_HierarchyChanged) { |
| 122 TouchFactory::GetInstance()->UpdateDeviceList(cookie->display); | 114 TouchFactory::GetInstance()->UpdateDeviceList(cookie->display); |
| 123 return true; | 115 return true; |
| 124 } | 116 } |
| 125 | 117 |
| 126 XIDeviceEvent* xiev = static_cast<XIDeviceEvent*>(cookie->data); | 118 XIDeviceEvent* xiev = static_cast<XIDeviceEvent*>(cookie->data); |
| 127 xwindow = xiev->event; | 119 xwindow = xiev->event; |
| 128 } | 120 } |
| 129 #endif | |
| 130 | 121 |
| 131 GdkWindow* gwind = gdk_window_lookup_for_display(gdisp, xwindow); | 122 GdkWindow* gwind = gdk_window_lookup_for_display(gdisp, xwindow); |
| 132 Widget* widget = FindWidgetForGdkWindow(gwind); | 123 Widget* widget = FindWidgetForGdkWindow(gwind); |
| 133 if (widget) { | 124 if (widget) { |
| 134 Event::FromNativeEvent2 from_native; | 125 Event::FromNativeEvent2 from_native; |
| 135 switch (xev->type) { | 126 switch (xev->type) { |
| 136 case KeyPress: | 127 case KeyPress: |
| 137 case KeyRelease: { | 128 case KeyRelease: { |
| 138 KeyEvent keyev(xev, from_native); | 129 KeyEvent keyev(xev, from_native); |
| 139 InputMethod* ime = widget->GetInputMethod(); | 130 InputMethod* ime = widget->GetInputMethod(); |
| (...skipping 11 matching lines...) Expand all Loading... |
| 151 // Scrolling the wheel triggers button press/release events. | 142 // Scrolling the wheel triggers button press/release events. |
| 152 MouseWheelEvent wheelev(xev, from_native); | 143 MouseWheelEvent wheelev(xev, from_native); |
| 153 return widget->OnMouseEvent(wheelev); | 144 return widget->OnMouseEvent(wheelev); |
| 154 } | 145 } |
| 155 // fallthrough | 146 // fallthrough |
| 156 case MotionNotify: { | 147 case MotionNotify: { |
| 157 MouseEvent mouseev(xev, from_native); | 148 MouseEvent mouseev(xev, from_native); |
| 158 return widget->OnMouseEvent(mouseev); | 149 return widget->OnMouseEvent(mouseev); |
| 159 } | 150 } |
| 160 | 151 |
| 161 #if defined(HAVE_XINPUT2) | |
| 162 case GenericEvent: { | 152 case GenericEvent: { |
| 163 return DispatchX2Event(widget, xev); | 153 return DispatchX2Event(widget, xev); |
| 164 } | 154 } |
| 165 #endif | |
| 166 } | 155 } |
| 167 } | 156 } |
| 168 | 157 |
| 169 return false; | 158 return false; |
| 170 } | 159 } |
| 171 | 160 |
| 172 #if defined(HAVE_XINPUT2) | |
| 173 void SetTouchDeviceList(std::vector<unsigned int>& devices) { | 161 void SetTouchDeviceList(std::vector<unsigned int>& devices) { |
| 174 TouchFactory::GetInstance()->SetTouchDeviceList(devices); | 162 TouchFactory::GetInstance()->SetTouchDeviceList(devices); |
| 175 } | 163 } |
| 176 #endif | |
| 177 | 164 |
| 178 AcceleratorHandler::AcceleratorHandler() {} | 165 AcceleratorHandler::AcceleratorHandler() {} |
| 179 | 166 |
| 180 #if defined(TOUCH_UI) | |
| 181 base::MessagePumpDispatcher::DispatchStatus | 167 base::MessagePumpDispatcher::DispatchStatus |
| 182 AcceleratorHandler::Dispatch(XEvent* xev) { | 168 AcceleratorHandler::Dispatch(XEvent* xev) { |
| 183 return DispatchXEvent(xev) ? | 169 return DispatchXEvent(xev) ? |
| 184 base::MessagePumpDispatcher::EVENT_PROCESSED : | 170 base::MessagePumpDispatcher::EVENT_PROCESSED : |
| 185 base::MessagePumpDispatcher::EVENT_IGNORED; | 171 base::MessagePumpDispatcher::EVENT_IGNORED; |
| 186 } | 172 } |
| 187 #else | |
| 188 bool AcceleratorHandler::Dispatch(GdkEvent* event) { | |
| 189 gtk_main_do_event(event); | |
| 190 return true; | |
| 191 } | |
| 192 #endif | |
| 193 | 173 |
| 194 } // namespace views | 174 } // namespace views |
| OLD | NEW |