OLD | NEW |
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 #include "ash/sticky_keys/sticky_keys_controller.h" | 5 #include "ash/sticky_keys/sticky_keys_controller.h" |
6 | 6 |
7 #if defined(USE_X11) | 7 #if defined(USE_X11) |
8 #include <X11/extensions/XInput2.h> | 8 #include <X11/extensions/XInput2.h> |
9 #include <X11/Xlib.h> | 9 #include <X11/Xlib.h> |
10 #undef RootWindow | 10 #undef RootWindow |
(...skipping 97 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
108 | 108 |
109 // Reset key handlers when activating sticky keys to ensure all | 109 // Reset key handlers when activating sticky keys to ensure all |
110 // the handlers' states are reset. | 110 // the handlers' states are reset. |
111 if (enabled_) { | 111 if (enabled_) { |
112 shift_sticky_key_.reset( | 112 shift_sticky_key_.reset( |
113 new StickyKeysHandler(ui::EF_SHIFT_DOWN, | 113 new StickyKeysHandler(ui::EF_SHIFT_DOWN, |
114 new StickyKeysHandlerDelegateImpl())); | 114 new StickyKeysHandlerDelegateImpl())); |
115 alt_sticky_key_.reset( | 115 alt_sticky_key_.reset( |
116 new StickyKeysHandler(ui::EF_ALT_DOWN, | 116 new StickyKeysHandler(ui::EF_ALT_DOWN, |
117 new StickyKeysHandlerDelegateImpl())); | 117 new StickyKeysHandlerDelegateImpl())); |
| 118 altgr_sticky_key_.reset( |
| 119 new StickyKeysHandler(ui::EF_ALTGR_DOWN, |
| 120 new StickyKeysHandlerDelegateImpl())); |
118 ctrl_sticky_key_.reset( | 121 ctrl_sticky_key_.reset( |
119 new StickyKeysHandler(ui::EF_CONTROL_DOWN, | 122 new StickyKeysHandler(ui::EF_CONTROL_DOWN, |
120 new StickyKeysHandlerDelegateImpl())); | 123 new StickyKeysHandlerDelegateImpl())); |
121 | 124 |
122 overlay_.reset(new StickyKeysOverlay()); | 125 overlay_.reset(new StickyKeysOverlay()); |
123 } else if (overlay_.get()) { | 126 } else if (overlay_.get()) { |
124 overlay_->Show(false); | 127 overlay_->Show(false); |
125 } | 128 } |
126 } | 129 } |
127 } | 130 } |
128 | 131 |
129 bool StickyKeysController::HandleKeyEvent(ui::KeyEvent* event) { | 132 bool StickyKeysController::HandleKeyEvent(ui::KeyEvent* event) { |
130 return shift_sticky_key_->HandleKeyEvent(event) || | 133 return shift_sticky_key_->HandleKeyEvent(event) || |
131 alt_sticky_key_->HandleKeyEvent(event) || | 134 alt_sticky_key_->HandleKeyEvent(event) || |
| 135 altgr_sticky_key_->HandleKeyEvent(event) || |
132 ctrl_sticky_key_->HandleKeyEvent(event); | 136 ctrl_sticky_key_->HandleKeyEvent(event); |
133 } | 137 } |
134 | 138 |
135 bool StickyKeysController::HandleMouseEvent(ui::MouseEvent* event) { | 139 bool StickyKeysController::HandleMouseEvent(ui::MouseEvent* event) { |
136 return shift_sticky_key_->HandleMouseEvent(event) || | 140 return shift_sticky_key_->HandleMouseEvent(event) || |
137 alt_sticky_key_->HandleMouseEvent(event) || | 141 alt_sticky_key_->HandleMouseEvent(event) || |
| 142 altgr_sticky_key_->HandleMouseEvent(event) || |
138 ctrl_sticky_key_->HandleMouseEvent(event); | 143 ctrl_sticky_key_->HandleMouseEvent(event); |
139 } | 144 } |
140 | 145 |
141 bool StickyKeysController::HandleScrollEvent(ui::ScrollEvent* event) { | 146 bool StickyKeysController::HandleScrollEvent(ui::ScrollEvent* event) { |
142 return shift_sticky_key_->HandleScrollEvent(event) || | 147 return shift_sticky_key_->HandleScrollEvent(event) || |
143 alt_sticky_key_->HandleScrollEvent(event) || | 148 alt_sticky_key_->HandleScrollEvent(event) || |
| 149 altgr_sticky_key_->HandleScrollEvent(event) || |
144 ctrl_sticky_key_->HandleScrollEvent(event); | 150 ctrl_sticky_key_->HandleScrollEvent(event); |
145 } | 151 } |
146 | 152 |
147 void StickyKeysController::OnKeyEvent(ui::KeyEvent* event) { | 153 void StickyKeysController::OnKeyEvent(ui::KeyEvent* event) { |
148 // Do not consume a translated key event which is generated by an IME. | 154 // Do not consume a translated key event which is generated by an IME. |
149 if (event->type() == ui::ET_TRANSLATED_KEY_PRESS || | 155 if (event->type() == ui::ET_TRANSLATED_KEY_PRESS || |
150 event->type() == ui::ET_TRANSLATED_KEY_RELEASE) { | 156 event->type() == ui::ET_TRANSLATED_KEY_RELEASE) { |
151 return; | 157 return; |
152 } | 158 } |
153 | 159 |
(...skipping 20 matching lines...) Expand all Loading... |
174 } | 180 } |
175 } | 181 } |
176 | 182 |
177 void StickyKeysController::UpdateOverlay() { | 183 void StickyKeysController::UpdateOverlay() { |
178 overlay_->SetModifierKeyState( | 184 overlay_->SetModifierKeyState( |
179 ui::EF_SHIFT_DOWN, shift_sticky_key_->current_state()); | 185 ui::EF_SHIFT_DOWN, shift_sticky_key_->current_state()); |
180 overlay_->SetModifierKeyState( | 186 overlay_->SetModifierKeyState( |
181 ui::EF_CONTROL_DOWN, ctrl_sticky_key_->current_state()); | 187 ui::EF_CONTROL_DOWN, ctrl_sticky_key_->current_state()); |
182 overlay_->SetModifierKeyState( | 188 overlay_->SetModifierKeyState( |
183 ui::EF_ALT_DOWN, alt_sticky_key_->current_state()); | 189 ui::EF_ALT_DOWN, alt_sticky_key_->current_state()); |
| 190 overlay_->SetModifierKeyState( |
| 191 ui::EF_ALTGR_DOWN, altgr_sticky_key_->current_state()); |
184 | 192 |
185 bool key_in_use = | 193 bool key_in_use = |
186 shift_sticky_key_->current_state() != STICKY_KEY_STATE_DISABLED || | 194 shift_sticky_key_->current_state() != STICKY_KEY_STATE_DISABLED || |
187 alt_sticky_key_->current_state() != STICKY_KEY_STATE_DISABLED || | 195 alt_sticky_key_->current_state() != STICKY_KEY_STATE_DISABLED || |
| 196 altgr_sticky_key_->current_state() != STICKY_KEY_STATE_DISABLED || |
188 ctrl_sticky_key_->current_state() != STICKY_KEY_STATE_DISABLED; | 197 ctrl_sticky_key_->current_state() != STICKY_KEY_STATE_DISABLED; |
189 | 198 |
190 overlay_->Show(enabled_ && key_in_use); | 199 overlay_->Show(enabled_ && key_in_use); |
191 } | 200 } |
192 | 201 |
193 StickyKeysOverlay* StickyKeysController::GetOverlayForTest() { | 202 StickyKeysOverlay* StickyKeysController::GetOverlayForTest() { |
194 return overlay_.get(); | 203 return overlay_.get(); |
195 } | 204 } |
196 | 205 |
197 /////////////////////////////////////////////////////////////////////////////// | 206 /////////////////////////////////////////////////////////////////////////////// |
(...skipping 98 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
296 event->key_code() == ui::VKEY_RSHIFT) { | 305 event->key_code() == ui::VKEY_RSHIFT) { |
297 is_target_key = (modifier_flag_ == ui::EF_SHIFT_DOWN); | 306 is_target_key = (modifier_flag_ == ui::EF_SHIFT_DOWN); |
298 } else if (event->key_code() == ui::VKEY_CONTROL || | 307 } else if (event->key_code() == ui::VKEY_CONTROL || |
299 event->key_code() == ui::VKEY_LCONTROL || | 308 event->key_code() == ui::VKEY_LCONTROL || |
300 event->key_code() == ui::VKEY_RCONTROL) { | 309 event->key_code() == ui::VKEY_RCONTROL) { |
301 is_target_key = (modifier_flag_ == ui::EF_CONTROL_DOWN); | 310 is_target_key = (modifier_flag_ == ui::EF_CONTROL_DOWN); |
302 } else if (event->key_code() == ui::VKEY_MENU || | 311 } else if (event->key_code() == ui::VKEY_MENU || |
303 event->key_code() == ui::VKEY_LMENU || | 312 event->key_code() == ui::VKEY_LMENU || |
304 event->key_code() == ui::VKEY_RMENU) { | 313 event->key_code() == ui::VKEY_RMENU) { |
305 is_target_key = (modifier_flag_ == ui::EF_ALT_DOWN); | 314 is_target_key = (modifier_flag_ == ui::EF_ALT_DOWN); |
| 315 } else if (event->key_code() == ui::VKEY_ALTGR) { |
| 316 is_target_key = (modifier_flag_ == ui::EF_ALTGR_DOWN); |
306 } else { | 317 } else { |
307 return event->type() == ui::ET_KEY_PRESSED ? | 318 return event->type() == ui::ET_KEY_PRESSED ? |
308 NORMAL_KEY_DOWN : NORMAL_KEY_UP; | 319 NORMAL_KEY_DOWN : NORMAL_KEY_UP; |
309 } | 320 } |
310 | 321 |
311 if (is_target_key) { | 322 if (is_target_key) { |
312 return event->type() == ui::ET_KEY_PRESSED ? | 323 return event->type() == ui::ET_KEY_PRESSED ? |
313 TARGET_MODIFIER_DOWN : TARGET_MODIFIER_UP; | 324 TARGET_MODIFIER_DOWN : TARGET_MODIFIER_UP; |
314 } | 325 } |
315 return event->type() == ui::ET_KEY_PRESSED ? | 326 return event->type() == ui::ET_KEY_PRESSED ? |
(...skipping 102 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
418 void StickyKeysHandler::AppendNativeEventMask(unsigned int* state) { | 429 void StickyKeysHandler::AppendNativeEventMask(unsigned int* state) { |
419 #if defined(USE_X11) | 430 #if defined(USE_X11) |
420 unsigned int& state_ref = *state; | 431 unsigned int& state_ref = *state; |
421 switch (modifier_flag_) { | 432 switch (modifier_flag_) { |
422 case ui::EF_CONTROL_DOWN: | 433 case ui::EF_CONTROL_DOWN: |
423 state_ref |= ControlMask; | 434 state_ref |= ControlMask; |
424 break; | 435 break; |
425 case ui::EF_ALT_DOWN: | 436 case ui::EF_ALT_DOWN: |
426 state_ref |= Mod1Mask; | 437 state_ref |= Mod1Mask; |
427 break; | 438 break; |
| 439 case ui::EF_ALTGR_DOWN: |
| 440 state_ref |= Mod5Mask; |
| 441 break; |
428 case ui::EF_SHIFT_DOWN: | 442 case ui::EF_SHIFT_DOWN: |
429 state_ref |= ShiftMask; | 443 state_ref |= ShiftMask; |
430 break; | 444 break; |
431 default: | 445 default: |
432 NOTREACHED(); | 446 NOTREACHED(); |
433 } | 447 } |
434 #endif | 448 #endif |
435 } | 449 } |
436 | 450 |
437 void StickyKeysHandler::AppendModifier(ui::KeyEvent* event) { | 451 void StickyKeysHandler::AppendModifier(ui::KeyEvent* event) { |
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
474 &xievent->mods.effective)); | 488 &xievent->mods.effective)); |
475 } | 489 } |
476 } | 490 } |
477 #elif defined(USE_OZONE) | 491 #elif defined(USE_OZONE) |
478 NOTIMPLEMENTED() << "Modifier key is not handled"; | 492 NOTIMPLEMENTED() << "Modifier key is not handled"; |
479 #endif | 493 #endif |
480 event->set_flags(event->flags() | modifier_flag_); | 494 event->set_flags(event->flags() | modifier_flag_); |
481 } | 495 } |
482 | 496 |
483 } // namespace ash | 497 } // namespace ash |
OLD | NEW |