[weston] libweston-desktop: fix the size of unmaximized xdg surfaces

Submitted by Giulio Camuffo on July 27, 2017, 1:01 p.m.

Details

Message ID 20170727130140.20100-1-giuliocamuffo@gmail.com
State New
Headers show
Series "libweston-desktop: fix the size of unmaximized xdg surfaces" ( rev: 1 ) in Wayland

Not browsing as part of any series.

Commit Message

Giulio Camuffo July 27, 2017, 1:01 p.m.
When unmaximizing a surface the configure event should send 0,0 as the
requested size, so that the client can use the size that it had before
maximizing
---
 libweston-desktop/xdg-shell-v6.c | 31 ++++++++++++++++++-------------
 1 file changed, 18 insertions(+), 13 deletions(-)

Patch hide | download patch | download mbox

diff --git a/libweston-desktop/xdg-shell-v6.c b/libweston-desktop/xdg-shell-v6.c
index 1344dda0..3a02815f 100644
--- a/libweston-desktop/xdg-shell-v6.c
+++ b/libweston-desktop/xdg-shell-v6.c
@@ -578,11 +578,29 @@  weston_desktop_xdg_toplevel_send_configure(struct weston_desktop_xdg_toplevel *t
 };
 
 static void
+weston_desktop_xdg_toplevel_set_size(struct weston_desktop_surface *dsurface,
+				     void *user_data,
+				     int32_t width, int32_t height)
+{
+	struct weston_desktop_xdg_toplevel *toplevel = user_data;
+
+	toplevel->pending.size.width = width;
+	toplevel->pending.size.height = height;
+
+	weston_desktop_xdg_surface_schedule_configure(&toplevel->base, false);
+}
+
+static void
 weston_desktop_xdg_toplevel_set_maximized(struct weston_desktop_surface *dsurface,
 					  void *user_data, bool maximized)
 {
 	struct weston_desktop_xdg_toplevel *toplevel = user_data;
 
+	/* if we're unmaximizing set the size to 0 so that when the configure event is sent
+	   it will tell the client to use the size it wants */
+	if (toplevel->pending.state.maximized && !maximized)
+		weston_desktop_xdg_toplevel_set_size(dsurface, toplevel, 0, 0);
+
 	toplevel->pending.state.maximized = maximized;
 	weston_desktop_xdg_surface_schedule_configure(&toplevel->base, false);
 }
@@ -618,19 +636,6 @@  weston_desktop_xdg_toplevel_set_activated(struct weston_desktop_surface *dsurfac
 }
 
 static void
