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

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

Issue 175343007: Add sticky key support for AltGr (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Rebase Created 6 years, 9 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
« no previous file with comments | « ash/sticky_keys/sticky_keys_controller.h ('k') | ash/sticky_keys/sticky_keys_overlay.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 #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
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
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
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
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
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
OLDNEW
« no previous file with comments | « ash/sticky_keys/sticky_keys_controller.h ('k') | ash/sticky_keys/sticky_keys_overlay.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698