From d175a685864371ae28e5fd4d803570b9c144777c Mon Sep 17 00:00:00 2001 From: Cheng Zhao Date: Thu, 6 Aug 2015 10:15:27 +0800 Subject: [PATCH] Add MessageHandlerDelegate --- atom/browser/native_window_views.cc | 4 +-- atom/browser/native_window_views.h | 7 +++++ .../win/atom_desktop_window_tree_host_win.cc | 4 ++- .../win/atom_desktop_window_tree_host_win.h | 15 +++++++---- .../ui/win/message_handler_delegate.cc | 14 ++++++++++ .../browser/ui/win/message_handler_delegate.h | 26 +++++++++++++++++++ filenames.gypi | 6 +++-- 7 files changed, 66 insertions(+), 10 deletions(-) create mode 100644 atom/browser/ui/win/message_handler_delegate.cc create mode 100644 atom/browser/ui/win/message_handler_delegate.h diff --git a/atom/browser/native_window_views.cc b/atom/browser/native_window_views.cc index acb7de33f4d6..a4fdfc7993b6 100644 --- a/atom/browser/native_window_views.cc +++ b/atom/browser/native_window_views.cc @@ -221,11 +221,11 @@ NativeWindowViews::NativeWindowViews( params.native_widget = new views::DesktopNativeWidgetAura(window_.get()); atom_desktop_window_tree_host_win_ = new AtomDesktopWindowTreeHostWin( + this, window_.get(), static_cast(params.native_widget)); params.desktop_window_tree_host = atom_desktop_window_tree_host_win_; -#endif -#if defined(USE_X11) +#elif defined(USE_X11) std::string name = Browser::Get()->GetName(); // Set WM_WINDOW_ROLE. params.wm_role_name = "browser-window"; diff --git a/atom/browser/native_window_views.h b/atom/browser/native_window_views.h index 792a72c75624..3adfa4cd0dc1 100644 --- a/atom/browser/native_window_views.h +++ b/atom/browser/native_window_views.h @@ -14,6 +14,10 @@ #include "ui/views/widget/widget_delegate.h" #include "ui/views/widget/widget_observer.h" +#if defined(OS_WIN) +#include "atom/browser/ui/win/message_handler_delegate.h" +#endif + namespace views { class UnhandledKeyboardEventHandler; } @@ -28,6 +32,9 @@ class AtomDesktopWindowTreeHostWin; #endif class NativeWindowViews : public NativeWindow, +#if defined(OS_WIN) + public MessageHandlerDelegate, +#endif public views::WidgetDelegateView, public views::WidgetObserver { public: diff --git a/atom/browser/ui/win/atom_desktop_window_tree_host_win.cc b/atom/browser/ui/win/atom_desktop_window_tree_host_win.cc index 157cb610fb3a..f291e66d794e 100644 --- a/atom/browser/ui/win/atom_desktop_window_tree_host_win.cc +++ b/atom/browser/ui/win/atom_desktop_window_tree_host_win.cc @@ -12,10 +12,12 @@ namespace atom { AtomDesktopWindowTreeHostWin::AtomDesktopWindowTreeHostWin( + MessageHandlerDelegate* delegate, views::internal::NativeWidgetDelegate* native_widget_delegate, views::DesktopNativeWidgetAura* desktop_native_widget_aura) : views::DesktopWindowTreeHostWin(native_widget_delegate, - desktop_native_widget_aura) { + desktop_native_widget_aura), + delegate_(delegate) { } AtomDesktopWindowTreeHostWin::~AtomDesktopWindowTreeHostWin() { diff --git a/atom/browser/ui/win/atom_desktop_window_tree_host_win.h b/atom/browser/ui/win/atom_desktop_window_tree_host_win.h index fc09b6503b80..7681ef6a95d8 100644 --- a/atom/browser/ui/win/atom_desktop_window_tree_host_win.h +++ b/atom/browser/ui/win/atom_desktop_window_tree_host_win.h @@ -16,25 +16,30 @@ namespace atom { +class MessageHandlerDelegate; + class AtomDesktopWindowTreeHostWin : public views::DesktopWindowTreeHostWin { public: AtomDesktopWindowTreeHostWin( + MessageHandlerDelegate* delegate, views::internal::NativeWidgetDelegate* native_widget_delegate, views::DesktopNativeWidgetAura* desktop_native_widget_aura); - ~AtomDesktopWindowTreeHostWin(); + ~AtomDesktopWindowTreeHostWin() override; bool SetThumbarButtons( HWND window, const std::vector& buttons); protected: - bool PreHandleMSG(UINT message, - WPARAM w_param, - LPARAM l_param, - LRESULT* result) override; + bool PreHandleMSG( + UINT message, WPARAM w_param, LPARAM l_param, LRESULT* result) override; private: + MessageHandlerDelegate* delegate_; // weak ref + scoped_ptr thumbar_host_; + + DISALLOW_COPY_AND_ASSIGN(AtomDesktopWindowTreeHostWin); }; } // namespace atom diff --git a/atom/browser/ui/win/message_handler_delegate.cc b/atom/browser/ui/win/message_handler_delegate.cc new file mode 100644 index 000000000000..791d1fd816d9 --- /dev/null +++ b/atom/browser/ui/win/message_handler_delegate.cc @@ -0,0 +1,14 @@ +// Copyright (c) 2015 GitHub, Inc. +// Use of this source code is governed by the MIT license that can be +// found in the LICENSE file. + +#include "atom/browser/ui/win/message_handler_delegate.h" + +namespace atom { + +bool MessageHandlerDelegate::PreHandleMSG( + UINT message, WPARAM w_param, LPARAM l_param, LRESULT* result) { + return false; +} + +} // namespace atom diff --git a/atom/browser/ui/win/message_handler_delegate.h b/atom/browser/ui/win/message_handler_delegate.h new file mode 100644 index 000000000000..d8cfcf7fc43b --- /dev/null +++ b/atom/browser/ui/win/message_handler_delegate.h @@ -0,0 +1,26 @@ +// Copyright (c) 2015 GitHub, Inc. +// Use of this source code is governed by the MIT license that can be +// found in the LICENSE file. + +#ifndef ATOM_BROWSER_UI_WIN_MESSAGE_HANDLER_DELEGATE_H_ +#define ATOM_BROWSER_UI_WIN_MESSAGE_HANDLER_DELEGATE_H_ + +#include + +namespace atom { + +class MessageHandlerDelegate { + public: + // Catch-all message handling and filtering. Called before + // HWNDMessageHandler's built-in handling, which may pre-empt some + // expectations in Views/Aura if messages are consumed. Returns true if the + // message was consumed by the delegate and should not be processed further + // by the HWNDMessageHandler. In this case, |result| is returned. |result| is + // not modified otherwise. + virtual bool PreHandleMSG( + UINT message, WPARAM w_param, LPARAM l_param, LRESULT* result); +}; + +} // namespace atom + +#endif // ATOM_BROWSER_UI_WIN_MESSAGE_HANDLER_DELEGATE_H_ diff --git a/filenames.gypi b/filenames.gypi index 45aaac7c2778..40832b74f6a3 100644 --- a/filenames.gypi +++ b/filenames.gypi @@ -202,8 +202,10 @@ 'atom/browser/ui/views/submenu_button.h', 'atom/browser/ui/views/win_frame_view.cc', 'atom/browser/ui/views/win_frame_view.h', - "atom/browser/ui/win/atom_desktop_window_tree_host_win.cc", - "atom/browser/ui/win/atom_desktop_window_tree_host_win.h", + 'atom/browser/ui/win/atom_desktop_window_tree_host_win.cc', + 'atom/browser/ui/win/atom_desktop_window_tree_host_win.h', + 'atom/browser/ui/win/message_handler_delegate.cc', + 'atom/browser/ui/win/message_handler_delegate.h', 'atom/browser/ui/win/notify_icon_host.cc', 'atom/browser/ui/win/notify_icon_host.h', 'atom/browser/ui/win/notify_icon.cc',