Commit 252dbee7 authored by estade's avatar estade Committed by Commit bot

Refuse to show Alt+Tab UI concurrently with virtual keyboard.

Overview mode is probably more useful to people who are trying to use
a touch screen. Simply no-op on Alt+Tab when the virtual
keyboard's showing.

BUG=638269

Review-Url: https://codereview.chromium.org/2256283003
Cr-Commit-Position: refs/heads/master@{#414731}
parent 9b55e054
...@@ -33,6 +33,7 @@ ...@@ -33,6 +33,7 @@
#include "base/metrics/user_metrics.h" #include "base/metrics/user_metrics.h"
#include "ui/base/accelerators/accelerator.h" #include "ui/base/accelerators/accelerator.h"
#include "ui/base/accelerators/accelerator_manager.h" #include "ui/base/accelerators/accelerator_manager.h"
#include "ui/keyboard/keyboard_controller.h"
#if defined(OS_CHROMEOS) #if defined(OS_CHROMEOS)
#include "chromeos/dbus/dbus_thread_manager.h" #include "chromeos/dbus/dbus_thread_manager.h"
...@@ -130,6 +131,15 @@ bool CanHandleNextIme(ImeControlDelegate* ime_control_delegate) { ...@@ -130,6 +131,15 @@ bool CanHandleNextIme(ImeControlDelegate* ime_control_delegate) {
return ime_control_delegate && ime_control_delegate->CanCycleIme(); return ime_control_delegate && ime_control_delegate->CanCycleIme();
} }
bool CanHandleCycleMru(const ui::Accelerator& accelerator) {
// Don't do anything when Alt+Tab comes from a virtual keyboard. Touchscreen
// users have better window switching options. See http://crbug.com/638269
keyboard::KeyboardController* keyboard_controller =
keyboard::KeyboardController::GetInstance();
return !(keyboard_controller && keyboard_controller->keyboard_visible() &&
(accelerator.modifiers() & ui::EF_IS_SYNTHESIZED));
}
// We must avoid showing the Deprecated NEXT_IME notification erronously. // We must avoid showing the Deprecated NEXT_IME notification erronously.
bool ShouldShowDeprecatedNextImeNotification( bool ShouldShowDeprecatedNextImeNotification(
const ui::Accelerator& previous_accelerator) { const ui::Accelerator& previous_accelerator) {
...@@ -647,6 +657,9 @@ bool AcceleratorController::CanPerformAction( ...@@ -647,6 +657,9 @@ bool AcceleratorController::CanPerformAction(
// false should be returned to give the web contents a chance at handling the // false should be returned to give the web contents a chance at handling the
// accelerator. // accelerator.
switch (action) { switch (action) {
case CYCLE_BACKWARD_MRU:
case CYCLE_FORWARD_MRU:
return CanHandleCycleMru(accelerator);
case DEBUG_PRINT_LAYER_HIERARCHY: case DEBUG_PRINT_LAYER_HIERARCHY:
case DEBUG_PRINT_VIEW_HIERARCHY: case DEBUG_PRINT_VIEW_HIERARCHY:
case DEBUG_PRINT_WINDOW_HIERARCHY: case DEBUG_PRINT_WINDOW_HIERARCHY:
...@@ -682,8 +695,6 @@ bool AcceleratorController::CanPerformAction( ...@@ -682,8 +695,6 @@ bool AcceleratorController::CanPerformAction(
case TOGGLE_CAPS_LOCK: case TOGGLE_CAPS_LOCK:
return CanHandleToggleCapsLock(accelerator, previous_accelerator); return CanHandleToggleCapsLock(accelerator, previous_accelerator);
#endif #endif
case CYCLE_BACKWARD_MRU:
case CYCLE_FORWARD_MRU:
case EXIT: case EXIT:
case FOCUS_NEXT_PANE: case FOCUS_NEXT_PANE:
case FOCUS_PREVIOUS_PANE: case FOCUS_PREVIOUS_PANE:
...@@ -924,12 +935,12 @@ bool AcceleratorController::ShouldActionConsumeKeyEvent( ...@@ -924,12 +935,12 @@ bool AcceleratorController::ShouldActionConsumeKeyEvent(
AcceleratorController::AcceleratorProcessingRestriction AcceleratorController::AcceleratorProcessingRestriction
AcceleratorController::GetAcceleratorProcessingRestriction(int action) { AcceleratorController::GetAcceleratorProcessingRestriction(int action) {
if (WmShell::Get()->IsPinned() && WmShell* wm_shell = WmShell::Get();
if (wm_shell->IsPinned() &&
actions_allowed_in_pinned_mode_.find(action) == actions_allowed_in_pinned_mode_.find(action) ==
actions_allowed_in_pinned_mode_.end()) { actions_allowed_in_pinned_mode_.end()) {
return RESTRICTION_PREVENT_PROCESSING_AND_PROPAGATION; return RESTRICTION_PREVENT_PROCESSING_AND_PROPAGATION;
} }
WmShell* wm_shell = WmShell::Get();
if (!wm_shell->GetSessionStateDelegate()->IsActiveUserSessionStarted() && if (!wm_shell->GetSessionStateDelegate()->IsActiveUserSessionStarted() &&
actions_allowed_at_login_screen_.find(action) == actions_allowed_at_login_screen_.find(action) ==
actions_allowed_at_login_screen_.end()) { actions_allowed_at_login_screen_.end()) {
......
...@@ -155,7 +155,7 @@ bool ChromeVirtualKeyboardDelegate::SendKeyEvent(const std::string& type, ...@@ -155,7 +155,7 @@ bool ChromeVirtualKeyboardDelegate::SendKeyEvent(const std::string& type,
char_value, char_value,
key_code, key_code,
key_name, key_name,
modifiers, modifiers | ui::EF_IS_SYNTHESIZED,
window->GetHost()); window->GetHost());
} }
......
...@@ -27,12 +27,11 @@ namespace ui { ...@@ -27,12 +27,11 @@ namespace ui {
namespace { namespace {
const int kEventFlagsMask = ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN | const int kModifierMask = ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN |
ui::EF_ALT_DOWN | ui::EF_COMMAND_DOWN; ui::EF_ALT_DOWN | ui::EF_COMMAND_DOWN;
const int kEventFlagsWithRepeatMask = ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN | const int kInterestingFlagsMask =
ui::EF_ALT_DOWN | ui::EF_COMMAND_DOWN | kModifierMask | ui::EF_IS_SYNTHESIZED | ui::EF_IS_REPEAT;
ui::EF_IS_REPEAT;
} // namespace } // namespace
...@@ -42,13 +41,13 @@ Accelerator::Accelerator() ...@@ -42,13 +41,13 @@ Accelerator::Accelerator()
Accelerator::Accelerator(KeyboardCode keycode, int modifiers) Accelerator::Accelerator(KeyboardCode keycode, int modifiers)
: key_code_(keycode), : key_code_(keycode),
type_(ui::ET_KEY_PRESSED), type_(ui::ET_KEY_PRESSED),
modifiers_(modifiers & kEventFlagsWithRepeatMask) {} modifiers_(modifiers & kInterestingFlagsMask) {}
Accelerator::Accelerator(const KeyEvent& key_event) Accelerator::Accelerator(const KeyEvent& key_event)
: key_code_(key_event.key_code()), : key_code_(key_event.key_code()),
type_(key_event.type()), type_(key_event.type()),
// |modifiers_| may include the repeat flag. // |modifiers_| may include the repeat flag.
modifiers_(key_event.flags() & kEventFlagsWithRepeatMask) {} modifiers_(key_event.flags() & kInterestingFlagsMask) {}
Accelerator::Accelerator(const Accelerator& accelerator) { Accelerator::Accelerator(const Accelerator& accelerator) {
key_code_ = accelerator.key_code_; key_code_ = accelerator.key_code_;
...@@ -63,7 +62,7 @@ Accelerator::~Accelerator() { ...@@ -63,7 +62,7 @@ Accelerator::~Accelerator() {
// static // static
int Accelerator::MaskOutKeyEventFlags(int flags) { int Accelerator::MaskOutKeyEventFlags(int flags) {
return flags & kEventFlagsMask; return flags & kModifierMask;
} }
Accelerator& Accelerator::operator=(const Accelerator& accelerator) { Accelerator& Accelerator::operator=(const Accelerator& accelerator) {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment