[Paging wayland-devel@ for the protocol discussion at the end of this e-mail]
On Monday, April 22, 2019 3:21 PM, Ferdi265 <[email protected]> wrote: > On 22/04/2019 14:01, Roman Gilg wrote: > > On Mon, Apr 22, 2019 at 1:30 PM Ferdi265 [email protected] wrote: > > > Hello, > > > I investigated a bug I encountered while using the Sway Compositor and > > > traced it back to some behaviour in Xwayland: > > > The xdg_output and wl_output events are handled in such a way that > > > output changes (e.g. position) sometimes don't get applied if only > > > xdg_output is sent instead of both xdg_output and wl_output. (Sway does > > > this) > > > > This issue was something we noted in KWin as well and fixed it > > downstream by making sure the events get always sent together. > > More info here: https://phabricator.kde.org/D19253 > > Would a downstream fix work for you as well? Not saying it can't be > > fixed upstream in XWayland, but I haven't yet looked at your patch in > > detail and I just remember the output code in Xwayland being somewhat > > difficult, so maybe a downstream fix would be easier. > > The change to remove some information from the wl_output event and > instead rely only on xdg_output in wlroots was deliberate as it > simplifies the compositor code and might not even make much sense for > some types of compositors (e.g. 3D desktop systems). > > The reason the events now don't fire together is that no information in > wl_output actually changed, while the information in xdg_output did. > > the downstream discussion for this is here > https://github.com/swaywm/wlroots/issues/1610 > > I can't really speak for the whole wlroots / sway project, so I added > Simon Ser aka "emersion" as CC, who is one of the main developers of > sway and wlroots. > > Personally, I think Xwayland shouldn't attach too much meaning to when > these events happen, and if they happen together. They are separate > events after all, and should be treated this way. > > Assuming that this information is always updated at the same time or > even re-sending it without a change (e.g. changing the output position > in sway doesn't change any information in the wl_output event) just so > the events happen together just sounds backwards to me. I agree that Xwayland should be a good client and should handle xdg_output.done sent even when wl_output.done isn't sent. However I'm not sure this is the right fix: this patch breaks atomicity. For instance the first time the output is advertised to Xwayland, it will first update its internal state with the metadata from wl_output and then take into account xdg-output and apply a second update. This results in invalid intermediate state. I'm not sure how to fix it, the only idea I can come up with is to have a timer to debounce updates (yeah, it's not a good idea). [Below is the part for wayland-devel@] Wild idea: maybe xdg_output.done should never have existed, and xdg_output should have used the wl_output.done event to atomically submit state -- just like wl_surface.commit is used by add-on interfaces like xdg_surface. This would more-or-less result in the workaround Roman suggested on the server side, but it would be nice to formalize it if we want to go down this road. Thoughts? _______________________________________________ [email protected]: X.Org development Archives: http://lists.x.org/archives/xorg-devel Info: https://lists.x.org/mailman/listinfo/xorg-devel
