Re: RFC: Wayland high-resolution wheel scrolling

2019-04-05 Thread Peter Hutterer

On 6/4/19 02:11 , Simon Ser wrote:

On Wednesday, April 3, 2019 5:36 AM, Peter Hutterer  
wrote:

I've been trying to sort out the new hi-res wheel scrolling that was added to
linux 5.0 but it's been a bit of a struggle to say the least. For the
impatient, skip forward to the protocol diff but the background info is
important.


Thanks for taking the time to write this big summary. It's pretty helpful!


Everything below applies equally to horizontal and vertical scrolling, both
directions and wheels and wheel tilts.

The APIs that are involved for low-resolution wheel scrolling:

kernel:
- REL_WHEEL for every wheel click

libinput uses pointer axis events for wheels:
- pointer axis value: the movement of the wheel in degrees
- pointer axis discrete value: the number of wheel clicks
- pointer axis source: set to 'wheel'

Usally this means you get discrete 1, value 15 for the standard 15-degree mouse
wheel, discrete 2 value 30 is two wheel clicks within one hw frame.

There is one implicit assumption here: the discrete value must
be 1 or more for every event. Otherwise it's impossible to use the value and
calculate the angle. More on that later.

This API is effectively the same in the wayland protocol except for the unit of
the 'value' which is is in screen coordinates, not degrees.

wayland protocol:
- pointer axis value: the movement in screen coordinates
- pointer axis discrete: the number of wheel clicks
- pointer axis source: set to 'wheel'

The big difference here though: libinput's API is per-device, wayland's API is
per wl-seat pointer. There's no way to tell in the protocol that you're
scrolling simultaneously with wheels on two different mice.

Let's see how the common compositors implement this:

weston:
- for source wheel, only the discrete value is handled and:
- pointer axis discrete is sent as-is from libinput
- pointer axis source is sent as-is from libinput
- pointer axis value is always (discrete * 10)
- otherwise the libinput pointer value (degrees) from a source wheel is ignored

The magic multiplier 10 is afaik for historical reasons, weston used to do 10
so early libinput took that. When libinput switched to use physical dimensions
instead of 10, that value was kept for backwards compatibility with existing
wayland clients.

mutter:
- for source wheel, only the discrete value is handled and:
- clutter-internal event for the discrete **direction** from libinput
   - i.e. discrete > 1 will still only generate one event,some events
 drop to the floor here for fast wheel movements
- clutter-internal event with (value * 10) marked as 'emulated' but
   that event is ignored later when we're writing to the protocol
- the discrete event is written as wl_pointer.axis_discrete and
   wl_pointer.axis with a value of 10

So, the same multiplier of 10 but fast scroll events with more than one click
per frame appear to get dropped.

kwin (through qtwayland):
- doesn't handle discrete at all afaict
- pointer axis events are passed through but I got a bit confused over the
   actual value written on the wire here.

wlroots:
- pointer axis discrete is sent as-is from libinput
- pointer axis source is sent as-is from libinput
- pointer axis value is sent as-is from libinput

Because the physical angle is passed on from libinput as screen coordinates,
this means wlroots has different scroll behaviour to GNOME/sway and it does
scroll a larger distance for wheels with higher click angles. This is the
opposite of the intended behaviour, manufacturers advertise these wheels
as slow-scrolling wheels. Realistically though the physical movements is the
same-ish and if a client uses discrete it doesn't matter anyway.


Hmm, that's interesting. We wlroots devs have had assumed you'd want a given
angle to always scroll the same amount of pixels. But this doesn't matter that
much because we have a configuration option for the scroll multiplier anyway.
We still should have good defaults of course.



first, apologies if i got some of the details wrong, I hope the overall 
summary is still correct enough :)


the thing with the angle in this case is that you cannot really decide 
that angle. The wheel forces you to whatever it's built as and that's it 
(more recent high-res wheels excepted). Even the earlier free-floating 
wheels still only send events every X degrees. Users (and manufacturers) 
thus don't think as angles as much as wheel clicks. A 20 deg wheel feels 
slower than the standard 15 deg wheel simply because you have to scroll 
more to get one click. And that's what's advertised too.


