From: Quentin Glidic <[email protected]>

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 <[email protected]>
---
 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 af093f1..74b404b 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 6229b34..5708aca 100644
--- a/compositor/weston.h
+++ b/compositor/weston.h
@@ -64,6 +64,9 @@ 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[]);
 int
diff --git a/desktop-shell/shell.c b/desktop-shell/shell.c
index 47f7e16..a5e32bd 100644
--- a/desktop-shell/shell.c
+++ b/desktop-shell/shell.c
@@ -4875,8 +4875,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 fcecc8d..2037f1c 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 6095ff7..efaa889 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 = { };
-- 
2.10.0

_______________________________________________
wayland-devel mailing list
[email protected]
https://lists.freedesktop.org/mailman/listinfo/wayland-devel

Reply via email to