window: fix resizing of windows backed by shm buffers
authorAnder Conselvan de Oliveira <ander.conselvan.de.oliveira@intel.com>
Fri, 27 Jan 2012 15:17:39 +0000 (17:17 +0200)
committerKristian Høgsberg <krh@bitplanet.net>
Fri, 27 Jan 2012 16:17:13 +0000 (11:17 -0500)
When window_attach_surface() calls window_get_resize_dx_dy(),
window->resize_edges is cleared. However if there is already a pending
surface to be attached, the resize won't be done until the following
call to window_attach_surface(). In this next call, since resize_edges
is now zero, the top-left corner of the window will be unchanged. If
the user is resizing from the top or left border, this causes the
resize to happen in the wrong direction.

This patch changes window_attach_surface() to call
window_get_resize_dx_dy() only if an attach will actually happen.

Signed-off-by: Ander Conselvan de Oliveira <ander.conselvan.de.oliveira@intel.com>
clients/window.c

index d828725..6c00186 100644 (file)
@@ -832,8 +832,6 @@ window_attach_surface(struct window *window)
        case WINDOW_BUFFER_TYPE_EGL_IMAGE:
 #endif
        case WINDOW_BUFFER_TYPE_SHM:
-               window_get_resize_dx_dy(window, &x, &y);
-
                if (window->pending_surface != NULL)
                        return;
 
@@ -844,6 +842,7 @@ window_attach_surface(struct window *window)
                        display_get_buffer_for_surface(display,
                                                       window->pending_surface);
 
+               window_get_resize_dx_dy(window, &x, &y);
                wl_surface_attach(window->surface, buffer, x, y);
                window->server_allocation = window->allocation;
                cb = wl_display_sync(display->display);