summaryrefslogtreecommitdiffstats
path: root/views/controls
diff options
context:
space:
mode:
authorsadrul@chromium.org <sadrul@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-01-20 21:10:51 +0000
committersadrul@chromium.org <sadrul@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-01-20 21:10:51 +0000
commite9f575064ea212023b82ec27e36905a066cfc76d (patch)
treed6f06303ee091acbe74fc31126067c20c2de1d44 /views/controls
parentd9b5b3e38455a1ae06c02df6ebeace9dc9b79f42 (diff)
downloadchromium_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.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.
}