Re: [PATCH wayland-protocols] xdg-output: deprecate the xdg_output.done event

2019-07-02 Thread Jonas Ådahl
On Sat, Apr 27, 2019 at 07:44:39AM +, Simon Ser wrote:
> This commit makes it so a wl_output.done event is guaranteed to be sent with a
> xdg_output.done event.
> 
> This protocol change has been discussed in a recent xorg-devel discussions 
> [1].
> 
> First let's recap why a change is needed: Xwayland listens to both wl_output 
> and
> xdg_output changes. When an output's properties change, Xwayland expects to
> receive both a wl_output.done event and an xdg_output.done event. If that's 
> not
> the case, Xwayland doesn't update its state (so old state is still exposed to
> X11 clients).
> 
> Most of the time, both objects will be updated at the same time (e.g. the
> current mode is changed, so both wl_output.mode and xdg_output.logical_size 
> are
> sent) so this won't be an issue. However in some situations only one of
> wl_output or xdg_output changes. For instance:
> 
> - The mode is changed at the same time as the scale, resulting in the same
>   logical_size.
> - The compositor doesn't expose the outputs' position via wl_output, so 
> whenever
>   the position changes only xdg_output is updated.
> 
> Both KDE [2] and wlroots [3] have experienced this issue.
> 
> For this reason, I'd like to update the xdg-output protocol to make it 
> mandatory
> to always send a wl_output.done event after xdg_output changes. This 
> effectively
> makes wl_output.done atomically apply all output state (including the state of
> add-on objects like xdg_output). This approach is pretty similar to
> wl_surface.commit: this request will atomically apply surface state including
> the state of e.g. the xdg_surface object tied to the wl_surface.
> 
> To update the protocol to reflect this new requirement we can either:
> 
> - **Bump xdg_output version**. The current protocol doesn't specify that
>   wl_output.done must be sent, adding this new requirement would be a breaking
>   change. We need to fix Xwayland for the current xdg_output version (maybe 
> make
>   it non-atomic for the current version, atomic for the new one?). Should we
>   deprecate xdg_output.done in the new version?
> - **Don't bump xdg_output version**. This clarifies what is expected in 
> practice
>   by Xwayland, a major xdg_output consumer, and what is currently implemented 
> by
>   all compositors.
> 
> There's one issue with the "don't bump" approach: indeed in practice 
> compositors
> always send wl_output.done and xdg_output.done in pairs, however the ordering
> between those two events is not guaranteed. This means some compositors might
> send this sequence:
> 
> wl_output.geometry(…)
> wl_output.done()
> xdg_output.logical_position(…)
> xdg_output.done()
> 
> In this case the wl_output.done event fails to atomically apply the xdg_output
> state.
> 
> For this reason, I think bumping the version is a better approach.
> 
> This commit also deprecates xdg_output.done, which doesn't have any purpose
> anymore.

Relying only on wl_output.done sounds good to me. Since the 'done' event
here is eventally to go away, I think it'd be wise to state somewhere
other than the 'done' documentation that the wl_output.done event is
used to notify all changes have been communicated.


Jonas


(P.S. sorry for the ones in the To:/Cc: field for the multiple mails,
for some reason mailman thinks I'm sending from my @redhat.com address,
thus gets stuck on moderation. D.S.).

> 
> [1]: https://lists.x.org/archives/xorg-devel/2019-April/058148.html
> [2]: https://phabricator.kde.org/D19253
> [3]: https://github.com/swaywm/sway/issues/4064
> 
> Signed-off-by: Simon Ser 
> ---
>  unstable/xdg-output/xdg-output-unstable-v1.xml | 8 ++--
>  1 file changed, 6 insertions(+), 2 deletions(-)
> 
> diff --git a/unstable/xdg-output/xdg-output-unstable-v1.xml 
> b/unstable/xdg-output/xdg-output-unstable-v1.xml
> index ccbfe1c..01ac7a7 100644
> --- a/unstable/xdg-output/xdg-output-unstable-v1.xml
> +++ b/unstable/xdg-output/xdg-output-unstable-v1.xml
> @@ -54,7 +54,7 @@
>  reset.
>
> 
> -  
> +  
>  
>A global factory interface for xdg_output objects.
>  
> @@ -77,7 +77,7 @@
>  
>
> 
> -  
> +  
>  
>An xdg_output describes part of the compositor geometry.
> 
> @@ -157,6 +157,10 @@
> 
>   This allows changes to the xdg_output properties to be seen as
>   atomic, even if they happen via multiple events.
> +
> + For objects version 3 onwards, this event is deprecated. Compositors
> + are not required to send it anymore and must send wl_output.done
> + instead.
>
>  
> 
> --
> 2.21.0
> 
> 
> ___
> wayland-devel mailing list
> wayland-devel@lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/wayland-devel
___
wayland-devel mailing list
wayland-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/wayland-devel

