aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-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/desktop/render.c7
-rw-r--r--sway/desktop/transaction.c4
-rw-r--r--sway/input/seat.c6
-rw-r--r--sway/tree/container.c5
-rw-r--r--sway/tree/view.c22
-rw-r--r--sway/tree/workspace.c10
-rw-r--r--swaylock/swaylock.1.scd26
13 files changed, 132 insertions, 35 deletions
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/desktop/render.c b/sway/desktop/render.c
index 1a72f752..c1fa0c8c 100644
--- a/sway/desktop/render.c
+++ b/sway/desktop/render.c
@@ -781,6 +781,13 @@ static void render_containers_stacked(struct sway_output *output,
781 781
782static void render_containers(struct sway_output *output, 782static void render_containers(struct sway_output *output,
783 pixman_region32_t *damage, struct parent_data *parent) { 783 pixman_region32_t *damage, struct parent_data *parent) {
784 if (parent->children->length == 1) {
785 struct sway_container *child = parent->children->items[0];
786 if (child->view) {
787 render_containers_linear(output, damage, parent);
788 return;
789 }
790 }
784 switch (parent->layout) { 791 switch (parent->layout) {
785 case L_NONE: 792 case L_NONE:
786 case L_HORIZ: 793 case L_HORIZ:
diff --git a/sway/desktop/transaction.c b/sway/desktop/transaction.c
index 955b05d6..c3efb210 100644
--- a/sway/desktop/transaction.c
+++ b/sway/desktop/transaction.c
@@ -301,7 +301,9 @@ static void transaction_apply(struct sway_transaction *transaction) {
301 if (root->outputs->length) { 301 if (root->outputs->length) {
302 struct sway_seat *seat; 302 struct sway_seat *seat;
303 wl_list_for_each(seat, &server.input->seats, link) { 303 wl_list_for_each(seat, &server.input->seats, link) {
304 cursor_rebase(seat->cursor); 304 if (seat->operation == OP_NONE) {
305 cursor_rebase(seat->cursor);
306 }
305 } 307 }
306 } 308 }
307} 309}
diff --git a/sway/input/seat.c b/sway/input/seat.c
index 577619a7..64419afa 100644
--- a/sway/input/seat.c
+++ b/sway/input/seat.c
@@ -185,7 +185,11 @@ static void handle_seat_node_destroy(struct wl_listener *listener, void *data) {
185 seat_set_focus(seat, next_focus); 185 seat_set_focus(seat, next_focus);
186 } else { 186 } else {
187 // Setting focus_inactive 187 // Setting focus_inactive
188 focus = seat_get_focus_inactive(seat, &root->node);
188 seat_set_raw_focus(seat, next_focus); 189 seat_set_raw_focus(seat, next_focus);
190 if (focus->type == N_CONTAINER) {
191 seat_set_raw_focus(seat, &focus->sway_container->workspace->node);
192 }
189 seat_set_raw_focus(seat, focus); 193 seat_set_raw_focus(seat, focus);
190 } 194 }
191} 195}
@@ -944,7 +948,7 @@ struct sway_node *seat_get_focus(struct sway_seat *seat) {
944 if (!seat->has_focus) { 948 if (!seat->has_focus) {
945 return NULL; 949 return NULL;
946 } 950 }
947 if (wl_list_length(&seat->focus_stack) == 0) { 951 if (wl_list_empty(&seat->focus_stack)) {
948 return NULL; 952 return NULL;
949 } 953 }
950 struct sway_seat_node *current = 954 struct sway_seat_node *current =
diff --git a/sway/tree/container.c b/sway/tree/container.c
index 58d3df34..8ab6ebf8 100644
--- a/sway/tree/container.c
+++ b/sway/tree/container.c
@@ -676,11 +676,8 @@ void container_set_floating(struct sway_container *container, bool enable) {
676 container_detach(container); 676 container_detach(container);
677 struct sway_container *reference = 677 struct sway_container *reference =
678 seat_get_focus_inactive_tiling(seat, workspace); 678 seat_get_focus_inactive_tiling(seat, workspace);
679 if (reference && reference->view) {
680 reference = reference->parent;
681 }
682 if (reference) { 679 if (reference) {
683 container_add_child(reference, container); 680 container_add_sibling(reference, container, 1);
684 container->width = reference->width; 681 container->width = reference->width;
685 container->height = reference->height; 682 container->height = reference->height;
686 } else { 683 } else {
diff --git a/sway/tree/view.c b/sway/tree/view.c
index 4bc9e0f3..cf67acbb 100644
--- a/sway/tree/view.c
+++ b/sway/tree/view.c
@@ -242,23 +242,23 @@ void view_autoconfigure(struct sway_view *view) {
242 view->border_bottom = bottom_y != ws->y + ws->height; 242 view->border_bottom = bottom_y != ws->y + ws->height;
243 } 243 }
244 244
245 double x, y, width, height;
246 x = y = width = height = 0;
247 double y_offset = 0;
248
249 // In a tabbed or stacked container, the container's y is the top of the 245 // In a tabbed or stacked container, the container's y is the top of the
250 // title area. We have to offset the surface y by the height of the title, 246 // title area. We have to offset the surface y by the height of the title,
251 // bar, and disable any top border because we'll always have the title bar. 247 // bar, and disable any top border because we'll always have the title bar.
248 double y_offset = 0;
252 enum sway_container_layout layout = container_parent_layout(con); 249 enum sway_container_layout layout = container_parent_layout(con);
253 if (layout == L_TABBED && !container_is_floating(con)) { 250 list_t *siblings = container_get_siblings(con);
254 y_offset = container_titlebar_height(); 251 if (siblings->length > 1 && !container_is_floating(con)) {
255 view->border_top = false; 252 if (layout == L_TABBED) {
256 } else if (layout == L_STACKED && !container_is_floating(con)) { 253 y_offset = container_titlebar_height();
257 list_t *siblings = container_get_siblings(con); 254 view->border_top = false;
258 y_offset = container_titlebar_height() * siblings->length; 255 } else if (layout == L_STACKED) {
259 view->border_top = false; 256 y_offset = container_titlebar_height() * siblings->length;
257 view->border_top = false;
258 }
260 } 259 }
261 260
261 double x = 0, y = 0, width = 0, height = 0;
262 switch (view->border) { 262 switch (view->border) {
263 case B_CSD: 263 case B_CSD:
264 case B_NONE: 264 case B_NONE:
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.