summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--ISSUE_TEMPLATE.md27
-rw-r--r--completions/fish/swayidle.fish3
-rw-r--r--completions/fish/swaylock.fish38
-rw-r--r--completions/fish/swaynag.fish29
-rw-r--r--include/sway/output.h2
-rw-r--r--meson.build2
-rw-r--r--sway/desktop/output.c13
-rw-r--r--sway/input/input-manager.c1
-rw-r--r--sway/input/seat.c2
-rw-r--r--sway/ipc-json.c23
-rw-r--r--sway/tree/output.c15
-rw-r--r--sway/tree/workspace.c10
-rw-r--r--swaylock/swaylock.1.scd26
13 files changed, 152 insertions, 39 deletions
diff --git a/ISSUE_TEMPLATE.md b/ISSUE_TEMPLATE.md
new file mode 100644
index 00000000..21f0a36e
--- /dev/null
+++ b/ISSUE_TEMPLATE.md
@@ -0,0 +1,27 @@
1Please include the following four components in your bug report: sway version, debug log, configuration (if applicable), and an explanation of steps taken to reproduce the issue.
2
3Obtain your version like so:
4
5 swaymsg -t get_version
6
7If this doesn't work, use:
8
9 sway -v
10
11* Sway Version:
12
13Obtain a debug log like so:
14
15 sway -d 2> ~/sway.log
16
17This will record information about sway's activity when it's running. Briefly reproduce your problem and exit sway. When preparing a debug log, brevity is important - start up sway, do the minimum work necessary to reproduce the error, then close sway.
18
19Upload the debug log to a pastebin service such as [gist.github.com](https://gist.github.com), and link to it below.
20
21* Debug Log:
22
23You should try to reproduce the issue with the default configuration. If you cannot, please reproduce with a minimal configuration, upload the config to a pastebin service, and link to it below.
24
25* Configuration File:
26
27Finally, explain the steps you took in plain English to reproduce the problem below.
diff --git a/completions/fish/swayidle.fish b/completions/fish/swayidle.fish
new file mode 100644
index 00000000..71279925
--- /dev/null
+++ b/completions/fish/swayidle.fish
@@ -0,0 +1,3 @@
1# swayidle
2complete -c swayidle -s h --description 'show help'
3complete -c swayidle -s d --description 'debug'
diff --git a/completions/fish/swaylock.fish b/completions/fish/swaylock.fish
index 965a22d2..99dff48f 100644
--- a/completions/fish/swaylock.fish
+++ b/completions/fish/swaylock.fish
@@ -1,11 +1,39 @@
1# swaylock(1) completion 1# swaylock(1) completion
2 2
3complete -c swaylock -s C -l config --description 'The config file to use. Default: $HOME/.swaylock/config, $XDG_CONFIG_HOME/swaylock/config, and SYSCONFDIR/swaylock/config.'
3complete -c swaylock -s h -l help --description "Show help message and quit." 4complete -c swaylock -s h -l help --description "Show help message and quit."
4complete -c swaylock -s c -l color --description "Turn the screen into the given color. If -i is used, this sets the background of the image into the given color. Defaults to white (ffffff), or transparent (00000000) if an image is in use."
5complete -c swaylock -s f -l daemonize --description "Fork into the background after spawning. Note: this is the default bahavior of i3lock." 5complete -c swaylock -s f -l daemonize --description "Fork into the background after spawning. Note: this is the default bahavior of i3lock."
6complete -c swaylock -s v -l version --description "Show the version number and quit."
7complete -c swaylock -s s -l socket --description "Use the specified socket path. Otherwise, swaymsg will as sway where the socket is (which is the value of $SWAYSOCK, then of $I350CK)."
8complete -c swaylock -s e -l ignore-empty-password --description 'When an empty password is provided by the user, do not validate it.'
9
10# Appearance
11complete -c swaylock -s u -l no-unlock-indicator --description "Disable the unlock indicator."
6complete -c swaylock -s i -l image --description "Display the given image, optionally on the given output. Use -c to set a background color." 12complete -c swaylock -s i -l image --description "Display the given image, optionally on the given output. Use -c to set a background color."
7complete -c swaylock -l scaling --description "Scaling mode for images: stretch, fill, fit, center, or tile." 13complete -c swaylock -s s -l scaling --description "Scaling mode for images: stretch, fill, fit, center, or tile."
8complete -c swaylock -s t -l tiling --description "Same as --scaling=tile." 14complete -c swaylock -s t -l tiling --description "Same as --scaling=tile."
9complete -c swaylock -s u -l no-unlock-indicator --description "Disable the unlock indicator." 15complete -c swaylock -s c -l color --description "Turn the screen into the given color. If -i is used, this sets the background of the image into the given color. Defaults to white (ffffff), or transparent (00000000) if an image is in use."
10complete -c swaylock -s v -l version --description "Show the version number and quit." 16complete -c swaylock -l bs-hl-color --description 'Sets the color of backspace highlight segments.'
11complete -c swaylock -l socket --description "Use the specified socket path. Othherwise, swaymsg will as sway where the socket is (which is the value of $SWAYSOCK, then of $I350CK)." 17complete -c swaylock -l font --description 'Sets the font of the text inside the indicator.'
18complete -c swaylock -l indicator-radius --description 'Sets the radius of the indicator to radius pixels. Default: 50'
19complete -c swaylock -l indicator-thickness --description 'Sets the thickness of the indicator to thickness pixels. Default: 10'
20complete -c swaylock -l inside-color --description 'Sets the color of the inside of the indicator when typing or idle.'
21complete -c swaylock -l inside-clear-color --description 'Sets the color of the inside of the indicator when cleared.'
22complete -c swaylock -l inside-ver-color --description 'Sets the color of the inside of the indicator when verifying.'
23complete -c swaylock -l inside-wrong-color --description 'Sets the color of the inside of the indicator when invalid.'
24complete -c swaylock -l key-hl-color --description 'Sets the color of key press highlight segments.'
25complete -c swaylock -l line-color --description 'Sets the color of the lines that separate the inside and outside of the indicator when typing or idle.'
26complete -c swaylock -l line-clear-color --description 'Sets the color of the lines that separate the inside and outside of the indicator when cleared.'
27complete -c swaylock -l line-ver-color --description 'Sets the color of the lines that separate the inside and outside of the indicator when verifying.'
28complete -c swaylock -l line-wrong-color --description 'Sets the color of the lines that separate the inside and outside of the indicator when invalid.'
29complete -c swaylock -s n -l line-uses-inside --description 'Use the color of the inside of the indicator for the line separating the inside and outside of the indicator.'
30complete -c swaylock -s r -l line-uses-ring --description 'Use the outer ring\'s color for the line separating the inside and outside of the indicator.'
31complete -c swaylock -l ring-color --description 'Sets the color of the outside of the indicator when typing or idle.'
32complete -c swaylock -l ring-clear-color --description 'Sets the color of the outside of the indicator when cleared.'
33complete -c swaylock -l ring-ver-color --description 'Sets the color of the outside of the indicator when verifying.'
34complete -c swaylock -l ring-wrong-color --description 'Sets the color of the outside of the indicator when invalid.'
35complete -c swaylock -l separator-color --description 'Sets the color of the lines that separate highlight segments.'
36complete -c swaylock -l text-color --description 'Sets the color of the text inside the indicator when typing or idle.'
37complete -c swaylock -l text-clear-color --description 'Sets the color of the text inside the indicator when cleared.'
38complete -c swaylock -l text-ver-color --description 'Sets the color of the text inside the indicator when verifying.'
39complete -c swaylock -l text-wrong-color --description 'Sets the color of the text inside the indicator when invalid.'
diff --git a/completions/fish/swaynag.fish b/completions/fish/swaynag.fish
new file mode 100644
index 00000000..784d7fad
--- /dev/null
+++ b/completions/fish/swaynag.fish
@@ -0,0 +1,29 @@
1# swaynag
2complete -c swaynag -s C -l config --description 'The config file to use. Default: $HOME/.swaylock/config, $XDG_CONFIG_HOME/swaylock/config, and SYSCONFDIR/swaylock/config.'
3complete -c swaynag -s d -l debug --description 'Enable debugging.'
4complete -c swaynag -s e -l edge --description 'Set the edge to use: top or bottom'
5complete -c swaynag -s f -l font --description 'Set the font to use.'
6complete -c swaynag -s h -l help --description 'Show help message and quit.'
7complete -c swaynag -s b -l button --description 'Create a button with a text and an action which is executed when pressed. Multiple buttons can be defined by providing the flag multiple times.'
8complete -c swaynag -s l -l detailed-message --description 'Read a detailed message from stdin. A button to toggle details will be added. Details are shown in a scrollable multi-line text area.'
9complete -c swaynag -s L -l detailed-button --description 'Set the text for the button that toggles details. This has no effect if there is not a detailed message. The default is "Toggle details".'
10complete -c swaynag -s m -l message --description 'Set the message text.'
11complete -c swaynag -s o -l output --description 'Set the output to use.'
12complete -c swaynag -s s -l dismiss-button --description 'Sets the text for the dismiss nagbar button. The default is "X".'
13complete -c swaynag -s t -l type --description 'Set the message type. Two types are created by default "error" and "warning". Custom types can be defined in the config file.'
14complete -c swaynag -s v -l version --description 'Show the version number and quit.'
15
16# Appearance
17complete -c swaynag -l background --description 'Set the color of the background.'
18complete -c swaynag -l border --description 'Set the color of the border.'
19complete -c swaynag -l border-bottom --description 'Set the color of the bottom border.'
20complete -c swaynag -l button-background --description 'Set the color for the background for buttons.'
21complete -c swaynag -l text --description 'Set the text color.'
22complete -c swaynag -l border-bottom-size --description 'Set the thickness of the bottom border.'
23complete -c swaynag -l message-padding --description 'Set the padding for the message.'
24complete -c swaynag -l details-border-size --description 'Set the thickness for the details border.'
25complete -c swaynag -l button-border-size --description 'Set the thickness for the button border.'
26complete -c swaynag -l button-gap --description 'Set the size of the gap between buttons.'
27complete -c swaynag -l button-dismiss-gap --description 'Set the size of the gap between the dismiss button and another button.'
28complete -c swaynag -l button-margin-right --description 'Set the margin from the right of the dismiss button to edge.'
29complete -c swaynag -l button-padding --description 'Set the padding for the button text.'
diff --git a/include/sway/output.h b/include/sway/output.h
index 369e62ce..22cb352a 100644
--- a/include/sway/output.h
+++ b/include/sway/output.h
@@ -86,6 +86,8 @@ void output_damage_whole_container(struct sway_output *output,
86 86
87struct sway_output *output_by_name(const char *name); 87struct sway_output *output_by_name(const char *name);
88 88
89struct sway_output *output_by_identifier(const char *identifier);
90
89void output_sort_workspaces(struct sway_output *output); 91void output_sort_workspaces(struct sway_output *output);
90 92
91struct output_config *output_find_config(struct sway_output *output); 93struct output_config *output_find_config(struct sway_output *output);
diff --git a/meson.build b/meson.build
index 1e2b53fa..6b23b4e3 100644
--- a/meson.build
+++ b/meson.build
@@ -244,8 +244,10 @@ endif
244if (get_option('fish-completions')) 244if (get_option('fish-completions'))
245 fish_files = files( 245 fish_files = files(
246 'completions/fish/sway.fish', 246 'completions/fish/sway.fish',
247 'completions/fish/swayidle.fish',
247 'completions/fish/swaylock.fish', 248 'completions/fish/swaylock.fish',
248 'completions/fish/swaymsg.fish', 249 'completions/fish/swaymsg.fish',
250 'completions/fish/swaynag.fish',
249 ) 251 )
250 fish_install_dir = datadir + '/fish/completions' 252 fish_install_dir = datadir + '/fish/completions'
251 253
diff --git a/sway/desktop/output.c b/sway/desktop/output.c
index ed9300bb..4d6c0336 100644
--- a/sway/desktop/output.c
+++ b/sway/desktop/output.c
@@ -39,6 +39,19 @@ struct sway_output *output_by_name(const char *name) {
39 return NULL; 39 return NULL;
40} 40}
41 41
42struct sway_output *output_by_identifier(const char *identifier) {
43 for (int i = 0; i < root->outputs->length; ++i) {
44 struct sway_output *output = root->outputs->items[i];
45 char output_identifier[128];
46 snprintf(output_identifier, sizeof(output_identifier), "%s %s %s", output->wlr_output->make,
47 output->wlr_output->model, output->wlr_output->serial);
48 if (strcasecmp(output_identifier, identifier) == 0) {
49 return output;
50 }
51 }
52 return NULL;
53}
54
42/** 55/**
43 * Rotate a child's position relative to a parent. The parent size is (pw, ph), 56 * Rotate a child's position relative to a parent. The parent size is (pw, ph),
44 * the child position is (*sx, *sy) and its size is (sw, sh). 57 * the child position is (*sx, *sy) and its size is (sw, sh).
diff --git a/sway/input/input-manager.c b/sway/input/input-manager.c
index 91c45dd1..68445d68 100644
--- a/sway/input/input-manager.c
+++ b/sway/input/input-manager.c
@@ -431,6 +431,7 @@ void input_manager_set_focus(struct sway_node *node) {
431 struct sway_seat *seat; 431 struct sway_seat *seat;
432 wl_list_for_each(seat, &server.input->seats, link) { 432 wl_list_for_each(seat, &server.input->seats, link) {
433 seat_set_focus(seat, node); 433 seat_set_focus(seat, node);
434 seat_consider_warp_to_focus(seat);
434 } 435 }
435} 436}
436 437
diff --git a/sway/input/seat.c b/sway/input/seat.c
index 9d4dc7af..64419afa 100644
--- a/sway/input/seat.c
+++ b/sway/input/seat.c
@@ -948,7 +948,7 @@ struct sway_node *seat_get_focus(struct sway_seat *seat) {
948 if (!seat->has_focus) { 948 if (!seat->has_focus) {
949 return NULL; 949 return NULL;
950 } 950 }
951 if (wl_list_length(&seat->focus_stack) == 0) { 951 if (wl_list_empty(&seat->focus_stack)) {
952 return NULL; 952 return NULL;
953 } 953 }
954 struct sway_seat_node *current = 954 struct sway_seat_node *current =
diff --git a/sway/ipc-json.c b/sway/ipc-json.c
index 2cd0cb2d..5c9b3e5a 100644
--- a/sway/ipc-json.c
+++ b/sway/ipc-json.c
@@ -229,10 +229,6 @@ static void ipc_json_describe_view(struct sway_container *c, json_object *object
229 json_object_object_add(object, "app_id", 229 json_object_object_add(object, "app_id",
230 app_id ? json_object_new_string(app_id) : NULL); 230 app_id ? json_object_new_string(app_id) : NULL);
231 231
232 const char *class = view_get_class(c->view);
233 json_object_object_add(object, "class",
234 class ? json_object_new_string(class) : NULL);
235
236 json_object *marks = json_object_new_array(); 232 json_object *marks = json_object_new_array();
237 list_t *view_marks = c->view->marks; 233 list_t *view_marks = c->view->marks;
238 for (int i = 0; i < view_marks->length; ++i) { 234 for (int i = 0; i < view_marks->length; ++i) {
@@ -269,13 +265,17 @@ static void ipc_json_describe_view(struct sway_container *c, json_object *object
269 265
270 json_object *window_props = json_object_new_object(); 266 json_object *window_props = json_object_new_object();
271 267
272 json_object_object_add(window_props, "class", 268 const char *class = view_get_class(c->view);
273 class ? json_object_new_string(class) : NULL); 269 if (class) {
270 json_object_object_add(window_props, "class", json_object_new_string(class));
271 }
274 const char *instance = view_get_instance(c->view); 272 const char *instance = view_get_instance(c->view);
275 json_object_object_add(window_props, "instance", 273 if (instance) {
276 instance ? json_object_new_string(instance) : NULL); 274 json_object_object_add(window_props, "instance", json_object_new_string(instance));
277 json_object_object_add(window_props, "title", 275 }
278 c->title ? json_object_new_string(c->title) : NULL); 276 if (c->title) {
277 json_object_object_add(window_props, "title", json_object_new_string(c->title));
278 }
279 279
280 // the transient_for key is always present in i3's output 280 // the transient_for key is always present in i3's output
281 uint32_t parent_id = view_get_x11_parent_id(c->view); 281 uint32_t parent_id = view_get_x11_parent_id(c->view);
@@ -284,8 +284,7 @@ static void ipc_json_describe_view(struct sway_container *c, json_object *object
284 284
285 const char *role = view_get_window_role(c->view); 285 const char *role = view_get_window_role(c->view);
286 if (role) { 286 if (role) {
287 json_object_object_add(window_props, "window_role", 287 json_object_object_add(window_props, "window_role", json_object_new_string(role));
288 json_object_new_string(role));
289 } 288 }
290 289
291 json_object_object_add(object, "window_properties", window_props); 290 json_object_object_add(object, "window_properties", window_props);
diff --git a/sway/tree/output.c b/sway/tree/output.c
index 9d523997..632501e1 100644
--- a/sway/tree/output.c
+++ b/sway/tree/output.c
@@ -65,7 +65,14 @@ void output_enable(struct sway_output *output, struct output_config *oc) {
65 return; 65 return;
66 } 66 }
67 struct wlr_output *wlr_output = output->wlr_output; 67 struct wlr_output *wlr_output = output->wlr_output;
68 size_t len = sizeof(output->layers) / sizeof(output->layers[0]);
69 for (size_t i = 0; i < len; ++i) {
70 wl_list_init(&output->layers[i]);
71 }
72 wl_signal_init(&output->events.destroy);
73
68 output->enabled = true; 74 output->enabled = true;
75 apply_output_config(oc, output);
69 list_add(root->outputs, output); 76 list_add(root->outputs, output);
70 77
71 output->lx = wlr_output->lx; 78 output->lx = wlr_output->lx;
@@ -91,14 +98,6 @@ void output_enable(struct sway_output *output, struct output_config *oc) {
91 ipc_event_workspace(NULL, ws, "init"); 98 ipc_event_workspace(NULL, ws, "init");
92 } 99 }
93 100
94 size_t len = sizeof(output->layers) / sizeof(output->layers[0]);
95 for (size_t i = 0; i < len; ++i) {
96 wl_list_init(&output->layers[i]);
97 }
98 wl_signal_init(&output->events.destroy);
99
100 apply_output_config(oc, output);
101
102 input_manager_configure_xcursor(); 101 input_manager_configure_xcursor();
103 102
104 wl_signal_add(&wlr_output->events.mode, &output->mode); 103 wl_signal_add(&wlr_output->events.mode, &output->mode);
diff --git a/sway/tree/workspace.c b/sway/tree/workspace.c
index 27e9ac7a..05cda5c0 100644
--- a/sway/tree/workspace.c
+++ b/sway/tree/workspace.c
@@ -35,6 +35,10 @@ struct sway_output *workspace_get_initial_output(const char *name) {
35 struct workspace_config *wsc = workspace_find_config(name); 35 struct workspace_config *wsc = workspace_find_config(name);
36 if (wsc && wsc->output) { 36 if (wsc && wsc->output) {
37 struct sway_output *output = output_by_name(wsc->output); 37 struct sway_output *output = output_by_name(wsc->output);
38 if (!output) {
39 output = output_by_identifier(wsc->output);
40 }
41
38 if (output) { 42 if (output) {
39 return output; 43 return output;
40 } 44 }
@@ -143,7 +147,11 @@ void workspace_consider_destroy(struct sway_workspace *ws) {
143static bool workspace_valid_on_output(const char *output_name, 147static bool workspace_valid_on_output(const char *output_name,
144 const char *ws_name) { 148 const char *ws_name) {
145 struct workspace_config *wsc = workspace_find_config(ws_name); 149 struct workspace_config *wsc = workspace_find_config(ws_name);
146 return !wsc || !wsc->output || strcmp(wsc->output, output_name) == 0; 150 char identifier[128];
151 struct sway_output *output = output_by_name(output_name);
152 output_get_identifier(identifier, sizeof(identifier), output);
153
154 return !wsc || !wsc->output || strcmp(wsc->output, output_name) == 0 || strcasecmp(identifier, output_name) == 0;
147} 155}
148 156
149static void workspace_name_from_binding(const struct sway_binding * binding, 157static void workspace_name_from_binding(const struct sway_binding * binding,
diff --git a/swaylock/swaylock.1.scd b/swaylock/swaylock.1.scd
index 3107124f..8ddc7d3a 100644
--- a/swaylock/swaylock.1.scd
+++ b/swaylock/swaylock.1.scd
@@ -21,20 +21,25 @@ Locks your Wayland session.
21 All leading dashes should be omitted and the equals sign is required for 21 All leading dashes should be omitted and the equals sign is required for
22 flags that take an argument. 22 flags that take an argument.
23 23
24*-c, --color* <rrggbb[aa]>
25 Turn the screen into the given color. If -i is used, this sets the
26 background of the image to the given color. Defaults to white (FFFFFF), or
27 transparent (00000000) if an image is in use.
28
29*-e, --ignore-empty-password* 24*-e, --ignore-empty-password*
30 When an empty password is provided by the user, do not validate it. 25 When an empty password is provided by the user, do not validate it.
31 26
32*-f, --daemonize* 27*-f, --daemonize*
33 Detach from the controlling terminal after locking. 28 Detach from the controlling terminal after locking.
34 29
30 Note: this is the default bahavior of i3lock.
31
35*-h, --help* 32*-h, --help*
36 Show help message and quit. 33 Show help message and quit.
37 34
35*-v, --version*
36 Show the version number and quit.
37
38# APPEARANCE
39
40*-u, --no-unlock-indicator*
41 Disable the unlock indicator.
42
38*-i, --image* [<output>:]<path> 43*-i, --image* [<output>:]<path>
39 Display the given image, optionally only on the given output. Use -c to set 44 Display the given image, optionally only on the given output. Use -c to set
40 a background color. 45 a background color.
@@ -45,13 +50,10 @@ Locks your Wayland session.
45*-t, --tiling* 50*-t, --tiling*
46 Same as --scaling=tile. 51 Same as --scaling=tile.
47 52
48*-u, --no-unlock-indicator* 53*-c, --color* <rrggbb[aa]>
49 Disable the unlock indicator. 54 Turn the screen into the given color. If -i is used, this sets the
50 55 background of the image to the given color. Defaults to white (FFFFFF), or
51*-v, --version* 56 transparent (00000000) if an image is in use.
52 Show the version number and quit.
53
54# APPEARANCE
55 57
56*--bs-hl-color* <rrggbb[aa]> 58*--bs-hl-color* <rrggbb[aa]>
57 Sets the color of backspace highlight segments. 59 Sets the color of backspace highlight segments.