mirror of
https://github.com/brl/mutter.git
synced 2024-11-28 11:00:54 -05:00
data-device: Update the DnD surface on drag grab updates
This commit is contained in:
parent
30cc4e1d0a
commit
78477dd56a
@ -34,6 +34,7 @@
|
||||
#include "meta-wayland-seat.h"
|
||||
#include "meta-wayland-pointer.h"
|
||||
#include "meta-wayland-private.h"
|
||||
#include "meta-cursor-tracker-private.h"
|
||||
|
||||
typedef struct
|
||||
{
|
||||
@ -241,6 +242,27 @@ drag_grab_focus (MetaWaylandPointerGrab *grab,
|
||||
wl_resource_add_destroy_listener (data_device_resource, &drag_grab->drag_focus_listener);
|
||||
}
|
||||
|
||||
static void
|
||||
drag_grab_update_dnd_surface (MetaWaylandDragGrab *drag_grab)
|
||||
{
|
||||
MetaWaylandSurface *surface = drag_grab->drag_surface;
|
||||
MetaWaylandSeat *seat = drag_grab->seat;
|
||||
int offset_x = 0, offset_y = 0;
|
||||
CoglTexture *texture = NULL;
|
||||
|
||||
if (surface)
|
||||
{
|
||||
if (surface->buffer)
|
||||
texture = surface->buffer->texture;
|
||||
|
||||
offset_x = surface->offset_x;
|
||||
offset_y = surface->offset_y;
|
||||
}
|
||||
|
||||
meta_cursor_tracker_set_dnd_surface (seat->pointer.cursor_tracker,
|
||||
texture, offset_x, offset_y);
|
||||
}
|
||||
|
||||
static void
|
||||
drag_grab_motion (MetaWaylandPointerGrab *grab,
|
||||
const ClutterEvent *event)
|
||||
@ -248,6 +270,8 @@ drag_grab_motion (MetaWaylandPointerGrab *grab,
|
||||
MetaWaylandDragGrab *drag_grab = (MetaWaylandDragGrab*) grab;
|
||||
wl_fixed_t sx, sy;
|
||||
|
||||
drag_grab_update_dnd_surface (drag_grab);
|
||||
|
||||
if (drag_grab->drag_focus_data_device)
|
||||
{
|
||||
meta_wayland_pointer_get_relative_coordinates (grab->pointer,
|
||||
@ -274,6 +298,7 @@ data_device_end_drag_grab (MetaWaylandDragGrab *drag_grab)
|
||||
drag_grab->seat->data_device.current_grab = NULL;
|
||||
|
||||
drag_grab_focus (&drag_grab->generic, NULL);
|
||||
drag_grab_update_dnd_surface (drag_grab);
|
||||
|
||||
meta_wayland_pointer_end_grab (drag_grab->generic.pointer);
|
||||
g_slice_free (MetaWaylandDragGrab, drag_grab);
|
||||
@ -371,6 +396,7 @@ data_device_start_drag (struct wl_client *client,
|
||||
|
||||
meta_wayland_pointer_set_focus (&seat->pointer, NULL);
|
||||
meta_wayland_pointer_start_grab (&seat->pointer, (MetaWaylandPointerGrab*)drag_grab);
|
||||
drag_grab_update_dnd_surface (drag_grab);
|
||||
}
|
||||
|
||||
static void
|
||||
|
Loading…
Reference in New Issue
Block a user