Index: win8/metro_driver/chrome_app_view_ash.cc |
diff --git a/win8/metro_driver/chrome_app_view_ash.cc b/win8/metro_driver/chrome_app_view_ash.cc |
index 0e1d0e75a5837af9930a48cb117684648c270037..8e3adf20ad8277d3acb45c365ee413fc03058600 100644 |
--- a/win8/metro_driver/chrome_app_view_ash.cc |
+++ b/win8/metro_driver/chrome_app_view_ash.cc |
@@ -530,7 +530,8 @@ ChromeAppViewAsh::ChromeAppViewAsh() |
ui_channel_(nullptr), |
core_window_hwnd_(NULL), |
metro_dpi_scale_(0), |
- win32_dpi_scale_(0) { |
+ win32_dpi_scale_(0), |
+ last_cursor_(NULL) { |
DVLOG(1) << __FUNCTION__; |
globals.previous_state = |
winapp::Activation::ApplicationExecutionState_NotRunning; |
@@ -815,7 +816,8 @@ void ChromeAppViewAsh::OnOpenURLOnDesktop(const base::FilePath& shortcut, |
} |
void ChromeAppViewAsh::OnSetCursor(HCURSOR cursor) { |
- ::SetCursor(HCURSOR(cursor)); |
+ ::SetCursor(cursor); |
+ last_cursor_ = cursor; |
} |
void ChromeAppViewAsh::OnDisplayFileOpenDialog( |
@@ -1082,6 +1084,11 @@ HRESULT ChromeAppViewAsh::OnPointerMoved(winui::Core::ICoreWindow* sender, |
return hr; |
if (pointer.IsMouse()) { |
+ // If the mouse was moved towards the charms or the OS specific section, |
+ // the cursor may change from what the browser last set. Restore it here. |
+ if (::GetCursor() != last_cursor_) |
+ SetCursor(last_cursor_); |
+ |
GenerateMouseEventFromMoveIfNecessary(pointer); |
ui_channel_->Send(new MetroViewerHostMsg_MouseMoved( |
pointer.x(), |