forked from enlightenment/enlightenment
add wl_x11 output module
this is the first of the wayland output modules, and it is extremely simple as a result of the compositor rewrite. for any other wayland output modules, it should be enough to simply create an ecore_evas canvas and do startup in this way.
This commit is contained in:
parent
12d7405a0f
commit
c268302e67
91
configure.ac
91
configure.ac
|
@ -761,39 +761,47 @@ define([CHECK_MODULE_BLUEZ4],
|
||||||
AC_SUBST([EBLUEZ4_CFLAGS])
|
AC_SUBST([EBLUEZ4_CFLAGS])
|
||||||
AC_SUBST([EBLUEZ4_LIBS])
|
AC_SUBST([EBLUEZ4_LIBS])
|
||||||
|
|
||||||
|
have_wayland_only=no
|
||||||
|
AC_ARG_ENABLE([wayland-only],
|
||||||
|
AS_HELP_STRING([--enable-wayland-only],[enable wayland-only version of enlightenment @<:@default=disabled@:>@]),
|
||||||
|
[e_cv_want_wayland_only=$enableval],
|
||||||
|
[e_cv_want_wayland_only=no])
|
||||||
|
AC_MSG_CHECKING([whether wayland-only version is enabled])
|
||||||
|
AC_MSG_RESULT([${e_cv_want_wayland_only}])
|
||||||
|
|
||||||
have_wayland_clients=no
|
have_wayland_clients=no
|
||||||
AC_ARG_ENABLE([wayland-clients],
|
AC_ARG_ENABLE([wayland-clients],
|
||||||
AS_HELP_STRING([--enable-wayland-clients],[enable wayland clients in composite module @<:@default=disabled@:>@]),
|
AS_HELP_STRING([--enable-wayland-clients],[enable wayland clients in composite module @<:@default=disabled@:>@]),
|
||||||
[e_cv_want_wayland_clients=$enableval],
|
[e_cv_want_wayland_clients=$enableval],
|
||||||
[e_cv_want_wayland_clients=no])
|
[e_cv_want_wayland_clients=no])
|
||||||
|
|
||||||
AC_MSG_CHECKING([whether wayland client support is enabled])
|
AC_MSG_CHECKING([whether wayland client support is enabled])
|
||||||
AC_MSG_RESULT([${e_cv_want_wayland_clients}])
|
AC_MSG_RESULT([${e_cv_want_wayland_clients}])
|
||||||
|
|
||||||
if test "x$e_cv_want_wayland_clients" != "xno";then
|
|
||||||
PKG_CHECK_MODULES([WAYLAND], [wayland-server >= 1.2.90 pixman-1 >= 0.3 xkbcommon >= 0.3.0],
|
|
||||||
[
|
|
||||||
have_wayland_clients=yes
|
|
||||||
AC_DEFINE_UNQUOTED([HAVE_WAYLAND_CLIENTS],[1],[enable wayland client support])
|
|
||||||
],
|
|
||||||
[have_wayland_clients=no])
|
|
||||||
else
|
|
||||||
have_wayland_clients=no
|
|
||||||
fi
|
|
||||||
|
|
||||||
AM_CONDITIONAL([HAVE_WAYLAND_CLIENTS], [test "x${have_wayland_clients}" = "xyes"])
|
|
||||||
|
|
||||||
have_wayland_egl=no
|
have_wayland_egl=no
|
||||||
if test "x${have_wayland_clients}" = "xyes"; then
|
|
||||||
AC_ARG_ENABLE([wayland-egl],
|
AC_ARG_ENABLE([wayland-egl],
|
||||||
AS_HELP_STRING([--enable-wayland-egl],[enable wayland clients to render using EGL @<:@default=disabled@:>@]),
|
AS_HELP_STRING([--enable-wayland-egl],[enable wayland to render using EGL @<:@default=disabled@:>@]),
|
||||||
[e_cv_want_wayland_egl=$enableval],
|
[e_cv_want_wayland_egl=$enableval],
|
||||||
[e_cv_want_wayland_egl=no])
|
[e_cv_want_wayland_egl=no])
|
||||||
|
AC_MSG_CHECKING([whether wayland EGL support is enabled])
|
||||||
AC_MSG_CHECKING([whether wayland client EGL support is enabled])
|
|
||||||
AC_MSG_RESULT([${e_cv_want_wayland_egl}])
|
AC_MSG_RESULT([${e_cv_want_wayland_egl}])
|
||||||
|
|
||||||
if test "x$e_cv_want_wayland_egl" != "xno";then
|
if test "x${e_cv_want_wayland_only}" != "xno" || test "x${e_cv_want_wayland_clients}" != "xno";then
|
||||||
|
PKG_CHECK_MODULES([WAYLAND], [ecore-wayland wayland-server pixman-1 xkbcommon],
|
||||||
|
[
|
||||||
|
have_wayland=yes
|
||||||
|
AC_DEFINE_UNQUOTED([HAVE_WAYLAND],[1],[enable wayland support])
|
||||||
|
],
|
||||||
|
[have_wayland=no])
|
||||||
|
else
|
||||||
|
have_wayland=no
|
||||||
|
fi
|
||||||
|
|
||||||
|
if test "x${have_wayland}" = "xyes"; then
|
||||||
|
if test "x${e_cv_want_wayland_clients}" != "xno"; then
|
||||||
|
have_wayland_clients=yes
|
||||||
|
AC_DEFINE_UNQUOTED([HAVE_WAYLAND_CLIENTS],[1],[enable wayland clients in composite module])
|
||||||
|
fi
|
||||||
|
if test "x${e_cv_want_wayland_egl}" != "xno";then
|
||||||
PKG_CHECK_MODULES([WAYLAND_EGL], [egl >= 7.10],
|
PKG_CHECK_MODULES([WAYLAND_EGL], [egl >= 7.10],
|
||||||
[
|
[
|
||||||
have_wayland_egl=yes
|
have_wayland_egl=yes
|
||||||
|
@ -805,8 +813,30 @@ if test "x${have_wayland_clients}" = "xyes"; then
|
||||||
fi
|
fi
|
||||||
fi
|
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"])
|
||||||
AM_CONDITIONAL([HAVE_WAYLAND_EGL], [test "x${have_wayland_egl}" = "xyes"])
|
AM_CONDITIONAL([HAVE_WAYLAND_EGL], [test "x${have_wayland_egl}" = "xyes"])
|
||||||
|
|
||||||
|
PKG_CHECK_MODULES([ECORE_X], [ecore-x >= ${efl_version}])
|
||||||
|
if test -n "$ECORE_X_CFLAGS" ; then
|
||||||
|
ecore_x=true
|
||||||
|
else
|
||||||
|
ecore_x=false
|
||||||
|
fi
|
||||||
|
|
||||||
|
if test "x${have_wayland}" = "xyes" ; then
|
||||||
|
allow_wl_x11=true
|
||||||
|
else
|
||||||
|
allow_wl_x11=false
|
||||||
|
fi
|
||||||
|
|
||||||
|
if test "x${ecore_x}" = "xtrue" && test -n "$WAYLAND_CFLAGS" ; then
|
||||||
|
wl_x11=true
|
||||||
|
else
|
||||||
|
wl_x11=false
|
||||||
|
fi
|
||||||
|
|
||||||
define([CHECK_MODULE_WL_DESKTOP_SHELL],
|
define([CHECK_MODULE_WL_DESKTOP_SHELL],
|
||||||
[
|
[
|
||||||
if test "x${have_wayland_clients}" = "xyes"; then
|
if test "x${have_wayland_clients}" = "xyes"; then
|
||||||
|
@ -817,16 +847,6 @@ define([CHECK_MODULE_WL_DESKTOP_SHELL],
|
||||||
])
|
])
|
||||||
AM_CONDITIONAL([HAVE_WL_DESKTOP_SHELL], [test "x${WL_DESKTOP_SHELL}" = "xtrue"])
|
AM_CONDITIONAL([HAVE_WL_DESKTOP_SHELL], [test "x${WL_DESKTOP_SHELL}" = "xtrue"])
|
||||||
|
|
||||||
define([CHECK_MODULE_WL_SCREENSHOT],
|
|
||||||
[
|
|
||||||
if test "x${have_wayland_clients}" = "xyes"; then
|
|
||||||
AC_E_CHECK_PKG(WL_SCREENSHOT, [ ecore >= $efl_version ecore-wayland >= $efl_version eina >= $efl_version ], [WL_SCREENSHOT=true], [WL_SCREENSHOT=false])
|
|
||||||
else
|
|
||||||
WL_SCREENSHOT=false
|
|
||||||
fi
|
|
||||||
])
|
|
||||||
AM_CONDITIONAL([HAVE_WL_SCREENSHOT], [test "x${WL_SCREENSHOT}" = "xtrue"])
|
|
||||||
|
|
||||||
AC_E_OPTIONAL_MODULE([ibar], true)
|
AC_E_OPTIONAL_MODULE([ibar], true)
|
||||||
AC_E_OPTIONAL_MODULE([clock], true)
|
AC_E_OPTIONAL_MODULE([clock], true)
|
||||||
AC_E_OPTIONAL_MODULE([pager], true)
|
AC_E_OPTIONAL_MODULE([pager], true)
|
||||||
|
@ -867,17 +887,18 @@ AC_E_OPTIONAL_MODULE([systray], true)
|
||||||
AC_E_OPTIONAL_MODULE([appmenu], true)
|
AC_E_OPTIONAL_MODULE([appmenu], true)
|
||||||
AC_E_OPTIONAL_MODULE([quickaccess], true)
|
AC_E_OPTIONAL_MODULE([quickaccess], true)
|
||||||
AC_E_OPTIONAL_MODULE([teamwork], true)
|
AC_E_OPTIONAL_MODULE([teamwork], true)
|
||||||
AC_E_OPTIONAL_MODULE([shot], true)
|
AC_E_OPTIONAL_MODULE([shot], true, $ecore_x)
|
||||||
AC_E_OPTIONAL_MODULE([backlight], true)
|
AC_E_OPTIONAL_MODULE([backlight], true)
|
||||||
AC_E_OPTIONAL_MODULE([tasks], true)
|
AC_E_OPTIONAL_MODULE([tasks], true)
|
||||||
AC_E_OPTIONAL_MODULE([conf_randr], true)
|
AC_E_OPTIONAL_MODULE([conf_randr], true, $ecore_x)
|
||||||
AC_E_OPTIONAL_MODULE([xkbswitch], true)
|
AC_E_OPTIONAL_MODULE([xkbswitch], true, $ecore_x)
|
||||||
AC_E_OPTIONAL_MODULE([tiling], true)
|
AC_E_OPTIONAL_MODULE([tiling], true)
|
||||||
AC_E_OPTIONAL_MODULE([access], true)
|
AC_E_OPTIONAL_MODULE([access], false, $ecore_x)
|
||||||
AC_E_OPTIONAL_MODULE([music_control], true, [CHECK_MODULE_MUSIC_CONTROL])
|
AC_E_OPTIONAL_MODULE([music_control], true, [CHECK_MODULE_MUSIC_CONTROL])
|
||||||
AC_E_OPTIONAL_MODULE([contact], true)
|
AC_E_OPTIONAL_MODULE([contact], false)
|
||||||
AC_E_OPTIONAL_MODULE([wl_desktop_shell], true, [CHECK_MODULE_WL_DESKTOP_SHELL])
|
AC_E_OPTIONAL_MODULE([wl_desktop_shell], true, [CHECK_MODULE_WL_DESKTOP_SHELL])
|
||||||
AC_E_OPTIONAL_MODULE([wl_screenshot], true, [CHECK_MODULE_WL_SCREENSHOT])
|
AC_E_OPTIONAL_MODULE([wl_x11], $allow_wl_x11, $wl_x11)
|
||||||
|
#AC_E_OPTIONAL_MODULE([wl_screenshot], true, [CHECK_MODULE_WL_SCREENSHOT])
|
||||||
|
|
||||||
HALT="/sbin/shutdown -h now"
|
HALT="/sbin/shutdown -h now"
|
||||||
REBOOT="/sbin/shutdown -r now"
|
REBOOT="/sbin/shutdown -r now"
|
||||||
|
|
|
@ -238,7 +238,9 @@ e_module_all_load(void)
|
||||||
{
|
{
|
||||||
if (!em) continue;
|
if (!em) continue;
|
||||||
|
|
||||||
if ((!e_util_strcmp(em->name, "comp")) || (!e_util_strcmp(em->name, "conf_comp")))
|
if ((!e_util_strcmp(em->name, "comp")) || (!e_util_strcmp(em->name, "conf_comp")) ||
|
||||||
|
(e_comp_get(NULL) && (!strcmp(em->name, "wl_x11"))) //block wl_x11 if we've already created a compositor
|
||||||
|
)
|
||||||
{
|
{
|
||||||
eina_stringshare_del(em->name);
|
eina_stringshare_del(em->name);
|
||||||
e_config->modules = eina_list_remove_list(e_config->modules, l);
|
e_config->modules = eina_list_remove_list(e_config->modules, l);
|
||||||
|
@ -399,6 +401,12 @@ e_module_new(const char *name)
|
||||||
init_done:
|
init_done:
|
||||||
|
|
||||||
_e_modules = eina_list_append(_e_modules, m);
|
_e_modules = eina_list_append(_e_modules, m);
|
||||||
|
if (!_e_modules_hash)
|
||||||
|
{
|
||||||
|
/* wayland module preloading */
|
||||||
|
if (!e_module_init())
|
||||||
|
CRI("WTFFFFF");
|
||||||
|
}
|
||||||
eina_hash_add(_e_modules_hash, name, m);
|
eina_hash_add(_e_modules_hash, name, m);
|
||||||
m->name = eina_stringshare_add(name);
|
m->name = eina_stringshare_add(name);
|
||||||
if (modpath)
|
if (modpath)
|
||||||
|
@ -912,6 +920,8 @@ _e_module_whitelist_check(void)
|
||||||
"tiling",
|
"tiling",
|
||||||
"winlist",
|
"winlist",
|
||||||
"wizard",
|
"wizard",
|
||||||
|
"wl_desktop_shell",
|
||||||
|
"wl_x11",
|
||||||
"wl_drm",
|
"wl_drm",
|
||||||
"wl_screenshot",
|
"wl_screenshot",
|
||||||
"wl_shell",
|
"wl_shell",
|
||||||
|
|
|
@ -222,6 +222,10 @@ if USE_MODULE_WL_DESKTOP_SHELL
|
||||||
include src/modules/Makefile_wl_desktop_shell.mk
|
include src/modules/Makefile_wl_desktop_shell.mk
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
if USE_MODULE_WL_X11
|
||||||
|
include src/modules/Makefile_wl_x11.mk
|
||||||
|
endif
|
||||||
|
|
||||||
#if HAVE_WAYLAND_SCREENSHOT
|
#if HAVE_WAYLAND_SCREENSHOT
|
||||||
#include src/modules/Makefile_wl_screenshot.mk
|
#include src/modules/Makefile_wl_screenshot.mk
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -0,0 +1,15 @@
|
||||||
|
wl_x11dir = $(MDIR)/wl_x11
|
||||||
|
|
||||||
|
wl_x11pkgdir = $(MDIR)/wl_x11/$(MODULE_ARCH)
|
||||||
|
wl_x11pkg_LTLIBRARIES = src/modules/wl_x11/module.la
|
||||||
|
|
||||||
|
src_modules_wl_x11_module_la_DEPENDENCIES = $(MDEPENDENCIES)
|
||||||
|
src_modules_wl_x11_module_la_CPPFLAGS = $(MOD_CPPFLAGS) @ECORE_X_CFLAGS@ @WAYLAND_CFLAGS@ -DNEED_X=1
|
||||||
|
src_modules_wl_x11_module_la_LIBADD = $(LIBS) @ECORE_X_LIBS@ @WAYLAND_LIBS@
|
||||||
|
src_modules_wl_x11_module_la_LDFLAGS = $(MOD_LDFLAGS)
|
||||||
|
src_modules_wl_x11_module_la_SOURCES = src/modules/wl_x11/e_mod_main.c
|
||||||
|
|
||||||
|
# TODO: incomplete
|
||||||
|
#.PHONY: wl_x11 install-wl_x11
|
||||||
|
#wl_x11: $(wl_x11pkg_LTLIBRARIES) $(wl_x11_DATA)
|
||||||
|
#install-wl_x11: install-wl_x11DATA install-wl_x11pkgLTLIBRARIES
|
|
@ -0,0 +1,72 @@
|
||||||
|
#include "e.h"
|
||||||
|
#include "e_comp_wl.h"
|
||||||
|
#include <Ecore_Wayland.h>
|
||||||
|
|
||||||
|
EAPI E_Module_Api e_modapi = { E_MODULE_API_VERSION, "Wl_X11" };
|
||||||
|
|
||||||
|
#define SCREEN_W 1024
|
||||||
|
#define SCREEN_H 768
|
||||||
|
|
||||||
|
static void
|
||||||
|
_cb_delete_request(Ecore_Evas *ee EINA_UNUSED)
|
||||||
|
{
|
||||||
|
ecore_main_loop_quit();
|
||||||
|
}
|
||||||
|
|
||||||
|
EAPI void *
|
||||||
|
e_modapi_init(E_Module *m)
|
||||||
|
{
|
||||||
|
Ecore_Evas *ee;
|
||||||
|
E_Screen *screen;
|
||||||
|
E_Comp *comp;
|
||||||
|
|
||||||
|
printf("LOAD WL_X11 MODULE\n");
|
||||||
|
|
||||||
|
/* try to init ecore_x */
|
||||||
|
if (!ecore_x_init(NULL))
|
||||||
|
{
|
||||||
|
fprintf(stderr, "Could not initialize ecore_x\n");
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
ee = ecore_evas_software_x11_new(NULL, 0, 0, 0, SCREEN_W, SCREEN_H);
|
||||||
|
comp = e_comp_new();
|
||||||
|
comp->comp_type = E_PIXMAP_TYPE_WL;
|
||||||
|
comp->ee = ee;
|
||||||
|
if (!e_xinerama_fake_screens_exist())
|
||||||
|
{
|
||||||
|
screen = E_NEW(E_Screen, 1);
|
||||||
|
screen->escreen = screen->screen = 0;
|
||||||
|
screen->x = 0;
|
||||||
|
screen->y = 0;
|
||||||
|
screen->w = SCREEN_W;
|
||||||
|
screen->h = SCREEN_H;
|
||||||
|
e_xinerama_screens_set(eina_list_append(NULL, screen));
|
||||||
|
}
|
||||||
|
comp->man = e_manager_new(0, comp, SCREEN_W, SCREEN_H);
|
||||||
|
comp->pointer = e_pointer_window_new(comp->man->root, 1);
|
||||||
|
e_comp_wl_init();
|
||||||
|
e_comp_canvas_init(comp);
|
||||||
|
e_comp_canvas_fake_layers_init(comp);
|
||||||
|
|
||||||
|
ecore_evas_callback_delete_request_set(ee, _cb_delete_request);
|
||||||
|
|
||||||
|
/* setup keymap_change event handler */
|
||||||
|
if (!_e_wl_comp->kbd_handler)
|
||||||
|
_e_wl_comp->kbd_handler =
|
||||||
|
ecore_event_handler_add(ECORE_X_EVENT_XKB_STATE_NOTIFY,
|
||||||
|
e_comp_wl_cb_keymap_changed, NULL);
|
||||||
|
|
||||||
|
ecore_wl_init(NULL);
|
||||||
|
ecore_wl_server_mode_set(1);
|
||||||
|
return m;
|
||||||
|
}
|
||||||
|
|
||||||
|
EAPI int
|
||||||
|
e_modapi_shutdown(E_Module *m EINA_UNUSED)
|
||||||
|
{
|
||||||
|
/* shutdown ecore_x */
|
||||||
|
ecore_x_shutdown();
|
||||||
|
|
||||||
|
return 1;
|
||||||
|
}
|
Loading…
Reference in New Issue