• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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
3 // found in the LICENSE file.
4 
5 #include "remoting/protocol/input_filter.h"
6 
7 #include "remoting/proto/event.pb.h"
8 
9 namespace remoting {
10 
11 // NormalizingInputFilterCros addresses the problems generated by key rewritings
12 // such as Down->PageDown, 1->F1, etc, when keys are pressed in combination with
13 // the OSKey (aka Search). Rewriting OSKey+Down, for example, causes us to
14 // receive the following:
15 //
16 // keydown OSKey
17 // keydown PageDown
18 // keyup PageDown
19 // keyup OSKey
20 //
21 // The host system will therefore behave as if OSKey+PageDown were pressed,
22 // rather than PageDown alone.
23 class NormalizingInputFilterCros : public protocol::InputFilter {
24  public:
25   explicit NormalizingInputFilterCros(protocol::InputStub* input_stub);
26   virtual ~NormalizingInputFilterCros();
27 
28   // InputFilter overrides.
29   virtual void InjectKeyEvent(const protocol::KeyEvent& event) OVERRIDE;
30   virtual void InjectMouseEvent(const protocol::MouseEvent& event) OVERRIDE;
31 
32  private:
33   void ProcessKeyDown(const protocol::KeyEvent& event);
34   void ProcessKeyUp(const protocol::KeyEvent& event);
35 
36   void SwitchRewritingKeyToModifying();
37 
38   // Holds the keydown event for the most recent OSKey to have been pressed,
39   // while it is Rewriting, or we are not yet sure whether it is Normal,
40   // Rewriting or Modifying. The event is sent on if we switch to Modifying, or
41   // discarded if the OSKey is released while in Rewriting mode.
42   protocol::KeyEvent deferred_keydown_event_;
43 
44   // True while the |rewrite_keydown_event_| key is Rewriting, i.e. was followed
45   // by one or more Rewritten key events, and not by any Modified events.
46   bool deferred_key_is_rewriting_;
47 
48   // Stores the code of the OSKey while it is pressed for use as a Modifier.
49   uint32 modifying_key_;
50 
51   DISALLOW_COPY_AND_ASSIGN(NormalizingInputFilterCros);
52 };
53 
54 }  // namespace remoting
55