| Index: chrome/browser/web_contents.cc
|
| ===================================================================
|
| --- chrome/browser/web_contents.cc (revision 2238)
|
| +++ chrome/browser/web_contents.cc (working copy)
|
| @@ -376,13 +376,6 @@
|
| SetMsgHandled(FALSE);
|
| }
|
|
|
| -void WebContents::OnHScroll(int scroll_type, short position, HWND scrollbar) {
|
| - // This window can receive scroll events as a result of the ThinkPad's
|
| - // trackpad scroll wheel emulation.
|
| - if (!ScrollZoom(scroll_type))
|
| - SetMsgHandled(FALSE);
|
| -}
|
| -
|
| LRESULT WebContents::OnMouseRange(UINT msg, WPARAM w_param, LPARAM l_param) {
|
| switch (msg) {
|
| case WM_LBUTTONDOWN:
|
| @@ -398,12 +391,7 @@
|
| if (delegate())
|
| delegate()->ContentsMouseEvent(this, WM_MOUSEMOVE);
|
| break;
|
| - case WM_MOUSEWHEEL:
|
| - // This message is reflected from the view() to this window.
|
| - if (GET_KEYSTATE_WPARAM(w_param) & MK_CONTROL) {
|
| - WheelZoom(GET_WHEEL_DELTA_WPARAM(w_param));
|
| - return 1;
|
| - }
|
| + default:
|
| break;
|
| }
|
|
|
| @@ -418,23 +406,74 @@
|
| SetMsgHandled(FALSE);
|
| }
|
|
|
| +// A message is reflected here from view().
|
| +// Return non-zero to indicate that it is handled here.
|
| +// Return 0 to allow view() to further process it.
|
| LRESULT WebContents::OnReflectedMessage(UINT msg, WPARAM w_param,
|
| LPARAM l_param) {
|
| MSG* message = reinterpret_cast<MSG*>(l_param);
|
| - LRESULT ret = 0;
|
| - if (message) {
|
| - ProcessWindowMessage(message->hwnd, message->message, message->wParam,
|
| - message->lParam, ret);
|
| + switch (message->message) {
|
| + case WM_MOUSEWHEEL:
|
| + // This message is reflected from the view() to this window.
|
| + if (GET_KEYSTATE_WPARAM(message->wParam) & MK_CONTROL) {
|
| + WheelZoom(GET_WHEEL_DELTA_WPARAM(message->wParam));
|
| + return 1;
|
| + }
|
| + break;
|
| + case WM_HSCROLL:
|
| + case WM_VSCROLL:
|
| + if (ScrollZoom(LOWORD(message->wParam)))
|
| + return 1;
|
| + default:
|
| + break;
|
| }
|
|
|
| - return ret;
|
| + return 0;
|
| }
|
|
|
| +void WebContents::OnSize(UINT param, const CSize& size) {
|
| + HWNDViewContainer::OnSize(param, size);
|
| +
|
| + // Hack for thinkpad touchpad driver.
|
| + // Set fake scrollbars so that we can get scroll messages,
|
| + SCROLLINFO si = {0};
|
| + si.cbSize = sizeof(si);
|
| + si.fMask = SIF_ALL;
|
| +
|
| + si.nMin = 1;
|
| + si.nMax = 100;
|
| + si.nPage = 10;
|
| + si.nTrackPos = 50;
|
| +
|
| + ::SetScrollInfo(GetHWND(), SB_HORZ, &si, FALSE);
|
| + ::SetScrollInfo(GetHWND(), SB_VERT, &si, FALSE);
|
| +}
|
| +
|
| +LRESULT WebContents::OnNCCalcSize(BOOL w_param, LPARAM l_param) {
|
| + // Hack for thinkpad mouse wheel driver. We have set the fake scroll bars
|
| + // to receive scroll messages from thinkpad touchpad driver. Suppress
|
| + // painting of scrollbars by returning 0 size for them.
|
| + return 0;
|
| +}
|
| +
|
| +void WebContents::OnHScroll(int scroll_type, short position, HWND scrollbar) {
|
| + ScrollCommon(WM_HSCROLL, scroll_type, position, scrollbar);
|
| +}
|
| +
|
| void WebContents::OnVScroll(int scroll_type, short position, HWND scrollbar) {
|
| + ScrollCommon(WM_VSCROLL, scroll_type, position, scrollbar);
|
| +}
|
| +
|
| +void WebContents::ScrollCommon(UINT message, int scroll_type, short position,
|
| + HWND scrollbar) {
|
| // This window can receive scroll events as a result of the ThinkPad's
|
| - // TrackPad scroll wheel emulation.
|
| - if (!ScrollZoom(scroll_type))
|
| - SetMsgHandled(FALSE);
|
| + // Trackpad scroll wheel emulation.
|
| + if (!ScrollZoom(scroll_type)) {
|
| + // Reflect scroll message to the view() to give it a chance
|
| + // to process scrolling.
|
| + SendMessage(GetContentHWND(), message, MAKELONG(scroll_type, position),
|
| + (LPARAM) scrollbar);
|
| + }
|
| }
|
|
|
| bool WebContents::ScrollZoom(int scroll_type) {
|
|
|