summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--chrome/browser/ui/views/frame/browser_view.cc4
-rw-r--r--chrome/browser/ui/views/html_dialog_view.cc5
-rw-r--r--chrome/browser/ui/views/keyboard_overlay_delegate.cc23
-rw-r--r--chrome/browser/ui/views/keyboard_overlay_delegate.h4
-rw-r--r--chrome/browser/ui/views/keyboard_overlay_dialog_view.cc118
-rw-r--r--chrome/browser/ui/views/keyboard_overlay_dialog_view.h48
-rw-r--r--chrome/chrome_browser.gypi5
7 files changed, 175 insertions, 32 deletions
diff --git a/chrome/browser/ui/views/frame/browser_view.cc b/chrome/browser/ui/views/frame/browser_view.cc
index b7c7662..3b8d045 100644
--- a/chrome/browser/ui/views/frame/browser_view.cc
+++ b/chrome/browser/ui/views/frame/browser_view.cc
@@ -103,7 +103,7 @@
#endif
#if defined(OS_CHROMEOS)
-#include "chrome/browser/ui/views/keyboard_overlay_delegate.h"
+#include "chrome/browser/ui/views/keyboard_overlay_dialog_view.h"
#endif
using base::TimeDelta;
@@ -1186,7 +1186,7 @@ gfx::Rect BrowserView::GetInstantBounds() {
#if defined(OS_CHROMEOS)
void BrowserView::ShowKeyboardOverlay(gfx::NativeWindow owning_window) {
- KeyboardOverlayDelegate::ShowDialog(owning_window);
+ KeyboardOverlayDialogView::ShowDialog(owning_window, this);
}
#endif
diff --git a/chrome/browser/ui/views/html_dialog_view.cc b/chrome/browser/ui/views/html_dialog_view.cc
index b922217..3887b6d 100644
--- a/chrome/browser/ui/views/html_dialog_view.cc
+++ b/chrome/browser/ui/views/html_dialog_view.cc
@@ -59,9 +59,8 @@ gfx::Size HtmlDialogView::GetPreferredSize() {
}
bool HtmlDialogView::AcceleratorPressed(const views::Accelerator& accelerator) {
- // Pressing Esc, Ctrl+Alt+/, or Ctrl+Alt+? closes the keyboard overlay.
- DCHECK(ui::VKEY_ESCAPE == accelerator.GetKeyCode() ||
- ui::VKEY_OEM_2 == accelerator.GetKeyCode());
+ // Pressing ESC closes the dialog.
+ DCHECK_EQ(ui::VKEY_ESCAPE, accelerator.GetKeyCode());
OnDialogClosed(std::string());
return true;
}
diff --git a/chrome/browser/ui/views/keyboard_overlay_delegate.cc b/chrome/browser/ui/views/keyboard_overlay_delegate.cc
index e12c75e..8d0f4ad 100644
--- a/chrome/browser/ui/views/keyboard_overlay_delegate.cc
+++ b/chrome/browser/ui/views/keyboard_overlay_delegate.cc
@@ -8,9 +8,6 @@
#include "base/memory/scoped_ptr.h"
#include "base/utf_string_conversions.h"
-#include "chrome/browser/chromeos/frame/bubble_window.h"
-#include "chrome/browser/ui/browser.h"
-#include "chrome/browser/ui/browser_list.h"
#include "chrome/browser/ui/views/html_dialog_view.h"
#include "chrome/browser/ui/webui/html_dialog_ui.h"
#include "chrome/common/url_constants.h"
@@ -23,26 +20,6 @@ static const int kBaseWidth = 1252;
static const int kBaseHeight = 516;
static const int kHorizontalMargin = 28;
-void KeyboardOverlayDelegate::ShowDialog(gfx::NativeWindow owning_window) {
- Browser* browser = BrowserList::GetLastActive();
- KeyboardOverlayDelegate* delegate = new KeyboardOverlayDelegate(
- UTF16ToWide(l10n_util::GetStringUTF16(IDS_KEYBOARD_OVERLAY_TITLE)));
- HtmlDialogView* html_view =
- new HtmlDialogView(browser->profile(), delegate);
- delegate->set_view(html_view);
- html_view->InitDialog();
- html_view->AddAccelerator(
- views::Accelerator(ui::VKEY_OEM_2, false, true, true));
- html_view->AddAccelerator(
- views::Accelerator(ui::VKEY_OEM_2, true, true, true));
-
- chromeos::BubbleWindow::Create(owning_window,
- gfx::Rect(),
- chromeos::BubbleWindow::STYLE_XSHAPE,
- html_view);
- html_view->window()->Show();
-}
-
KeyboardOverlayDelegate::KeyboardOverlayDelegate(
const std::wstring& title)
: title_(title),
diff --git a/chrome/browser/ui/views/keyboard_overlay_delegate.h b/chrome/browser/ui/views/keyboard_overlay_delegate.h
index bb48638..207f69b 100644
--- a/chrome/browser/ui/views/keyboard_overlay_delegate.h
+++ b/chrome/browser/ui/views/keyboard_overlay_delegate.h
@@ -6,7 +6,6 @@
#define CHROME_BROWSER_UI_VIEWS_KEYBOARD_OVERLAY_DELEGATE_H_
#include "chrome/browser/ui/webui/html_dialog_ui.h"
-#include "ui/gfx/native_widget_types.h"
class HtmlDialogView;
@@ -15,9 +14,6 @@ class KeyboardOverlayDelegate : public HtmlDialogUIDelegate {
public:
explicit KeyboardOverlayDelegate(const std::wstring& title);
- // Shows the keyboard overlay dialog box.
- static void ShowDialog(gfx::NativeWindow owning_window);
-
void set_view(HtmlDialogView* html_view) {
view_ = html_view;
}
diff --git a/chrome/browser/ui/views/keyboard_overlay_dialog_view.cc b/chrome/browser/ui/views/keyboard_overlay_dialog_view.cc
new file mode 100644
index 0000000..659dfec
--- /dev/null
+++ b/chrome/browser/ui/views/keyboard_overlay_dialog_view.cc
@@ -0,0 +1,118 @@
+// Copyright (c) 2011 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "chrome/browser/ui/views/keyboard_overlay_dialog_view.h"
+
+#include "chrome/browser/chromeos/frame/bubble_window.h"
+#include "chrome/browser/ui/browser_dialogs.h"
+#include "chrome/browser/ui/views/accelerator_table_gtk.h"
+#include "chrome/browser/ui/views/frame/browser_view.h"
+#include "chrome/browser/ui/views/keyboard_overlay_delegate.h"
+#include "chrome/browser/ui/views/window.h"
+#include "content/browser/tab_contents/tab_contents.h"
+#include "content/common/native_web_keyboard_event.h"
+#include "grit/generated_resources.h"
+#include "ui/base/keycodes/keyboard_codes.h"
+#include "ui/base/l10n/l10n_util.h"
+#include "views/events/event.h"
+#include "views/widget/root_view.h"
+#include "views/widget/widget.h"
+#include "views/window/window.h"
+
+#if defined(OS_LINUX)
+#include "views/window/window_gtk.h"
+#endif
+
+namespace {
+struct Accelerator {
+ ui::KeyboardCode keycode;
+ bool shift_pressed;
+ bool ctrl_pressed;
+ bool alt_pressed;
+} kCloseAccelerators[] = {
+ {ui::VKEY_OEM_2, false, true, true},
+ {ui::VKEY_OEM_2, true, true, true},
+ {ui::VKEY_ESCAPE, true, false, false},
+};
+} // namespace
+
+KeyboardOverlayDialogView::KeyboardOverlayDialogView(
+ Profile* profile,
+ HtmlDialogUIDelegate* delegate,
+ BrowserView* parent_view)
+ : HtmlDialogView(profile, delegate),
+ parent_view_(parent_view) {
+}
+
+KeyboardOverlayDialogView::~KeyboardOverlayDialogView() {
+}
+
+void KeyboardOverlayDialogView::InitDialog() {
+ DOMView::Init(profile(), NULL);
+
+ tab_contents_->set_delegate(this);
+
+ // Set the delegate. This must be done before loading the page. See
+ // the comment above HtmlDialogUI in its header file for why.
+ HtmlDialogUI::GetPropertyAccessor().SetProperty(tab_contents_->property_bag(),
+ this);
+
+ for (size_t i = 0; i < arraysize(kCloseAccelerators); ++i) {
+ views::Accelerator accelerator(kCloseAccelerators[i].keycode,
+ kCloseAccelerators[i].shift_pressed,
+ kCloseAccelerators[i].ctrl_pressed,
+ kCloseAccelerators[i].alt_pressed);
+ close_accelerators_.insert(accelerator);
+ AddAccelerator(accelerator);
+ }
+
+ for (size_t i = 0; i < browser::kAcceleratorMapLength; ++i) {
+ views::Accelerator accelerator(browser::kAcceleratorMap[i].keycode,
+ browser::kAcceleratorMap[i].shift_pressed,
+ browser::kAcceleratorMap[i].ctrl_pressed,
+ browser::kAcceleratorMap[i].alt_pressed);
+ // Skip a sole ALT key since it's handled on the keyboard overlay.
+ if (views::Accelerator(ui::VKEY_MENU, false, false, false) == accelerator) {
+ continue;
+ }
+ // Skip accelerators for closing the dialog since they are already added.
+ if (IsCloseAccelerator(accelerator)) {
+ continue;
+ }
+ AddAccelerator(accelerator);
+ }
+
+ DOMView::LoadURL(GetDialogContentURL());
+}
+
+bool KeyboardOverlayDialogView::AcceleratorPressed(
+ const views::Accelerator& accelerator) {
+ if (!IsCloseAccelerator(accelerator)) {
+ parent_view_->AcceleratorPressed(accelerator);
+ }
+ OnDialogClosed(std::string());
+ return true;
+}
+
+void KeyboardOverlayDialogView::ShowDialog(
+ gfx::NativeWindow owning_window, BrowserView* parent_view) {
+ KeyboardOverlayDelegate* delegate = new KeyboardOverlayDelegate(
+ UTF16ToWide(l10n_util::GetStringUTF16(IDS_KEYBOARD_OVERLAY_TITLE)));
+ KeyboardOverlayDialogView* html_view =
+ new KeyboardOverlayDialogView(parent_view->browser()->profile(),
+ delegate,
+ parent_view);
+ delegate->set_view(html_view);
+ html_view->InitDialog();
+ chromeos::BubbleWindow::Create(owning_window,
+ gfx::Rect(),
+ chromeos::BubbleWindow::STYLE_XSHAPE,
+ html_view);
+ html_view->window()->Show();
+}
+
+bool KeyboardOverlayDialogView::IsCloseAccelerator(
+ const views::Accelerator& accelerator) {
+ return close_accelerators_.find(accelerator) != close_accelerators_.end();
+}
diff --git a/chrome/browser/ui/views/keyboard_overlay_dialog_view.h b/chrome/browser/ui/views/keyboard_overlay_dialog_view.h
new file mode 100644
index 0000000..ac5fac2
--- /dev/null
+++ b/chrome/browser/ui/views/keyboard_overlay_dialog_view.h
@@ -0,0 +1,48 @@
+// Copyright (c) 2011 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef CHROME_BROWSER_UI_VIEWS_KEYBOARD_OVERLAY_DIALOG_VIEW_H_
+#define CHROME_BROWSER_UI_VIEWS_KEYBOARD_OVERLAY_DIALOG_VIEW_H_
+#pragma once
+
+#include <set>
+
+#include "chrome/browser/ui/webui/html_dialog_tab_contents_delegate.h"
+#include "chrome/browser/ui/webui/html_dialog_ui.h"
+#include "chrome/browser/ui/views/html_dialog_view.h"
+#include "views/window/window_delegate.h"
+
+class BrowserView;
+
+// A customized dialog view for the keyboard overlay.
+class KeyboardOverlayDialogView : public HtmlDialogView {
+ public:
+ KeyboardOverlayDialogView(Profile* profile,
+ HtmlDialogUIDelegate* delegate,
+ BrowserView* parent_view);
+ virtual ~KeyboardOverlayDialogView();
+
+ // Initializes the contents of the dialog (the DOMView and the callbacks).
+ void InitDialog();
+
+ // Overridden from views::View:
+ virtual bool AcceleratorPressed(const views::Accelerator& accelerator);
+
+ // Shows the keyboard overlay.
+ static void ShowDialog(gfx::NativeWindow owning_window, BrowserView* parent);
+
+ private:
+ // Returns true if |accelerator| is an accelerator for closing the dialog.
+ bool IsCloseAccelerator(const views::Accelerator& accelerator);
+
+ // Points to the view from which this dialog is created.
+ BrowserView* parent_view_;
+
+ // Contains accelerators for closing this dialog.
+ std::set<views::Accelerator> close_accelerators_;
+
+ DISALLOW_COPY_AND_ASSIGN(KeyboardOverlayDialogView);
+};
+
+#endif // CHROME_BROWSER_UI_VIEWS_KEYBOARD_OVERLAY_DIALOG_VIEW_H_
diff --git a/chrome/chrome_browser.gypi b/chrome/chrome_browser.gypi
index a0bfb81..37efe96 100644
--- a/chrome/chrome_browser.gypi
+++ b/chrome/chrome_browser.gypi
@@ -2986,6 +2986,8 @@
'browser/ui/views/js_modal_dialog_views.h',
'browser/ui/views/keyboard_overlay_delegate.cc',
'browser/ui/views/keyboard_overlay_delegate.h',
+ 'browser/ui/views/keyboard_overlay_dialog_view.cc',
+ 'browser/ui/views/keyboard_overlay_dialog_view.h',
'browser/ui/views/local_storage_info_view.cc',
'browser/ui/views/local_storage_info_view.h',
'browser/ui/views/local_storage_set_item_info_view.cc',
@@ -3739,6 +3741,7 @@
'browser/ui/browser_list_stub.cc',
'browser/ui/crypto_module_password_dialog_nss.cc',
'browser/ui/views/keyboard_overlay_delegate.cc',
+ 'browser/ui/views/keyboard_overlay_dialog_view.cc',
'browser/ui/views/select_file_dialog.cc',
],
'conditions': [
@@ -3963,6 +3966,8 @@
['include', '^browser/ui/views/js_modal_dialog_views.h'],
['include', '^browser/ui/views/keyboard_overlay_delegate.cc'],
['include', '^browser/ui/views/keyboard_overlay_delegate.h'],
+ ['include', '^browser/ui/views/keyboard_overlay_dialog_view.cc'],
+ ['include', '^browser/ui/views/keyboard_overlay_dialog_view.h'],
['include', '^browser/ui/views/location_bar/click_handler.cc'],
['include', '^browser/ui/views/location_bar/click_handler.h'],
['include', '^browser/ui/views/location_bar/content_setting_image_view.cc'],