Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(18)

Side by Side Diff: ui/views/win/hwnd_message_handler.cc

Issue 236183004: Get horizontal wheel scrolling working again with logitech drivers. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: Created 6 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « ui/views/win/hwnd_message_handler.h ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "ui/views/win/hwnd_message_handler.h" 5 #include "ui/views/win/hwnd_message_handler.h"
6 6
7 #include <dwmapi.h> 7 #include <dwmapi.h>
8 #include <oleacc.h> 8 #include <oleacc.h>
9 #include <shellapi.h> 9 #include <shellapi.h>
10 #include <wtsapi32.h> 10 #include <wtsapi32.h>
(...skipping 341 matching lines...) Expand 10 before | Expand all | Expand 10 after
352 last_monitor_(NULL), 352 last_monitor_(NULL),
353 use_layered_buffer_(false), 353 use_layered_buffer_(false),
354 layered_alpha_(255), 354 layered_alpha_(255),
355 waiting_for_redraw_layered_window_contents_(false), 355 waiting_for_redraw_layered_window_contents_(false),
356 is_first_nccalc_(true), 356 is_first_nccalc_(true),
357 menu_depth_(0), 357 menu_depth_(0),
358 autohide_factory_(this), 358 autohide_factory_(this),
359 id_generator_(0), 359 id_generator_(0),
360 needs_scroll_styles_(false), 360 needs_scroll_styles_(false),
361 in_size_loop_(false), 361 in_size_loop_(false),
362 touch_down_context_(false) { 362 touch_down_context_(false),
363 last_mouse_hwheel_time_(0) {
363 } 364 }
364 365
365 HWNDMessageHandler::~HWNDMessageHandler() { 366 HWNDMessageHandler::~HWNDMessageHandler() {
366 delegate_ = NULL; 367 delegate_ = NULL;
367 // Prevent calls back into this class via WNDPROC now that we've been 368 // Prevent calls back into this class via WNDPROC now that we've been
368 // destroyed. 369 // destroyed.
369 ClearUserData(); 370 ClearUserData();
370 } 371 }
371 372
372 void HWNDMessageHandler::Init(HWND parent, const gfx::Rect& bounds) { 373 void HWNDMessageHandler::Init(HWND parent, const gfx::Rect& bounds) {
(...skipping 1935 matching lines...) Expand 10 before | Expand all | Expand 10 after
2308 if (message != WM_MOUSEWHEEL && message != WM_MOUSEHWHEEL) { 2309 if (message != WM_MOUSEWHEEL && message != WM_MOUSEHWHEEL) {
2309 POINT screen_point = CR_POINT_INITIALIZER_FROM_LPARAM(l_param_ht); 2310 POINT screen_point = CR_POINT_INITIALIZER_FROM_LPARAM(l_param_ht);
2310 MapWindowPoints(hwnd(), HWND_DESKTOP, &screen_point, 1); 2311 MapWindowPoints(hwnd(), HWND_DESKTOP, &screen_point, 1);
2311 l_param_ht = MAKELPARAM(screen_point.x, screen_point.y); 2312 l_param_ht = MAKELPARAM(screen_point.x, screen_point.y);
2312 } 2313 }
2313 LRESULT hittest = SendMessage(hwnd(), WM_NCHITTEST, 0, l_param_ht); 2314 LRESULT hittest = SendMessage(hwnd(), WM_NCHITTEST, 0, l_param_ht);
2314 if (hittest == HTCLIENT || hittest == HTNOWHERE) 2315 if (hittest == HTCLIENT || hittest == HTNOWHERE)
2315 return 0; 2316 return 0;
2316 } 2317 }
2317 2318
2319 // Certain logitech drivers send the WM_MOUSEHWHEEL message to the parent
2320 // followed by WM_MOUSEWHEEL messages to the child window causing a vertical
2321 // scroll. We treat these WM_MOUSEWHEEL messages as WM_MOUSEHWHEEL
2322 // messages.
2323 if (message == WM_MOUSEHWHEEL)
2324 last_mouse_hwheel_time_ = ::GetMessageTime();
2325
2326 if (message == WM_MOUSEWHEEL &&
2327 ::GetMessageTime() == last_mouse_hwheel_time_) {
2328 message = WM_MOUSEHWHEEL;
2329 }
2330
2318 if (message == WM_RBUTTONUP && is_right_mouse_pressed_on_caption_) { 2331 if (message == WM_RBUTTONUP && is_right_mouse_pressed_on_caption_) {
2319 is_right_mouse_pressed_on_caption_ = false; 2332 is_right_mouse_pressed_on_caption_ = false;
2320 ReleaseCapture(); 2333 ReleaseCapture();
2321 // |point| is in window coordinates, but WM_NCHITTEST and TrackPopupMenu() 2334 // |point| is in window coordinates, but WM_NCHITTEST and TrackPopupMenu()
2322 // expect screen coordinates. 2335 // expect screen coordinates.
2323 POINT screen_point = CR_POINT_INITIALIZER_FROM_LPARAM(l_param); 2336 POINT screen_point = CR_POINT_INITIALIZER_FROM_LPARAM(l_param);
2324 MapWindowPoints(hwnd(), HWND_DESKTOP, &screen_point, 1); 2337 MapWindowPoints(hwnd(), HWND_DESKTOP, &screen_point, 1);
2325 w_param = SendMessage(hwnd(), WM_NCHITTEST, 0, 2338 w_param = SendMessage(hwnd(), WM_NCHITTEST, 0,
2326 MAKELPARAM(screen_point.x, screen_point.y)); 2339 MAKELPARAM(screen_point.x, screen_point.y));
2327 if (w_param == HTCAPTION || w_param == HTSYSMENU) { 2340 if (w_param == HTCAPTION || w_param == HTSYSMENU) {
(...skipping 94 matching lines...) Expand 10 before | Expand all | Expand 10 after
2422 POINT cursor_pos = {0}; 2435 POINT cursor_pos = {0};
2423 ::GetCursorPos(&cursor_pos); 2436 ::GetCursorPos(&cursor_pos);
2424 if (memcmp(&cursor_pos, &mouse_location, sizeof(POINT))) 2437 if (memcmp(&cursor_pos, &mouse_location, sizeof(POINT)))
2425 return false; 2438 return false;
2426 return true; 2439 return true;
2427 } 2440 }
2428 return false; 2441 return false;
2429 } 2442 }
2430 2443
2431 } // namespace views 2444 } // namespace views
OLDNEW
« no previous file with comments | « ui/views/win/hwnd_message_handler.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698