diff options
Diffstat (limited to 'sway/commands/split.c')
-rw-r--r-- | sway/commands/split.c | 65 |
1 files changed, 27 insertions, 38 deletions
diff --git a/sway/commands/split.c b/sway/commands/split.c index ca116aef..ab8565a9 100644 --- a/sway/commands/split.c +++ b/sway/commands/split.c | |||
@@ -8,58 +8,33 @@ | |||
8 | #include "sway/input/seat.h" | 8 | #include "sway/input/seat.h" |
9 | #include "log.h" | 9 | #include "log.h" |
10 | 10 | ||
11 | static struct cmd_results *_do_split(int argc, char **argv, int layout) { | 11 | static struct cmd_results *do_split(int layout) { |
12 | char *name = layout == L_VERT ? "splitv" : | 12 | struct sway_container *con = config->handler_context.current_container; |
13 | layout == L_HORIZ ? "splith" : "split"; | 13 | struct sway_container *parent = container_split(con, layout); |
14 | struct cmd_results *error = NULL; | ||
15 | if (config->reading) { | ||
16 | return cmd_results_new(CMD_FAILURE, name, | ||
17 | "Can't be used in config file."); | ||
18 | } | ||
19 | if (!config->active) { | ||
20 | return cmd_results_new(CMD_FAILURE, name, | ||
21 | "Can only be used when sway is running."); | ||
22 | } | ||
23 | if ((error = checkarg(argc, name, EXPECTED_EQUAL_TO, 0))) { | ||
24 | return error; | ||
25 | } | ||
26 | |||
27 | struct sway_container *focused = config->handler_context.current_container; | ||
28 | struct sway_container *parent = container_split(focused, layout); | ||
29 | arrange_windows(parent, -1, -1); | 14 | arrange_windows(parent, -1, -1); |
30 | 15 | ||
31 | // TODO borders: update borders | ||
32 | |||
33 | return cmd_results_new(CMD_SUCCESS, NULL, NULL); | 16 | return cmd_results_new(CMD_SUCCESS, NULL, NULL); |
34 | } | 17 | } |
35 | 18 | ||
36 | struct cmd_results *cmd_split(int argc, char **argv) { | 19 | struct cmd_results *cmd_split(int argc, char **argv) { |
37 | struct cmd_results *error = NULL; | 20 | struct cmd_results *error = NULL; |
38 | if (config->reading) { | ||
39 | return cmd_results_new(CMD_FAILURE, "split", | ||
40 | "Can't be used in config file."); | ||
41 | } | ||
42 | if (!config->active) { | ||
43 | return cmd_results_new(CMD_FAILURE, "split", | ||
44 | "Can only be used when sway is running."); | ||
45 | } | ||
46 | if ((error = checkarg(argc, "split", EXPECTED_EQUAL_TO, 1))) { | 21 | if ((error = checkarg(argc, "split", EXPECTED_EQUAL_TO, 1))) { |
47 | return error; | 22 | return error; |
48 | } | 23 | } |
49 | if (strcasecmp(argv[0], "v") == 0 || strcasecmp(argv[0], "vertical") == 0) { | 24 | if (strcasecmp(argv[0], "v") == 0 || strcasecmp(argv[0], "vertical") == 0) { |
50 | _do_split(argc - 1, argv + 1, L_VERT); | 25 | do_split(L_VERT); |
51 | } else if (strcasecmp(argv[0], "h") == 0 || | 26 | } else if (strcasecmp(argv[0], "h") == 0 || |
52 | strcasecmp(argv[0], "horizontal") == 0) { | 27 | strcasecmp(argv[0], "horizontal") == 0) { |
53 | _do_split(argc - 1, argv + 1, L_HORIZ); | 28 | do_split(L_HORIZ); |
54 | } else if (strcasecmp(argv[0], "t") == 0 || | 29 | } else if (strcasecmp(argv[0], "t") == 0 || |
55 | strcasecmp(argv[0], "toggle") == 0) { | 30 | strcasecmp(argv[0], "toggle") == 0) { |
56 | struct sway_container *focused = | 31 | struct sway_container *focused = |
57 | config->handler_context.current_container; | 32 | config->handler_context.current_container; |
58 | 33 | ||
59 | if (focused->parent->layout == L_VERT) { | 34 | if (focused->parent->layout == L_VERT) { |
60 | _do_split(argc - 1, argv + 1, L_HORIZ); | 35 | do_split(L_HORIZ); |
61 | } else { | 36 | } else { |
62 | _do_split(argc - 1, argv + 1, L_VERT); | 37 | do_split(L_VERT); |
63 | } | 38 | } |
64 | } else { | 39 | } else { |
65 | error = cmd_results_new(CMD_FAILURE, "split", | 40 | error = cmd_results_new(CMD_FAILURE, "split", |
@@ -70,18 +45,32 @@ struct cmd_results *cmd_split(int argc, char **argv) { | |||
70 | } | 45 | } |
71 | 46 | ||
72 | struct cmd_results *cmd_splitv(int argc, char **argv) { | 47 | struct cmd_results *cmd_splitv(int argc, char **argv) { |
73 | return _do_split(argc, argv, L_VERT); | 48 | struct cmd_results *error = NULL; |
49 | if ((error = checkarg(argc, "splitv", EXPECTED_EQUAL_TO, 0))) { | ||
50 | return error; | ||
51 | } | ||
52 | return do_split(L_VERT); | ||
74 | } | 53 | } |
75 | 54 | ||
76 | struct cmd_results *cmd_splith(int argc, char **argv) { | 55 | struct cmd_results *cmd_splith(int argc, char **argv) { |
77 | return _do_split(argc, argv, L_HORIZ); | 56 | struct cmd_results *error = NULL; |
57 | if ((error = checkarg(argc, "splitv", EXPECTED_EQUAL_TO, 0))) { | ||
58 | return error; | ||
59 | } | ||
60 | return do_split(L_HORIZ); | ||
78 | } | 61 | } |
79 | 62 | ||
80 | struct cmd_results *cmd_splitt(int argc, char **argv) { | 63 | struct cmd_results *cmd_splitt(int argc, char **argv) { |
81 | struct sway_container *focused = config->handler_context.current_container; | 64 | struct cmd_results *error = NULL; |
82 | if (focused->parent->layout == L_VERT) { | 65 | if ((error = checkarg(argc, "splitv", EXPECTED_EQUAL_TO, 0))) { |
83 | return _do_split(argc, argv, L_HORIZ); | 66 | return error; |
67 | } | ||
68 | |||
69 | struct sway_container *con = config->handler_context.current_container; | ||
70 | |||
71 | if (con->parent->layout == L_VERT) { | ||
72 | return do_split(L_HORIZ); | ||
84 | } else { | 73 | } else { |
85 | return _do_split(argc, argv, L_VERT); | 74 | return do_split(L_VERT); |
86 | } | 75 | } |
87 | } | 76 | } |