| Index: ui/base/win/hwnd_subclass.cc
|
| diff --git a/ui/base/win/hwnd_subclass.cc b/ui/base/win/hwnd_subclass.cc
|
| deleted file mode 100644
|
| index 8628a7c2e8ba0cbff3fcb029f5ed3479a9ed9057..0000000000000000000000000000000000000000
|
| --- a/ui/base/win/hwnd_subclass.cc
|
| +++ /dev/null
|
| @@ -1,170 +0,0 @@
|
| -// Copyright (c) 2012 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 "ui/base/win/hwnd_subclass.h"
|
| -
|
| -#include <algorithm>
|
| -
|
| -#include "base/logging.h"
|
| -#include "base/memory/scoped_vector.h"
|
| -#include "base/memory/singleton.h"
|
| -#include "ui/gfx/win/dpi.h"
|
| -#include "ui/gfx/win/hwnd_util.h"
|
| -
|
| -namespace {
|
| -const char kHWNDSubclassKey[] = "__UI_BASE_WIN_HWND_SUBCLASS_PROC__";
|
| -
|
| -LRESULT CALLBACK WndProc(HWND hwnd,
|
| - UINT message,
|
| - WPARAM w_param,
|
| - LPARAM l_param) {
|
| - ui::HWNDSubclass* wrapped_wnd_proc =
|
| - reinterpret_cast<ui::HWNDSubclass*>(
|
| - ui::ViewProp::GetValue(hwnd, kHWNDSubclassKey));
|
| - return wrapped_wnd_proc ? wrapped_wnd_proc->OnWndProc(hwnd,
|
| - message,
|
| - w_param,
|
| - l_param)
|
| - : DefWindowProc(hwnd, message, w_param, l_param);
|
| -}
|
| -
|
| -WNDPROC GetCurrentWndProc(HWND target) {
|
| - return reinterpret_cast<WNDPROC>(GetWindowLongPtr(target, GWLP_WNDPROC));
|
| -}
|
| -
|
| -// Not defined before Win7
|
| -BOOL GetTouchInputInfoWrapper(HTOUCHINPUT handle, UINT count,
|
| - PTOUCHINPUT pointer, int size) {
|
| - typedef BOOL(WINAPI *GetTouchInputInfoPtr)(HTOUCHINPUT, UINT,
|
| - PTOUCHINPUT, int);
|
| - GetTouchInputInfoPtr get_touch_input_info_func =
|
| - reinterpret_cast<GetTouchInputInfoPtr>(
|
| - GetProcAddress(GetModuleHandleA("user32.dll"), "GetTouchInputInfo"));
|
| - if (get_touch_input_info_func)
|
| - return get_touch_input_info_func(handle, count, pointer, size);
|
| - return FALSE;
|
| -}
|
| -
|
| -} // namespace
|
| -
|
| -namespace ui {
|
| -
|
| -// Singleton factory that creates and manages the lifetime of all
|
| -// ui::HWNDSubclass objects.
|
| -class HWNDSubclass::HWNDSubclassFactory {
|
| - public:
|
| - static HWNDSubclassFactory* GetInstance() {
|
| - return Singleton<HWNDSubclassFactory,
|
| - LeakySingletonTraits<HWNDSubclassFactory> >::get();
|
| - }
|
| -
|
| - // Returns a non-null HWNDSubclass corresponding to the HWND |target|. Creates
|
| - // one if none exists. Retains ownership of the returned pointer.
|
| - HWNDSubclass* GetHwndSubclassForTarget(HWND target) {
|
| - DCHECK(target);
|
| - HWNDSubclass* subclass = reinterpret_cast<HWNDSubclass*>(
|
| - ui::ViewProp::GetValue(target, kHWNDSubclassKey));
|
| - if (!subclass) {
|
| - subclass = new ui::HWNDSubclass(target);
|
| - hwnd_subclasses_.push_back(subclass);
|
| - }
|
| - return subclass;
|
| - }
|
| -
|
| - const ScopedVector<HWNDSubclass>& hwnd_subclasses() {
|
| - return hwnd_subclasses_;
|
| - }
|
| -
|
| - private:
|
| - friend struct DefaultSingletonTraits<HWNDSubclassFactory>;
|
| -
|
| - HWNDSubclassFactory() {}
|
| -
|
| - ScopedVector<HWNDSubclass> hwnd_subclasses_;
|
| -
|
| - DISALLOW_COPY_AND_ASSIGN(HWNDSubclassFactory);
|
| -};
|
| -
|
| -// static
|
| -void HWNDSubclass::AddFilterToTarget(HWND target, HWNDMessageFilter* filter) {
|
| - HWNDSubclassFactory::GetInstance()->GetHwndSubclassForTarget(
|
| - target)->AddFilter(filter);
|
| -}
|
| -
|
| -// static
|
| -void HWNDSubclass::RemoveFilterFromAllTargets(HWNDMessageFilter* filter) {
|
| - HWNDSubclassFactory* factory = HWNDSubclassFactory::GetInstance();
|
| - ScopedVector<ui::HWNDSubclass>::const_iterator it;
|
| - for (it = factory->hwnd_subclasses().begin();
|
| - it != factory->hwnd_subclasses().end(); ++it)
|
| - (*it)->RemoveFilter(filter);
|
| -}
|
| -
|
| -// static
|
| -HWNDSubclass* HWNDSubclass::GetHwndSubclassForTarget(HWND target) {
|
| - return HWNDSubclassFactory::GetInstance()->GetHwndSubclassForTarget(target);
|
| -}
|
| -
|
| -void HWNDSubclass::AddFilter(HWNDMessageFilter* filter) {
|
| - DCHECK(filter);
|
| - if (std::find(filters_.begin(), filters_.end(), filter) == filters_.end())
|
| - filters_.push_back(filter);
|
| -}
|
| -
|
| -void HWNDSubclass::RemoveFilter(HWNDMessageFilter* filter) {
|
| - std::vector<HWNDMessageFilter*>::iterator it =
|
| - std::find(filters_.begin(), filters_.end(), filter);
|
| - if (it != filters_.end())
|
| - filters_.erase(it);
|
| -}
|
| -
|
| -HWNDSubclass::HWNDSubclass(HWND target)
|
| - : target_(target),
|
| - original_wnd_proc_(GetCurrentWndProc(target)),
|
| - prop_(target, kHWNDSubclassKey, this) {
|
| - gfx::SetWindowProc(target_, &WndProc);
|
| -}
|
| -
|
| -HWNDSubclass::~HWNDSubclass() {
|
| -}
|
| -
|
| -LRESULT HWNDSubclass::OnWndProc(HWND hwnd,
|
| - UINT message,
|
| - WPARAM w_param,
|
| - LPARAM l_param) {
|
| -
|
| - // Touch messages are always passed in screen coordinates. If the OS is
|
| - // scaled, but the app is not DPI aware, then then WM_TOUCH might be
|
| - // intended for a different window.
|
| - if (message == WM_TOUCH) {
|
| - TOUCHINPUT point;
|
| -
|
| - if (GetTouchInputInfoWrapper(reinterpret_cast<HTOUCHINPUT>(l_param), 1,
|
| - &point, sizeof(TOUCHINPUT))) {
|
| - POINT touch_location = {TOUCH_COORD_TO_PIXEL(point.x),
|
| - TOUCH_COORD_TO_PIXEL(point.y)};
|
| - HWND actual_target = WindowFromPoint(touch_location);
|
| - if (actual_target != hwnd) {
|
| - return SendMessage(actual_target, message, w_param, l_param);
|
| - }
|
| - }
|
| - }
|
| -
|
| - for (std::vector<HWNDMessageFilter*>::iterator it = filters_.begin();
|
| - it != filters_.end(); ++it) {
|
| - LRESULT l_result = 0;
|
| - if ((*it)->FilterMessage(hwnd, message, w_param, l_param, &l_result))
|
| - return l_result;
|
| - }
|
| -
|
| - // In most cases, |original_wnd_proc_| will take care of calling
|
| - // DefWindowProc.
|
| - return CallWindowProc(original_wnd_proc_, hwnd, message, w_param, l_param);
|
| -}
|
| -
|
| -HWNDMessageFilter::~HWNDMessageFilter() {
|
| - HWNDSubclass::RemoveFilterFromAllTargets(this);
|
| -}
|
| -
|
| -} // namespace ui
|
|
|