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
This commit is contained in:
Mike Blumenkrantz 2016-05-11 15:36:45 -04:00
parent 45e872ddf1
commit d3ba524a62
2 changed files with 12 additions and 14 deletions

View File

@ -1551,6 +1551,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);
}
@ -2256,7 +2257,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);

View File

@ -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);
#ifdef HAVE_WAYLAND
if (type == E_PIXMAP_TYPE_WL)
cp = e_pixmap_new(type, wl_win_id);
else
#endif
cp = e_pixmap_new(type, win);
cp = e_pixmap_new(type, win);
EINA_SAFETY_ON_NULL_RETURN_VAL(cp, EINA_TRUE);
#ifdef HAVE_WAYLAND
if (wl_win_id >= 0)
e_pixmap_alias(cp, type, wl_win_id);
#endif
current_win = ctx;
ctx->client = e_client_new(cp, 0, 1);