Re: [PATCH wayland-protocols] xdg-output: deprecate the xdg_output.done event

2019-06-24 Thread Pekka Paalanen
On Sun, 28 Apr 2019 21:52:34 +1200
Scott Anderson  wrote:

> >>> This commit makes it so a wl_output.done event is guaranteed to be sent 
> >>> with a
> >>> xdg_output.done event.  
> >>
> >> Humm, I am not sure I like changing xdg-output to rely on another protocol
> >> event, it's looks like a weird mixup to me...  
> > 
> > As noted below, this is idiomatic in the Wayland protocol. The
> > wl_surface.commit request applies xdg_surface's state.  
> 
> Just to expand on this with my two-cents, many of the Wayland protocol 
> objects are conceptually extensions of other protocol objects. 
> xdg_surface extends wl_surface, xdg_toplevel extends xdg_surface, and if 
> we want to go cross-extension-protocol, xdg_toplevel_decoration extends 
> xdg_toplevel.
> 
> While this is 4 protocol objects, we're conceptually just dealing with a 
> single surface's state. The protocol objects are simply adding new 
> interfaces to that surface and are meaningless on their own. We want to 
> keep that surface's state consistent, so they need to share the same 
> synchronisation to ensure atomicity, which includes wl_output.commit and 

*wl_surface.commit

> xdg_surface.configure.
> 
> So there is certainly precedence for relying on the events and requests 
> of other protocols.
> 
> Now applying that to xdg_output, it's simply adding interfaces to an 
> wl_output object, and isn't meaningful on its own. It only makes sense 
> to synchronise it properly with wl_output.

Hi,

FWIW, I fully agree with Scott here.

xdg_output may provide a super-set of properties, but it cannot exist
without the base object wl_output, and the interpretation of xdg_output
being an additional interface to what the wl_output originally
represents is appropriate.

Wayland core protocol (wl_output) cannot ever depend on an extension
(xdg_output), so it does not make sense to say that wl_output property
changes would emit an xdg_output.done event.


Thanks,
pq


pgpzADyRYXaB8.pgp
Description: OpenPGP digital signature
___
wayland-devel mailing list
wayland-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/wayland-devel

Re: [PATCH wayland-protocols] xdg-output: deprecate the xdg_output.done event

2019-05-10 Thread Olivier Fourdan
Hi Simon,

On Mon, Apr 29, 2019 at 9:22 AM Olivier Fourdan  wrote:
> On Mon, Apr 29, 2019 at 9:05 AM Simon Ser  wrote:
>>
>> On Monday, April 29, 2019 9:51 AM, Olivier Fourdan  
>> wrote:
>> > > On Sunday, April 28, 2019 12:04 PM, Olivier Fourdan 
>> > >  wrote:
>> > IMHO, it would better, semantically, to keep `xdg-output.done` and
>> > clarify (in xdg-output) that the `xdg-output.done` event is sent once
>> > all properties on wl_output _and_ xdg-output are set, xdg-output
>> > being a superset of wl_output. This way we would keep things apart
>> > but also still guarantee atomicity.
>>
>> What if we have another protocol that extends wl_output? How can you
>> atomically send xdg_output state and the other protocol's state?
>>
>> This solution doesn't scale.
>
>
> Humm, that's a good point.
>
>> > Besides, that would be easier on the existing clients that would
>> > (still) expect the `xdg-output.done` event and compositors that
>> > wouldn't need to emit the event based on the protocol version used by
>> > the client.
>>
>> That's a good point. I still think it's worth it to properly fix this
>> issue.
>
>
> Then we have no choice but bumping the protocol version to differentiate 
> those client which expect the xdg-output.done from those who won't.

I wonder if https://gitlab.freedesktop.org/xorg/xserver/issues/680 is
related (works with GNOME but not with KDE).

Anyway, you convinced me, I agree removing `xdg-output.done` would
help and make things simpler for clients.

