[PATCH xserver] xwayland: Update RR state on wl_output.done instead of wl_output.mode

Pekka Paalanen ppaalanen at gmail.com
Fri Jul 15 11:17:47 UTC 2016


On Wed, 13 Jul 2016 19:19:09 +0200
Rui Matos <tiagomatos at gmail.com> wrote:

> Otherwise if the geometry changes but the mode doesn't we end up with
> the previous geometry from RR's point of view.
> 
> Fixes https://bugzilla.gnome.org/show_bug.cgi?id=768710
> 
> Signed-off-by: Rui Matos <tiagomatos at gmail.com>
> ---
>  hw/xwayland/xwayland-output.c | 17 +++++++++--------
>  hw/xwayland/xwayland.h        |  2 +-
>  2 files changed, 10 insertions(+), 9 deletions(-)
> 
> diff --git a/hw/xwayland/xwayland-output.c b/hw/xwayland/xwayland-output.c
> index 4903062..b66da13 100644
> --- a/hw/xwayland/xwayland-output.c
> +++ b/hw/xwayland/xwayland-output.c
> @@ -98,7 +98,6 @@ output_handle_mode(void *data, struct wl_output *wl_output, uint32_t flags,
>                     int width, int height, int refresh)
>  {
>      struct xwl_output *xwl_output = data;
> -    RRModePtr randr_mode;
>  
>      if (!(flags & WL_OUTPUT_MODE_CURRENT))
>          return;
> @@ -111,13 +110,7 @@ output_handle_mode(void *data, struct wl_output *wl_output, uint32_t flags,
>          xwl_output->height = width;
>      }
>  
> -    randr_mode = xwayland_cvt(width, height, refresh / 1000.0, 0, 0);
> -
> -    RROutputSetModes(xwl_output->randr_output, &randr_mode, 1, 1);
> -
> -    RRCrtcNotify(xwl_output->randr_crtc, randr_mode,
> -                 xwl_output->x, xwl_output->y,
> -                 xwl_output->rotation, NULL, 1, &xwl_output->randr_output);
> +    xwl_output->refresh = refresh;
>  }
>  
>  static inline void
> @@ -198,6 +191,14 @@ output_handle_done(void *data, struct wl_output *wl_output)
>      struct xwl_output *it, *xwl_output = data;
>      struct xwl_screen *xwl_screen = xwl_output->xwl_screen;
>      int width = 0, height = 0, has_this_output = 0;
> +    RRModePtr randr_mode;
> +
> +    randr_mode = xwayland_cvt(xwl_output->width, xwl_output->height,
> +                              xwl_output->refresh / 1000.0, 0, 0);
> +    RROutputSetModes(xwl_output->randr_output, &randr_mode, 1, 1);
> +    RRCrtcNotify(xwl_output->randr_crtc, randr_mode,
> +                 xwl_output->x, xwl_output->y,
> +                 xwl_output->rotation, NULL, 1, &xwl_output->randr_output);
>  
>      xorg_list_for_each_entry(it, &xwl_screen->output_list, link) {
>          /* output done event is sent even when some property
> diff --git a/hw/xwayland/xwayland.h b/hw/xwayland/xwayland.h
> index aead0a8..d7c82bd 100644
> --- a/hw/xwayland/xwayland.h
> +++ b/hw/xwayland/xwayland.h
> @@ -148,7 +148,7 @@ struct xwl_output {
>      struct xwl_screen *xwl_screen;
>      RROutputPtr randr_output;
>      RRCrtcPtr randr_crtc;
> -    int32_t x, y, width, height;
> +    int32_t x, y, width, height, refresh;
>      Rotation rotation;
>  };

Hi,

wl_output interface version 1 does not have a 'done' event. Is that
case handled somehow?


Thanks,
pq
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 811 bytes
Desc: OpenPGP digital signature
URL: <https://lists.x.org/archives/xorg-devel/attachments/20160715/cb17676e/attachment.sig>


More information about the xorg-devel mailing list