data-device: fix drag icon position

This commit is contained in:
Tony Crisci 2017-10-17 17:21:11 -04:00
parent b7c622a319
commit c00a94ca76
3 changed files with 8 additions and 4 deletions

View file

@ -75,6 +75,9 @@ struct roots_drag_icon {
struct wl_list link; // roots_input::drag_icons
bool mapped;
int32_t sx;
int32_t sy;
struct wl_listener surface_destroy;
struct wl_listener surface_commit;
};

View file

@ -313,6 +313,9 @@ static void handle_drag_icon_commit(struct wl_listener *listener, void *data) {
// TODO the spec hints at rules that can determine whether the drag icon is
// mapped here, but it is not completely clear so we need to test more
// toolkits to see how we should interpret the surface state here.
drag_icon->sx += drag_icon->surface->current->sx;
drag_icon->sy += drag_icon->surface->current->sy;
drag_icon->mapped = drag_icon->surface->texture->valid;
}

View file

@ -158,10 +158,8 @@ static void output_frame_notify(struct wl_listener *listener, void *data) {
struct wlr_surface *icon = drag_icon->surface;
struct wlr_cursor *cursor = server->input->cursor;
// TODO should also use the hotspot to determine the location, but
// hotspot is broken right now.
double icon_x = cursor->x - icon->current->sx;
double icon_y = cursor->y - icon->current->sy;
double icon_x = cursor->x + drag_icon->sx;
double icon_y = cursor->y + drag_icon->sy;
render_surface(icon, desktop, wlr_output, &now, icon_x, icon_y, 0);
}