[mutter/wip/wayland-clutter-events-2: 28/34] wayland: Drop old hack to synthesize motion events



commit 85fa74f4ac452f8e890238428e20a53b4fe84271
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-pointer.h |    1 -
 src/wayland/meta-wayland-private.h |    8 --
 src/wayland/meta-wayland-seat.c    |   18 -----
 src/wayland/meta-wayland-surface.c |    3 -
 src/wayland/meta-wayland.c         |  143 +-----------------------------------
 6 files changed, 1 insertions(+), 187 deletions(-)
---
diff --git a/src/core/display.c b/src/core/display.c
index f9fca97..36a5deb 100644
--- a/src/core/display.c
+++ b/src/core/display.c
@@ -3296,21 +3296,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-pointer.h b/src/wayland/meta-wayland-pointer.h
index e25b008..bdbf1a3 100644
--- a/src/wayland/meta-wayland-pointer.h
+++ b/src/wayland/meta-wayland-pointer.h
@@ -62,7 +62,6 @@ struct _MetaWaylandPointer
 
   wl_fixed_t x, y; /* TODO: remove, use ClutterInputDevice instead */
   MetaWaylandSurface *current;
-  wl_fixed_t current_x, current_y;
 
   guint32 button_count;
 };
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-seat.c b/src/wayland/meta-wayland-seat.c
index 17544b3..f49ce88 100644
--- a/src/wayland/meta-wayland-seat.c
+++ b/src/wayland/meta-wayland-seat.c
@@ -408,20 +408,6 @@ meta_wayland_seat_handle_event (MetaWaylandSeat *seat,
   return FALSE;
 }
 
-static void
-update_pointer_position_for_actor (MetaWaylandPointer *pointer,
-                                   ClutterActor *actor)
-{
-  float ax, ay;
-
-  clutter_actor_transform_stage_point (actor,
-                                       wl_fixed_to_double (pointer->x),
-                                       wl_fixed_to_double (pointer->y),
-                                       &ax, &ay);
-  pointer->current_x = wl_fixed_from_double (ax);
-  pointer->current_y = wl_fixed_from_double (ay);
-}
-
 /* The actor argument can be NULL in which case a Clutter pick will be
    performed to determine the right actor. An actor should only be
    passed if the repick is being performed due to an event in which
@@ -458,16 +444,12 @@ meta_wayland_seat_repick (MetaWaylandSeat    *seat,
       MetaWindow *window =
         meta_window_actor_get_meta_window (META_WINDOW_ACTOR (actor));
 
-      update_pointer_position_for_actor (pointer, actor);
-
       surface = window->surface;
     }
   else if (META_IS_SHAPED_TEXTURE (actor))
     {
       MetaShapedTexture *shaped_texture = META_SHAPED_TEXTURE (actor);
 
-      update_pointer_position_for_actor (pointer, actor);
-
       surface = meta_shaped_texture_get_wayland_surface (shaped_texture);
     }
 
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]