Only position fullscreen surface in surface->configure callback
authorKristian Høgsberg <krh@bitplanet.net>
Tue, 10 Jul 2012 01:43:22 +0000 (21:43 -0400)
committerKristian Høgsberg <krh@bitplanet.net>
Tue, 10 Jul 2012 01:49:10 +0000 (21:49 -0400)
We end up calling shell_configure_fullscreen() from activate(), where
surface->buffer may be NULL.  Instead, call it on initial map and
first buffer attach after surface type change.  Both code path
come from the surface->configure callback where surface->buffer is know
to be non-NULL.

https://bugs.freedesktop.org/show_bug.cgi?id=51678

src/shell.c

index a0d2088..2cc0139 100644 (file)
@@ -1261,6 +1261,7 @@ set_surface_type(struct shell_surface *shsurf)
                shsurf->saved_x = surface->geometry.x;
                shsurf->saved_y = surface->geometry.y;
                shsurf->saved_position_valid = true;
+               center_on_output(surface, shsurf->fullscreen_output);
 
                if (!wl_list_empty(&shsurf->rotation.transform.link)) {
                        wl_list_remove(&shsurf->rotation.transform.link);
@@ -1401,8 +1402,6 @@ shell_configure_fullscreen(struct shell_surface *shsurf)
        struct weston_matrix *matrix;
        float scale;
 
-       center_on_output(surface, output);
-
        if (!shsurf->fullscreen.black_surface)
                shsurf->fullscreen.black_surface =
                        create_black_surface(surface->compositor,
@@ -2543,6 +2542,7 @@ map(struct desktop_shell *shell, struct weston_surface *surface,
                                            10 + random() % 400);
                break;
        case SHELL_SURFACE_FULLSCREEN:
+               center_on_output(surface, shsurf->fullscreen_output);
                shell_map_fullscreen(shsurf);
                break;
        case SHELL_SURFACE_MAXIMIZED: