On Wed, Oct 07, 2015 at 12:09:17PM +0100, Daniel Stone wrote:
> Hi Jonas,
> 
> On 7 October 2015 at 05:02, Jonas Ådahl <[email protected]> wrote:
> > When a new output is hot-plugged we need to not only update our internal
> > screen dimensions, but also the dix screen dimensions, screenInfo
> > dimensions and the root window dimensions.
> >
> > https://bugs.freedesktop.org/show_bug.cgi?id=92273
> >
> > Signed-off-by: Jonas Ådahl <[email protected]>
> > ---
> >  hw/xwayland/xwayland-output.c | 15 ++++++++++++++-
> >  1 file changed, 14 insertions(+), 1 deletion(-)
> >
> > diff --git a/hw/xwayland/xwayland-output.c b/hw/xwayland/xwayland-output.c
> > index 923f368..a8c2f2e 100644
> > --- a/hw/xwayland/xwayland-output.c
> > +++ b/hw/xwayland/xwayland-output.c
> > @@ -156,9 +156,22 @@ output_handle_done(void *data, struct wl_output 
> > *wl_output)
> >         --xwl_screen->expecting_event;
> >      }
> >
> > +    if (xwl_screen->screen->root)
> > +        SetRootClip(xwl_screen->screen, FALSE);
> > +
> >      xwl_screen->width = width;
> >      xwl_screen->height = height;
> > -    RRScreenSizeNotify(xwl_screen->screen);
> > +    xwl_screen->screen->width = width;
> > +    xwl_screen->screen->height = height;
> > +
> > +    if (xwl_screen->screen->root) {
> > +        xwl_screen->screen->root->drawable.width = width;
> > +        xwl_screen->screen->root->drawable.height = height;
> > +        SetRootClip(xwl_screen->screen, TRUE);
> > +        RRScreenSizeNotify(xwl_screen->screen);
> > +    }
> > +
> > +    update_desktop_dimensions();
> >  }
> >
> >  static void
> 
> Thanks, looks good to me. I had a half-complete version of the same,
> but just forgot to update the root-clip, hence why it didn't work.

It is thanks to Olivier that the SetRootClip calls is there. It was quite
hard to spot that it was necessary.

> One
> thing I did notice from the earlier iteration though, is that for me,
> I was seeing this being called when xwl_screen->screen is NULL, thus a
> segfault on startup. Are you not seeing the same?

I got a segfault if I didn't NULL check the root window of the screen,
because the root window is initialized later than the outputs are in
dix_main().

But since we get the Wayland registry and discover the outputs after we
set xwl_screen->screen ScreenPtr in xwl_screen_init(), we can be sure its
always non-NULL.

> 
> Assuming this is tested and working, then for the series:
> Reviewed-by: Daniel Stone <[email protected]>

Thanks,


Jonas

> 
> Cheers,
> Daniel
_______________________________________________
[email protected]: X.Org development
Archives: http://lists.x.org/archives/xorg-devel
Info: http://lists.x.org/mailman/listinfo/xorg-devel

Reply via email to