Skip to content

Commit 1c4d905

Browse files
committed
commands/create_output: Add name argument
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.
1 parent dd063a0 commit 1c4d905

File tree

1 file changed

+21
-11
lines changed

1 file changed

+21
-11
lines changed

sway/commands/create_output.c

+21-11
Original file line numberDiff line numberDiff line change
@@ -5,27 +5,26 @@
55
#if WLR_HAS_X11_BACKEND
66
#include <wlr/backend/x11.h>
77
#endif
8+
#include <wlr/types/wlr_output.h>
89
#include "sway/commands.h"
10+
#include "sway/output.h"
911
#include "sway/server.h"
1012
#include "log.h"
1113

1214
static void create_output(struct wlr_backend *backend, void *data) {
13-
bool *done = data;
14-
if (*done) {
15+
struct wlr_output **result = data;
16+
if (*result) {
1517
return;
1618
}
1719

1820
if (wlr_backend_is_wl(backend)) {
19-
wlr_wl_output_create(backend);
20-
*done = true;
21+
*result = wlr_wl_output_create(backend);
2122
} else if (wlr_backend_is_headless(backend)) {
22-
wlr_headless_add_output(backend, 1920, 1080);
23-
*done = true;
23+
*result = wlr_headless_add_output(backend, 1920, 1080);
2424
}
2525
#if WLR_HAS_X11_BACKEND
2626
else if (wlr_backend_is_x11(backend)) {
27-
wlr_x11_output_create(backend);
28-
*done = true;
27+
*result = wlr_x11_output_create(backend);
2928
}
3029
#endif
3130
}
@@ -37,13 +36,24 @@ struct cmd_results *cmd_create_output(int argc, char **argv) {
3736
sway_assert(wlr_backend_is_multi(server.backend),
3837
"Expected a multi backend");
3938

40-
bool done = false;
41-
wlr_multi_for_each_backend(server.backend, create_output, &done);
39+
struct cmd_results *error = NULL;
40+
if ((error = checkarg(argc, "create_output", EXPECTED_AT_MOST, 1))) {
41+
return error;
42+
}
43+
if (argc > 0 && all_output_by_name_or_id(argv[0])) {
44+
return cmd_results_new(CMD_INVALID, "Output name already in use");
45+
}
46+
struct wlr_output *result = NULL;
47+
wlr_multi_for_each_backend(server.backend, create_output, &result);
4248

43-
if (!done) {
49+
if (!result) {
4450
return cmd_results_new(CMD_INVALID,
4551
"Can only create outputs for Wayland, X11 or headless backends");
4652
}
4753

54+
if (argc > 0) {
55+
wlr_output_set_name(result, argv[0]);
56+
}
57+
4858
return cmd_results_new(CMD_SUCCESS, NULL);
4959
}

0 commit comments

Comments
 (0)