diff options
Diffstat (limited to 'views/controls')
-rw-r--r-- | views/controls/menu/menu_host_gtk.cc | 21 |
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. } |