Created
October 20, 2016 12:54
-
-
Save mblsha/d3ddab85dfff543efe8d4b808ae203aa to your computer and use it in GitHub Desktop.
Patching UnhandledKeyboardEventHandler::HandleNativeKeyboardEvent to direct events to BrowserFrame.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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