mirror of
https://github.com/brl/mutter.git
synced 2025-02-27 02:04:09 +00: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-seat.h"
|
||||||
#include "meta-wayland-pointer.h"
|
#include "meta-wayland-pointer.h"
|
||||||
#include "meta-wayland-private.h"
|
#include "meta-wayland-private.h"
|
||||||
|
#include "meta-cursor-tracker-private.h"
|
||||||
|
|
||||||
typedef struct
|
typedef struct
|
||||||
{
|
{
|
||||||
@ -241,6 +242,27 @@ drag_grab_focus (MetaWaylandPointerGrab *grab,
|
|||||||
wl_resource_add_destroy_listener (data_device_resource, &drag_grab->drag_focus_listener);
|
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
|
static void
|
||||||
drag_grab_motion (MetaWaylandPointerGrab *grab,
|
drag_grab_motion (MetaWaylandPointerGrab *grab,
|
||||||
const ClutterEvent *event)
|
const ClutterEvent *event)
|
||||||
@ -248,6 +270,8 @@ drag_grab_motion (MetaWaylandPointerGrab *grab,
|
|||||||
MetaWaylandDragGrab *drag_grab = (MetaWaylandDragGrab*) grab;
|
MetaWaylandDragGrab *drag_grab = (MetaWaylandDragGrab*) grab;
|
||||||
wl_fixed_t sx, sy;
|
wl_fixed_t sx, sy;
|
||||||
|
|
||||||
|
drag_grab_update_dnd_surface (drag_grab);
|
||||||
|
|
||||||
if (drag_grab->drag_focus_data_device)
|
if (drag_grab->drag_focus_data_device)
|
||||||
{
|
{
|
||||||
meta_wayland_pointer_get_relative_coordinates (grab->pointer,
|
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->seat->data_device.current_grab = NULL;
|
||||||
|
|
||||||
drag_grab_focus (&drag_grab->generic, NULL);
|
drag_grab_focus (&drag_grab->generic, NULL);
|
||||||
|
drag_grab_update_dnd_surface (drag_grab);
|
||||||
|
|
||||||
meta_wayland_pointer_end_grab (drag_grab->generic.pointer);
|
meta_wayland_pointer_end_grab (drag_grab->generic.pointer);
|
||||||
g_slice_free (MetaWaylandDragGrab, drag_grab);
|
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_set_focus (&seat->pointer, NULL);
|
||||||
meta_wayland_pointer_start_grab (&seat->pointer, (MetaWaylandPointerGrab*)drag_grab);
|
meta_wayland_pointer_start_grab (&seat->pointer, (MetaWaylandPointerGrab*)drag_grab);
|
||||||
|
drag_grab_update_dnd_surface (drag_grab);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
Loading…
x
Reference in New Issue
Block a user