| OLD | NEW |
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 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 "ash/wm/maximize_mode/scoped_disable_internal_mouse_and_keyboard_x11.h" | 5 #include "ash/wm/maximize_mode/scoped_disable_internal_mouse_and_keyboard_x11.h" |
| 6 | 6 |
| 7 #include <X11/extensions/XInput2.h> | 7 #include <X11/extensions/XInput2.h> |
| 8 #include <X11/Xlib.h> | 8 #include <X11/Xlib.h> |
| 9 | 9 |
| 10 #include <memory> | 10 #include <memory> |
| (...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 65 } | 65 } |
| 66 | 66 |
| 67 } // namespace | 67 } // namespace |
| 68 | 68 |
| 69 ScopedDisableInternalMouseAndKeyboardX11:: | 69 ScopedDisableInternalMouseAndKeyboardX11:: |
| 70 ScopedDisableInternalMouseAndKeyboardX11() | 70 ScopedDisableInternalMouseAndKeyboardX11() |
| 71 : touchpad_device_id_(kDeviceIdNone), | 71 : touchpad_device_id_(kDeviceIdNone), |
| 72 keyboard_device_id_(kDeviceIdNone), | 72 keyboard_device_id_(kDeviceIdNone), |
| 73 core_keyboard_device_id_(kDeviceIdNone), | 73 core_keyboard_device_id_(kDeviceIdNone), |
| 74 last_mouse_location_(GetMouseLocationInScreen()) { | 74 last_mouse_location_(GetMouseLocationInScreen()) { |
| 75 | |
| 76 ui::DeviceDataManagerX11* device_data_manager = | 75 ui::DeviceDataManagerX11* device_data_manager = |
| 77 ui::DeviceDataManagerX11::GetInstance(); | 76 ui::DeviceDataManagerX11::GetInstance(); |
| 78 if (device_data_manager->IsXInput2Available()) { | 77 if (device_data_manager->IsXInput2Available()) { |
| 79 const XIDeviceList& xi_dev_list = | 78 const XIDeviceList& xi_dev_list = |
| 80 ui::DeviceListCacheX11::GetInstance()->GetXI2DeviceList( | 79 ui::DeviceListCacheX11::GetInstance()->GetXI2DeviceList( |
| 81 gfx::GetXDisplay()); | 80 gfx::GetXDisplay()); |
| 82 for (int i = 0; i < xi_dev_list.count; ++i) { | 81 for (int i = 0; i < xi_dev_list.count; ++i) { |
| 83 std::string device_name(xi_dev_list[i].name); | 82 std::string device_name(xi_dev_list[i].name); |
| 84 base::TrimWhitespaceASCII(device_name, base::TRIM_TRAILING, &device_name); | 83 base::TrimWhitespaceASCII(device_name, base::TRIM_TRAILING, &device_name); |
| 85 if (device_name == kInternalTouchpadName) { | 84 if (device_name == kInternalTouchpadName) { |
| (...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 129 if (keyboard_device_id_ != kDeviceIdNone) | 128 if (keyboard_device_id_ != kDeviceIdNone) |
| 130 device_data_manager->EnableDevice(keyboard_device_id_); | 129 device_data_manager->EnableDevice(keyboard_device_id_); |
| 131 if (core_keyboard_device_id_ != kDeviceIdNone) | 130 if (core_keyboard_device_id_ != kDeviceIdNone) |
| 132 device_data_manager->EnableDevice(core_keyboard_device_id_); | 131 device_data_manager->EnableDevice(core_keyboard_device_id_); |
| 133 device_data_manager->SetDisabledKeyboardAllowedKeys( | 132 device_data_manager->SetDisabledKeyboardAllowedKeys( |
| 134 std::unique_ptr<std::set<ui::KeyboardCode>>()); | 133 std::unique_ptr<std::set<ui::KeyboardCode>>()); |
| 135 ui::PlatformEventSource::GetInstance()->RemovePlatformEventObserver(this); | 134 ui::PlatformEventSource::GetInstance()->RemovePlatformEventObserver(this); |
| 136 } | 135 } |
| 137 | 136 |
| 138 void ScopedDisableInternalMouseAndKeyboardX11::WillProcessEvent( | 137 void ScopedDisableInternalMouseAndKeyboardX11::WillProcessEvent( |
| 139 const ui::PlatformEvent& event) { | 138 const ui::PlatformEvent& event) {} |
| 140 } | |
| 141 | 139 |
| 142 void ScopedDisableInternalMouseAndKeyboardX11::DidProcessEvent( | 140 void ScopedDisableInternalMouseAndKeyboardX11::DidProcessEvent( |
| 143 const ui::PlatformEvent& event) { | 141 const ui::PlatformEvent& event) { |
| 144 if (event->type != GenericEvent) | 142 if (event->type != GenericEvent) |
| 145 return; | 143 return; |
| 146 XIDeviceEvent* xievent = | 144 XIDeviceEvent* xievent = static_cast<XIDeviceEvent*>(event->xcookie.data); |
| 147 static_cast<XIDeviceEvent*>(event->xcookie.data); | |
| 148 ui::DeviceDataManagerX11* device_data_manager = | 145 ui::DeviceDataManagerX11* device_data_manager = |
| 149 static_cast<ui::DeviceDataManagerX11*>( | 146 static_cast<ui::DeviceDataManagerX11*>( |
| 150 ui::DeviceDataManager::GetInstance()); | 147 ui::DeviceDataManager::GetInstance()); |
| 151 if (xievent->evtype != XI_Motion || | 148 if (xievent->evtype != XI_Motion || |
| 152 device_data_manager->IsFlingEvent(*event) || | 149 device_data_manager->IsFlingEvent(*event) || |
| 153 device_data_manager->IsScrollEvent(*event) || | 150 device_data_manager->IsScrollEvent(*event) || |
| 154 device_data_manager->IsCMTMetricsEvent(*event)) { | 151 device_data_manager->IsCMTMetricsEvent(*event)) { |
| 155 return; | 152 return; |
| 156 } | 153 } |
| 157 if (xievent->sourceid == touchpad_device_id_) { | 154 if (xievent->sourceid == touchpad_device_id_) { |
| 158 // The cursor will have already moved even though the move event will be | 155 // The cursor will have already moved even though the move event will be |
| 159 // blocked. Move the mouse cursor back to its last known location resulting | 156 // blocked. Move the mouse cursor back to its last known location resulting |
| 160 // from an external mouse to prevent the internal touchpad from moving it. | 157 // from an external mouse to prevent the internal touchpad from moving it. |
| 161 SetMouseLocationInScreen(last_mouse_location_); | 158 SetMouseLocationInScreen(last_mouse_location_); |
| 162 } else { | 159 } else { |
| 163 // Track the last location seen from an external mouse event. | 160 // Track the last location seen from an external mouse event. |
| 164 last_mouse_location_ = GetMouseLocationInScreen(); | 161 last_mouse_location_ = GetMouseLocationInScreen(); |
| 165 } | 162 } |
| 166 } | 163 } |
| 167 | 164 |
| 168 } // namespace ash | 165 } // namespace ash |
| OLD | NEW |