Ignore surface.map_toplevel() if already mapped
authorKristian Høgsberg <krh@bitplanet.net>
Fri, 7 Jan 2011 13:38:56 +0000 (08:38 -0500)
committerKristian Høgsberg <krh@bitplanet.net>
Fri, 7 Jan 2011 13:38:56 +0000 (08:38 -0500)
compositor/compositor-x11.c
compositor/compositor.c
compositor/compositor.h

index df9329f..722bd94 100644 (file)
@@ -288,7 +288,7 @@ x11_compositor_present(struct wlsc_compositor *base)
                                                        XCB_DRI2_ATTACHMENT_BUFFER_FRONT_LEFT,
                                                        XCB_DRI2_ATTACHMENT_BUFFER_BACK_LEFT);
                free(xcb_dri2_copy_region_reply(c->conn, cookie, NULL));
-       }       
+       }
 
        gettimeofday(&tv, NULL);
        msec = tv.tv_sec * 1000 + tv.tv_usec / 1000;
index 29a1f52..2ba484f 100644 (file)
@@ -130,6 +130,7 @@ wlsc_surface_create(struct wlsc_compositor *compositor,
 
        wl_list_init(&surface->surface.destroy_listener_list);
        wl_list_init(&surface->link);
+       surface->mapped = 0;
 
        glGenTextures(1, &surface->texture);
        glBindTexture(GL_TEXTURE_2D, surface->texture);
@@ -440,12 +441,16 @@ surface_map_toplevel(struct wl_client *client,
 {
        struct wlsc_surface *es = (struct wlsc_surface *) surface;
 
+       if (es->mapped)
+               return;
+
        es->x = 10 + random() % 400;
        es->y = 10 + random() % 400;
 
        wlsc_surface_update_matrix(es);
        wl_list_insert(es->compositor->surface_list.prev, &es->link);
        wlsc_compositor_schedule_repaint(es->compositor);
+       es->mapped = 1;
 }
 
 static void
index 81072f6..99035c7 100644 (file)
@@ -146,6 +146,7 @@ struct wlsc_surface {
        struct wlsc_matrix matrix_inv;
        struct wl_visual *visual;
        struct wl_buffer *buffer;
+       int mapped;
 };
 
 void