diff options
author | sky@chromium.org <sky@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-11-04 22:55:03 +0000 |
---|---|---|
committer | sky@chromium.org <sky@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-11-04 22:55:03 +0000 |
commit | 7e24ec474cdcf17f2c97b6e8a7a153d790a032c1 (patch) | |
tree | 9d9150dfe2aa25c696076b69826e8b132f129edf /views | |
parent | d11535a810717cd12a32a1a98080b2029c838547 (diff) | |
download | chromium_src-7e24ec474cdcf17f2c97b6e8a7a153d790a032c1.zip chromium_src-7e24ec474cdcf17f2c97b6e8a7a153d790a032c1.tar.gz chromium_src-7e24ec474cdcf17f2c97b6e8a7a153d790a032c1.tar.bz2 |
Revert 65109 - Adds the ability for classes other than native control to process
messages bounced to the parent and wires it up for autocompleteedit,
which I'm going to need shortly.
BUG=none
TEST=none
Review URL: http://codereview.chromium.org/4470001
TBR=sky@chromium.org
Review URL: http://codereview.chromium.org/4528001
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@65122 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'views')
-rw-r--r-- | views/controls/native_control_win.cc | 15 | ||||
-rw-r--r-- | views/controls/native_control_win.h | 18 | ||||
-rw-r--r-- | views/views.gyp | 4 | ||||
-rw-r--r-- | views/widget/child_window_message_processor.cc | 27 | ||||
-rw-r--r-- | views/widget/child_window_message_processor.h | 50 | ||||
-rw-r--r-- | views/widget/widget_win.cc | 43 |
6 files changed, 39 insertions, 118 deletions
diff --git a/views/controls/native_control_win.cc b/views/controls/native_control_win.cc index c4f811c..0c6d257 100644 --- a/views/controls/native_control_win.cc +++ b/views/controls/native_control_win.cc @@ -14,7 +14,9 @@ namespace views { -static const wchar_t* kNativeControlWinKey = L"__NATIVE_CONTROL_WIN__"; +// static +const wchar_t* NativeControlWin::kNativeControlWinKey = + L"__NATIVE_CONTROL_WIN__"; //////////////////////////////////////////////////////////////////////////////// // NativeControlWin, public: @@ -33,10 +35,8 @@ NativeControlWin::~NativeControlWin() { } } -bool NativeControlWin::ProcessMessage(UINT message, - WPARAM w_param, - LPARAM l_param, - LRESULT* result) { +bool NativeControlWin::ProcessMessage(UINT message, WPARAM w_param, + LPARAM l_param, LRESULT* result) { switch (message) { case WM_CONTEXTMENU: ShowContextMenu(gfx::Point(GET_X_LPARAM(l_param), GET_Y_LPARAM(l_param))); @@ -130,9 +130,8 @@ void NativeControlWin::ShowContextMenu(const gfx::Point& location) { void NativeControlWin::NativeControlCreated(HWND native_control) { // Associate this object with the control's HWND so that WidgetWin can find // this object when it receives messages from it. - props_.push_back( + prop_.reset( new app::win::ScopedProp(native_control, kNativeControlWinKey, this)); - props_.push_back(ChildWindowMessageProcessor::Register(native_control, this)); // Subclass so we get WM_KEYDOWN and WM_SETFOCUS messages. original_wndproc_ = @@ -212,7 +211,7 @@ LRESULT NativeControlWin::NativeControlWndProc(HWND window, NOTREACHED(); } } else if (message == WM_DESTROY) { - native_control->props_.reset(); + native_control->prop_.reset(); win_util::SetWindowProc(window, native_control->original_wndproc_); } diff --git a/views/controls/native_control_win.h b/views/controls/native_control_win.h index 3733a15..6d0fdf0 100644 --- a/views/controls/native_control_win.h +++ b/views/controls/native_control_win.h @@ -7,10 +7,8 @@ #pragma once #include "base/scoped_ptr.h" -#include "base/scoped_vector.h" #include "views/controls/combobox/combobox.h" #include "views/controls/native/native_view_host.h" -#include "views/widget/child_window_message_processor.h" namespace app { namespace win { @@ -21,13 +19,19 @@ class ScopedProp; namespace views { // A View that hosts a native Windows control. -class NativeControlWin : public ChildWindowMessageProcessor, - public NativeViewHost { +class NativeControlWin : public NativeViewHost { public: + static const wchar_t* kNativeControlWinKey; + NativeControlWin(); virtual ~NativeControlWin(); - // Overridden from ChildWindowMessageProcessor: + // Called by the containing WidgetWin when a message is received from the HWND + // created by an object derived from NativeControlWin. Derived classes MUST + // call _this_ version of the function if they override it and do not handle + // all of the messages listed in widget_win.cc ProcessNativeControlWinMessage. + // Returns true if the message was handled, with a valid result in |result|. + // Returns false if the message was not handled. virtual bool ProcessMessage(UINT message, WPARAM w_param, LPARAM l_param, @@ -75,8 +79,6 @@ class NativeControlWin : public ChildWindowMessageProcessor, DWORD GetAdditionalRTLStyle() const; private: - typedef ScopedVector<app::win::ScopedProp> ScopedProps; - // Called by the containing WidgetWin when a message of type WM_CTLCOLORBTN or // WM_CTLCOLORSTATIC is sent from the HWND created by an object dreived from // NativeControlWin. @@ -91,7 +93,7 @@ class NativeControlWin : public ChildWindowMessageProcessor, // The window procedure before we subclassed. WNDPROC original_wndproc_; - ScopedProps props_; + scoped_ptr<app::win::ScopedProp> prop_; DISALLOW_COPY_AND_ASSIGN(NativeControlWin); }; diff --git a/views/views.gyp b/views/views.gyp index b87aea3..c4878fe 100644 --- a/views/views.gyp +++ b/views/views.gyp @@ -282,8 +282,6 @@ 'views_delegate.h', 'widget/aero_tooltip_manager.cc', 'widget/aero_tooltip_manager.h', - 'widget/child_window_message_processor.cc', - 'widget/child_window_message_processor.h', 'widget/default_theme_provider.cc', 'widget/default_theme_provider.h', 'widget/drop_helper.cc', @@ -365,8 +363,6 @@ 'controls/tree/tree_view.cc', 'event_win.cc', 'resize_corner.cc', - 'widget/child_window_message_processor.cc', - 'widget/child_window_message_processor.h', 'widget/aero_tooltip_manager.cc', 'widget/root_view_drop_target.cc', 'window/hit_test.cc', diff --git a/views/widget/child_window_message_processor.cc b/views/widget/child_window_message_processor.cc deleted file mode 100644 index a3b578e..0000000 --- a/views/widget/child_window_message_processor.cc +++ /dev/null @@ -1,27 +0,0 @@ -// Copyright (c) 2010 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#include "views/widget/child_window_message_processor.h" - -#include "app/win/scoped_prop.h" - -namespace views { - -static const wchar_t* kChildWindowKey = L"__CHILD_WINDOW_MESSAGE_PROCESSOR__"; - -// static -app::win::ScopedProp* ChildWindowMessageProcessor::Register( - HWND hwnd, - ChildWindowMessageProcessor* processor) { - DCHECK(processor); - return new app::win::ScopedProp(hwnd, kChildWindowKey, processor); -} - -// static -ChildWindowMessageProcessor* ChildWindowMessageProcessor::Get(HWND hwnd) { - return reinterpret_cast<ChildWindowMessageProcessor*>( - ::GetProp(hwnd, kChildWindowKey)); -} - -} // namespace diff --git a/views/widget/child_window_message_processor.h b/views/widget/child_window_message_processor.h deleted file mode 100644 index 7d4e63e..0000000 --- a/views/widget/child_window_message_processor.h +++ /dev/null @@ -1,50 +0,0 @@ -// Copyright (c) 2010 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#ifndef VIEWS_WIDGET_CHILD_WINDOW_MESSAGE_PROCESSOR_H_ -#define VIEWS_WIDGET_CHILD_WINDOW_MESSAGE_PROCESSOR_H_ -#pragma once - -#include <windows.h> - -namespace app { -namespace win { -class ScopedProp; -} -} - -namespace views { - -// Windows sends a handful of messages to the parent window rather than the -// window itself. For example, selection changes of a rich edit (EN_SELCHANGE) -// are sent to the parent, not the window. Typically such message are best -// dealt with by the window rather than the parent. WidgetWin allows for -// registering a ChildWindowMessageProcessor to handle such messages. -class ChildWindowMessageProcessor { - public: - // Registers |processor| for |hwnd|. The caller takes ownership of the - // returned object. - static app::win::ScopedProp* Register(HWND hwnd, - ChildWindowMessageProcessor* processor); - - // Returns the ChildWindowMessageProcessor for |hwnd|, NULL if there isn't - // one. - static ChildWindowMessageProcessor* Get(HWND hwnd); - - // Invoked for any messages that are sent to the parent and originated from - // the HWND this ChildWindowMessageProcessor was registered for. Returns true - // if the message was handled with a valid result in |result|. Returns false - // if the message was not handled. - virtual bool ProcessMessage(UINT message, - WPARAM w_param, - LPARAM l_param, - LRESULT* result) = 0; - - protected: - virtual ~ChildWindowMessageProcessor() {} -}; - -} // namespace views - -#endif // VIEWS_WIDGET_CHILD_WINDOW_MESSAGE_PROCESSOR_H_ diff --git a/views/widget/widget_win.cc b/views/widget/widget_win.cc index 77cf8c1..bb6ca8d 100644 --- a/views/widget/widget_win.cc +++ b/views/widget/widget_win.cc @@ -19,7 +19,6 @@ #include "views/focus/focus_util_win.h" #include "views/views_delegate.h" #include "views/widget/aero_tooltip_manager.h" -#include "views/widget/child_window_message_processor.h" #include "views/widget/default_theme_provider.h" #include "views/widget/drop_target_win.h" #include "views/widget/root_view.h" @@ -42,6 +41,11 @@ RootView* GetRootViewForHWND(HWND hwnd) { return reinterpret_cast<RootView*>(::GetProp(hwnd, kRootViewWindowProperty)); } +NativeControlWin* GetNativeControlWinForHWND(HWND hwnd) { + return reinterpret_cast<NativeControlWin*>( + GetProp(hwnd, NativeControlWin::kNativeControlWinKey)); +} + /////////////////////////////////////////////////////////////////////////////// // WidgetWin, public @@ -1169,9 +1173,7 @@ RootView* WidgetWin::GetFocusedViewRootView() { // Get the source HWND of the specified message. Depending on the message, the // source HWND is encoded in either the WPARAM or the LPARAM value. -static HWND GetControlHWNDForMessage(UINT message, - WPARAM w_param, - LPARAM l_param) { +HWND GetControlHWNDForMessage(UINT message, WPARAM w_param, LPARAM l_param) { // Each of the following messages can be sent by a child HWND and must be // forwarded to its associated NativeControlWin for handling. switch (message) { @@ -1194,26 +1196,25 @@ HICON WidgetWin::GetDefaultWindowIcon() const { return NULL; } -// Some messages may be sent to us by a child HWND. If this is the case, this -// function will forward those messages on to the object associated with the -// source HWND and return true, in which case the window procedure must not do -// any further processing of the message. If there is no associated -// ChildWindowMessageProcessor, the return value will be false and the WndProc -// can continue processing the message normally. |l_result| contains the result -// of the message processing by the control and must be returned by the WndProc -// if the return value is true. -static bool ProcessChildWindowMessage(UINT message, - WPARAM w_param, - LPARAM l_param, - LRESULT* l_result) { +// Some messages may be sent to us by a child HWND managed by +// NativeControlWin. If this is the case, this function will forward those +// messages on to the object associated with the source HWND and return true, +// in which case the window procedure must not do any further processing of +// the message. If there is no associated NativeControlWin, the return value +// will be false and the WndProc can continue processing the message normally. +// |l_result| contains the result of the message processing by the control and +// must be returned by the WndProc if the return value is true. +bool ProcessNativeControlMessage(UINT message, + WPARAM w_param, + LPARAM l_param, + LRESULT* l_result) { *l_result = 0; HWND control_hwnd = GetControlHWNDForMessage(message, w_param, l_param); if (IsWindow(control_hwnd)) { - ChildWindowMessageProcessor* processor = - ChildWindowMessageProcessor::Get(control_hwnd); - if (processor) - return processor->ProcessMessage(message, w_param, l_param, l_result); + NativeControlWin* wrapper = GetNativeControlWinForHWND(control_hwnd); + if (wrapper) + return wrapper->ProcessMessage(message, w_param, l_param, l_result); } return false; @@ -1226,7 +1227,7 @@ LRESULT WidgetWin::OnWndProc(UINT message, WPARAM w_param, LPARAM l_param) { // First allow messages sent by child controls to be processed directly by // their associated views. If such a view is present, it will handle the // message *instead of* this WidgetWin. - if (ProcessChildWindowMessage(message, w_param, l_param, &result)) + if (ProcessNativeControlMessage(message, w_param, l_param, &result)) return result; // Otherwise we handle everything else. |