diff options
-rw-r--r-- | chrome/browser/ui/views/frame/browser_view.cc | 4 | ||||
-rw-r--r-- | chrome/browser/ui/views/html_dialog_view.cc | 5 | ||||
-rw-r--r-- | chrome/browser/ui/views/keyboard_overlay_delegate.cc | 23 | ||||
-rw-r--r-- | chrome/browser/ui/views/keyboard_overlay_delegate.h | 4 | ||||
-rw-r--r-- | chrome/browser/ui/views/keyboard_overlay_dialog_view.cc | 118 | ||||
-rw-r--r-- | chrome/browser/ui/views/keyboard_overlay_dialog_view.h | 48 | ||||
-rw-r--r-- | chrome/chrome_browser.gypi | 5 |
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'], |