Index: views/controls/menu/menu_host_gtk.cc |
diff --git a/views/controls/menu/menu_host_gtk.cc b/views/controls/menu/menu_host_gtk.cc |
index 917ded3fd1ad55ee9943a8538bbb3ff2afcb25e8..6b29ce184cbf95596095785d9d4ba1a76f9a6c53 100644 |
--- a/views/controls/menu/menu_host_gtk.cc |
+++ b/views/controls/menu/menu_host_gtk.cc |
@@ -6,11 +6,20 @@ |
#include <gdk/gdk.h> |
+#if defined(HAVE_XINPUT2) && defined(TOUCH_UI) |
+#include <gdk/gdkx.h> |
+#include <X11/extensions/XInput2.h> |
+#endif |
+ |
#include "views/controls/menu/menu_controller.h" |
#include "views/controls/menu/menu_host_root_view.h" |
#include "views/controls/menu/menu_item_view.h" |
#include "views/controls/menu/submenu_view.h" |
+#if defined(HAVE_XINPUT2) && defined(TOUCH_UI) |
+#include "views/touchui/touch_factory.h" |
+#endif |
+ |
namespace views { |
// static |
@@ -104,6 +113,10 @@ void MenuHostGtk::ReleaseGrab() { |
did_input_grab_ = false; |
gdk_pointer_ungrab(GDK_CURRENT_TIME); |
gdk_keyboard_ungrab(GDK_CURRENT_TIME); |
+#if defined(HAVE_XINPUT2) && defined(TOUCH_UI) |
+ TouchFactory::GetInstance()->UngrabTouchDevices( |
+ GDK_WINDOW_XDISPLAY(window_contents()->window)); |
+#endif |
} |
} |
@@ -151,6 +164,14 @@ void MenuHostGtk::DoCapture() { |
did_input_grab_ = pointer_grab_status == GDK_GRAB_SUCCESS && |
keyboard_grab_status == GDK_GRAB_SUCCESS; |
+ |
+#if defined(HAVE_XINPUT2) && defined(TOUCH_UI) |
+ ::Window window = GDK_WINDOW_XID(window_contents()->window); |
+ Display* display = GDK_WINDOW_XDISPLAY(window_contents()->window); |
+ bool xi2grab = TouchFactory::GetInstance()->GrabTouchDevices(display, window); |
+ did_input_grab_ = did_input_grab_ && xi2grab; |
+#endif |
+ |
DCHECK(did_input_grab_); |
// need keyboard grab. |
} |