Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(964)

Side by Side Diff: ash/sticky_keys/sticky_keys_controller.h

Issue 137373003: Show overlay displaying the state of all sticky keys when it is enabled. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 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 #ifndef ASH_STICKY_KEYS_STICKY_KEYS_CONTROLLER_H_ 5 #ifndef ASH_STICKY_KEYS_STICKY_KEYS_CONTROLLER_H_
6 #define ASH_STICKY_KEYS_STICKY_KEYS_CONTROLLER_H_ 6 #define ASH_STICKY_KEYS_STICKY_KEYS_CONTROLLER_H_
7 7
8 #include "ash/ash_export.h" 8 #include "ash/ash_export.h"
9 #include "ash/sticky_keys/sticky_keys_constants.h"
9 #include "base/memory/scoped_ptr.h" 10 #include "base/memory/scoped_ptr.h"
10 #include "ui/events/event_constants.h" 11 #include "ui/events/event_constants.h"
11 #include "ui/events/event_handler.h" 12 #include "ui/events/event_handler.h"
12 13
13 namespace ui { 14 namespace ui {
14 class Event; 15 class Event;
15 class KeyEvent; 16 class KeyEvent;
16 class MouseEvent; 17 class MouseEvent;
17 } // namespace ui 18 } // namespace ui
18 19
19 namespace aura { 20 namespace aura {
20 class Window; 21 class Window;
21 } // namespace aura 22 } // namespace aura
22 23
23 namespace ash { 24 namespace ash {
24 25
26 class StickyKeysOverlay;
25 class StickyKeysHandler; 27 class StickyKeysHandler;
26 28
27 // StickyKeysController is an accessibility feature for users to be able to 29 // StickyKeysController is an accessibility feature for users to be able to
28 // compose key and mouse event with modifier keys without simultaneous key 30 // compose key and mouse event with modifier keys without simultaneous key
29 // press event. Instead they can compose events separately pressing each of the 31 // press event. Instead they can compose events separately pressing each of the
30 // modifier keys involved. 32 // modifier keys involved.
31 // e.g. Composing Ctrl + T 33 // e.g. Composing Ctrl + T
32 // User Action : The KeyEvent widget will receives 34 // User Action : The KeyEvent widget will receives
33 // ---------------------------------------------------------- 35 // ----------------------------------------------------------
34 // 1. Press Ctrl key : Ctrl Keydown. 36 // 1. Press Ctrl key : Ctrl Keydown.
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
73 bool HandleMouseEvent(ui::MouseEvent* event); 75 bool HandleMouseEvent(ui::MouseEvent* event);
74 76
75 // Handles scroll event. Returns true if sticky key consumes scroll event. 77 // Handles scroll event. Returns true if sticky key consumes scroll event.
76 bool HandleScrollEvent(ui::ScrollEvent* event); 78 bool HandleScrollEvent(ui::ScrollEvent* event);
77 79
78 // Overridden from ui::EventHandler: 80 // Overridden from ui::EventHandler:
79 virtual void OnKeyEvent(ui::KeyEvent* event) OVERRIDE; 81 virtual void OnKeyEvent(ui::KeyEvent* event) OVERRIDE;
80 virtual void OnMouseEvent(ui::MouseEvent* event) OVERRIDE; 82 virtual void OnMouseEvent(ui::MouseEvent* event) OVERRIDE;
81 virtual void OnScrollEvent(ui::ScrollEvent* event) OVERRIDE; 83 virtual void OnScrollEvent(ui::ScrollEvent* event) OVERRIDE;
82 84
85 // Updates the overlay UI with the current state of the sticky keys.
86 void UpdateOverlay();
87
83 // Whether sticky keys is activated and modifying events. 88 // Whether sticky keys is activated and modifying events.
84 bool enabled_; 89 bool enabled_;
85 90
86 // Sticky key handlers. 91 // Sticky key handlers.
87 scoped_ptr<StickyKeysHandler> shift_sticky_key_; 92 scoped_ptr<StickyKeysHandler> shift_sticky_key_;
88 scoped_ptr<StickyKeysHandler> alt_sticky_key_; 93 scoped_ptr<StickyKeysHandler> alt_sticky_key_;
89 scoped_ptr<StickyKeysHandler> ctrl_sticky_key_; 94 scoped_ptr<StickyKeysHandler> ctrl_sticky_key_;
90 95
96 scoped_ptr<StickyKeysOverlay> overlay_;
97
91 DISALLOW_COPY_AND_ASSIGN(StickyKeysController); 98 DISALLOW_COPY_AND_ASSIGN(StickyKeysController);
92 }; 99 };
93 100
94 // StickyKeysHandler handles key event and controls sticky keysfor specific 101 // StickyKeysHandler handles key event and controls sticky keysfor specific
95 // modifier keys. If monitored keyboard events are recieved, StickyKeysHandler 102 // modifier keys. If monitored keyboard events are recieved, StickyKeysHandler
96 // changes internal state. If non modifier keyboard events or mouse events are 103 // changes internal state. If non modifier keyboard events or mouse events are
97 // received, StickyKeysHandler will append modifier based on internal state. 104 // received, StickyKeysHandler will append modifier based on internal state.
98 // For other events, StickyKeysHandler does nothing. 105 // For other events, StickyKeysHandler does nothing.
99 // 106 //
100 // The DISABLED state is default state and any incoming non modifier keyboard 107 // The DISABLED state is default state and any incoming non modifier keyboard
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
132 aura::Window* target) = 0; 139 aura::Window* target) = 0;
133 140
134 // Dispatches mouse event synchronously. 141 // Dispatches mouse event synchronously.
135 virtual void DispatchMouseEvent(ui::MouseEvent* event, 142 virtual void DispatchMouseEvent(ui::MouseEvent* event,
136 aura::Window* target) = 0; 143 aura::Window* target) = 0;
137 144
138 // Dispatches scroll event synchronously. 145 // Dispatches scroll event synchronously.
139 virtual void DispatchScrollEvent(ui::ScrollEvent* event, 146 virtual void DispatchScrollEvent(ui::ScrollEvent* event,
140 aura::Window* target) = 0; 147 aura::Window* target) = 0;
141 }; 148 };
142 // Represents Sticky Key state.
143 enum StickyKeyState {
144 // The sticky key is disabled. Incomming non modifier key events are not
145 // affected.
146 DISABLED,
147 // The sticky key is enabled. Incomming non modifier key down events are
148 // modified with |modifier_flag_|. After that, sticky key state become
149 // DISABLED.
150 ENABLED,
151 // The sticky key is locked. Incomming non modifier key down events are
152 // modified with |modifier_flag_|.
153 LOCKED,
154 };
155 149
156 // This class takes an ownership of |delegate|. 150 // This class takes an ownership of |delegate|.
157 StickyKeysHandler(ui::EventFlags modifier_flag, 151 StickyKeysHandler(StickyKeyModifier modifier,
158 StickyKeysHandlerDelegate* delegate); 152 StickyKeysHandlerDelegate* delegate);
159 ~StickyKeysHandler(); 153 ~StickyKeysHandler();
160 154
161 // Handles key event. Returns true if key is consumed. 155 // Handles key event. Returns true if key is consumed.
162 bool HandleKeyEvent(ui::KeyEvent* event); 156 bool HandleKeyEvent(ui::KeyEvent* event);
163 157
164 // Handles a mouse event. Returns true if mouse event is consumed. 158 // Handles a mouse event. Returns true if mouse event is consumed.
165 bool HandleMouseEvent(ui::MouseEvent* event); 159 bool HandleMouseEvent(ui::MouseEvent* event);
166 160
167 // Handles a scroll event. Returns true if scroll event is consumed. 161 // Handles a scroll event. Returns true if scroll event is consumed.
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
200 void DispatchEventAndReleaseModifier(ui::Event* event); 194 void DispatchEventAndReleaseModifier(ui::Event* event);
201 195
202 // Adds |modifier_flags_| to a native X11 event state mask. 196 // Adds |modifier_flags_| to a native X11 event state mask.
203 void AppendNativeEventMask(unsigned int* state); 197 void AppendNativeEventMask(unsigned int* state);
204 198
205 // Adds |modifier_flags_| into |event|. 199 // Adds |modifier_flags_| into |event|.
206 void AppendModifier(ui::KeyEvent* event); 200 void AppendModifier(ui::KeyEvent* event);
207 void AppendModifier(ui::MouseEvent* event); 201 void AppendModifier(ui::MouseEvent* event);
208 void AppendModifier(ui::ScrollEvent* event); 202 void AppendModifier(ui::ScrollEvent* event);
209 203
210 // The modifier flag to be monitored and appended. 204 // The modifier key this handler is responsible for.
205 StickyKeyModifier modifier_;
206
207 // The modifier flag to be monitored and appended to events.
211 const ui::EventFlags modifier_flag_; 208 const ui::EventFlags modifier_flag_;
212 209
213 // The current sticky key status. 210 // The current sticky key status.
214 StickyKeyState current_state_; 211 StickyKeyState current_state_;
215 212
216 // True if the received key event is sent by StickyKeyHandler. 213 // True if the received key event is sent by StickyKeyHandler.
217 bool event_from_myself_; 214 bool event_from_myself_;
218 215
219 // True if we received the TARGET_MODIFIER_DOWN event while in the DISABLED 216 // True if we received the TARGET_MODIFIER_DOWN event while in the DISABLED
220 // state but before we receive the TARGET_MODIFIER_UP event. Normal 217 // state but before we receive the TARGET_MODIFIER_UP event. Normal
(...skipping 10 matching lines...) Expand all
231 scoped_ptr<ui::KeyEvent> modifier_up_event_; 228 scoped_ptr<ui::KeyEvent> modifier_up_event_;
232 229
233 scoped_ptr<StickyKeysHandlerDelegate> delegate_; 230 scoped_ptr<StickyKeysHandlerDelegate> delegate_;
234 231
235 DISALLOW_COPY_AND_ASSIGN(StickyKeysHandler); 232 DISALLOW_COPY_AND_ASSIGN(StickyKeysHandler);
236 }; 233 };
237 234
238 } // namespace ash 235 } // namespace ash
239 236
240 #endif // ASH_STICKY_KEYS_STICKY_KEYS_CONTROLLER_H_ 237 #endif // ASH_STICKY_KEYS_STICKY_KEYS_CONTROLLER_H_
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698