diff options
author | Drew DeVault <sir@cmpwn.com> | 2016-03-31 07:43:05 -0400 |
---|---|---|
committer | Drew DeVault <sir@cmpwn.com> | 2016-03-31 07:43:05 -0400 |
commit | f0b33df3848e46a013aaab184364a46d3c35e1c7 (patch) | |
tree | 07a3e095719d9bfbd2206e17e33e4abade2bf86d | |
parent | Merge pull request #558 from crondog/swaybarexit (diff) | |
parent | Add cmds new_window and new_float (diff) | |
download | sway-f0b33df3848e46a013aaab184364a46d3c35e1c7.tar.gz sway-f0b33df3848e46a013aaab184364a46d3c35e1c7.tar.zst sway-f0b33df3848e46a013aaab184364a46d3c35e1c7.zip |
Merge pull request #560 from mikkeloscar/add-new_window-new_float
Add cmds new_window and new_float
-rw-r--r-- | include/config.h | 2 | ||||
-rw-r--r-- | sway/commands.c | 107 | ||||
-rw-r--r-- | sway/config.c | 2 | ||||
-rw-r--r-- | sway/container.c | 10 | ||||
-rw-r--r-- | sway/sway.5.txt | 17 |
5 files changed, 114 insertions, 24 deletions
diff --git a/include/config.h b/include/config.h index 0ef8c5bf..d7e96e74 100644 --- a/include/config.h +++ b/include/config.h | |||
@@ -213,7 +213,9 @@ struct sway_config { | |||
213 | const char *current_config; | 213 | const char *current_config; |
214 | 214 | ||
215 | enum swayc_border_types border; | 215 | enum swayc_border_types border; |
216 | enum swayc_border_types floating_border; | ||
216 | int border_thickness; | 217 | int border_thickness; |
218 | int floating_border_thickness; | ||
217 | enum edge_border_types hide_edge_borders; | 219 | enum edge_border_types hide_edge_borders; |
218 | 220 | ||
219 | // border colors | 221 | // border colors |
diff --git a/sway/commands.c b/sway/commands.c index 381c0133..3cc84062 100644 --- a/sway/commands.c +++ b/sway/commands.c | |||
@@ -66,6 +66,8 @@ static sway_cmd cmd_log_colors; | |||
66 | static sway_cmd cmd_mode; | 66 | static sway_cmd cmd_mode; |
67 | static sway_cmd cmd_mouse_warping; | 67 | static sway_cmd cmd_mouse_warping; |
68 | static sway_cmd cmd_move; | 68 | static sway_cmd cmd_move; |
69 | static sway_cmd cmd_new_float; | ||
70 | static sway_cmd cmd_new_window; | ||
69 | static sway_cmd cmd_orientation; | 71 | static sway_cmd cmd_orientation; |
70 | static sway_cmd cmd_output; | 72 | static sway_cmd cmd_output; |
71 | static sway_cmd cmd_reload; | 73 | static sway_cmd cmd_reload; |
@@ -350,24 +352,21 @@ static struct cmd_results *cmd_bindcode(int argc, char **argv) { | |||
350 | 352 | ||
351 | static struct cmd_results *cmd_border(int argc, char **argv) { | 353 | static struct cmd_results *cmd_border(int argc, char **argv) { |
352 | struct cmd_results *error = NULL; | 354 | struct cmd_results *error = NULL; |
355 | if (!config->active) { | ||
356 | return cmd_results_new(CMD_FAILURE, "border", "Can only be used when sway is running."); | ||
357 | } | ||
353 | if ((error = checkarg(argc, "border", EXPECTED_AT_LEAST, 1))) { | 358 | if ((error = checkarg(argc, "border", EXPECTED_AT_LEAST, 1))) { |
354 | return error; | 359 | return error; |
355 | } | 360 | } |
356 | 361 | ||
357 | if (argc > 2) { | 362 | if (argc > 2) { |
358 | return cmd_results_new(CMD_FAILURE, "border", | 363 | return cmd_results_new(CMD_INVALID, "border", |
359 | "Expected 'border <normal|pixel|none|toggle> [<n>]"); | 364 | "Expected 'border <normal|pixel|none|toggle> [<n>]"); |
360 | } | 365 | } |
361 | 366 | ||
362 | enum swayc_border_types border = config->border; | 367 | swayc_t *view = get_focused_view(&root_container); |
363 | int thickness = config->border_thickness; | 368 | enum swayc_border_types border = view->border_type; |
364 | 369 | int thickness = view->border_thickness; | |
365 | swayc_t *view = NULL; | ||
366 | if (config->active) { | ||
367 | view = get_focused_view(&root_container); | ||
368 | border = view->border_type; | ||
369 | thickness = view->border_thickness; | ||
370 | } | ||
371 | 370 | ||
372 | if (strcasecmp(argv[0], "none") == 0) { | 371 | if (strcasecmp(argv[0], "none") == 0) { |
373 | border = B_NONE; | 372 | border = B_NONE; |
@@ -388,11 +387,10 @@ static struct cmd_results *cmd_border(int argc, char **argv) { | |||
388 | break; | 387 | break; |
389 | } | 388 | } |
390 | } else { | 389 | } else { |
391 | return cmd_results_new(CMD_FAILURE, "border", | 390 | return cmd_results_new(CMD_INVALID, "border", |
392 | "Expected 'border <normal|pixel|none|toggle>"); | 391 | "Expected 'border <normal|pixel|none|toggle>"); |
393 | } | 392 | } |
394 | 393 | ||
395 | |||
396 | if (argc == 2 && (border == B_NORMAL || border == B_PIXEL)) { | 394 | if (argc == 2 && (border == B_NORMAL || border == B_PIXEL)) { |
397 | thickness = (int)strtol(argv[1], NULL, 10); | 395 | thickness = (int)strtol(argv[1], NULL, 10); |
398 | if (errno == ERANGE || thickness < 0) { | 396 | if (errno == ERANGE || thickness < 0) { |
@@ -401,13 +399,10 @@ static struct cmd_results *cmd_border(int argc, char **argv) { | |||
401 | } | 399 | } |
402 | } | 400 | } |
403 | 401 | ||
404 | if (config->active && view) { | 402 | if (view) { |
405 | view->border_type = border; | 403 | view->border_type = border; |
406 | view->border_thickness = thickness; | 404 | view->border_thickness = thickness; |
407 | update_geometry(view); | 405 | update_geometry(view); |
408 | } else { | ||
409 | config->border = border; | ||
410 | config->border_thickness = thickness; | ||
411 | } | 406 | } |
412 | 407 | ||
413 | return cmd_results_new(CMD_SUCCESS, NULL, NULL); | 408 | return cmd_results_new(CMD_SUCCESS, NULL, NULL); |
@@ -939,6 +934,84 @@ static struct cmd_results *cmd_move(int argc, char **argv) { | |||
939 | return cmd_results_new(CMD_SUCCESS, NULL, NULL); | 934 | return cmd_results_new(CMD_SUCCESS, NULL, NULL); |
940 | } | 935 | } |
941 | 936 | ||
937 | static struct cmd_results *cmd_new_float(int argc, char **argv) { | ||
938 | struct cmd_results *error = NULL; | ||
939 | if ((error = checkarg(argc, "new_float", EXPECTED_AT_LEAST, 1))) { | ||
940 | return error; | ||
941 | } | ||
942 | |||
943 | if (argc > 2) { | ||
944 | return cmd_results_new(CMD_INVALID, "new_float", | ||
945 | "Expected 'new_float <normal|none|pixel> [<n>]"); | ||
946 | } | ||
947 | |||
948 | enum swayc_border_types border = config->floating_border; | ||
949 | int thickness = config->floating_border_thickness; | ||
950 | |||
951 | if (strcasecmp(argv[0], "none") == 0) { | ||
952 | border = B_NONE; | ||
953 | } else if (strcasecmp(argv[0], "normal") == 0) { | ||
954 | border = B_NORMAL; | ||
955 | } else if (strcasecmp(argv[0], "pixel") == 0) { | ||
956 | border = B_PIXEL; | ||
957 | } else { | ||
958 | return cmd_results_new(CMD_INVALID, "new_float", | ||
959 | "Expected 'border <normal|none|pixel>"); | ||
960 | } | ||
961 | |||
962 | if (argc == 2 && (border == B_NORMAL || border == B_PIXEL)) { | ||
963 | thickness = (int)strtol(argv[1], NULL, 10); | ||
964 | if (errno == ERANGE || thickness < 0) { | ||
965 | errno = 0; | ||
966 | return cmd_results_new(CMD_INVALID, "new_float", "Number is out out of range."); | ||
967 | } | ||
968 | } | ||
969 | |||
970 | config->floating_border = border; | ||
971 | config->floating_border_thickness = thickness; | ||
972 | |||
973 | return cmd_results_new(CMD_SUCCESS, NULL, NULL); | ||
974 | } | ||
975 | |||
976 | static struct cmd_results *cmd_new_window(int argc, char **argv) { | ||
977 | struct cmd_results *error = NULL; | ||
978 | if ((error = checkarg(argc, "new_window", EXPECTED_AT_LEAST, 1))) { | ||
979 | return error; | ||
980 | } | ||
981 | |||
982 | if (argc > 2) { | ||
983 | return cmd_results_new(CMD_INVALID, "new_window", | ||
984 | "Expected 'new_window <normal|none|pixel> [<n>]"); | ||
985 | } | ||
986 | |||
987 | enum swayc_border_types border = config->border; | ||
988 | int thickness = config->border_thickness; | ||
989 | |||
990 | if (strcasecmp(argv[0], "none") == 0) { | ||
991 | border = B_NONE; | ||
992 | } else if (strcasecmp(argv[0], "normal") == 0) { | ||
993 | border = B_NORMAL; | ||
994 | } else if (strcasecmp(argv[0], "pixel") == 0) { | ||
995 | border = B_PIXEL; | ||
996 | } else { | ||
997 | return cmd_results_new(CMD_INVALID, "new_window", | ||
998 | "Expected 'border <normal|none|pixel>"); | ||
999 | } | ||
1000 | |||
1001 | if (argc == 2 && (border == B_NORMAL || border == B_PIXEL)) { | ||
1002 | thickness = (int)strtol(argv[1], NULL, 10); | ||
1003 | if (errno == ERANGE || thickness < 0) { | ||
1004 | errno = 0; | ||
1005 | return cmd_results_new(CMD_INVALID, "new_window", "Number is out out of range."); | ||
1006 | } | ||
1007 | } | ||
1008 | |||
1009 | config->border = border; | ||
1010 | config->border_thickness = thickness; | ||
1011 | |||
1012 | return cmd_results_new(CMD_SUCCESS, NULL, NULL); | ||
1013 | } | ||
1014 | |||
942 | static struct cmd_results *cmd_orientation(int argc, char **argv) { | 1015 | static struct cmd_results *cmd_orientation(int argc, char **argv) { |
943 | struct cmd_results *error = NULL; | 1016 | struct cmd_results *error = NULL; |
944 | if (!config->reading) return cmd_results_new(CMD_FAILURE, "orientation", "Can only be used in config file."); | 1017 | if (!config->reading) return cmd_results_new(CMD_FAILURE, "orientation", "Can only be used in config file."); |
@@ -2160,6 +2233,8 @@ static struct cmd_handler handlers[] = { | |||
2160 | { "mode", cmd_mode }, | 2233 | { "mode", cmd_mode }, |
2161 | { "mouse_warping", cmd_mouse_warping }, | 2234 | { "mouse_warping", cmd_mouse_warping }, |
2162 | { "move", cmd_move }, | 2235 | { "move", cmd_move }, |
2236 | { "new_float", cmd_new_float }, | ||
2237 | { "new_window", cmd_new_window }, | ||
2163 | { "output", cmd_output }, | 2238 | { "output", cmd_output }, |
2164 | { "reload", cmd_reload }, | 2239 | { "reload", cmd_reload }, |
2165 | { "resize", cmd_resize }, | 2240 | { "resize", cmd_resize }, |
diff --git a/sway/config.c b/sway/config.c index f6241a3d..a917d348 100644 --- a/sway/config.c +++ b/sway/config.c | |||
@@ -187,7 +187,9 @@ static void config_defaults(struct sway_config *config) { | |||
187 | 187 | ||
188 | // borders | 188 | // borders |
189 | config->border = B_NORMAL; | 189 | config->border = B_NORMAL; |
190 | config->floating_border = B_NORMAL; | ||
190 | config->border_thickness = 2; | 191 | config->border_thickness = 2; |
192 | config->floating_border_thickness = 2; | ||
191 | config->hide_edge_borders = E_NONE; | 193 | config->hide_edge_borders = E_NONE; |
192 | 194 | ||
193 | // border colors | 195 | // border colors |
diff --git a/sway/container.c b/sway/container.c index 21a929b9..6b69d6b6 100644 --- a/sway/container.c +++ b/sway/container.c | |||
@@ -22,11 +22,8 @@ static swayc_t *new_swayc(enum swayc_types type) { | |||
22 | c->gaps = -1; | 22 | c->gaps = -1; |
23 | c->layout = L_NONE; | 23 | c->layout = L_NONE; |
24 | c->type = type; | 24 | c->type = type; |
25 | c->border_type = config->border; | ||
26 | c->border_thickness = config->border_thickness; | ||
27 | if (type != C_VIEW) { | 25 | if (type != C_VIEW) { |
28 | c->children = create_list(); | 26 | c->children = create_list(); |
29 | c->border_type = B_NONE; | ||
30 | } | 27 | } |
31 | return c; | 28 | return c; |
32 | } | 29 | } |
@@ -275,6 +272,9 @@ swayc_t *new_view(swayc_t *sibling, wlc_handle handle) { | |||
275 | view->height = 0; | 272 | view->height = 0; |
276 | view->desired_width = geometry.size.w; | 273 | view->desired_width = geometry.size.w; |
277 | view->desired_height = geometry.size.h; | 274 | view->desired_height = geometry.size.h; |
275 | // setup border | ||
276 | view->border_type = config->border; | ||
277 | view->border_thickness = config->border_thickness; | ||
278 | 278 | ||
279 | view->is_floating = false; | 279 | view->is_floating = false; |
280 | 280 | ||
@@ -319,6 +319,10 @@ swayc_t *new_floating_view(wlc_handle handle) { | |||
319 | view->desired_width = view->width; | 319 | view->desired_width = view->width; |
320 | view->desired_height = view->height; | 320 | view->desired_height = view->height; |
321 | 321 | ||
322 | // setup border | ||
323 | view->border_type = config->floating_border; | ||
324 | view->border_thickness = config->floating_border_thickness; | ||
325 | |||
322 | view->is_floating = true; | 326 | view->is_floating = true; |
323 | 327 | ||
324 | // Case of focused workspace, just create as child of it | 328 | // Case of focused workspace, just create as child of it |
diff --git a/sway/sway.5.txt b/sway/sway.5.txt index 2eb0276c..a2570dcd 100644 --- a/sway/sway.5.txt +++ b/sway/sway.5.txt | |||
@@ -44,13 +44,20 @@ The following commands cannot be used directly in the configuration file. | |||
44 | They are expected to be used with **bindsym** or at runtime through **swaymsg**(1). | 44 | They are expected to be used with **bindsym** or at runtime through **swaymsg**(1). |
45 | 45 | ||
46 | **border** <normal|pixel> [<n>]:: | 46 | **border** <normal|pixel> [<n>]:: |
47 | Set border style for windows. _normal_ includes a border of thickness _n_ and | 47 | Set border style for focused window. _normal_ includes a border of thickness |
48 | a title bar. _pixel_ is just the border without title bar. Default is _normal_ | 48 | _n_ and a title bar. _pixel_ is just the border without title bar. Default is |
49 | with border thickness 2. | 49 | _normal_ with border thickness 2. |
50 | 50 | ||
51 | **border** <none|toggle>:: | 51 | **border** <none|toggle>:: |
52 | Set border style to _none_ or _toggle_ between the available border styles: | 52 | Set border style for focused window to _none_ or _toggle_ between the |
53 | _normal_, _pixel_, _none_. | 53 | available border styles: _normal_, _pixel_, _none_. |
54 | |||
55 | **new_window** <normal|none|pixel> [<n>]:: | ||
56 | Set default border style for new windows. | ||
57 | |||
58 | **new_float** <normal|none|pixel> [<n>]:: | ||
59 | Set default border style for new floating windows. This does only apply to | ||
60 | windows that are spawned in floating mode. | ||
54 | 61 | ||
55 | **exit**:: | 62 | **exit**:: |
56 | Exit sway and end your Wayland session. | 63 | Exit sway and end your Wayland session. |