summaryrefslogtreecommitdiffstats
path: root/views
diff options
context:
space:
mode:
authorsky@chromium.org <sky@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-11-04 22:55:03 +0000
committersky@chromium.org <sky@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-11-04 22:55:03 +0000
commit7e24ec474cdcf17f2c97b6e8a7a153d790a032c1 (patch)
tree9d9150dfe2aa25c696076b69826e8b132f129edf /views
parentd11535a810717cd12a32a1a98080b2029c838547 (diff)
downloadchromium_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.cc15
-rw-r--r--views/controls/native_control_win.h18
-rw-r--r--views/views.gyp4
-rw-r--r--views/widget/child_window_message_processor.cc27
-rw-r--r--views/widget/child_window_message_processor.h50
-rw-r--r--views/widget/widget_win.cc43
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.