Reviewed-by: Olivier Fourdan 

Cheers,
Olivier
___
wayland-devel mailing list
wayland-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/wayland-devel

Re: [PATCH wayland-protocols] xdg-output: deprecate the xdg_output.done event

2019-04-29 Thread Olivier Fourdan
Hi

On Mon, Apr 29, 2019 at 9:05 AM Simon Ser  wrote:

> On Monday, April 29, 2019 9:51 AM, Olivier Fourdan 
> wrote:
> > > On Sunday, April 28, 2019 12:04 PM, Olivier Fourdan <
> ofour...@redhat.com> wrote:
> > IMHO, it would better, semantically, to keep `xdg-output.done` and
> > clarify (in xdg-output) that the `xdg-output.done` event is sent once
> > all properties on wl_output _and_ xdg-output are set, xdg-output
> > being a superset of wl_output. This way we would keep things apart
> > but also still guarantee atomicity.
>
> What if we have another protocol that extends wl_output? How can you
> atomically send xdg_output state and the other protocol's state?
>
> This solution doesn't scale.
>

Humm, that's a good point.

> Besides, that would be easier on the existing clients that would
> > (still) expect the `xdg-output.done` event and compositors that
> > wouldn't need to emit the event based on the protocol version used by
> > the client.
>
> That's a good point. I still think it's worth it to properly fix this
> issue.
>

Then we have no choice but bumping the protocol version to differentiate
those client which expect the xdg-output.done from those who won't.


>
> > > [...]
> > > GNOME also doesn't expose all output properties IIRC: the whole list of
> > > output modes is not sent.
> >
> > It does, mutter sends the full list of outputs with their size, scale
> > and position and gtk+ relies on it for its GdkMonitor, although there
> > are plans to move gtk to use xdg-output as well for its GdkMonitor
> > definitions.
>
> The whole list of outputs is sent, however the whole list of output
> *modes* isn't. Only the current mode is sent.
>
> I don't think GTK+ should rely on output positions, modes or logical
> geometry.
>

gtk itself doesn't rely on it, but exposes it via its GdkMonitor API and
gtk based applications (such as Firefox) may use it.

Cheers,
Olivier
___
wayland-devel mailing list
wayland-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/wayland-devel

Re: [PATCH wayland-protocols] xdg-output: deprecate the xdg_output.done event

2019-04-29 Thread Simon Ser
On Monday, April 29, 2019 9:51 AM, Olivier Fourdan  wrote:
> Hi,
>
> On Sun, 28 Apr 2019 at 11:19, Simon Ser  wrote:
> > On Sunday, April 28, 2019 12:04 PM, Olivier Fourdan  
> > wrote:
> > > Humm, I am not sure I like changing xdg-output to rely on another protocol
> > > event, it's looks like a weird mixup to me...
> >
> > As noted below, this is idiomatic in the Wayland protocol. The
> > wl_surface.commit request applies xdg_surface's state.
>
> Sure, yet I reckon it's a bit different, a `commit` is a request and
> not an event

I don't see how this is different. "Request" and "event" are just fancy
names for "protocol message". It's just that one is sent by the client
whereas the other is sent by the server.

> `wl_output.done` is supposed to be sent once all wl_output's
> properties are sent, not other objects' properties such as xdg-output
> own props.

Well the proposal's point is to change this.

> Well, maybe I'm too picky, but xdg-output is a superset of wl_output,
> so I think it's weird to rely on an event from the subset (wl_output)
> to tell when the properties on the superset (xdg-output) are all set.

xdg_surface is a superset of wl_surface too. However it's natural to
rely on wl_surface.commit. I don't understand why it wouldn't be for
xdg_output too.

> IMHO, it would better, semantically, to keep `xdg-output.done` and
> clarify (in xdg-output) that the `xdg-output.done` event is sent once
> all properties on wl_output _and_ xdg-output are set, xdg-output
> being a superset of wl_output. This way we would keep things apart
> but also still guarantee atomicity.

What if we have another protocol that extends wl_output? How can you
atomically send xdg_output state and the other protocol's state?

This solution doesn't scale.

> Besides, that would be easier on the existing clients that would
> (still) expect the `xdg-output.done` event and compositors that
> wouldn't need to emit the event based on the protocol version used by
> the client.

That's a good point. I still think it's worth it to properly fix this
issue.

