Skip to content

Commit

Permalink
commands/create_output: Add name argument
Browse files Browse the repository at this point in the history
Allow specifying a name to be set for the newly created output, which
avoids the need for traversing the output list to find out what was
created. This is particularly useful for reusing configuration.
  • Loading branch information
kennylevinsen committed Oct 15, 2024
1 parent dd063a0 commit 1c4d905
Showing 1 changed file with 21 additions and 11 deletions.
32 changes: 21 additions & 11 deletions sway/commands/create_output.c
Original file line number Diff line number Diff line change
Expand Up @@ -5,27 +5,26 @@
#if WLR_HAS_X11_BACKEND
#include <wlr/backend/x11.h>
#endif
#include <wlr/types/wlr_output.h>
#include "sway/commands.h"
#include "sway/output.h"
#include "sway/server.h"
#include "log.h"

static void create_output(struct wlr_backend *backend, void *data) {
bool *done = data;
if (*done) {
struct wlr_output **result = data;
if (*result) {
return;
}

if (wlr_backend_is_wl(backend)) {
wlr_wl_output_create(backend);
*done = true;
*result = wlr_wl_output_create(backend);
} else if (wlr_backend_is_headless(backend)) {
wlr_headless_add_output(backend, 1920, 1080);
*done = true;
*result = wlr_headless_add_output(backend, 1920, 1080);
}
#if WLR_HAS_X11_BACKEND
else if (wlr_backend_is_x11(backend)) {
wlr_x11_output_create(backend);
*done = true;
*result = wlr_x11_output_create(backend);
}
#endif
}
Expand All @@ -37,13 +36,24 @@ struct cmd_results *cmd_create_output(int argc, char **argv) {
sway_assert(wlr_backend_is_multi(server.backend),
"Expected a multi backend");

bool done = false;
wlr_multi_for_each_backend(server.backend, create_output, &done);
struct cmd_results *error = NULL;
if ((error = checkarg(argc, "create_output", EXPECTED_AT_MOST, 1))) {
return error;
}
if (argc > 0 && all_output_by_name_or_id(argv[0])) {
return cmd_results_new(CMD_INVALID, "Output name already in use");
}
struct wlr_output *result = NULL;
wlr_multi_for_each_backend(server.backend, create_output, &result);

if (!done) {
if (!result) {
return cmd_results_new(CMD_INVALID,
"Can only create outputs for Wayland, X11 or headless backends");
}

if (argc > 0) {
wlr_output_set_name(result, argv[0]);
}

return cmd_results_new(CMD_SUCCESS, NULL);
}

0 comments on commit 1c4d905

Please sign in to comment.