Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 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 "content/browser/renderer_host/render_widget_host_view_win.h" | 5 #include "content/browser/renderer_host/render_widget_host_view_win.h" |
| 6 | 6 |
| 7 #include <algorithm> | 7 #include <algorithm> |
| 8 | 8 |
| 9 #include "base/command_line.h" | 9 #include "base/command_line.h" |
| 10 #include "base/i18n/rtl.h" | 10 #include "base/i18n/rtl.h" |
| 11 #include "base/metrics/histogram.h" | 11 #include "base/metrics/histogram.h" |
| 12 #include "base/process_util.h" | 12 #include "base/process_util.h" |
| 13 #include "base/threading/thread.h" | 13 #include "base/threading/thread.h" |
| 14 #include "base/win/scoped_comptr.h" | 14 #include "base/win/scoped_comptr.h" |
| 15 #include "base/win/scoped_gdi_object.h" | 15 #include "base/win/scoped_gdi_object.h" |
| 16 #include "base/win/win_util.h" | 16 #include "base/win/win_util.h" |
| 17 #include "base/win/windows_version.h" | 17 #include "base/win/windows_version.h" |
| 18 #include "base/win/wrapped_window_proc.h" | 18 #include "base/win/wrapped_window_proc.h" |
| 19 #include "content/browser/accessibility/browser_accessibility_manager.h" | 19 #include "content/browser/accessibility/browser_accessibility_manager.h" |
| 20 #include "content/browser/accessibility/browser_accessibility_state.h" | 20 #include "content/browser/accessibility/browser_accessibility_state.h" |
| 21 #include "content/browser/accessibility/browser_accessibility_win.h" | 21 #include "content/browser/accessibility/browser_accessibility_win.h" |
| 22 #include "content/browser/browser_thread.h" | 22 #include "content/browser/browser_thread.h" |
| 23 #include "content/browser/plugin_process_host.h" | 23 #include "content/browser/plugin_process_host.h" |
| 24 #include "content/browser/renderer_host/backing_store.h" | 24 #include "content/browser/renderer_host/backing_store.h" |
| 25 #include "content/browser/renderer_host/backing_store_win.h" | 25 #include "content/browser/renderer_host/backing_store_win.h" |
| 26 #include "content/browser/renderer_host/render_process_host.h" | 26 #include "content/browser/renderer_host/render_process_host.h" |
| 27 #include "content/browser/renderer_host/render_widget_host.h" | 27 #include "content/browser/renderer_host/render_widget_host.h" |
| 28 #include "content/public/browser/notification_service.h" | 28 #include "content/public/browser/notification_service.h" |
| 29 #include "content/common/page_zoom.h" | |
| 29 #include "content/common/plugin_messages.h" | 30 #include "content/common/plugin_messages.h" |
| 30 #include "content/common/view_messages.h" | 31 #include "content/common/view_messages.h" |
| 31 #include "content/public/browser/content_browser_client.h" | 32 #include "content/public/browser/content_browser_client.h" |
| 32 #include "content/public/browser/native_web_keyboard_event.h" | 33 #include "content/public/browser/native_web_keyboard_event.h" |
| 33 #include "content/public/browser/notification_types.h" | 34 #include "content/public/browser/notification_types.h" |
| 34 #include "content/public/common/content_switches.h" | 35 #include "content/public/common/content_switches.h" |
| 35 #include "skia/ext/skia_utils_win.h" | 36 #include "skia/ext/skia_utils_win.h" |
| 36 #include "third_party/WebKit/Source/WebKit/chromium/public/WebCompositionUnderli ne.h" | 37 #include "third_party/WebKit/Source/WebKit/chromium/public/WebCompositionUnderli ne.h" |
| 37 #include "third_party/WebKit/Source/WebKit/chromium/public/WebInputEvent.h" | 38 #include "third_party/WebKit/Source/WebKit/chromium/public/WebInputEvent.h" |
| 38 #include "third_party/WebKit/Source/WebKit/chromium/public/win/WebInputEventFact ory.h" | 39 #include "third_party/WebKit/Source/WebKit/chromium/public/win/WebInputEventFact ory.h" |
| (...skipping 155 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 194 case WM_MBUTTONDOWN: | 195 case WM_MBUTTONDOWN: |
| 195 ::SendMessage(GetParent(window), message, wparam, lparam); | 196 ::SendMessage(GetParent(window), message, wparam, lparam); |
| 196 return 0; | 197 return 0; |
| 197 default: | 198 default: |
| 198 break; | 199 break; |
| 199 } | 200 } |
| 200 } | 201 } |
| 201 return ::DefWindowProc(window, message, wparam, lparam); | 202 return ::DefWindowProc(window, message, wparam, lparam); |
| 202 } | 203 } |
| 203 | 204 |
| 204 bool DecodeScrollGesture(WPARAM wParam, | 205 bool DecodeZoomGesture(HWND hwnd, const GESTUREINFO& gi, |
| 205 LPARAM lParam, | 206 PageZoom::Function* zoom, |
| 207 POINT* zoom_center) { | |
| 208 static long start = 0; | |
| 209 static POINT zoom_first; | |
| 210 | |
| 211 if (gi.dwFlags == GF_BEGIN) { | |
| 212 start = gi.ullArguments; | |
| 213 zoom_first.x = gi.ptsLocation.x; | |
| 214 zoom_first.y = gi.ptsLocation.y; | |
| 215 ScreenToClient(hwnd, &zoom_first); | |
| 216 return false; | |
| 217 } | |
| 218 | |
| 219 if (gi.dwFlags == GF_END) | |
| 220 return false; | |
| 221 | |
| 222 POINT zoom_second = {0}; | |
| 223 zoom_second.x = gi.ptsLocation.x; | |
| 224 zoom_second.y = gi.ptsLocation.y; | |
| 225 ScreenToClient(hwnd, &zoom_second); | |
| 226 | |
| 227 zoom_center->x = (zoom_first.x + zoom_second.x) / 2; | |
| 228 zoom_center->y = (zoom_first.y + zoom_second.y) / 2; | |
| 229 | |
| 230 *zoom = PageZoom::ZOOM_IN; | |
| 231 | |
|
cpu_(ooo_6.6-7.5)
2011/10/28 02:30:03
*zoom = distance < start ? zoom_out : zoom_in
ananta
2011/10/28 18:42:03
Done.
| |
| 232 long distance = gi.ullArguments; | |
| 233 | |
| 234 if (distance < start) | |
| 235 *zoom = PageZoom::ZOOM_OUT; | |
| 236 start = distance; | |
| 237 zoom_first = zoom_second; | |
| 238 return true; | |
| 239 } | |
| 240 | |
| 241 bool DecodeScrollGesture(const GESTUREINFO& gi, | |
| 206 POINT* start, | 242 POINT* start, |
| 207 POINT* delta){ | 243 POINT* delta){ |
| 208 // Windows gestures are streams of messages with begin/end messages that | 244 // Windows gestures are streams of messages with begin/end messages that |
| 209 // separate each new gesture. We key off the begin message to reset | 245 // separate each new gesture. We key off the begin message to reset |
| 210 // the static variables. | 246 // the static variables. |
| 211 static POINT last_pt; | 247 static POINT last_pt; |
| 212 static POINT start_pt; | 248 static POINT start_pt; |
| 213 | 249 |
| 214 GESTUREINFO gi = {sizeof(GESTUREINFO)}; | |
| 215 HGESTUREINFO gi_handle = reinterpret_cast<HGESTUREINFO>(lParam); | |
| 216 if (!::GetGestureInfo(gi_handle, &gi)) { | |
| 217 DWORD error = GetLastError(); | |
| 218 NOTREACHED() << "Unable to get gesture info. Error : " << error; | |
| 219 } | |
| 220 | |
| 221 if (gi.dwID != GID_PAN) | |
| 222 return false; | |
| 223 | |
| 224 if (gi.dwFlags == GF_BEGIN) { | 250 if (gi.dwFlags == GF_BEGIN) { |
| 225 delta->x = 0; | 251 delta->x = 0; |
| 226 delta->y = 0; | 252 delta->y = 0; |
| 227 start_pt.x = gi.ptsLocation.x; | 253 start_pt.x = gi.ptsLocation.x; |
| 228 start_pt.y = gi.ptsLocation.y; | 254 start_pt.y = gi.ptsLocation.y; |
| 229 } else { | 255 } else { |
| 230 delta->x = gi.ptsLocation.x - last_pt.x; | 256 delta->x = gi.ptsLocation.x - last_pt.x; |
| 231 delta->y = gi.ptsLocation.y - last_pt.y; | 257 delta->y = gi.ptsLocation.y - last_pt.y; |
| 232 } | 258 } |
| 233 last_pt.x = gi.ptsLocation.x; | 259 last_pt.x = gi.ptsLocation.x; |
| 234 last_pt.y = gi.ptsLocation.y; | 260 last_pt.y = gi.ptsLocation.y; |
| 235 *start = start_pt; | 261 *start = start_pt; |
| 236 ::CloseGestureInfoHandle(gi_handle); | |
| 237 return true; | 262 return true; |
| 238 } | 263 } |
| 239 | 264 |
| 240 WebKit::WebMouseWheelEvent MakeFakeScrollWheelEvent(HWND hwnd, | 265 WebKit::WebMouseWheelEvent MakeFakeScrollWheelEvent(HWND hwnd, |
| 241 POINT start, | 266 POINT start, |
| 242 POINT delta) { | 267 POINT delta) { |
| 243 WebKit::WebMouseWheelEvent result; | 268 WebKit::WebMouseWheelEvent result; |
| 244 result.type = WebInputEvent::MouseWheel; | 269 result.type = WebInputEvent::MouseWheel; |
| 245 result.timeStampSeconds = ::GetMessageTime() / 1000.0; | 270 result.timeStampSeconds = ::GetMessageTime() / 1000.0; |
| 246 result.button = WebMouseEvent::ButtonNone; | 271 result.button = WebMouseEvent::ButtonNone; |
| 247 result.globalX = start.x; | 272 result.globalX = start.x; |
| 248 result.globalY = start.y; | 273 result.globalY = start.y; |
| 249 // Map to window coordinates. | 274 // Map to window coordinates. |
| 250 POINT clientPoint = { result.globalX, result.globalY }; | 275 POINT client_point = { result.globalX, result.globalY }; |
| 251 MapWindowPoints(0, hwnd, &clientPoint, 1); | 276 MapWindowPoints(0, hwnd, &client_point, 1); |
| 252 result.x = clientPoint.x; | 277 result.x = client_point.x; |
| 253 result.y = clientPoint.y; | 278 result.y = client_point.y; |
| 254 result.windowX = result.x; | 279 result.windowX = result.x; |
| 255 result.windowY = result.y; | 280 result.windowY = result.y; |
| 256 // Note that we support diagonal scrolling. | 281 // Note that we support diagonal scrolling. |
| 257 result.deltaX = static_cast<float>(delta.x); | 282 result.deltaX = static_cast<float>(delta.x); |
| 258 result.wheelTicksX = WHEEL_DELTA; | 283 result.wheelTicksX = WHEEL_DELTA; |
| 259 result.deltaY = static_cast<float>(delta.y); | 284 result.deltaY = static_cast<float>(delta.y); |
| 260 result.wheelTicksY = WHEEL_DELTA; | 285 result.wheelTicksY = WHEEL_DELTA; |
| 261 return result; | 286 return result; |
| 262 } | 287 } |
| 263 | 288 |
| 264 } // namespace | 289 } // namespace |
| 265 | 290 |
| 266 /////////////////////////////////////////////////////////////////////////////// | 291 /////////////////////////////////////////////////////////////////////////////// |
| 267 // RenderWidgetHostViewWin, public: | 292 // RenderWidgetHostViewWin, public: |
| 268 | 293 |
| 269 RenderWidgetHostViewWin::RenderWidgetHostViewWin(RenderWidgetHost* widget) | 294 RenderWidgetHostViewWin::RenderWidgetHostViewWin(RenderWidgetHost* widget) |
| 270 : render_widget_host_(widget), | 295 : render_widget_host_(widget), |
| 271 compositor_host_window_(NULL), | 296 compositor_host_window_(NULL), |
| 272 hide_compositor_window_at_next_paint_(false), | 297 hide_compositor_window_at_next_paint_(false), |
| 273 track_mouse_leave_(false), | 298 track_mouse_leave_(false), |
| 274 ime_notification_(false), | 299 ime_notification_(false), |
| 275 capture_enter_key_(false), | 300 capture_enter_key_(false), |
| 276 is_hidden_(false), | 301 is_hidden_(false), |
| 277 about_to_validate_and_paint_(false), | 302 about_to_validate_and_paint_(false), |
| 278 close_on_deactivate_(false), | 303 close_on_deactivate_(false), |
| 279 being_destroyed_(false), | 304 being_destroyed_(false), |
| 280 tooltip_hwnd_(NULL), | 305 tooltip_hwnd_(NULL), |
| 281 tooltip_showing_(false), | 306 tooltip_showing_(false), |
| 282 shutdown_factory_(this), | 307 shutdown_factory_(this), |
| 283 parent_hwnd_(NULL), | 308 parent_hwnd_(NULL), |
| 284 is_loading_(false), | 309 is_loading_(false), |
| 285 overlay_color_(0), | 310 overlay_color_(0), |
| 286 text_input_type_(ui::TEXT_INPUT_TYPE_NONE), | 311 text_input_type_(ui::TEXT_INPUT_TYPE_NONE), |
| 287 is_fullscreen_(false), | 312 is_fullscreen_(false), |
| 288 ignore_mouse_movement_(true) { | 313 ignore_mouse_movement_(true), |
| 314 ignore_next_lbutton_message_at_same_location(false), | |
| 315 last_pointer_down_location_(0) { | |
| 289 render_widget_host_->SetView(this); | 316 render_widget_host_->SetView(this); |
| 290 registrar_.Add(this, | 317 registrar_.Add(this, |
| 291 content::NOTIFICATION_RENDERER_PROCESS_TERMINATED, | 318 content::NOTIFICATION_RENDERER_PROCESS_TERMINATED, |
| 292 content::NotificationService::AllBrowserContextsAndSources()); | 319 content::NotificationService::AllBrowserContextsAndSources()); |
| 293 } | 320 } |
| 294 | 321 |
| 295 RenderWidgetHostViewWin::~RenderWidgetHostViewWin() { | 322 RenderWidgetHostViewWin::~RenderWidgetHostViewWin() { |
| 296 UnlockMouse(); | 323 UnlockMouse(); |
| 297 ResetTooltip(); | 324 ResetTooltip(); |
| 298 } | 325 } |
| 299 | 326 |
| 300 void RenderWidgetHostViewWin::CreateWnd(HWND parent) { | 327 void RenderWidgetHostViewWin::CreateWnd(HWND parent) { |
| 301 Create(parent); // ATL function to create the window. | 328 // ATL function to create the window. |
| 329 Create(parent); | |
| 302 } | 330 } |
| 303 | 331 |
| 304 /////////////////////////////////////////////////////////////////////////////// | 332 /////////////////////////////////////////////////////////////////////////////// |
| 305 // RenderWidgetHostViewWin, RenderWidgetHostView implementation: | 333 // RenderWidgetHostViewWin, RenderWidgetHostView implementation: |
| 306 | 334 |
| 307 void RenderWidgetHostViewWin::InitAsPopup( | 335 void RenderWidgetHostViewWin::InitAsPopup( |
| 308 RenderWidgetHostView* parent_host_view, const gfx::Rect& pos) { | 336 RenderWidgetHostView* parent_host_view, const gfx::Rect& pos) { |
| 309 close_on_deactivate_ = true; | 337 close_on_deactivate_ = true; |
| 310 DoPopupOrFullscreenInit(parent_host_view->GetNativeView(), pos, | 338 DoPopupOrFullscreenInit(parent_host_view->GetNativeView(), pos, |
| 311 WS_EX_TOOLWINDOW); | 339 WS_EX_TOOLWINDOW); |
| (...skipping 962 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1274 ime_input_.DestroyImeWindow(m_hWnd); | 1302 ime_input_.DestroyImeWindow(m_hWnd); |
| 1275 // Let WTL call ::DefWindowProc() and release its resources. | 1303 // Let WTL call ::DefWindowProc() and release its resources. |
| 1276 handled = FALSE; | 1304 handled = FALSE; |
| 1277 return 0; | 1305 return 0; |
| 1278 } | 1306 } |
| 1279 | 1307 |
| 1280 LRESULT RenderWidgetHostViewWin::OnMouseEvent(UINT message, WPARAM wparam, | 1308 LRESULT RenderWidgetHostViewWin::OnMouseEvent(UINT message, WPARAM wparam, |
| 1281 LPARAM lparam, BOOL& handled) { | 1309 LPARAM lparam, BOOL& handled) { |
| 1282 handled = TRUE; | 1310 handled = TRUE; |
| 1283 | 1311 |
| 1312 if (ignore_next_lbutton_message_at_same_location && | |
| 1313 message == WM_LBUTTONDOWN) { | |
| 1314 ignore_next_lbutton_message_at_same_location = false; | |
| 1315 LPARAM last_location = last_pointer_down_location_; | |
| 1316 last_pointer_down_location_ = 0; | |
| 1317 if (last_location == lparam) | |
| 1318 return 0; | |
| 1319 } | |
| 1320 | |
| 1284 if (message == WM_MOUSELEAVE) | 1321 if (message == WM_MOUSELEAVE) |
| 1285 ignore_mouse_movement_ = true; | 1322 ignore_mouse_movement_ = true; |
| 1286 | 1323 |
| 1287 if (mouse_locked_) { | 1324 if (mouse_locked_) { |
| 1288 HandleLockedMouseEvent(message, wparam, lparam); | 1325 HandleLockedMouseEvent(message, wparam, lparam); |
| 1289 MoveCursorToCenter(); | 1326 MoveCursorToCenter(); |
| 1290 return 0; | 1327 return 0; |
| 1291 } | 1328 } |
| 1292 | 1329 |
| 1293 if (::IsWindow(tooltip_hwnd_)) { | 1330 if (::IsWindow(tooltip_hwnd_)) { |
| (...skipping 232 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1526 ::SetFocus(child_window); | 1563 ::SetFocus(child_window); |
| 1527 return MA_NOACTIVATE; | 1564 return MA_NOACTIVATE; |
| 1528 } | 1565 } |
| 1529 } | 1566 } |
| 1530 handled = FALSE; | 1567 handled = FALSE; |
| 1531 render_widget_host_->OnMouseActivate(); | 1568 render_widget_host_->OnMouseActivate(); |
| 1532 return MA_ACTIVATE; | 1569 return MA_ACTIVATE; |
| 1533 } | 1570 } |
| 1534 | 1571 |
| 1535 LRESULT RenderWidgetHostViewWin::OnGestureEvent( | 1572 LRESULT RenderWidgetHostViewWin::OnGestureEvent( |
| 1536 UINT message, WPARAM wparam, LPARAM lparam, BOOL& handled) { | 1573 UINT message, WPARAM wparam, LPARAM lparam, BOOL& handled) { |
| 1537 // Right now we only decode scroll gestures and we forward to the page | 1574 |
| 1538 // as scroll events. | 1575 handled = FALSE; |
| 1539 POINT start; | 1576 |
| 1540 POINT delta; | 1577 GESTUREINFO gi = {sizeof(GESTUREINFO)}; |
| 1541 if (DecodeScrollGesture(wparam, lparam, &start, &delta)) { | 1578 HGESTUREINFO gi_handle = reinterpret_cast<HGESTUREINFO>(lparam); |
| 1542 handled = TRUE; | 1579 if (!::GetGestureInfo(gi_handle, &gi)) { |
| 1543 render_widget_host_->ForwardWheelEvent( | 1580 DWORD error = GetLastError(); |
| 1544 MakeFakeScrollWheelEvent(m_hWnd, start, delta)); | 1581 NOTREACHED() << "Unable to get gesture info. Error : " << error; |
| 1545 } else { | 1582 ::CloseGestureInfoHandle(gi_handle); |
|
cpu_(ooo_6.6-7.5)
2011/10/28 02:30:03
dont call close here.
ananta
2011/10/28 18:42:03
Done.
| |
| 1546 handled = FALSE; | 1583 return 0; |
| 1547 } | 1584 } |
| 1585 | |
| 1586 if (gi.dwID == GID_ZOOM) { | |
| 1587 PageZoom::Function zoom = PageZoom::RESET; | |
| 1588 POINT zoom_center = {0}; | |
| 1589 if (DecodeZoomGesture(m_hWnd, gi, &zoom, &zoom_center)) { | |
| 1590 handled = TRUE; | |
| 1591 Send(new ViewMsg_ZoomFactor(render_widget_host_->routing_id(), | |
| 1592 zoom, zoom_center.x, zoom_center.y)); | |
| 1593 } | |
| 1594 } else if (gi.dwID == GID_PAN) { | |
| 1595 // Right now we only decode scroll gestures and we forward to the page | |
| 1596 // as scroll events. | |
| 1597 POINT start; | |
| 1598 POINT delta; | |
| 1599 if (DecodeScrollGesture(gi, &start, &delta)) { | |
| 1600 handled = TRUE; | |
| 1601 render_widget_host_->ForwardWheelEvent( | |
| 1602 MakeFakeScrollWheelEvent(m_hWnd, start, delta)); | |
| 1603 } | |
| 1604 } | |
| 1605 ::CloseGestureInfoHandle(gi_handle); | |
| 1548 return 0; | 1606 return 0; |
| 1549 } | 1607 } |
| 1550 | 1608 |
| 1551 void RenderWidgetHostViewWin::OnAccessibilityNotifications( | 1609 void RenderWidgetHostViewWin::OnAccessibilityNotifications( |
| 1552 const std::vector<ViewHostMsg_AccessibilityNotification_Params>& params) { | 1610 const std::vector<ViewHostMsg_AccessibilityNotification_Params>& params) { |
| 1553 if (!browser_accessibility_manager_.get()) { | 1611 if (!browser_accessibility_manager_.get()) { |
| 1554 browser_accessibility_manager_.reset( | 1612 browser_accessibility_manager_.reset( |
| 1555 BrowserAccessibilityManager::CreateEmptyDocument( | 1613 BrowserAccessibilityManager::CreateEmptyDocument( |
| 1556 m_hWnd, static_cast<WebAccessibility::State>(0), this)); | 1614 m_hWnd, static_cast<WebAccessibility::State>(0), this)); |
| 1557 } | 1615 } |
| (...skipping 264 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1822 case WM_RBUTTONDOWN: | 1880 case WM_RBUTTONDOWN: |
| 1823 case WM_MBUTTONDOWN: | 1881 case WM_MBUTTONDOWN: |
| 1824 render_widget_host_->StartUserGesture(); | 1882 render_widget_host_->StartUserGesture(); |
| 1825 break; | 1883 break; |
| 1826 default: | 1884 default: |
| 1827 break; | 1885 break; |
| 1828 } | 1886 } |
| 1829 return 0; | 1887 return 0; |
| 1830 } | 1888 } |
| 1831 | 1889 |
| 1890 LRESULT RenderWidgetHostViewWin::OnPointerMessage( | |
| 1891 UINT message, WPARAM wparam, LPARAM lparam, BOOL& handled) { | |
| 1892 POINT point = {0}; | |
| 1893 | |
| 1894 point.x = GET_X_LPARAM(lparam); | |
| 1895 point.y = GET_Y_LPARAM(lparam); | |
| 1896 ScreenToClient(&point); | |
| 1897 | |
| 1898 lparam = MAKELPARAM(point.x, point.y); | |
| 1899 | |
| 1900 if (message == WM_POINTERDOWN) { | |
| 1901 OnMouseEvent(WM_LBUTTONDOWN, MK_LBUTTON, lparam, handled); | |
| 1902 ignore_next_lbutton_message_at_same_location = true; | |
| 1903 last_pointer_down_location_ = lparam; | |
| 1904 } else if (message == WM_POINTERUP) { | |
| 1905 OnMouseEvent(WM_LBUTTONUP, MK_LBUTTON, lparam, handled); | |
| 1906 } | |
| 1907 handled = FALSE; | |
| 1908 return 0; | |
| 1909 } | |
| 1910 | |
| 1832 void RenderWidgetHostViewWin::OnFinalMessage(HWND window) { | 1911 void RenderWidgetHostViewWin::OnFinalMessage(HWND window) { |
| 1833 // When the render widget host is being destroyed, it ends up calling | 1912 // When the render widget host is being destroyed, it ends up calling |
| 1834 // Destroy() which NULLs render_widget_host_. | 1913 // Destroy() which NULLs render_widget_host_. |
| 1835 // Note: the following bug http://crbug.com/24248 seems to report that | 1914 // Note: the following bug http://crbug.com/24248 seems to report that |
| 1836 // OnFinalMessage is called with a deleted |render_widget_host_|. It is not | 1915 // OnFinalMessage is called with a deleted |render_widget_host_|. It is not |
| 1837 // clear how this could happen, hence the NULLing of render_widget_host_ | 1916 // clear how this could happen, hence the NULLing of render_widget_host_ |
| 1838 // above. | 1917 // above. |
| 1839 if (!render_widget_host_ && !being_destroyed_) { | 1918 if (!render_widget_host_ && !being_destroyed_) { |
| 1840 // If you hit this NOTREACHED, please add a comment to report it on | 1919 // If you hit this NOTREACHED, please add a comment to report it on |
| 1841 // http://crbug.com/24248, including what you did when it happened and if | 1920 // http://crbug.com/24248, including what you did when it happened and if |
| (...skipping 176 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 2018 if (message == WM_MOUSEMOVE) { | 2097 if (message == WM_MOUSEMOVE) { |
| 2019 CPoint center = GetClientCenter(); | 2098 CPoint center = GetClientCenter(); |
| 2020 // Ignore WM_MOUSEMOVE messages generated by MoveCursorToCenter(). | 2099 // Ignore WM_MOUSEMOVE messages generated by MoveCursorToCenter(). |
| 2021 if (LOWORD(lparam) == center.x && HIWORD(lparam) == center.y) | 2100 if (LOWORD(lparam) == center.x && HIWORD(lparam) == center.y) |
| 2022 return; | 2101 return; |
| 2023 } | 2102 } |
| 2024 | 2103 |
| 2025 ForwardMouseEventToRenderer(message, wparam, lparam); | 2104 ForwardMouseEventToRenderer(message, wparam, lparam); |
| 2026 } | 2105 } |
| 2027 | 2106 |
| OLD | NEW |