fix some core swapper logic isue with rect updates... nasty nasty
authorCarsten Haitzler <raster@rasterman.com>
Wed, 16 Jan 2013 06:41:02 +0000 (06:41 +0000)
committerCarsten Haitzler <raster@rasterman.com>
Wed, 16 Jan 2013 06:41:02 +0000 (06:41 +0000)
nasty to catch! :(

SVN revision: 82859

src/modules/evas/engines/software_x11/evas_xlib_swapbuf.c
src/modules/evas/engines/software_x11/evas_xlib_swapper.c

index ed36bd4..3a326ac 100644 (file)
@@ -275,7 +275,7 @@ evas_software_xlib_swapbuf_new_region_for_update(Outbuf *buf, int x, int y, int
           im = (RGBA_Image *)evas_cache_image_empty(evas_common_image_cache_get());
         if (!im)
           {
-             free(rect);
+             eina_rectangle_free(rect);
              return NULL;
           }
         im->cache_entry.flags.alpha |= buf->priv.destination_alpha ? 1 : 0;
@@ -313,7 +313,7 @@ evas_software_xlib_swapbuf_flush(Outbuf *buf)
         Eina_Array_Iterator it;
         unsigned int n, i;
         RGBA_Image *im;
-     
+
         n = eina_array_count_get(&buf->priv.onebuf_regions);
         if (n == 0) return;
         rects = alloca(n * sizeof(Eina_Rectangle));
@@ -351,7 +351,6 @@ evas_software_xlib_swapbuf_flush(Outbuf *buf)
              int x, y, w, h;
              
              x = rect->x; y = rect->y; w = rect->w; h = rect->h;
-             rects[i] = *rect;
              if (buf->rot == 0)
                {
                   rects[i].x = x;
@@ -382,13 +381,14 @@ evas_software_xlib_swapbuf_flush(Outbuf *buf)
                   rects[i].w = h;
                   rects[i].h = w;
                }
-             free(rect);
+             eina_rectangle_free(rect);
 #ifdef EVAS_CSERVE2
              if (evas_cserve2_use_get())
                evas_cache2_image_close(&im->cache_entry);
              else
 #endif
                evas_cache_image_drop(&im->cache_entry);
+             i++;
           }
         evas_xlib_swapper_buffer_unmap(buf->priv.swapper);
         evas_xlib_swapper_swap(buf->priv.swapper, rects, n);
index ebca852..501c0ab 100644 (file)
@@ -222,6 +222,7 @@ evas_xlib_swapper_free(X_Swapper *swp)
      {
         _buf_free(swp, &(swp->buf[i]));
      }
+   XFreeGC(swp->disp, swp->gc);
    free(swp);
 }