Re: Window scaling (aka owner sizes)

2018-08-30 Thread Keith Packard
Olivier Fourdan  writes:

> How do you plan to deal with this in your approach?

Well, that's why I'm trying to get some help here...

What we're trying to do here is replace some really ugly hacks that
Valve has made outside of the server to get applications that depend on
changing the video mode to make the application look reasonable. As
changing video modes isn't a good idea in 2018, Valve has written a
compositing manager which scales applications for output (which only
works for scaling up), and then does pretty ugly things to get mouse
input 'mostly working' -- grabbing the mouse and generating synthetic
events for the application. Yikes! Oh, and it captures attempts to set
video modes.

The proposed hacks are already *way* better than that and make these
applications work much better. There's still more to do, and I'll be
working on those bits too (like redirecting video mode settings
somehow).

The root window size shouldn't be all that interesting to applications;
they really need to know the monitor sizes and positions, and that
information is available via RandR and Xinerama. So, I'm not all that
concerned about root window size; applications relying on that are
already broken.

Ok, so to make this 'actually' work, I might have to scale not only the
window size, but the window position as well -- and then I might
actually have to scale *all* of the window sizes and positions for the
specified application.

Or, maybe we create a synthetic monitor and then pretend to applications
that their windows appear there instead.

> PS: When considering this for Xwayland, I ended up thinking that it
> would be actually easier to have different X11 screens (i.e. :0.0,
> :0.1, etc.) of different size for different scales for the X11 clients
> ended up being scaled differently (which led me to
> https://gitlab.freedesktop.org/ofourdan/xserver/tree/xwayland-multi-screen),
> but that approach introduces a lot of complexity (the CM has to play
> the proxy between all those X11 screens for things like copy/paste,
> DnD, etc.)

Yeah, X screens are probably not what you want. An X monitor might be
reasonable; those are visible in RandR and Xinerama, but leave
applications on the same screen.

I didn't want to change the owner position of the windows, but I now
wonder if that might not turn out ok?

-- 
-keith


signature.asc
Description: PGP signature
___
xorg-devel@lists.x.org: X.Org development
Archives: http://lists.x.org/archives/xorg-devel
Info: https://lists.x.org/mailman/listinfo/xorg-devel

Re: [PATCH xserver] hw/xwin: Fix 'make distcheck'

2018-08-30 Thread Peter Hutterer
On Mon, Aug 27, 2018 at 12:41:22PM +0100, Jon Turney wrote:
> Add internal.h to SOURCES, omitted from 126c1cfa
> 
> Signed-off-by: Jon Turney 

   cd285922c..a9a5bd002  master -> master

Cheers,
   Peter

> ---
>  hw/xwin/winclipboard/Makefile.am | 1 +
>  1 file changed, 1 insertion(+)
> 
> diff --git a/hw/xwin/winclipboard/Makefile.am 
> b/hw/xwin/winclipboard/Makefile.am
> index a1079aec6..bfd302413 100644
> --- a/hw/xwin/winclipboard/Makefile.am
> +++ b/hw/xwin/winclipboard/Makefile.am
> @@ -1,6 +1,7 @@
>  noinst_LTLIBRARIES = libXWinclipboard.la
>  
>  libXWinclipboard_la_SOURCES = \
> + internal.h \
>   winclipboard.h \
>   textconv.c \
>   thread.c \
> -- 
> 2.17.0
> 
> ___
> xorg-devel@lists.x.org: X.Org development
> Archives: http://lists.x.org/archives/xorg-devel
> Info: https://lists.x.org/mailman/listinfo/xorg-devel
> 
___
xorg-devel@lists.x.org: X.Org development
Archives: http://lists.x.org/archives/xorg-devel
Info: https://lists.x.org/mailman/listinfo/xorg-devel

Re: Xorg-1.20.1 crashes when using glamor on top of llvmpipe

2018-08-30 Thread Ray Strode
hi,

what version of mesa?

might be


https://cgit.freedesktop.org/mesa/mesa/commit/?id=9baff597ce021f7691187b0d1d1bbc16d07b13e1

Ray

On Thu, Aug 30, 2018, 5:00 PM Hans de Goede  wrote:

> Hi,
>
> On 30-08-18 22:48, Hans de Goede wrote:
> > HI all,
> >
> > I've been debugging some strange crashes with Xorg-1.20.1 inside
> > a virtualbox guest and I can use some help with this.
> >
> > At first Xorg completely failed to start, running it under
> > gdbserver showed a backtrace pointing to a lazy symbol lookup
> > failure triggered by:
> >
> > drmmode_display.c:905:
> >  return gbm_bo_get_stride(bo->gbm);
> >
> > Which is part of:
> >
> >
> > uint32_t
> > drmmode_bo_get_pitch(drmmode_bo *bo)
> > {
> > #ifdef GLAMOR_HAS_GBM
> >  if (bo->gbm)
> >  return gbm_bo_get_stride(bo->gbm);
> > #endif
> >
> >  return bo->dumb->pitch;
> > }
> >
> > Strange enough a LD_PRELOAD of libgbm does not
> > fix this and libgbm already gets dragged in by
> > libglamor_egl.so so this should not be a problem.
> >
> > Still I tried this change:
> >
> > --- a/hw/xfree86/drivers/modesetting/Makefile.am
> > +++ b/hw/xfree86/drivers/modesetting/Makefile.am
> > @@ -39,7 +39,7 @@ AM_CPPFLAGS = \
> >
> >   modesetting_drv_la_LTLIBRARIES = modesetting_drv.la
> >   modesetting_drv_la_LDFLAGS = -module -avoid-version
> > -modesetting_drv_la_LIBADD = $(UDEV_LIBS) $(DRM_LIBS)
> > +modesetting_drv_la_LIBADD = $(UDEV_LIBS) $(DRM_LIBS) $(GBM_LIBS)
> >   modesetting_drv_ladir = @moduledir@/drivers
> >
> >   modesetting_drv_la_SOURCES = \
> >
> > And now Xorg will start, still very weird since the
> > exact same Xorg binaries work fine on Intel integrated
> > gfx where the gbm_bo_get_stride() call also happens ...
> >
> >
> > So with this "fix" it starts, but it crashes as soon as I resize the
> > vm-window and thus the screen gets resized:
> >
> > bt
> > #0  OsSigHandler (signo=11, sip=0x7ffc160ad2f0, unused=0x7ffc160ad1c0)
> >  at osinit.c:114
> > #1  
> > #2  miModifyPixmapHeader (pPixmap=0x28c4460, width=1920, height=992,
> depth=-1,
> >  bitsPerPixel=-1, devKind=7680, pPixData=0x0) at miscrinit.c:64
> > #3  0x7fdc13d64471 in drmmode_xf86crtc_resize (scrn=0x21751f0,
> width=1920,
> >  height=992) at drmmode_display.c:3166
> > #4  0x004bb9d8 in xf86RandR12ScreenSetSize (pScreen=0x23dc9b0,
> >  width=1920, height=992, mmWidth=508, mmHeight=262) at
> xf86RandR12.c:698
> > #5  0x005092f0 in ProcRRSetScreenSize (client=0x29c6af0)
> >  at rrscreen.c:289
> > #6  0x0043fcee in Dispatch () at dispatch.c:478
> >
> > And miscrinit.c:64 is hte "{" of:
> >
> > Bool
> > miModifyPixmapHeader(PixmapPtr pPixmap, int width, int height, int depth,
> >   int bitsPerPixel, int devKind, void *pPixData)
> > {
> >  if (!pPixmap)
> >  return FALSE;
> >
> > Which is a strange place to crash. Even more weird after adding a
> > breakpoint a bit before drmmode_display.c:3166, I get a segfault
> > while stepping through earlier lines, pointing at SmartScheduleTimer()
> > and specifically again at the opening "{" as if something is wrong with
> > the stack and the stack cannot handle function calls being stacked one
> > level deeper.
> >
> > This makes me wonder if this is a stack depth/overflow issue, does the
> > xserver have code somewhere to limit its stacksize and could we be
> > hitting that ?
> >
> > Or maybe a bad interaction with gcc-s stack protection?
> >
> > This feels as if we are hitting a guard page at the end of the stack
> > here?
>
> One important thing which I only put in the subject, this happens
> when using glmamor with llvmpipe, something which is new in 1.20,
> older xservers never used glamor on llvmpipe. Things work fine
> if I disable glamor in a xorg.conf snippet.
>
> Arguably we should disable glamor when running on llvmpipe because
> of performance reasons, still these crashes should not happen.
>
> Regards,
>
> Hans
>
> ___
> xorg-devel@lists.x.org: X.Org development
> Archives: http://lists.x.org/archives/xorg-devel
> Info: https://lists.x.org/mailman/listinfo/xorg-devel
___
xorg-devel@lists.x.org: X.Org development
Archives: http://lists.x.org/archives/xorg-devel
Info: https://lists.x.org/mailman/listinfo/xorg-devel

Re: Xorg-1.20.1 crashes when using glamor on top of llvmpipe

2018-08-30 Thread Hans de Goede

Hi,

On 30-08-18 22:48, Hans de Goede wrote:

HI all,

I've been debugging some strange crashes with Xorg-1.20.1 inside
a virtualbox guest and I can use some help with this.

At first Xorg completely failed to start, running it under
gdbserver showed a backtrace pointing to a lazy symbol lookup
failure triggered by:

drmmode_display.c:905:
     return gbm_bo_get_stride(bo->gbm);

Which is part of:


uint32_t
drmmode_bo_get_pitch(drmmode_bo *bo)
{
#ifdef GLAMOR_HAS_GBM
     if (bo->gbm)
     return gbm_bo_get_stride(bo->gbm);
#endif

     return bo->dumb->pitch;
}

Strange enough a LD_PRELOAD of libgbm does not
fix this and libgbm already gets dragged in by
libglamor_egl.so so this should not be a problem.

Still I tried this change:

--- a/hw/xfree86/drivers/modesetting/Makefile.am
+++ b/hw/xfree86/drivers/modesetting/Makefile.am
@@ -39,7 +39,7 @@ AM_CPPFLAGS = \

  modesetting_drv_la_LTLIBRARIES = modesetting_drv.la
  modesetting_drv_la_LDFLAGS = -module -avoid-version
-modesetting_drv_la_LIBADD = $(UDEV_LIBS) $(DRM_LIBS)
+modesetting_drv_la_LIBADD = $(UDEV_LIBS) $(DRM_LIBS) $(GBM_LIBS)
  modesetting_drv_ladir = @moduledir@/drivers

  modesetting_drv_la_SOURCES = \

And now Xorg will start, still very weird since the
exact same Xorg binaries work fine on Intel integrated
gfx where the gbm_bo_get_stride() call also happens ...


So with this "fix" it starts, but it crashes as soon as I resize the
vm-window and thus the screen gets resized:

bt
#0  OsSigHandler (signo=11, sip=0x7ffc160ad2f0, unused=0x7ffc160ad1c0)
     at osinit.c:114
#1  
#2  miModifyPixmapHeader (pPixmap=0x28c4460, width=1920, height=992, depth=-1,
     bitsPerPixel=-1, devKind=7680, pPixData=0x0) at miscrinit.c:64
