diff options
author | sadrul@chromium.org <sadrul@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-01-20 21:10:51 +0000 |
---|---|---|
committer | sadrul@chromium.org <sadrul@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-01-20 21:10:51 +0000 |
commit | e9f575064ea212023b82ec27e36905a066cfc76d (patch) | |
tree | d6f06303ee091acbe74fc31126067c20c2de1d44 /views/controls | |
parent | d9b5b3e38455a1ae06c02df6ebeace9dc9b79f42 (diff) | |
download | chromium_src-e9f575064ea212023b82ec27e36905a066cfc76d.zip chromium_src-e9f575064ea212023b82ec27e36905a066cfc76d.tar.gz chromium_src-e9f575064ea212023b82ec27e36905a066cfc76d.tar.bz2 |
touch: Allow grabbing/ungrabbing touch devices for XInput2.
This allows touch devices to be grabbed when events from the mouse/keyboard are
grabbed. This also exposes TouchFactory, which will eventually be used in more
places.
BUG=none
TEST=none
Committed: http://src.chromium.org/viewvc/chrome?view=rev&revision=71879
Review URL: http://codereview.chromium.org/6300007
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@72002 0039d316-1c4b-4281-b951-d872f2087c98
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. } |