summaryrefslogtreecommitdiffstats
path: root/ash/sticky_keys
diff options
context:
space:
mode:
authorzork@chromium.org <zork@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2014-03-28 21:12:07 +0000
committerzork@chromium.org <zork@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2014-03-28 21:12:07 +0000
commit1488a035f4377aa3cc443a4846e5058fc2a6acb4 (patch)
tree0043356ac199af9d7b7e91869bdbf0c0707c5233 /ash/sticky_keys
parent01bdc9206f8de9eac03ca7da9a736652f1d6add1 (diff)
downloadchromium_src-1488a035f4377aa3cc443a4846e5058fc2a6acb4.zip
chromium_src-1488a035f4377aa3cc443a4846e5058fc2a6acb4.tar.gz
chromium_src-1488a035f4377aa3cc443a4846e5058fc2a6acb4.tar.bz2
Update StickyKeys overlay to show or hide AltGr depending on the
current input method. BUG=335368 Review URL: https://codereview.chromium.org/187313002 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@260280 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'ash/sticky_keys')
-rw-r--r--ash/sticky_keys/sticky_keys_controller.cc15
-rw-r--r--ash/sticky_keys/sticky_keys_controller.h8
-rw-r--r--ash/sticky_keys/sticky_keys_overlay.cc15
-rw-r--r--ash/sticky_keys/sticky_keys_overlay.h2
4 files changed, 38 insertions, 2 deletions
diff --git a/ash/sticky_keys/sticky_keys_controller.cc b/ash/sticky_keys/sticky_keys_controller.cc
index 812e46e..e5bb0af 100644
--- a/ash/sticky_keys/sticky_keys_controller.cc
+++ b/ash/sticky_keys/sticky_keys_controller.cc
@@ -97,7 +97,9 @@ void StickyKeysHandlerDelegateImpl::DispatchEvent(ui::Event* event,
///////////////////////////////////////////////////////////////////////////////
// StickyKeys
StickyKeysController::StickyKeysController()
- : enabled_(false) {
+ : enabled_(false),
+ mod3_enabled_(false),
+ altgr_enabled_(false) {
}
StickyKeysController::~StickyKeysController() {
@@ -124,12 +126,21 @@ void StickyKeysController::Enable(bool enabled) {
new StickyKeysHandlerDelegateImpl()));
overlay_.reset(new StickyKeysOverlay());
- } else if (overlay_.get()) {
+ overlay_->SetModifierVisible(ui::EF_ALTGR_DOWN, altgr_enabled_);
+ } else if (overlay_) {
overlay_->Show(false);
}
}
}
+void StickyKeysController::SetModifiersEnabled(bool mod3_enabled,
+ bool altgr_enabled) {
+ mod3_enabled_ = mod3_enabled;
+ altgr_enabled_ = altgr_enabled;
+ if (overlay_)
+ overlay_->SetModifierVisible(ui::EF_ALTGR_DOWN, altgr_enabled_);
+}
+
bool StickyKeysController::HandleKeyEvent(ui::KeyEvent* event) {
return shift_sticky_key_->HandleKeyEvent(event) ||
alt_sticky_key_->HandleKeyEvent(event) ||
diff --git a/ash/sticky_keys/sticky_keys_controller.h b/ash/sticky_keys/sticky_keys_controller.h
index 018d4f5..792f2c5 100644
--- a/ash/sticky_keys/sticky_keys_controller.h
+++ b/ash/sticky_keys/sticky_keys_controller.h
@@ -67,6 +67,8 @@ class ASH_EXPORT StickyKeysController : public ui::EventHandler {
// Activate sticky keys to intercept and modify incoming events.
void Enable(bool enabled);
+ void SetModifiersEnabled(bool mod3_enabled, bool altgr_enabled);
+
// Overridden from ui::EventHandler:
virtual void OnKeyEvent(ui::KeyEvent* event) OVERRIDE;
virtual void OnMouseEvent(ui::MouseEvent* event) OVERRIDE;
@@ -92,6 +94,12 @@ class ASH_EXPORT StickyKeysController : public ui::EventHandler {
// Whether sticky keys is activated and modifying events.
bool enabled_;
+ // Whether the current layout has a mod3 key.
+ bool mod3_enabled_;
+
+ // Whether the current layout has an altgr key.
+ bool altgr_enabled_;
+
// Sticky key handlers.
scoped_ptr<StickyKeysHandler> shift_sticky_key_;
scoped_ptr<StickyKeysHandler> alt_sticky_key_;
diff --git a/ash/sticky_keys/sticky_keys_overlay.cc b/ash/sticky_keys/sticky_keys_overlay.cc
index 4d32f03..e91caf4 100644
--- a/ash/sticky_keys/sticky_keys_overlay.cc
+++ b/ash/sticky_keys/sticky_keys_overlay.cc
@@ -130,6 +130,8 @@ class StickyKeysOverlayView : public views::WidgetDelegateView {
StickyKeyState GetKeyState(ui::EventFlags modifier);
+ void SetModifierVisible(ui::EventFlags modifier, bool visible);
+
private:
void AddKeyLabel(ui::EventFlags modifier, const std::string& key_label);
@@ -191,6 +193,13 @@ StickyKeyState StickyKeysOverlayView::GetKeyState(ui::EventFlags modifier) {
return it->second->state();
}
+void StickyKeysOverlayView::SetModifierVisible(ui::EventFlags modifier,
+ bool visible) {
+ ModifierLabelMap::iterator it = modifier_label_map_.find(modifier);
+ DCHECK(it != modifier_label_map_.end());
+ it->second->SetVisible(visible);
+}
+
void StickyKeysOverlayView::AddKeyLabel(ui::EventFlags modifier,
const std::string& key_label) {
StickyKeyOverlayLabel* label = new StickyKeyOverlayLabel(key_label);
@@ -257,6 +266,12 @@ void StickyKeysOverlay::Show(bool visible) {
overlay_widget_->GetLayer()->SetTransform(gfx::Transform());
}
+void StickyKeysOverlay::SetModifierVisible(ui::EventFlags modifier,
+ bool visible) {
+ overlay_view_->SetModifierVisible(modifier, visible);
+ widget_size_ = overlay_view_->GetPreferredSize();
+}
+
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 88d195a..74d082a 100644
--- a/ash/sticky_keys/sticky_keys_overlay.h
+++ b/ash/sticky_keys/sticky_keys_overlay.h
@@ -36,6 +36,8 @@ class ASH_EXPORT StickyKeysOverlay : public ui::LayerAnimationObserver {
// Shows or hides the overlay.
void Show(bool visible);
+ void SetModifierVisible(ui::EventFlags modifier, bool visible);
+
// Updates the overlay with the current state of a sticky key modifier.
void SetModifierKeyState(ui::EventFlags modifier,
StickyKeyState state);