#3  0x7fdc13d64471 in drmmode_xf86crtc_resize (scrn=0x21751f0, width=1920,
     height=992) at drmmode_display.c:3166
#4  0x004bb9d8 in xf86RandR12ScreenSetSize (pScreen=0x23dc9b0,
     width=1920, height=992, mmWidth=508, mmHeight=262) at xf86RandR12.c:698
#5  0x005092f0 in ProcRRSetScreenSize (client=0x29c6af0)
     at rrscreen.c:289
#6  0x0043fcee in Dispatch () at dispatch.c:478

And miscrinit.c:64 is hte "{" of:

Bool
miModifyPixmapHeader(PixmapPtr pPixmap, int width, int height, int depth,
  int bitsPerPixel, int devKind, void *pPixData)
{
     if (!pPixmap)
     return FALSE;

Which is a strange place to crash. Even more weird after adding a
breakpoint a bit before drmmode_display.c:3166, I get a segfault
while stepping through earlier lines, pointing at SmartScheduleTimer()
and specifically again at the opening "{" as if something is wrong with
the stack and the stack cannot handle function calls being stacked one
level deeper.

This makes me wonder if this is a stack depth/overflow issue, does the
xserver have code somewhere to limit its stacksize and could we be
hitting that ?

Or maybe a bad interaction with gcc-s stack protection?

This feels as if we are hitting a guard page at the end of the stack
here?


One important thing which I only put in the subject, this happens
when using glmamor with llvmpipe, something which is new in 1.20,
older xservers never used glamor on llvmpipe. Things work fine
if I disable glamor in a xorg.conf snippet.

Arguably we should disable glamor when running on llvmpipe because
of performance reasons, still these crashes should not happen.

Regards,

Hans

___
xorg-devel@lists.x.org: X.Org development
Archives: http://lists.x.org/archives/xorg-devel
Info: https://lists.x.org/mailman/listinfo/xorg-devel

Xorg-1.20.1 crashes when using glamor on top of llvmpipe

2018-08-30 Thread Hans de Goede

HI all,

I've been debugging some strange crashes with Xorg-1.20.1 inside
a virtualbox guest and I can use some help with this.

At first Xorg completely failed to start, running it under
gdbserver showed a backtrace pointing to a lazy symbol lookup
failure triggered by:

drmmode_display.c:905:
return gbm_bo_get_stride(bo->gbm);

Which is part of:


uint32_t
drmmode_bo_get_pitch(drmmode_bo *bo)
{
#ifdef GLAMOR_HAS_GBM
if (bo->gbm)
return gbm_bo_get_stride(bo->gbm);
#endif

return bo->dumb->pitch;
}

Strange enough a LD_PRELOAD of libgbm does not
fix this and libgbm already gets dragged in by
libglamor_egl.so so this should not be a problem.

Still I tried this change:

--- a/hw/xfree86/drivers/modesetting/Makefile.am
+++ b/hw/xfree86/drivers/modesetting/Makefile.am
@@ -39,7 +39,7 @@ AM_CPPFLAGS = \

 modesetting_drv_la_LTLIBRARIES = modesetting_drv.la
 modesetting_drv_la_LDFLAGS = -module -avoid-version
-modesetting_drv_la_LIBADD = $(UDEV_LIBS) $(DRM_LIBS)
+modesetting_drv_la_LIBADD = $(UDEV_LIBS) $(DRM_LIBS) $(GBM_LIBS)
 modesetting_drv_ladir = @moduledir@/drivers

 modesetting_drv_la_SOURCES = \

And now Xorg will start, still very weird since the
exact same Xorg binaries work fine on Intel integrated
gfx where the gbm_bo_get_stride() call also happens ...


So with this "fix" it starts, but it crashes as soon as I resize the
vm-window and thus the screen gets resized:

bt
#0  OsSigHandler (signo=11, sip=0x7ffc160ad2f0, unused=0x7ffc160ad1c0)
at osinit.c:114
#1  
#2  miModifyPixmapHeader (pPixmap=0x28c4460, width=1920, height=992, depth=-1,
bitsPerPixel=-1, devKind=7680, pPixData=0x0) at miscrinit.c:64
#3  0x7fdc13d64471 in drmmode_xf86crtc_resize (scrn=0x21751f0, width=1920,
height=992) at drmmode_display.c:3166
#4  0x004bb9d8 in xf86RandR12ScreenSetSize (pScreen=0x23dc9b0,
width=1920, height=992, mmWidth=508, mmHeight=262) at xf86RandR12.c:698
#5  0x005092f0 in ProcRRSetScreenSize (client=0x29c6af0)
at rrscreen.c:289
#6  0x0043fcee in Dispatch () at dispatch.c:478

