Pass argc and argv to modules

This lets modules parse options from the command line.
This commit is contained in:
Kristian Høgsberg 2013-02-20 15:37:49 -05:00
parent 4172f668e7
commit cb4685bbd1
8 changed files with 31 additions and 25 deletions

View file

@ -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;

View file

@ -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,

View file

@ -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);

View file

@ -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;

View file

@ -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;

View file

@ -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;

View file

@ -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;

View file

@ -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;