raster pushed a commit to branch master.

http://git.enlightenment.org/core/efl.git/commit/?id=bd91ebbbd76069d364e903f5ec3d82d7c3403635

commit bd91ebbbd76069d364e903f5ec3d82d7c3403635
Author: Carsten Haitzler (Rasterman) <[email protected]>
Date:   Wed Jul 27 10:32:41 2016 +0900

    efl - ecore-x - work around e's badness in makeing an x image for all wins
    
    so e is being stupid and creating an ecore-x image forevery single
    window if in x11 mode if it needs it or not. this results in having ti
    allocate an actual x image and shm segments. work around this and get
    bit order from somewhere else than the x image itself thus avoiding
    the allocation until a real get or put is done.
    
    @fix
---
 src/lib/ecore_x/xcb/ecore_xcb_image.c |  8 +++++---
 src/lib/ecore_x/xlib/ecore_x_image.c  | 16 ++++------------
 2 files changed, 9 insertions(+), 15 deletions(-)

diff --git a/src/lib/ecore_x/xcb/ecore_xcb_image.c 
b/src/lib/ecore_x/xcb/ecore_xcb_image.c
index b6ac6ff..7c21781 100644
--- a/src/lib/ecore_x/xcb/ecore_xcb_image.c
+++ b/src/lib/ecore_x/xcb/ecore_xcb_image.c
@@ -245,7 +245,6 @@ ecore_x_image_is_argb32_get(Ecore_X_Image *im)
    CHECK_XCB_CONN;
 
    vis = (xcb_visualtype_t *)im->vis;
-   if (!im->xim) _ecore_xcb_image_shm_create(im);
 
    if (((vis->_class == XCB_VISUAL_CLASS_TRUE_COLOR) ||
         (vis->_class == XCB_VISUAL_CLASS_DIRECT_COLOR)) &&
@@ -254,10 +253,13 @@ ecore_x_image_is_argb32_get(Ecore_X_Image *im)
        (vis->green_mask == 0x00ff00) && 
        (vis->blue_mask == 0x0000ff))
      {
+        const xcb_setup_t *setup = xcb_get_setup(_ecore_xcb_conn);
+
+        if (!setup) return EINA_FALSE;
 #ifdef WORDS_BIGENDIAN
-        if (im->xim->byte_order == XCB_IMAGE_ORDER_MSB_FIRST) return EINA_TRUE;
+        if (setup->image_byte_order == XCB_IMAGE_ORDER_MSB_FIRST) return 
EINA_TRUE;
 #else
-        if (im->xim->byte_order == XCB_IMAGE_ORDER_LSB_FIRST) return EINA_TRUE;
+        if (setup->image_byte_order == XCB_IMAGE_ORDER_LSB_FIRST) return 
EINA_TRUE;
 #endif
      }
 
diff --git a/src/lib/ecore_x/xlib/ecore_x_image.c 
b/src/lib/ecore_x/xlib/ecore_x_image.c
index 35ee976..6ce8919 100644
--- a/src/lib/ecore_x/xlib/ecore_x_image.c
+++ b/src/lib/ecore_x/xlib/ecore_x_image.c
@@ -305,15 +305,13 @@ ecore_x_image_get(Ecore_X_Image *im,
    LOGFN(__FILE__, __LINE__, __FUNCTION__);
    if (im->shm)
      {
-        
-        if (!im->xim)
-          _ecore_x_image_shm_create(im);
+        if (!im->xim) _ecore_x_image_shm_create(im);
 
         if (!im->xim)
           return EINA_FALSE;
 
         _ecore_x_image_err = 0;
-        
+
         ecore_x_sync();
         // optimised path
         ph = XSetErrorHandler((XErrorHandler)_ecore_x_image_error_handler);
@@ -449,12 +447,6 @@ EAPI Eina_Bool
 ecore_x_image_is_argb32_get(Ecore_X_Image *im)
 {
    Visual *vis = im->vis;
-   if (!im->xim)
-     {
-        if (im->shm) _ecore_x_image_shm_create(im);
-        else _ecore_x_image_create(im);
-        if (!im->xim) return EINA_FALSE;
-     }
    if (((vis->class == TrueColor) ||
         (vis->class == DirectColor)) &&
        (im->bpp == 4) &&
@@ -463,9 +455,9 @@ ecore_x_image_is_argb32_get(Ecore_X_Image *im)
        (vis->blue_mask == 0x0000ff))
      {
 #ifdef WORDS_BIGENDIAN
-        if (im->xim->bitmap_bit_order == MSBFirst) return EINA_TRUE;
+        if (BitmapBitOrder(_ecore_x_disp) == MSBFirst) return EINA_TRUE;
 #else
-        if (im->xim->bitmap_bit_order == LSBFirst) return EINA_TRUE;
+        if (BitmapBitOrder(_ecore_x_disp) == LSBFirst) return EINA_TRUE;
 #endif
      }
    return EINA_FALSE;

-- 


Reply via email to