summaryrefslogtreecommitdiffstats
path: root/chrome/browser
diff options
context:
space:
mode:
Diffstat (limited to 'chrome/browser')
-rw-r--r--chrome/browser/external_tab_container.cc45
-rw-r--r--chrome/browser/external_tab_container.h14
-rw-r--r--chrome/browser/tab_contents/tab_contents_delegate.h8
-rw-r--r--chrome/browser/views/tab_contents/tab_contents_view_win.cc5
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,