[PATCH weston v2 12/24] xwm: move set_title and set_pid

Quentin Glidic sardemff7+wayland at sardemff7.net
Sun Jan 15 13:52:40 UTC 2017


On 21/12/2016 15:40, Pekka Paalanen wrote:
> From: Pekka Paalanen <pekka.paalanen at collabora.co.uk>
> 
> Move the calls to set_title() and set_pid() out of
> weston_wm_window_read_properties() and into the three callers, each
> slightly different.
> 
> xserver_map_shell_surface(): already calls these functions after
> creating the shell surface, so need to add calls.

typo: “so need” → “so no need”


> weston_wm_handle_map_request(): can be called only on unmapped (in X11)
> Windows, so no need to add calls.
> 
> weston_wm_window_draw_decoration(): window->shsurf and window->surface
> are either both set or both NULL, so the check for window->shsurf is
> removed when moving the set_title() and set_pid() calls under a
> window->surface check.
> 
> Signed-off-by: Pekka Paalanen <pekka.paalanen at collabora.co.uk>

Nice cleanup:
Reviewed-by: Quentin Glidic <sardemff7+git at sardemff7.net>

Thanks,


> ---
>   xwayland/window-manager.c | 24 +++++++++++++++++-------
>   1 file changed, 17 insertions(+), 7 deletions(-)
> 
> diff --git a/xwayland/window-manager.c b/xwayland/window-manager.c
> index e2b1ebf..fb83795 100644
> --- a/xwayland/window-manager.c
> +++ b/xwayland/window-manager.c
> @@ -456,8 +456,6 @@ static void
>   weston_wm_window_read_properties(struct weston_wm_window *window)
>   {
>   	struct weston_wm *wm = window->wm;
> -	const struct weston_desktop_xwayland_interface *xwayland_interface =
> -		wm->server->compositor->xwayland_interface;
>   
>   #define F(field) (&window->field)
>   	const struct {
> @@ -599,11 +597,6 @@ weston_wm_window_read_properties(struct weston_wm_window *window)
>   		if (!window->machine || strcmp(window->machine, name))
>   			window->pid = 0;
>   	}
> -
> -	if (window->shsurf && window->name)
> -		xwayland_interface->set_title(window->shsurf, window->name);
> -	if (window->shsurf && window->pid > 0)
> -		xwayland_interface->set_pid(window->shsurf, window->pid);
>   }
>   
>   #undef TYPE_WM_PROTOCOLS
> @@ -1027,6 +1020,19 @@ weston_wm_handle_map_request(struct weston_wm *wm, xcb_generic_event_t *event)
>   
>   	weston_wm_window_read_properties(window);
>   
> +	/* For a new Window, MapRequest happens before the Window is realized
> +	 * in Xwayland. We do the real xcb_map_window() here as a response to
> +	 * MapRequest. The Window will get realized (wl_surface created in
> +	 * Wayland and WL_SURFACE_ID sent in X11) when it has been mapped for
> +	 * real.
> +	 *
> +	 * MapRequest only happens for (X11) unmapped Windows. On UnmapNotify,
> +	 * we reset shsurf to NULL, so even if X11 connection races far ahead
> +	 * of the Wayland connection and the X11 client is repeatedly mapping
> +	 * and unmapping, we will never have shsurf set on MapRequest.
> +	 */
> +	assert(!window->shsurf);
> +
>   	window->map_request_x = window->x;
>   	window->map_request_y = window->y;
>   
> @@ -1190,6 +1196,10 @@ weston_wm_window_draw_decoration(void *data)
>   
>   		xwayland_interface->set_window_geometry(window->shsurf,
>   							input_x, input_y, input_w, input_h);
> +		if (window->name)
> +			xwayland_interface->set_title(window->shsurf, window->name);
> +		if (window->pid > 0)
> +			xwayland_interface->set_pid(window->shsurf, window->pid);
>   	}
>   }
>   
> 


-- 

Quentin “Sardem FF7” Glidic


More information about the wayland-devel mailing list