[mutter/wip/wayland-clutter-events-2: 16/19] wayland: Drop old hack to synthesize motion events
- From: Jasper St. Pierre <jstpierre src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [mutter/wip/wayland-clutter-events-2: 16/19] wayland: Drop old hack to synthesize motion events
- Date: Sat, 5 Oct 2013 14:16:09 +0000 (UTC)
commit 818a10afbbed3aeec0fe5a6f5de3c49c23fefcea
Author: Jasper St. Pierre <jstpierre mecheye net>
Date: Thu Oct 3 23:47:10 2013 -0400
wayland: Drop old hack to synthesize motion events
mutter now uses Clutter events for the source of its drag support, so
we don't need to synthesize X11 events anymore.
src/core/display.c | 15 ----
src/wayland/meta-wayland-private.h | 8 --
src/wayland/meta-wayland-surface.c | 3 -
src/wayland/meta-wayland.c | 143 +-----------------------------------
4 files changed, 1 insertions(+), 168 deletions(-)
---
diff --git a/src/core/display.c b/src/core/display.c
index d53c8f1..60c7673 100644
--- a/src/core/display.c
+++ b/src/core/display.c
@@ -3307,21 +3307,6 @@ xevent_callback (XEvent *event,
{
MetaDisplay *display = data;
- /* Under Wayland we want to filter out mouse motion events so we can
- synthesize them from the Clutter events instead. This is
- necessary because the position in the mouse events is passed to
- the X server relative to the position of the surface. The X
- server then translates these back to screen coordinates based on
- the window position. If we rely on this translatation when
- dragging a window around then the window will jump around
- erratically because of the lag between updating the window
- position from the surface position. Instead we bypass the
- translation altogether by directly using the Clutter events */
- if (meta_is_wayland_compositor () &&
- event->type == GenericEvent &&
- event->xcookie.evtype == XI_Motion)
- return FALSE;
-
return meta_display_handle_xevent (display, event);
}
diff --git a/src/wayland/meta-wayland-private.h b/src/wayland/meta-wayland-private.h
index e7917e6..0875fa7 100644
--- a/src/wayland/meta-wayland-private.h
+++ b/src/wayland/meta-wayland-private.h
@@ -83,14 +83,6 @@ struct _MetaWaylandCompositor
int drm_fd;
MetaWaylandSeat *seat;
-
- /* This surface is only used to keep drag of the implicit grab when
- synthesizing XEvents for Mutter */
- MetaWaylandSurface *implicit_grab_surface;
- /* Button that was pressed to initiate an implicit grab. The
- implicit grab will only be released when this button is
- released */
- guint32 implicit_grab_button;
};
void meta_wayland_init (void);
diff --git a/src/wayland/meta-wayland-surface.c b/src/wayland/meta-wayland-surface.c
index f77f9cb..05a320b 100644
--- a/src/wayland/meta-wayland-surface.c
+++ b/src/wayland/meta-wayland-surface.c
@@ -409,9 +409,6 @@ meta_wayland_surface_free (MetaWaylandSurface *surface)
g_assert (surface != compositor->seat->pointer.focus);
}
- if (compositor->implicit_grab_surface == surface)
- compositor->implicit_grab_surface = compositor->seat->pointer.current;
-
if (surface->resource)
wl_resource_set_user_data (surface->resource, NULL);
g_slice_free (MetaWaylandSurface, surface);
diff --git a/src/wayland/meta-wayland.c b/src/wayland/meta-wayland.c
index 015682d..9a9fb05 100644
--- a/src/wayland/meta-wayland.c
+++ b/src/wayland/meta-wayland.c
@@ -533,119 +533,6 @@ stage_destroy_cb (void)
meta_quit (META_EXIT_SUCCESS);
}
-#define N_BUTTONS 5
-
-static void
-synthesize_motion_event (MetaWaylandCompositor *compositor,
- const ClutterEvent *event)
-{
- /* We want to synthesize X events for mouse motion events so that we
- don't have to rely on the X server's window position being
- synched with the surface position. See the comment in
- event_callback() in display.c */
- MetaWaylandSeat *seat = compositor->seat;
- MetaWaylandPointer *pointer = &seat->pointer;
- MetaWaylandSurface *surface;
- XGenericEventCookie generic_event;
- XIDeviceEvent device_event;
- unsigned char button_mask[(N_BUTTONS + 7) / 8] = { 0 };
- MetaDisplay *display = meta_get_display ();
- ClutterModifierType button_state;
- int i;
-
- generic_event.type = GenericEvent;
- generic_event.serial = 0;
- generic_event.send_event = False;
- generic_event.display = display->xdisplay;
- generic_event.extension = display->xinput_opcode;
- generic_event.evtype = XI_Motion;
- /* Mutter assumes the data for the event is already retrieved by GDK
- * so we don't need the cookie */
- generic_event.cookie = 0;
- generic_event.data = &device_event;
-
- memcpy (&device_event, &generic_event, sizeof (XGenericEvent));
-
- device_event.time = clutter_event_get_time (event);
- device_event.deviceid = clutter_event_get_device_id (event);
- device_event.sourceid = 0; /* not used, not sure what this should be */
- device_event.detail = 0;
- device_event.root = DefaultRootWindow (display->xdisplay);
- device_event.flags = 0 /* not used for motion events */;
-
- if (compositor->implicit_grab_surface)
- surface = compositor->implicit_grab_surface;
- else
- surface = pointer->current;
-
- if (surface == pointer->current)
- {
- device_event.event_x = wl_fixed_to_int (pointer->current_x);
- device_event.event_y = wl_fixed_to_int (pointer->current_y);
- }
- else if (surface && surface->window)
- {
- ClutterActor *window_actor =
- CLUTTER_ACTOR (meta_window_get_compositor_private (surface->window));
-
- if (window_actor)
- {
- float ax, ay;
-
- clutter_actor_transform_stage_point (window_actor,
- wl_fixed_to_double (pointer->x),
- wl_fixed_to_double (pointer->y),
- &ax, &ay);
-
- device_event.event_x = ax;
- device_event.event_y = ay;
- }
- else
- {
- device_event.event_x = wl_fixed_to_double (pointer->x);
- device_event.event_y = wl_fixed_to_double (pointer->y);
- }
- }
- else
- {
- device_event.event_x = wl_fixed_to_double (pointer->x);
- device_event.event_y = wl_fixed_to_double (pointer->y);
- }
-
- if (surface && surface->window != NULL)
- device_event.event = surface->window->xwindow;
- else
- device_event.event = device_event.root;
-
- /* Mutter doesn't really know about the sub-windows. This assumes it
- doesn't care either */
- device_event.child = device_event.event;
- device_event.root_x = wl_fixed_to_double (pointer->x);
- device_event.root_y = wl_fixed_to_double (pointer->y);
-
- clutter_event_get_state_full (event,
- &button_state,
- (ClutterModifierType*)&device_event.mods.base,
- (ClutterModifierType*)&device_event.mods.latched,
- (ClutterModifierType*)&device_event.mods.locked,
- (ClutterModifierType*)&device_event.mods.effective);
- device_event.mods.effective &= ~button_state;
- memset (&device_event.group, 0, sizeof (device_event.group));
- device_event.group.effective = (device_event.mods.effective >> 13) & 0x3;
-
- for (i = 0; i < N_BUTTONS; i++)
- if ((button_state & (CLUTTER_BUTTON1_MASK << i)))
- XISetMask (button_mask, i + 1);
- device_event.buttons.mask_len = N_BUTTONS + 1;
- device_event.buttons.mask = button_mask;
-
- device_event.valuators.mask_len = 0;
- device_event.valuators.mask = NULL;
- device_event.valuators.values = NULL;
-
- meta_display_handle_xevent (display, (XEvent *) &generic_event);
-}
-
static void
reset_idletimes (const ClutterEvent *event)
{
@@ -679,7 +566,6 @@ event_filter_cb (const ClutterEvent *event,
MetaWaylandSeat *seat = compositor->seat;
MetaWaylandPointer *pointer = &seat->pointer;
MetaWaylandSurface *surface;
- MetaDisplay *display;
reset_idletimes (event);
@@ -718,34 +604,7 @@ event_filter_cb (const ClutterEvent *event,
CLUTTER_ACTOR (event->any.stage));
}
- display = meta_get_display ();
- if (!display)
- return FALSE;
-
- switch (event->type)
- {
- case CLUTTER_BUTTON_PRESS:
- if (compositor->implicit_grab_surface == NULL)
- {
- compositor->implicit_grab_button = event->button.button;
- compositor->implicit_grab_surface = pointer->current;
- }
- return FALSE;
-
- case CLUTTER_BUTTON_RELEASE:
- if (event->type == CLUTTER_BUTTON_RELEASE &&
- compositor->implicit_grab_surface &&
- event->button.button == compositor->implicit_grab_button)
- compositor->implicit_grab_surface = NULL;
- return FALSE;
-
- case CLUTTER_MOTION:
- synthesize_motion_event (compositor, event);
- return FALSE;
-
- default:
- return FALSE;
- }
+ return FALSE;
}
static void
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]