diff --git a/include/sway/server.h b/include/sway/server.h index 76a054764..d497e1328 100644 --- a/include/sway/server.h +++ b/include/sway/server.h @@ -33,6 +33,7 @@ struct sway_server { struct wlr_xwayland *xwayland; struct wl_listener xwayland_surface; + struct wl_listener xwayland_ready; struct wlr_wl_shell *wl_shell; struct wl_listener wl_shell_surface; diff --git a/sway/server.c b/sway/server.c index 365094ef2..b5eb510be 100644 --- a/sway/server.c +++ b/sway/server.c @@ -11,9 +11,27 @@ // TODO WLR: make Xwayland optional #include #include +#include "sway/commands.h" +#include "sway/config.h" #include "sway/server.h" #include "sway/input/input-manager.h" +static void server_ready(struct wl_listener *listener, void *data) { + wlr_log(L_DEBUG, "Compositor is ready, executing cmds in queue"); + // Execute commands until there are none left + config->active = true; + while (config->cmd_queue->length) { + char *line = config->cmd_queue->items[0]; + struct cmd_results *res = handle_command(line); + if (res->status != CMD_SUCCESS) { + wlr_log(L_ERROR, "Error on line '%s': %s", line, res->error); + } + free_cmd_results(res); + free(line); + list_del(config->cmd_queue, 0); + } +} + bool server_init(struct sway_server *server) { wlr_log(L_DEBUG, "Initializing Wayland server"); @@ -48,6 +66,10 @@ bool server_init(struct sway_server *server) { wl_signal_add(&server->xwayland->events.new_surface, &server->xwayland_surface); server->xwayland_surface.notify = handle_xwayland_surface; + wl_signal_add(&server->xwayland->events.ready, + &server->xwayland_ready); + // TODO: call server_ready now if xwayland is not enabled + server->xwayland_ready.notify = server_ready; server->wl_shell = wlr_wl_shell_create(server->wl_display); wl_signal_add(&server->wl_shell->events.new_surface,