Index: ash/wm/maximize_mode/scoped_disable_internal_mouse_and_keyboard_x11.cc |
diff --git a/ash/wm/maximize_mode/scoped_disable_internal_mouse_and_keyboard_x11.cc b/ash/wm/maximize_mode/scoped_disable_internal_mouse_and_keyboard_x11.cc |
deleted file mode 100644 |
index cc7a99b490cce20ee0a5a3d0c2111b4c2b65b332..0000000000000000000000000000000000000000 |
--- a/ash/wm/maximize_mode/scoped_disable_internal_mouse_and_keyboard_x11.cc |
+++ /dev/null |
@@ -1,165 +0,0 @@ |
-// Copyright 2014 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 "ash/wm/maximize_mode/scoped_disable_internal_mouse_and_keyboard_x11.h" |
- |
-#include <X11/extensions/XInput2.h> |
-#include <X11/Xlib.h> |
- |
-#include <memory> |
-#include <set> |
-#include <utility> |
- |
-#include "ash/display/window_tree_host_manager.h" |
-#include "ash/shell.h" |
-#include "base/strings/string_util.h" |
-#include "ui/aura/client/cursor_client.h" |
-#include "ui/aura/client/screen_position_client.h" |
-#include "ui/aura/env.h" |
-#include "ui/aura/window.h" |
-#include "ui/aura/window_event_dispatcher.h" |
-#include "ui/aura/window_tree_host.h" |
-#include "ui/events/devices/input_device.h" |
-#include "ui/events/devices/x11/device_data_manager_x11.h" |
-#include "ui/events/devices/x11/device_list_cache_x11.h" |
-#include "ui/events/event.h" |
-#include "ui/events/event_utils.h" |
-#include "ui/events/keycodes/keyboard_codes_posix.h" |
-#include "ui/events/platform/platform_event_source.h" |
-#include "ui/gfx/x/x11_types.h" |
- |
-namespace ash { |
- |
-namespace { |
- |
-// The name of the xinput device corresponding to the internal touchpad. |
-const char kInternalTouchpadName[] = "Elan Touchpad"; |
- |
-// Repeated key events have their source set to the core keyboard device. |
-// These must be disabled also until http://crbug.com/402898 is resolved. |
-const char kCoreKeyboardName[] = "Virtual core keyboard"; |
- |
-// Device id used to indicate that a device has not been detected. |
-const int kDeviceIdNone = -1; |
- |
-gfx::Point GetMouseLocationInScreen() { |
- return aura::Env::GetInstance()->last_mouse_location(); |
-} |
- |
-void SetMouseLocationInScreen(const gfx::Point& screen_location) { |
- const display::Display& display = |
- Shell::Get()->display_manager()->FindDisplayContainingPoint( |
- screen_location); |
- if (!display.is_valid()) |
- return; |
- aura::Window* root_window = |
- Shell::Get()->window_tree_host_manager()->GetRootWindowForDisplayId( |
- display.id()); |
- gfx::Point host_location(screen_location); |
- aura::client::ScreenPositionClient* client = |
- aura::client::GetScreenPositionClient(root_window); |
- if (client) |
- client->ConvertPointFromScreen(root_window, &host_location); |
- root_window->GetHost()->MoveCursorToLocationInDIP(host_location); |
-} |
- |
-} // namespace |
- |
-ScopedDisableInternalMouseAndKeyboardX11:: |
- ScopedDisableInternalMouseAndKeyboardX11() |
- : touchpad_device_id_(kDeviceIdNone), |
- keyboard_device_id_(kDeviceIdNone), |
- core_keyboard_device_id_(kDeviceIdNone), |
- last_mouse_location_(GetMouseLocationInScreen()) { |
- ui::DeviceDataManagerX11* device_data_manager = |
- ui::DeviceDataManagerX11::GetInstance(); |
- if (device_data_manager->IsXInput2Available()) { |
- const XIDeviceList& xi_dev_list = |
- ui::DeviceListCacheX11::GetInstance()->GetXI2DeviceList( |
- gfx::GetXDisplay()); |
- for (int i = 0; i < xi_dev_list.count; ++i) { |
- std::string device_name(xi_dev_list[i].name); |
- base::TrimWhitespaceASCII(device_name, base::TRIM_TRAILING, &device_name); |
- if (device_name == kInternalTouchpadName) { |
- if (device_data_manager->IsDeviceEnabled(xi_dev_list[i].deviceid)) { |
- // If the touchpad is already disabled we will do nothing about it. |
- // This will result in doing nothing in the destructor as well since |
- // |touchpad_device_id_| will remain |kDeviceIdNone|. |
- touchpad_device_id_ = xi_dev_list[i].deviceid; |
- device_data_manager->DisableDevice(touchpad_device_id_); |
- Shell::Get()->cursor_manager()->HideCursor(); |
- } |
- } else if (device_name == kCoreKeyboardName) { |
- core_keyboard_device_id_ = xi_dev_list[i].deviceid; |
- device_data_manager->DisableDevice(core_keyboard_device_id_); |
- } |
- } |
- |
- for (const ui::InputDevice& device : |
- device_data_manager->GetKeyboardDevices()) { |
- if (device.type == ui::InputDeviceType::INPUT_DEVICE_INTERNAL) { |
- keyboard_device_id_ = device.id; |
- device_data_manager->DisableDevice(keyboard_device_id_); |
- break; |
- } |
- } |
- } |
- // Allow the accessible keys present on the side of some devices to continue |
- // working. |
- std::unique_ptr<std::set<ui::KeyboardCode>> excepted_keys( |
- new std::set<ui::KeyboardCode>); |
- excepted_keys->insert(ui::VKEY_VOLUME_DOWN); |
- excepted_keys->insert(ui::VKEY_VOLUME_UP); |
- excepted_keys->insert(ui::VKEY_POWER); |
- device_data_manager->SetDisabledKeyboardAllowedKeys(std::move(excepted_keys)); |
- ui::PlatformEventSource::GetInstance()->AddPlatformEventObserver(this); |
-} |
- |
-ScopedDisableInternalMouseAndKeyboardX11:: |
- ~ScopedDisableInternalMouseAndKeyboardX11() { |
- ui::DeviceDataManagerX11* device_data_manager = |
- static_cast<ui::DeviceDataManagerX11*>( |
- ui::DeviceDataManager::GetInstance()); |
- if (touchpad_device_id_ != kDeviceIdNone) { |
- device_data_manager->EnableDevice(touchpad_device_id_); |
- Shell::Get()->cursor_manager()->ShowCursor(); |
- } |
- if (keyboard_device_id_ != kDeviceIdNone) |
- device_data_manager->EnableDevice(keyboard_device_id_); |
- if (core_keyboard_device_id_ != kDeviceIdNone) |
- device_data_manager->EnableDevice(core_keyboard_device_id_); |
- device_data_manager->SetDisabledKeyboardAllowedKeys( |
- std::unique_ptr<std::set<ui::KeyboardCode>>()); |
- ui::PlatformEventSource::GetInstance()->RemovePlatformEventObserver(this); |
-} |
- |
-void ScopedDisableInternalMouseAndKeyboardX11::WillProcessEvent( |
- const ui::PlatformEvent& event) {} |
- |
-void ScopedDisableInternalMouseAndKeyboardX11::DidProcessEvent( |
- const ui::PlatformEvent& event) { |
- if (event->type != GenericEvent) |
- return; |
- XIDeviceEvent* xievent = static_cast<XIDeviceEvent*>(event->xcookie.data); |
- ui::DeviceDataManagerX11* device_data_manager = |
- static_cast<ui::DeviceDataManagerX11*>( |
- ui::DeviceDataManager::GetInstance()); |
- if (xievent->evtype != XI_Motion || |
- device_data_manager->IsFlingEvent(*event) || |
- device_data_manager->IsScrollEvent(*event) || |
- device_data_manager->IsCMTMetricsEvent(*event)) { |
- return; |
- } |
- if (xievent->sourceid == touchpad_device_id_) { |
- // The cursor will have already moved even though the move event will be |
- // blocked. Move the mouse cursor back to its last known location resulting |
- // from an external mouse to prevent the internal touchpad from moving it. |
- SetMouseLocationInScreen(last_mouse_location_); |
- } else { |
- // Track the last location seen from an external mouse event. |
- last_mouse_location_ = GetMouseLocationInScreen(); |
- } |
-} |
- |
-} // namespace ash |