discomfitor pushed a commit to branch enlightenment-0.20.

http://git.enlightenment.org/core/enlightenment.git/commit/?id=93a2233f28d662a6db4f0d264494659a98ae1f27

commit 93a2233f28d662a6db4f0d264494659a98ae1f27
Author: Mike Blumenkrantz <zm...@osg.samsung.com>
Date:   Wed May 11 15:36:45 2016 -0400

    use window id for internal window pixmaps again on wayland
    
    this was breaking internal windows when more than one was open, and
    especially if any were open which had a parent-child relationship, by
    using the same id for all internal window pixmaps
---
 src/bin/e_comp_wl.c |  6 +++++-
 src/bin/e_win.c     | 18 ++++++------------
 2 files changed, 11 insertions(+), 13 deletions(-)

diff --git a/src/bin/e_comp_wl.c b/src/bin/e_comp_wl.c
index cea36ed..1abbc2b 100644
--- a/src/bin/e_comp_wl.c
+++ b/src/bin/e_comp_wl.c
@@ -1427,6 +1427,7 @@ _e_comp_wl_surface_destroy(struct wl_resource *resource)
 
    if (!(ec = wl_resource_get_user_data(resource))) return;
 
+   e_pixmap_alias(ec->pixmap, E_PIXMAP_TYPE_WL, wl_resource_get_id(resource));
    e_object_del(E_OBJECT(ec));
    evas_object_hide(ec->frame);
 }
@@ -2243,7 +2244,10 @@ _e_comp_wl_client_cb_del(void *data EINA_UNUSED, 
E_Client *ec)
      wl_resource_destroy(cb);
 
    if (ec->comp_data->surface)
-     wl_resource_set_user_data(ec->comp_data->surface, NULL);
+     {
+        e_pixmap_alias(ec->pixmap, E_PIXMAP_TYPE_WL, 
wl_resource_get_id(ec->comp_data->surface));
+        wl_resource_set_user_data(ec->comp_data->surface, NULL);
+     }
 
    if (ec->internal_elm_win)
      evas_object_hide(ec->frame);
diff --git a/src/bin/e_win.c b/src/bin/e_win.c
index 2e0ba14..31667eb 100644
--- a/src/bin/e_win.c
+++ b/src/bin/e_win.c
@@ -73,7 +73,7 @@ _e_elm_win_trap_show(void *data, Evas_Object *o)
         E_Client *ec;
         Ecore_Window win;
 #ifdef HAVE_WAYLAND
-        int64_t wl_win_id;
+        int64_t wl_win_id = -1;
 #endif
         E_Pixmap_Type type = E_PIXMAP_TYPE_X;
 
@@ -96,12 +96,7 @@ _e_elm_win_trap_show(void *data, Evas_Object *o)
              ctx->pointer = e_pointer_window_new(win, EINA_TRUE);
           }
 
-#ifdef HAVE_WAYLAND
-        if (type == E_PIXMAP_TYPE_WL)
-          ec = e_pixmap_find_client(type, wl_win_id);
-        else
-#endif
-          ec = e_pixmap_find_client(type, win);
+        ec = e_pixmap_find_client(type, win);
         if (ec)
           ctx->client = ec;
         else
@@ -118,13 +113,12 @@ _e_elm_win_trap_show(void *data, Evas_Object *o)
                title = "E";
              ecore_evas_title_set(ee, title);
 
+             cp = e_pixmap_new(type, win);
+             EINA_SAFETY_ON_NULL_RETURN_VAL(cp, EINA_TRUE);
 #ifdef HAVE_WAYLAND
-             if (type == E_PIXMAP_TYPE_WL)
-               cp = e_pixmap_new(type, wl_win_id);
-             else
+             if (wl_win_id >= 0)
+               e_pixmap_alias(cp, type, wl_win_id);
 #endif
-               cp = e_pixmap_new(type, win);
-             EINA_SAFETY_ON_NULL_RETURN_VAL(cp, EINA_TRUE);
 
              current_win = ctx;
              ctx->client = e_client_new(cp, 0, 1);

-- 


Reply via email to