From da01c1d105e1eb72ede863495dd60552b504df05 Mon Sep 17 00:00:00 2001 From: Quentin Glidic Date: Fri, 2 Dec 2016 14:17:08 +0100 Subject: [PATCH] weston: Make the shell entrypoint specific This avoids loading a shell as a module, so we are sure to have only one shell loaded at a time. Signed-off-by: Quentin Glidic Reviewed-by: Daniel Stone --- compositor/main.c | 17 ++++++++++++++++- compositor/weston.h | 3 +++ desktop-shell/shell.c | 4 ++-- fullscreen-shell/fullscreen-shell.c | 4 ++-- ivi-shell/ivi-shell.c | 4 ++-- 5 files changed, 25 insertions(+), 7 deletions(-) diff --git a/compositor/main.c b/compositor/main.c index af093f13..74b404bd 100644 --- a/compositor/main.c +++ b/compositor/main.c @@ -828,6 +828,21 @@ wet_load_module(struct weston_compositor *compositor, return 0; } +static int +wet_load_shell(struct weston_compositor *compositor, + const char *name, int *argc, char *argv[]) +{ + int (*shell_init)(struct weston_compositor *ec, + int *argc, char *argv[]); + + shell_init = wet_load_module_entrypoint(name, "wet_shell_init"); + if (!shell_init) + return -1; + if (shell_init(compositor, argc, argv) < 0) + return -1; + return 0; +} + static int load_modules(struct weston_compositor *ec, const char *modules, int *argc, char *argv[]) @@ -1895,7 +1910,7 @@ int main(int argc, char *argv[]) weston_config_section_get_string(section, "shell", &shell, "desktop-shell.so"); - if (load_modules(ec, shell, &argc, argv) < 0) + if (wet_load_shell(ec, shell, &argc, argv) < 0) goto out; weston_config_section_get_string(section, "modules", &modules, ""); diff --git a/compositor/weston.h b/compositor/weston.h index 6229b34b..5708aca4 100644 --- a/compositor/weston.h +++ b/compositor/weston.h @@ -63,6 +63,9 @@ wet_get_config(struct weston_compositor *compositor); void * wet_load_module_entrypoint(const char *name, const char *entrypoint); +int +wet_shell_init(struct weston_compositor *ec, + int *argc, char *argv[]); int wet_module_init(struct weston_compositor *ec, int *argc, char *argv[]); diff --git a/desktop-shell/shell.c b/desktop-shell/shell.c index 5e109247..d8ef3fd7 100644 --- a/desktop-shell/shell.c +++ b/desktop-shell/shell.c @@ -4874,8 +4874,8 @@ handle_seat_created(struct wl_listener *listener, void *data) } WL_EXPORT int -wet_module_init(struct weston_compositor *ec, - int *argc, char *argv[]) +wet_shell_init(struct weston_compositor *ec, + int *argc, char *argv[]) { struct weston_seat *seat; struct desktop_shell *shell; diff --git a/fullscreen-shell/fullscreen-shell.c b/fullscreen-shell/fullscreen-shell.c index d75c2396..7368cb42 100644 --- a/fullscreen-shell/fullscreen-shell.c +++ b/fullscreen-shell/fullscreen-shell.c @@ -897,8 +897,8 @@ bind_fullscreen_shell(struct wl_client *client, void *data, uint32_t version, } WL_EXPORT int -wet_module_init(struct weston_compositor *compositor, - int *argc, char *argv[]) +wet_shell_init(struct weston_compositor *compositor, + int *argc, char *argv[]) { struct fullscreen_shell *shell; struct weston_seat *seat; diff --git a/ivi-shell/ivi-shell.c b/ivi-shell/ivi-shell.c index 43329951..67619b8f 100644 --- a/ivi-shell/ivi-shell.c +++ b/ivi-shell/ivi-shell.c @@ -492,8 +492,8 @@ shell_add_bindings(struct weston_compositor *compositor, * Initialization of ivi-shell. */ WL_EXPORT int -wet_module_init(struct weston_compositor *compositor, - int *argc, char *argv[]) +wet_shell_init(struct weston_compositor *compositor, + int *argc, char *argv[]) { struct ivi_shell *shell; struct ivi_shell_setting setting = { };