-weston_desktop_xdg_toplevel_set_size(struct weston_desktop_surface *dsurface,
-				     void *user_data,
-				     int32_t width, int32_t height)
-{
-	struct weston_desktop_xdg_toplevel *toplevel = user_data;
-
-	toplevel->pending.size.width = width;
-	toplevel->pending.size.height = height;
-
-	weston_desktop_xdg_surface_schedule_configure(&toplevel->base, false);
-}
-
-static void
 weston_desktop_xdg_toplevel_committed(struct weston_desktop_xdg_toplevel *toplevel,
 				      int32_t sx, int32_t sy)
 {

Comments

On 7/27/17 3:01 PM, Giulio Camuffo wrote:
> When unmaximizing a surface the configure event should send 0,0 as the
> requested size, so that the client can use the size that it had before
> maximizing

Hi,

I disagree on this patch for a few reasons:
- the size can be ignored in this case, so there is no harm in keeping 
it non-0
- it’s up to the shell/compositor to decide, not a protocol library
- I am working on a not-so-tiny rewrite of the state code, based on the 
size_requested patch, that will make it clear that the shell/compositor 
is in charge here

What do you think?

Cheers,


> ---
>   libweston-desktop/xdg-shell-v6.c | 31 ++++++++++++++++++-------------
>   1 file changed, 18 insertions(+), 13 deletions(-)
> 
> diff --git a/libweston-desktop/xdg-shell-v6.c b/libweston-desktop/xdg-shell-v6.c
> index 1344dda0..3a02815f 100644
> --- a/libweston-desktop/xdg-shell-v6.c
> +++ b/libweston-desktop/xdg-shell-v6.c
> @@ -578,11 +578,29 @@ weston_desktop_xdg_toplevel_send_configure(struct weston_desktop_xdg_toplevel *t
>   };
>   
>   static void
> +weston_desktop_xdg_toplevel_set_size(struct weston_desktop_surface *dsurface,
> +				     void *user_data,
> +				     int32_t width, int32_t height)
> +{
> +	struct weston_desktop_xdg_toplevel *toplevel = user_data;
> +
> +	toplevel->pending.size.width = width;
> +	toplevel->pending.size.height = height;
> +
> +	weston_desktop_xdg_surface_schedule_configure(&toplevel->base, false);
> +}
> +
> +static void
>   weston_desktop_xdg_toplevel_set_maximized(struct weston_desktop_surface *dsurface,
>   					  void *user_data, bool maximized)
>   {
>   	struct weston_desktop_xdg_toplevel *toplevel = user_data;
>   
> +	/* if we're unmaximizing set the size to 0 so that when the configure event is sent
> +	   it will tell the client to use the size it wants */
> +	if (toplevel->pending.state.maximized && !maximized)
> +		weston_desktop_xdg_toplevel_set_size(dsurface, toplevel, 0, 0);
> +
>   	toplevel->pending.state.maximized = maximized;
>   	weston_desktop_xdg_surface_schedule_configure(&toplevel->base, false);
>   }
> @@ -618,19 +636,6 @@ weston_desktop_xdg_toplevel_set_activated(struct weston_desktop_surface *dsurfac
>   }
>   
>   static void
> -weston_desktop_xdg_toplevel_set_size(struct weston_desktop_surface *dsurface,
> -				     void *user_data,
> -				     int32_t width, int32_t height)
> -{
> -	struct weston_desktop_xdg_toplevel *toplevel = user_data;
> -
> -	toplevel->pending.size.width = width;
> -	toplevel->pending.size.height = height;
> -
> -	weston_desktop_xdg_surface_schedule_configure(&toplevel->base, false);
> -}
> -
> -static void
>   weston_desktop_xdg_toplevel_committed(struct weston_desktop_xdg_toplevel *toplevel,
>   				      int32_t sx, int32_t sy)
>   {
>
2017-07-27 15:22 GMT+02:00 Quentin Glidic <sardemff7+wayland@sardemff7.net>:
> On 7/27/17 3:01 PM, Giulio Camuffo wrote:
>>
>> When unmaximizing a surface the configure event should send 0,0 as the
>> requested size, so that the client can use the size that it had before
>> maximizing
>
>
> Hi,
>
> I disagree on this patch for a few reasons:
> - the size can be ignored in this case, so there is no harm in keeping it
> non-0

I don't really agree, if the compositor requests a size the client
should try to respect it if it can, and in this case they can.

> - it’s up to the shell/compositor to decide, not a protocol library

This is a fair point... the compositor should be able to decide to ask
for some size, but the default should be to let the client go back to
the size it wants to, imho.

> - I am working on a not-so-tiny rewrite of the state code, based on the
> size_requested patch, that will make it clear that the shell/compositor is
> in charge here

Fair enough.


Cheers,
Giulio

>
> What do you think?
>
> Cheers,
>
>
>
>> ---
>>   libweston-desktop/xdg-shell-v6.c | 31 ++++++++++++++++++-------------
>>   1 file changed, 18 insertions(+), 13 deletions(-)
>>
>> diff --git a/libweston-desktop/xdg-shell-v6.c
>> b/libweston-desktop/xdg-shell-v6.c
>> index 1344dda0..3a02815f 100644
>> --- a/libweston-desktop/xdg-shell-v6.c
>> +++ b/libweston-desktop/xdg-shell-v6.c
>> @@ -578,11 +578,29 @@ weston_desktop_xdg_toplevel_send_configure(struct
>> weston_desktop_xdg_toplevel *t
>>   };
>>     static void
>> +weston_desktop_xdg_toplevel_set_size(struct weston_desktop_surface
>> *dsurface,
>> +                                    void *user_data,
>> +                                    int32_t width, int32_t height)
>> +{
>> +       struct weston_desktop_xdg_toplevel *toplevel = user_data;
>> +
>> +       toplevel->pending.size.width = width;
>> +       toplevel->pending.size.height = height;
>> +
>> +       weston_desktop_xdg_surface_schedule_configure(&toplevel->base,
>> false);
>> +}
>> +
>> +static void
>>   weston_desktop_xdg_toplevel_set_maximized(struct weston_desktop_surface
>> *dsurface,
>>                                           void *user_data, bool maximized)
>>   {
>>         struct weston_desktop_xdg_toplevel *toplevel = user_data;
>>   +     /* if we're unmaximizing set the size to 0 so that when the
>> configure event is sent
>> +          it will tell the client to use the size it wants */
>> +       if (toplevel->pending.state.maximized && !maximized)
>> +               weston_desktop_xdg_toplevel_set_size(dsurface, toplevel,
>> 0, 0);
>> +
>>         toplevel->pending.state.maximized = maximized;
>>         weston_desktop_xdg_surface_schedule_configure(&toplevel->base,
>> false);
>>   }
>> @@ -618,19 +636,6 @@ weston_desktop_xdg_toplevel_set_activated(struct
>> weston_desktop_surface *dsurfac
>>   }
>>     static void
>> -weston_desktop_xdg_toplevel_set_size(struct weston_desktop_surface
>> *dsurface,
>> -                                    void *user_data,
>> -                                    int32_t width, int32_t height)
>> -{
>> -       struct weston_desktop_xdg_toplevel *toplevel = user_data;
>> -
>> -       toplevel->pending.size.width = width;
>> -       toplevel->pending.size.height = height;
>> -
>> -       weston_desktop_xdg_surface_schedule_configure(&toplevel->base,
>> false);
>> -}
>> -
>> -static void
>>   weston_desktop_xdg_toplevel_committed(struct weston_desktop_xdg_toplevel
>> *toplevel,
>>                                       int32_t sx, int32_t sy)
>>   {
>>
>
>
> --
>
> Quentin “Sardem FF7” Glidic