And miscrinit.c:64 is hte "{" of:

Bool
miModifyPixmapHeader(PixmapPtr pPixmap, int width, int height, int depth,
 int bitsPerPixel, int devKind, void *pPixData)
{
if (!pPixmap)
return FALSE;

Which is a strange place to crash. Even more weird after adding a
breakpoint a bit before drmmode_display.c:3166, I get a segfault
while stepping through earlier lines, pointing at SmartScheduleTimer()
and specifically again at the opening "{" as if something is wrong with
the stack and the stack cannot handle function calls being stacked one
level deeper.

This makes me wonder if this is a stack depth/overflow issue, does the
xserver have code somewhere to limit its stacksize and could we be
hitting that ?

Or maybe a bad interaction with gcc-s stack protection?

This feels as if we are hitting a guard page at the end of the stack
here?

Regards,

Hans

___
xorg-devel@lists.x.org: X.Org development
Archives: http://lists.x.org/archives/xorg-devel
Info: https://lists.x.org/mailman/listinfo/xorg-devel

Re: Window scaling (aka owner sizes)

2018-08-30 Thread Olivier Fourdan
Hi Keith,

On Mon, Aug 27, 2018 at 8:24 AM Keith Packard  wrote:
>
>
> I'm doing a bit of work to help support applications that want to run at
> a small fixed size. The 'usual' way to make them visible on our modern
> desktops is to flip video modes, but that means everything runs at low
> resolution, plus you get the adventure of switching modes, which can
> take a long time in complex monitor environments.
>
> https://keithp.com/blogs/window-scaling/
>
> The basic plan is to make the size-as-seen-by-the-owner different from
> the size seen by the rest of the system, and then to either have the
> server scale the output or get the compositing manager to do it.
>
> This solves one of the main use cases for 'composite redirection' that I
> talked about a long time ago and could never get to work. Restricting
> the problem space to simple application scaling, instead of arbitrary
> transformation, meant that I could place the input event scaling right
> inside the X server, allowing it to be synchronous, instead of
> attempting to have some external agent perform the transformation.
>
> When there's no compositing manager running, the window is placed into
> automatic compositing mode and the X server performs the necessary
> output scaling.
>
> When there is a compositing manager running, I've thought of three
> possible ways to make it work:
>
>  1. The compositing manager can be extended to handle the scaling
> operation. This seems like the best plan; just a single copy from
> the native application size to the scanout buffer.
>
>  2. Alternatively, another window might be interposed between the scaled
> client and the compositor to provide a place for the X server to do
> the scaling; although that would naturally introduce a bunch more
> expense and delay in the process.
>
>  3. It would also be possible to have the X server provide a scaled
> version of the window pixmap to the compositing manager until it
> advertised support for built-in scaling. Same rendering delay as
> with an interposed window, but no changes required in the
> environment, although a bit of work to be done in the X server. That
> might be a good transition plan so that things didn't break when you
> started a compositing manager without the required support.
>
> I'm wondering if there are others who would find this useful, and if
> some of them might help get this into reasonable shape. Suggestions are
> welcome!

Much interesting indeed :)

