Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Support drag and drop on wayland #1881

Open
gui1117 opened this issue Mar 14, 2021 · 13 comments · May be fixed by #2429
Open

Support drag and drop on wayland #1881

gui1117 opened this issue Mar 14, 2021 · 13 comments · May be fixed by #2429
Labels
DS - wayland S - platform parity Unintended platform differences

Comments

@gui1117
Copy link
Contributor

gui1117 commented Mar 14, 2021

Drag and drop window events are currently not supported on wayland.

I wonder how it is possible to implement it considering smithay-client-toolkit contains some helper for it: DataDevice.

@tfachmann
Copy link

Can we use https://github.com/Smithay/wayland-rs i.e. wayland-client for implementation? Smithay's wayland client toolkit builds on top of it, so it should be a seamless integration.

The wl_data_device_manager might be what we need to implement drag and drop in wayland: `https://smithay.github.io/wayland-rs/wayland_client/protocol/wl_data_device_manager/index.html

@WhyNotHugo
Copy link

The DataDevice helper can be used by itself too. smithay toolkit isn't an all-or-nothing kind of thing; it's perfectly feasible to cherry pick individual helpers.

@kchibisov
Copy link
Member

@WhyNotHugo gnome breaks if you bind multiple data devices(it'll use only one of them), so unless winit has clipboard adding drag and drop is not possible.

@WhyNotHugo
Copy link

WhyNotHugo commented Feb 14, 2023 via email

@kchibisov
Copy link
Member

I'm not sure what the correct behaviour is when binding to a global twice, but I'm pretty sure it's not something that should be done anyway.

If something is missing is stck master, it's only because it wasn't ported yet. SCTK had abstractions for dnd and clipboard(it's the same thing) for a long time. We have a PR adding DND already for Wayland, it just breaks clipboard on gnome, because gnome doesn't allow client to bind multiple times to data device.

@ids1024
Copy link
Member

ids1024 commented Feb 14, 2023

Data device support is specifically one of the blockers for the next release of sctk. There's a PR for it: Smithay/client-toolkit#301

I'm not sure what the correct behaviour is when binding to a global twice, but I'm pretty sure it's not something that should be done anyway.

Good question. Maybe the Wayland protocol spec could use some clarification on this? Normally binding something multiple times is perfectly fine and works correctly (and may be needed when multiple libraries are making Wayland calls), so without text in the spec about this the Gnome behavior sounds incorrect.

@kchibisov
Copy link
Member

Good question. Maybe the Wayland protocol spec could use some clarification on this? Normally binding something multiple times is perfectly fine and works correctly (and may be needed when multiple libraries are making Wayland calls), so without text in the spec about this the Gnome behavior sounds incorrect.

That works fine on sway for example, it just gnome is special and doesn't bother to fix anything. I bet it still sends modifiers events incorrectly and I have to carry workarounds for gnome to ignore its non-compliance to wayland protocol.

@WhyNotHugo
Copy link

WhyNotHugo commented Feb 15, 2023

Ah, thanks for pointing out the new DataDevice implementation in sctk, I'd missed it. This seems to bind the data device global only once for both clipboard and drag-and-drop, so should be usable here, right?

Looks like the GNOME bug was fixed: https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/1253 https://gitlab.gnome.org/GNOME/mutter/-/commit/7e4e3714663952a69ba0a26662841fc5c0cb266c

@ids1024
Copy link
Member

ids1024 commented Feb 17, 2023

This seems to bind the data device global only once for both clipboard and drag-and-drop, so should be usable here, right?

I believe the issue is that winit doesn't currently provide clipboard support (#2156). It looks like toolkits and such in Rust are currently mostly using smithay-clipboard (directly or via a crate that abstracts multiple platforms). But another library like that will bind its own copy of the data device.

So I guess to fix it on the version of Mutter with this issue, it would be necessary to also add clipboard support to winit, and then software updating to the new version of winit would need to update their clipboard support to use winit's implementation. Which for the most part is probably how it should be done anyway.

Though maybe not an issue if it was fixed in Gnome a couple years ago? Not sure what release it made it into of if it was backported. Or if this is any issue in any other compositor.

@WhyNotHugo
Copy link

GitLab indicates that the fix made it to the gnome-3-36-backport branch: https://gitlab.gnome.org/rmader/mutter/-/commit/1ec91cc8eef1db353d852fc4c212cae3a9cb1aee

@ids1024
Copy link
Member

ids1024 commented Feb 18, 2023

Okay, so that should be on Ubuntu 20.04 (the previous LTS) and the like.

That sounds like it should generally cover current Gnome users that are using Wayland.

@tfachmann
Copy link

Any updates regarding this? Or better said, is there any blocking instance left?

@kchibisov
Copy link
Member

After #3367.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
DS - wayland S - platform parity Unintended platform differences
Development

Successfully merging a pull request may close this issue.

6 participants