Index: ui/views/widget/desktop_aura/desktop_window_tree_host_x11.cc |
diff --git a/ui/views/widget/desktop_aura/desktop_window_tree_host_x11.cc b/ui/views/widget/desktop_aura/desktop_window_tree_host_x11.cc |
index 3c992813568aa97c66c5617ef3a75b1be63f99dd..781000ed1fdbd3f8784aa136cde909919522b269 100644 |
--- a/ui/views/widget/desktop_aura/desktop_window_tree_host_x11.cc |
+++ b/ui/views/widget/desktop_aura/desktop_window_tree_host_x11.cc |
@@ -958,8 +958,17 @@ void DesktopWindowTreeHostX11::SetCapture() { |
unsigned int event_mask = PointerMotionMask | ButtonReleaseMask | |
ButtonPressMask; |
- XGrabPointer(xdisplay_, xwindow_, True, event_mask, GrabModeAsync, |
- GrabModeAsync, None, None, CurrentTime); |
+ int success = |
+ XGrabPointer(xdisplay_, xwindow_, True, event_mask, GrabModeAsync, |
+ GrabModeAsync, None, None, CurrentTime); |
+ if (success == AlreadyGrabbed) { |
sadrul
2014/11/24 15:46:01
Can you link to some doc here? man XGrabPointer cl
pkotwicz
2014/11/24 16:07:41
The docs are not great. However man XUngrabPointer
sadrul
2014/11/27 17:48:18
Do we have example of any other clients doing simi
|
+ // Try ungrabbing the pointer and regrabbing it. If the OS grabbed capture |
+ // as a result of a mouse button being pressed, ungrabbing and regrabbing |
+ // the pointer will succeed. |
+ XUngrabPointer(xdisplay_, CurrentTime); |
+ XGrabPointer(xdisplay_, xwindow_, True, event_mask, GrabModeAsync, |
+ GrabModeAsync, None, None, CurrentTime); |
+ } |
} |
void DesktopWindowTreeHostX11::ReleaseCapture() { |