> > [...]
> > GNOME also doesn't expose all output properties IIRC: the whole list of
> > output modes is not sent.
>
> It does, mutter sends the full list of outputs with their size, scale
> and position and gtk+ relies on it for its GdkMonitor, although there
> are plans to move gtk to use xdg-output as well for its GdkMonitor
> definitions.

The whole list of outputs is sent, however the whole list of output
*modes* isn't. Only the current mode is sent.

I don't think GTK+ should rely on output positions, modes or logical
geometry.
___
wayland-devel mailing list
wayland-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/wayland-devel

Re: [PATCH wayland-protocols] xdg-output: deprecate the xdg_output.done event

2019-04-29 Thread Olivier Fourdan
Hi,

On Sun, 28 Apr 2019 at 11:19, Simon Ser  wrote:
> On Sunday, April 28, 2019 12:04 PM, Olivier Fourdan 
wrote:
> > Humm, I am not sure I like changing xdg-output to rely on another
protocol
> > event, it's looks like a weird mixup to me...
>
> As noted below, this is idiomatic in the Wayland protocol. The
> wl_surface.commit request applies xdg_surface's state.

Sure, yet I reckon it's a bit different, a `commit` is a request and not an
event, `wl_output.done` is supposed to be sent once all wl_output's
properties are sent, not other objects' properties such as xdg-output own
props.

Well, maybe I'm too picky, but xdg-output is a superset of wl_output, so I
think it's weird to rely on an event from the subset (wl_output) to tell
when the properties on the superset (xdg-output) are all set.

IMHO, it would better, semantically, to keep `xdg-output.done` and clarify
(in xdg-output) that the `xdg-output.done` event is sent once all
properties on wl_output _and_ xdg-output are set, xdg-output being a
superset of wl_output. This way we would keep things apart but also still
guarantee atomicity.

Besides, that would be easier on the existing clients that would (still)
expect the `xdg-output.done` event and compositors that wouldn't need to
emit the event based on the protocol version used by the client.

> [...]
> GNOME also doesn't expose all output properties IIRC: the whole list of
> output modes is not sent.

It does, mutter sends the full list of outputs with their size, scale and
position and gtk+ relies on it for its GdkMonitor, although there are plans
to move gtk to use xdg-output as well for its GdkMonitor definitions.

https://gitlab.gnome.org/GNOME/gtk/issues/1828
https://gitlab.gnome.org/GNOME/gtk/merge_requests/750
https://gitlab.gnome.org/GNOME/gtk/merge_requests/751

Cheers,
Olivier
___
wayland-devel mailing list
wayland-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/wayland-devel

Re: [PATCH wayland-protocols] xdg-output: deprecate the xdg_output.done event

2019-04-28 Thread Scott Anderson

This commit makes it so a wl_output.done event is guaranteed to be sent with a
xdg_output.done event.


Humm, I am not sure I like changing xdg-output to rely on another protocol
event, it's looks like a weird mixup to me...


As noted below, this is idiomatic in the Wayland protocol. The
wl_surface.commit request applies xdg_surface's state.


Just to expand on this with my two-cents, many of the Wayland protocol 
objects are conceptually extensions of other protocol objects. 
xdg_surface extends wl_surface, xdg_toplevel extends xdg_surface, and if 
we want to go cross-extension-protocol, xdg_toplevel_decoration extends 
xdg_toplevel.


While this is 4 protocol objects, we're conceptually just dealing with a 
single surface's state. The protocol objects are simply adding new 
interfaces to that surface and are meaningless on their own. We want to 
keep that surface's state consistent, so they need to share the same 
synchronisation to ensure atomicity, which includes wl_output.commit and 
xdg_surface.configure.


So there is certainly precedence for relying on the events and requests 
of other protocols.


Now applying that to xdg_output, it's simply adding interfaces to an 
wl_output object, and isn't meaningful on its own. It only makes sense 
to synchronise it properly with wl_output.


Scott
___
wayland-devel mailing list
wayland-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/wayland-devel

Re: [PATCH wayland-protocols] xdg-output: deprecate the xdg_output.done event

2019-04-28 Thread Simon Ser
On Sunday, April 28, 2019 12:04 PM, Olivier Fourdan  wrote:
> Hi,
>
> On Sat, Apr 27, 2019 at 9:44 AM Simon Ser  wrote:
>
> > This commit makes it so a wl_output.done event is guaranteed to be sent 
> > with a
> > xdg_output.done event.
>
> Humm, I am not sure I like changing xdg-output to rely on another protocol
> event, it's looks like a weird mixup to me...

