Skip to content

Instantly share code, notes, and snippets.

@mblsha
Created October 20, 2016 12:54
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save mblsha/d3ddab85dfff543efe8d4b808ae203aa to your computer and use it in GitHub Desktop.
Save mblsha/d3ddab85dfff543efe8d4b808ae203aa to your computer and use it in GitHub Desktop.
Patching UnhandledKeyboardEventHandler::HandleNativeKeyboardEvent to direct events to BrowserFrame.
diff --git a/chrome/browser/ui/views/frame/browser_frame.cc b/chrome/browser/ui/views/frame/browser_frame.cc
index a0c3e14..f82f467 100644
--- a/chrome/browser/ui/views/frame/browser_frame.cc
+++ b/chrome/browser/ui/views/frame/browser_frame.cc
@@ -171,9 +171,8 @@ bool BrowserFrame::PreHandleKeyboardEvent(
return native_browser_frame_->PreHandleKeyboardEvent(event);
}
-bool BrowserFrame::HandleKeyboardEvent(
- const content::NativeWebKeyboardEvent& event) {
- return native_browser_frame_->HandleKeyboardEvent(event);
+bool BrowserFrame::HandleNativeKeyboardEvent(gfx::NativeEvent event) {
+ return native_browser_frame_->HandleNativeKeyboardEvent(event);
}
void BrowserFrame::OnBrowserViewInitViewsComplete() {
diff --git a/chrome/browser/ui/views/frame/browser_frame.h b/chrome/browser/ui/views/frame/browser_frame.h
index d1cb212..3a4fc59 100644
--- a/chrome/browser/ui/views/frame/browser_frame.h
+++ b/chrome/browser/ui/views/frame/browser_frame.h
@@ -105,7 +105,7 @@ class BrowserFrame
bool PreHandleKeyboardEvent(const content::NativeWebKeyboardEvent& event);
// Returns true if the |event| was handled by the platform implementation.
- bool HandleKeyboardEvent(const content::NativeWebKeyboardEvent& event);
+ bool HandleNativeKeyboardEvent(gfx::NativeEvent event);
// Called when BrowserView creates all it's child views.
void OnBrowserViewInitViewsComplete();
diff --git a/chrome/browser/ui/views/frame/browser_frame_mac.h b/chrome/browser/ui/views/frame/browser_frame_mac.h
index eefb271..a28f4af 100644
--- a/chrome/browser/ui/views/frame/browser_frame_mac.h
+++ b/chrome/browser/ui/views/frame/browser_frame_mac.h
@@ -37,8 +37,7 @@ class BrowserFrameMac : public views::NativeWidgetMac,
ui::WindowShowState* show_state) const override;
bool PreHandleKeyboardEvent(
const content::NativeWebKeyboardEvent& event) override;
- bool HandleKeyboardEvent(
- const content::NativeWebKeyboardEvent& event) override;
+ bool HandleNativeKeyboardEvent(gfx::NativeEvent event) override;
protected:
~BrowserFrameMac() override;
diff --git a/chrome/browser/ui/views/frame/browser_frame_mac.mm b/chrome/browser/ui/views/frame/browser_frame_mac.mm
index 3822eed..751e054 100644
--- a/chrome/browser/ui/views/frame/browser_frame_mac.mm
+++ b/chrome/browser/ui/views/frame/browser_frame_mac.mm
@@ -183,6 +183,8 @@ void BrowserFrameMac::GetWindowPlacement(
return NativeWidgetMac::GetWindowPlacement(bounds, show_state);
}
+// On Cocoa we have three additional global shortcut tables that couldn't be
+// migrated to accelerator_table.cc (crbug.com/25946).
bool BrowserFrameMac::PreHandleKeyboardEvent(
const content::NativeWebKeyboardEvent& event) {
if (!ShouldHandleKeyboardEvent(event))
@@ -203,10 +205,9 @@ bool BrowserFrameMac::PreHandleKeyboardEvent(
return HandleExtraKeyboardShortcut(event.os_event, browser);
}
-bool BrowserFrameMac::HandleKeyboardEvent(
- const content::NativeWebKeyboardEvent& event) {
- if (!ShouldHandleKeyboardEvent(event))
+bool BrowserFrameMac::HandleNativeKeyboardEvent(gfx::NativeEvent event) {
+ if ([event type] != NSKeyDown)
return false;
- return HandleExtraKeyboardShortcut(event.os_event, browser_view_->browser());
+ return HandleExtraKeyboardShortcut(event, browser_view_->browser());
}
diff --git a/chrome/browser/ui/views/frame/browser_view.cc b/chrome/browser/ui/views/frame/browser_view.cc
index 8ea66f9..dbb2117 100644
--- a/chrome/browser/ui/views/frame/browser_view.cc
+++ b/chrome/browser/ui/views/frame/browser_view.cc
@@ -1457,9 +1457,6 @@ bool BrowserView::PreHandleKeyboardEvent(const NativeWebKeyboardEvent& event,
}
void BrowserView::HandleKeyboardEvent(const NativeWebKeyboardEvent& event) {
- if (frame_->HandleKeyboardEvent(event))
- return;
-
unhandled_keyboard_event_handler_.HandleKeyboardEvent(event,
GetFocusManager());
}
diff --git a/chrome/browser/ui/views/frame/native_browser_frame.h b/chrome/browser/ui/views/frame/native_browser_frame.h
index cf40960..ee85aa2 100644
--- a/chrome/browser/ui/views/frame/native_browser_frame.h
+++ b/chrome/browser/ui/views/frame/native_browser_frame.h
@@ -46,8 +46,7 @@ class NativeBrowserFrame {
const content::NativeWebKeyboardEvent& event);
// Returns true if the |event| was handled by the platform implementation.
- virtual bool HandleKeyboardEvent(
- const content::NativeWebKeyboardEvent& event);
+ virtual bool HandleNativeKeyboardEvent(gfx::NativeEvent event);
protected:
friend class BrowserFrame;
diff --git a/ui/views/controls/webview/unhandled_keyboard_event_handler_mac.mm b/ui/views/controls/webview/unhandled_keyboard_event_handler_mac.mm
index 5fb0800..6d0d926 100644
--- a/ui/views/controls/webview/unhandled_keyboard_event_handler_mac.mm
+++ b/ui/views/controls/webview/unhandled_keyboard_event_handler_mac.mm
@@ -5,6 +5,8 @@
#include "ui/views/controls/webview/unhandled_keyboard_event_handler.h"
#import "base/mac/foundation_util.h"
+#include "chrome/browser/ui/views/frame/browser_frame.h"
+#include "chrome/browser/ui/views/frame/browser_view.h"
#import "ui/views/cocoa/native_widget_mac_nswindow.h"
namespace views {
@@ -13,6 +15,12 @@ namespace views {
void UnhandledKeyboardEventHandler::HandleNativeKeyboardEvent(
gfx::NativeEvent event,
FocusManager* focus_manager) {
+ BrowserView* browser_view =
+ BrowserView::GetBrowserViewForNativeWindow([event window]);
+ DCHECK(browser_view);
+ if (browser_view->frame()->HandleNativeKeyboardEvent(event))
+ return;
+
[base::mac::ObjCCastStrict<NativeWidgetMacNSWindow>([event window])
redispatchKeyEvent:event];
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment