| Index: views/window/window_win.cc
|
| diff --git a/views/window/window_win.cc b/views/window/window_win.cc
|
| index 375bf31b404e7466b8b8be4f78f58eb7e8745a13..1d635559f63f7eb12be47c2a98570b0f3efedc55 100644
|
| --- a/views/window/window_win.cc
|
| +++ b/views/window/window_win.cc
|
| @@ -472,28 +472,71 @@ LRESULT WindowWin::OnMouseActivate(UINT message, WPARAM w_param,
|
| }
|
|
|
| LRESULT WindowWin::OnMouseRange(UINT message, WPARAM w_param, LPARAM l_param) {
|
| - if (message == WM_RBUTTONUP) {
|
| - if (is_right_mouse_pressed_on_caption_) {
|
| - is_right_mouse_pressed_on_caption_ = false;
|
| - ReleaseCapture();
|
| - // |point| is in window coordinates, but WM_NCHITTEST and TrackPopupMenu()
|
| - // expect screen coordinates.
|
| - CPoint screen_point(l_param);
|
| - MapWindowPoints(GetNativeView(), HWND_DESKTOP, &screen_point, 1);
|
| - w_param = SendMessage(GetNativeView(), WM_NCHITTEST, 0,
|
| - MAKELPARAM(screen_point.x, screen_point.y));
|
| - if (w_param == HTCAPTION || w_param == HTSYSMENU) {
|
| - UINT flags = TPM_LEFTBUTTON | TPM_RIGHTBUTTON | TPM_RETURNCMD;
|
| - if (base::i18n::IsRTL())
|
| - flags |= TPM_RIGHTALIGN;
|
| - HMENU system_menu = GetSystemMenu(GetNativeView(), FALSE);
|
| - int id = TrackPopupMenu(system_menu, flags, screen_point.x,
|
| - screen_point.y, 0, GetNativeView(), NULL);
|
| - ExecuteSystemMenuCommand(id);
|
| + if (message == WM_RBUTTONUP && is_right_mouse_pressed_on_caption_) {
|
| + is_right_mouse_pressed_on_caption_ = false;
|
| + ReleaseCapture();
|
| + // |point| is in window coordinates, but WM_NCHITTEST and TrackPopupMenu()
|
| + // expect screen coordinates.
|
| + CPoint screen_point(l_param);
|
| + MapWindowPoints(GetNativeView(), HWND_DESKTOP, &screen_point, 1);
|
| + w_param = SendMessage(GetNativeView(), WM_NCHITTEST, 0,
|
| + MAKELPARAM(screen_point.x, screen_point.y));
|
| + if (w_param == HTCAPTION || w_param == HTSYSMENU) {
|
| + UINT flags = TPM_LEFTBUTTON | TPM_RIGHTBUTTON | TPM_RETURNCMD;
|
| + if (base::i18n::IsRTL())
|
| + flags |= TPM_RIGHTALIGN;
|
| + HMENU system_menu = GetSystemMenu(GetNativeView(), FALSE);
|
| + int id = TrackPopupMenu(system_menu, flags, screen_point.x,
|
| + screen_point.y, 0, GetNativeView(), NULL);
|
| + ExecuteSystemMenuCommand(id);
|
| + return 0;
|
| + }
|
| + } else if (message == WM_NCLBUTTONDOWN && !delegate_->IsUsingNativeFrame()) {
|
| + switch (w_param) {
|
| + case HTCLOSE:
|
| + case HTMINBUTTON:
|
| + case HTMAXBUTTON: {
|
| + // When the mouse is pressed down in these specific non-client areas,
|
| + // we need to tell the RootView to send the mouse pressed event (which
|
| + // sets capture, allowing subsequent WM_LBUTTONUP (note, _not_
|
| + // WM_NCLBUTTONUP) to fire so that the appropriate WM_SYSCOMMAND can be
|
| + // sent by the applicable button's ButtonListener. We _have_ to do this
|
| + // way rather than letting Windows just send the syscommand itself (as
|
| + // would happen if we never did this dance) because for some insane
|
| + // reason DefWindowProc for WM_NCLBUTTONDOWN also renders the pressed
|
| + // window control button appearance, in the Windows classic style, over
|
| + // our view! Ick! By handling this message we prevent Windows from
|
| + // doing this undesirable thing, but that means we need to roll the
|
| + // sys-command handling ourselves.
|
| + // Combine |w_param| with common key state message flags.
|
| + w_param |= ((GetKeyState(VK_CONTROL) & 0x80) == 0x80)? MK_CONTROL : 0;
|
| + w_param |= ((GetKeyState(VK_SHIFT) & 0x80) == 0x80)? MK_SHIFT : 0;
|
| + WidgetWin::OnMouseRange(message, w_param, l_param);
|
| return 0;
|
| }
|
| }
|
| + } else if (message == WM_NCRBUTTONDOWN &&
|
| + (w_param == HTCAPTION || w_param == HTSYSMENU)) {
|
| + is_right_mouse_pressed_on_caption_ = true;
|
| + // We SetMouseCapture() to ensure we only show the menu when the button
|
| + // down and up are both on the caption. Note: this causes the button up to
|
| + // be WM_RBUTTONUP instead of WM_NCRBUTTONUP.
|
| + SetMouseCapture();
|
| + }
|
| +
|
| + /* TODO(beng): Fix the standard non-client over-painting bug. This code
|
| + doesn't work but identifies the problem.
|
| + if (message == WM_NCLBUTTONDOWN && !IsMsgHandled()) {
|
| + // WindowWin::OnNCLButtonDown set the message as unhandled. This normally
|
| + // means WidgetWin::ProcessWindowMessage will pass it to
|
| + // DefWindowProc. Sadly, DefWindowProc for WM_NCLBUTTONDOWN does weird
|
| + // non-client painting, so we need to call it directly here inside a
|
| + // scoped update lock.
|
| + ScopedRedrawLock lock(this);
|
| + DefWindowProc(GetNativeView(), WM_NCLBUTTONDOWN, w_param, l_param);
|
| + SetMsgHandled(TRUE);
|
| }
|
| + */
|
|
|
| WidgetWin::OnMouseRange(message, w_param, l_param);
|
| return 0;
|
| @@ -626,63 +669,6 @@ LRESULT WindowWin::OnNCHitTest(const CPoint& point) {
|
| return WidgetWin::OnNCHitTest(point);
|
| }
|
|
|
| -LRESULT WindowWin::OnNCMouseRange(UINT message,
|
| - WPARAM w_param,
|
| - LPARAM l_param) {
|
| - // When we're using a native frame, window controls work without us
|
| - // interfering.
|
| - if (message == WM_NCLBUTTONDOWN && !delegate_->IsUsingNativeFrame()) {
|
| - switch (w_param) {
|
| - case HTCLOSE:
|
| - case HTMINBUTTON:
|
| - case HTMAXBUTTON: {
|
| - // When the mouse is pressed down in these specific non-client areas,
|
| - // we need to tell the RootView to send the mouse pressed event (which
|
| - // sets capture, allowing subsequent WM_LBUTTONUP (note, _not_
|
| - // WM_NCLBUTTONUP) to fire so that the appropriate WM_SYSCOMMAND can be
|
| - // sent by the applicable button's ButtonListener. We _have_ to do this
|
| - // way rather than letting Windows just send the syscommand itself (as
|
| - // would happen if we never did this dance) because for some insane
|
| - // reason DefWindowProc for WM_NCLBUTTONDOWN also renders the pressed
|
| - // window control button appearance, in the Windows classic style, over
|
| - // our view! Ick! By handling this message we prevent Windows from
|
| - // doing this undesirable thing, but that means we need to roll the
|
| - // sys-command handling ourselves.
|
| - // Combine |w_param| with common key state message flags.
|
| - w_param |= ((GetKeyState(VK_CONTROL) & 0x80) == 0x80)? MK_CONTROL : 0;
|
| - w_param |= ((GetKeyState(VK_SHIFT) & 0x80) == 0x80)? MK_SHIFT : 0;
|
| - ProcessMousePressed(message, w_param, l_param);
|
| - return 0;
|
| - }
|
| - }
|
| - } else if (message == WM_NCRBUTTONDOWN &&
|
| - (w_param == HTCAPTION || w_param == HTSYSMENU)) {
|
| - is_right_mouse_pressed_on_caption_ = true;
|
| - // We SetCapture() to ensure we only show the menu when the button down and
|
| - // up are both on the caption. Note: this causes the button up to be
|
| - // WM_RBUTTONUP instead of WM_NCRBUTTONUP.
|
| - SetNativeCapture();
|
| - }
|
| -
|
| - WidgetWin::OnNCMouseRange(message, w_param, l_param);
|
| -
|
| - /* TODO(beng): Fix the standard non-client over-painting bug. This code
|
| - doesn't work but identifies the problem.
|
| - if (message == WM_NCLBUTTONDOWN && !IsMsgHandled()) {
|
| - // WindowWin::OnNCLButtonDown set the message as unhandled. This normally
|
| - // means WidgetWin::ProcessWindowMessage will pass it to
|
| - // DefWindowProc. Sadly, DefWindowProc for WM_NCLBUTTONDOWN does weird
|
| - // non-client painting, so we need to call it directly here inside a
|
| - // scoped update lock.
|
| - ScopedRedrawLock lock(this);
|
| - DefWindowProc(GetNativeView(), WM_NCLBUTTONDOWN, w_param, l_param);
|
| - SetMsgHandled(TRUE);
|
| - }
|
| - */
|
| -
|
| - return 0;
|
| -}
|
| -
|
| void WindowWin::OnNCPaint(HRGN rgn) {
|
| // When using a custom frame, we want to avoid calling DefWindowProc() since
|
| // that may render artifacts.
|
|
|