From cb4685bbd193d6872b8cbef398170d014f3d5623 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Kristian=20H=C3=B8gsberg?= Date: Wed, 20 Feb 2013 15:37:49 -0500 Subject: [PATCH] Pass argc and argv to modules This lets modules parse options from the command line. --- src/compositor.c | 27 ++++++++++++++------------- src/compositor.h | 3 ++- src/shell.c | 10 ++++------ src/tablet-shell.c | 3 ++- src/xwayland/launcher.c | 4 +++- tests/surface-global-test.c | 3 ++- tests/surface-test.c | 3 ++- tests/weston-test.c | 3 ++- 8 files changed, 31 insertions(+), 25 deletions(-) diff --git a/src/compositor.c b/src/compositor.c index fb5cb2c..9198b3b 100644 --- a/src/compositor.c +++ b/src/compositor.c @@ -3211,11 +3211,13 @@ load_module(const char *name, const char *entrypoint) } static int -load_modules(struct weston_compositor *ec, const char *modules) +load_modules(struct weston_compositor *ec, const char *modules, + int *argc, char *argv[], const char *config_file) { const char *p, *end; char buffer[256]; - int (*module_init)(struct weston_compositor *ec); + int (*module_init)(struct weston_compositor *ec, + int *argc, char *argv[], const char *config_file); if (modules == NULL) return 0; @@ -3226,7 +3228,7 @@ load_modules(struct weston_compositor *ec, const char *modules) snprintf(buffer, sizeof buffer, "%.*s", (int) (end - p), p); module_init = load_module(buffer, "module_init"); if (module_init) - module_init(ec); + module_init(ec, argc, argv, config_file); p = end; while (*p == ',') p++; @@ -3429,14 +3431,6 @@ int main(int argc, char *argv[]) sigaction(SIGSEGV, &segv_action, NULL); segv_compositor = ec; - - for (i = 1; i < argc; i++) - weston_log("fatal: unhandled option: %s\n", argv[i]); - if (argc > 1) { - ret = EXIT_FAILURE; - goto out; - } - free(config_file); ec->option_idle_time = idle_time; @@ -3444,11 +3438,18 @@ int main(int argc, char *argv[]) setenv("WAYLAND_DISPLAY", socket_name, 1); - if (load_modules(ec, modules) < 0) + if (load_modules(ec, modules, &argc, argv, config_file) < 0) goto out; - if (load_modules(ec, option_modules) < 0) + if (load_modules(ec, option_modules, &argc, argv, config_file) < 0) goto out; + for (i = 1; i < argc; i++) + weston_log("fatal: unhandled option: %s\n", argv[i]); + if (argc > 1) { + ret = EXIT_FAILURE; + goto out; + } + if (wl_display_add_socket(display, socket_name)) { weston_log("fatal: failed to add socket: %m\n"); ret = EXIT_FAILURE; diff --git a/src/compositor.h b/src/compositor.h index 11afbb9..a45fdf6 100644 --- a/src/compositor.h +++ b/src/compositor.h @@ -843,7 +843,8 @@ backend_init(struct wl_display *display, int *argc, char *argv[], const char *config_file); int -module_init(struct weston_compositor *compositor); +module_init(struct weston_compositor *compositor, + int *argc, char *argv[], const char *config_file); void weston_transformed_coord(int width, int height, diff --git a/src/shell.c b/src/shell.c index af802a5..a4511fd 100644 --- a/src/shell.c +++ b/src/shell.c @@ -345,9 +345,8 @@ get_animation_type(char *animation) } static void -shell_configuration(struct desktop_shell *shell) +shell_configuration(struct desktop_shell *shell, const char *config_file) { - char *config_file; char *path = NULL; int duration = 60; unsigned int num_workspaces = DEFAULT_NUM_WORKSPACES; @@ -371,9 +370,7 @@ shell_configuration(struct desktop_shell *shell) { "screensaver", saver_keys, ARRAY_LENGTH(saver_keys), NULL }, }; - config_file = config_file_path("weston.ini"); parse_config_file(config_file, cs, ARRAY_LENGTH(cs), shell); - free(config_file); shell->screensaver.path = path; shell->screensaver.duration = duration; @@ -3957,7 +3954,8 @@ shell_add_bindings(struct weston_compositor *ec, struct desktop_shell *shell) } WL_EXPORT int -module_init(struct weston_compositor *ec) +module_init(struct weston_compositor *ec, + int *argc, char *argv[], const char *config_file) { struct weston_seat *seat; struct desktop_shell *shell; @@ -4002,7 +4000,7 @@ module_init(struct weston_compositor *ec) wl_array_init(&shell->workspaces.array); wl_list_init(&shell->workspaces.client_list); - shell_configuration(shell); + shell_configuration(shell, config_file); for (i = 0; i < shell->workspaces.num; i++) { pws = wl_array_add(&shell->workspaces.array, sizeof *pws); diff --git a/src/tablet-shell.c b/src/tablet-shell.c index 9e88e27..57226e8 100644 --- a/src/tablet-shell.c +++ b/src/tablet-shell.c @@ -531,7 +531,8 @@ tablet_shell_destroy(struct wl_listener *listener, void *data) } WL_EXPORT int -module_init(struct weston_compositor *compositor) +module_init(struct weston_compositor *compositor, + int *argc, char *argv[], const char *config_file) { struct tablet_shell *shell; struct wl_event_loop *loop; diff --git a/src/xwayland/launcher.c b/src/xwayland/launcher.c index ddd9640..e50177e 100644 --- a/src/xwayland/launcher.c +++ b/src/xwayland/launcher.c @@ -315,7 +315,9 @@ weston_xserver_destroy(struct wl_listener *l, void *data) } WL_EXPORT int -module_init(struct weston_compositor *compositor) +module_init(struct weston_compositor *compositor, + int *argc, char *argv[], const char *config_file) + { struct wl_display *display = compositor->wl_display; struct weston_xserver *wxs; diff --git a/tests/surface-global-test.c b/tests/surface-global-test.c index 5908f60..5bafa08 100644 --- a/tests/surface-global-test.c +++ b/tests/surface-global-test.c @@ -67,7 +67,8 @@ surface_to_from_global(void *data) } WL_EXPORT int -module_init(struct weston_compositor *compositor) +module_init(struct weston_compositor *compositor, + int *argc, char *argv[], const char *config_file) { struct wl_event_loop *loop; diff --git a/tests/surface-test.c b/tests/surface-test.c index b41c63f..8157e33 100644 --- a/tests/surface-test.c +++ b/tests/surface-test.c @@ -50,7 +50,8 @@ surface_transform(void *data) } WL_EXPORT int -module_init(struct weston_compositor *compositor) +module_init(struct weston_compositor *compositor, + int *argc, char *argv[], const char *config_file) { struct wl_event_loop *loop; diff --git a/tests/weston-test.c b/tests/weston-test.c index a9def4b..83a7124 100644 --- a/tests/weston-test.c +++ b/tests/weston-test.c @@ -224,7 +224,8 @@ idle_launch_client(void *data) } WL_EXPORT int -module_init(struct weston_compositor *ec) +module_init(struct weston_compositor *ec, + int *argc, char *argv[], const char *config_file) { struct weston_test *test; struct wl_event_loop *loop; -- 2.7.4