From: Kristian Høgsberg Date: Fri, 7 Jan 2011 15:16:17 +0000 (-0500) Subject: Invalidate window on configure X-Git-Url: http://pileus.org/git/?a=commitdiff_plain;h=799279daf07a1d2e476ef5eb7b1c3396f25dfbc6;p=~andy%2Fgtk Invalidate window on configure This will trigger a repaint of the window, but it may be more efficient to just copy back the old surface contents and let gtk+ just update the changed parts. --- diff --git a/gdk/wayland/gdkwindow-wayland.c b/gdk/wayland/gdkwindow-wayland.c index a331529c4..45d921be4 100644 --- a/gdk/wayland/gdkwindow-wayland.c +++ b/gdk/wayland/gdkwindow-wayland.c @@ -106,6 +106,7 @@ struct _GdkWindowImplWayland struct wl_buffer *buffer; EGLImageKHR *pending_image; EGLImageKHR *next_image; + unsigned int mapped : 1; cairo_surface_t *cairo_surface; GLuint texture; @@ -159,6 +160,8 @@ _gdk_wayland_window_update_size (GdkWindow *window) GdkWindowImplWayland *impl = GDK_WINDOW_IMPL_WAYLAND (window->impl); GdkDisplayWayland *display_wayland = GDK_DISPLAY_WAYLAND (gdk_window_get_display (impl->wrapper)); + GdkRectangle area; + cairo_region_t *region; fprintf(stderr, "update size, window %p\n", impl->wrapper); @@ -179,11 +182,23 @@ _gdk_wayland_window_update_size (GdkWindow *window) impl->image = NULL; - wl_buffer_destroy(impl->buffer); - impl->buffer = NULL; + if (impl->buffer) + { + wl_buffer_destroy(impl->buffer); + impl->buffer = NULL; + } fprintf(stderr, " - cleared image\n"); } + + area.x = 0; + area.y = 0; + area.width = window->width; + area.height = window->height; + + region = cairo_region_create_rectangle (&area); + _gdk_window_invalidate_for_expose (window, region); + cairo_region_destroy (region); } GdkWindow * @@ -318,19 +333,6 @@ _gdk_wayland_window_attach_image (GdkWindow *window, EGLImageKHR image) impl = GDK_WINDOW_IMPL_WAYLAND (window->impl); - if (impl->pending_image) - { - if (impl->next_image && impl->next_image != impl->image) - display_wayland->destroy_image(display_wayland->egl_display, - impl->next_image); - - impl->next_image = image; - - return; - } - - impl->pending_image = image; - wl_visual = wl_display_get_premultiplied_argb_visual(display_wayland->wl_display); @@ -345,8 +347,7 @@ _gdk_wayland_window_attach_image (GdkWindow *window, EGLImageKHR image) g_object_ref(impl); fprintf(stderr, "attach %p %dx%d (image %p, name %d)\n", - window, window->width, window->height, - impl->pending_image, name); + window, window->width, window->height, image, name); } static void @@ -1269,9 +1270,11 @@ gdk_wayland_window_process_updates_recurse (GdkWindow *window, int i, n; if (impl->buffer == NULL) + _gdk_wayland_window_attach_image (window, impl->image); + if (!impl->mapped) { - _gdk_wayland_window_attach_image (window, impl->image); wl_surface_map_toplevel (impl->surface); + impl->mapped = TRUE; } n = cairo_region_num_rectangles(region);