[PATCH 4/4] shell: put early default output assigment back
Pekka Paalanen
ppaalanen at gmail.com
Tue Nov 15 01:51:24 PST 2011
On Tue, 15 Nov 2011 11:45:43 +0200
Pekka Paalanen <ppaalanen at gmail.com> wrote:
> Partially revert: 46770139bceabb48ae0c2842f7f66d64fef26b6f
> "shell: Set initial toplevel position in map callback"
>
> For instance, clients/terminal does the following requests for
> creating its window:
>
> [3396044.386] -> wl_compositor at 2.create_surface(new id 20)
> [3396101.262] -> wl_shell at 6.set_toplevel(wl_surface at 20)
> [3396101.319] -> wl_surface at 20.frame(new id 21)
> [3396101.335] -> wl_drm at 7.create_buffer(new id 22, 34, 702, 486,
> 3072, 1)
> [3396101.392] -> wl_buffer at 22.damage(0, 0, 702, 486)
> [3396101.433] -> wl_surface at 20.attach(wl_buffer at 22, 0, 0)
> [3396101.463] -> wl_surface at 20.damage(0, 0, 702, 486)
> [3396101.504] -> wl_surface at 20.damage(0, 0, 702, 486)
> [3396123.298] -> wl_shell at 6.set_toplevel(wl_surface at 20)
>
> Before 4677013 'set_toplevel' assigned some output to the surface.
> Now it relies on the first 'attach' call to assign an output. As
> 'frame' request is ignored without an output set, terminal never
> receives the first frame callback. It loops in dri2_swap_buffers()
> forever and therefore appears to misbehave.
>
> Revert the part of 4677013 that removed the early output assignment
> as a workaround.
I know you hate this, but having all EGL clients hang is worse.
You can revert this when there is a real fix.
Please.
> Signed-off-by: Pekka Paalanen <ppaalanen at gmail.com>
> ---
> compositor/shell.c | 4 ++++
> 1 files changed, 4 insertions(+), 0 deletions(-)
>
> diff --git a/compositor/shell.c b/compositor/shell.c
> index 1936235..638b994 100644
> --- a/compositor/shell.c
> +++ b/compositor/shell.c
> @@ -267,6 +267,10 @@ shell_set_toplevel(struct wl_client *client,
> if (es->map_type == WLSC_SURFACE_MAP_FULLSCREEN) {
> es->x = es->saved_x;
> es->y = es->saved_y;
> + } else if (es->map_type == WLSC_SURFACE_MAP_UNMAPPED) {
> + /* assign to first output */
> + es->output =
> container_of(es->compositor->output_list.next,
> + struct wlsc_output, link);
> }
>
> wlsc_surface_damage(es);
More information about the wayland-devel
mailing list