| Index: views/widget/widget_win.cc
|
| diff --git a/views/widget/widget_win.cc b/views/widget/widget_win.cc
|
| index f0a43c587ebbd013bbb544c306073b0f16eb3254..4d65c78982a39da709fead12ec7eb02d18ae8b43 100644
|
| --- a/views/widget/widget_win.cc
|
| +++ b/views/widget/widget_win.cc
|
| @@ -139,8 +139,6 @@ WidgetWin::WidgetWin()
|
| ALLOW_THIS_IN_INITIALIZER_LIST(paint_layered_window_factory_(this)),
|
| delete_on_destroy_(true),
|
| can_update_layered_window_(true),
|
| - last_mouse_event_was_move_(false),
|
| - is_mouse_down_(false),
|
| is_window_(false),
|
| restore_focus_when_enabled_(false),
|
| accessibility_view_events_index_(-1),
|
| @@ -190,7 +188,7 @@ void WidgetWin::SetCreateParams(const CreateParams& params) {
|
| break;
|
| case CreateParams::TYPE_MENU:
|
| style |= WS_POPUP;
|
| - is_mouse_down_ =
|
| + is_mouse_button_pressed_ =
|
| ((GetKeyState(VK_LBUTTON) & 0x80) ||
|
| (GetKeyState(VK_RBUTTON) & 0x80) ||
|
| (GetKeyState(VK_MBUTTON) & 0x80) ||
|
| @@ -322,16 +320,16 @@ bool WidgetWin::IsScreenReaderActive() const {
|
| return screen_reader_active_;
|
| }
|
|
|
| -void WidgetWin::SetNativeCapture() {
|
| - DCHECK(!HasNativeCapture());
|
| +void WidgetWin::SetMouseCapture() {
|
| + DCHECK(!HasMouseCapture());
|
| SetCapture(hwnd());
|
| }
|
|
|
| -void WidgetWin::ReleaseNativeCapture() {
|
| +void WidgetWin::ReleaseMouseCapture() {
|
| ReleaseCapture();
|
| }
|
|
|
| -bool WidgetWin::HasNativeCapture() const {
|
| +bool WidgetWin::HasMouseCapture() const {
|
| return GetCapture() == hwnd();
|
| }
|
|
|
| @@ -566,9 +564,7 @@ void WidgetWin::OnCancelMode() {
|
| }
|
|
|
| void WidgetWin::OnCaptureChanged(HWND hwnd) {
|
| - if (is_mouse_down_)
|
| - GetRootView()->OnMouseCaptureLost();
|
| - is_mouse_down_ = false;
|
| + delegate_->OnMouseCaptureLost();
|
| }
|
|
|
| void WidgetWin::OnClose() {
|
| @@ -718,8 +714,7 @@ LRESULT WidgetWin::OnKeyDown(UINT message, WPARAM w_param, LPARAM l_param) {
|
| if (!root_view)
|
| root_view = GetRootView();
|
|
|
| - MSG msg;
|
| - MakeMSG(&msg, message, w_param, l_param);
|
| + MSG msg = { hwnd(), message, w_param, l_param };
|
| SetMsgHandled(root_view->ProcessKeyEvent(KeyEvent(msg)));
|
| return 0;
|
| }
|
| @@ -729,8 +724,7 @@ LRESULT WidgetWin::OnKeyUp(UINT message, WPARAM w_param, LPARAM l_param) {
|
| if (!root_view)
|
| root_view = GetRootView();
|
|
|
| - MSG msg;
|
| - MakeMSG(&msg, message, w_param, l_param);
|
| + MSG msg = { hwnd(), message, w_param, l_param };
|
| SetMsgHandled(root_view->ProcessKeyEvent(KeyEvent(msg)));
|
| return 0;
|
| }
|
| @@ -749,38 +743,30 @@ LRESULT WidgetWin::OnMouseActivate(UINT message,
|
| return MA_ACTIVATE;
|
| }
|
|
|
| -LRESULT WidgetWin::OnMouseLeave(UINT message, WPARAM w_param, LPARAM l_param) {
|
| - tooltip_manager_->OnMouseLeave();
|
| - ProcessMouseExited(message, w_param, l_param);
|
| - return 0;
|
| -}
|
| +LRESULT WidgetWin::OnMouseRange(UINT message, WPARAM w_param, LPARAM l_param) {
|
| + if (message == WM_MOUSEWHEEL)
|
| + return 0;
|
|
|
| -LRESULT WidgetWin::OnMouseMove(UINT message, WPARAM w_param, LPARAM l_param) {
|
| - ProcessMouseMoved(message, w_param, l_param);
|
| - return 0;
|
| -}
|
| + MSG msg = { hwnd(), message, w_param, l_param, 0,
|
| + { GET_X_LPARAM(l_param), GET_Y_LPARAM(l_param) } };
|
| + MouseEvent event(msg);
|
|
|
| -LRESULT WidgetWin::OnMouseRange(UINT message, WPARAM w_param, LPARAM l_param) {
|
| - tooltip_manager_->OnMouse(message, w_param, l_param);
|
| + if (!(event.flags() & ui::EF_IS_NON_CLIENT))
|
| + tooltip_manager_->OnMouse(message, w_param, l_param);
|
|
|
| - switch (message) {
|
| - case WM_LBUTTONDBLCLK:
|
| - case WM_LBUTTONDOWN:
|
| - case WM_MBUTTONDBLCLK:
|
| - case WM_MBUTTONDOWN:
|
| - case WM_RBUTTONDBLCLK:
|
| - case WM_RBUTTONDOWN:
|
| - SetMsgHandled(ProcessMousePressed(message, w_param, l_param));
|
| - break;
|
| - case WM_LBUTTONUP:
|
| - case WM_MBUTTONUP:
|
| - case WM_RBUTTONUP:
|
| - SetMsgHandled(ProcessMouseReleased(message, w_param, l_param));
|
| - break;
|
| - default:
|
| - SetMsgHandled(FALSE);
|
| + if (event.type() == ui::ET_MOUSE_MOVED && !HasMouseCapture()) {
|
| + // Windows only fires WM_MOUSELEAVE events if the application begins
|
| + // "tracking" mouse events for a given HWND during WM_MOUSEMOVE events.
|
| + // We need to call |TrackMouseEvents| to listen for WM_MOUSELEAVE.
|
| + TrackMouseEvents((message == WM_NCMOUSEMOVE) ?
|
| + TME_NONCLIENT | TME_LEAVE : TME_LEAVE);
|
| + } else if (event.type() == ui::ET_MOUSE_EXITED) {
|
| + // Reset our tracking flags so future mouse movement over this WidgetWin
|
| + // results in a new tracking session. Fall through for OnMouseEvent.
|
| + active_mouse_tracking_flags_ = 0;
|
| }
|
|
|
| + SetMsgHandled(delegate_->OnMouseEvent(event));
|
| return 0;
|
| }
|
|
|
| @@ -792,9 +778,8 @@ LRESULT WidgetWin::OnMouseWheel(UINT message, WPARAM w_param, LPARAM l_param) {
|
| return 0;
|
| }
|
|
|
| - MSG msg;
|
| - MakeMSG(&msg, message, w_param, l_param, 0,
|
| - GET_X_LPARAM(l_param), GET_Y_LPARAM(l_param));
|
| + MSG msg = { hwnd(), message, w_param, l_param, 0,
|
| + { GET_X_LPARAM(l_param), GET_Y_LPARAM(l_param) } };
|
| return GetRootView()->OnMouseWheel(MouseWheelEvent(msg)) ? 0 : 1;
|
| }
|
|
|
| @@ -824,45 +809,6 @@ LRESULT WidgetWin::OnNCHitTest(const CPoint& pt) {
|
| return 0;
|
| }
|
|
|
| -LRESULT WidgetWin::OnNCMouseLeave(UINT message,
|
| - WPARAM w_param,
|
| - LPARAM l_param) {
|
| - ProcessMouseExited(message, w_param, l_param);
|
| - return 0;
|
| -}
|
| -
|
| -LRESULT WidgetWin::OnNCMouseMove(UINT message, WPARAM w_param, LPARAM l_param) {
|
| - tooltip_manager_->OnMouse(message, w_param, l_param);
|
| - ProcessMouseMoved(message, w_param, l_param);
|
| -
|
| - // We need to process this message to stop Windows from drawing the window
|
| - // controls as the mouse moves over the title bar area when the window is
|
| - // maximized.
|
| - return 0;
|
| -}
|
| -
|
| -LRESULT WidgetWin::OnNCMouseRange(UINT message,
|
| - WPARAM w_param,
|
| - LPARAM l_param) {
|
| - switch (message) {
|
| - case WM_NCLBUTTONDBLCLK:
|
| - case WM_NCLBUTTONDOWN:
|
| - case WM_NCMBUTTONDBLCLK:
|
| - case WM_NCMBUTTONDOWN:
|
| - case WM_NCRBUTTONDBLCLK:
|
| - case WM_NCRBUTTONDOWN:
|
| - SetMsgHandled(ProcessMousePressed(message, w_param, l_param));
|
| - break;
|
| - case WM_NCLBUTTONUP:
|
| - case WM_NCMBUTTONUP:
|
| - case WM_NCRBUTTONUP:
|
| - default:
|
| - SetMsgHandled(FALSE);
|
| - }
|
| -
|
| - return 0;
|
| -}
|
| -
|
| void WidgetWin::OnNCPaint(HRGN rgn) {
|
| SetMsgHandled(FALSE);
|
| }
|
| @@ -993,87 +939,10 @@ void WidgetWin::TrackMouseEvents(DWORD mouse_tracking_flags) {
|
| }
|
| }
|
|
|
| -bool WidgetWin::ProcessMousePressed(UINT message,
|
| - WPARAM w_param,
|
| - LPARAM l_param) {
|
| - last_mouse_event_was_move_ = false;
|
| -
|
| - MSG msg;
|
| - MakeMSG(&msg, message, w_param, l_param, 0, GET_X_LPARAM(l_param),
|
| - GET_Y_LPARAM(l_param));
|
| - if (GetRootView()->OnMousePressed(MouseEvent(msg))) {
|
| - is_mouse_down_ = true;
|
| - if (!HasNativeCapture())
|
| - SetNativeCapture();
|
| - return true;
|
| - }
|
| - return false;
|
| -}
|
| -
|
| -bool WidgetWin::ProcessMouseReleased(UINT message,
|
| - WPARAM w_param,
|
| - LPARAM l_param) {
|
| - last_mouse_event_was_move_ = false;
|
| - is_mouse_down_ = false;
|
| -
|
| - // Release the capture first, that way we don't get confused if
|
| - // OnMouseReleased blocks.
|
| - if (HasNativeCapture() && ReleaseCaptureOnMouseReleased())
|
| - ReleaseNativeCapture();
|
| -
|
| - MSG msg;
|
| - MakeMSG(&msg, message, w_param, l_param, 0, GET_X_LPARAM(l_param),
|
| - GET_Y_LPARAM(l_param));
|
| - GetRootView()->OnMouseReleased(MouseEvent(msg));
|
| - return true;
|
| -}
|
| -
|
| -bool WidgetWin::ProcessMouseMoved(UINT message,
|
| - WPARAM w_param,
|
| - LPARAM l_param) {
|
| - // Windows only fires WM_MOUSELEAVE events if the application begins
|
| - // "tracking" mouse events for a given HWND during WM_MOUSEMOVE events.
|
| - // We need to call |TrackMouseEvents| to listen for WM_MOUSELEAVE.
|
| - if (!HasNativeCapture())
|
| - TrackMouseEvents((message == WM_NCMOUSEMOVE) ?
|
| - TME_NONCLIENT | TME_LEAVE : TME_LEAVE);
|
| - MSG msg;
|
| - MakeMSG(&msg, message, w_param, l_param, 0, GET_X_LPARAM(l_param),
|
| - GET_Y_LPARAM(l_param));
|
| - if (HasNativeCapture() && is_mouse_down_)
|
| - GetRootView()->OnMouseDragged(MouseEvent(msg));
|
| - else if (!last_mouse_event_was_move_ ||
|
| - (last_mouse_move_x_ != GET_X_LPARAM(l_param) ||
|
| - last_mouse_move_y_ != GET_Y_LPARAM(l_param))) {
|
| - last_mouse_move_x_ = GET_X_LPARAM(l_param);
|
| - last_mouse_move_y_ = GET_Y_LPARAM(l_param);
|
| - last_mouse_event_was_move_ = true;
|
| - GetRootView()->OnMouseMoved(MouseEvent(msg));
|
| - }
|
| - return true;
|
| -}
|
| -
|
| -void WidgetWin::ProcessMouseExited(UINT message,
|
| - WPARAM w_param,
|
| - LPARAM l_param) {
|
| - last_mouse_event_was_move_ = false;
|
| - MSG msg;
|
| - MakeMSG(&msg, message, w_param, l_param, 0, GET_X_LPARAM(l_param),
|
| - GET_Y_LPARAM(l_param));
|
| - GetRootView()->OnMouseExited(MouseEvent(msg));
|
| - // Reset our tracking flag so that future mouse movement over this WidgetWin
|
| - // results in a new tracking session.
|
| - active_mouse_tracking_flags_ = 0;
|
| -}
|
| -
|
| void WidgetWin::OnScreenReaderDetected() {
|
| screen_reader_active_ = true;
|
| }
|
|
|
| -bool WidgetWin::ReleaseCaptureOnMouseReleased() {
|
| - return true;
|
| -}
|
| -
|
| ////////////////////////////////////////////////////////////////////////////////
|
| // WidgetWin, private:
|
|
|
| @@ -1136,17 +1005,6 @@ void WidgetWin::PostProcessActivateMessage(WidgetWin* widget,
|
| }
|
| }
|
|
|
| -void WidgetWin::MakeMSG(MSG* msg, UINT message, WPARAM w_param, LPARAM l_param,
|
| - DWORD time, LONG x, LONG y) const {
|
| - msg->hwnd = hwnd();
|
| - msg->message = message;
|
| - msg->wParam = w_param;
|
| - msg->lParam = l_param;
|
| - msg->time = time;
|
| - msg->pt.x = x;
|
| - msg->pt.y = y;
|
| -}
|
| -
|
| void WidgetWin::RedrawInvalidRect() {
|
| if (!use_layered_buffer_) {
|
| RECT r = { 0, 0, 0, 0 };
|
|
|