On Tue,  4 Nov 2014 10:47:33 -0600
Derek Foreman <[email protected]> wrote:

> This breaks weston_output_mode_switch() into 3 functions:
> weston_output_mode_set_native()
> weston_output_mode_switch_to_temporary()
> weston_output_mode_switch_to_native()
> 
> Differences from previous behaviour:
> SET_NATIVE didn't set current_scale (now it does)
> SET_TEMPORARY could set mode and scale independently - now it can't.
> 
> Signed-off-by: Derek Foreman <[email protected]>
> ---
> In previous version weston_output_mode_switch_to_temporary didn't
> call weston_mode_switch_finish() correctly
> 
>  desktop-shell/shell.c               |  12 +--
>  fullscreen-shell/fullscreen-shell.c |  13 +--
>  src/compositor-rdp.c                |   2 +-
>  src/compositor.c                    | 185 
> ++++++++++++++++++++----------------
>  src/compositor.h                    |  17 ++--
>  5 files changed, 123 insertions(+), 106 deletions(-)

...

> @@ -211,25 +148,113 @@ weston_output_switch_mode(struct weston_output 
> *output, struct weston_mode *mode
>       pixman_region32_fini(&old_output_region);
>  
>       /* notify clients of the changes */
> -     if (notify_mode_changed || notify_scale_changed) {
> -             wl_resource_for_each(resource, &output->resource_list) {
> -                     if(notify_mode_changed) {
> -                             wl_output_send_mode(resource,
> -                                             mode->flags | 
> WL_OUTPUT_MODE_CURRENT,
> -                                             mode->width,
> -                                             mode->height,
> -                                             mode->refresh);
> -                     }
> +     wl_resource_for_each(resource, &output->resource_list) {
> +             if (mode_changed) {
> +                     wl_output_send_mode(resource,
> +                                         output->current_mode->flags,
> +                                         output->current_mode->width,
> +                                         output->current_mode->height,
> +                                         output->current_mode->refresh);
> +             }
> +
> +             if (scale_changed)
> +                     wl_output_send_scale(resource, output->current_scale);

This and the original code have a bug here. The 'scale' event was added
in interface version 2 according to wayland.xml, just like 'done', so
need to check the resource version before sending.

Would you like to send another patch fixing that?

> +
> +             if (wl_resource_get_version(resource) >= 2)
> +                        wl_output_send_done(resource);
> +     }
> +}
>  
> -                     if (notify_scale_changed)
> -                             wl_output_send_scale(resource, scale);
> +WL_EXPORT int
> +weston_output_mode_set_native(struct weston_output *output,
> +                           struct weston_mode *mode,
> +                           int32_t scale)
> +{
> +     int ret;
> +     int mode_changed = 0, scale_changed = 0;
>  
> -                     if (wl_resource_get_version(resource) >= 2)
> -                                wl_output_send_done(resource);

Looks good, pushed.


Thanks,
pq
_______________________________________________
wayland-devel mailing list
[email protected]
http://lists.freedesktop.org/mailman/listinfo/wayland-devel

Reply via email to