aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--README.bg.md7
-rw-r--r--README.de.md9
-rw-r--r--README.el.md2
-rw-r--r--README.fr.md8
-rw-r--r--README.it.md9
-rw-r--r--README.ja.md3
-rw-r--r--README.md8
-rw-r--r--README.pt.md6
-rw-r--r--README.ru.md8
-rw-r--r--README.uk.md10
-rw-r--r--completions/bash/swaybar2
-rw-r--r--completions/zsh/_sway4
-rw-r--r--completions/zsh/_swaybar13
-rw-r--r--completions/zsh/_swayidle22
-rw-r--r--completions/zsh/_swaylock40
-rw-r--r--completions/zsh/_swaymsg12
-rw-r--r--include/sway/commands.h1
-rw-r--r--include/sway/config.h2
-rw-r--r--include/sway/input/seat.h4
-rw-r--r--sway/commands.c1
-rw-r--r--sway/commands/tiling_drag_threshold.c22
-rw-r--r--sway/config.c1
-rw-r--r--sway/input/cursor.c40
-rw-r--r--sway/input/seat.c11
-rw-r--r--sway/meson.build1
-rw-r--r--sway/sway-output.5.scd12
-rw-r--r--sway/sway.5.scd21
27 files changed, 217 insertions, 62 deletions
diff --git a/README.bg.md b/README.bg.md
index efc99f15..87a15bed 100644
--- a/README.bg.md
+++ b/README.bg.md
@@ -1,8 +1,9 @@
1# sway 1# sway
2 2
3"**S**irCmpwn's **Way**land compositor" е в процес на разработка, съвместим с i3, [Wayland](http://wayland.freedesktop.org/) композитор. 3Sway е в процес на разработка, съвместим с i3,
4Прочетете [FAQ](https://github.com/swaywm/sway/wiki). Присъединете се в 4[Wayland](http://wayland.freedesktop.org/) композитор. Прочетете
5[IRC канала](http://webchat.freenode.net/?channels=sway&uio=d4) (#sway на 5[FAQ](https://github.com/swaywm/sway/wiki). Присъединете се в [IRC
6канала](http://webchat.freenode.net/?channels=sway&uio=d4) (#sway на
6irc.freenode.net). 7irc.freenode.net).
7 8
8[![](https://sr.ht/ICd5.png)](https://sr.ht/ICd5.png) 9[![](https://sr.ht/ICd5.png)](https://sr.ht/ICd5.png)
diff --git a/README.de.md b/README.de.md
index 2c2e14e8..bf92b196 100644
--- a/README.de.md
+++ b/README.de.md
@@ -3,10 +3,11 @@
3Der Fortschritt dieser Übersetzung kann [hier](https://github.com/swaywm/sway/issues/1318) 3Der Fortschritt dieser Übersetzung kann [hier](https://github.com/swaywm/sway/issues/1318)
4eingesehen werden. 4eingesehen werden.
5 5
6"**S**irCmpwn's **Way**land compositor" ist ein i3-kompatibler 6Sway ist ein i3-kompatibler
7[Wayland](http://wayland.freedesktop.org/)-Kompositor. Lies die 7[Wayland](http://wayland.freedesktop.org/)-Kompositor. Lies die
8[FAQ](https://github.com/swaywm/sway/wiki#faq). Tritt dem 8[FAQ](https://github.com/swaywm/sway/wiki#faq). Tritt dem
9[IRC-Channel](http://webchat.freenode.net/?channels=sway&uio=d4) bei (#sway in irc.freenode.net). 9[IRC-Channel](http://webchat.freenode.net/?channels=sway&uio=d4) bei (#sway in
10irc.freenode.net).
10 11
11[![](https://sr.ht/ICd5.png)](https://sr.ht/ICd5.png) 12[![](https://sr.ht/ICd5.png)](https://sr.ht/ICd5.png)
12 13
diff --git a/README.el.md b/README.el.md
index 3c9d65c9..79acd422 100644
--- a/README.el.md
+++ b/README.el.md
@@ -1,6 +1,6 @@
1# sway 1# sway
2 2
3"Ο Sway (**S**irCmpwn's **Way**land) είναι ένας **υπό ανάπτυξη** [Wayland](http://wayland.freedesktop.org/) διαχειριστής παραθύρων συμβατός με τον αντίστοιχο διαχειριστή παραθύρων i3 για τον X11. 3Sway είναι ένας **υπό ανάπτυξη** [Wayland](http://wayland.freedesktop.org/) διαχειριστής παραθύρων συμβατός με τον αντίστοιχο διαχειριστή παραθύρων i3 για τον X11.
4Διαβάστε τις [Συνήθεις Ερωτήσεις](https://github.com/swaywm/sway/wiki). Συνδεθείτε στο [κανάλι μας στο IRC](http://webchat.freenode.net/?channels=sway&uio=d4) (#sway στο 4Διαβάστε τις [Συνήθεις Ερωτήσεις](https://github.com/swaywm/sway/wiki). Συνδεθείτε στο [κανάλι μας στο IRC](http://webchat.freenode.net/?channels=sway&uio=d4) (#sway στο
5irc.freenode.net). 5irc.freenode.net).
6 6
diff --git a/README.fr.md b/README.fr.md
index 935d288f..8ad4d3b6 100644
--- a/README.fr.md
+++ b/README.fr.md
@@ -1,9 +1,9 @@
1# sway 1# sway
2 2
3"**S**irCmpwn's **Way**land compositor" est un compositeur [Wayland](http://wayland.freedesktop.org/) 3Sway est un compositeur [Wayland](http://wayland.freedesktop.org/) compatible
4compatible avec i3, **en cours de développement**. 4avec i3, **en cours de développement**. Lisez la
5Lisez la [FAQ](https://github.com/swaywm/sway/wiki). Rejoignez le 5[FAQ](https://github.com/swaywm/sway/wiki). Rejoignez le [canal
6[canal IRC](http://webchat.freenode.net/?channels=sway&uio=d4) (#sway sur 6IRC](http://webchat.freenode.net/?channels=sway&uio=d4) (#sway sur
7irc.freenode.net). 7irc.freenode.net).
8 8
9[![](https://sr.ht/ICd5.png)](https://sr.ht/ICd5.png) 9[![](https://sr.ht/ICd5.png)](https://sr.ht/ICd5.png)
diff --git a/README.it.md b/README.it.md
index af986844..8a83bc78 100644
--- a/README.it.md
+++ b/README.it.md
@@ -1,10 +1,9 @@
1# sway 1# sway
2 2
3"**S**irCmpwn's **Way**land compositor" è un compositor 3Sway è un compositor [Wayland](http://wayland.freedesktop.org/) **in via di
4[Wayland](http://wayland.freedesktop.org/) **in via di sviluppo** 4sviluppo** compatibile con i3. Leggi le [FAQ (in
5compatibile con i3. 5Inglese)](https://github.com/swaywm/sway/wiki). Unisciti al [canale IRC (in
6Leggi le [FAQ (in Inglese)](https://github.com/swaywm/sway/wiki). Unisciti al 6Inglese)](http://webchat.freenode.net/?channels=sway&uio=d4) (#sway on
7[canale IRC (in Inglese)](http://webchat.freenode.net/?channels=sway&uio=d4) (#sway on
8irc.freenode.net). 7irc.freenode.net).
9 8
10[![](https://sr.ht/ICd5.png)](https://sr.ht/ICd5.png) 9[![](https://sr.ht/ICd5.png)](https://sr.ht/ICd5.png)
diff --git a/README.ja.md b/README.ja.md
index b9e541f0..d82e78b2 100644
--- a/README.ja.md
+++ b/README.ja.md
@@ -1,7 +1,6 @@
1# sway 1# sway
2 2
3"**S**irCmpwn's **Way**land compositor"は**開発中**の 3Swayは**開発中**のi3互換な[Wayland](http://wayland.freedesktop.org/)コンポジタです。
4i3互換な[Wayland](http://wayland.freedesktop.org/)コンポジタです。
5[FAQ](https://github.com/swaywm/sway/wiki)も合わせてご覧ください。 4[FAQ](https://github.com/swaywm/sway/wiki)も合わせてご覧ください。
6[IRC チャンネル](http://webchat.freenode.net/?channels=sway&uio=d4) (#sway on irc.freenode.net)もあります。 5[IRC チャンネル](http://webchat.freenode.net/?channels=sway&uio=d4) (#sway on irc.freenode.net)もあります。
7 6
diff --git a/README.md b/README.md
index 6cb212fc..1deb9a4c 100644
--- a/README.md
+++ b/README.md
@@ -3,10 +3,10 @@
3[**English**](https://github.com/swaywm/sway/blob/master/README.md#sway--) - [日本語](https://github.com/swaywm/sway/blob/master/README.ja.md#sway--) - [Deutsch](https://github.com/swaywm/sway/blob/master/README.de.md#sway--) - [Ελληνικά](https://github.com/swaywm/sway/blob/master/README.el.md#sway--) - [Français](https://github.com/swaywm/sway/blob/master/README.fr.md#sway--) - [Українська](https://github.com/swaywm/sway/blob/master/README.uk.md#sway--) - [Italiano](https://github.com/swaywm/sway/blob/master/README.it.md#sway--) - [Português](https://github.com/swaywm/sway/blob/master/README.pt.md#sway--) - 3[**English**](https://github.com/swaywm/sway/blob/master/README.md#sway--) - [日本語](https://github.com/swaywm/sway/blob/master/README.ja.md#sway--) - [Deutsch](https://github.com/swaywm/sway/blob/master/README.de.md#sway--) - [Ελληνικά](https://github.com/swaywm/sway/blob/master/README.el.md#sway--) - [Français](https://github.com/swaywm/sway/blob/master/README.fr.md#sway--) - [Українська](https://github.com/swaywm/sway/blob/master/README.uk.md#sway--) - [Italiano](https://github.com/swaywm/sway/blob/master/README.it.md#sway--) - [Português](https://github.com/swaywm/sway/blob/master/README.pt.md#sway--) -
4[Русский](https://github.com/swaywm/sway/blob/master/README.ru.md#sway--) - [Български](https://github.com/swaywm/sway/blob/master/README.bg.md#sway--) 4[Русский](https://github.com/swaywm/sway/blob/master/README.ru.md#sway--) - [Български](https://github.com/swaywm/sway/blob/master/README.bg.md#sway--)
5 5
6"**S**irCmpwn's **Way**land compositor" is a **work in progress** 6sway is a **work in progress** i3-compatible
7i3-compatible [Wayland](http://wayland.freedesktop.org/) compositor. 7[Wayland](http://wayland.freedesktop.org/) compositor. Read the
8Read the [FAQ](https://github.com/swaywm/sway/wiki). Join the 8[FAQ](https://github.com/swaywm/sway/wiki). Join the [IRC
9[IRC channel](http://webchat.freenode.net/?channels=sway&uio=d4) (#sway on 9channel](http://webchat.freenode.net/?channels=sway&uio=d4) (#sway on
10irc.freenode.net). 10irc.freenode.net).
11 11
12If you'd like to support sway development, please contribute to [SirCmpwn's 12If you'd like to support sway development, please contribute to [SirCmpwn's
diff --git a/README.pt.md b/README.pt.md
index 91e709c1..8cdfa548 100644
--- a/README.pt.md
+++ b/README.pt.md
@@ -1,8 +1,8 @@
1# sway 1# sway
2 2
3"**S**irCmpwn's **Way**land compositor" é um compositor [Wayland](http://wayland.freedesktop.org/) 3Sway é um compositor [Wayland](http://wayland.freedesktop.org/) compatível com o
4compatível com o i3. Leia o [FAQ](https://github.com/swaywm/sway/wiki). Participe do 4i3. Leia o [FAQ](https://github.com/swaywm/sway/wiki). Participe do [canal
5[canal IRC](http://webchat.freenode.net/?channels=sway&uio=d4) (#sway no 5IRC](http://webchat.freenode.net/?channels=sway&uio=d4) (#sway no
6irc.freenode.net). 6irc.freenode.net).
7 7
8[![](https://sr.ht/ICd5.png)](https://sr.ht/ICd5.png) 8[![](https://sr.ht/ICd5.png)](https://sr.ht/ICd5.png)
diff --git a/README.ru.md b/README.ru.md
index 4b34dc2d..255e36aa 100644
--- a/README.ru.md
+++ b/README.ru.md
@@ -1,9 +1,9 @@
1# sway 1# sway
2 2
3"**S**irCmpwn's **Way**land compositor" на данный момент **(в разработке)** 3Sway на данный момент **(в разработке)** i3-совместимый
4i3-совместимый [Wayland](http://wayland.freedesktop.org/) композитор. 4[Wayland](http://wayland.freedesktop.org/) композитор. Прочитайте
5Прочитайте [FAQ](https://github.com/swaywm/sway/wiki). Присоединяйтесь к 5[FAQ](https://github.com/swaywm/sway/wiki). Присоединяйтесь к [IRC
6[IRC каналу](http://webchat.freenode.net/?channels=sway&uio=d4) (#sway на 6каналу](http://webchat.freenode.net/?channels=sway&uio=d4) (#sway на
7irc.freenode.net). 7irc.freenode.net).
8 8
9[![](https://sr.ht/ICd5.png)](https://sr.ht/ICd5.png) 9[![](https://sr.ht/ICd5.png)](https://sr.ht/ICd5.png)
diff --git a/README.uk.md b/README.uk.md
index 9ae7425a..5e9345b3 100644
--- a/README.uk.md
+++ b/README.uk.md
@@ -1,10 +1,10 @@
1# sway 1# sway
2 2
3**Sway** ("**S**irCmpwn's **Way**land compositor") це сумісний з i3 композитор 3**Sway** це сумісний з i3 композитор [Wayland](http://wayland.freedesktop.org/)
4[Wayland](http://wayland.freedesktop.org/) (**у стані розробки**). 4(**у стані розробки**). Ознайомтесь з
5Ознайомтесь з [ЧаПами](https://github.com/swaywm/sway/wiki). 5[ЧаПами](https://github.com/swaywm/sway/wiki). Приєднуйтесь до [спільноти в
6Приєднуйтесь до [спільноти в IRC](http://webchat.freenode.net/?channels=sway&uio=d4) 6IRC](http://webchat.freenode.net/?channels=sway&uio=d4) (#sway на
7(#sway на irc.freenode.net). 7irc.freenode.net).
8 8
9[![](https://sr.ht/ICd5.png)](https://sr.ht/ICd5.png) 9[![](https://sr.ht/ICd5.png)](https://sr.ht/ICd5.png)
10 10
diff --git a/completions/bash/swaybar b/completions/bash/swaybar
index 504588f1..1e085c65 100644
--- a/completions/bash/swaybar
+++ b/completions/bash/swaybar
@@ -27,7 +27,7 @@ _swaybar()
27 return 27 return
28 ;; 28 ;;
29 -b|--bar_id) 29 -b|--bar_id)
30 bars=($(swaymsg -t get_bar_config | sed -e '/^\[/,/\]$/{//d;s/^ *"\(.*\)",\?.*$/\1/}')) 30 bars=($(swaymsg -t get_bar_config | jq -r '.[]'))
31 COMPREPLY=($(compgen -W "${bars[*]}" -- "$cur")) 31 COMPREPLY=($(compgen -W "${bars[*]}" -- "$cur"))
32 return 32 return
33 ;; 33 ;;
diff --git a/completions/zsh/_sway b/completions/zsh/_sway
index 05112002..a7f55cc5 100644
--- a/completions/zsh/_sway
+++ b/completions/zsh/_sway
@@ -13,8 +13,8 @@
13# 13#
14# ------------------------------- 14# -------------------------------
15_arguments -s \ 15_arguments -s \
16 '(-v --version)'{-v,--version}'[shows version]' \ 16 '(-v --version)'{-v,--version}'[Show the version number and quit]' \
17 '(-h --help)'{-h,--help}'[shows help message]' \ 17 '(-h --help)'{-h,--help}'[Show help message and quit]' \
18 '(-c --config)'{-c,--config}'[Specify a config file]:files:_files' \ 18 '(-c --config)'{-c,--config}'[Specify a config file]:files:_files' \
19 '(-C --validate)'{-C,--validate}'[Check validity of the config file, then exit]' \ 19 '(-C --validate)'{-C,--validate}'[Check validity of the config file, then exit]' \
20 '(-d --debug)'{-d,--debug}'[Enables full logging, including debug information]' \ 20 '(-d --debug)'{-d,--debug}'[Enables full logging, including debug information]' \
diff --git a/completions/zsh/_swaybar b/completions/zsh/_swaybar
new file mode 100644
index 00000000..af2cee95
--- /dev/null
+++ b/completions/zsh/_swaybar
@@ -0,0 +1,13 @@
1#compdef swaybar
2#
3# Completion script for swaybar
4#
5
6local bars=($(swaymsg -t get_bar_config | jq -r '.[]'))
7
8_arguments -s \
9 '(-h --help)'{-h,--help}'[Show help message and quit]' \
10 '(-v --version)'{-v,--version}'[Show version and quit]' \
11 '(-s --socket)'{-s,--socket}'[Connect to sway via socket]:filename:_files' \
12 '(-b --bar_id)'{-b,--bar-id}'[Bar ID for which to get the configuration]:filename:($bars)'\
13 '(-d --debug)'{-d,--debug}'[Enable debugging]'
diff --git a/completions/zsh/_swayidle b/completions/zsh/_swayidle
new file mode 100644
index 00000000..b419bc2c
--- /dev/null
+++ b/completions/zsh/_swayidle
@@ -0,0 +1,22 @@
1#compdef swayidle
2#
3# Completion script for swayidle
4#
5
6local events=('timeout:Execute timeout command if there is no activity for timeout seconds'
7 'before-sleep:Execute before-sleep command before sleep')
8local resume=('resume:Execute command when there is activity again')
9
10if (($#words <= 2)); then
11 _arguments -C \
12 '(-h --help)'{-h,--help}'[Show help message and quit]' \
13 '(-d)'-d'[Enable debug output]'
14 _describe -t "events" 'swayidle' events
15
16elif [[ "$words[-3]" == before-sleep || "$words[-3]" == resume ]]; then
17 _describe -t "events" 'swayidle' events
18
19elif [[ "$words[-4]" == timeout ]]; then
20 _describe -t "events" 'swayidle' events
21 _describe -t "resume" 'swayidle' resume
22fi
diff --git a/completions/zsh/_swaylock b/completions/zsh/_swaylock
index 8fb4834c..9bc84ec9 100644
--- a/completions/zsh/_swaylock
+++ b/completions/zsh/_swaylock
@@ -4,11 +4,37 @@
4# 4#
5 5
6_arguments -s \ 6_arguments -s \
7 '(-v --version)'{-v,--version}'[Show the version number and quit]' \ 7 '(-C --config)'{-C,--config}'[Path to the config file]:filename:_files' \
8 '(-h --help)'{-h,--help}'[Show help message and quit]' \ 8 '(-c --color)'{-c,--color}'[Turn the screen into the given color instead of white]:color:' \
9 '(-f --daemonize)'{-f,--daemonize}'[Detach from the controlling terminal]' \ 9 '(-e --ignore-empty-password)'{-e,--ignore-empty-password}'[When an empty password is provided, do not validate it]' \
10 '(-c --color)'{-c,--color}'[Specify a color (rrggbb)]' \ 10 '(-f --daemonize)'{-f,--daemonize}'[Detach from the controlling terminal after locking]' \
11 '(-i --image)'{-i,--image}'[Display an image]:files:_files' \ 11 '(-h --help)'{-h,--help}'[Show help message and quit]' \
12 '(-s --scaling)'{-s,--scaling}'[Scaling mode]:mode:(stretch fill fit center tile)' \ 12 '(-i --image)'{-i,--image}'[Display an image]:filename:_files' \
13 '(-s --scaling)'{-s,--scaling}'[Scaling mode]:mode:(stretch fill fit center tile)' \
14 '(-t --tiling)'{-t,--tiling}'[Same as --scaling=tile]' \
13 '(-u --no-unlock-indicator)'{-u,--no-unlock-indicator}'[Disable the unlock indicator]' \ 15 '(-u --no-unlock-indicator)'{-u,--no-unlock-indicator}'[Disable the unlock indicator]' \
14 '(--socket)'--socket'[Use the specified socket path.]:files:_files' \ 16 '(-v --version)'{-v,--version}'[Show the version number and quit]' \
17 '(--bs-hl-color)'--bs-hl-color'[Sets the color of backspace highlights segments]:color:' \
18 '(--font)'--font'[Sets the font of the text]:font:' \
19 '(--indicator-radius)'--indicator-radius'[Sets the indicator radius]:radius:' \
20 '(--indicator-thickness)'--indicator-thickness'[Sets the indicator thickness]:thickness:' \
21 '(--inside-color)'--inside-color'[Sets the color of the inside of the indicator]:color:' \
22 '(--inside-clear-color)'--inside-clear-color'[Sets the color of the inside of the indicator when cleared]:color:' \
23 '(--inside-clear-color)'--inside-clear-color'[Sets the color of the inside of the indicator when verifying]:color:' \
24 '(--inside-wrong-color)'--inside-wrong-color'[Sets the color of the inside of the indicator when invalid]:color:' \
25 '(--key-hl-color)'--key-hl-color'[Sets the color of the key press highlight segments]:color:' \
26 '(--line-color)'--line-color'[Sets the color of the line between the inside and ring]:color:' \
27 '(--line-clear-color)'--line-clear-color'[Sets the color of the line between the inside and ring when cleared]:color:' \
28 '(--line-ver-color)'--line-ver-color'[Sets the color of the line between the inside and ring when verifying]:color:' \
29 '(--line-wrong-color)'--line-wrong-color'[Sets the color of the line between the inside and ring when invalid]:color:' \
30 '(-n --line-uses-inside)'{-n,--line-uses-inside}'[Use the inside color for the line between the inside and ring]' \
31 '(-r --line-uses-ring)'{-r,--line--uses-ring}'[Use the ring color for the line between the inside and ring]' \
32 '(--ring-color)'--ring-color'[Sets the color of the ring of the indicator]:color:' \
33 '(--ring-clear-color)'--ring-clear-color'[Sets the color of the ring of the indicator when cleared]:color:' \
34 '(--ring-ver-color)'--ring-ver-color'[Sets the color of the ring of the indicator when verifying]:color:' \
35 '(--ring-wrong-color)'--ring-wrong-color'[Sets the color of the ring of the indicator when invalid]:color:' \
36 '(--separator-color)'--separator-color'[Sets the color of the lines that separate highlight segments]:color:' \
37 '(--text-color)'--text-color'[Sets the color of the text]:color:' \
38 '(--text-clear-color)'--text-clear-color'[Sets the color of the text when cleared]:color:' \
39 '(--text-ver-color)'--text-ver-color'[Sets the color of the text when verifying]:color:' \
40 '(--text-wrong-color)'--text-wrong-color'[Sets the color of the text when invalid]:color:' \ No newline at end of file
diff --git a/completions/zsh/_swaymsg b/completions/zsh/_swaymsg
index a7a1c8e0..0ba45d4a 100644
--- a/completions/zsh/_swaymsg
+++ b/completions/zsh/_swaymsg
@@ -28,8 +28,10 @@ types=(
28) 28)
29 29
30_arguments -s \ 30_arguments -s \
31 '(-v --version)'{-v,--version}'[Print the version (of swaymsg) and quit]' \ 31 '(-v --version)'{-v,--version}'[Show the version number and quit]' \
32 '(-h --help)'{-h,--help}'[Shows help message]' \ 32 '(-m --monitor)'{-m,--monitor}'[Monitor until killed (-t SUBSCRIBE only)]' \
33 '(-q --quiet)'{-q,--quiet}'[Sends the IPC message but does not print the response from sway]' \ 33 '(-h --help)'{-h,--help}'[Show help message and quit]' \
34 '(-s --socket)'{-s,--socket}'[Use the specified socket path.]:files:_files' \ 34 '(-q --quiet)'{-q,--quiet}'[Be quiet]' \
35 '(-t --type)'{-t,--type}'[Specify the type of IPC message.]:type:{_describe "type" types}' 35 '(-r --raw)'{-r,--raw}'[Use raw output even if using a tty]' \
36 '(-s --socket)'{-s,--socket}'[Use the specified socket path]:files:_files' \
37 '(-t --type)'{-t,--type}'[Specify the message type]:type:{_describe "type" types}'
diff --git a/include/sway/commands.h b/include/sway/commands.h
index 0e2d7931..7d0ff838 100644
--- a/include/sway/commands.h
+++ b/include/sway/commands.h
@@ -172,6 +172,7 @@ sway_cmd cmd_swaybg_command;
172sway_cmd cmd_swaynag_command; 172sway_cmd cmd_swaynag_command;
173sway_cmd cmd_swap; 173sway_cmd cmd_swap;
174sway_cmd cmd_tiling_drag; 174sway_cmd cmd_tiling_drag;
175sway_cmd cmd_tiling_drag_threshold;
175sway_cmd cmd_title_align; 176sway_cmd cmd_title_align;
176sway_cmd cmd_title_format; 177sway_cmd cmd_title_format;
177sway_cmd cmd_titlebar_border_thickness; 178sway_cmd cmd_titlebar_border_thickness;
diff --git a/include/sway/config.h b/include/sway/config.h
index f604b054..ebf16e6a 100644
--- a/include/sway/config.h
+++ b/include/sway/config.h
@@ -426,7 +426,9 @@ struct sway_config {
426 bool auto_back_and_forth; 426 bool auto_back_and_forth;
427 bool show_marks; 427 bool show_marks;
428 enum alignment title_align; 428 enum alignment title_align;
429
429 bool tiling_drag; 430 bool tiling_drag;
431 int tiling_drag_threshold;
430 432
431 bool smart_gaps; 433 bool smart_gaps;
432 int gaps_inner; 434 int gaps_inner;
diff --git a/include/sway/input/seat.h b/include/sway/input/seat.h
index d665c86e..a3c20346 100644
--- a/include/sway/input/seat.h
+++ b/include/sway/input/seat.h
@@ -39,6 +39,7 @@ enum sway_seat_operation {
39 OP_NONE, 39 OP_NONE,
40 OP_DOWN, 40 OP_DOWN,
41 OP_MOVE_FLOATING, 41 OP_MOVE_FLOATING,
42 OP_MOVE_TILING_THRESHOLD,
42 OP_MOVE_TILING, 43 OP_MOVE_TILING,
43 OP_RESIZE_FLOATING, 44 OP_RESIZE_FLOATING,
44 OP_RESIZE_TILING, 45 OP_RESIZE_TILING,
@@ -186,6 +187,9 @@ void seat_begin_down(struct sway_seat *seat, struct sway_container *con,
186void seat_begin_move_floating(struct sway_seat *seat, 187void seat_begin_move_floating(struct sway_seat *seat,
187 struct sway_container *con, uint32_t button); 188 struct sway_container *con, uint32_t button);
188 189
190void seat_begin_move_tiling_threshold(struct sway_seat *seat,
191 struct sway_container *con, uint32_t button);
192
189void seat_begin_move_tiling(struct sway_seat *seat, 193void seat_begin_move_tiling(struct sway_seat *seat,
190 struct sway_container *con, uint32_t button); 194 struct sway_container *con, uint32_t button);
191 195
diff --git a/sway/commands.c b/sway/commands.c
index 927434bc..0883b57b 100644
--- a/sway/commands.c
+++ b/sway/commands.c
@@ -87,6 +87,7 @@ static struct cmd_handler handlers[] = {
87 { "smart_borders", cmd_smart_borders }, 87 { "smart_borders", cmd_smart_borders },
88 { "smart_gaps", cmd_smart_gaps }, 88 { "smart_gaps", cmd_smart_gaps },
89 { "tiling_drag", cmd_tiling_drag }, 89 { "tiling_drag", cmd_tiling_drag },
90 { "tiling_drag_threshold", cmd_tiling_drag_threshold },
90 { "title_align", cmd_title_align }, 91 { "title_align", cmd_title_align },
91 { "titlebar_border_thickness", cmd_titlebar_border_thickness }, 92 { "titlebar_border_thickness", cmd_titlebar_border_thickness },
92 { "titlebar_padding", cmd_titlebar_padding }, 93 { "titlebar_padding", cmd_titlebar_padding },
diff --git a/sway/commands/tiling_drag_threshold.c b/sway/commands/tiling_drag_threshold.c
new file mode 100644
index 00000000..6b0531c3
--- /dev/null
+++ b/sway/commands/tiling_drag_threshold.c
@@ -0,0 +1,22 @@
1#include <string.h>
2#include "sway/commands.h"
3#include "sway/config.h"
4#include "log.h"
5
6struct cmd_results *cmd_tiling_drag_threshold(int argc, char **argv) {
7 struct cmd_results *error = NULL;
8 if ((error = checkarg(argc, "tiling_drag_threshold", EXPECTED_EQUAL_TO, 1))) {
9 return error;
10 }
11
12 char *inv;
13 int value = strtol(argv[0], &inv, 10);
14 if (*inv != '\0' || value < 0) {
15 return cmd_results_new(CMD_INVALID, "tiling_drag_threshold",
16 "Invalid threshold specified");
17 }
18
19 config->tiling_drag_threshold = value;
20
21 return cmd_results_new(CMD_SUCCESS, NULL, NULL);
22}
diff --git a/sway/config.c b/sway/config.c
index bb7f796d..5d631b7e 100644
--- a/sway/config.c
+++ b/sway/config.c
@@ -233,6 +233,7 @@ static void config_defaults(struct sway_config *config) {
233 config->show_marks = true; 233 config->show_marks = true;
234 config->title_align = ALIGN_LEFT; 234 config->title_align = ALIGN_LEFT;
235 config->tiling_drag = true; 235 config->tiling_drag = true;
236 config->tiling_drag_threshold = 9;
236 237
237 config->smart_gaps = false; 238 config->smart_gaps = false;
238 config->gaps_inner = 0; 239 config->gaps_inner = 0;
diff --git a/sway/input/cursor.c b/sway/input/cursor.c
index f8302ddf..66a9e435 100644
--- a/sway/input/cursor.c
+++ b/sway/input/cursor.c
@@ -384,6 +384,30 @@ static void handle_move_tiling_motion(struct sway_seat *seat,
384 desktop_damage_box(&seat->op_drop_box); 384 desktop_damage_box(&seat->op_drop_box);
385} 385}
386 386
387static void handle_move_tiling_threshold_motion(struct sway_seat *seat,
388 struct sway_cursor *cursor) {
389 double cx = seat->cursor->cursor->x;
390 double cy = seat->cursor->cursor->y;
391 double sx = seat->op_ref_lx;
392 double sy = seat->op_ref_ly;
393
394 // Get the scaled threshold for the output. Even if the operation goes
395 // across multiple outputs of varying scales, just use the scale for the
396 // output that the cursor is currently on for simplicity.
397 struct wlr_output *wlr_output = wlr_output_layout_output_at(
398 root->output_layout, cx, cy);
399 double output_scale = wlr_output ? wlr_output->scale : 1;
400 double threshold = config->tiling_drag_threshold * output_scale;
401 threshold *= threshold;
402
403 // If the threshold has been exceeded, start the actual drag
404 if ((cx - sx) * (cx - sx) + (cy - sy) * (cy - sy) > threshold) {
405 seat->operation = OP_MOVE_TILING;
406 cursor_set_image(cursor, "grab", NULL);
407 handle_move_tiling_motion(seat, cursor);
408 }
409}
410
387static void calculate_floating_constraints(struct sway_container *con, 411static void calculate_floating_constraints(struct sway_container *con,
388 int *min_width, int *max_width, int *min_height, int *max_height) { 412 int *min_width, int *max_width, int *min_height, int *max_height) {
389 if (config->floating_minimum_width == -1) { // no minimum 413 if (config->floating_minimum_width == -1) { // no minimum
@@ -640,6 +664,9 @@ void cursor_send_pointer_motion(struct sway_cursor *cursor,
640 case OP_MOVE_FLOATING: 664 case OP_MOVE_FLOATING:
641 handle_move_floating_motion(seat, cursor); 665 handle_move_floating_motion(seat, cursor);
642 break; 666 break;
667 case OP_MOVE_TILING_THRESHOLD:
668 handle_move_tiling_threshold_motion(seat, cursor);
669 break;
643 case OP_MOVE_TILING: 670 case OP_MOVE_TILING:
644 handle_move_tiling_motion(seat, cursor); 671 handle_move_tiling_motion(seat, cursor);
645 break; 672 break;
@@ -984,12 +1011,21 @@ void dispatch_cursor_button(struct sway_cursor *cursor,
984 if (config->tiling_drag && (mod_pressed || on_titlebar) && 1011 if (config->tiling_drag && (mod_pressed || on_titlebar) &&
985 state == WLR_BUTTON_PRESSED && !is_floating_or_child && 1012 state == WLR_BUTTON_PRESSED && !is_floating_or_child &&
986 cont && !cont->is_fullscreen) { 1013 cont && !cont->is_fullscreen) {
987 if (on_titlebar) { 1014 struct sway_container *focus = seat_get_focused_container(seat);
1015 bool focused = focus == cont || container_has_ancestor(focus, cont);
1016 if (on_titlebar && !focused) {
988 node = seat_get_focus_inactive(seat, &cont->node); 1017 node = seat_get_focus_inactive(seat, &cont->node);
989 seat_set_focus(seat, node); 1018 seat_set_focus(seat, node);
990 } 1019 }
1020
991 seat_pointer_notify_button(seat, time_msec, button, state); 1021 seat_pointer_notify_button(seat, time_msec, button, state);
992 seat_begin_move_tiling(seat, cont, button); 1022
1023 // If moving a container by it's title bar, use a threshold for the drag
1024 if (!mod_pressed && config->tiling_drag_threshold > 0) {
1025 seat_begin_move_tiling_threshold(seat, cont, button);
1026 } else {
1027 seat_begin_move_tiling(seat, cont, button);
1028 }
993 return; 1029 return;
994 } 1030 }
995 1031
diff --git a/sway/input/seat.c b/sway/input/seat.c
index fa82c9ce..9422713d 100644
--- a/sway/input/seat.c
+++ b/sway/input/seat.c
@@ -1052,6 +1052,17 @@ void seat_begin_move_floating(struct sway_seat *seat,
1052 cursor_set_image(seat->cursor, "grab", NULL); 1052 cursor_set_image(seat->cursor, "grab", NULL);
1053} 1053}
1054 1054
1055void seat_begin_move_tiling_threshold(struct sway_seat *seat,
1056 struct sway_container *con, uint32_t button) {
1057 seat->operation = OP_MOVE_TILING_THRESHOLD;
1058 seat->op_container = con;
1059 seat->op_button = button;
1060 seat->op_target_node = NULL;
1061 seat->op_target_edge = 0;
1062 seat->op_ref_lx = seat->cursor->cursor->x;
1063 seat->op_ref_ly = seat->cursor->cursor->y;
1064}
1065
1055void seat_begin_move_tiling(struct sway_seat *seat, 1066void seat_begin_move_tiling(struct sway_seat *seat,
1056 struct sway_container *con, uint32_t button) { 1067 struct sway_container *con, uint32_t button) {
1057 seat->operation = OP_MOVE_TILING; 1068 seat->operation = OP_MOVE_TILING;
diff --git a/sway/meson.build b/sway/meson.build
index 7f739287..98676ce0 100644
--- a/sway/meson.build
+++ b/sway/meson.build
@@ -89,6 +89,7 @@ sway_sources = files(
89 'commands/swaynag_command.c', 89 'commands/swaynag_command.c',
90 'commands/swap.c', 90 'commands/swap.c',
91 'commands/tiling_drag.c', 91 'commands/tiling_drag.c',
92 'commands/tiling_drag_threshold.c',
92 'commands/title_align.c', 93 'commands/title_align.c',
93 'commands/title_format.c', 94 'commands/title_format.c',
94 'commands/titlebar_border_thickness.c', 95 'commands/titlebar_border_thickness.c',
diff --git a/sway/sway-output.5.scd b/sway/sway-output.5.scd
index 9940d8e8..28524478 100644
--- a/sway/sway-output.5.scd
+++ b/sway/sway-output.5.scd
@@ -38,17 +38,20 @@ must be separated by one space. For example:
38 Places the specified output at the specific position in the global 38 Places the specified output at the specific position in the global
39 coordinate space. If scaling is active, it has to be considered when 39 coordinate space. If scaling is active, it has to be considered when
40 positioning. For example, if the scaling factor for the left output is 2, 40 positioning. For example, if the scaling factor for the left output is 2,
41 the relative position for the right output has to be divided by 2. 41 the relative position for the right output has to be divided by 2. The
42 reference point is the top left corner so if you want the bottoms aligned
43 this has to be considered as well.
42 44
43 Example: 45 Example:
44 46
45 output HDMI1 scale 2 47 output HDMI1 scale 2
46 48
47 output HDMI1 pos 0 0 res 3200x1800 49 output HDMI1 pos 0 1020 res 3200x1800
48 50
49 output eDP1 pos 1600 0 res 1920x1080 51 output eDP1 pos 1600 0 res 1920x1080
50 52
51 Note that the x-pos of eDP1 is 1600 = 3200/2. 53 Note that the left x-pos of eDP1 is 1600 = 3200/2 and the bottom y-pos is
54 1020 + (1800 / 2) = 1920 = 0 + 1920
52 55
53*output* <name> scale <factor> 56*output* <name> scale <factor>
54 Scales the specified output by the specified scale _factor_. An integer is 57 Scales the specified output by the specified scale _factor_. An integer is
@@ -57,7 +60,8 @@ must be separated by one space. For example:
57 represent the contents of your windows - they will be rendered at the next 60 represent the contents of your windows - they will be rendered at the next
58 highest integral scale factor and downscaled. You may be better served by 61 highest integral scale factor and downscaled. You may be better served by
59 setting an integral scale factor and adjusting the font size of your 62 setting an integral scale factor and adjusting the font size of your
60 applications to taste. 63 applications to taste. HiDPI isn't supported with Xwayland clients (windows
64 will blur).
61 65
62*output* <name> background|bg <file> <mode> [<fallback\_color>] 66*output* <name> background|bg <file> <mode> [<fallback\_color>]
63 Sets the wallpaper for the given output to the specified file, using the 67 Sets the wallpaper for the given output to the specified file, using the
diff --git a/sway/sway.5.scd b/sway/sway.5.scd
index e6abef56..3757a097 100644
--- a/sway/sway.5.scd
+++ b/sway/sway.5.scd
@@ -327,7 +327,8 @@ runtime.
327 A view that does not have focus. 327 A view that does not have focus.
328 328
329 *client.urgent* 329 *client.urgent*
330 A view with an urgency hint. *Note*: This is not currently implemented. 330 A view with an urgency hint. *Note*: Native Wayland windows do not
331 support urgency. Urgency only works for Xwayland windows.
331 332
332 The meaning of each color is: 333 The meaning of each color is:
333 334
@@ -431,7 +432,7 @@ The default colors are:
431 432
432*focus\_follows\_mouse* yes|no|always 433*focus\_follows\_mouse* yes|no|always
433 If set to _yes_, moving your mouse over a window will focus that window. If 434 If set to _yes_, moving your mouse over a window will focus that window. If
434 set to _always_, the window under the cursor will always be focused, even 435 set to _always_, the window under the cursor will always be focused, even
435 after switching between workspaces. 436 after switching between workspaces.
436 437
437*focus\_wrapping* yes|no|force 438*focus\_wrapping* yes|no|force
@@ -450,11 +451,11 @@ The default colors are:
450 Thickness of the titlebar border in pixels 451 Thickness of the titlebar border in pixels
451 452
452*titlebar\_padding* <horizontal> [<vertical>] 453*titlebar\_padding* <horizontal> [<vertical>]
453 Padding of the text in the titlebar. _horizontal_ value affects horizontal 454 Padding of the text in the titlebar. _horizontal_ value affects horizontal
454 padding of the text while _vertical_ value affects vertical padding (space 455 padding of the text while _vertical_ value affects vertical padding (space
455 above and below text). Padding includes titlebar borders so their value 456 above and below text). Padding includes titlebar borders so their value
456 should be greater than titlebar\_border\_thickness. If _vertical_ value is 457 should be greater than titlebar\_border\_thickness. If _vertical_ value is
457 not specified it is set to the _horizontal_ value. 458 not specified it is set to the _horizontal_ value.
458 459
459*for\_window* <criteria> <command> 460*for\_window* <criteria> <command>
460 Whenever a window that matches _criteria_ appears, run list of commands. 461 Whenever a window that matches _criteria_ appears, run list of commands.
@@ -572,6 +573,14 @@ The default colors are:
572 the _floating\_mod_ will also allow the container to be dragged. _toggle_ 573 the _floating\_mod_ will also allow the container to be dragged. _toggle_
573 should not be used in the config file. 574 should not be used in the config file.
574 575
576*tiling\_drag\_threshold* <threshold>
577 Sets the threshold that must be exceeded for a container to be dragged by
578 its titlebar. This has no effect if _floating\_mod_ is used or if
579 _tiling\_drag_ is set to _disable_. Once the threshold has been exceeded
580 once, the drag starts and the cursor can come back inside the threshold
581 without stopping the drag. _threshold_ is multiplied by the scale of the
582 output that the cursor on. The default is 9.
583
575*title\_align* left|center|right 584*title\_align* left|center|right
576 Sets the title alignment. If _right_ is selected and _show\_marks_ is set 585 Sets the title alignment. If _right_ is selected and _show\_marks_ is set
577 to _yes_, the marks will be shown on the _left_ side instead of the 586 to _yes_, the marks will be shown on the _left_ side instead of the