diff options
Diffstat (limited to 'chrome/browser')
-rw-r--r-- | chrome/browser/external_tab_container.cc | 45 | ||||
-rw-r--r-- | chrome/browser/external_tab_container.h | 14 | ||||
-rw-r--r-- | chrome/browser/tab_contents/tab_contents_delegate.h | 8 | ||||
-rw-r--r-- | chrome/browser/views/tab_contents/tab_contents_view_win.cc | 5 |
4 files changed, 47 insertions, 25 deletions
diff --git a/chrome/browser/external_tab_container.cc b/chrome/browser/external_tab_container.cc index 732aead..a2d71b5 100644 --- a/chrome/browser/external_tab_container.cc +++ b/chrome/browser/external_tab_container.cc @@ -299,6 +299,14 @@ bool ExternalTabContainer::ExecuteContextMenuCommand(int command) { return true; } +bool ExternalTabContainer::HandleKeyboardEvent( + const NativeWebKeyboardEvent& event) { + return ProcessUnhandledKeyStroke(event.os_event.hwnd, + event.os_event.message, + event.os_event.wParam, + event.os_event.lParam); +} + //////////////////////////////////////////////////////////////////////////////// // ExternalTabContainer, NotificationObserver implementation: @@ -392,10 +400,25 @@ void ExternalTabContainer::OnDestroy() { } //////////////////////////////////////////////////////////////////////////////// -// ExternalTabContainer, views::KeystrokeListener implementation: +// ExternalTabContainer, private: + +void ExternalTabContainer::Uninitialize(HWND window) { + registrar_.RemoveAll(); + if (tab_contents_) { + NotificationService::current()->Notify( + NotificationType::EXTERNAL_TAB_CLOSED, + Source<NavigationController>(&tab_contents_->controller()), + Details<ExternalTabContainer>(this)); + + delete tab_contents_; + tab_contents_ = NULL; + } +} -bool ExternalTabContainer::ProcessKeyStroke(HWND window, UINT message, - WPARAM wparam, LPARAM lparam) { +bool ExternalTabContainer::ProcessUnhandledKeyStroke(HWND window, + UINT message, + WPARAM wparam, + LPARAM lparam) { if (!automation_) { return false; } @@ -430,19 +453,3 @@ bool ExternalTabContainer::ProcessKeyStroke(HWND window, UINT message, return false; } - -//////////////////////////////////////////////////////////////////////////////// -// ExternalTabContainer, private: - -void ExternalTabContainer::Uninitialize(HWND window) { - registrar_.RemoveAll(); - if (tab_contents_) { - NotificationService::current()->Notify( - NotificationType::EXTERNAL_TAB_CLOSED, - Source<NavigationController>(&tab_contents_->controller()), - Details<ExternalTabContainer>(this)); - - delete tab_contents_; - tab_contents_ = NULL; - } -} diff --git a/chrome/browser/external_tab_container.h b/chrome/browser/external_tab_container.h index e69283c..d40a0f4 100644 --- a/chrome/browser/external_tab_container.h +++ b/chrome/browser/external_tab_container.h @@ -25,8 +25,7 @@ class RenderViewContextMenuExternalWin; // TODO(beng): Should override WidgetWin instead of Widget. class ExternalTabContainer : public TabContentsDelegate, public NotificationObserver, - public views::WidgetWin, - public views::KeystrokeListener { + public views::WidgetWin { public: ExternalTabContainer(AutomationProvider* automation, AutomationResourceMessageFilter* filter); @@ -89,6 +88,8 @@ class ExternalTabContainer : public TabContentsDelegate, return true; }; + virtual bool HandleKeyboardEvent(const NativeWebKeyboardEvent& event); + virtual bool TakeFocus(bool reverse); // Overridden from NotificationObserver: @@ -96,10 +97,6 @@ class ExternalTabContainer : public TabContentsDelegate, const NotificationSource& source, const NotificationDetails& details); - // Overridden from views::KeystrokeListener: - virtual bool ProcessKeyStroke(HWND window, UINT message, WPARAM wparam, - LPARAM lparam); - // Handles the context menu display operation. This allows external // hosts to customize the menu. virtual bool HandleContextMenu(const ContextMenuParams& params); @@ -119,6 +116,11 @@ class ExternalTabContainer : public TabContentsDelegate, // 2. In the destructor. void Uninitialize(HWND window); + // Helper function for processing keystokes coming back from the renderer + // process. + bool ProcessUnhandledKeyStroke(HWND window, UINT message, WPARAM wparam, + LPARAM lparam); + TabContents* tab_contents_; scoped_refptr<AutomationProvider> automation_; diff --git a/chrome/browser/tab_contents/tab_contents_delegate.h b/chrome/browser/tab_contents/tab_contents_delegate.h index b93de6e..b00f31f 100644 --- a/chrome/browser/tab_contents/tab_contents_delegate.h +++ b/chrome/browser/tab_contents/tab_contents_delegate.h @@ -8,6 +8,7 @@ #include "base/basictypes.h" #include "base/gfx/native_widget_types.h" #include "base/gfx/rect.h" +#include "chrome/common/native_web_keyboard_event.h" #include "chrome/common/page_transition_types.h" #include "chrome/common/renderer_preferences.h" #include "webkit/glue/context_menu.h" @@ -205,6 +206,13 @@ class TabContentsDelegate { Profile* profile) { } + // Allows delegates to handle unhandled keyboard messages coming back from + // the renderer. + // Returns true if the keyboard message was handled. + virtual bool HandleKeyboardEvent(const NativeWebKeyboardEvent& event) { + return false; + } + protected: ~TabContentsDelegate() {} RendererPreferences renderer_preferences_; diff --git a/chrome/browser/views/tab_contents/tab_contents_view_win.cc b/chrome/browser/views/tab_contents/tab_contents_view_win.cc index 7b6aabb..543cff4 100644 --- a/chrome/browser/views/tab_contents/tab_contents_view_win.cc +++ b/chrome/browser/views/tab_contents/tab_contents_view_win.cc @@ -421,6 +421,11 @@ void TabContentsViewWin::HandleKeyboardEvent( } } + if (tab_contents()->delegate() && + tab_contents()->delegate()->HandleKeyboardEvent(event)) { + return; + } + // Any unhandled keyboard/character messages should be defproced. // This allows stuff like Alt+F4, etc to work correctly. DefWindowProc(event.os_event.hwnd, |