We've been considering something similar for Xwayland, scaling the
window is relatively easy, but one possible issue with scaling the
client window is the perception of the screen size from the client
itself.

Imagine the client is trying to size its window to match the screen or
even output size, or tries to center its window on the current
monitor. It does so based on the root window size or possibly the
Xrandr information or even Xinerama, but since its window will be
scaled afterwards, that computed size or position will end up being
wrong.

So that means that the screen size and xrandr info sent to the client
depends on the client's window being scaled or not, eventually.
Basically, the Xserver needs to lie to the client so that the client
computes its window size/position right when mapped on screen.

But things like DisplayWidth()/DisplayHeight() are defined as C macros
in Xlib, to access the fields of the Screen sent when opening the
connection with the Xserver, not something we can fix easily.

Moreover, several properties from EWMH on the root window reflect the
screen size (things like _NET_DESKTOP_GEOMETRY, _NET_WORKAREA) and are
necessarily shared between all X11 clients (who share the same root
window).

How do you plan to deal with this in your approach?

Cheers,
Olivier

PS: When considering this for Xwayland, I ended up thinking that it
would be actually easier to have different X11 screens (i.e. :0.0,
:0.1, etc.) of different size for different scales for the X11 clients
ended up being scaled differently (which led me to
https://gitlab.freedesktop.org/ofourdan/xserver/tree/xwayland-multi-screen),
but that approach introduces a lot of complexity (the CM has to play
the proxy between all those X11 screens for things like copy/paste,
DnD, etc.)
___
xorg-devel@lists.x.org: X.Org development
Archives: http://lists.x.org/archives/xorg-devel
Info: https://lists.x.org/mailman/listinfo/xorg-devel

Re: [Pixman] [BUG] SIGSEGV in sse2_fill

2018-08-30 Thread Michel Dänzer
On 2018-08-29 9:14 p.m., Adam Jackson wrote:
> continued from pixman@, original thread here:
> 
> https://lists.freedesktop.org/archives/pixman/2018-August/004759.html

Frédéric, can you attach the full corresponding Xorg log file?


-- 
Earthling Michel Dänzer   |   http://www.amd.com
Libre software enthusiast | Mesa and X developer
___
xorg-devel@lists.x.org: X.Org development
Archives: http://lists.x.org/archives/xorg-devel
Info: https://lists.x.org/mailman/listinfo/xorg-devel

Re: [PATCH xserver] xwayland: use wayland axis_discrete event

2018-08-30 Thread Peter Hutterer
On Wed, Aug 15, 2018 at 08:54:25PM +1200, Scott Anderson wrote:
> On 6/08/18 6:09 PM, Scott Anderson wrote:
> > This prevents multiple scroll events happening for wayland compositors
> > which send axis values other than 10. For example, libinput will
> > typically return 15 for each scroll wheel step, and if a wayland
> > compositor sends those to xwayland without normalising them, 2 scroll
> > wheel steps will end up as 3 xorg scroll events. By listening for the
> > discrete_axis event, this will now correctly send only 2 xorg scroll
> > events.
> > 
> > The wayland protocol gurantees that there will always be an axis event
> > following an axis_discrete event. However, it does not gurantee that
> > other events (including other axis_discrete+axis pairs) will not happen
> > in between them. So we must keep a list of outstanding axis_discrete
> > events.
> > 
> > Signed-off-by: Scott Anderson 
> > ---
> >   hw/xwayland/xwayland-input.c | 41 +++-
> >   hw/xwayland/xwayland.h   |  1 +
> >   2 files changed, 41 insertions(+), 1 deletion(-)
> > 
> > diff --git a/hw/xwayland/xwayland-input.c b/hw/xwayland/xwayland-input.c
> > index a602f0887..6fd3c416b 100644
> > --- a/hw/xwayland/xwayland-input.c
> > +++ b/hw/xwayland/xwayland-input.c
> > @@ -37,6 +37,12 @@
> >   #include 
> >   #include "tablet-unstable-v2-client-protocol.h"
> > +struct axis_discrete_pending {
> > +struct xorg_list l;
> > +uint32_t axis;
> > +int32_t discrete;
> > +};
> > +
> >   struct sync_pending {
> >   struct xorg_list l;
> >   DeviceIntPtr pending_dev;
> > @@ -565,6 +571,8 @@ pointer_handle_axis(void *data, struct wl_pointer 
> > *pointer,
> >   int index;
> >   const int divisor = 10;
> >   ValuatorMask mask;
> > +struct axis_discrete_pending *pending = NULL;
> > +struct axis_discrete_pending *iter;
> >   switch (axis) {
> >   case WL_POINTER_AXIS_VERTICAL_SCROLL:
> > @@ -577,8 +585,22 @@ pointer_handle_axis(void *data, struct wl_pointer 
> > *pointer,
> >   return;
> >   }
> > +xorg_list_for_each_entry(iter, _seat->axis_discrete_pending, l) {
> > +if (iter->axis == axis) {
> > +pending = iter;
> > +break;
> > +}
> > +}
> > +
> >   valuator_mask_zero();
> > -valuator_mask_set_double(, index, wl_fixed_to_double(value) / 
> > divisor);
> > +
> > +if (pending) {
> > +valuator_mask_set(, index, pending->discrete);
> > +xorg_list_del(>l);
> > +free(pending);
> > +} else {
> > +valuator_mask_set_double(, index, wl_fixed_to_double(value) / 
> > divisor);
> > +}
> >   QueuePointerEvents(xwl_seat->pointer, MotionNotify, 0, 
> > POINTER_RELATIVE, );
> >   }
> > @@ -608,6 +630,16 @@ static void
> >   pointer_handle_axis_discrete(void *data, struct wl_pointer *wl_pointer,
> >uint32_t axis, int32_t discrete)
> >   {
> > +struct xwl_seat *xwl_seat = data;
> > +
> > +struct axis_discrete_pending *pending = malloc(sizeof *pending);
> > +if (!pending)
> > +return;
> > +
> > +pending->axis = axis;
> > +pending->discrete = discrete;
> > +
> > +xorg_list_add(>l, _seat->axis_discrete_pending);
> >   }
> >   static const struct wl_pointer_listener pointer_listener = {
> > @@ -1337,6 +1369,7 @@ create_input_device(struct xwl_screen *xwl_screen, 
> > uint32_t id, uint32_t version
> >   wl_array_init(_seat->keys);
> >   xorg_list_init(_seat->touches);
> > +xorg_list_init(_seat->axis_discrete_pending);
> >   xorg_list_init(_seat->sync_pending);
> >   }
> > @@ -1345,6 +1378,7 @@ xwl_seat_destroy(struct xwl_seat *xwl_seat)
> >   {
> >   struct xwl_touch *xwl_touch, *next_xwl_touch;
> >   struct sync_pending *p, *npd;
> > +struct axis_discrete_pending *ad, *ad_next;
> >   xorg_list_for_each_entry_safe(xwl_touch, next_xwl_touch,
> > _seat->touches, link_touch) {
> > @@ -1357,6 +1391,11 @@ xwl_seat_destroy(struct xwl_seat *xwl_seat)
> >   free (p);
> >   }
> > +xorg_list_for_each_entry_safe(ad, ad_next, 
> > _seat->axis_discrete_pending, l) {
> > +xorg_list_del(>l);
> > +free(ad);
> > +}
> > +
> >   release_tablet_manager_seat(xwl_seat);
> >   release_grab(xwl_seat);
> > diff --git a/hw/xwayland/xwayland.h b/hw/xwayland/xwayland.h
> > index d70ad54bf..1a6e2f380 100644
> > --- a/hw/xwayland/xwayland.h
> > +++ b/hw/xwayland/xwayland.h
> > @@ -272,6 +272,7 @@ struct xwl_seat {
> >   char *keymap;
> >   struct wl_surface *keyboard_focus;
> > +struct xorg_list axis_discrete_pending;
> >   struct xorg_list sync_pending;
> >   struct xwl_pointer_warp_emulator *pointer_warp_emulator;
> > 
> 
> Ping.

sorry, this is pushed now.

   f79e53685..cd285922c  master -> master

Cheers,
   Peter

___
xorg-devel@lists.x.org: X.Org development