The angle == pixels mapping makes sense for a continuous axis, I'm not 
sure it's as useful for the wheel as we have them. Then again, it's 
relatively niche and only a small subset of users notice and/or care 
about this particular issue.



xf86-input-libinput:
- X devices need to set up a scroll distance for scroll motion, the driver
   uses 120 (since Feb, before it was 15). This means any multiple of 120.0
   

Re: weston rdp black screen

2019-04-05 Thread Jean-Francois Dagenais
I am using weston master, freerdp master, and wayland-protocols master 

I am launching like this:

weston --rdp4-key ~/devel/weston/key/rdp-security.key --backend=rdp-backend.so 
--debug

Connecting using 640x480x32, black screen.

Can anyone confirm rdp-backend is actually working??

> On Apr 3, 2019, at 13:13, Jean-Francois Dagenais  
> wrote:
> 
> Hi all,
> 
> I am working on weston on yocto. Amongst other things I have created a meson
> version of the weston recipe found in poky.
> 
> Either on my embedded platform or on my PC. Whenever I try to use the rdp
> backend, whether as the root compositor or through the [screen-share] 
> command. I
> get a black screen. Input works though and I can blindly click on the
> weston-terminal icon, then type commands and proved it works by issuing 
> "killall
> weston" ;)
> 
> I have tried all the RDP clients at my disposal on mac (CoRD, microsoft's rdp 
> v8
> and v10).
> 
> I get a different behaviour on microsoft' remote connection on windows itself.
> Weston logs show: [15:42:10:184] [1809:1809] 
> [ERROR][com.freerdp.core.transport]
> - BIO_read returned a system error 11: Resource temporarily unavailable and 
> the
> client shows a microsoft style error box with no info in it.
> 
> I have no experience with freerdp and need any clues as to what to do to find
> the problem.
> 
> ANY pointers what so ever will help me.

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

wayland-protocols scope and governance

2019-04-05 Thread Drew DeVault
I've written up a governance document for us to bikeshed, which is
included at the end of this email. Some comments upfront.

Logistical notes:

- We'll need a wayland-protocols mailing list. This should probably be
  members only, to reduce noise.
- Members will be given push access to the upstream repo. We'll live
  with a gentleman's agreement to play by the rules and invoke the
  member removal process if someone doesn't play nice.
- Someone needs to flesh out the website to show adoption and protocol
  acknowledgement status. Simon was working on something here:

  
https://gitlab.freedesktop.org/wayland/wayland.freedesktop.org/merge_requests/3

In the interest of keeping this effort moving forward, here are some
actionable tasks we can do, in no particular order:

- Iterate on this document, or propose a new one
- Establish initial membership and status of each protocol
  1. State your intention to be a member, including your point of
 contact and justification per section 1.1, or objection to section
 1.1's requirements
  2. State your project's approval status & statement for any protocols
 you care about
- Mention any important/interesting implementations of the protocols you
  care about
- Decide how & when to ratifiy the new governance model

Aside: wlroots-based compositors have agreed to join under one joint
membership, but given that this reduces our voting power, we may at some
point dissolve into our constituent members if necessary. I think in
practice we'll all get along amicably enough that this won't be a
problem.

Thoughts?

  wayland-protocols governance

This document governs the maintenance of wayland-protocols and serves to outline
the broader process for standardization of protocol extensions in the Wayland
ecosystem.

 1. Membership

Membership in wayland-protocols is offered to stakeholders in the Wayland
ecosystem who have an interest in participating in protocol extension
standardization.

  1.1. Membership requirements

a. Membership is extended to projects, rather than individuals.
b. Members represent general-purpose projects with a stake in multiple Wayland
   protocols (e.g. compositors, GUI toolkits, etc), rather than special-purpose
   applications with a stake in only one or two.
c. Each project must provide an individual point-of-contact for that project who
   can be reached to discuss protocol-related matters.

 1.2. Becoming a member

