Fix wayland compositor on 32 bit systems

Summary:
_e_elm_win_trap_show() treats Ecore_Window as a 64bit data type when
it's actually the same size as the system's pointer type.

 #24HourFullPowerNoToiletNoShower

Reviewers: devilhorns, zmike

Subscribers: cedric

Differential Revision: https://phab.enlightenment.org/D2388

fix T2194
This commit is contained in:
Derek Foreman 2015-04-20 18:17:55 -04:00 committed by Mike Blumenkrantz
parent 12d6cf8f3b
commit 1fb1f17db0
2 changed files with 17 additions and 8 deletions

View File

@ -443,7 +443,6 @@ test -n "$dbus_mount" && AC_DEFINE_UNQUOTED([HAVE_UDISKS_MOUNT], [1], [enable Ud
AM_CONDITIONAL([HAVE_UDISKS_MOUNT], [test -n "$dbus_mount"])
AM_CONDITIONAL([HAVE_EEZE_MOUNT], [test -n "$eeze_mount"])
AC_CHECK_SIZEOF([void*])
# verify "wayland-only" early to adapt dependencies
have_wayland_only=no
@ -842,10 +841,6 @@ if test "x${have_wayland}" = "xyes"; then
fi
fi
if test "x${have_wayland}" = "xyes" && test "$ac_cv_sizeof_voidp" -ne 8 ; then
AC_MSG_ERROR([wayland support is only available for 64bit architectures])
fi
AM_CONDITIONAL([HAVE_WAYLAND], [test "x${have_wayland}" = "xyes"])
AM_CONDITIONAL([HAVE_WAYLAND_ONLY], [test "x${have_wayland_only}" = "xyes"])
AM_CONDITIONAL([HAVE_WAYLAND_CLIENTS], [test "x${have_wayland_clients}" = "xyes"])

View File

@ -67,6 +67,9 @@ _e_elm_win_trap_show(void *data, Evas_Object *o)
{
E_Client *ec;
Ecore_Window win;
#ifdef HAVE_WAYLAND
uint64_t wl_win_id;
#endif
E_Pixmap_Type type = E_PIXMAP_TYPE_X;
win = elm_win_window_id_get(o);
@ -76,7 +79,7 @@ _e_elm_win_trap_show(void *data, Evas_Object *o)
type = E_PIXMAP_TYPE_WL;
ctx->pointer = e_comp->pointer;
elm_win_borderless_set(o, 1);
win = e_comp_wl_id_get(win, getpid());
wl_win_id = e_comp_wl_id_get(win, getpid());
}
else
#endif
@ -85,7 +88,12 @@ _e_elm_win_trap_show(void *data, Evas_Object *o)
ctx->pointer = e_pointer_window_new(win, EINA_TRUE);
}
ec = e_pixmap_find_client(type, win);
#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);
if (ec)
ctx->client = ec;
else
@ -101,7 +109,13 @@ _e_elm_win_trap_show(void *data, Evas_Object *o)
if ((!title) || (!title[0]))
title = "E";
ecore_evas_title_set(ee, title);
cp = e_pixmap_new(type, win);
#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);
EINA_SAFETY_ON_NULL_RETURN_VAL(cp, EINA_TRUE);
ctx->client = e_client_new(cp, 0, 1);