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

Side by Side Diff: ash/accelerators/accelerator_controller.cc

Issue 350943003: Support global keyboard commands on Chrome OS. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Test updates Created 6 years, 5 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
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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/accelerators/accelerator_controller.h" 5 #include "ash/accelerators/accelerator_controller.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 #include <cmath> 8 #include <cmath>
9 #include <string> 9 #include <string>
10 10
(...skipping 838 matching lines...) Expand 10 before | Expand all | Expand 10 after
849 accelerators_.find(remapped_accelerator); 849 accelerators_.find(remapped_accelerator);
850 if (iter == accelerators_.end()) 850 if (iter == accelerators_.end())
851 return false; // not an accelerator. 851 return false; // not an accelerator.
852 852
853 return reserved_actions_.find(iter->second) != reserved_actions_.end(); 853 return reserved_actions_.find(iter->second) != reserved_actions_.end();
854 } 854 }
855 855
856 bool AcceleratorController::PerformAction(int action, 856 bool AcceleratorController::PerformAction(int action,
857 const ui::Accelerator& accelerator) { 857 const ui::Accelerator& accelerator) {
858 ash::Shell* shell = ash::Shell::GetInstance(); 858 ash::Shell* shell = ash::Shell::GetInstance();
859 if (!shell->session_state_delegate()->IsActiveUserSessionStarted() && 859 AcceleratorProcessingRestriction restriction =
860 actions_allowed_at_login_screen_.find(action) == 860 GetAcceleratorProcessingRestriction(action);
861 actions_allowed_at_login_screen_.end()) { 861 if (restriction != RESTRICTION_NONE)
862 return false; 862 return restriction == RESTRICTION_PREVENT_PROCESSING_AND_PROPAGATION;
863 }
864 if (shell->session_state_delegate()->IsScreenLocked() &&
865 actions_allowed_at_lock_screen_.find(action) ==
866 actions_allowed_at_lock_screen_.end()) {
867 return false;
868 }
869 if (shell->IsSystemModalWindowOpen() &&
870 actions_allowed_at_modal_window_.find(action) ==
871 actions_allowed_at_modal_window_.end()) {
872 // Note: we return true. This indicates the shortcut is handled
873 // and will not be passed to the modal window. This is important
874 // for things like Alt+Tab that would cause an undesired effect
875 // in the modal window by cycling through its window elements.
876 return true;
877 }
878 if (shell->delegate()->IsRunningInForcedAppMode() &&
879 actions_allowed_in_app_mode_.find(action) ==
880 actions_allowed_in_app_mode_.end()) {
881 return false;
882 }
883 if (MruWindowTracker::BuildWindowList(false).empty() &&
884 actions_needing_window_.find(action) != actions_needing_window_.end()) {
885 Shell::GetInstance()->accessibility_delegate()->TriggerAccessibilityAlert(
886 A11Y_ALERT_WINDOW_NEEDED);
887 return true;
888 }
889 863
890 const ui::KeyboardCode key_code = accelerator.key_code(); 864 const ui::KeyboardCode key_code = accelerator.key_code();
891 // PerformAction() is performed from gesture controllers and passes 865 // PerformAction() is performed from gesture controllers and passes
892 // empty Accelerator() instance as the second argument. Such events 866 // empty Accelerator() instance as the second argument. Such events
893 // should never be suspended. 867 // should never be suspended.
894 const bool gesture_event = key_code == ui::VKEY_UNKNOWN; 868 const bool gesture_event = key_code == ui::VKEY_UNKNOWN;
895 // Ignore accelerators invoked as repeated (while holding a key for a long 869 // Ignore accelerators invoked as repeated (while holding a key for a long
896 // time, if their handling is nonrepeatable. 870 // time, if their handling is nonrepeatable.
897 if (nonrepeatable_actions_.find(action) != nonrepeatable_actions_.end() && 871 if (nonrepeatable_actions_.find(action) != nonrepeatable_actions_.end() &&
898 accelerator.IsRepeat() && !gesture_event) { 872 accelerator.IsRepeat() && !gesture_event) {
(...skipping 236 matching lines...) Expand 10 before | Expand all | Expand 10 after
1135 case PRINT_VIEW_HIERARCHY: 1109 case PRINT_VIEW_HIERARCHY:
1136 return HandlePrintViewHierarchy(); 1110 return HandlePrintViewHierarchy();
1137 case PRINT_WINDOW_HIERARCHY: 1111 case PRINT_WINDOW_HIERARCHY:
1138 return HandlePrintWindowHierarchy(); 1112 return HandlePrintWindowHierarchy();
1139 default: 1113 default:
1140 NOTREACHED() << "Unhandled action " << action; 1114 NOTREACHED() << "Unhandled action " << action;
1141 } 1115 }
1142 return false; 1116 return false;
1143 } 1117 }
1144 1118
1119 AcceleratorController::AcceleratorProcessingRestriction
1120 AcceleratorController::GetCurrentAcceleratorRestriction() {
1121 return GetAcceleratorProcessingRestriction(-1);
1122 }
1123
1124 AcceleratorController::AcceleratorProcessingRestriction
1125 AcceleratorController::GetAcceleratorProcessingRestriction(int action) {
1126 ash::Shell* shell = ash::Shell::GetInstance();
1127 if (!shell->session_state_delegate()->IsActiveUserSessionStarted() &&
1128 actions_allowed_at_login_screen_.find(action) ==
1129 actions_allowed_at_login_screen_.end()) {
1130 return RESTRICTION_PREVENT_PROCESSING;
1131 }
1132 if (shell->session_state_delegate()->IsScreenLocked() &&
1133 actions_allowed_at_lock_screen_.find(action) ==
1134 actions_allowed_at_lock_screen_.end()) {
1135 return RESTRICTION_PREVENT_PROCESSING;
1136 }
1137 if (shell->IsSystemModalWindowOpen() &&
1138 actions_allowed_at_modal_window_.find(action) ==
1139 actions_allowed_at_modal_window_.end()) {
1140 // Note we prevent the shortcut from propagating so it will not
1141 // be passed to the modal window. This is important for things like
1142 // Alt+Tab that would cause an undesired effect in the modal window by
1143 // cycling through its window elements.
1144 return RESTRICTION_PREVENT_PROCESSING_AND_PROPAGATION;
1145 }
1146 if (shell->delegate()->IsRunningInForcedAppMode() &&
1147 actions_allowed_in_app_mode_.find(action) ==
1148 actions_allowed_in_app_mode_.end()) {
1149 return RESTRICTION_PREVENT_PROCESSING;
1150 }
1151 if (MruWindowTracker::BuildWindowList(false).empty() &&
1152 actions_needing_window_.find(action) != actions_needing_window_.end()) {
1153 Shell::GetInstance()->accessibility_delegate()->TriggerAccessibilityAlert(
1154 A11Y_ALERT_WINDOW_NEEDED);
1155 return RESTRICTION_PREVENT_PROCESSING_AND_PROPAGATION;
1156 }
1157 return RESTRICTION_NONE;
1158 }
1159
1145 void AcceleratorController::SetBrightnessControlDelegate( 1160 void AcceleratorController::SetBrightnessControlDelegate(
1146 scoped_ptr<BrightnessControlDelegate> brightness_control_delegate) { 1161 scoped_ptr<BrightnessControlDelegate> brightness_control_delegate) {
1147 brightness_control_delegate_ = brightness_control_delegate.Pass(); 1162 brightness_control_delegate_ = brightness_control_delegate.Pass();
1148 } 1163 }
1149 1164
1150 void AcceleratorController::SetImeControlDelegate( 1165 void AcceleratorController::SetImeControlDelegate(
1151 scoped_ptr<ImeControlDelegate> ime_control_delegate) { 1166 scoped_ptr<ImeControlDelegate> ime_control_delegate) {
1152 ime_control_delegate_ = ime_control_delegate.Pass(); 1167 ime_control_delegate_ = ime_control_delegate.Pass();
1153 } 1168 }
1154 1169
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
1187 keyboard_brightness_control_delegate) { 1202 keyboard_brightness_control_delegate) {
1188 keyboard_brightness_control_delegate_ = 1203 keyboard_brightness_control_delegate_ =
1189 keyboard_brightness_control_delegate.Pass(); 1204 keyboard_brightness_control_delegate.Pass();
1190 } 1205 }
1191 1206
1192 bool AcceleratorController::CanHandleAccelerators() const { 1207 bool AcceleratorController::CanHandleAccelerators() const {
1193 return true; 1208 return true;
1194 } 1209 }
1195 1210
1196 } // namespace ash 1211 } // namespace ash
OLDNEW
« no previous file with comments | « ash/accelerators/accelerator_controller.h ('k') | chrome/browser/extensions/api/commands/command_service.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698