diff options
Diffstat (limited to 'ash')
-rw-r--r-- | ash/ash_strings.grd | 3 | ||||
-rw-r--r-- | ash/sticky_keys/sticky_keys_controller.cc | 27 | ||||
-rw-r--r-- | ash/sticky_keys/sticky_keys_controller.h | 1 | ||||
-rw-r--r-- | ash/sticky_keys/sticky_keys_overlay.cc | 13 | ||||
-rw-r--r-- | ash/sticky_keys/sticky_keys_overlay.h | 2 | ||||
-rw-r--r-- | ash/sticky_keys/sticky_keys_overlay_unittest.cc | 32 |
6 files changed, 73 insertions, 5 deletions
diff --git a/ash/ash_strings.grd b/ash/ash_strings.grd index 1e5ed6f..fb6f10c 100644 --- a/ash/ash_strings.grd +++ b/ash/ash_strings.grd @@ -623,6 +623,9 @@ Press Shift + Alt to switch. <message name="IDS_ASH_ALTGR_KEY" desc="Name of [AltGr] key name. Shouldn't be translated in many languages actually. This name should be lower case."> altgr </message> + <message name="IDS_ASH_MOD3_KEY" desc="Name of ISOLevel5 (mod3) key name. Shouldn't be translated in many languages actually. This name should be lower case."> + mod3 + </message> <message name="IDS_ASH_SEARCH_KEY" desc="Name of [Search] key name. Shouldn't be translated in many languages actually. This name should be lower case."> search </message> diff --git a/ash/sticky_keys/sticky_keys_controller.cc b/ash/sticky_keys/sticky_keys_controller.cc index 45c1248..a10bb61 100644 --- a/ash/sticky_keys/sticky_keys_controller.cc +++ b/ash/sticky_keys/sticky_keys_controller.cc @@ -132,9 +132,13 @@ void StickyKeysController::Enable(bool enabled) { ctrl_sticky_key_.reset( new StickyKeysHandler(ui::EF_CONTROL_DOWN, new StickyKeysHandlerDelegateImpl())); + mod3_sticky_key_.reset( + new StickyKeysHandler(ui::EF_MOD3_DOWN, + new StickyKeysHandlerDelegateImpl())); overlay_.reset(new StickyKeysOverlay()); overlay_->SetModifierVisible(ui::EF_ALTGR_DOWN, altgr_enabled_); + overlay_->SetModifierVisible(ui::EF_MOD3_DOWN, mod3_enabled_); } else if (overlay_) { overlay_->Show(false); } @@ -145,29 +149,34 @@ void StickyKeysController::SetModifiersEnabled(bool mod3_enabled, bool altgr_enabled) { mod3_enabled_ = mod3_enabled; altgr_enabled_ = altgr_enabled; - if (overlay_) + if (overlay_) { overlay_->SetModifierVisible(ui::EF_ALTGR_DOWN, altgr_enabled_); + overlay_->SetModifierVisible(ui::EF_MOD3_DOWN, mod3_enabled_); + } } bool StickyKeysController::HandleKeyEvent(ui::KeyEvent* event) { return shift_sticky_key_->HandleKeyEvent(event) || alt_sticky_key_->HandleKeyEvent(event) || altgr_sticky_key_->HandleKeyEvent(event) || - ctrl_sticky_key_->HandleKeyEvent(event); + ctrl_sticky_key_->HandleKeyEvent(event) || + mod3_sticky_key_->HandleKeyEvent(event); } bool StickyKeysController::HandleMouseEvent(ui::MouseEvent* event) { return shift_sticky_key_->HandleMouseEvent(event) || alt_sticky_key_->HandleMouseEvent(event) || altgr_sticky_key_->HandleMouseEvent(event) || - ctrl_sticky_key_->HandleMouseEvent(event); + ctrl_sticky_key_->HandleMouseEvent(event) || + mod3_sticky_key_->HandleMouseEvent(event); } bool StickyKeysController::HandleScrollEvent(ui::ScrollEvent* event) { return shift_sticky_key_->HandleScrollEvent(event) || alt_sticky_key_->HandleScrollEvent(event) || altgr_sticky_key_->HandleScrollEvent(event) || - ctrl_sticky_key_->HandleScrollEvent(event); + ctrl_sticky_key_->HandleScrollEvent(event) || + mod3_sticky_key_->HandleScrollEvent(event); } void StickyKeysController::OnKeyEvent(ui::KeyEvent* event) { @@ -209,12 +218,15 @@ void StickyKeysController::UpdateOverlay() { ui::EF_ALT_DOWN, alt_sticky_key_->current_state()); overlay_->SetModifierKeyState( ui::EF_ALTGR_DOWN, altgr_sticky_key_->current_state()); + overlay_->SetModifierKeyState( + ui::EF_MOD3_DOWN, mod3_sticky_key_->current_state()); bool key_in_use = shift_sticky_key_->current_state() != STICKY_KEY_STATE_DISABLED || alt_sticky_key_->current_state() != STICKY_KEY_STATE_DISABLED || altgr_sticky_key_->current_state() != STICKY_KEY_STATE_DISABLED || - ctrl_sticky_key_->current_state() != STICKY_KEY_STATE_DISABLED; + ctrl_sticky_key_->current_state() != STICKY_KEY_STATE_DISABLED || + mod3_sticky_key_->current_state() != STICKY_KEY_STATE_DISABLED; overlay_->Show(enabled_ && key_in_use); } @@ -334,6 +346,8 @@ StickyKeysHandler::KeyEventType is_target_key = (modifier_flag_ == ui::EF_ALT_DOWN); } else if (event->key_code() == ui::VKEY_ALTGR) { is_target_key = (modifier_flag_ == ui::EF_ALTGR_DOWN); + } else if (event->key_code() == ui::VKEY_OEM_8) { + is_target_key = (modifier_flag_ == ui::EF_MOD3_DOWN); } else { return event->type() == ui::ET_KEY_PRESSED ? NORMAL_KEY_DOWN : NORMAL_KEY_UP; @@ -462,6 +476,9 @@ void StickyKeysHandler::AppendNativeEventMask(unsigned int* state) { case ui::EF_SHIFT_DOWN: state_ref |= ShiftMask; break; + case ui::EF_MOD3_DOWN: + state_ref |= Mod3Mask; + break; default: NOTREACHED(); } diff --git a/ash/sticky_keys/sticky_keys_controller.h b/ash/sticky_keys/sticky_keys_controller.h index c9c1580..89a196a 100644 --- a/ash/sticky_keys/sticky_keys_controller.h +++ b/ash/sticky_keys/sticky_keys_controller.h @@ -105,6 +105,7 @@ class ASH_EXPORT StickyKeysController : public ui::EventHandler { scoped_ptr<StickyKeysHandler> alt_sticky_key_; scoped_ptr<StickyKeysHandler> altgr_sticky_key_; scoped_ptr<StickyKeysHandler> ctrl_sticky_key_; + scoped_ptr<StickyKeysHandler> mod3_sticky_key_; scoped_ptr<StickyKeysOverlay> overlay_; diff --git a/ash/sticky_keys/sticky_keys_overlay.cc b/ash/sticky_keys/sticky_keys_overlay.cc index 3bafd39..2613110 100644 --- a/ash/sticky_keys/sticky_keys_overlay.cc +++ b/ash/sticky_keys/sticky_keys_overlay.cc @@ -131,6 +131,7 @@ class StickyKeysOverlayView : public views::WidgetDelegateView { StickyKeyState GetKeyState(ui::EventFlags modifier); void SetModifierVisible(ui::EventFlags modifier, bool visible); + bool GetModifierVisible(ui::EventFlags modifier); private: void AddKeyLabel(ui::EventFlags modifier, const std::string& key_label); @@ -165,6 +166,8 @@ StickyKeysOverlayView::StickyKeysOverlayView() { l10n_util::GetStringUTF8(IDS_ASH_SHIFT_KEY)); AddKeyLabel(ui::EF_ALTGR_DOWN, l10n_util::GetStringUTF8(IDS_ASH_ALTGR_KEY)); + AddKeyLabel(ui::EF_MOD3_DOWN, + l10n_util::GetStringUTF8(IDS_ASH_MOD3_KEY)); } StickyKeysOverlayView::~StickyKeysOverlayView() {} @@ -200,6 +203,12 @@ void StickyKeysOverlayView::SetModifierVisible(ui::EventFlags modifier, it->second->SetVisible(visible); } +bool StickyKeysOverlayView::GetModifierVisible(ui::EventFlags modifier) { + ModifierLabelMap::iterator it = modifier_label_map_.find(modifier); + DCHECK(it != modifier_label_map_.end()); + return it->second->visible(); +} + void StickyKeysOverlayView::AddKeyLabel(ui::EventFlags modifier, const std::string& key_label) { StickyKeyOverlayLabel* label = new StickyKeyOverlayLabel(key_label); @@ -271,6 +280,10 @@ void StickyKeysOverlay::SetModifierVisible(ui::EventFlags modifier, widget_size_ = overlay_view_->GetPreferredSize(); } +bool StickyKeysOverlay::GetModifierVisible(ui::EventFlags modifier) { + return overlay_view_->GetModifierVisible(modifier); +} + void StickyKeysOverlay::SetModifierKeyState(ui::EventFlags modifier, StickyKeyState state) { overlay_view_->SetKeyState(modifier, state); diff --git a/ash/sticky_keys/sticky_keys_overlay.h b/ash/sticky_keys/sticky_keys_overlay.h index 74d082a..e60d074 100644 --- a/ash/sticky_keys/sticky_keys_overlay.h +++ b/ash/sticky_keys/sticky_keys_overlay.h @@ -38,6 +38,8 @@ class ASH_EXPORT StickyKeysOverlay : public ui::LayerAnimationObserver { void SetModifierVisible(ui::EventFlags modifier, bool visible); + bool GetModifierVisible(ui::EventFlags modifier); + // Updates the overlay with the current state of a sticky key modifier. void SetModifierKeyState(ui::EventFlags modifier, StickyKeyState state); diff --git a/ash/sticky_keys/sticky_keys_overlay_unittest.cc b/ash/sticky_keys/sticky_keys_overlay_unittest.cc index 5a41e63..678eff4 100644 --- a/ash/sticky_keys/sticky_keys_overlay_unittest.cc +++ b/ash/sticky_keys/sticky_keys_overlay_unittest.cc @@ -203,4 +203,36 @@ TEST_F(StickyKeysOverlayTest, ModifiersDisabled) { overlay_->GetModifierKeyState(ui::EF_ALT_DOWN)); } +TEST_F(StickyKeysOverlayTest, ModifierVisibility) { + // All but AltGr and Mod3 should initially be visible. + EXPECT_TRUE(overlay_->GetModifierVisible(ui::EF_CONTROL_DOWN)); + EXPECT_TRUE(overlay_->GetModifierVisible(ui::EF_SHIFT_DOWN)); + EXPECT_TRUE(overlay_->GetModifierVisible(ui::EF_ALT_DOWN)); + EXPECT_FALSE(overlay_->GetModifierVisible(ui::EF_ALTGR_DOWN)); + EXPECT_FALSE(overlay_->GetModifierVisible(ui::EF_MOD3_DOWN)); + + // Turn all modifiers on. + controller_->SetModifiersEnabled(true, true); + EXPECT_TRUE(overlay_->GetModifierVisible(ui::EF_CONTROL_DOWN)); + EXPECT_TRUE(overlay_->GetModifierVisible(ui::EF_SHIFT_DOWN)); + EXPECT_TRUE(overlay_->GetModifierVisible(ui::EF_ALT_DOWN)); + EXPECT_TRUE(overlay_->GetModifierVisible(ui::EF_ALTGR_DOWN)); + EXPECT_TRUE(overlay_->GetModifierVisible(ui::EF_MOD3_DOWN)); + + // Turn off Mod3. + controller_->SetModifiersEnabled(false, true); + EXPECT_TRUE(overlay_->GetModifierVisible(ui::EF_ALTGR_DOWN)); + EXPECT_FALSE(overlay_->GetModifierVisible(ui::EF_MOD3_DOWN)); + + // Turn off AltGr. + controller_->SetModifiersEnabled(true, false); + EXPECT_FALSE(overlay_->GetModifierVisible(ui::EF_ALTGR_DOWN)); + EXPECT_TRUE(overlay_->GetModifierVisible(ui::EF_MOD3_DOWN)); + + // Turn off AltGr and Mod3. + controller_->SetModifiersEnabled(false, false); + EXPECT_FALSE(overlay_->GetModifierVisible(ui::EF_ALTGR_DOWN)); + EXPECT_FALSE(overlay_->GetModifierVisible(ui::EF_MOD3_DOWN)); +} + } // namespace ash |