Index: remoting/client/plugin/normalizing_input_filter_cros.cc |
diff --git a/remoting/client/plugin/normalizing_input_filter_cros.cc b/remoting/client/plugin/normalizing_input_filter_cros.cc |
deleted file mode 100644 |
index ed5d438d7b54c6f8577c2a33e4fced8178bf17ac..0000000000000000000000000000000000000000 |
--- a/remoting/client/plugin/normalizing_input_filter_cros.cc |
+++ /dev/null |
@@ -1,216 +0,0 @@ |
-// Copyright 2013 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 "remoting/client/plugin/normalizing_input_filter_cros.h" |
- |
-#include "base/logging.h" |
-#include "remoting/protocol/usb_key_codes.h" |
- |
-namespace remoting { |
- |
-namespace { |
- |
-// Returns true for OSKey codes. |
-static bool IsOsKey(unsigned int code) { |
- return code == kUsbLeftOs || code == kUsbRightOs; |
-} |
- |
-// Returns true for the left-hand Alt key. |
-static bool IsLeftAltKey(unsigned int code) { |
- return code == kUsbLeftAlt; |
-} |
- |
-// Returns true for codes generated by EventRewriter::RewriteFunctionKeys(). |
-static bool IsRewrittenFunctionKey(unsigned int code) { |
- const unsigned int kUsbFunctionKeyMin = 0x07003a; |
- const unsigned int kUsbFunctionKeyMax = 0x070045; |
- return code >= kUsbFunctionKeyMin && code <= kUsbFunctionKeyMax; |
-} |
- |
-// Returns true for codes generated by EventRewriter::RewriteExtendedKeys(). |
-static bool IsRewrittenExtendedKey(unsigned int code) { |
- const unsigned int kUsbExtendedKeyMin = 0x070049; |
- const unsigned int kUsbExtendedKeyMax = 0x07004e; |
- return code >= kUsbExtendedKeyMin && code <= kUsbExtendedKeyMax; |
-} |
- |
-// Returns true for codes generated by EventRewriter::Rewrite(). |
-static bool IsRewrittenKey(unsigned int code) { |
- return IsRewrittenExtendedKey(code) || IsRewrittenFunctionKey(code); |
-} |
- |
-} // namespace |
- |
-// The input filter tries to avoid sending keydown/keyup events for OSKey |
-// (aka Search, WinKey, Cmd, Super) when it is used to rewrite other key events. |
-// Rewriting via other combinations is not currently handled. |
-// |
-// OSKey events can be categorised as one of three kinds: |
-// - Modifying - Holding the key down while executing other input modifies the |
-// effect of that input, e.g. OSKey+L causes the workstation to lock, e.g. |
-// OSKey + mouse-move performs an extended selection. |
-// - Rewriting (ChromeOS only) - Holding the key down while pressing certain |
-// keys causes them to be treated as different keys, e.g. OSKey causes the |
-// Down key to behave as PageDown. |
-// - Normal - Press & release of the key trigger an action, e.g. showing the |
-// Start menu. |
-// |
-// The input filter has four states: |
-// 1. No OSKey has been pressed. |
-// - When an OSKey keydown is received, the event is deferred, and we move to |
-// State #2. |
-// 2. An OSKey is pressed, but may be Normal, Rewriting or Modifying. |
-// - If the OSKey keyup is received, the key is Normal, both events are sent |
-// and we return to State #1. |
-// - If a Rewritten event is received we move to State #3. |
-// - If a Modified event is received the OSKey keydown is sent and we enter |
-// State #4. |
-// 3. An OSKey is pressed, and is being used to Rewrite other key events. |
-// - If the OSKey keyup is received then it is suppressed, and we move to |
-// State #1. |
-// - If a Modified event is received the OSKey keydown is sent and we enter |
-// State #4. |
-// - If a Rewritten event is received then we stay in State #3. |
-// 4. An OSKey is pressed, and is Modifying. |
-// - If the OSKey keyup is received then we send it and we move to State #1. |
-// - All other key event pass through the filter unchanged. |
-// |
-// ChromeOS also maps Alt+LeftClick to RightClick (even for an external mouse). |
-// As with the OSKey remapping described above, this is fed into this filter |
-// as Alt followed by RightClick. However, because there are other ways to |
-// generate RightClick (two-finger tap, for example), rather than suppressing |
-// the Alt key as we do for the OSKey (which would allow Alt+LeftClick to be |
-// interpreted as interpreted as RightClick as per the ChromeOS idiom), the |
-// filter maps RightClick to LeftClick while LeftAlt is held, which allows |
-// Alt+LeftClick to be injected. The equivalent mapping using RightAlt is |
-// unchanged, allowing Alt+RightClick also to be injected, as long as the |
-// target application doesn't distinguish between left and right Alt keys. |
-// |
-// This file must be kept up-to-date with changes to |
-// chrome/browser/chromeos/events/event_rewriter.cc |
- |
- |
-NormalizingInputFilterCros::NormalizingInputFilterCros( |
- protocol::InputStub* input_stub) |
- : protocol::InputFilter(input_stub), |
- deferred_key_is_rewriting_(false), |
- modifying_key_(0), |
- left_alt_is_pressed_(false), |
- previous_mouse_x_(-1), |
- previous_mouse_y_(-1) { |
-} |
- |
-NormalizingInputFilterCros::~NormalizingInputFilterCros() {} |
- |
-void NormalizingInputFilterCros::InjectKeyEvent( |
- const protocol::KeyEvent& event) { |
- DCHECK(event.has_usb_keycode()); |
- DCHECK(event.has_pressed()); |
- |
- if (event.pressed()) { |
- ProcessKeyDown(event); |
- } else { |
- ProcessKeyUp(event); |
- } |
-} |
- |
-void NormalizingInputFilterCros::InjectMouseEvent( |
- const protocol::MouseEvent& event) { |
- // If there's a rewriting/modifier decision pending, assume that it's |
- // intended to be used as a modifying key for this mouse event and send it. |
- if (deferred_keydown_event_.has_usb_keycode()) { |
- // TODO(jamiewalch): Until crbug.com/489468 is fixed, a spurious mouse move |
- // event is generated in response to certain key combinations, so check that |
- // this is actually an "interesting" event. |
- if (event.has_button() || |
- event.x() != previous_mouse_x_ || |
- event.y() != previous_mouse_y_) { |
- SwitchRewritingKeyToModifying(); |
- } |
- } |
- previous_mouse_x_ = event.x(); |
- previous_mouse_y_ = event.y(); |
- |
- protocol::MouseEvent newEvent = event; |
- if (left_alt_is_pressed_ && |
- event.has_button() && |
- event.button() == protocol::MouseEvent::BUTTON_RIGHT) { |
- newEvent.set_button(protocol::MouseEvent::BUTTON_LEFT); |
- } |
- InputFilter::InjectMouseEvent(newEvent); |
-} |
- |
-void NormalizingInputFilterCros::ProcessKeyDown( |
- const protocol::KeyEvent& event) { |
- // If |event| is |deferred_keydown_event_| repeat then assume that the user is |
- // holding the key down rather than using it to Rewrite. |
- if (deferred_keydown_event_.has_usb_keycode() && |
- deferred_keydown_event_.usb_keycode() == event.usb_keycode()) { |
- SwitchRewritingKeyToModifying(); |
- } |
- |
- // If |event| is a |modifying_key_| repeat then let it pass through. |
- if (modifying_key_ == event.usb_keycode()) { |
- InputFilter::InjectKeyEvent(event); |
- return; |
- } |
- |
- // If |event| is for an OSKey and we don't know whether it's a Normal, |
- // Rewriting or Modifying use, then hold the keydown event. |
- if (IsOsKey(event.usb_keycode())) { |
- deferred_keydown_event_ = event; |
- deferred_key_is_rewriting_ = false; |
- return; |
- } |
- |
- // If |event| is for a Rewritten key then set a flag to prevent any deferred |
- // OSKey keydown from being sent when keyup is received for it. Otherwise, |
- // inject the deferred OSKey keydown, if any, and switch that key into |
- // Modifying mode. |
- if (IsRewrittenKey(event.usb_keycode())) { |
- // Note that there may not be a deferred OSKey event if there is a full |
- // PC keyboard connected, which can generate e.g. PageDown without |
- // rewriting. |
- deferred_key_is_rewriting_ = true; |
- } else { |
- if (deferred_keydown_event_.has_usb_keycode()) |
- SwitchRewritingKeyToModifying(); |
- } |
- |
- if (IsLeftAltKey(event.usb_keycode())) |
- left_alt_is_pressed_ = true; |
- |
- InputFilter::InjectKeyEvent(event); |
-} |
- |
-void NormalizingInputFilterCros::ProcessKeyUp(const protocol::KeyEvent& event) { |
- if (deferred_keydown_event_.has_usb_keycode() && |
- deferred_keydown_event_.usb_keycode() == event.usb_keycode()) { |
- if (deferred_key_is_rewriting_) { |
- // If we never sent the keydown then don't send a keyup. |
- deferred_keydown_event_ = protocol::KeyEvent(); |
- return; |
- } |
- |
- // If the OSKey hasn't Rewritten anything then treat as Modifying. |
- SwitchRewritingKeyToModifying(); |
- } |
- |
- if (modifying_key_ == event.usb_keycode()) |
- modifying_key_ = 0; |
- |
- if (IsLeftAltKey(event.usb_keycode())) |
- left_alt_is_pressed_ = false; |
- |
- InputFilter::InjectKeyEvent(event); |
-} |
- |
-void NormalizingInputFilterCros::SwitchRewritingKeyToModifying() { |
- DCHECK(deferred_keydown_event_.has_usb_keycode()); |
- modifying_key_ = deferred_keydown_event_.usb_keycode(); |
- InputFilter::InjectKeyEvent(deferred_keydown_event_); |
- deferred_keydown_event_ = protocol::KeyEvent(); |
-} |
- |
-} // namespace remoting |