summaryrefslogtreecommitdiffstats
path: root/views/controls
diff options
context:
space:
mode:
Diffstat (limited to 'views/controls')
-rw-r--r--views/controls/menu/menu_host_gtk.cc21
1 files changed, 21 insertions, 0 deletions
diff --git a/views/controls/menu/menu_host_gtk.cc b/views/controls/menu/menu_host_gtk.cc
index 917ded3..6b29ce1 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.
}