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 @@
#include "base/metrics/user_metrics.h"
#include "ui/base/accelerators/accelerator.h"
#include "ui/base/accelerators/accelerator_manager.h"
#include "ui/keyboard/keyboard_controller.h"
#if defined(OS_CHROMEOS)
#include "chromeos/dbus/dbus_thread_manager.h"
......@@ -130,6 +131,15 @@ bool CanHandleNextIme(ImeControlDelegate* ime_control_delegate) {
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.
bool ShouldShowDeprecatedNextImeNotification(
const ui::Accelerator& previous_accelerator) {
......@@ -647,6 +657,9 @@ bool AcceleratorController::CanPerformAction(
// false should be returned to give the web contents a chance at handling the
// accelerator.
switch (action) {
case CYCLE_BACKWARD_MRU:
case CYCLE_FORWARD_MRU:
return CanHandleCycleMru(accelerator);
case DEBUG_PRINT_LAYER_HIERARCHY:
case DEBUG_PRINT_VIEW_HIERARCHY:
case DEBUG_PRINT_WINDOW_HIERARCHY:
......@@ -682,8 +695,6 @@ bool AcceleratorController::CanPerformAction(
case TOGGLE_CAPS_LOCK:
return CanHandleToggleCapsLock(accelerator, previous_accelerator);
#endif
case CYCLE_BACKWARD_MRU:
case CYCLE_FORWARD_MRU:
case EXIT:
case FOCUS_NEXT_PANE:
case FOCUS_PREVIOUS_PANE:
......@@ -924,12 +935,12 @@ bool AcceleratorController::ShouldActionConsumeKeyEvent(
AcceleratorController::AcceleratorProcessingRestriction
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_.end()) {
return RESTRICTION_PREVENT_PROCESSING_AND_PROPAGATION;
}
WmShell* wm_shell = WmShell::Get();
if (!wm_shell->GetSessionStateDelegate()->IsActiveUserSessionStarted() &&
actions_allowed_at_login_screen_.find(action) ==
actions_allowed_at_login_screen_.end()) {
......
......@@ -155,7 +155,7 @@ bool ChromeVirtualKeyboardDelegate::SendKeyEvent(const std::string& type,
char_value,
key_code,
key_name,
modifiers,
modifiers | ui::EF_IS_SYNTHESIZED,
window->GetHost());
}
......
......@@ -27,12 +27,11 @@ namespace ui {
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;
const int kEventFlagsWithRepeatMask = ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN |
ui::EF_ALT_DOWN | ui::EF_COMMAND_DOWN |
ui::EF_IS_REPEAT;
const int kInterestingFlagsMask =
kModifierMask | ui::EF_IS_SYNTHESIZED | ui::EF_IS_REPEAT;
} // namespace
......@@ -42,13 +41,13 @@ Accelerator::Accelerator()
Accelerator::Accelerator(KeyboardCode keycode, int modifiers)
: key_code_(keycode),
type_(ui::ET_KEY_PRESSED),
modifiers_(modifiers & kEventFlagsWithRepeatMask) {}
modifiers_(modifiers & kInterestingFlagsMask) {}
Accelerator::Accelerator(const KeyEvent& key_event)
: key_code_(key_event.key_code()),
type_(key_event.type()),
// |modifiers_| may include the repeat flag.
modifiers_(key_event.flags() & kEventFlagsWithRepeatMask) {}
modifiers_(key_event.flags() & kInterestingFlagsMask) {}
Accelerator::Accelerator(const Accelerator& accelerator) {
key_code_ = accelerator.key_code_;
......@@ -63,7 +62,7 @@ Accelerator::~Accelerator() {
// static
int Accelerator::MaskOutKeyEventFlags(int flags) {
return flags & kEventFlagsMask;
return flags & kModifierMask;
}
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