a. New members who meet the criteria outlined in 1.1 are established by
   invitation from an existing member. Projects hoping to join should reach out
   to an existing member asking for this invitation.
b. New members shall write to the wayland-protocols mailing list stating their
   intention of joining and their sponsor.
c. The sponsor shall respond acknowledging their sponsorship of the membership.
d. A 14 day discussion period for comments from wayland-protocols members will
   be held.
e. At the conclusion of the discussion period, the new membership is established
   unless their application was NACKed by a 1/2 majority of existing members.

1.3. Ceasing membership

a. A member may step down by writing their intention to do so to the
   wayland-protocols mailing list.
b. A removal vote may be called for by an existing member by posting to the
   wayland-protocols mailing list. This begins a 14 day voting & discussion
   period.
c. At the conclusion of the voting period, the member is removed if the votes
   total 2/3rds of members.
d. Removed members are not eligible to apply for membership again for a period
   of 1 year.
e. Following a failed vote, the sponsoring member cannot call for a re-vote or
   propose any other removal for 90 days.

  2. Protocols

2.1. Protocol namespaces

a. Namespaces are implemented in practice by prefixing each interface name in a
   protocol definition (XML) with the namespace name, and an underscore (e.g.
   "xdg_wm_base").
b. Protocols in a namespace may optionally use the namespace followed by a dash
   in the name (e.g. "xdg-shell").
c. The "xdg" namespace is established for protocols useful for implementing
   desktop-like systems.
d. The "wp" namespace is established for protocols generally useful to Wayland
   implementations (i.e. "plumbing" protocols).
e. The "ext" namespace is established as a general catch-all for protocols that
   fit into no other namespace.

  2.2. Protocol inclusion requirements

a. All protocols found in the "xdg" and "wp" namespaces at the time of writing
   are grandfathered into their respective namespace without further discussion.
b. Protocols in the "xdg" and "wp" namespace are eligible for inclusion only if
   ACKed by at least 3 members.
c. Protocols in the "xdg" and "wp" namespace are ineligible for inclusion if
   if NACKed by 

Re: Stepping down as release manager

2019-04-05 Thread Simon Ser
On Friday, April 5, 2019 4:51 PM, Derek Foreman 
 wrote:
> I no longer have as much time to dedicate to this as I used to, so I
> think it would be best if someone else could take over managing the
> releases for Weston and Wayland.

Hi Derek,

Thanks for your hard work, it is much appreciated.

Regarding the need for a new release manager for Wayland, I'd like to
step in and volunteer for this role. I'm willing to take the time
necessary to (1) learn the current release process and (2) apply it if
the community is interested.

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

Re: RFC: Wayland high-resolution wheel scrolling

2019-04-05 Thread Simon Ser
On Wednesday, April 3, 2019 5:36 AM, Peter Hutterer  
wrote:
> I've been trying to sort out the new hi-res wheel scrolling that was added to
> linux 5.0 but it's been a bit of a struggle to say the least. For the
> impatient, skip forward to the protocol diff but the background info is
> important.

Thanks for taking the time to write this big summary. It's pretty helpful!