As noted below, this is idiomatic in the Wayland protocol. The
wl_surface.commit request applies xdg_surface's state.

> > This protocol change has been discussed in a recent xorg-devel discussions 
> > [1].
> >
> > First let's recap why a change is needed: Xwayland listens to both 
> > wl_output and
> > xdg_output changes. When an output's properties change, Xwayland expects to
> > receive both a wl_output.done event and an xdg_output.done event. If that's 
> > not
> > the case, Xwayland doesn't update its state (so old state is still exposed 
> > to
> > X11 clients).
> >
> > Most of the time, both objects will be updated at the same time (e.g. the
> > current mode is changed, so both wl_output.mode and xdg_output.logical_size 
> > are
> > sent) so this won't be an issue. However in some situations only one of
> > wl_output or xdg_output changes. For instance:
> >
> > - The mode is changed at the same time as the scale, resulting in the same
> >   logical_size.
>
> If the mode or scale changes, wl_output events should be sent. If the
> resulting xdg-output remains the same, that's fine, no xdg-output
> event would be sent and Xwayland should be fixed for that case.
>
> Same for rotation actually, I remember seing displays (Barco, iirc)
> used by ATM that were square (both physically and in resolution),
> applying a rotation to such an output device would not change the
> resulting xdg-output definition.
>
> > - The compositor doesn't expose the outputs' position via wl_output, so 
> > whenever
> >   the position changes only xdg_output is updated.
>
> That sounds like a bug in the compositor, wl_output is core protocol
> and the geometry event should be sent “[...] whenever any of the
> properties change.”

No, this is not a bug, this is deliberate. wlroots doesn't expose the
output positions to regular clients, because regular clients shouldn't
care about it. If they do, either it's a client bug, or either they
should use xdg-output.

GNOME also doesn't expose all output properties IIRC: the whole list of
output modes is not sent.

> > Both KDE [2] and wlroots [3] have experienced this issue.
>
> To me, that feels like changing the protocol definitions to please
> specific implementations  or work around bugs.

No, this proposal aims to add a way to atomically apply output
properties. Since output properties include both wl_output properties
and xdg_output properties, the proposal suggests to remove
xdg_output.done (since two atomic events can't be combined into one).

> > For this reason, I'd like to update the xdg-output protocol to make it 
> > mandatory
> > to always send a wl_output.done event after xdg_output changes. This 
> > effectively
> > makes wl_output.done atomically apply all output state (including the state 
> > of
> > add-on objects like xdg_output). This approach is pretty similar to
> > wl_surface.commit: this request will atomically apply surface state 
> > including
> > the state of e.g. the xdg_surface object tied to the wl_surface.
> >
> > To update the protocol to reflect this new requirement we can either:
> >
> > - **Bump xdg_output version**. The current protocol doesn't specify that
> >   wl_output.done must be sent, adding this new requirement would be a 
> > breaking
> >   change. We need to fix Xwayland for the current xdg_output version (maybe 
> > make
> >   it non-atomic for the current version, atomic for the new one?). Should we
> >   deprecate xdg_output.done in the new version?
> > - **Don't bump xdg_output version**. This clarifies what is expected in 
> > practice
> >   by Xwayland, a major xdg_output consumer, and what is currently 
> > implemented by
> >   all compositors.
> >
> > There's one issue with the "don't bump" approach: indeed in practice 
> > compositors
> > always send wl_output.done and xdg_output.done in pairs, however the 
> > ordering
> > between those two events is not guaranteed. This means some compositors 
> > might
> > send this sequence:
> >
> >     wl_output.geometry(…)
> >     wl_output.done()
> >     xdg_output.logical_position(…)
> >     xdg_output.done()
> >
> > In this case the wl_output.done event fails to atomically apply the 
> > xdg_output
> > state.
> >
> > For this reason, I think bumping the version is a better approach.
>
> I'd rather we try harder to fix the implementations. In the worse
> case, Xwayland would send two XRandr events instead of one, which
> IMHO is no big deal.

The Wayland protocol really tries hard to make properties atomic when
useful. IMHO it would be unfortunate to say "it's no big deal if it's
not atomic", especially when the intermediate state 

Re: [PATCH wayland-protocols] xdg-output: deprecate the xdg_output.done event

2019-04-28 Thread Olivier Fourdan
Hi,

On Sat, Apr 27, 2019 at 9:44 AM Simon Ser  wrote:

> This commit makes it so a wl_output.done event is guaranteed to be sent
> with a
> xdg_output.done event.
>

Humm, I am not sure I like changing xdg-output to rely on another protocol
event, it's looks like a weird mixup to me...


> This protocol change has been discussed in a recent xorg-devel discussions
> [1].
>
> First let's recap why a change is needed: Xwayland listens to both
> wl_output and
> xdg_output changes. When an output's properties change, Xwayland expects to
> receive both a wl_output.done event and an xdg_output.done event. If
> that's not
> the case, Xwayland doesn't update its state (so old state is still exposed
> to
> X11 clients).
>
> Most of the time, both objects will be updated at the same time (e.g. the
> current mode is changed, so both wl_output.mode and
> xdg_output.logical_size are
> sent) so this won't be an issue. However in some situations only one of
> wl_output or xdg_output changes. For instance:
>
> - The mode is changed at the same time as the scale, resulting in the same
>   logical_size.
>

