| 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 |