mirror of
https://github.com/brl/mutter.git
synced 2025-02-16 13:24:09 +00:00
devices-xi2: Enable touch events
This commit is contained in:
parent
2a9a499841
commit
bd77a67ea4
@ -27,6 +27,7 @@
|
||||
#include "core.h"
|
||||
#include "frame.h"
|
||||
#include "workspace-private.h"
|
||||
#include "input-events.h"
|
||||
#include <meta/prefs.h>
|
||||
#include <meta/errors.h>
|
||||
|
||||
@ -866,7 +867,8 @@ meta_core_select_events (Display *xdisplay,
|
||||
XISelectEvents (xdisplay, xwindow, &mask, 1);
|
||||
|
||||
/* Unset any input event so they are only handled via XInput2 */
|
||||
evmask &= ~(KeyPressMask | KeyReleaseMask |
|
||||
evmask &= ~(META_INPUT_TOUCH_EVENTS_MASK |
|
||||
KeyPressMask | KeyReleaseMask |
|
||||
ButtonPressMask | ButtonReleaseMask |
|
||||
EnterWindowMask | LeaveWindowMask |
|
||||
PointerMotionMask | PointerMotionHintMask |
|
||||
|
@ -25,6 +25,7 @@
|
||||
#include "devices-xi2.h"
|
||||
#include "display-private.h"
|
||||
#include "screen-private.h"
|
||||
#include "input-events.h"
|
||||
#include <X11/extensions/XInput2.h>
|
||||
|
||||
/* Common functions */
|
||||
@ -97,6 +98,15 @@ meta_device_xi2_translate_event_mask (guint evmask,
|
||||
XISetMask (mask, XI_FocusOut);
|
||||
}
|
||||
|
||||
#ifdef HAVE_XTOUCH
|
||||
if (evmask & META_INPUT_TOUCH_EVENTS_MASK)
|
||||
{
|
||||
XISetMask (mask, XI_TouchBegin);
|
||||
XISetMask (mask, XI_TouchEnd);
|
||||
XISetMask (mask, XI_TouchUpdate);
|
||||
}
|
||||
#endif
|
||||
|
||||
return mask;
|
||||
}
|
||||
|
||||
|
@ -424,6 +424,10 @@ void meta_display_grab_window_buttons (MetaDisplay *display,
|
||||
Window xwindow);
|
||||
void meta_display_ungrab_window_buttons (MetaDisplay *display,
|
||||
Window xwindow);
|
||||
void meta_display_grab_window_touches (MetaDisplay *display,
|
||||
MetaWindow *window);
|
||||
void meta_display_ungrab_window_touches (MetaDisplay *display,
|
||||
MetaWindow *window);
|
||||
|
||||
void meta_display_grab_focus_window_button (MetaDisplay *display,
|
||||
MetaWindow *window);
|
||||
|
@ -4156,6 +4156,36 @@ meta_display_ungrab_window_buttons (MetaDisplay *display,
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
meta_display_grab_window_touches (MetaDisplay *display,
|
||||
MetaWindow *window)
|
||||
{
|
||||
if (!window->frame)
|
||||
return;
|
||||
|
||||
meta_error_trap_push_with_return (display);
|
||||
meta_device_map_grab_touch (display->device_map,
|
||||
window->frame->xwindow);
|
||||
|
||||
if (meta_error_trap_pop_with_return (display) != Success)
|
||||
{
|
||||
meta_verbose ("Unable to add a passive touch grab on window '%s'\n",
|
||||
window->desc);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
meta_display_ungrab_window_touches (MetaDisplay *display,
|
||||
MetaWindow *window)
|
||||
{
|
||||
if (!window->frame)
|
||||
return;
|
||||
|
||||
meta_device_map_ungrab_touch (display->device_map,
|
||||
window->frame->xwindow);
|
||||
}
|
||||
|
||||
/* Grab buttons we only grab while unfocused in click-to-focus mode */
|
||||
#define MAX_FOCUS_BUTTON 4
|
||||
void
|
||||
|
@ -35,6 +35,11 @@
|
||||
#include "display-private.h"
|
||||
#include <meta/device-map.h>
|
||||
|
||||
/* Add an extra flag for touch events in
|
||||
* evmasks, an arbitrarily high bit is taken.
|
||||
*/
|
||||
#define META_INPUT_TOUCH_EVENTS_MASK (1L<<31)
|
||||
|
||||
gboolean meta_input_event_get_type (MetaDisplay *display,
|
||||
XEvent *ev,
|
||||
guint *ev_type);
|
||||
|
@ -1193,6 +1193,14 @@ meta_window_new_with_attrs (MetaDisplay *display,
|
||||
meta_display_grab_focus_window_button (window->display, window);
|
||||
}
|
||||
|
||||
if (window->frame &&
|
||||
(window->type == META_WINDOW_NORMAL ||
|
||||
window->type == META_WINDOW_DIALOG ||
|
||||
window->type == META_WINDOW_MODAL_DIALOG))
|
||||
{
|
||||
meta_display_grab_window_touches (window->display, window);
|
||||
}
|
||||
|
||||
if (window->type == META_WINDOW_DESKTOP ||
|
||||
window->type == META_WINDOW_DOCK)
|
||||
{
|
||||
@ -1799,6 +1807,7 @@ meta_window_unmanage (MetaWindow *window,
|
||||
meta_window_ungrab_keys (window);
|
||||
meta_display_ungrab_window_buttons (window->display, window->xwindow);
|
||||
meta_display_ungrab_focus_window_button (window->display, window);
|
||||
meta_display_ungrab_window_touches (window->display, window);
|
||||
|
||||
meta_display_unregister_x_window (window->display, window->xwindow);
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user