If the mode or scale changes, wl_output events should be sent. If the
resulting xdg-output remains the same, that's fine, no xdg-output event
would be sent and Xwayland should be fixed for that case.

Same for rotation actually, I remember seing displays (Barco, iirc) used by
ATM that were square (both physically and in resolution), applying a
rotation to such an output device would not change the resulting xdg-output
definition.


> - The compositor doesn't expose the outputs' position via wl_output, so
> whenever
>   the position changes only xdg_output is updated.
>

That sounds like a bug in the compositor, wl_output is core protocol and
the geometry event should be sent “[...] whenever any of the properties
change.”


> Both KDE [2] and wlroots [3] have experienced this issue.
>

To me, that feels like changing the protocol definitions to please specific
implementations  or work around bugs.

For this reason, I'd like to update the xdg-output protocol to make it
> mandatory
> to always send a wl_output.done event after xdg_output changes. This
> effectively
> makes wl_output.done atomically apply all output state (including the
> state of
> add-on objects like xdg_output). This approach is pretty similar to
> wl_surface.commit: this request will atomically apply surface state
> including
> the state of e.g. the xdg_surface object tied to the wl_surface.
>
> To update the protocol to reflect this new requirement we can either:
>
> - **Bump xdg_output version**. The current protocol doesn't specify that
>   wl_output.done must be sent, adding this new requirement would be a
> breaking
>   change. We need to fix Xwayland for the current xdg_output version
> (maybe make
>   it non-atomic for the current version, atomic for the new one?). Should
> we
>   deprecate xdg_output.done in the new version?
> - **Don't bump xdg_output version**. This clarifies what is expected in
> practice
>   by Xwayland, a major xdg_output consumer, and what is currently
> implemented by
>   all compositors.
>
> There's one issue with the "don't bump" approach: indeed in practice
> compositors
> always send wl_output.done and xdg_output.done in pairs, however the
> ordering
> between those two events is not guaranteed. This means some compositors
> might
> send this sequence:
>
> wl_output.geometry(…)
> wl_output.done()
> xdg_output.logical_position(…)
> xdg_output.done()
>
> In this case the wl_output.done event fails to atomically apply the
> xdg_output
> state.
>
> For this reason, I think bumping the version is a better approach.
>

I'd rather we try harder to fix the implementations. In the worse case,
Xwayland would send two XRandr events instead of one, which IMHO is no big
deal.

Cheers,
Olivier


> This commit also deprecates xdg_output.done, which doesn't have any purpose
> anymore.
>
> [1]: https://lists.x.org/archives/xorg-devel/2019-April/058148.html
> [2]: https://phabricator.kde.org/D19253
> [3]: https://github.com/swaywm/sway/issues/4064
>
> Signed-off-by: Simon Ser 
> ---
>  unstable/xdg-output/xdg-output-unstable-v1.xml | 8 ++--
>  1 file changed, 6 insertions(+), 2 deletions(-)
>
> diff --git a/unstable/xdg-output/xdg-output-unstable-v1.xml
> b/unstable/xdg-output/xdg-output-unstable-v1.xml
> index ccbfe1c..01ac7a7 100644
> --- a/unstable/xdg-output/xdg-output-unstable-v1.xml
> +++ b/unstable/xdg-output/xdg-output-unstable-v1.xml
> @@ -54,7 +54,7 @@
>  reset.
>
>
> -  
> +  
>  
>A global factory interface for xdg_output objects.
>  
> @@ -77,7 +77,7 @@
>  
>
>
> -  
> +  
>  
>An xdg_output describes part of the compositor geometry.
>
> @@ -157,6 +157,10 @@
>
> This allows changes to the xdg_output properties to be seen as
> atomic, even if they happen via multiple events.
> +
> +   For objects version 3 onwards, this event is deprecated.
> 

