DND target cancelling ongoing drop does not emit cancel on source
I'd put steps to reproduce here, but it's in my branch where I'm experimenting, but I don't want to forget it, so I'll just describe what's going on before I forget.
This is with gnome-shell 3.34.3 in F31.
Here's the relevant traffic on the target side:
...
[2939356.828] wl_data_device@20.motion(6974160, 459.015625, 210.023438)
[2939357.151] -> wl_data_offer@4278190082.set_actions(2, 2)
[2939357.213] -> wl_data_offer@4278190082.accept(11086, "application/x-gtk-local-dnd")
[2939357.675] wl_data_source@35.target("application/x-gtk-local-dnd")
[2939382.290] wl_data_device@20.drop()
[2939382.384] wl_data_source@35.dnd_drop_performed()
[2939382.814] wl_data_device@20.leave()
[2939383.959] -> wl_data_offer@4278190082.destroy()
Note that the target rejects the ongoing drop here because it sends no wl_data_offer@4278190082.finish()
because it rejects the drop.
I expected the drag source to immediately get a wl_data_source.cancelled()
, but that does not happen. In fact, it only happens after I start the next drag. Here's the relevant traffic on the source side:
[3371936.672] -> wl_data_device_manager@12.create_data_source(new id wl_data_source@35)
[3371936.747] -> wl_data_source@35.offer("application/x-gtk-local-dnd")
[3371936.782] -> wl_data_source@35.offer("CANVAS_ITEM")
[3371936.818] -> wl_data_source@35.set_actions(2)
[3371936.858] -> wl_data_device@20.start_drag(wl_data_source@35, wl_surface@28, wl_surface@36, 11822)
[3371968.363] wl_data_source@35.target(nil)
[3371968.427] wl_data_source@35.action(0)
[3371970.430] wl_data_source@35.action(2)
[3371970.686] wl_data_source@35.target("application/x-gtk-local-dnd")
[3372418.331] wl_data_source@35.dnd_drop_performed()
[3374504.737] -> wl_data_device_manager@12.create_data_source(new id wl_data_source@45)
[3374504.799] -> wl_data_source@45.offer("application/x-gtk-local-dnd")
[3374504.835] -> wl_data_source@45.offer("CANVAS_ITEM")
[3374504.870] -> wl_data_source@45.set_actions(2)
[3374504.909] -> wl_data_device@20.start_drag(wl_data_source@45, wl_surface@28, wl_surface@38, 11830)
[3374535.905] wl_data_source@35.cancelled()
[3374536.433] -> wl_data_source@45.destroy()
Note the 2nd to last line.
I tried it in Weston and Weston sends the cancel immediately.