summaryrefslogtreecommitdiffstats
path: root/ash
diff options
context:
space:
mode:
Diffstat (limited to 'ash')
-rw-r--r--ash/ash_strings.grd3
-rw-r--r--ash/sticky_keys/sticky_keys_controller.cc27
-rw-r--r--ash/sticky_keys/sticky_keys_controller.h1
-rw-r--r--ash/sticky_keys/sticky_keys_overlay.cc13
-rw-r--r--ash/sticky_keys/sticky_keys_overlay.h2
-rw-r--r--ash/sticky_keys/sticky_keys_overlay_unittest.cc32
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