> Everything below applies equally to horizontal and vertical scrolling, both
> directions and wheels and wheel tilts.
>
> The APIs that are involved for low-resolution wheel scrolling:
>
> kernel:
> - REL_WHEEL for every wheel click
>
> libinput uses pointer axis events for wheels:
> - pointer axis value: the movement of the wheel in degrees
> - pointer axis discrete value: the number of wheel clicks
> - pointer axis source: set to 'wheel'
>
> Usally this means you get discrete 1, value 15 for the standard 15-degree 
> mouse
> wheel, discrete 2 value 30 is two wheel clicks within one hw frame.
>
> There is one implicit assumption here: the discrete value must
> be 1 or more for every event. Otherwise it's impossible to use the value and
> calculate the angle. More on that later.
>
> This API is effectively the same in the wayland protocol except for the unit 
> of
> the 'value' which is is in screen coordinates, not degrees.
>
> wayland protocol:
> - pointer axis value: the movement in screen coordinates
> - pointer axis discrete: the number of wheel clicks
> - pointer axis source: set to 'wheel'
>
> The big difference here though: libinput's API is per-device, wayland's API is
> per wl-seat pointer. There's no way to tell in the protocol that you're
> scrolling simultaneously with wheels on two different mice.
>
> Let's see how the common compositors implement this:
>
> weston:
> - for source wheel, only the discrete value is handled and:
> - pointer axis discrete is sent as-is from libinput
> - pointer axis source is sent as-is from libinput
> - pointer axis value is always (discrete * 10)
> - otherwise the libinput pointer value (degrees) from a source wheel is 
> ignored
>
> The magic multiplier 10 is afaik for historical reasons, weston used to do 10
> so early libinput took that. When libinput switched to use physical dimensions
> instead of 10, that value was kept for backwards compatibility with existing
> wayland clients.
>
> mutter:
> - for source wheel, only the discrete value is handled and:
> - clutter-internal event for the discrete **direction** from libinput
>   - i.e. discrete > 1 will still only generate one event,some events
> drop to the floor here for fast wheel movements
> - clutter-internal event with (value * 10) marked as 'emulated' but
>   that event is ignored later when we're writing to the protocol
> - the discrete event is written as wl_pointer.axis_discrete and
>   wl_pointer.axis with a value of 10
>
> So, the same multiplier of 10 but fast scroll events with more than one click
> per frame appear to get dropped.
>
> kwin (through qtwayland):
> - doesn't handle discrete at all afaict
> - pointer axis events are passed through but I got a bit confused over the
>   actual value written on the wire here.
>
> wlroots:
> - pointer axis discrete is sent as-is from libinput
> - pointer axis source is sent as-is from libinput
> - pointer axis value is sent as-is from libinput
>
> Because the physical angle is passed on from libinput as screen coordinates,
> this means wlroots has different scroll behaviour to GNOME/sway and it does
> scroll a larger distance for wheels with higher click angles. This is the
> opposite of the intended behaviour, manufacturers advertise these wheels
> as slow-scrolling wheels. Realistically though the physical movements is the
> same-ish and if a client uses discrete it doesn't matter anyway.

Hmm, that's interesting. We wlroots devs have had assumed you'd want a given
angle to always scroll the same amount of pixels. But this doesn't matter that
much because we have a configuration option for the scroll multiplier anyway.
We still should have good defaults of course.

> xf86-input-libinput:
> - X devices need to set up a scroll distance for scroll motion, the driver
>   uses 120 (since Feb, before it was 15). This means any multiple of 120.0
>   triggers legacy button emulation in the server, otherwise the number has no
>   meaning.
> - for source wheel it uses the discrete value only, so effectively 120 *
>   discrete.
>
> This driver had a division by 0 for discrete values of 0, fixed in the
> current release. More on this later.
>
>
>
> Let's look at how wheel events are processed in some of the clients:
>
> GTK:
> - for a discrete event, GDK_SCROLL_UP is passed on flagged as 'emulated'
> - the axis value is passed on as GDK_SCROLL_SMOOTH
>
> Qt:
> - doesn't handle discrete
> - multiplies the value by -12. This gives it a 120-based value which
>   matches the Windows API provided the axis value is 10 of course.
>   Qt on wlroots is probably off here.
>
> Xwayland:
> - X 

Re: Stepping down as release manager

2019-04-05 Thread Daniel Stone
On Fri, 5 Apr 2019 at 14:52, Derek Foreman
 wrote:
> I no longer have as much time to dedicate to this as I used to, so I
> think it would be best if someone else could take over managing the
> releases for Weston and Wayland.

Thanks for everything Derek! Really appreciate what you've done over
the past couple of cycles. :)

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

Stepping down as release manager

2019-04-05 Thread Derek Foreman
Hi everyone,

I no longer have as much time to dedicate to this as I used to, so I
think it would be best if someone else could take over managing the
releases for Weston and Wayland.

Thanks for the opportunity to help out,
Derek
___
wayland-devel mailing list
wayland-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/wayland-devel