compositor: Export functions and add weston_suface::force_configure for fullscreen
authorAlex Wu <zhiwen.wu@linux.intel.com>
Tue, 28 Feb 2012 10:07:54 +0000 (18:07 +0800)
committerKristian Høgsberg <krh@bitplanet.net>
Tue, 28 Feb 2012 14:00:10 +0000 (09:00 -0500)
This will facilitate the implementation of fullscreen.

Signed-off-by: Alex Wu <zhiwen.wu@linux.intel.com>
src/compositor.c
src/compositor.h

index b12c583..6a1bebd 100644 (file)
@@ -212,6 +212,7 @@ weston_surface_create(struct weston_compositor *compositor)
 
        surface->buffer = NULL;
        surface->output = NULL;
+       surface->force_configure = 0;
 
        pixman_region32_init(&surface->damage);
        pixman_region32_init(&surface->opaque);
@@ -231,7 +232,7 @@ weston_surface_create(struct weston_compositor *compositor)
        return surface;
 }
 
-static void
+WL_EXPORT void
 weston_surface_set_color(struct weston_surface *surface,
                 GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha)
 {
@@ -639,6 +640,15 @@ destroy_surface(struct wl_resource *resource)
        free(surface);
 }
 
+WL_EXPORT void
+weston_surface_destroy(struct weston_surface *surface)
+{
+       /* Not a valid way to destroy a client surface */
+       assert(surface->surface.resource.client == NULL);
+
+       destroy_surface(&surface->surface.resource);
+}
+
 static void
 weston_buffer_attach(struct wl_buffer *buffer, struct wl_surface *surface)
 {
@@ -1132,7 +1142,7 @@ surface_attach(struct wl_client *client,
 
        if (es->output == NULL) {
                shell->map(shell, es, buffer->width, buffer->height, sx, sy);
-       } else if (sx != 0 || sy != 0 ||
+       } else if (es->force_configure || sx != 0 || sy != 0 ||
                   es->geometry.width != buffer->width ||
                   es->geometry.height != buffer->height) {
                GLfloat from_x, from_y;
@@ -1144,6 +1154,7 @@ surface_attach(struct wl_client *client,
                                 es->geometry.x + to_x - from_x,
                                 es->geometry.y + to_y - from_y,
                                 buffer->width, buffer->height);
+               es->force_configure = 0;
        }
 
        weston_buffer_attach(buffer, &es->surface);
index 881f53c..dd9cb20 100644 (file)
@@ -301,6 +301,8 @@ struct weston_surface {
 
        struct wl_buffer *buffer;
        struct wl_listener buffer_destroy_listener;
+
+       int force_configure;
 };
 
 void
@@ -507,4 +509,11 @@ struct weston_zoom *
 weston_zoom_run(struct weston_surface *surface, GLfloat start, GLfloat stop,
                weston_zoom_done_func_t done, void *data);
 
+void
+weston_surface_set_color(struct weston_surface *surface,
+                        GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha);
+
+void
+weston_surface_destroy(struct weston_surface *surface);
+
 #endif