diff --git a/glonkers.c b/glonkers.c index 2acd567..8693fa5 100644 --- a/glonkers.c +++ b/glonkers.c @@ -14,15 +14,30 @@ int main(int argc, char *argv[]) { char *shader_path = NULL; int output_type = OUTPUT_WINDOW; + bool currently_reading_output = false; + char **output_list = NULL; + int output_count = 0; // syntax: --window for a normal window or --layer for a wallpaper for (int i = 1; i < argc; i++) { if (strcmp("--window", argv[i]) == 0) { output_type = OUTPUT_WINDOW; + currently_reading_output = false; } else if (strcmp("--layer", argv[i]) == 0) { output_type = OUTPUT_LAYER; + currently_reading_output = false; } - else { + else if (strcmp("--output", argv[i]) == 0) { + output_list = &argv[i]; + currently_reading_output = true; + } + else if (strcmp("--", argv[i]) == 0) { + currently_reading_output = false; + } + else if (currently_reading_output) { + output_count++; + } + else if (!currently_reading_output) { // path to fragment shader if (shader_path != NULL) { fprintf(stderr, "tried supplying '%s' as a shader file while one has already been selected\n", argv[i]); @@ -36,7 +51,7 @@ int main(int argc, char *argv[]) { return 1; } - struct client_state *state = wayland_init(output_type); + struct client_state *state = wayland_init(output_type, output_list, output_count); Renderer renderer = new_renderer(); diff --git a/wayland.c b/wayland.c index 4fe4c7e..d2b2fba 100644 --- a/wayland.c +++ b/wayland.c @@ -507,7 +507,7 @@ static const struct wl_registry_listener wl_registry_listener = { }; /// Initializes wayland and creates an opengl context -struct client_state* wayland_init(int output_type) { +struct client_state* wayland_init(int output_type, char *output_list[], int output_list_len) { struct client_state *state = malloc(sizeof(struct client_state)); state->running = 1; state->output_type = output_type; diff --git a/wayland.h b/wayland.h index 8639a30..21e7e57 100644 --- a/wayland.h +++ b/wayland.h @@ -31,7 +31,8 @@ struct event { } data; }; -struct client_state* wayland_init(int output_type); +/// output_list: if not NULL, only select outputs should be drawn to +struct client_state* wayland_init(int output_type, char *output_list[], int output_list_len); void commit(struct client_state *state); struct event wait_for_event(struct client_state *state); void swap_buffers(struct client_state *state, struct surface *surface);