static void data_device_end_drag_grab(struct wl_seat *seat) { struct wl_resource *surface_resource; struct wl_surface_interface *implementation; if (seat->drag_surface) { surface_resource = &seat->drag_surface->resource; implementation = (struct wl_surface_interface *) surface_resource->object.implementation; implementation->attach(surface_resource->client, surface_resource, NULL, 0, 0); wl_list_remove(&seat->drag_icon_listener.link); } drag_grab_focus(&seat->drag_grab, NULL, wl_fixed_from_int(0), wl_fixed_from_int(0)); wl_pointer_end_grab(seat->pointer); seat->drag_data_source = NULL; seat->drag_surface = NULL; seat->drag_client = NULL; }
static void data_device_end_drag_grab (MetaWaylandDragGrab *drag_grab) { if (drag_grab->drag_origin) { drag_grab->drag_origin = NULL; wl_list_remove (&drag_grab->drag_origin_listener.link); } if (drag_grab->drag_surface) { drag_grab->drag_surface = NULL; wl_list_remove (&drag_grab->drag_icon_listener.link); } if (drag_grab->drag_data_source) { drag_grab->drag_data_source->has_target = FALSE; wl_list_remove (&drag_grab->drag_data_source_listener.link); } if (drag_grab->feedback_actor) { clutter_actor_remove_all_children (drag_grab->feedback_actor); clutter_actor_destroy (drag_grab->feedback_actor); } drag_grab->seat->data_device.current_grab = NULL; drag_grab_focus (&drag_grab->generic, NULL); meta_wayland_pointer_end_grab (drag_grab->generic.pointer); g_slice_free (MetaWaylandDragGrab, drag_grab); }
static void data_device_end_drag_grab(struct wl_seat *seat) { if (seat->drag_surface) { seat->drag_surface = NULL; wl_signal_emit(&seat->drag_icon_signal, NULL); wl_list_remove(&seat->drag_icon_listener.link); } drag_grab_focus(&seat->drag_grab, NULL, wl_fixed_from_int(0), wl_fixed_from_int(0)); wl_pointer_end_grab(seat->pointer); seat->drag_data_source = NULL; seat->drag_client = NULL; }