OLD | NEW |
1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 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 "base/logging.h" | 5 #include "base/logging.h" |
6 #include "ui/base/x/x11_util.h" | 6 #include "ui/base/x/x11_util.h" |
7 #include "ui/events/devices/x11/device_data_manager_x11.h" | 7 #include "ui/events/devices/x11/device_data_manager_x11.h" |
8 #include "ui/views/widget/desktop_aura/x11_pointer_grab.h" | 8 #include "ui/views/widget/desktop_aura/x11_pointer_grab.h" |
9 | 9 |
10 #include <X11/extensions/XInput2.h> | 10 #include <X11/extensions/XInput2.h> |
(...skipping 14 matching lines...) Expand all Loading... |
25 int GrabPointer(XID window, bool owner_events, ::Cursor cursor) { | 25 int GrabPointer(XID window, bool owner_events, ::Cursor cursor) { |
26 int result = GrabInvalidTime; | 26 int result = GrabInvalidTime; |
27 if (ui::IsXInput2Available()) { | 27 if (ui::IsXInput2Available()) { |
28 // Do an XInput2 pointer grab. If there is an active XInput2 pointer grab | 28 // Do an XInput2 pointer grab. If there is an active XInput2 pointer grab |
29 // as a result of normal button press, XGrabPointer() will fail. | 29 // as a result of normal button press, XGrabPointer() will fail. |
30 unsigned char mask[XIMaskLen(XI_LASTEVENT)]; | 30 unsigned char mask[XIMaskLen(XI_LASTEVENT)]; |
31 memset(mask, 0, sizeof(mask)); | 31 memset(mask, 0, sizeof(mask)); |
32 XISetMask(mask, XI_ButtonPress); | 32 XISetMask(mask, XI_ButtonPress); |
33 XISetMask(mask, XI_ButtonRelease); | 33 XISetMask(mask, XI_ButtonRelease); |
34 XISetMask(mask, XI_Motion); | 34 XISetMask(mask, XI_Motion); |
| 35 XISetMask(mask, XI_TouchBegin); |
| 36 XISetMask(mask, XI_TouchUpdate); |
| 37 XISetMask(mask, XI_TouchEnd); |
35 XIEventMask evmask; | 38 XIEventMask evmask; |
36 evmask.mask_len = sizeof(mask); | 39 evmask.mask_len = sizeof(mask); |
37 evmask.mask = mask; | 40 evmask.mask = mask; |
38 | 41 |
39 const std::vector<int>& master_pointers = | 42 const std::vector<int>& master_pointers = |
40 ui::DeviceDataManagerX11::GetInstance()->master_pointers(); | 43 ui::DeviceDataManagerX11::GetInstance()->master_pointers(); |
41 for (int master_pointer : master_pointers) { | 44 for (int master_pointer : master_pointers) { |
42 evmask.deviceid = master_pointer; | 45 evmask.deviceid = master_pointer; |
43 result = XIGrabDevice( | 46 result = XIGrabDevice( |
44 gfx::GetXDisplay(), master_pointer, window, CurrentTime, cursor, | 47 gfx::GetXDisplay(), master_pointer, window, CurrentTime, cursor, |
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
77 const std::vector<int>& master_pointers = | 80 const std::vector<int>& master_pointers = |
78 ui::DeviceDataManagerX11::GetInstance()->master_pointers(); | 81 ui::DeviceDataManagerX11::GetInstance()->master_pointers(); |
79 for (int master_pointer : master_pointers) | 82 for (int master_pointer : master_pointers) |
80 XIUngrabDevice(gfx::GetXDisplay(), master_pointer, CurrentTime); | 83 XIUngrabDevice(gfx::GetXDisplay(), master_pointer, CurrentTime); |
81 } | 84 } |
82 // Try core pointer ungrab in case the XInput2 pointer ungrab failed. | 85 // Try core pointer ungrab in case the XInput2 pointer ungrab failed. |
83 XUngrabPointer(gfx::GetXDisplay(), CurrentTime); | 86 XUngrabPointer(gfx::GetXDisplay(), CurrentTime); |
84 } | 87 } |
85 | 88 |
86 } // namespace views | 89 } // namespace views |
OLD | NEW |