[PATCH wayland-protocols] xdg-output: deprecate the xdg_output.done event

2019-04-27 Thread Simon Ser
This commit makes it so a wl_output.done event is guaranteed to be sent with a
xdg_output.done event.

This protocol change has been discussed in a recent xorg-devel discussions [1].

First let's recap why a change is needed: Xwayland listens to both wl_output and
xdg_output changes. When an output's properties change, Xwayland expects to
receive both a wl_output.done event and an xdg_output.done event. If that's not
the case, Xwayland doesn't update its state (so old state is still exposed to
X11 clients).

Most of the time, both objects will be updated at the same time (e.g. the
current mode is changed, so both wl_output.mode and xdg_output.logical_size are
sent) so this won't be an issue. However in some situations only one of
wl_output or xdg_output changes. For instance:

- The mode is changed at the same time as the scale, resulting in the same
  logical_size.
- The compositor doesn't expose the outputs' position via wl_output, so whenever
  the position changes only xdg_output is updated.

Both KDE [2] and wlroots [3] have experienced this issue.

For this reason, I'd like to update the xdg-output protocol to make it mandatory
to always send a wl_output.done event after xdg_output changes. This effectively
makes wl_output.done atomically apply all output state (including the state of
add-on objects like xdg_output). This approach is pretty similar to
wl_surface.commit: this request will atomically apply surface state including
the state of e.g. the xdg_surface object tied to the wl_surface.

To update the protocol to reflect this new requirement we can either:

- **Bump xdg_output version**. The current protocol doesn't specify that
  wl_output.done must be sent, adding this new requirement would be a breaking
  change. We need to fix Xwayland for the current xdg_output version (maybe make
  it non-atomic for the current version, atomic for the new one?). Should we
  deprecate xdg_output.done in the new version?
- **Don't bump xdg_output version**. This clarifies what is expected in practice
  by Xwayland, a major xdg_output consumer, and what is currently implemented by
  all compositors.

There's one issue with the "don't bump" approach: indeed in practice compositors
always send wl_output.done and xdg_output.done in pairs, however the ordering
between those two events is not guaranteed. This means some compositors might
send this sequence:

wl_output.geometry(…)
wl_output.done()
xdg_output.logical_position(…)
xdg_output.done()

In this case the wl_output.done event fails to atomically apply the xdg_output
state.

For this reason, I think bumping the version is a better approach.

This commit also deprecates xdg_output.done, which doesn't have any purpose
anymore.

[1]: https://lists.x.org/archives/xorg-devel/2019-April/058148.html
[2]: https://phabricator.kde.org/D19253
[3]: https://github.com/swaywm/sway/issues/4064

Signed-off-by: Simon Ser 
---
 unstable/xdg-output/xdg-output-unstable-v1.xml | 8 ++--
 1 file changed, 6 insertions(+), 2 deletions(-)

diff --git a/unstable/xdg-output/xdg-output-unstable-v1.xml 
b/unstable/xdg-output/xdg-output-unstable-v1.xml
index ccbfe1c..01ac7a7 100644
--- a/unstable/xdg-output/xdg-output-unstable-v1.xml
+++ b/unstable/xdg-output/xdg-output-unstable-v1.xml
@@ -54,7 +54,7 @@
 reset.
   

-  
+  
 
   A global factory interface for xdg_output objects.
 
@@ -77,7 +77,7 @@
 
   

-  
+  
 
   An xdg_output describes part of the compositor geometry.

@@ -157,6 +157,10 @@

This allows changes to the xdg_output properties to be seen as
atomic, even if they happen via multiple events.
+
+   For objects version 3 onwards, this event is deprecated. Compositors
+   are not required to send it anymore and must send wl_output.done
+   instead.
   
 

--
2.21.0


___
wayland-devel mailing list
wayland-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/wayland-devel