| Index: ash/keyboard_overlay/keyboard_overlay_view.cc
|
| diff --git a/ash/keyboard_overlay/keyboard_overlay_view.cc b/ash/keyboard_overlay/keyboard_overlay_view.cc
|
| index d9a7b6cf615a9b9b1118fe2fbe073b2bdb9e452d..1831dcbff30300a459d8fac536f51e642f60780d 100644
|
| --- a/ash/keyboard_overlay/keyboard_overlay_view.cc
|
| +++ b/ash/keyboard_overlay/keyboard_overlay_view.cc
|
| @@ -5,6 +5,7 @@
|
| #include "ash/keyboard_overlay/keyboard_overlay_view.h"
|
|
|
| #include "ash/keyboard_overlay/keyboard_overlay_delegate.h"
|
| +#include "ash/shell.h"
|
| #include "base/utf_string_conversions.h"
|
| #include "content/public/browser/browser_context.h"
|
| #include "grit/ash_strings.h"
|
| @@ -16,8 +17,17 @@
|
| using ui::WebDialogDelegate;
|
|
|
| namespace {
|
| -// Store the pointer to the view currently shown.
|
| -KeyboardOverlayView* g_instance = NULL;
|
| +
|
| +// Keys to invoke Cancel (Escape, Ctrl+Alt+/, or Shift+Ctrl+Alt+/).
|
| +const struct KeyEventData {
|
| + ui::KeyboardCode key_code;
|
| + int flags;
|
| +} kCancelKeys[] = {
|
| + { ui::VKEY_ESCAPE, 0},
|
| + { ui::VKEY_OEM_2, ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN },
|
| + { ui::VKEY_OEM_2, ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN },
|
| +};
|
| +
|
| }
|
|
|
| KeyboardOverlayView::KeyboardOverlayView(
|
| @@ -30,23 +40,41 @@ KeyboardOverlayView::KeyboardOverlayView(
|
| KeyboardOverlayView::~KeyboardOverlayView() {
|
| }
|
|
|
| +void KeyboardOverlayView::Cancel() {
|
| + ash::Shell::GetInstance()->overlay_filter()->Deactivate();
|
| + views::Widget* widget = GetWidget();
|
| + if (widget)
|
| + widget->Close();
|
| +}
|
| +
|
| +bool KeyboardOverlayView::IsCancelingKeyEvent(aura::KeyEvent* event) {
|
| + if (event->type() != ui::ET_KEY_PRESSED)
|
| + return false;
|
| + for (size_t i = 0; i < arraysize(kCancelKeys); ++i) {
|
| + if ((kCancelKeys[i].key_code == event->key_code()) &&
|
| + (kCancelKeys[i].flags == event->flags()))
|
| + return true;
|
| + }
|
| + return false;
|
| +}
|
| +
|
| +aura::Window* KeyboardOverlayView::GetWindow() {
|
| + return GetWidget()->GetNativeWindow();
|
| +}
|
| +
|
| void KeyboardOverlayView::ShowDialog(
|
| content::BrowserContext* context,
|
| WebContentsHandler* handler,
|
| const GURL& url) {
|
| - // Ignore the call if another view is already shown.
|
| - if (g_instance)
|
| - return;
|
| -
|
| KeyboardOverlayDelegate* delegate = new KeyboardOverlayDelegate(
|
| l10n_util::GetStringUTF16(IDS_ASH_KEYBOARD_OVERLAY_TITLE), url);
|
| KeyboardOverlayView* view =
|
| new KeyboardOverlayView(context, delegate, handler);
|
| delegate->Show(view);
|
|
|
| - g_instance = view;
|
| + ash::Shell::GetInstance()->overlay_filter()->Activate(view);
|
| }
|
|
|
| void KeyboardOverlayView::WindowClosing() {
|
| - g_instance = NULL;
|
| + Cancel();
|
| }
|
|
|