rootston: damage tracking for drag icons

This commit is contained in:
emersion 2018-01-23 13:37:58 +01:00
parent 415a2b7c56
commit 2ad7df8680
No known key found for this signature in database
GPG key ID: 0FDE7BE0E88F5E48
9 changed files with 142 additions and 31 deletions

View file

@ -454,6 +454,7 @@ static void wlr_drag_end(struct wlr_drag *drag) {
if (drag->icon) {
drag->icon->mapped = false;
wl_list_remove(&drag->icon_destroy.link);
wl_signal_emit(&drag->icon->events.map, drag->icon);
}
free(drag);
@ -673,8 +674,8 @@ static struct wlr_drag_icon *wlr_drag_icon_create(
icon->is_pointer = is_pointer;
icon->touch_id = touch_id;
icon->mapped = true;
wl_list_insert(&client->seat->drag_icons, &icon->link);
wl_signal_init(&icon->events.map);
wl_signal_init(&icon->events.destroy);
wl_signal_add(&icon->surface->events.destroy, &icon->surface_destroy);
@ -686,6 +687,9 @@ static struct wlr_drag_icon *wlr_drag_icon_create(
wl_signal_add(&client->events.destroy, &icon->seat_client_destroy);
icon->seat_client_destroy.notify = handle_drag_icon_seat_client_destroy;
wl_list_insert(&client->seat->drag_icons, &icon->link);
wl_signal_emit(&client->seat->events.new_drag_icon, icon);
return icon;
}

View file

@ -454,7 +454,10 @@ struct wlr_seat *wlr_seat_create(struct wl_display *display, const char *name) {
wl_list_init(&wlr_seat->clients);
wl_list_init(&wlr_seat->drag_icons);
wl_signal_init(&wlr_seat->events.new_drag_icon);
wl_signal_init(&wlr_seat->events.request_set_cursor);
wl_signal_init(&wlr_seat->events.selection);
wl_signal_init(&wlr_seat->events.primary_selection);