summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLibravatar Drew DeVault <sir@cmpwn.com>2016-03-31 07:43:05 -0400
committerLibravatar Drew DeVault <sir@cmpwn.com>2016-03-31 07:43:05 -0400
commitf0b33df3848e46a013aaab184364a46d3c35e1c7 (patch)
tree07a3e095719d9bfbd2206e17e33e4abade2bf86d
parentMerge pull request #558 from crondog/swaybarexit (diff)
parentAdd cmds new_window and new_float (diff)
downloadsway-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.h2
-rw-r--r--sway/commands.c107
-rw-r--r--sway/config.c2
-rw-r--r--sway/container.c10
-rw-r--r--sway/sway.5.txt17
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;
66static sway_cmd cmd_mode; 66static sway_cmd cmd_mode;
67static sway_cmd cmd_mouse_warping; 67static sway_cmd cmd_mouse_warping;
68static sway_cmd cmd_move; 68static sway_cmd cmd_move;
69static sway_cmd cmd_new_float;
70static sway_cmd cmd_new_window;
69static sway_cmd cmd_orientation; 71static sway_cmd cmd_orientation;
70static sway_cmd cmd_output; 72static sway_cmd cmd_output;
71static sway_cmd cmd_reload; 73static sway_cmd cmd_reload;
@@ -350,24 +352,21 @@ static struct cmd_results *cmd_bindcode(int argc, char **argv) {
350 352
351static struct cmd_results *cmd_border(int argc, char **argv) { 353static 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
937static 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
976static 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
942static struct cmd_results *cmd_orientation(int argc, char **argv) { 1015static 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.
44They are expected to be used with **bindsym** or at runtime through **swaymsg**(1). 44They 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.