diff --git a/atom/browser/api/atom_api_web_contents.cc b/atom/browser/api/atom_api_web_contents.cc index b5aa8e9aa64..eac378b2a77 100644 --- a/atom/browser/api/atom_api_web_contents.cc +++ b/atom/browser/api/atom_api_web_contents.cc @@ -394,14 +394,12 @@ bool WebContents::IsPopupOrPanel(const content::WebContents* source) const { void WebContents::HandleKeyboardEvent( content::WebContents* source, const content::NativeWebKeyboardEvent& event) { - if (event.windowsKeyCode == ui::VKEY_ESCAPE && is_html_fullscreen()) { - // Escape exits tabbed fullscreen mode. - ExitFullscreenModeForTab(source); - } else if (type_ == BROWSER_WINDOW && owner_window()) { - owner_window()->HandleKeyboardEvent(source, event); - } else if (type_ == WEB_VIEW && embedder_) { + if (type_ == WEB_VIEW && embedder_) { // Send the unhandled keyboard events back to the embedder. embedder_->HandleKeyboardEvent(source, event); + } else { + // Go to the default keyboard handling. + CommonWebContentsDelegate::HandleKeyboardEvent(source, event); } } diff --git a/atom/browser/common_web_contents_delegate.cc b/atom/browser/common_web_contents_delegate.cc index d4b3f187a20..ea2bf8677cb 100644 --- a/atom/browser/common_web_contents_delegate.cc +++ b/atom/browser/common_web_contents_delegate.cc @@ -31,14 +31,6 @@ #include "content/public/browser/security_style_explanations.h" #include "storage/browser/fileapi/isolated_context.h" -#if defined(TOOLKIT_VIEWS) -#include "atom/browser/native_window_views.h" -#endif - -#if defined(USE_X11) -#include "atom/browser/browser.h" -#endif - using content::BrowserThread; using security_state::SecurityStateModel; @@ -630,23 +622,6 @@ void CommonWebContentsDelegate::OnDevToolsSearchCompleted( &file_paths_value); } -#if defined(TOOLKIT_VIEWS) -gfx::ImageSkia CommonWebContentsDelegate::GetDevToolsWindowIcon() { - if (!owner_window()) - return gfx::ImageSkia(); - return static_cast(static_cast( - owner_window()))->GetWindowAppIcon(); -} -#endif - -#if defined(USE_X11) -void CommonWebContentsDelegate::GetDevToolsWindowWMClass( - std::string* name, std::string* class_name) { - *class_name = Browser::Get()->GetName(); - *name = base::ToLowerASCII(*class_name); -} -#endif - void CommonWebContentsDelegate::SetHtmlApiFullscreen(bool enter_fullscreen) { // Window is already in fullscreen mode, save the state. if (enter_fullscreen && owner_window_->IsFullscreen()) { diff --git a/atom/browser/common_web_contents_delegate.h b/atom/browser/common_web_contents_delegate.h index 8ea04afebe2..095dad3bceb 100644 --- a/atom/browser/common_web_contents_delegate.h +++ b/atom/browser/common_web_contents_delegate.h @@ -84,6 +84,9 @@ class CommonWebContentsDelegate content::SecurityStyle GetSecurityStyle( content::WebContents* web_contents, content::SecurityStyleExplanations* explanations) override; + void HandleKeyboardEvent( + content::WebContents* source, + const content::NativeWebKeyboardEvent& event) override; // brightray::InspectableWebContentsDelegate: void DevToolsSaveToFile(const std::string& url, diff --git a/atom/browser/common_web_contents_delegate_mac.mm b/atom/browser/common_web_contents_delegate_mac.mm new file mode 100644 index 00000000000..69117f19053 --- /dev/null +++ b/atom/browser/common_web_contents_delegate_mac.mm @@ -0,0 +1,39 @@ +// Copyright (c) 2016 GitHub, Inc. +// Use of this source code is governed by the MIT license that can be +// found in the LICENSE file. + +#include "atom/browser/common_web_contents_delegate.h" + +#import + +#include "content/public/browser/native_web_keyboard_event.h" +#include "ui/events/keycodes/keyboard_codes.h" + +namespace atom { + +void CommonWebContentsDelegate::HandleKeyboardEvent( + content::WebContents* source, + const content::NativeWebKeyboardEvent& event) { + if (event.skip_in_browser || + event.type == content::NativeWebKeyboardEvent::Char) + return; + + // Escape exits tabbed fullscreen mode. + if (event.windowsKeyCode == ui::VKEY_ESCAPE && is_html_fullscreen()) + ExitFullscreenModeForTab(source); + + BOOL handled = [[NSApp mainMenu] performKeyEquivalent:event.os_event]; + if (!handled && event.os_event.window) { + // Handle the cmd+~ shortcut. + if ((event.os_event.modifierFlags & NSCommandKeyMask) /* cmd */ && + (event.os_event.keyCode == 50 /* ~ */)) { + if (event.os_event.modifierFlags & NSShiftKeyMask) { + [NSApp sendAction:@selector(_cycleWindowsReversed:) to:nil from:nil]; + } else { + [NSApp sendAction:@selector(_cycleWindows:) to:nil from:nil]; + } + } + } +} + +} // namespace atom diff --git a/atom/browser/common_web_contents_delegate_views.cc b/atom/browser/common_web_contents_delegate_views.cc new file mode 100644 index 00000000000..d70884c45c2 --- /dev/null +++ b/atom/browser/common_web_contents_delegate_views.cc @@ -0,0 +1,45 @@ +// Copyright (c) 2016 GitHub, Inc. +// Use of this source code is governed by the MIT license that can be +// found in the LICENSE file. + +#include "atom/browser/common_web_contents_delegate.h" + +#include "atom/browser/native_window_views.h" +#include "base/strings/string_util.h" +#include "content/public/browser/native_web_keyboard_event.h" +#include "ui/events/keycodes/keyboard_codes.h" + +#if defined(USE_X11) +#include "atom/browser/browser.h" +#endif + +namespace atom { + +void CommonWebContentsDelegate::HandleKeyboardEvent( + content::WebContents* source, + const content::NativeWebKeyboardEvent& event) { + // Escape exits tabbed fullscreen mode. + if (event.windowsKeyCode == ui::VKEY_ESCAPE && is_html_fullscreen()) + ExitFullscreenModeForTab(source); + + // Let the NativeWindow handle other parts. + if (owner_window()) + owner_window()->HandleKeyboardEvent(source, event); +} + +gfx::ImageSkia CommonWebContentsDelegate::GetDevToolsWindowIcon() { + if (!owner_window()) + return gfx::ImageSkia(); + return static_cast(static_cast( + owner_window()))->GetWindowAppIcon(); +} + +#if defined(USE_X11) +void CommonWebContentsDelegate::GetDevToolsWindowWMClass( + std::string* name, std::string* class_name) { + *class_name = Browser::Get()->GetName(); + *name = base::ToLowerASCII(*class_name); +} +#endif + +} // namespace atom diff --git a/atom/browser/native_window_mac.h b/atom/browser/native_window_mac.h index 22390f42dd0..cfb3141ede6 100644 --- a/atom/browser/native_window_mac.h +++ b/atom/browser/native_window_mac.h @@ -100,11 +100,6 @@ class NativeWindowMac : public NativeWindow { } protected: - // NativeWindow: - void HandleKeyboardEvent( - content::WebContents*, - const content::NativeWebKeyboardEvent&) override; - // Return a vector of non-draggable regions that fill a window of size // |width| by |height|, but leave gaps where the window should be draggable. std::vector CalculateNonDraggableRegions( diff --git a/atom/browser/native_window_mac.mm b/atom/browser/native_window_mac.mm index 0f782d58516..bfffc7a08d6 100644 --- a/atom/browser/native_window_mac.mm +++ b/atom/browser/native_window_mac.mm @@ -15,7 +15,6 @@ #include "brightray/browser/inspectable_web_contents.h" #include "brightray/browser/inspectable_web_contents_view.h" #include "content/public/browser/browser_accessibility_state.h" -#include "content/public/browser/native_web_keyboard_event.h" #include "content/public/browser/web_contents.h" #include "content/public/browser/render_view_host.h" #include "content/public/browser/render_widget_host_view.h" @@ -935,27 +934,6 @@ bool NativeWindowMac::IsVisibleOnAllWorkspaces() { return collectionBehavior & NSWindowCollectionBehaviorCanJoinAllSpaces; } -void NativeWindowMac::HandleKeyboardEvent( - content::WebContents*, - const content::NativeWebKeyboardEvent& event) { - if (event.skip_in_browser || - event.type == content::NativeWebKeyboardEvent::Char) - return; - - BOOL handled = [[NSApp mainMenu] performKeyEquivalent:event.os_event]; - if (!handled && event.os_event.window) { - // Handle the cmd+~ shortcut. - if ((event.os_event.modifierFlags & NSCommandKeyMask) /* cmd */ && - (event.os_event.keyCode == 50 /* ~ */)) { - if (event.os_event.modifierFlags & NSShiftKeyMask) { - [NSApp sendAction:@selector(_cycleWindowsReversed:) to:nil from:nil]; - } else { - [NSApp sendAction:@selector(_cycleWindows:) to:nil from:nil]; - } - } - } -} - std::vector NativeWindowMac::CalculateNonDraggableRegions( const std::vector& regions, int width, int height) { std::vector result; diff --git a/filenames.gypi b/filenames.gypi index f9bbe8f75f1..cc33d9a81a6 100644 --- a/filenames.gypi +++ b/filenames.gypi @@ -171,6 +171,8 @@ 'atom/browser/browser_mac.mm', 'atom/browser/browser_win.cc', 'atom/browser/browser_observer.h', + 'atom/browser/common_web_contents_delegate_mac.mm', + 'atom/browser/common_web_contents_delegate_views.cc', 'atom/browser/common_web_contents_delegate.cc', 'atom/browser/common_web_contents_delegate.h', 'atom/browser/javascript_environment.cc',