mirror of
https://github.com/swaywm/sway.git
synced 2024-10-31 21:47:24 +00:00
Compare commits
30 commits
Author | SHA1 | Date | |
---|---|---|---|
3b1effdfa5 | |||
b21913e11d | |||
04f75e6acc | |||
ae55861548 | |||
f49356ebf0 | |||
2b0765b464 | |||
f0dd271ccf | |||
d33f4957ce | |||
2660c0c1bc | |||
ee4e4bb50f | |||
b51721901d | |||
fc1cce9348 | |||
9bd664175d | |||
7d6b23a0be | |||
599874a158 | |||
a50039af77 | |||
80e4efdb33 | |||
0d1231a6d1 | |||
1766ae3f44 | |||
d9de8d90a9 | |||
8dc08792c8 | |||
9bdb0ead6e | |||
62e3ca671d | |||
d2d1461855 | |||
4246cfaea8 | |||
be4b92c6b1 | |||
98696fa0e6 | |||
8a49a296f6 | |||
83202d40e2 | |||
8f5c546fca |
|
@ -4,8 +4,6 @@ packages:
|
|||
- eudev-dev
|
||||
- gdk-pixbuf-dev
|
||||
- json-c-dev
|
||||
- lcms2-dev
|
||||
- libdisplay-info-dev
|
||||
- libevdev-dev
|
||||
- libinput-dev
|
||||
- libseat-dev
|
||||
|
@ -14,18 +12,16 @@ packages:
|
|||
- mesa-dev
|
||||
- meson
|
||||
- pango-dev
|
||||
- pcre2-dev
|
||||
- pixman-dev
|
||||
- scdoc
|
||||
- wayland-dev
|
||||
- wayland-protocols
|
||||
- xcb-util-image-dev
|
||||
- xcb-util-wm-dev
|
||||
- xwayland-dev
|
||||
- hwdata-dev
|
||||
- xwayland
|
||||
sources:
|
||||
- https://github.com/swaywm/sway
|
||||
- https://gitlab.freedesktop.org/wlroots/wlroots.git
|
||||
- https://github.com/swaywm/wlroots#0.14.0
|
||||
tasks:
|
||||
- wlroots: |
|
||||
cd wlroots
|
||||
|
@ -34,23 +30,18 @@ tasks:
|
|||
sudo ninja -C build install
|
||||
- setup: |
|
||||
cd sway
|
||||
meson build --fatal-meson-warnings -Dauto_features=enabled -Dtray=disabled
|
||||
meson build -Dauto_features=enabled -Dtray=disabled
|
||||
- build: |
|
||||
cd sway
|
||||
ninja -C build
|
||||
- build-no-xwayland: |
|
||||
cd wlroots
|
||||
cd sway
|
||||
meson configure build -Dxwayland=disabled
|
||||
ninja -C build
|
||||
sudo ninja -C build install
|
||||
|
||||
cd ../sway
|
||||
meson configure build --clearcache
|
||||
ninja -C build
|
||||
- build-static: |
|
||||
cd sway
|
||||
mkdir subprojects
|
||||
ln -s ../../wlroots subprojects/wlroots
|
||||
rm -rf build
|
||||
meson build --fatal-meson-warnings --default-library=static --force-fallback-for=wlroots
|
||||
meson build --default-library=static --force-fallback-for=wlroots
|
||||
ninja -C build
|
||||
|
|
|
@ -3,15 +3,12 @@ packages:
|
|||
- cairo
|
||||
- gdk-pixbuf2
|
||||
- json-c
|
||||
- lcms2
|
||||
- libdisplay-info
|
||||
- libegl
|
||||
- libinput
|
||||
- libxcb
|
||||
- libxkbcommon
|
||||
- meson
|
||||
- pango
|
||||
- pcre2
|
||||
- scdoc
|
||||
- wayland
|
||||
- wayland-protocols
|
||||
|
@ -19,10 +16,9 @@ packages:
|
|||
- xcb-util-wm
|
||||
- xorg-xwayland
|
||||
- seatd
|
||||
- hwdata
|
||||
sources:
|
||||
- https://github.com/swaywm/sway
|
||||
- https://gitlab.freedesktop.org/wlroots/wlroots.git
|
||||
- https://github.com/swaywm/wlroots#0.14.0
|
||||
tasks:
|
||||
- wlroots: |
|
||||
cd wlroots
|
||||
|
@ -31,7 +27,7 @@ tasks:
|
|||
sudo ninja -C build install
|
||||
- setup: |
|
||||
cd sway
|
||||
meson build --fatal-meson-warnings -Dauto_features=enabled -Dsd-bus-provider=libsystemd
|
||||
meson build -Dauto_features=enabled -Dsd-bus-provider=libsystemd
|
||||
- build: |
|
||||
cd sway
|
||||
ninja -C build
|
||||
|
|
|
@ -4,11 +4,9 @@ packages:
|
|||
- devel/json-c
|
||||
- devel/libevdev
|
||||
- devel/meson
|
||||
- devel/pcre2
|
||||
- devel/pkgconf
|
||||
- graphics/cairo
|
||||
- graphics/gdk-pixbuf2
|
||||
- graphics/lcms2
|
||||
- graphics/wayland
|
||||
- graphics/wayland-protocols
|
||||
- textproc/scdoc
|
||||
|
@ -21,17 +19,14 @@ packages:
|
|||
- devel/libudev-devd
|
||||
- graphics/libdrm
|
||||
- graphics/mesa-libs
|
||||
- sysutils/libdisplay-info
|
||||
- sysutils/seatd
|
||||
- x11/libinput
|
||||
- x11/libX11
|
||||
- x11/pixman
|
||||
- x11/xcb-util-wm
|
||||
- x11-servers/xwayland
|
||||
- misc/hwdata
|
||||
sources:
|
||||
- https://github.com/swaywm/sway
|
||||
- https://gitlab.freedesktop.org/wlroots/wlroots.git
|
||||
- https://github.com/swaywm/wlroots#0.14.0
|
||||
tasks:
|
||||
- setup: |
|
||||
cd sway
|
||||
|
@ -39,7 +34,7 @@ tasks:
|
|||
cd subprojects
|
||||
ln -s ../../wlroots wlroots
|
||||
cd ..
|
||||
meson build --fatal-meson-warnings -Dtray=enabled -Dsd-bus-provider=basu
|
||||
meson build -Dtray=enabled -Dsd-bus-provider=basu
|
||||
- build: |
|
||||
cd sway
|
||||
ninja -C build
|
||||
|
|
16
.clang-format
Normal file
16
.clang-format
Normal file
|
@ -0,0 +1,16 @@
|
|||
BasedOnStyle: LLVM
|
||||
IndentWidth: 4
|
||||
TabWidth: 4
|
||||
UseTab: Always
|
||||
BreakBeforeBraces: Attach
|
||||
AllowShortIfStatementsOnASingleLine: false
|
||||
IndentCaseLabels: false
|
||||
SortIncludes: false
|
||||
ColumnLimit: 80
|
||||
AlignAfterOpenBracket: DontAlign
|
||||
BinPackParameters: false
|
||||
BinPackArguments: false
|
||||
ContinuationIndentWidth: 8
|
||||
AllowAllParametersOfDeclarationOnNextLine: false
|
||||
AllowShortLoopsOnASingleLine: true
|
||||
ReflowComments: false
|
4
.github/ISSUE_TEMPLATE/bug_report.md
vendored
4
.github/ISSUE_TEMPLATE/bug_report.md
vendored
|
@ -6,8 +6,9 @@ labels: 'bug'
|
|||
---
|
||||
|
||||
### Please read the following before submitting:
|
||||
- Please do NOT submit bug reports for questions. Ask questions on IRC at #sway on Libera Chat.
|
||||
- Please do NOT submit bug reports for questions. Ask questions on IRC at #sway on irc.freenode.net.
|
||||
- Proprietary graphics drivers, including nvidia, are not supported. Please use the open source equivalents, such as nouveau, if you would like to use Sway.
|
||||
- Problems with the Wayland version of Firefox are likely to be Firefox bugs. Start by submitting your issue to the Firefox Bugzilla and come back here only after they confirm otherwise.
|
||||
- Please do NOT submit issues for information from the github wiki. The github wiki is community maintained and therefore may contain outdated information, scripts that don't work or obsolete workarounds.
|
||||
If you fix a script or find outdated information, don't hesitate to adjust the wiki page.
|
||||
|
||||
|
@ -18,7 +19,6 @@ labels: 'bug'
|
|||
- **Debug Log:**
|
||||
- Run `sway -d 2> ~/sway.log` from a TTY and upload it to a pastebin, such as gist.github.com.
|
||||
- This will record information about sway's activity. Please try to keep the reproduction as brief as possible and exit sway.
|
||||
- Attach the **full** file, do not truncate it.
|
||||
|
||||
- **Configuration File:**
|
||||
- Please try to produce with the default configuration.
|
||||
|
|
4
.github/ISSUE_TEMPLATE/config.yml
vendored
4
.github/ISSUE_TEMPLATE/config.yml
vendored
|
@ -1,5 +1,5 @@
|
|||
blank_issues_enabled: false
|
||||
contact_links:
|
||||
- name: Questions
|
||||
url: "https://libera.chat"
|
||||
about: "Please ask questions on IRC in #sway on Libera Chat"
|
||||
url: "http://webchat.freenode.net/?channels=sway&uio=d4"
|
||||
about: "Please ask questions on IRC in #sway on irc.freenode.net"
|
||||
|
|
1
.gitignore
vendored
1
.gitignore
vendored
|
@ -6,7 +6,6 @@ bin/
|
|||
test/
|
||||
build/
|
||||
build-*/
|
||||
.cache/
|
||||
.lvimrc
|
||||
config-debug
|
||||
wayland-*-protocol.*
|
||||
|
|
|
@ -1,8 +1,9 @@
|
|||
# Contributing to sway
|
||||
|
||||
Contributing just involves sending a pull request. You will probably be more
|
||||
successful with your contribution if you visit #sway-devel on Libera Chat
|
||||
upfront and discuss your plans.
|
||||
successful with your contribution if you visit
|
||||
[#sway-devel](https://webchat.freenode.net/?channels=sway-devel) on
|
||||
irc.freenode.net upfront and discuss your plans.
|
||||
|
||||
Note: rules are made to be broken. Adjust or ignore any/all of these as you see
|
||||
fit, but be prepared to justify it to your peers.
|
||||
|
|
91
README.ar.md
91
README.ar.md
|
@ -1,91 +0,0 @@
|
|||
# sway
|
||||
|
||||
sway
|
||||
|
||||
هو مدير للمجموعات المركبة لـ[Wayland] متوافق مع [i3] -
|
||||
|
||||
إقرأ [الأسئلة الشائعة](https://github.com/swaywm/sway/wiki)
|
||||
|
||||
انضم الى [قناة IRC](https://web.libera.chat/gamja/?channels=#sway)
|
||||
|
||||
|
||||
## تواقيع الإصدار
|
||||
تٌوقع الإصدارات بـواسطة [E88F5E48] و تُنشر على [GitHub](https://github.com/swaywm/sway/releases)
|
||||
|
||||
## التثبيت
|
||||
|
||||
### بإستخدام الحزم
|
||||
|
||||
يتوفر Sway للعديد من التوزيعات، حاول تثبيت حزمة "sway" لتوزيعتك
|
||||
### التجميع من المصدر
|
||||
إطلع على [صفحة الويكي هذه](https://github.com/swaywm/sway/wiki/Development-Setup) إذا أردت بناء الـHEAD من sway و wlroots لأغراض الفحص والتطوير
|
||||
|
||||
تثبيت اللوازم:
|
||||
* meson \*
|
||||
* [wlroots]
|
||||
* wayland
|
||||
* wayland-protocols \*
|
||||
* pcre2
|
||||
* json-c
|
||||
* pango
|
||||
* cairo
|
||||
* gdk-pixbuf2 (optional: system tray)
|
||||
* [scdoc] (optional: man pages) \*
|
||||
* git (optional: version info) \*
|
||||
|
||||
_\* Compile-time dep_
|
||||
|
||||
نفذ هذه الأوامر:
|
||||
|
||||
meson build/
|
||||
ninja -C build/
|
||||
sudo ninja -C build/ install
|
||||
|
||||
## الإعدادات
|
||||
|
||||
إذا كنت بالفعل تستخدم i3، فعليك نسخ إعدادات i3 لديك إلى `~/.config/sway/config` وسوف تعمل تلقائياً.
|
||||
|
||||
و إلا عليك نسخ ملف الإعدادات النموذج إلى `config/sway/config` الموجود عادةً في `/etc/sway/config.`
|
||||
|
||||
|
||||
## التشغيل
|
||||
|
||||
شغل `sway` بإستخدام أمر TTY.
|
||||
قد يعمل بعض مدراء العرض مع أنهم غير مدعومون من sway
|
||||
(gdm مثلاً يعمل بشكل جيد إلى حد ما)
|
||||
|
||||
[en]: https://github.com/swaywm/sway#readme
|
||||
[ar]: README.ar.md
|
||||
[cs]: README.cs.md
|
||||
[de]: README.de.md
|
||||
[dk]: README.dk.md
|
||||
[es]: README.es.md
|
||||
[fr]: README.fr.md
|
||||
[ge]: README.ge.md
|
||||
[gr]: README.gr.md
|
||||
[hi]: README.hi.md
|
||||
[hu]: README.hu.md
|
||||
[ir]: README.ir.md
|
||||
[it]: README.it.md
|
||||
[ja]: README.ja.md
|
||||
[ko]: README.ko.md
|
||||
[nl]: README.nl.md
|
||||
[no]: README.no.md
|
||||
[pl]: README.pl.md
|
||||
[pt]: README.pt.md
|
||||
[ro]: README.ro.md
|
||||
[ru]: README.ru.md
|
||||
[sv]: README.sv.md
|
||||
[tr]: README.tr.md
|
||||
[uk]: README.uk.md
|
||||
[zh-CN]: README.zh-CN.md
|
||||
[zh-TW]: README.zh-TW.md
|
||||
[i3]: https://i3wm.org/
|
||||
[Wayland]: http://wayland.freedesktop.org/
|
||||
[FAQ]: https://github.com/swaywm/sway/wiki
|
||||
[IRC channel]: https://web.libera.chat/gamja/?channels=#sway
|
||||
[E88F5E48]: https://keys.openpgp.org/search?q=34FF9526CFEF0E97A340E2E40FDE7BE0E88F5E48
|
||||
[GitHub releases]: https://github.com/swaywm/sway/releases
|
||||
[Development setup]: https://github.com/swaywm/sway/wiki/Development-Setup
|
||||
[wlroots]: https://gitlab.freedesktop.org/wlroots/wlroots
|
||||
[scdoc]: https://git.sr.ht/~sircmpwn/scdoc
|
92
README.cs.md
92
README.cs.md
|
@ -1,92 +0,0 @@
|
|||
# sway
|
||||
|
||||
sway je s [i3] kompatibilní [Wayland] kompozitor. Přečtěte si [FAQ]. Připojte se na
|
||||
[IRC kanál][IRC channel] \(#sway na irc.libera.chat).
|
||||
|
||||
## Podpisy vydání
|
||||
|
||||
Vydání jsou podepsána [E88F5E48] a publikována [na GitHubu][GitHub releases].
|
||||
|
||||
## Instalace
|
||||
|
||||
### Z balíčků
|
||||
|
||||
Sway je dostupný ve spoustě distribucí. Zkuste nainstalovat balíček "sway" ve vaší
|
||||
distribuci.
|
||||
|
||||
### Kompilace ze zdrojových kódů
|
||||
|
||||
Podívejte se na [tuto stránku wiki][Development setup], pokud chcete sestavit HEAD
|
||||
sway a wlroots pro testování nebo vývoj.
|
||||
|
||||
Nainstalujte závislosti:
|
||||
|
||||
* meson \*
|
||||
* [wlroots]
|
||||
* wayland
|
||||
* wayland-protocols \*
|
||||
* pcre2
|
||||
* json-c
|
||||
* pango
|
||||
* cairo
|
||||
* gdk-pixbuf2 (volitelné: oznamovací oblast)
|
||||
* [swaybg] (volitelné: tapeta)
|
||||
* [scdoc] (volitelné: manuálové stránky) \*
|
||||
* git (volitelné: informace o verzi) \*
|
||||
|
||||
_\* Závislost pouze pro kompilaci_
|
||||
|
||||
Spusťte tyto příkazy:
|
||||
|
||||
meson build/
|
||||
ninja -C build/
|
||||
sudo ninja -C build/ install
|
||||
|
||||
## Konfigurace
|
||||
|
||||
Pokud již používáte i3, zkopírujte svou konfiguraci i3 do `~/.config/sway/config`
|
||||
a ta bude ihned fungovat. Jinak zkopírujte do `~/.config/sway/config` ukázkový
|
||||
konfigurační soubor. Ten se obvykle nachází v `/etc/sway/config`.
|
||||
Pro více informací o konfiguraci spusťte `man 5 sway`.
|
||||
|
||||
## Spuštění
|
||||
|
||||
Spusťte `sway` z TTY. Některé správce zobrazení mohou fungovat, ale nejsou
|
||||
podporovány sway (je známo, že gdm funguje docela dobře).
|
||||
|
||||
[en]: https://github.com/swaywm/sway#readme
|
||||
[ar]: README.ar.md
|
||||
[cs]: README.cs.md
|
||||
[de]: README.de.md
|
||||
[dk]: README.dk.md
|
||||
[es]: README.es.md
|
||||
[fr]: README.fr.md
|
||||
[ge]: README.ge.md
|
||||
[gr]: README.gr.md
|
||||
[hi]: README.hi.md
|
||||
[hu]: README.hu.md
|
||||
[ir]: README.ir.md
|
||||
[it]: README.it.md
|
||||
[ja]: README.ja.md
|
||||
[ko]: README.ko.md
|
||||
[nl]: README.nl.md
|
||||
[no]: README.no.md
|
||||
[pl]: README.pl.md
|
||||
[pt]: README.pt.md
|
||||
[ro]: README.ro.md
|
||||
[ru]: README.ru.md
|
||||
[sv]: README.sv.md
|
||||
[tr]: README.tr.md
|
||||
[uk]: README.uk.md
|
||||
[zh-CN]: README.zh-CN.md
|
||||
[zh-TW]: README.zh-TW.md
|
||||
[i3]: https://i3wm.org/
|
||||
[Wayland]: http://wayland.freedesktop.org/
|
||||
[FAQ]: https://github.com/swaywm/sway/wiki
|
||||
[IRC channel]: https://web.libera.chat/gamja/?channels=#sway
|
||||
[E88F5E48]: https://keys.openpgp.org/search?q=34FF9526CFEF0E97A340E2E40FDE7BE0E88F5E48
|
||||
[GitHub releases]: https://github.com/swaywm/sway/releases
|
||||
[Development setup]: https://github.com/swaywm/sway/wiki/Development-Setup
|
||||
[wlroots]: https://gitlab.freedesktop.org/wlroots/wlroots
|
||||
[swaybg]: https://github.com/swaywm/swaybg/
|
||||
[scdoc]: https://git.sr.ht/~sircmpwn/scdoc
|
24
README.de.md
24
README.de.md
|
@ -1,30 +1,30 @@
|
|||
# Sway
|
||||
Sway ist ein [i3](https://i3wm.org/)-kompatibler [Wayland](http://wayland.freedesktop.org/)-Compositor. Lies die [FAQ](https://github.com/swaywm/sway/wiki). Tritt dem [IRC Channel](https://web.libera.chat/gamja/?channels=#sway) bei (#sway on irc.libera.chat; Englisch).
|
||||
Sway ist ein [i3](https://i3wm.org/)-kompatibler [Wayland](http://wayland.freedesktop.org/)-Compositor. Lies die [FAQ](https://github.com/swaywm/sway/wiki). Tritt dem [IRC Channel](http://webchat.freenode.net/?channels=sway&uio=d4) bei (#sway on irc.freenode.net; Englisch).
|
||||
|
||||
## Signaturen
|
||||
Jedes Release wird mit dem PGP-Schlüssel [E88F5E48](https://keys.openpgp.org/search?q=34FF9526CFEF0E97A340E2E40FDE7BE0E88F5E48) signiert und [auf GitHub](https://github.com/swaywm/sway/releases) veröffentlicht.
|
||||
Jedes Release wird mit dem PGP-Schlüssel [B22DA89A](http://pgp.mit.edu/pks/lookup?op=vindex&search=0x52CB6609B22DA89A) signiert und auf GitHub veröffentlicht.
|
||||
|
||||
## Installation
|
||||
### Mit der Paketverwaltung
|
||||
Sway kann in vielen Distributionen direkt durch die Paketverwaltung installiert werden. Das Paket sollte "sway" heißen. Falls es kein solches Paket gibt, kannst du im [Wiki](https://github.com/swaywm/sway/wiki/Unsupported-packages) (englisch) nach mehr Informationen bezüglich deiner Distribution suchen.
|
||||
|
||||
### Über die Paketverwaltung
|
||||
|
||||
Sway kann in vielen Distributionen direkt durch die Paketverwaltung installiert werden. Versuche einfach das Packet "sway" zu installieren.
|
||||
Falls du sway für deine eigene Distribution als Paket bereitstellen möchtest, solltest du die Entwickler per IRC oder E-Mail (sir@cmpwn.com) kontaktieren.
|
||||
|
||||
### Quellcode selbst kompilieren
|
||||
|
||||
sway benötigt die folgenden Pakete:
|
||||
|
||||
* meson\*
|
||||
* [wlroots](https://gitlab.freedesktop.org/wlroots/wlroots)
|
||||
* [wlroots](https://github.com/swaywm/wlroots)
|
||||
* wayland
|
||||
* wayland-protocols\*
|
||||
* pcre2
|
||||
* pcre
|
||||
* json-c
|
||||
* pango
|
||||
* cairo
|
||||
* gdk-pixbuf2 (Optional, wird für das Benachrichtigungsfeld (System Tray) benötigt)
|
||||
* [scdoc](https://git.sr.ht/~sircmpwn/scdoc) (Optional, wird für die Dokumentation (Man Pages) benötigt)\*
|
||||
* git (Optional: Versionsinfo)\*
|
||||
* [scdoc](https://git.sr.ht/~sircmpwn/scdoc)\* (Optional, wird für die Dokumentation (Man Pages) benötigt)
|
||||
* git\*
|
||||
|
||||
_\*Werden nur während des Kompilierens benötigt_
|
||||
|
||||
|
@ -34,6 +34,12 @@ Führe die folgenden Befehle aus:
|
|||
ninja -C build
|
||||
sudo ninja -C build install
|
||||
|
||||
Falls dein System nicht logind benutzt, musst du sway noch die passenden Berechtigungen geben:
|
||||
|
||||
sudo chmod a+s /usr/local/bin/sway
|
||||
|
||||
Sway läuft nur in der Startphase mit Root-Rechten.
|
||||
|
||||
## Konfiguration
|
||||
|
||||
Falls du von i3 migrierst, kannst du deine Konfigurationsdatei nach `~/.config/sway/config` kopieren und die Einstellungen sollten ohne Weiteres funktionieren. Ansonsten kannst du die Beispielkonfiguration, die normalerweise in `/etc/sway/config` liegt, nach `~/.config/sway/config` kopieren. Die Dokumentation zur Konfigurationsdatei findest du in `man 5 sway`.
|
||||
|
|
63
README.dk.md
63
README.dk.md
|
@ -1,43 +1,41 @@
|
|||
# Sway
|
||||
|
||||
Sway er en [i3]-kompatibel [Wayland] compositor. Læs [Ofte stillede spørgsmål].
|
||||
Deltag på [IRC kanalen][IRC kanal] \(#sway på irc.libera.chat).
|
||||
Sway er en [i3](https://i3wm.org/)-kompatibel [Wayland](http://wayland.freedesktop.org/) compositor.
|
||||
Læs [Ofte stillede spørgsmål](https://github.com/swaywm/sway/wiki).
|
||||
Deltag på [IRC kanalen](http://webchat.freenode.net/?channels=sway&uio=d4) (#sway på irc.freenode.net).
|
||||
|
||||
## Udgivelses Signaturer
|
||||
|
||||
Udgivelser er signeret med [E88F5E48] og publiceret [på GitHub][GitHub
|
||||
releases].
|
||||
Udgivelser er signeret med [B22DA89A](http://pgp.mit.edu/pks/lookup?op=vindex&search=0x52CB6609B22DA89A)
|
||||
og publiseret på [GitHub](https://github.com/swaywm/sway/releases).
|
||||
|
||||
## Installation
|
||||
|
||||
### Fra pakker
|
||||
### Fra Pakker
|
||||
|
||||
Sway er tilgængelig i mange distributioner. Prøv at installere "sway" pakken
|
||||
fra din.
|
||||
Sway er tilgængelig i mange distributioner. Prøv at installere pakken "sway". Hvis den ikke er tilgængelig, så tjek [denne wiki-side](https://github.com/swaywm/sway/wiki/Unsupported-packages)
|
||||
for information om installation til din(e) distribution(er).
|
||||
|
||||
Hvis du er interesseret i at pakke Sway til din distribution, kan du tage forbi
|
||||
IRC kanalen eller sende en email til sir@cmpwn.com for rådgivning.
|
||||
Hvis du er interesseret i at lave en Sway pakke til din distribution, burde du besøge IRC
|
||||
kanalen eller sende en e-mail til sir@cmpwn.com for rådgivning.
|
||||
|
||||
### Kompilering fra kildekode
|
||||
|
||||
Se [denne wiki-side][Opsætning til udvikling] hvis du vil bygge HEAD af sway og
|
||||
wlroots til test eller udvikling.
|
||||
|
||||
Installationsafhængigheder:
|
||||
Installation afhænger af følgende programmer:
|
||||
|
||||
* meson \*
|
||||
* [wlroots]
|
||||
* [wlroots](https://github.com/swaywm/wlroots)
|
||||
* wayland
|
||||
* wayland-protocols \*
|
||||
* pcre2
|
||||
* pcre
|
||||
* json-c
|
||||
* pango
|
||||
* cairo
|
||||
* gdk-pixbuf2 (valgfrit: system tray)
|
||||
* [scdoc] (valgfrit: man pages) \*
|
||||
* gdk-pixbuf2 (valgfrit tillæg: system tray)
|
||||
* [scdoc](https://git.sr.ht/~sircmpwn/scdoc) (valgfrit tillæg: man pages) \*
|
||||
* git \*
|
||||
|
||||
_\*Kompileringsafhængighed_
|
||||
_\*Kompiler krav_
|
||||
|
||||
Kør følgende kommandoer:
|
||||
|
||||
|
@ -45,24 +43,21 @@ Kør følgende kommandoer:
|
|||
ninja -C build
|
||||
sudo ninja -C build install
|
||||
|
||||
På systemer uden 'logind', behøver du at sætte ejerens bruger-id for Sways eksekverbare filer - såkaldt SUID (Set owner User ID):
|
||||
|
||||
sudo chmod a+s /usr/local/bin/sway
|
||||
|
||||
Sway vil frasige sig 'root' tilladelser kort efter opstart
|
||||
|
||||
## Konfiguration
|
||||
|
||||
Hvis du allerede bruger i3 kan du bare kopiere din i3 konfiguration til
|
||||
`~/.config/sway/config`. Ellers skal du kopiere eksempelkonfigurationsfilen til
|
||||
`~/.config/sway/config`. Den er normalt placeret i `/etc/sway/config`. Kør
|
||||
`man 5 sway` for at få oplysninger om konfigurationen.
|
||||
Hvis du allerede bruger i3, bør du kopiere din i3-konfiguration til `~/.config/sway/config` og
|
||||
det vil bare fungerer. Ellers skal du kopiere eksempel konfigurations filen til
|
||||
`~/.config/sway/config`. Den er normalt placeret i `/etc/sway/config`.
|
||||
Kør `man 5 sway` for at få oplysninger om konfigurationen.
|
||||
|
||||
## Eksekvering
|
||||
## Kører
|
||||
|
||||
Kør `sway` fra en TTY. Nogle display managers kan fungere, men Sway yder ikke
|
||||
support til dem (gdm er kendt for at fungere temmelig godt).
|
||||
Kør `sway` fra en TTY. Nogle display managers fungerer muligvis, men understøttes ikke af
|
||||
Sway (gdm er kendt for at fungere temmelig godt).
|
||||
|
||||
[i3]: https://i3wm.org/
|
||||
[Wayland]: http://wayland.freedesktop.org/
|
||||
[Ofte stillede spørgsmål]: https://github.com/swaywm/sway/wiki
|
||||
[IRC kanal]: https://web.libera.chat/gamja/?channels=#sway
|
||||
[E88F5E48]: https://keys.openpgp.org/search?q=34FF9526CFEF0E97A340E2E40FDE7BE0E88F5E48
|
||||
[GitHub releases]: https://github.com/swaywm/sway/releases
|
||||
[Opsætning til udvikling]: https://github.com/swaywm/sway/wiki/Development-Setup
|
||||
[wlroots]: https://gitlab.freedesktop.org/wlroots/wlroots
|
||||
[scdoc]: https://git.sr.ht/~sircmpwn/scdoc
|
||||
|
|
16
README.es.md
16
README.es.md
|
@ -1,12 +1,12 @@
|
|||
# sway
|
||||
|
||||
sway es un compositor de [Wayland](http://wayland.freedesktop.org/) compatible con [i3](https://i3wm.org/).
|
||||
Lea el [FAQ](https://github.com/swaywm/sway/wiki). Únase al [canal de IRC](https://web.libera.chat/gamja/?channels=#sway) (#sway on
|
||||
irc.libera.chat).
|
||||
Lea el [FAQ](https://github.com/swaywm/sway/wiki). Únase al [canal de IRC](http://webchat.freenode.net/?channels=sway&uio=d4) (#sway on
|
||||
irc.freenode.net).
|
||||
|
||||
## Firmas de las versiones
|
||||
|
||||
Las distintas versiones están firmadas con [E88F5E48](https://keys.openpgp.org/search?q=34FF9526CFEF0E97A340E2E40FDE7BE0E88F5E48)
|
||||
Las distintas versiones están firmadas con [B22DA89A](http://pgp.mit.edu/pks/lookup?op=vindex&search=0x52CB6609B22DA89A)
|
||||
y publicadas [en GitHub](https://github.com/swaywm/sway/releases).
|
||||
|
||||
## Instalación
|
||||
|
@ -25,10 +25,10 @@ escriba un email a sir@cmpwn.com
|
|||
Instale las dependencias:
|
||||
|
||||
* meson \*
|
||||
* [wlroots](https://gitlab.freedesktop.org/wlroots/wlroots)
|
||||
* [wlroots](https://github.com/swaywm/wlroots)
|
||||
* wayland
|
||||
* wayland-protocols \*
|
||||
* pcre2
|
||||
* pcre
|
||||
* json-c
|
||||
* pango
|
||||
* cairo
|
||||
|
@ -44,6 +44,12 @@ Desde su consola, ejecute las órdenes:
|
|||
ninja -C build
|
||||
sudo ninja -C build install
|
||||
|
||||
En sistemas sin `logind`, necesitará cambiar los permisos del archivo compilado de sway:
|
||||
|
||||
sudo chmod a+s /usr/local/bin/sway
|
||||
|
||||
Sway abandonará los permisos de super-usuario al poco de arrancar.
|
||||
|
||||
## Configuración
|
||||
|
||||
Si ya utiliza i3, copie su archivo de configuración de i3 a `~/.config/sway/config` y
|
||||
|
|
14
README.fr.md
14
README.fr.md
|
@ -1,7 +1,7 @@
|
|||
# sway
|
||||
|
||||
Sway est un compositeur [Wayland] compatible avec [i3]. Lisez la
|
||||
[FAQ]. Rejoignez le [canal IRC] (#sway sur irc.libera.chat).
|
||||
[FAQ]. Rejoignez le [canal IRC] (#sway sur irc.freenode.net).
|
||||
|
||||
## Aide en français
|
||||
|
||||
|
@ -35,7 +35,7 @@ Installez les dépendances :
|
|||
* [wlroots]
|
||||
* wayland
|
||||
* wayland-protocols \*
|
||||
* pcre2
|
||||
* pcre
|
||||
* json-c
|
||||
* pango
|
||||
* cairo
|
||||
|
@ -51,6 +51,12 @@ Exécutez ces commandes :
|
|||
ninja -C build
|
||||
sudo ninja -C build install
|
||||
|
||||
Sur les systèmes sans logind, vous devez suid le binaire de sway :
|
||||
|
||||
sudo chmod a+s /usr/local/bin/sway
|
||||
|
||||
Sway se débarassera des permissions *root* peu de temps après le démarrage.
|
||||
|
||||
## Configuration
|
||||
|
||||
Si vous utilisez déjà i3, copiez votre configuration i3 vers
|
||||
|
@ -68,10 +74,10 @@ bien fonctionner).
|
|||
[Wayland]: http://wayland.freedesktop.org/
|
||||
[i3]: https://i3wm.org/
|
||||
[FAQ]: https://github.com/swaywm/sway/wiki
|
||||
[canal IRC]: https://web.libera.chat/gamja/?channels=#sway
|
||||
[canal IRC]: http://webchat.freenode.net/?channels=sway&uio=d4
|
||||
[abdelq]: https://github.com/abdelq
|
||||
[E88F5E48]: https://keys.openpgp.org/search?q=34FF9526CFEF0E97A340E2E40FDE7BE0E88F5E48
|
||||
[versions GitHub]: https://github.com/swaywm/sway/releases
|
||||
[Configuration de développement]: https://github.com/swaywm/sway/wiki/Development-Setup
|
||||
[wlroots]: https://gitlab.freedesktop.org/wlroots/wlroots
|
||||
[wlroots]: https://github.com/swaywm/wlroots
|
||||
[scdoc]: https://git.sr.ht/~sircmpwn/scdoc
|
||||
|
|
61
README.ge.md
61
README.ge.md
|
@ -1,61 +0,0 @@
|
|||
# sway
|
||||
|
||||
sway არის [i3]-თავსებადი [Wayland]-ის კომპოზიტორი. მეტი ინფორმაციისთვის იხილეთ
|
||||
[FAQ]. დაუკავშირდით [IRC არხს][IRC channel] \(#sway irc.libera.chat-ზე).
|
||||
|
||||
## გამოშვების ხელმოწერები
|
||||
|
||||
გამოშვებები ხელმოწერილია [E88F5E48]-ით და გამოქვეყნებულია [GitHub-ზე][GitHub releases].
|
||||
|
||||
## ინსტალაცია
|
||||
|
||||
### რეპოზიტორიიდან
|
||||
|
||||
Sway არის ხელმისაწვდომი ბევრი დისტრიბუტაციისთვის. ცადეთ "sway" პაკეტის ინსტალაცია თქვენთვის.
|
||||
|
||||
### კოდის კომპილაცია
|
||||
|
||||
იხილეთ [ეს ვიკი გვერდი][Development setup] თუ გინდათ რომ ააწყოთ sway და wlroots სატესტოდ ან დეველოპმენტისთვის.
|
||||
|
||||
დააინსტალირეთ დამოკიდებულებები:
|
||||
|
||||
* meson \*
|
||||
* [wlroots]
|
||||
* wayland
|
||||
* wayland-protocols \*
|
||||
* pcre2
|
||||
* json-c
|
||||
* pango
|
||||
* cairo
|
||||
* gdk-pixbuf2 (ასევე არჩევითია: system tray)
|
||||
* [scdoc] (ასევე არჩევითია: man pages) \*
|
||||
* git (ასევე არჩევითია: version info) \*
|
||||
|
||||
_\* Compile-time dep_
|
||||
|
||||
გაუშვით ეს ბრძანებები:
|
||||
|
||||
meson build/
|
||||
ninja -C build/
|
||||
sudo ninja -C build/ install
|
||||
|
||||
## კონფიგურაცია
|
||||
|
||||
თუ უკვე იყენებთ i3-ს, მაშინ დააკოპირე i3 კონფიგურაცია და ჩასვი `~/.config/sway/config`
|
||||
და უპრობლემოდ იმუშავებს პირდაპირ. წინააღმდეგ შემთხვევაში კონფიგურაციის ნიმუში ჩააკოპირეთ აქ: `~/.config/sway/config`. კომპიგურაციის ნიმუში ხშირ შემთხვევაში არის `/etc/sway/config`.
|
||||
გაუშვი `man 5 sway` კონპიგურაციაზე ინფორმაციის მისაღებად.
|
||||
|
||||
## გაშვება
|
||||
|
||||
გაუშვი `sway` TTY-ისთვის. ზოგიერთმა ლოგინ მენეჯერმა შეიძლება იმუშავოს, მაგრამ არ
|
||||
არის მხარდაჭერილი sway-სგან (როგორც წესი კარგად მუშაობს gdm).
|
||||
|
||||
[i3]: https://i3wm.org/
|
||||
[Wayland]: http://wayland.freedesktop.org/
|
||||
[FAQ]: https://github.com/swaywm/sway/wiki
|
||||
[IRC channel]: https://web.libera.chat/gamja/?channels=#sway
|
||||
[E88F5E48]: https://keys.openpgp.org/search?q=34FF9526CFEF0E97A340E2E40FDE7BE0E88F5E48
|
||||
[GitHub releases]: https://github.com/swaywm/sway/releases
|
||||
[Development setup]: https://github.com/swaywm/sway/wiki/Development-Setup
|
||||
[wlroots]: https://gitlab.freedesktop.org/wlroots/wlroots
|
||||
[scdoc]: https://git.sr.ht/~sircmpwn/scdoc
|
67
README.gr.md
67
README.gr.md
|
@ -1,67 +0,0 @@
|
|||
# Sway
|
||||
|
||||
Το sway ένα [i3]-συμβατό [Wayland] compositor. Διαβάστε το [FAQ]. Μπείτε στο
|
||||
[IRC channel] \(#sway on irc.libera.chat).
|
||||
|
||||
## Υπογραφές δημοσιεύσεων
|
||||
|
||||
Οι εκδόσεις είναι υπογεραμμένες με [E88F5E48] και δημοσιευμένες [στο GitHub][GitHub releases].
|
||||
|
||||
## Εγκατάσταση
|
||||
|
||||
### Από πακέτα
|
||||
|
||||
Το Sway είναι διαθέσιμο σε πολλά distributions. Δοκιμάστε εγκαταστώντας το "sway" package για
|
||||
το δικό σας.
|
||||
|
||||
Εάν ενδιαφέρεστε για packaging του sway για το distribution σας, να πάτε στο IRC
|
||||
channel ή στείλτε ένα email στο sir@cmpwn.com για συμβουλές.
|
||||
|
||||
### Compiling από πηγή
|
||||
|
||||
Τσεκάρετε [αυτό το wiki page][Development setup] εάμα θέλετε να κάνετε build το HEAD του
|
||||
sway και wlroots γιά τεστάρισμα ή development.
|
||||
|
||||
Εγκατάσταση των dependencies:
|
||||
|
||||
* meson \*
|
||||
* [wlroots]
|
||||
* wayland
|
||||
* wayland-protocols \*
|
||||
* pcre2
|
||||
* json-c
|
||||
* pango
|
||||
* cairo
|
||||
* gdk-pixbuf2 (προαιρετικό: system tray)
|
||||
* [scdoc] (προαιρετικό: man pages) \*
|
||||
* git (προαιρετικό: πληροφορίες εκδώσεων) \*
|
||||
|
||||
_\*Compile-time dep_
|
||||
|
||||
Τρέξτε αυτά τα commands:
|
||||
|
||||
meson build/
|
||||
ninja -C build/
|
||||
sudo ninja -C build/ install
|
||||
|
||||
## Configuration
|
||||
|
||||
Εάν ήδη χρησιμοποιήτε το i3, αντιγράψτε το i3 config σας στο `~/.config/sway/config` και
|
||||
θα δουλέψει out of the box. Αλλιώς, αντιγράψτε το sample configuration αρχείο στο
|
||||
`~/.config/sway/config`. Το οποίο συνήθως βρίσκεται στο `/etc/sway/config`.
|
||||
Κάντε run `man 5 sway` για πληροφορίες τού configuration.
|
||||
|
||||
## Τρέχοντας
|
||||
|
||||
Τρέξτε `sway` από ένα TTY. Μερίκα display managers μπορεί να δουλέψουν αλλά δέν είναι συμβατά με
|
||||
το sway (το gdm γνωρίζεται να δουλέβει σχετικά καλά).
|
||||
|
||||
[i3]: https://i3wm.org/
|
||||
[Wayland]: http://wayland.freedesktop.org/
|
||||
[FAQ]: https://github.com/swaywm/sway/wiki
|
||||
[IRC channel]: https://web.libera.chat/gamja/?channels=#sway
|
||||
[E88F5E48]: https://keys.openpgp.org/search?q=34FF9526CFEF0E97A340E2E40FDE7BE0E88F5E48
|
||||
[GitHub releases]: https://github.com/swaywm/sway/releases
|
||||
[Development setup]: https://github.com/swaywm/sway/wiki/Development-Setup
|
||||
[wlroots]: https://gitlab.freedesktop.org/wlroots/wlroots
|
||||
[scdoc]: https://git.sr.ht/~sircmpwn/scdoc
|
63
README.hi.md
63
README.hi.md
|
@ -1,63 +0,0 @@
|
|||
# sway
|
||||
|
||||
sway एक [i3](https://i3wm.org/)-अनुकूल
|
||||
[Wayland](https://wayland.freedesktop.org/) Compositor है।
|
||||
[FAQ](https://github.com/swaywm/sway/wiki) पढिये। [IRC
|
||||
Channel](https://web.libera.chat/gamja/?channels=#sway)
|
||||
(irc.libera.chat पर #sway) में भी जुडिये।
|
||||
|
||||
## रिलीज हस्ताक्षर
|
||||
|
||||
रिलीजें
|
||||
[E88F5E48](https://keys.openpgp.org/search?q=34FF9526CFEF0E97A340E2E40FDE7BE0E88F5E48)
|
||||
से साइन होतें हैं और [Github पर](https://github.com/swaywm/sway/releases) प्रकाशित होते हैं।
|
||||
|
||||
## इंस्टौलेशन
|
||||
|
||||
### पैकेजों के द्वारा
|
||||
|
||||
Sway कई distributions में उप्लब्ध है। आप अपने में "sway" नामक पैकेज इंस्टौल करके देख
|
||||
सकते हैं।
|
||||
|
||||
### Source से compile करके
|
||||
|
||||
यदि आप परीक्षण और विकास के लिए sway और wlroots के नवीनतम संस्करण बनाना
|
||||
चाहते हैं, तो [यह विकी
|
||||
पृष्ठ](https://github.com/swaywm/sway/wiki/Development-Setup) देखें।
|
||||
|
||||
निर्भरताएं:
|
||||
|
||||
* meson \*
|
||||
* [wlroots](https://gitlab.freedesktop.org/wlroots/wlroots)
|
||||
* wayland
|
||||
* wayland-protocols \*
|
||||
* pcre2
|
||||
* json-c
|
||||
* pango
|
||||
* cairo
|
||||
* gdk-pixbuf (वैकल्पिक: system tray के लिये)
|
||||
* [scdoc](https://git.sr.ht/~sircmpwn/scdoc) (वैकल्पिक: man पृष्ठों के लिये)
|
||||
\*
|
||||
* git (वैकल्पिक: संस्करण जानने के लिये)
|
||||
|
||||
_\* Compilation के समय आवश्यक_
|
||||
|
||||
ये commands चलाएं:
|
||||
|
||||
meson build/
|
||||
ninja -C build/
|
||||
sudo ninja -C build/ install
|
||||
|
||||
## Configuration
|
||||
|
||||
अगर आप पहले से ही i3 का उपयोग करते हैं तो अपने i3 config को
|
||||
`~/.config/sway/config` में copy कर लीजिये और वह बिना किसी परिवर्तन के काम
|
||||
करेगा। अन्यथा, नमूने configuration file को `~/.config/sway/config` में copy
|
||||
कर लीजिये। यह सामान्यतः `/etc/sway/config` में पाया जाता है। `man 5
|
||||
sway` से आप configuration के बारे में जानकारी प्राप्त कर सकते हैं।
|
||||
|
||||
## चलाना
|
||||
|
||||
आप एक tty से `sway` को चला सकते हैं। कुछ display managers काम करते हैं परन्तु ये
|
||||
sway के द्वारा समर्थित नहीं है (gdm के बारे में जाना गया है कि वह सही काम करता
|
||||
है)।
|
70
README.hu.md
70
README.hu.md
|
@ -1,70 +0,0 @@
|
|||
# sway
|
||||
|
||||
A Sway egy [i3]-kompatibilis [Wayland] kompozitor. Olvasd el a [Gyarkan Ismételt Kérdéseket][FAQ]. Csatlakozz az [IRC csatornához][IRC channel] \(`#sway` az `irc.libera.chat`-en).
|
||||
|
||||
## Csomag aláírások
|
||||
|
||||
A kiadott csomagok az [E88F5E48] kulccsal vannak aláírva és [GitHub-on][GitHub releases] publikálva.
|
||||
|
||||
## Telepítés
|
||||
|
||||
### Csomagból
|
||||
|
||||
A Sway sok disztribúció csomagkezelőjéből elérhető, próbáld meg a "sway"
|
||||
csomagot telepíteni az általad használt eszközzel.
|
||||
|
||||
Ha szeretnél csomagot készíteni a saját disztribúciódhoz, ugorj be az IRC
|
||||
csatornára, vagy küldj levelet a sir@cmpwn.com címre tanácsokért.
|
||||
|
||||
### Fordítás forráskódból
|
||||
|
||||
Olvasd el [ezt a wiki oldalt][Development setup], ha szeretnéd tesztelési vagy
|
||||
fejlesztési célokból lefordítani az aktuális (HEAD) állapotát a `sway`-nek és a
|
||||
`wlroots`-nak.
|
||||
|
||||
Telepítsd a függőségeket:
|
||||
|
||||
* meson \*
|
||||
* [wlroots]
|
||||
* wayland
|
||||
* wayland-protocols \*
|
||||
* pcre2
|
||||
* json-c
|
||||
* pango
|
||||
* cairo
|
||||
* gdk-pixbuf2 (opcionális: system tray)
|
||||
* [scdoc] (opcionális: man pages) \*
|
||||
* git (opcionális: version info) \*
|
||||
|
||||
_\*Fordításidejű függőség_
|
||||
|
||||
Futtasd ezeket a parancsokat:
|
||||
|
||||
meson build
|
||||
ninja -C build
|
||||
sudo ninja -C build install
|
||||
|
||||
## Konfiguráció
|
||||
|
||||
Ha előzőleg i3-mat használtál, akkor átmásolhatod az i3 beállításaidat a
|
||||
`~/.config/sway/config` file-ba és ugyanúgy működni fognak. Egyéb esetben másold
|
||||
le kiindulási alapnak a mintát, ami általában az `etc/sway/config` elérési
|
||||
útvonalon található.
|
||||
Futtasd a `man 5 sway` parancsot további információért a konfigurációval
|
||||
kapcsolatban.
|
||||
|
||||
## Futtatás
|
||||
|
||||
Futtasd a `sway` parancsot egy TTY felületről. Néhány bejelentkezéskezelő
|
||||
(display manager) működhet, de alapvetően nem támogatottak a sway által. (A
|
||||
gdm-ről ismeretes, hogy egész jól működik.)
|
||||
|
||||
[i3]: https://i3wm.org/
|
||||
[Wayland]: http://wayland.freedesktop.org/
|
||||
[FAQ]: https://github.com/swaywm/sway/wiki
|
||||
[IRC channel]: https://web.libera.chat/gamja/?channels=#sway
|
||||
[E88F5E48]: https://keys.openpgp.org/search?q=34FF9526CFEF0E97A340E2E40FDE7BE0E88F5E48
|
||||
[GitHub releases]: https://github.com/swaywm/sway/releases
|
||||
[Development setup]: https://github.com/swaywm/sway/wiki/Development-Setup
|
||||
[wlroots]: https://gitlab.freedesktop.org/wlroots/wlroots
|
||||
[scdoc]: https://git.sr.ht/~sircmpwn/scdoc
|
54
README.ir.md
54
README.ir.md
|
@ -1,54 +0,0 @@
|
|||
# sway
|
||||
|
||||
‏sway یک کامپوزیتور الهام گرفته از [i3](https://i3wm.org/) بر روی [Wayland](http://wayland.freedesktop.org/) است. [سوالهای متداول](https://github.com/swaywm/sway/wiki) را بخوانید. در [کانال
|
||||
IRC](http://web.libera.chat/gamja/?channels=sway&uio=d4) عضو شوید (‎#sway‏ در
|
||||
irc.libera.chat).
|
||||
|
||||
برای حمایت از تیم توسعه sway به [صفحه
|
||||
Patreon با نام کاربری SirCmpwn](https://patreon.com/sircmpwn) مراجعه کنید.
|
||||
|
||||
## امضای نسخهها
|
||||
|
||||
امضای نسخهها با [B22DA89A](http://pgp.mit.edu/pks/lookup?op=vindex&search=0x52CB6609B22DA89A) در [GitHub](https://github.com/swaywm/sway/releases) منتشر میشود.
|
||||
|
||||
## شیوه نصب
|
||||
|
||||
### از بستههای رسمی
|
||||
|
||||
‏sway در بستههای رسمی توزیعهای مختلف وجود دارد. بسته «sway» را نصب کنید. در صورتی که بسته رسمی وجود نداشت، برای آگاهی بیشتر درباره نصب روی توزیعتان به این [صفحه راهنما](https://github.com/swaywm/sway/wiki/Unsupported-packages) مراجعه کنید.
|
||||
|
||||
اگر به ایجاد بسته sway برای توزیعتان علاقهمند هستید، از کانال IRC استفاده کنید یا به sir@cmpwn.com ایمیل بزنید.
|
||||
|
||||
### کامپایل کردن کد
|
||||
|
||||
چنانچه میخواهید آخرین نسخه کد sway و wlroots را برای آزمایش یا توسعه بسازید به این [صفحه راهنما](https://github.com/swaywm/sway/wiki/Development-Setup) مراجعه کنید.
|
||||
|
||||
بستههای مورد نیاز:
|
||||
|
||||
* meson \*
|
||||
* [wlroots](https://gitlab.freedesktop.org/wlroots/wlroots)
|
||||
* wayland
|
||||
* wayland-protocols \*
|
||||
* pcre2
|
||||
* json-c
|
||||
* pango
|
||||
* cairo
|
||||
* gdk-pixbuf2 (انتخابی: برای system tray)
|
||||
* [scdoc](https://git.sr.ht/~sircmpwn/scdoc) (انتخابی: برای صفحههای راهنما) \*
|
||||
* git (انتخابی: برای اطلاع در خصوص نسخهها) \*
|
||||
|
||||
_\*نیازمندیهای زمان کامپایل برنامه_
|
||||
|
||||
این فرمانها را اجرا کنید:
|
||||
|
||||
meson build
|
||||
ninja -C build
|
||||
sudo ninja -C build install
|
||||
|
||||
### شخصی سازی و تنظیمات
|
||||
|
||||
اگر در حال حاضر از i3 استفاده میکنید، تنظیمات i3 خودتان را در فایل `~/.config/sway/config` کپی کنید و بدون نیاز به تغییر کار خواهد کرد. در غیر اینصورت، فایل نمونه تنظیمات را استفاده کنید. این فایل عموما در `/etc/sway/config` قرار دارد. برای آگاهی بیشتر `man 5 sway` را اجرا کنید.
|
||||
|
||||
## اجرا
|
||||
|
||||
در محیط TTY کافیست `sway` را اجرا کنید. ممکن است ابزارهای مدیریت نمایشگری نیز برای این کار وجود داشته باشند اما از طرف sway پشتیبانی نمیشوند (gdm عملکرد خوبی در این زمینه دارد).
|
66
README.it.md
66
README.it.md
|
@ -1,66 +0,0 @@
|
|||
# sway
|
||||
|
||||
sway è un compositore di [Wayland] compatibile con [i3]. Leggi le [FAQ].
|
||||
Unisciti al [canale di IRC] \(#sway su irc.libera.chat).
|
||||
|
||||
## Firma delle versioni
|
||||
|
||||
Le versioni sono firmate con la chiave [E88F5E48] e sono pubblicate
|
||||
[su GitHub][GitHub releases].
|
||||
|
||||
## Installazione
|
||||
|
||||
### Da un pacchetto
|
||||
|
||||
Sway è disponibile in molte distribuzioni, prova a installare il pacchetto
|
||||
"sway" per la tua.
|
||||
|
||||
### Compilazione dei sorgenti
|
||||
|
||||
Consulta [questa pagina del wiki][Development setup] se vuoi compilare l'HEAD
|
||||
di sway e wlroots per testarli o contribuire allo sviluppo.
|
||||
|
||||
Installa le dipendenze:
|
||||
|
||||
* meson \*
|
||||
* [wlroots]
|
||||
* wayland
|
||||
* wayland-protocols \*
|
||||
* pcre
|
||||
* json-c
|
||||
* pango
|
||||
* cairo
|
||||
* gdk-pixbuf2 (opzionale: area di notifica)
|
||||
* [scdoc] (opzionale: pagine del manuale) \*
|
||||
* git (opzionale: informazioni sulla versione) \*
|
||||
|
||||
_\* Dipendenza necessaria per la compilazione_
|
||||
|
||||
Esegui questi comandi:
|
||||
|
||||
meson build/
|
||||
ninja -C build/
|
||||
sudo ninja -C build/ install
|
||||
|
||||
## Configurazione
|
||||
|
||||
Se hai già usato i3, copia il tuo file di configurazione in
|
||||
`~/.config/sway/config` e sway funzionerà immediatamente. Altrimenti, copia il
|
||||
file d'esempio in `~/.config/sway/config`, generalmente è situato in
|
||||
`/etc/sway/config`. Consulta `man 5 sway` per ulteriori informazioni sulla
|
||||
configurazione.
|
||||
|
||||
## Esecuzione
|
||||
|
||||
Lancia `sway` da un TTY. Alcuni gestori d'accesso potrebbero funzionare ma non
|
||||
sono supportati da sway (gdm funziona abbastanza bene).
|
||||
|
||||
[i3]: https://i3wm.org/
|
||||
[Wayland]: http://wayland.freedesktop.org/
|
||||
[FAQ]: https://github.com/swaywm/sway/wiki
|
||||
[canale di IRC]: https://web.libera.chat/gamja/?channels=#sway
|
||||
[E88F5E48]: https://keys.openpgp.org/search?q=34FF9526CFEF0E97A340E2E40FDE7BE0E88F5E48
|
||||
[GitHub releases]: https://github.com/swaywm/sway/releases
|
||||
[Development setup]: https://github.com/swaywm/sway/wiki/Development-Setup
|
||||
[wlroots]: https://gitlab.freedesktop.org/wlroots/wlroots
|
||||
[scdoc]: https://git.sr.ht/~sircmpwn/scdoc
|
22
README.ja.md
22
README.ja.md
|
@ -2,7 +2,7 @@
|
|||
|
||||
Swayは[i3](https://i3wm.org/)互換な[Wayland](http://wayland.freedesktop.org/)コンポジタです。
|
||||
[FAQ](https://github.com/swaywm/sway/wiki)も合わせてご覧ください。
|
||||
[IRC チャンネル](https://web.libera.chat/gamja/?channels=#sway) (irc.libera.chatの#sway)もあります。
|
||||
[IRC チャンネル](http://webchat.freenode.net/?channels=sway&uio=d4) (irc.freenode.netの#sway)もあります。
|
||||
|
||||
[![](https://sr.ht/ICd5.png)](https://sr.ht/ICd5.png)
|
||||
|
||||
|
@ -12,7 +12,7 @@ SirCmpwnは、日本語でのサポートをIRCとGitHubで行います。タイ
|
|||
|
||||
## リリースの署名
|
||||
|
||||
Swayのリリースは[E88F5E48](https://keys.openpgp.org/search?q=34FF9526CFEF0E97A340E2E40FDE7BE0E88F5E48)で署名され、[GitHub](https://github.com/swaywm/sway/releases)で公開されています。
|
||||
Swayのリリースは[B22DA89A](http://pgp.mit.edu/pks/lookup?op=vindex&search=0x52CB6609B22DA89A)で署名され、[GitHub](https://github.com/swaywm/sway/releases)で公開されています。
|
||||
|
||||
## インストール
|
||||
|
||||
|
@ -27,18 +27,18 @@ Swayは沢山のディストリビューションで提供されています。"
|
|||
次の依存パッケージをインストールしてください:
|
||||
|
||||
* meson \*
|
||||
* [wlroots](https://gitlab.freedesktop.org/wlroots/wlroots)
|
||||
* [wlroots](https://github.com/swaywm/wlroots)
|
||||
* wayland
|
||||
* wayland-protocols \*
|
||||
* pcre2
|
||||
* pcre
|
||||
* json-c
|
||||
* pango
|
||||
* cairo
|
||||
* gdk-pixbuf2 (任意: システムイコンで必要です)
|
||||
* [scdoc](https://git.sr.ht/~sircmpwn/scdoc) (任意: manで必要です) \*
|
||||
* git (任意: バージョン情報で必要です) \*
|
||||
* gdk-pixbuf2 (システムイコンで必要です)
|
||||
* [scdoc](https://git.sr.ht/~sircmpwn/scdoc) (manで必要です) \*
|
||||
* git \*
|
||||
|
||||
_\*コンパイル時の依存_
|
||||
_\*コンパイルの時_
|
||||
|
||||
次のコマンドを実行してください:
|
||||
|
||||
|
@ -46,6 +46,12 @@ _\*コンパイル時の依存_
|
|||
ninja -C build
|
||||
sudo ninja -C build install
|
||||
|
||||
logindを使用していないシステムでは、バイナリにsuidを設定する必要があります:
|
||||
|
||||
sudo chmod a+s /usr/local/bin/sway
|
||||
|
||||
swayは起動後、すぐにroot許可を落とします。
|
||||
|
||||
## 設定
|
||||
|
||||
既にi3を使用している場合は、i3の設定ファイルを`~/.config/sway/config`にコピーすれば動きます。そうでない場合は、サンプルの設定ファイルを`~/.config/sway/config`にコピーしてください。サンプルの設定ファイルは、通常`/etc/sway/config`にあります。`man 5 sway`を実行することで、設定に関する情報を見ることができます。
|
||||
|
|
14
README.ko.md
14
README.ko.md
|
@ -1,11 +1,11 @@
|
|||
# sway
|
||||
|
||||
sway는 [i3](https://i3wm.org/)-호환 [Wayland](http://wayland.freedesktop.org/) 컴포지터입니다.
|
||||
[FAQ](https://github.com/swaywm/sway/wiki)를 읽어보세요. [IRC 채널](https://web.libera.chat/gamja/?channels=#sway) (#sway on irc.libera.chat)도 있습니다.
|
||||
[FAQ](https://github.com/swaywm/sway/wiki)를 읽어보세요. [IRC 채널](http://webchat.freenode.net/?channels=sway&uio=d4) (#sway on irc.freenode.net)도 있습니다.
|
||||
|
||||
## 릴리즈 서명
|
||||
|
||||
릴리즈는 [E88F5E48](https://keys.openpgp.org/search?q=34FF9526CFEF0E97A340E2E40FDE7BE0E88F5E48)에서 서명되고,
|
||||
릴리즈는 [B22DA89A](http://pgp.mit.edu/pks/lookup?op=vindex&search=0x52CB6609B22DA89A)에서 서명되고,
|
||||
[GitHub에서](https://github.com/swaywm/sway/releases) 공개되고 있습니다.
|
||||
|
||||
## 설치
|
||||
|
@ -24,10 +24,10 @@ IRC 채널을 방문하거나 sir@cmpwn.com으로 이메일을 보내 상담 받
|
|||
다음 의존 패키지들을 설치해 주세요:
|
||||
|
||||
* meson \*
|
||||
* [wlroots](https://gitlab.freedesktop.org/wlroots/wlroots)
|
||||
* [wlroots](https://github.com/swaywm/wlroots)
|
||||
* wayland
|
||||
* wayland-protocols \*
|
||||
* pcre2
|
||||
* pcre
|
||||
* json-c
|
||||
* pango
|
||||
* cairo
|
||||
|
@ -43,6 +43,12 @@ _\*컴파일 떄 필요_
|
|||
ninja -C build
|
||||
sudo ninja -C build install
|
||||
|
||||
logind를 사용하고 있지 않는 시스템에서는, 바이너리에 suid를 설정할 필요가 있습니다:
|
||||
|
||||
sudo chmod a+s /usr/local/bin/sway
|
||||
|
||||
Sway는 시작 후에 root 권한을 drop할 것 입니다.
|
||||
|
||||
## 설정
|
||||
|
||||
i3를 이미 사용 중이라면, i3 config을 `~/.config/sway/config`로 복사하세요.
|
||||
|
|
70
README.md
70
README.md
|
@ -1,9 +1,9 @@
|
|||
# sway
|
||||
|
||||
**[English][en]** - [عربي][ar] - [Česky][cs] - [Deutsch][de] - [Dansk][dk] - [Español][es] - [Français][fr] - [ქართული][ge] - [Ελληνικά][gr] - [हिन्दी][hi] - [Magyar][hu] - [فارسی][ir] - [Italiano][it] - [日本語][ja] - [한국어][ko] - [Nederlands][nl] - [Norsk][no] - [Polski][pl] - [Português][pt] - [Română][ro] - [Русский][ru] - [Svenska][sv] - [Türkçe][tr] - [Українська][uk] - [中文-简体][zh-CN] - [中文-繁體][zh-TW]
|
||||
**[English][en]** - [日本語][ja] - [Français][fr] - [Українська][uk] - [Español][es] - [Polski][pl] - [中文-简体][zh-CN] - [Deutsch][de] - [Nederlands][nl] - [Русский][ru] - [中文-繁體][zh-TW] - [Português][pt] - [Danish][dk] - [한국어][ko] - [Română][ro]
|
||||
|
||||
sway is an [i3]-compatible [Wayland] compositor. Read the [FAQ]. Join the
|
||||
[IRC channel] \(#sway on irc.libera.chat).
|
||||
[IRC channel] \(#sway on irc.freenode.net).
|
||||
|
||||
## Release Signatures
|
||||
|
||||
|
@ -16,6 +16,9 @@ Releases are signed with [E88F5E48] and published [on GitHub][GitHub releases].
|
|||
Sway is available in many distributions. Try installing the "sway" package for
|
||||
yours.
|
||||
|
||||
If you're interested in packaging sway for your distribution, stop by the IRC
|
||||
channel or shoot an email to sir@cmpwn.com for advice.
|
||||
|
||||
### Compiling from Source
|
||||
|
||||
Check out [this wiki page][Development setup] if you want to build the HEAD of
|
||||
|
@ -27,22 +30,27 @@ Install dependencies:
|
|||
* [wlroots]
|
||||
* wayland
|
||||
* wayland-protocols \*
|
||||
* pcre2
|
||||
* pcre
|
||||
* json-c
|
||||
* pango
|
||||
* cairo
|
||||
* gdk-pixbuf2 (optional: additional image formats for system tray)
|
||||
* [swaybg] (optional: wallpaper)
|
||||
* gdk-pixbuf2 (optional: system tray)
|
||||
* [scdoc] (optional: man pages) \*
|
||||
* git (optional: version info) \*
|
||||
|
||||
_\* Compile-time dep_
|
||||
_\*Compile-time dep_
|
||||
|
||||
Run these commands:
|
||||
|
||||
meson build/
|
||||
ninja -C build/
|
||||
sudo ninja -C build/ install
|
||||
meson build
|
||||
ninja -C build
|
||||
sudo ninja -C build install
|
||||
|
||||
On systems without logind, you need to suid the sway binary:
|
||||
|
||||
sudo chmod a+s /usr/local/bin/sway
|
||||
|
||||
Sway will drop root permissions shortly after startup.
|
||||
|
||||
## Configuration
|
||||
|
||||
|
@ -57,38 +65,26 @@ Run `sway` from a TTY. Some display managers may work but are not supported by
|
|||
sway (gdm is known to work fairly well).
|
||||
|
||||
[en]: https://github.com/swaywm/sway#readme
|
||||
[ar]: README.ar.md
|
||||
[cs]: README.cs.md
|
||||
[de]: README.de.md
|
||||
[dk]: README.dk.md
|
||||
[es]: README.es.md
|
||||
[fr]: README.fr.md
|
||||
[ge]: README.ge.md
|
||||
[gr]: README.gr.md
|
||||
[hi]: README.hi.md
|
||||
[hu]: README.hu.md
|
||||
[ir]: README.ir.md
|
||||
[it]: README.it.md
|
||||
[ja]: README.ja.md
|
||||
[ko]: README.ko.md
|
||||
[nl]: README.nl.md
|
||||
[no]: README.no.md
|
||||
[pl]: README.pl.md
|
||||
[pt]: README.pt.md
|
||||
[ro]: README.ro.md
|
||||
[ru]: README.ru.md
|
||||
[sv]: README.sv.md
|
||||
[tr]: README.tr.md
|
||||
[uk]: README.uk.md
|
||||
[zh-CN]: README.zh-CN.md
|
||||
[zh-TW]: README.zh-TW.md
|
||||
[ja]: https://github.com/swaywm/sway/blob/master/README.ja.md
|
||||
[fr]: https://github.com/swaywm/sway/blob/master/README.fr.md
|
||||
[uk]: https://github.com/swaywm/sway/blob/master/README.uk.md
|
||||
[es]: https://github.com/swaywm/sway/blob/master/README.es.md
|
||||
[pl]: https://github.com/swaywm/sway/blob/master/README.pl.md
|
||||
[zh-CN]: https://github.com/swaywm/sway/blob/master/README.zh-CN.md
|
||||
[de]: https://github.com/swaywm/sway/blob/master/README.de.md
|
||||
[nl]: https://github.com/swaywm/sway/blob/master/README.nl.md
|
||||
[ru]: https://github.com/swaywm/sway/blob/master/README.ru.md
|
||||
[zh-TW]: https://github.com/swaywm/sway/blob/master/README.zh-TW.md
|
||||
[pt]: https://github.com/swaywm/sway/blob/master/README.pt.md
|
||||
[dk]: https://github.com/swaywm/sway/blob/master/README.dk.md
|
||||
[ko]: https://github.com/swaywm/sway/blob/master/README.ko.md
|
||||
[ro]: https://github.com/swaywm/sway/blob/master/README.ro.md
|
||||
[i3]: https://i3wm.org/
|
||||
[Wayland]: http://wayland.freedesktop.org/
|
||||
[FAQ]: https://github.com/swaywm/sway/wiki
|
||||
[IRC channel]: https://web.libera.chat/gamja/?channels=#sway
|
||||
[IRC channel]: http://webchat.freenode.net/?channels=sway&uio=d4
|
||||
[E88F5E48]: https://keys.openpgp.org/search?q=34FF9526CFEF0E97A340E2E40FDE7BE0E88F5E48
|
||||
[GitHub releases]: https://github.com/swaywm/sway/releases
|
||||
[Development setup]: https://github.com/swaywm/sway/wiki/Development-Setup
|
||||
[wlroots]: https://gitlab.freedesktop.org/wlroots/wlroots
|
||||
[swaybg]: https://github.com/swaywm/swaybg/
|
||||
[wlroots]: https://github.com/swaywm/wlroots
|
||||
[scdoc]: https://git.sr.ht/~sircmpwn/scdoc
|
||||
|
|
16
README.nl.md
16
README.nl.md
|
@ -2,12 +2,12 @@
|
|||
|
||||
Sway is een [i3](https://i3wm.org/)-compatibele [Wayland](http://wayland.freedesktop.org/) compositor.
|
||||
Lees de [FAQ](https://github.com/swaywm/sway/wiki). Word lid van het [IRC
|
||||
kanaal](https://web.libera.chat/gamja/?channels=#sway) (#sway op
|
||||
irc.libera.chat).
|
||||
kanaal](http://webchat.freenode.net/?channels=sway&uio=d4) (#sway op
|
||||
irc.freenode.net).
|
||||
|
||||
## Releasehandtekeningen
|
||||
|
||||
Releases worden ondertekend met [E88F5E48](https://keys.openpgp.org/search?q=34FF9526CFEF0E97A340E2E40FDE7BE0E88F5E48)
|
||||
Releases worden ondertekend met [B22DA89A](http://pgp.mit.edu/pks/lookup?op=vindex&search=0x52CB6609B22DA89A)
|
||||
en gepubliceerd [op GitHub](https://github.com/swaywm/sway/releases).
|
||||
|
||||
## Installatie
|
||||
|
@ -25,10 +25,10 @@ kanaal of stuur een e-mail naar sir@cmpwn.com voor advies.
|
|||
Afhankelijkheden installeren:
|
||||
|
||||
* meson \*
|
||||
* [wlroots](https://gitlab.freedesktop.org/wlroots/wlroots)
|
||||
* [wlroots](https://github.com/swaywm/wlroots)
|
||||
* wayland
|
||||
* wayland-protocols \*
|
||||
* pcre2
|
||||
* pcre
|
||||
* json-c
|
||||
* pango
|
||||
* cairo
|
||||
|
@ -44,6 +44,12 @@ Voer deze opdrachten uit:
|
|||
ninja -C build
|
||||
sudo ninja -C build install
|
||||
|
||||
Op systemen zonder logind, moet je bij het binaire bestand het suid bit instellen:
|
||||
|
||||
sudo chmod a+s /usr/local/bin/sway
|
||||
|
||||
Sway zal root-rechten kort na het opstarten loslaten.
|
||||
|
||||
## Configuratie
|
||||
|
||||
Als je al i3 gebruikt, kopieer dan je i3-configuratie naar `~/.config/sway/config` en
|
||||
|
|
68
README.no.md
68
README.no.md
|
@ -1,68 +0,0 @@
|
|||
# Sway
|
||||
|
||||
Sway er en [i3]-kompatibel [Wayland] compositor. Les [Ofte stilte spørsmål].
|
||||
Delta på [IRC kanalen][IRC kanal] \(#sway på irc.libera.chat).
|
||||
|
||||
## Utgivelses Signaturer
|
||||
|
||||
Utgivelser er signert med [E88F5E48] og publisert [på GitHub][GitHub
|
||||
releases].
|
||||
|
||||
## Installasjon
|
||||
|
||||
### Fra system pakker
|
||||
|
||||
Sway er tilgjengelig i mange distribusjoner. Prøv å installere "sway" pakken
|
||||
fra din distro sine repoer.
|
||||
|
||||
Er du interessert i å pakke Sway for din distribusjon kan du ta turen innom
|
||||
IRC-kanalen eller send en e-post til sir@cmpwn.com for råd.
|
||||
|
||||
### Kompilering fra kildekode
|
||||
|
||||
Se [denne wiki-siden][Oppsetting for utvikling] hvis du vil bygge fra HEAD grenen av sway og
|
||||
wlroots for testing eller utvikling.
|
||||
|
||||
Installasjonsavhengigheter:
|
||||
|
||||
* meson \*
|
||||
* [wlroots]
|
||||
* wayland
|
||||
* wayland-protocols \*
|
||||
* pcre2
|
||||
* json-c
|
||||
* pango
|
||||
* cairo
|
||||
* gdk-pixbuf2 (valgfritt: system tray)
|
||||
* [scdoc] (valgfritt: man pages) \*
|
||||
* git \*
|
||||
|
||||
_\*Kompileringsavhengigheter_
|
||||
|
||||
Kjør følgende kommandoer:
|
||||
|
||||
meson build
|
||||
ninja -C build
|
||||
sudo ninja -C build install
|
||||
|
||||
## Konfigurasjon
|
||||
|
||||
Hvis du allerede bruker i3 kan du bare kopiere din i3 konfigurasjon til
|
||||
`~/.config/sway/config`. Ellers skal du kopiere eksempel konfigurasjonsfilen til
|
||||
`~/.config/sway/config`. Eksempel filen er normalt plasert i `/etc/sway/config`. Kjør
|
||||
`man 5 sway` for å få oplysninger om konfigurasjonen.
|
||||
|
||||
## Utførelse
|
||||
|
||||
Kjør `sway` fra en TTY. Noen display managers kan fungere, men Sway har ikke
|
||||
støtte for dem (gdm er kjent for å fungere ganske bra).
|
||||
|
||||
[i3]: https://i3wm.org/
|
||||
[Wayland]: http://wayland.freedesktop.org/
|
||||
[Ofte stilte spørsmål]: https://github.com/swaywm/sway/wiki
|
||||
[IRC kanal]: https://web.libera.chat/gamja/?channels=#sway
|
||||
[E88F5E48]: https://keys.openpgp.org/search?q=34FF9526CFEF0E97A340E2E40FDE7BE0E88F5E48
|
||||
[GitHub releases]: https://github.com/swaywm/sway/releases
|
||||
[Oppsetting for utvikling]: https://github.com/swaywm/sway/wiki/Development-Setup
|
||||
[wlroots]: https://gitlab.freedesktop.org/wlroots/wlroots
|
||||
[scdoc]: https://git.sr.ht/~sircmpwn/scdoc
|
16
README.pl.md
16
README.pl.md
|
@ -1,12 +1,12 @@
|
|||
# sway
|
||||
|
||||
sway jest kompozytorem [Wayland](http://wayland.freedesktop.org/) kompatybilnym z [i3](https://i3wm.org/).
|
||||
Przeczytaj [FAQ](https://github.com/swaywm/sway/wiki). Dołącz do [kanału IRC](https://web.libera.chat/gamja/?channels=#sway)
|
||||
(#sway na irc.libera.chat).
|
||||
Przeczytaj [FAQ](https://github.com/swaywm/sway/wiki). Dołącz do [kanału IRC](http://webchat.freenode.net/?channels=sway&uio=d4)
|
||||
(#sway na irc.freenode.net).
|
||||
|
||||
## Podpisy cyfrowe wydań
|
||||
|
||||
Wydania są podpisywane przy pomocy klucza [E88F5E48](https://keys.openpgp.org/search?q=34FF9526CFEF0E97A340E2E40FDE7BE0E88F5E48)
|
||||
Wydania są podpisywane przy pomocy klucza [B22DA89A](http://pgp.mit.edu/pks/lookup?op=vindex&search=0x52CB6609B22DA89A)
|
||||
i publikowane [na GitHubie](https://github.com/swaywm/sway/releases).
|
||||
|
||||
## Instalacja
|
||||
|
@ -25,10 +25,10 @@ adres sir@cmpwn.com w celu uzyskania wskazówek.
|
|||
Zainstaluj zależności:
|
||||
|
||||
* meson \*
|
||||
* [wlroots](https://gitlab.freedesktop.org/wlroots/wlroots)
|
||||
* [wlroots](https://github.com/swaywm/wlroots)
|
||||
* wayland
|
||||
* wayland-protocols \*
|
||||
* pcre2
|
||||
* pcre
|
||||
* json-c
|
||||
* pango
|
||||
* cairo
|
||||
|
@ -44,6 +44,12 @@ Wykonaj następujące polecenia:
|
|||
ninja -C build
|
||||
sudo ninja -C build install
|
||||
|
||||
Na systemach bez logind należy wykonać polecenie suid na pliku wykonywalnym sway:
|
||||
|
||||
sudo chmod a+s /usr/local/bin/sway
|
||||
|
||||
Sway pozbędzie się uprawnień roota tuż po wystartowaniu.
|
||||
|
||||
## Konfiguracja
|
||||
|
||||
Jeśli już korzystasz z i3, skopiuj swoją konfigurację i3 do katalogu `~/.config/sway/config` i
|
||||
|
|
16
README.pt.md
16
README.pt.md
|
@ -2,12 +2,12 @@
|
|||
|
||||
O sway é um compositor do [Wayland](http://wayland.freedesktop.org/) compatível com o [i3](https://i3wm.org/).
|
||||
Leia o [FAQ](https://github.com/swaywm/sway/wiki). Junte-se ao [canal do
|
||||
IRC](https://web.libera.chat/gamja/?channels=#sway) (#sway em
|
||||
irc.libera.chat).
|
||||
IRC](http://webchat.freenode.net/?channels=sway&uio=d4) (#sway em
|
||||
irc.freenode.net).
|
||||
|
||||
## Assinatura das versões
|
||||
|
||||
As versões são assinadas com [E88F5E48](https://keys.openpgp.org/search?q=34FF9526CFEF0E97A340E2E40FDE7BE0E88F5E48)
|
||||
As versões são assinadas com [B22DA89A](http://pgp.mit.edu/pks/lookup?op=vindex&search=0x52CB6609B22DA89A)
|
||||
e publicadas [no GitHub](https://github.com/swaywm/sway/releases).
|
||||
|
||||
## Instalação
|
||||
|
@ -27,10 +27,10 @@ Verifique [essa página da wiki](https://github.com/swaywm/sway/wiki/Development
|
|||
Instale as dependências:
|
||||
|
||||
* meson \*
|
||||
* [wlroots](https://gitlab.freedesktop.org/wlroots/wlroots)
|
||||
* [wlroots](https://github.com/swaywm/wlroots)
|
||||
* wayland
|
||||
* wayland-protocols \*
|
||||
* pcre2
|
||||
* pcre
|
||||
* json-c
|
||||
* pango
|
||||
* cairo
|
||||
|
@ -46,6 +46,12 @@ Execute esses comandos:
|
|||
ninja -C build
|
||||
sudo ninja -C build install
|
||||
|
||||
Em sistemas sem logind, você precisa preparar o binário do sway:
|
||||
|
||||
sudo chmod a+s /usr/local/bin/sway
|
||||
|
||||
O sway perderá as privilégios de de root logo após o início do sistema.
|
||||
|
||||
## Configuração
|
||||
|
||||
Se você já utiliza o i3, então copie os seus arquivos de configuração para `~/.config/sway/config` e
|
||||
|
|
16
README.ro.md
16
README.ro.md
|
@ -1,11 +1,11 @@
|
|||
# sway
|
||||
|
||||
sway este un compositor pentru [Wayland](http://wayland.freedesktop.org/) compatibil cu [i3](https://i3wm.org/).
|
||||
Citiți [FAQ](https://github.com/swaywm/sway/wiki)-ul. Connectați-vă la canalul nostru [IRC](https://web.libera.chat/gamja/?channels=#sway) (#sway pe irc.libera.chat).
|
||||
Citiți [FAQ](https://github.com/swaywm/sway/wiki)-ul. Connectați-vă la canalul nostru [IRC](http://webchat.freenode.net/?channels=sway&uio=d4) (#sway pe irc.freenode.net).
|
||||
|
||||
## Semnarea digitală
|
||||
|
||||
Noile versiuni sunt semnate cu [E88F5E48](https://keys.openpgp.org/search?q=34FF9526CFEF0E97A340E2E40FDE7BE0E88F5E48)
|
||||
Noile versiuni sunt semnate cu [B22DA89A](http://pgp.mit.edu/pks/lookup?op=vindex&search=0x52CB6609B22DA89A)
|
||||
și postate [pe GitHub](https://github.com/swaywm/sway/releases).
|
||||
|
||||
## Instalare
|
||||
|
@ -22,10 +22,10 @@ Dacă sunteți interesați in a crea pachete pentru distribuția voastră, infor
|
|||
Dependențe pentru instalare:
|
||||
|
||||
* meson \*
|
||||
* [wlroots](https://gitlab.freedesktop.org/wlroots/wlroots)
|
||||
* [wlroots](https://github.com/swaywm/wlroots)
|
||||
* wayland
|
||||
* wayland-protocols \*
|
||||
* pcre2
|
||||
* pcre
|
||||
* json-c
|
||||
* pango
|
||||
* cairo
|
||||
|
@ -43,6 +43,14 @@ Rulați aceste comenzi:
|
|||
sudo ninja -C build install
|
||||
```
|
||||
|
||||
Pe sisteme fără logind, trebuie să folosiți următoarea comandă pentru a marca binarul de Sway ca suid:
|
||||
|
||||
```
|
||||
sudo chmod a+s /usr/local/bin/sway
|
||||
```
|
||||
|
||||
Imediat după pornire, Sway va renunța la permisiunile de root.
|
||||
|
||||
## Configurare
|
||||
|
||||
Dacă folosiți deja i3, copiați fișierul de configurare din i3 în `~/.config/sway/config`, și va funcționa fără a necesita nici o modificare. In caz contrar, copiați exemplul de configurare (disponibil de obicei în `/etc/sway/config`) în `~/.config/sway/config`.
|
||||
|
|
14
README.ru.md
14
README.ru.md
|
@ -3,7 +3,7 @@
|
|||
sway - это [i3]-совместимый композитор [Wayland].
|
||||
Больше информации в [FAQ]. Присоединяйтесь к
|
||||
[IRC-каналу][IRC channel] (#sway на
|
||||
irc.libera.chat).
|
||||
irc.freenode.net).
|
||||
|
||||
## Подписи релизов
|
||||
|
||||
|
@ -29,7 +29,7 @@ sway и wlroots для тестирования или разработки.
|
|||
* [wlroots]
|
||||
* wayland
|
||||
* wayland-protocols \*
|
||||
* pcre2
|
||||
* pcre
|
||||
* json-c
|
||||
* pango
|
||||
* cairo
|
||||
|
@ -45,6 +45,12 @@ _\*Зависимости для сборки_
|
|||
ninja -C build
|
||||
sudo ninja -C build install
|
||||
|
||||
На системах без logind вам понадобится добавить suid к файлу программы sway:
|
||||
|
||||
sudo chmod a+s /usr/local/bin/sway
|
||||
|
||||
sway сбросит root-права при запуске.
|
||||
|
||||
## Настройка
|
||||
|
||||
Если вы уже используете i3, скопируйте ваш конфигурационный файл i3 в `~/.config/sway/config`, и
|
||||
|
@ -60,9 +66,9 @@ sway (gdm работает довольно неплохо).
|
|||
[i3]: https://i3wm.org/
|
||||
[Wayland]: http://wayland.freedesktop.org/
|
||||
[FAQ]: https://github.com/swaywm/sway/wiki
|
||||
[IRC channel]: https://web.libera.chat/gamja/?channels=#sway
|
||||
[IRC channel]: http://webchat.freenode.net/?channels=sway&uio=d4
|
||||
[E88F5E48]: https://keys.openpgp.org/search?q=34FF9526CFEF0E97A340E2E40FDE7BE0E88F5E48
|
||||
[GitHub releases]: https://github.com/swaywm/sway/releases
|
||||
[Development setup]: https://github.com/swaywm/sway/wiki/Development-Setup
|
||||
[wlroots]: https://gitlab.freedesktop.org/wlroots/wlroots
|
||||
[wlroots]: https://github.com/swaywm/wlroots
|
||||
[scdoc]: https://git.sr.ht/~sircmpwn/scdoc
|
||||
|
|
81
README.sv.md
81
README.sv.md
|
@ -1,81 +0,0 @@
|
|||
# sway
|
||||
|
||||
sway är en [i3]-kompatibel [Wayland] compositor. Läs våran [FAQ]-sida. Gå med i vår
|
||||
[IRC-kanal] \(#sway på irc.libera.chat).
|
||||
|
||||
## Utgåvosignaturer
|
||||
|
||||
Utgåvor är signerade med [E88F5E48] och publicerade på [GitHub][GitHub releases].
|
||||
|
||||
## Installering
|
||||
|
||||
### Med pakethanterare
|
||||
|
||||
Sway är tillgänglig i många distributioner. Prova att installera "sway" med din distributions pakethanterare.
|
||||
|
||||
### Genom att kompilera från källkod
|
||||
|
||||
Kolla in [denna wiki-sida][Development setup] om du vill bygga sway och wlroots HEAD för testning eller utveckling.
|
||||
|
||||
Installera paket som sway behöver:
|
||||
|
||||
* meson \*
|
||||
* [wlroots]
|
||||
* wayland
|
||||
* wayland-protocols \*
|
||||
* pcre2
|
||||
* json-c
|
||||
* pango
|
||||
* cairo
|
||||
* gdk-pixbuf2 (valbar: systembricka)
|
||||
* [scdoc] (valbar: manualer) \*
|
||||
* git (valbar: versioninfo) \*
|
||||
|
||||
_\* Krav för kompilering_
|
||||
|
||||
Kör dessa kommandon:
|
||||
|
||||
meson build/
|
||||
ninja -C build/
|
||||
sudo ninja -C build/ install
|
||||
|
||||
## Konfiguration
|
||||
|
||||
Ifall du redan använder i3 så kan du kopiera din konfigurationsfil till `~/.config/sway/config` och det kommer då att fungera som det ska.
|
||||
Kopiera annars exemplarkonfigurationsfilen till `~/.config/sway/config`. Den ligger oftast i `/etc/sway/config`.
|
||||
Kör `man 5 sway` för mer information kring konfigurationen.
|
||||
|
||||
## Att köra sway
|
||||
|
||||
Kör `sway` från en TTY. Vissa inloggningahanterare kan fungera men inte vara stödda av sway (gdm ska fungera hyfsat bra).
|
||||
|
||||
[en]: https://github.com/swaywm/sway#readme
|
||||
[de]: README.de.md
|
||||
[dk]: README.dk.md
|
||||
[es]: README.es.md
|
||||
[fr]: README.fr.md
|
||||
[sv]: README.sv.md
|
||||
[gr]: README.gr.md
|
||||
[hu]: README.hu.md
|
||||
[ir]: README.ir.md
|
||||
[it]: README.it.md
|
||||
[ja]: README.ja.md
|
||||
[ko]: README.ko.md
|
||||
[nl]: README.nl.md
|
||||
[pl]: README.pl.md
|
||||
[pt]: README.pt.md
|
||||
[ro]: README.ro.md
|
||||
[ru]: README.ru.md
|
||||
[tr]: README.tr.md
|
||||
[uk]: README.uk.md
|
||||
[zh-CN]: README.zh-CN.md
|
||||
[zh-TW]: README.zh-TW.md
|
||||
[i3]: https://i3wm.org/
|
||||
[Wayland]: http://wayland.freedesktop.org/
|
||||
[FAQ]: https://github.com/swaywm/sway/wiki
|
||||
[IRC-kanal]: https://web.libera.chat/gamja/?channels=#sway
|
||||
[E88F5E48]: https://keys.openpgp.org/search?q=34FF9526CFEF0E97A340E2E40FDE7BE0E88F5E48
|
||||
[GitHub releases]: https://github.com/swaywm/sway/releases
|
||||
[Development setup]: https://github.com/swaywm/sway/wiki/Development-Setup
|
||||
[wlroots]: https://gitlab.freedesktop.org/wlroots/wlroots
|
||||
[scdoc]: https://git.sr.ht/~sircmpwn/scdoc
|
62
README.tr.md
62
README.tr.md
|
@ -1,62 +0,0 @@
|
|||
# sway
|
||||
|
||||
|
||||
Sway, [i3]-uyumlu bir [Wayland] dizgicisidir. [SSS][FAQ]'yi okuyun.
|
||||
[IRC kanalı][IRC channel]na katılın \(irc.libera.chat'te #sway (İngilizce)).
|
||||
|
||||
## Sürüm imzaları
|
||||
|
||||
Sürümler [E88F5E48] ile imzalandı ve [GitHub][GitHub releases]'da yayınlandı.
|
||||
|
||||
## Kurulum
|
||||
|
||||
### Paketler ile
|
||||
|
||||
Sway birçok dağıtımda mevcuttur. Sizinki için "sway" paketini yüklemeyi deneyin.
|
||||
|
||||
Dağıtımınız için sway'i paketlemekle ilgileniyorsanız, IRC kanalına uğrayın veya tavsiye için sir@cmpwn.com adresine bir e-posta gönderin.
|
||||
|
||||
### Kaynak koddan derleme
|
||||
|
||||
Test veya geliştirme için sway ve wlroots'un HEAD'ini oluşturmak istiyorsanız [bu wiki sayfası][Development setup]na göz atın.
|
||||
|
||||
Aşağıdaki bağımlılıkları yükleyin:
|
||||
|
||||
* meson \*
|
||||
* [wlroots]
|
||||
* wayland
|
||||
* wayland-protocols \*
|
||||
* pcre2
|
||||
* json-c
|
||||
* pango
|
||||
* cairo
|
||||
* gdk-pixbuf2 (isteğe bağlı: system tray)
|
||||
* [scdoc] (isteğe bağlı: man pages) \*
|
||||
* git (isteğe bağlı: version info) \*
|
||||
|
||||
_\*Derleme-anı bağımlılıkları_
|
||||
|
||||
Şu komutları çalıştırın:
|
||||
|
||||
meson build
|
||||
ninja -C build
|
||||
sudo ninja -C build install
|
||||
|
||||
## Yapılandırma
|
||||
|
||||
Zaten i3 kullanıyorsanız, i3 yapılandırmanızı `~/.config/sway/config` konumuna kopyalayın ve kutudan çıktığı gibi çalışacaktır. Aksi takdirde, örnek yapılandırma dosyasını `~/.config/sway/config` konumuna kopyalayın. Genellikle `/etc/sway/config` konumunda bulunur.
|
||||
Yapılandırma hakkında bilgi almak için `man 5 sway` komutunu çalıştırın.
|
||||
|
||||
## Çalıştırma
|
||||
|
||||
TTY'den `sway` çalıştırın. Bazı görüntü yöneticileriyle(display manager) çalışabilir ama Sway tarafından desteklenmez. (gdm'nin oldukça iyi çalıştığı bilinmektedir.)
|
||||
|
||||
[i3]: https://i3wm.org/
|
||||
[Wayland]: http://wayland.freedesktop.org/
|
||||
[FAQ]: https://github.com/swaywm/sway/wiki
|
||||
[IRC channel]: https://web.libera.chat/gamja/?channels=#sway
|
||||
[E88F5E48]: https://keys.openpgp.org/search?q=34FF9526CFEF0E97A340E2E40FDE7BE0E88F5E48
|
||||
[GitHub releases]: https://github.com/swaywm/sway/releases
|
||||
[Development setup]: https://github.com/swaywm/sway/wiki/Development-Setup
|
||||
[wlroots]: https://gitlab.freedesktop.org/wlroots/wlroots
|
||||
[scdoc]: https://git.sr.ht/~sircmpwn/scdoc
|
16
README.uk.md
16
README.uk.md
|
@ -2,8 +2,8 @@
|
|||
|
||||
Sway це сумісний з [i3](https://i3wm.org/) композитор [Wayland](http://wayland.freedesktop.org/).
|
||||
Ознайомтесь з [ЧаПами](https://github.com/swaywm/sway/wiki). Приєднуйтесь до [спільноти в
|
||||
IRC](https://web.libera.chat/gamja/?channels=#sway) (#sway на
|
||||
irc.libera.chat).
|
||||
IRC](http://webchat.freenode.net/?channels=sway&uio=d4) (#sway на
|
||||
irc.freenode.net).
|
||||
|
||||
## Підтримка українською мовою
|
||||
|
||||
|
@ -15,7 +15,7 @@ Hummer12007 у IRC-спільноті. Будьте терплячі, вам о
|
|||
|
||||
## Підписи випусків
|
||||
|
||||
Випуски підписані ключем [E88F5E48](https://keys.openpgp.org/search?q=34FF9526CFEF0E97A340E2E40FDE7BE0E88F5E48)
|
||||
Випуски підписані ключем [B22DA89A](http://pgp.mit.edu/pks/lookup?op=vindex&search=0x52CB6609B22DA89A)
|
||||
та публікуються на сторінці [GitHub](https://github.com/swaywm/sway/releases).
|
||||
|
||||
## Встановлення
|
||||
|
@ -36,10 +36,10 @@ Sway доступний у багатьох дистрибутивах Linux (а
|
|||
Встановіть залежності:
|
||||
|
||||
* meson \*
|
||||
* [wlroots](https://gitlab.freedesktop.org/wlroots/wlroots)
|
||||
* [wlroots](https://github.com/swaywm/wlroots)
|
||||
* wayland
|
||||
* wayland-protocols \*
|
||||
* pcre2
|
||||
* pcre
|
||||
* json-c
|
||||
* pango
|
||||
* cairo
|
||||
|
@ -55,6 +55,12 @@ _\*Лише для компіляції_
|
|||
ninja -C build
|
||||
sudo ninja -C build install
|
||||
|
||||
На системах без logind, необхідно встановити біт SUID на виконуваний файл sway:
|
||||
|
||||
sudo chmod a+s /usr/local/bin/sway
|
||||
|
||||
Sway втратить права доступу root незабаром після запуску.
|
||||
|
||||
## Налаштування
|
||||
|
||||
Якщо ви вже використовуєте i3, скопіюйте свій файл налаштувань
|
||||
|
|
|
@ -1,50 +1,63 @@
|
|||
# sway
|
||||
|
||||
sway 是和 [i3](https://i3wm.org/) 兼容的 [Wayland](http://wayland.freedesktop.org/) compositor。
|
||||
[查看FAQ](https://github.com/swaywm/sway/wiki)/ [加入IRC频道](https://web.libera.chat/gamja/?channels=#sway) (#sway on irc.libera.chat)
|
||||
sway 是和 [i3](https://i3wm.org/) 兼容的 [Wayland](http://wayland.freedesktop.org/) compositor.
|
||||
阅读 [FAQ](https://github.com/swaywm/sway/wiki). 加入 [IRC
|
||||
频道](http://webchat.freenode.net/?channels=sway&uio=d4) (#sway on
|
||||
irc.freenode.net).
|
||||
|
||||
## 发行签名
|
||||
## 发布签名
|
||||
|
||||
每个发行版都以 [E88F5E48](https://keys.openpgp.org/search?q=34FF9526CFEF0E97A340E2E40FDE7BE0E88F5E48) 的密钥签名并发布在 [GitHub](https://github.com/swaywm/sway/releases)上。
|
||||
发布是以 [B22DA89A](http://pgp.mit.edu/pks/lookup?op=vindex&search=0x52CB6609B22DA89A) 签名
|
||||
并发布在 [GitHub](https://github.com/swaywm/sway/releases).
|
||||
|
||||
## 安装
|
||||
|
||||
### 从包管理器安装
|
||||
### 从软件包中
|
||||
|
||||
Sway 在很多发行版中可用。请尝试在你的发行版中安装 `sway` 。
|
||||
Sway 在很多发行版中可用. 尝试在你的发行版中安装 "sway" 包.
|
||||
如果这不可用, 请到 [此 wiki 页](https://github.com/swaywm/sway/wiki/Unsupported-packages)
|
||||
检查针对你的发行版关于安装的信息.
|
||||
|
||||
### 从源码编译
|
||||
如果你有兴趣给你的发行版打包 sway, 停下来到 IRC 频道或者发邮件至 sir@cmpwn.com 获取建议.
|
||||
|
||||
如果想要构建最新版sway和wlroots用以测试和开发,请查看 [此wiki页面](https://github.com/swaywm/sway/wiki/Development-Setup)
|
||||
### 从源代码编译
|
||||
|
||||
安装如下依赖:
|
||||
安装依赖:
|
||||
|
||||
* meson \*
|
||||
* [wlroots](https://gitlab.freedesktop.org/wlroots/wlroots)
|
||||
* [wlroots](https://github.com/swaywm/wlroots)
|
||||
* wayland
|
||||
* wayland-protocols \*
|
||||
* pcre2
|
||||
* pcre
|
||||
* json-c
|
||||
* pango
|
||||
* cairo
|
||||
* gdk-pixbuf2 (可选的: system tray)
|
||||
* [scdoc](https://git.sr.ht/~sircmpwn/scdoc) (可选: man pages) \*
|
||||
* [scdoc](https://git.sr.ht/~sircmpwn/scdoc) (可选的: man pages) \*
|
||||
* git \*
|
||||
|
||||
_\*编译时依赖_
|
||||
|
||||
运行如下命令:
|
||||
运行这些命令:
|
||||
|
||||
meson build/
|
||||
ninja -C build/
|
||||
sudo ninja -C build/ install
|
||||
meson build
|
||||
ninja -C build
|
||||
sudo ninja -C build install
|
||||
|
||||
在没有 logind 的系统上, 你需要给 sway 二进制设置 suid:
|
||||
|
||||
sudo chmod a+s /usr/local/bin/sway
|
||||
|
||||
Sway 将会在启动后尽快丢掉 root 权限.
|
||||
|
||||
## 配置
|
||||
|
||||
如果你已经在使用i3,直接复制i3配置文件到 `~/.config/sway/config`,这是开箱即用的。或者,你可以复制配置样例到`~/.config/sway/config`。它通常位于 `/etc/sway/config`。
|
||||
运行 `man 5 sway` 获取关于配置的更多信息。
|
||||
如果你已经在使用 i3, 接下来复制你的 i3 配置到 `~/.config/sway/config`
|
||||
它可以直接工作. 或者, 复制样本配置文件到
|
||||
`~/.config/sway/config`. 它通常位于 `/etc/sway/config`.
|
||||
运行 `man 5 sway` 获取关于配置的信息.
|
||||
|
||||
## 运行
|
||||
|
||||
从 TTY 中运行 `sway`。 某些显示管理器(Display Manager)也许可以工作但不被 sway 支持。
|
||||
(已知 gdm 工作得非常好)。
|
||||
从 TTY 中运行 `sway` . 某些显示管理器可能会工作但并不被 sway 支持
|
||||
(已知的 gdm 工作得非常好).
|
||||
|
|
|
@ -2,12 +2,12 @@
|
|||
|
||||
sway 是一個與 [i3](https://i3wm.org/) 相容的 [Wayland](http://wayland.freedesktop.org/) compositor。
|
||||
閱讀 [FAQ](https://github.com/swaywm/sway/wiki)。 加入 [IRC
|
||||
頻道](https://web.libera.chat/gamja/?channels=#sway) (#sway on
|
||||
irc.libera.chat)
|
||||
頻道](http://webchat.freenode.net/?channels=sway&uio=d4) (#sway on
|
||||
irc.freenode.net)
|
||||
|
||||
## 發行簽章
|
||||
|
||||
所有發行的版本都會以 [E88F5E48](https://keys.openpgp.org/search?q=34FF9526CFEF0E97A340E2E40FDE7BE0E88F5E48) 簽署
|
||||
所有發行的版本都會以 [B22DA89A](http://pgp.mit.edu/pks/lookup?op=vindex&search=0x52CB6609B22DA89A) 簽署
|
||||
並發佈於 [GitHub](https://github.com/swaywm/sway/releases)
|
||||
|
||||
## 安裝
|
||||
|
@ -25,10 +25,10 @@ Sway 在許多發行版都有提供。請自己嘗試於你的發行版安裝
|
|||
相依套件:
|
||||
|
||||
* meson \*
|
||||
* [wlroots](https://gitlab.freedesktop.org/wlroots/wlroots)
|
||||
* [wlroots](https://github.com/swaywm/wlroots)
|
||||
* wayland
|
||||
* wayland-protocols \*
|
||||
* pcre2
|
||||
* pcre
|
||||
* json-c
|
||||
* pango
|
||||
* cairo
|
||||
|
@ -44,6 +44,12 @@ _\*編譯時相依_
|
|||
ninja -C build
|
||||
sudo ninja -C build install
|
||||
|
||||
在沒有 logind 的系統上,你需要為 sway 的執行檔加上 suid。
|
||||
|
||||
sudo chmod a+s /usr/local/bin/sway
|
||||
|
||||
Sway 在啟動不久後就會放棄 root 權限。
|
||||
|
||||
## 設定檔
|
||||
|
||||
如果你已經在使用 i3,你可以直接將你的 i3 設定檔複製到 `~/.config/sway/config` 然後就能直接使用。
|
||||
|
|
|
@ -1,42 +1,50 @@
|
|||
#define _POSIX_C_SOURCE 200809
|
||||
#include <assert.h>
|
||||
#include <cairo.h>
|
||||
#include <errno.h>
|
||||
#include <fcntl.h>
|
||||
#include <pango/pangocairo.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <sys/mman.h>
|
||||
#include <time.h>
|
||||
#include <unistd.h>
|
||||
#include <wayland-client.h>
|
||||
#include "config.h"
|
||||
#include "pool-buffer.h"
|
||||
#include "util.h"
|
||||
|
||||
static int anonymous_shm_open(void) {
|
||||
int retries = 100;
|
||||
static int create_pool_file(size_t size, char **name) {
|
||||
static const char template[] = "sway-client-XXXXXX";
|
||||
const char *path = getenv("XDG_RUNTIME_DIR");
|
||||
if (path == NULL) {
|
||||
fprintf(stderr, "XDG_RUNTIME_DIR is not set\n");
|
||||
return -1;
|
||||
}
|
||||
|
||||
do {
|
||||
// try a probably-unique name
|
||||
struct timespec ts;
|
||||
clock_gettime(CLOCK_MONOTONIC, &ts);
|
||||
pid_t pid = getpid();
|
||||
char name[50];
|
||||
snprintf(name, sizeof(name), "/sway-%x-%x",
|
||||
(unsigned int)pid, (unsigned int)ts.tv_nsec);
|
||||
size_t name_size = strlen(template) + 1 + strlen(path) + 1;
|
||||
*name = malloc(name_size);
|
||||
if (*name == NULL) {
|
||||
fprintf(stderr, "allocation failed\n");
|
||||
return -1;
|
||||
}
|
||||
snprintf(*name, name_size, "%s/%s", path, template);
|
||||
|
||||
// shm_open guarantees that O_CLOEXEC is set
|
||||
int fd = shm_open(name, O_RDWR | O_CREAT | O_EXCL, 0600);
|
||||
if (fd >= 0) {
|
||||
shm_unlink(name);
|
||||
return fd;
|
||||
}
|
||||
int fd = mkstemp(*name);
|
||||
if (fd < 0) {
|
||||
return -1;
|
||||
}
|
||||
|
||||
--retries;
|
||||
} while (retries > 0 && errno == EEXIST);
|
||||
if (!sway_set_cloexec(fd, true)) {
|
||||
close(fd);
|
||||
return -1;
|
||||
}
|
||||
|
||||
return -1;
|
||||
if (ftruncate(fd, size) < 0) {
|
||||
close(fd);
|
||||
return -1;
|
||||
}
|
||||
|
||||
return fd;
|
||||
}
|
||||
|
||||
static void buffer_release(void *data, struct wl_buffer *wl_buffer) {
|
||||
|
@ -54,20 +62,17 @@ static struct pool_buffer *create_buffer(struct wl_shm *shm,
|
|||
uint32_t stride = width * 4;
|
||||
size_t size = stride * height;
|
||||
|
||||
int fd = anonymous_shm_open();
|
||||
if (fd == -1) {
|
||||
return NULL;
|
||||
}
|
||||
if (ftruncate(fd, size) < 0) {
|
||||
close(fd);
|
||||
return NULL;
|
||||
}
|
||||
char *name;
|
||||
int fd = create_pool_file(size, &name);
|
||||
assert(fd != -1);
|
||||
void *data = mmap(NULL, size, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0);
|
||||
struct wl_shm_pool *pool = wl_shm_create_pool(shm, fd, size);
|
||||
buf->buffer = wl_shm_pool_create_buffer(pool, 0,
|
||||
width, height, stride, format);
|
||||
wl_shm_pool_destroy(pool);
|
||||
close(fd);
|
||||
unlink(name);
|
||||
free(name);
|
||||
|
||||
buf->size = size;
|
||||
buf->width = width;
|
||||
|
|
|
@ -1,12 +1,29 @@
|
|||
#include <assert.h>
|
||||
#include "config.h"
|
||||
#include "background-image.h"
|
||||
#include "cairo_util.h"
|
||||
#include "log.h"
|
||||
#include "swaybar/image.h"
|
||||
|
||||
#if HAVE_GDK_PIXBUF
|
||||
#include <gdk-pixbuf/gdk-pixbuf.h>
|
||||
#endif
|
||||
|
||||
enum background_mode parse_background_mode(const char *mode) {
|
||||
if (strcmp(mode, "stretch") == 0) {
|
||||
return BACKGROUND_MODE_STRETCH;
|
||||
} else if (strcmp(mode, "fill") == 0) {
|
||||
return BACKGROUND_MODE_FILL;
|
||||
} else if (strcmp(mode, "fit") == 0) {
|
||||
return BACKGROUND_MODE_FIT;
|
||||
} else if (strcmp(mode, "center") == 0) {
|
||||
return BACKGROUND_MODE_CENTER;
|
||||
} else if (strcmp(mode, "tile") == 0) {
|
||||
return BACKGROUND_MODE_TILE;
|
||||
} else if (strcmp(mode, "solid_color") == 0) {
|
||||
return BACKGROUND_MODE_SOLID_COLOR;
|
||||
}
|
||||
sway_log(SWAY_ERROR, "Unsupported background mode: %s", mode);
|
||||
return BACKGROUND_MODE_INVALID;
|
||||
}
|
||||
|
||||
#if HAVE_GDK_PIXBUF
|
||||
static cairo_surface_t* gdk_cairo_image_surface_create_from_pixbuf(
|
||||
const GdkPixbuf *gdkbuf) {
|
||||
|
@ -104,7 +121,7 @@ static cairo_surface_t* gdk_cairo_image_surface_create_from_pixbuf(
|
|||
}
|
||||
#endif // HAVE_GDK_PIXBUF
|
||||
|
||||
cairo_surface_t *load_image(const char *path) {
|
||||
cairo_surface_t *load_background_image(const char *path) {
|
||||
cairo_surface_t *image;
|
||||
#if HAVE_GDK_PIXBUF
|
||||
GError *err = NULL;
|
||||
|
@ -134,3 +151,70 @@ cairo_surface_t *load_image(const char *path) {
|
|||
}
|
||||
return image;
|
||||
}
|
||||
|
||||
void render_background_image(cairo_t *cairo, cairo_surface_t *image,
|
||||
enum background_mode mode, int buffer_width, int buffer_height) {
|
||||
double width = cairo_image_surface_get_width(image);
|
||||
double height = cairo_image_surface_get_height(image);
|
||||
|
||||
cairo_save(cairo);
|
||||
switch (mode) {
|
||||
case BACKGROUND_MODE_STRETCH:
|
||||
cairo_scale(cairo,
|
||||
(double)buffer_width / width,
|
||||
(double)buffer_height / height);
|
||||
cairo_set_source_surface(cairo, image, 0, 0);
|
||||
break;
|
||||
case BACKGROUND_MODE_FILL: {
|
||||
double window_ratio = (double)buffer_width / buffer_height;
|
||||
double bg_ratio = width / height;
|
||||
|
||||
if (window_ratio > bg_ratio) {
|
||||
double scale = (double)buffer_width / width;
|
||||
cairo_scale(cairo, scale, scale);
|
||||
cairo_set_source_surface(cairo, image,
|
||||
0, (double)buffer_height / 2 / scale - height / 2);
|
||||
} else {
|
||||
double scale = (double)buffer_height / height;
|
||||
cairo_scale(cairo, scale, scale);
|
||||
cairo_set_source_surface(cairo, image,
|
||||
(double)buffer_width / 2 / scale - width / 2, 0);
|
||||
}
|
||||
break;
|
||||
}
|
||||
case BACKGROUND_MODE_FIT: {
|
||||
double window_ratio = (double)buffer_width / buffer_height;
|
||||
double bg_ratio = width / height;
|
||||
|
||||
if (window_ratio > bg_ratio) {
|
||||
double scale = (double)buffer_height / height;
|
||||
cairo_scale(cairo, scale, scale);
|
||||
cairo_set_source_surface(cairo, image,
|
||||
(double)buffer_width / 2 / scale - width / 2, 0);
|
||||
} else {
|
||||
double scale = (double)buffer_width / width;
|
||||
cairo_scale(cairo, scale, scale);
|
||||
cairo_set_source_surface(cairo, image,
|
||||
0, (double)buffer_height / 2 / scale - height / 2);
|
||||
}
|
||||
break;
|
||||
}
|
||||
case BACKGROUND_MODE_CENTER:
|
||||
cairo_set_source_surface(cairo, image,
|
||||
(double)buffer_width / 2 - width / 2,
|
||||
(double)buffer_height / 2 - height / 2);
|
||||
break;
|
||||
case BACKGROUND_MODE_TILE: {
|
||||
cairo_pattern_t *pattern = cairo_pattern_create_for_surface(image);
|
||||
cairo_pattern_set_extend(pattern, CAIRO_EXTEND_REPEAT);
|
||||
cairo_set_source(cairo, pattern);
|
||||
break;
|
||||
}
|
||||
case BACKGROUND_MODE_SOLID_COLOR:
|
||||
case BACKGROUND_MODE_INVALID:
|
||||
assert(0);
|
||||
break;
|
||||
}
|
||||
cairo_paint(cairo);
|
||||
cairo_restore(cairo);
|
||||
}
|
332
common/gesture.c
332
common/gesture.c
|
@ -1,332 +0,0 @@
|
|||
#include "gesture.h"
|
||||
|
||||
#include <math.h>
|
||||
#include <stdarg.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include "list.h"
|
||||
#include "log.h"
|
||||
#include "stringop.h"
|
||||
|
||||
const uint8_t GESTURE_FINGERS_ANY = 0;
|
||||
|
||||
char *gesture_parse(const char *input, struct gesture *output) {
|
||||
// Clear output in case of failure
|
||||
output->type = GESTURE_TYPE_NONE;
|
||||
output->fingers = GESTURE_FINGERS_ANY;
|
||||
output->directions = GESTURE_DIRECTION_NONE;
|
||||
|
||||
// Split input type, fingers and directions
|
||||
list_t *split = split_string(input, ":");
|
||||
if (split->length < 1 || split->length > 3) {
|
||||
return format_str(
|
||||
"expected <gesture>[:<fingers>][:direction], got %s",
|
||||
input);
|
||||
}
|
||||
|
||||
// Parse gesture type
|
||||
if (strcmp(split->items[0], "hold") == 0) {
|
||||
output->type = GESTURE_TYPE_HOLD;
|
||||
} else if (strcmp(split->items[0], "pinch") == 0) {
|
||||
output->type = GESTURE_TYPE_PINCH;
|
||||
} else if (strcmp(split->items[0], "swipe") == 0) {
|
||||
output->type = GESTURE_TYPE_SWIPE;
|
||||
} else {
|
||||
return format_str("expected hold|pinch|swipe, got %s",
|
||||
(const char *)split->items[0]);
|
||||
}
|
||||
|
||||
// Parse optional arguments
|
||||
if (split->length > 1) {
|
||||
char *next = split->items[1];
|
||||
|
||||
// Try to parse as finger count (1-9)
|
||||
if (strlen(next) == 1 && '1' <= next[0] && next[0] <= '9') {
|
||||
output->fingers = atoi(next);
|
||||
|
||||
// Move to next if available
|
||||
next = split->length == 3 ? split->items[2] : NULL;
|
||||
} else if (split->length == 3) {
|
||||
// Fail here if argument can only be finger count
|
||||
return format_str("expected 1-9, got %s", next);
|
||||
}
|
||||
|
||||
// If there is an argument left, try to parse as direction
|
||||
if (next) {
|
||||
list_t *directions = split_string(next, "+");
|
||||
|
||||
for (int i = 0; i < directions->length; ++i) {
|
||||
const char *item = directions->items[i];
|
||||
if (strcmp(item, "any") == 0) {
|
||||
continue;
|
||||
} else if (strcmp(item, "up") == 0) {
|
||||
output->directions |= GESTURE_DIRECTION_UP;
|
||||
} else if (strcmp(item, "down") == 0) {
|
||||
output->directions |= GESTURE_DIRECTION_DOWN;
|
||||
} else if (strcmp(item, "left") == 0) {
|
||||
output->directions |= GESTURE_DIRECTION_LEFT;
|
||||
} else if (strcmp(item, "right") == 0) {
|
||||
output->directions |= GESTURE_DIRECTION_RIGHT;
|
||||
} else if (strcmp(item, "inward") == 0) {
|
||||
output->directions |= GESTURE_DIRECTION_INWARD;
|
||||
} else if (strcmp(item, "outward") == 0) {
|
||||
output->directions |= GESTURE_DIRECTION_OUTWARD;
|
||||
} else if (strcmp(item, "clockwise") == 0) {
|
||||
output->directions |= GESTURE_DIRECTION_CLOCKWISE;
|
||||
} else if (strcmp(item, "counterclockwise") == 0) {
|
||||
output->directions |= GESTURE_DIRECTION_COUNTERCLOCKWISE;
|
||||
} else {
|
||||
return format_str("expected direction, got %s", item);
|
||||
}
|
||||
}
|
||||
list_free_items_and_destroy(directions);
|
||||
}
|
||||
} // if optional args
|
||||
|
||||
list_free_items_and_destroy(split);
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
const char *gesture_type_string(enum gesture_type type) {
|
||||
switch (type) {
|
||||
case GESTURE_TYPE_NONE:
|
||||
return "none";
|
||||
case GESTURE_TYPE_HOLD:
|
||||
return "hold";
|
||||
case GESTURE_TYPE_PINCH:
|
||||
return "pinch";
|
||||
case GESTURE_TYPE_SWIPE:
|
||||
return "swipe";
|
||||
}
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
const char *gesture_direction_string(enum gesture_direction direction) {
|
||||
switch (direction) {
|
||||
case GESTURE_DIRECTION_NONE:
|
||||
return "none";
|
||||
case GESTURE_DIRECTION_UP:
|
||||
return "up";
|
||||
case GESTURE_DIRECTION_DOWN:
|
||||
return "down";
|
||||
case GESTURE_DIRECTION_LEFT:
|
||||
return "left";
|
||||
case GESTURE_DIRECTION_RIGHT:
|
||||
return "right";
|
||||
case GESTURE_DIRECTION_INWARD:
|
||||
return "inward";
|
||||
case GESTURE_DIRECTION_OUTWARD:
|
||||
return "outward";
|
||||
case GESTURE_DIRECTION_CLOCKWISE:
|
||||
return "clockwise";
|
||||
case GESTURE_DIRECTION_COUNTERCLOCKWISE:
|
||||
return "counterclockwise";
|
||||
}
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
// Helper to turn combination of directions flags into string representation.
|
||||
static char *gesture_directions_to_string(uint32_t directions) {
|
||||
char *result = NULL;
|
||||
|
||||
for (uint8_t bit = 0; bit < 32; bit++) {
|
||||
uint32_t masked = directions & (1 << bit);
|
||||
if (masked) {
|
||||
const char *name = gesture_direction_string(masked);
|
||||
|
||||
if (!name) {
|
||||
name = "unknown";
|
||||
}
|
||||
|
||||
if (!result) {
|
||||
result = strdup(name);
|
||||
} else {
|
||||
char *new = format_str("%s+%s", result, name);
|
||||
free(result);
|
||||
result = new;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if(!result) {
|
||||
return strdup("any");
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
char *gesture_to_string(struct gesture *gesture) {
|
||||
char *directions = gesture_directions_to_string(gesture->directions);
|
||||
char *result = format_str("%s:%u:%s",
|
||||
gesture_type_string(gesture->type),
|
||||
gesture->fingers, directions);
|
||||
free(directions);
|
||||
return result;
|
||||
}
|
||||
|
||||
bool gesture_check(struct gesture *target, enum gesture_type type, uint8_t fingers) {
|
||||
// Check that gesture type matches
|
||||
if (target->type != type) {
|
||||
return false;
|
||||
}
|
||||
|
||||
// Check that finger count matches
|
||||
if (target->fingers != GESTURE_FINGERS_ANY && target->fingers != fingers) {
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
bool gesture_match(struct gesture *target, struct gesture *to_match, bool exact) {
|
||||
// Check type and fingers
|
||||
if (!gesture_check(target, to_match->type, to_match->fingers)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
// Enforce exact matches ...
|
||||
if (exact && target->directions != to_match->directions) {
|
||||
return false;
|
||||
}
|
||||
|
||||
// ... or ensure all target directions are matched
|
||||
return (target->directions & to_match->directions) == target->directions;
|
||||
}
|
||||
|
||||
bool gesture_equal(struct gesture *a, struct gesture *b) {
|
||||
return a->type == b->type
|
||||
&& a->fingers == b->fingers
|
||||
&& a->directions == b->directions;
|
||||
}
|
||||
|
||||
// Return count of set bits in directions bit field.
|
||||
static uint8_t gesture_directions_count(uint32_t directions) {
|
||||
uint8_t count = 0;
|
||||
for (; directions; directions >>= 1) {
|
||||
count += directions & 1;
|
||||
}
|
||||
return count;
|
||||
}
|
||||
|
||||
// Compare direction bit count of two direction.
|
||||
static int8_t gesture_directions_compare(uint32_t a, uint32_t b) {
|
||||
return gesture_directions_count(a) - gesture_directions_count(b);
|
||||
}
|
||||
|
||||
// Compare two direction based on their direction bit count
|
||||
int8_t gesture_compare(struct gesture *a, struct gesture *b) {
|
||||
return gesture_directions_compare(a->directions, b->directions);
|
||||
}
|
||||
|
||||
void gesture_tracker_begin(struct gesture_tracker *tracker,
|
||||
enum gesture_type type, uint8_t fingers) {
|
||||
tracker->type = type;
|
||||
tracker->fingers = fingers;
|
||||
|
||||
tracker->dx = 0.0;
|
||||
tracker->dy = 0.0;
|
||||
tracker->scale = 1.0;
|
||||
tracker->rotation = 0.0;
|
||||
|
||||
sway_log(SWAY_DEBUG, "begin tracking %s:%u:? gesture",
|
||||
gesture_type_string(type), fingers);
|
||||
}
|
||||
|
||||
bool gesture_tracker_check(struct gesture_tracker *tracker, enum gesture_type type) {
|
||||
return tracker->type == type;
|
||||
}
|
||||
|
||||
void gesture_tracker_update(struct gesture_tracker *tracker,
|
||||
double dx, double dy, double scale, double rotation) {
|
||||
if (tracker->type == GESTURE_TYPE_HOLD) {
|
||||
sway_assert(false, "hold does not update.");
|
||||
return;
|
||||
}
|
||||
|
||||
tracker->dx += dx;
|
||||
tracker->dy += dy;
|
||||
|
||||
if (tracker->type == GESTURE_TYPE_PINCH) {
|
||||
tracker->scale = scale;
|
||||
tracker->rotation += rotation;
|
||||
}
|
||||
|
||||
sway_log(SWAY_DEBUG, "update tracking %s:%u:? gesture: %f %f %f %f",
|
||||
gesture_type_string(tracker->type),
|
||||
tracker->fingers,
|
||||
tracker->dx, tracker->dy,
|
||||
tracker->scale, tracker->rotation);
|
||||
}
|
||||
|
||||
void gesture_tracker_cancel(struct gesture_tracker *tracker) {
|
||||
sway_log(SWAY_DEBUG, "cancel tracking %s:%u:? gesture",
|
||||
gesture_type_string(tracker->type), tracker->fingers);
|
||||
|
||||
tracker->type = GESTURE_TYPE_NONE;
|
||||
}
|
||||
|
||||
struct gesture *gesture_tracker_end(struct gesture_tracker *tracker) {
|
||||
struct gesture *result = calloc(1, sizeof(struct gesture));
|
||||
|
||||
// Ignore gesture under some threshold
|
||||
// TODO: Make configurable
|
||||
const double min_rotation = 5;
|
||||
const double min_scale_delta = 0.1;
|
||||
|
||||
// Determine direction
|
||||
switch(tracker->type) {
|
||||
// Gestures with scale and rotation
|
||||
case GESTURE_TYPE_PINCH:
|
||||
if (tracker->rotation > min_rotation) {
|
||||
result->directions |= GESTURE_DIRECTION_CLOCKWISE;
|
||||
}
|
||||
if (tracker->rotation < -min_rotation) {
|
||||
result->directions |= GESTURE_DIRECTION_COUNTERCLOCKWISE;
|
||||
}
|
||||
|
||||
if (tracker->scale > (1.0 + min_scale_delta)) {
|
||||
result->directions |= GESTURE_DIRECTION_OUTWARD;
|
||||
}
|
||||
if (tracker->scale < (1.0 - min_scale_delta)) {
|
||||
result->directions |= GESTURE_DIRECTION_INWARD;
|
||||
}
|
||||
__attribute__ ((fallthrough));
|
||||
// Gestures with dx and dy
|
||||
case GESTURE_TYPE_SWIPE:
|
||||
if (fabs(tracker->dx) > fabs(tracker->dy)) {
|
||||
if (tracker->dx > 0) {
|
||||
result->directions |= GESTURE_DIRECTION_RIGHT;
|
||||
} else {
|
||||
result->directions |= GESTURE_DIRECTION_LEFT;
|
||||
}
|
||||
} else {
|
||||
if (tracker->dy > 0) {
|
||||
result->directions |= GESTURE_DIRECTION_DOWN;
|
||||
} else {
|
||||
result->directions |= GESTURE_DIRECTION_UP;
|
||||
}
|
||||
}
|
||||
// Gesture without any direction
|
||||
case GESTURE_TYPE_HOLD:
|
||||
break;
|
||||
// Not tracking any gesture
|
||||
case GESTURE_TYPE_NONE:
|
||||
sway_assert(false, "Not tracking any gesture.");
|
||||
return result;
|
||||
}
|
||||
|
||||
result->type = tracker->type;
|
||||
result->fingers = tracker->fingers;
|
||||
|
||||
char *description = gesture_to_string(result);
|
||||
sway_log(SWAY_DEBUG, "end tracking gesture: %s", description);
|
||||
free(description);
|
||||
|
||||
tracker->type = GESTURE_TYPE_NONE;
|
||||
|
||||
return result;
|
||||
}
|
|
@ -1,3 +1,4 @@
|
|||
#define _POSIX_C_SOURCE 200809L
|
||||
#include <stdio.h>
|
||||
#include <stdint.h>
|
||||
#include <stdlib.h>
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
#define _POSIX_C_SOURCE 200112L
|
||||
#include <signal.h>
|
||||
#include <stdarg.h>
|
||||
#include <stdio.h>
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
#define _POSIX_C_SOURCE 200112L
|
||||
#include <limits.h>
|
||||
#include <string.h>
|
||||
#include <stdbool.h>
|
||||
|
|
|
@ -1,8 +1,8 @@
|
|||
lib_sway_common = static_library(
|
||||
'sway-common',
|
||||
files(
|
||||
'background-image.c',
|
||||
'cairo.c',
|
||||
'gesture.c',
|
||||
'ipc-client.c',
|
||||
'log.c',
|
||||
'loop.c',
|
||||
|
@ -13,6 +13,7 @@ lib_sway_common = static_library(
|
|||
),
|
||||
dependencies: [
|
||||
cairo,
|
||||
gdk_pixbuf,
|
||||
pango,
|
||||
pangocairo,
|
||||
wayland_client.partial_dependency(compile_args: true)
|
||||
|
|
|
@ -50,11 +50,9 @@ size_t escape_markup_text(const char *src, char *dest) {
|
|||
return length;
|
||||
}
|
||||
|
||||
PangoLayout *get_pango_layout(cairo_t *cairo, const PangoFontDescription *desc,
|
||||
PangoLayout *get_pango_layout(cairo_t *cairo, const char *font,
|
||||
const char *text, double scale, bool markup) {
|
||||
PangoLayout *layout = pango_cairo_create_layout(cairo);
|
||||
pango_context_set_round_glyph_positions(pango_layout_get_context(layout), false);
|
||||
|
||||
PangoAttrList *attrs;
|
||||
if (markup) {
|
||||
char *buf;
|
||||
|
@ -75,60 +73,60 @@ PangoLayout *get_pango_layout(cairo_t *cairo, const PangoFontDescription *desc,
|
|||
}
|
||||
|
||||
pango_attr_list_insert(attrs, pango_attr_scale_new(scale));
|
||||
PangoFontDescription *desc = pango_font_description_from_string(font);
|
||||
pango_layout_set_font_description(layout, desc);
|
||||
pango_layout_set_single_paragraph_mode(layout, 1);
|
||||
pango_layout_set_attributes(layout, attrs);
|
||||
pango_attr_list_unref(attrs);
|
||||
pango_font_description_free(desc);
|
||||
return layout;
|
||||
}
|
||||
|
||||
void get_text_size(cairo_t *cairo, const PangoFontDescription *desc, int *width, int *height,
|
||||
void get_text_size(cairo_t *cairo, const char *font, int *width, int *height,
|
||||
int *baseline, double scale, bool markup, const char *fmt, ...) {
|
||||
va_list args;
|
||||
va_start(args, fmt);
|
||||
char *buf = vformat_str(fmt, args);
|
||||
// Add one since vsnprintf excludes null terminator.
|
||||
int length = vsnprintf(NULL, 0, fmt, args) + 1;
|
||||
va_end(args);
|
||||
|
||||
char *buf = malloc(length);
|
||||
if (buf == NULL) {
|
||||
sway_log(SWAY_ERROR, "Failed to allocate memory");
|
||||
return;
|
||||
}
|
||||
va_start(args, fmt);
|
||||
vsnprintf(buf, length, fmt, args);
|
||||
va_end(args);
|
||||
|
||||
PangoLayout *layout = get_pango_layout(cairo, desc, buf, scale, markup);
|
||||
PangoLayout *layout = get_pango_layout(cairo, font, buf, scale, markup);
|
||||
pango_cairo_update_layout(cairo, layout);
|
||||
pango_layout_get_pixel_size(layout, width, height);
|
||||
if (baseline) {
|
||||
*baseline = pango_layout_get_baseline(layout) / PANGO_SCALE;
|
||||
}
|
||||
g_object_unref(layout);
|
||||
|
||||
free(buf);
|
||||
}
|
||||
|
||||
void get_text_metrics(const PangoFontDescription *description, int *height, int *baseline) {
|
||||
cairo_t *cairo = cairo_create(NULL);
|
||||
PangoContext *pango = pango_cairo_create_context(cairo);
|
||||
pango_context_set_round_glyph_positions(pango, false);
|
||||
// When passing NULL as a language, pango uses the current locale.
|
||||
PangoFontMetrics *metrics = pango_context_get_metrics(pango, description, NULL);
|
||||
|
||||
*baseline = pango_font_metrics_get_ascent(metrics) / PANGO_SCALE;
|
||||
*height = *baseline + pango_font_metrics_get_descent(metrics) / PANGO_SCALE;
|
||||
|
||||
pango_font_metrics_unref(metrics);
|
||||
g_object_unref(pango);
|
||||
cairo_destroy(cairo);
|
||||
}
|
||||
|
||||
void render_text(cairo_t *cairo, const PangoFontDescription *desc,
|
||||
void pango_printf(cairo_t *cairo, const char *font,
|
||||
double scale, bool markup, const char *fmt, ...) {
|
||||
va_list args;
|
||||
va_start(args, fmt);
|
||||
char *buf = vformat_str(fmt, args);
|
||||
// Add one since vsnprintf excludes null terminator.
|
||||
int length = vsnprintf(NULL, 0, fmt, args) + 1;
|
||||
va_end(args);
|
||||
|
||||
char *buf = malloc(length);
|
||||
if (buf == NULL) {
|
||||
sway_log(SWAY_ERROR, "Failed to allocate memory");
|
||||
return;
|
||||
}
|
||||
va_start(args, fmt);
|
||||
vsnprintf(buf, length, fmt, args);
|
||||
va_end(args);
|
||||
|
||||
PangoLayout *layout = get_pango_layout(cairo, desc, buf, scale, markup);
|
||||
PangoLayout *layout = get_pango_layout(cairo, font, buf, scale, markup);
|
||||
cairo_font_options_t *fo = cairo_font_options_create();
|
||||
cairo_get_font_options(cairo, fo);
|
||||
pango_cairo_context_set_font_options(pango_layout_get_context(layout), fo);
|
||||
|
@ -136,6 +134,5 @@ void render_text(cairo_t *cairo, const PangoFontDescription *desc,
|
|||
pango_cairo_update_layout(cairo, layout);
|
||||
pango_cairo_show_layout(cairo, layout);
|
||||
g_object_unref(layout);
|
||||
|
||||
free(buf);
|
||||
}
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
#define _POSIX_C_SOURCE 200809L
|
||||
#include <ctype.h>
|
||||
#include <stdarg.h>
|
||||
#include <stdbool.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
|
@ -328,35 +328,3 @@ bool expand_path(char **path) {
|
|||
wordfree(&p);
|
||||
return true;
|
||||
}
|
||||
|
||||
char *vformat_str(const char *fmt, va_list args) {
|
||||
char *str = NULL;
|
||||
va_list args_copy;
|
||||
va_copy(args_copy, args);
|
||||
|
||||
int len = vsnprintf(NULL, 0, fmt, args);
|
||||
if (len < 0) {
|
||||
sway_log_errno(SWAY_ERROR, "vsnprintf(\"%s\") failed", fmt);
|
||||
goto out;
|
||||
}
|
||||
|
||||
str = malloc(len + 1);
|
||||
if (str == NULL) {
|
||||
sway_log_errno(SWAY_ERROR, "malloc() failed");
|
||||
goto out;
|
||||
}
|
||||
|
||||
vsnprintf(str, len + 1, fmt, args_copy);
|
||||
|
||||
out:
|
||||
va_end(args_copy);
|
||||
return str;
|
||||
}
|
||||
|
||||
char *format_str(const char *fmt, ...) {
|
||||
va_list args;
|
||||
va_start(args, fmt);
|
||||
char *str = vformat_str(fmt, args);
|
||||
va_end(args);
|
||||
return str;
|
||||
}
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
#define _POSIX_C_SOURCE 200809L
|
||||
#include <ctype.h>
|
||||
#include <fcntl.h>
|
||||
#include <math.h>
|
||||
|
@ -79,12 +80,6 @@ enum movement_unit parse_movement_unit(const char *unit) {
|
|||
|
||||
int parse_movement_amount(int argc, char **argv,
|
||||
struct movement_amount *amount) {
|
||||
if (!sway_assert(argc > 0, "Expected args in parse_movement_amount")) {
|
||||
amount->amount = 0;
|
||||
amount->unit = MOVEMENT_UNIT_INVALID;
|
||||
return 0;
|
||||
}
|
||||
|
||||
char *err;
|
||||
amount->amount = (int)strtol(argv[0], &err, 10);
|
||||
if (*err) {
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
|
||||
_sway()
|
||||
{
|
||||
local cur prev short long
|
||||
local cur prev
|
||||
_get_comp_words_by_ref cur prev
|
||||
|
||||
short=(
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
|
||||
_swaybar()
|
||||
{
|
||||
local cur prev short long
|
||||
local cur prev
|
||||
_get_comp_words_by_ref cur prev
|
||||
|
||||
short=(
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
|
||||
_swaymsg()
|
||||
{
|
||||
local cur prev types short long
|
||||
local cur prev
|
||||
_get_comp_words_by_ref cur prev
|
||||
|
||||
types=(
|
||||
|
|
|
@ -1,57 +0,0 @@
|
|||
if get_option('zsh-completions')
|
||||
zsh_files = files(
|
||||
'zsh/_sway',
|
||||
'zsh/_swaymsg',
|
||||
)
|
||||
zsh_install_dir = join_paths(datadir, 'zsh', 'site-functions')
|
||||
|
||||
install_data(zsh_files, install_dir: zsh_install_dir)
|
||||
endif
|
||||
|
||||
if get_option('bash-completions')
|
||||
bash_comp = dependency('bash-completion', required: false)
|
||||
|
||||
bash_files = files(
|
||||
'bash/sway',
|
||||
'bash/swaymsg',
|
||||
)
|
||||
|
||||
if get_option('swaybar')
|
||||
bash_files += files('bash/swaybar')
|
||||
endif
|
||||
|
||||
if bash_comp.found()
|
||||
bash_install_dir = bash_comp.get_variable(
|
||||
pkgconfig: 'completionsdir',
|
||||
pkgconfig_define: ['datadir', datadir]
|
||||
)
|
||||
else
|
||||
bash_install_dir = join_paths(datadir, 'bash-completion', 'completions')
|
||||
endif
|
||||
|
||||
install_data(bash_files, install_dir: bash_install_dir)
|
||||
endif
|
||||
|
||||
if get_option('fish-completions')
|
||||
fish_comp = dependency('fish', required: false)
|
||||
|
||||
fish_files = files(
|
||||
'fish/sway.fish',
|
||||
'fish/swaymsg.fish',
|
||||
)
|
||||
|
||||
if get_option('swaynag')
|
||||
fish_files += files('fish/swaynag.fish')
|
||||
endif
|
||||
|
||||
if fish_comp.found()
|
||||
fish_install_dir = fish_comp.get_variable(
|
||||
pkgconfig: 'completionsdir',
|
||||
pkgconfig_define: ['datadir', datadir]
|
||||
)
|
||||
else
|
||||
fish_install_dir = join_paths(datadir, 'fish', 'vendor_completions.d')
|
||||
endif
|
||||
|
||||
install_data(fish_files, install_dir: fish_install_dir)
|
||||
endif
|
25
config.in
25
config.in
|
@ -14,9 +14,11 @@ set $down j
|
|||
set $up k
|
||||
set $right l
|
||||
# Your preferred terminal emulator
|
||||
set $term foot
|
||||
set $term alacritty
|
||||
# Your preferred application launcher
|
||||
set $menu wmenu-run
|
||||
# Note: pass the final command to swaymsg so that the resulting window can be opened
|
||||
# on the original workspace that the command was run on.
|
||||
set $menu dmenu_path | dmenu | xargs swaymsg exec --
|
||||
|
||||
### Output configuration
|
||||
#
|
||||
|
@ -35,7 +37,7 @@ output * bg @datadir@/backgrounds/sway/Sway_Wallpaper_Blue_1920x1080.png fill
|
|||
#
|
||||
# exec swayidle -w \
|
||||
# timeout 300 'swaylock -f -c 000000' \
|
||||
# timeout 600 'swaymsg "output * power off"' resume 'swaymsg "output * power on"' \
|
||||
# timeout 600 'swaymsg "output * dpms off"' resume 'swaymsg "output * dpms on"' \
|
||||
# before-sleep 'swaylock -f -c 000000'
|
||||
#
|
||||
# This will lock your screen after 300 seconds of inactivity, then turn off
|
||||
|
@ -80,7 +82,7 @@ output * bg @datadir@/backgrounds/sway/Sway_Wallpaper_Blue_1920x1080.png fill
|
|||
bindsym $mod+Shift+c reload
|
||||
|
||||
# Exit sway (logs you out of your Wayland session)
|
||||
bindsym $mod+Shift+e exec swaynag -t warning -m 'You pressed the exit shortcut. Do you really want to exit sway? This will end your Wayland session.' -B 'Yes, exit sway' 'swaymsg exit'
|
||||
bindsym $mod+Shift+e exec swaynag -t warning -m 'You pressed the exit shortcut. Do you really want to exit sway? This will end your Wayland session.' -b 'Yes, exit sway' 'swaymsg exit'
|
||||
#
|
||||
# Moving around:
|
||||
#
|
||||
|
@ -193,19 +195,6 @@ mode "resize" {
|
|||
bindsym Escape mode "default"
|
||||
}
|
||||
bindsym $mod+r mode "resize"
|
||||
#
|
||||
# Utilities:
|
||||
#
|
||||
# Special keys to adjust volume via PulseAudio
|
||||
bindsym --locked XF86AudioMute exec pactl set-sink-mute \@DEFAULT_SINK@ toggle
|
||||
bindsym --locked XF86AudioLowerVolume exec pactl set-sink-volume \@DEFAULT_SINK@ -5%
|
||||
bindsym --locked XF86AudioRaiseVolume exec pactl set-sink-volume \@DEFAULT_SINK@ +5%
|
||||
bindsym --locked XF86AudioMicMute exec pactl set-source-mute \@DEFAULT_SOURCE@ toggle
|
||||
# Special keys to adjust brightness via brightnessctl
|
||||
bindsym --locked XF86MonBrightnessDown exec brightnessctl set 5%-
|
||||
bindsym --locked XF86MonBrightnessUp exec brightnessctl set 5%+
|
||||
# Special key to take a screenshot with grim
|
||||
bindsym Print exec grim
|
||||
|
||||
#
|
||||
# Status Bar:
|
||||
|
@ -216,7 +205,7 @@ bar {
|
|||
|
||||
# When the status_command prints a new line to stdout, swaybar updates.
|
||||
# The default just shows the current date and time.
|
||||
status_command while date +'%Y-%m-%d %X'; do sleep 1; done
|
||||
status_command while date +'%Y-%m-%d %l:%M:%S %p'; do sleep 1; done
|
||||
|
||||
colors {
|
||||
statusline #ffffff
|
||||
|
|
21
contrib/_incr_version
Executable file
21
contrib/_incr_version
Executable file
|
@ -0,0 +1,21 @@
|
|||
#!/bin/sh -eu
|
||||
old_version="$1"
|
||||
new_version="$2"
|
||||
|
||||
if [ "$new_version" != "${new_version#v}" ]
|
||||
then
|
||||
echo "Error: The new version shouldn't be prefixed with a \"v\"." >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
sed -i meson.build -e "s/^ version: .*#release_version/ version: '$new_version', #release_version/g"
|
||||
|
||||
printf "Minimum wlroots version? "
|
||||
read wlr_version_min
|
||||
printf "Maximum wlroots version? "
|
||||
read wlr_version_max
|
||||
|
||||
sed -i meson.build -e "s/wlroots_version =.*/wlroots_version = ['>=$wlr_version_min', '<$wlr_version_max']/"
|
||||
|
||||
git add meson.build
|
||||
git commit -m "Update version to $new_version"
|
130
contrib/autoname-workspaces.py
Executable file
130
contrib/autoname-workspaces.py
Executable file
|
@ -0,0 +1,130 @@
|
|||
#!/usr/bin/python
|
||||
|
||||
# This script requires i3ipc-python package (install it from a system package manager
|
||||
# or pip).
|
||||
# It adds icons to the workspace name for each open window.
|
||||
# Set your keybindings like this: set $workspace1 workspace number 1
|
||||
# Add your icons to WINDOW_ICONS.
|
||||
# Based on https://github.com/maximbaz/dotfiles/blob/master/bin/i3-autoname-workspaces
|
||||
|
||||
import argparse
|
||||
import i3ipc
|
||||
import logging
|
||||
import re
|
||||
import signal
|
||||
import sys
|
||||
|
||||
WINDOW_ICONS = {
|
||||
"firefox": "",
|
||||
}
|
||||
|
||||
DEFAULT_ICON = ""
|
||||
|
||||
|
||||
def icon_for_window(window):
|
||||
app_id = window.app_id
|
||||
if app_id is not None and len(app_id) > 0:
|
||||
app_id = app_id.lower()
|
||||
if app_id in WINDOW_ICONS:
|
||||
return WINDOW_ICONS[app_id]
|
||||
logging.info("No icon available for window with app_id: %s" % str(app_id))
|
||||
else:
|
||||
# xwayland support
|
||||
class_name = window.window_class
|
||||
if len(class_name) > 0:
|
||||
class_name = class_name.lower()
|
||||
if class_name in WINDOW_ICONS:
|
||||
return WINDOW_ICONS[class_name]
|
||||
logging.info(
|
||||
"No icon available for window with class_name: %s" % str(class_name)
|
||||
)
|
||||
return DEFAULT_ICON
|
||||
|
||||
|
||||
def rename_workspaces(ipc):
|
||||
for workspace in ipc.get_tree().workspaces():
|
||||
name_parts = parse_workspace_name(workspace.name)
|
||||
icon_tuple = ()
|
||||
for w in workspace:
|
||||
if w.app_id is not None or w.window_class is not None:
|
||||
icon = icon_for_window(w)
|
||||
if not ARGUMENTS.duplicates and icon in icon_tuple:
|
||||
continue
|
||||
icon_tuple += (icon,)
|
||||
name_parts["icons"] = " ".join(icon_tuple) + " "
|
||||
new_name = construct_workspace_name(name_parts)
|
||||
ipc.command('rename workspace "%s" to "%s"' % (workspace.name, new_name))
|
||||
|
||||
|
||||
def undo_window_renaming(ipc):
|
||||
for workspace in ipc.get_tree().workspaces():
|
||||
name_parts = parse_workspace_name(workspace.name)
|
||||
name_parts["icons"] = None
|
||||
new_name = construct_workspace_name(name_parts)
|
||||
ipc.command('rename workspace "%s" to "%s"' % (workspace.name, new_name))
|
||||
ipc.main_quit()
|
||||
sys.exit(0)
|
||||
|
||||
|
||||
def parse_workspace_name(name):
|
||||
return re.match(
|
||||
"(?P<num>[0-9]+):?(?P<shortname>\w+)? ?(?P<icons>.+)?", name
|
||||
).groupdict()
|
||||
|
||||
|
||||
def construct_workspace_name(parts):
|
||||
new_name = str(parts["num"])
|
||||
if parts["shortname"] or parts["icons"]:
|
||||
new_name += ":"
|
||||
|
||||
if parts["shortname"]:
|
||||
new_name += parts["shortname"]
|
||||
|
||||
if parts["icons"]:
|
||||
new_name += " " + parts["icons"]
|
||||
|
||||
return new_name
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
parser = argparse.ArgumentParser(
|
||||
description="This script automatically changes the workspace name in sway depending on your open applications."
|
||||
)
|
||||
parser.add_argument(
|
||||
"--duplicates",
|
||||
"-d",
|
||||
action="store_true",
|
||||
help="Set it when you want an icon for each instance of the same application per workspace.",
|
||||
)
|
||||
parser.add_argument(
|
||||
"--logfile",
|
||||
"-l",
|
||||
type=str,
|
||||
default="/tmp/sway-autoname-workspaces.log",
|
||||
help="Path for the logfile.",
|
||||
)
|
||||
args = parser.parse_args()
|
||||
global ARGUMENTS
|
||||
ARGUMENTS = args
|
||||
|
||||
logging.basicConfig(
|
||||
level=logging.INFO,
|
||||
filename=ARGUMENTS.logfile,
|
||||
filemode="w",
|
||||
format="%(message)s",
|
||||
)
|
||||
|
||||
ipc = i3ipc.Connection()
|
||||
|
||||
for sig in [signal.SIGINT, signal.SIGTERM]:
|
||||
signal.signal(sig, lambda signal, frame: undo_window_renaming(ipc))
|
||||
|
||||
def window_event_handler(ipc, e):
|
||||
if e.change in ["new", "close", "move"]:
|
||||
rename_workspaces(ipc)
|
||||
|
||||
ipc.on("window", window_event_handler)
|
||||
|
||||
rename_workspaces(ipc)
|
||||
|
||||
ipc.main()
|
154
contrib/grimshot
Executable file
154
contrib/grimshot
Executable file
|
@ -0,0 +1,154 @@
|
|||
#!/bin/sh
|
||||
|
||||
## Grimshot: a helper for screenshots within sway
|
||||
## Requirements:
|
||||
## - `grim`: screenshot utility for wayland
|
||||
## - `slurp`: to select an area
|
||||
## - `swaymsg`: to read properties of current window
|
||||
## - `wl-copy`: clipboard utility
|
||||
## - `jq`: json utility to parse swaymsg output
|
||||
## - `notify-send`: to show notifications
|
||||
## Those are needed to be installed, if unsure, run `grimshot check`
|
||||
##
|
||||
## See `man 1 grimshot` or `grimshot usage` for further details.
|
||||
|
||||
getTargetDirectory() {
|
||||
test -f ${XDG_CONFIG_HOME:-~/.config}/user-dirs.dirs && \
|
||||
. ${XDG_CONFIG_HOME:-~/.config}/user-dirs.dirs
|
||||
|
||||
echo ${XDG_SCREENSHOTS_DIR:-${XDG_PICTURES_DIR:-$HOME}}
|
||||
}
|
||||
|
||||
if [ "$1" = "--notify" ]; then
|
||||
NOTIFY=yes
|
||||
shift 1
|
||||
else
|
||||
NOTIFY=no
|
||||
fi
|
||||
|
||||
ACTION=${1:-usage}
|
||||
SUBJECT=${2:-screen}
|
||||
FILE=${3:-$(getTargetDirectory)/$(date -Ins).png}
|
||||
|
||||
if [ "$ACTION" != "save" ] && [ "$ACTION" != "copy" ] && [ "$ACTION" != "check" ]; then
|
||||
echo "Usage:"
|
||||
echo " grimshot [--notify] (copy|save) [active|screen|output|area|window] [FILE|-]"
|
||||
echo " grimshot check"
|
||||
echo " grimshot usage"
|
||||
echo ""
|
||||
echo "Commands:"
|
||||
echo " copy: Copy the screenshot data into the clipboard."
|
||||
echo " save: Save the screenshot to a regular file or '-' to pipe to STDOUT."
|
||||
echo " check: Verify if required tools are installed and exit."
|
||||
echo " usage: Show this message and exit."
|
||||
echo ""
|
||||
echo "Targets:"
|
||||
echo " active: Currently active window."
|
||||
echo " screen: All visible outputs."
|
||||
echo " output: Currently active output."
|
||||
echo " area: Manually select a region."
|
||||
echo " window: Manually select a window."
|
||||
exit
|
||||
fi
|
||||
|
||||
notify() {
|
||||
notify-send -t 3000 -a grimshot "$@"
|
||||
}
|
||||
notifyOk() {
|
||||
[ "$NOTIFY" = "no" ] && return
|
||||
|
||||
TITLE=${2:-"Screenshot"}
|
||||
MESSAGE=${1:-"OK"}
|
||||
notify "$TITLE" "$MESSAGE"
|
||||
}
|
||||
notifyError() {
|
||||
if [ $NOTIFY = "yes" ]; then
|
||||
TITLE=${2:-"Screenshot"}
|
||||
MESSAGE=${1:-"Error taking screenshot with grim"}
|
||||
notify -u critical "$TITLE" "$MESSAGE"
|
||||
else
|
||||
echo $1
|
||||
fi
|
||||
}
|
||||
|
||||
die() {
|
||||
MSG=${1:-Bye}
|
||||
notifyError "Error: $MSG"
|
||||
exit 2
|
||||
}
|
||||
|
||||
check() {
|
||||
COMMAND=$1
|
||||
if command -v "$COMMAND" > /dev/null 2>&1; then
|
||||
RESULT="OK"
|
||||
else
|
||||
RESULT="NOT FOUND"
|
||||
fi
|
||||
echo " $COMMAND: $RESULT"
|
||||
}
|
||||
|
||||
takeScreenshot() {
|
||||
FILE=$1
|
||||
GEOM=$2
|
||||
OUTPUT=$3
|
||||
if [ ! -z "$OUTPUT" ]; then
|
||||
grim -o "$OUTPUT" "$FILE" || die "Unable to invoke grim"
|
||||
elif [ -z "$GEOM" ]; then
|
||||
grim "$FILE" || die "Unable to invoke grim"
|
||||
else
|
||||
grim -g "$GEOM" "$FILE" || die "Unable to invoke grim"
|
||||
fi
|
||||
}
|
||||
|
||||
if [ "$ACTION" = "check" ] ; then
|
||||
echo "Checking if required tools are installed. If something is missing, install it to your system and make it available in PATH..."
|
||||
check grim
|
||||
check slurp
|
||||
check swaymsg
|
||||
check wl-copy
|
||||
check jq
|
||||
check notify-send
|
||||
exit
|
||||
elif [ "$SUBJECT" = "area" ] ; then
|
||||
GEOM=$(slurp -d)
|
||||
# Check if user exited slurp without selecting the area
|
||||
if [ -z "$GEOM" ]; then
|
||||
exit
|
||||
fi
|
||||
WHAT="Area"
|
||||
elif [ "$SUBJECT" = "active" ] ; then
|
||||
FOCUSED=$(swaymsg -t get_tree | jq -r 'recurse(.nodes[]?, .floating_nodes[]?) | select(.focused)')
|
||||
GEOM=$(echo "$FOCUSED" | jq -r '.rect | "\(.x),\(.y) \(.width)x\(.height)"')
|
||||
APP_ID=$(echo "$FOCUSED" | jq -r '.app_id')
|
||||
WHAT="$APP_ID window"
|
||||
elif [ "$SUBJECT" = "screen" ] ; then
|
||||
GEOM=""
|
||||
WHAT="Screen"
|
||||
elif [ "$SUBJECT" = "output" ] ; then
|
||||
GEOM=""
|
||||
OUTPUT=$(swaymsg -t get_outputs | jq -r '.[] | select(.focused)' | jq -r '.name')
|
||||
WHAT="$OUTPUT"
|
||||
elif [ "$SUBJECT" = "window" ] ; then
|
||||
GEOM=$(swaymsg -t get_tree | jq -r '.. | select(.pid? and .visible?) | .rect | "\(.x),\(.y) \(.width)x\(.height)"' | slurp)
|
||||
# Check if user exited slurp without selecting the area
|
||||
if [ -z "$GEOM" ]; then
|
||||
exit
|
||||
fi
|
||||
WHAT="Window"
|
||||
else
|
||||
die "Unknown subject to take a screen shot from" "$SUBJECT"
|
||||
fi
|
||||
|
||||
if [ "$ACTION" = "copy" ] ; then
|
||||
takeScreenshot - "$GEOM" "$OUTPUT" | wl-copy --type image/png || die "Clipboard error"
|
||||
notifyOk "$WHAT copied to buffer"
|
||||
else
|
||||
if takeScreenshot "$FILE" "$GEOM" "$OUTPUT"; then
|
||||
TITLE="Screenshot of $SUBJECT"
|
||||
MESSAGE=$(basename "$FILE")
|
||||
notifyOk "$MESSAGE" "$TITLE"
|
||||
echo $FILE
|
||||
else
|
||||
notifyError "Error taking screenshot with grim"
|
||||
fi
|
||||
fi
|
104
contrib/grimshot.1
Normal file
104
contrib/grimshot.1
Normal file
|
@ -0,0 +1,104 @@
|
|||
.\" Generated by scdoc 1.11.1
|
||||
.\" Complete documentation for this program is not available as a GNU info page
|
||||
.ie \n(.g .ds Aq \(aq
|
||||
.el .ds Aq '
|
||||
.nh
|
||||
.ad l
|
||||
.\" Begin generated content:
|
||||
.TH "grimshot" "1" "2021-02-23"
|
||||
.P
|
||||
.SH NAME
|
||||
.P
|
||||
grimshot - a helper for screenshots within sway
|
||||
.P
|
||||
.SH SYNOPSIS
|
||||
.P
|
||||
\fBgrimshot\fR [--notify] (copy|save) [TARGET] [FILE]
|
||||
.br
|
||||
\fBgrimshot\fR check
|
||||
.br
|
||||
\fBgrimshot\fR usage
|
||||
.P
|
||||
.SH OPTIONS
|
||||
.P
|
||||
\fB--notify\fR
|
||||
.RS 4
|
||||
Show notifications to the user that a screenshot has been taken.\&
|
||||
.P
|
||||
.RE
|
||||
\fBsave\fR
|
||||
.RS 4
|
||||
Save the screenshot into a regular file.\& Grimshot will write images
|
||||
files to \fBXDG_SCREENSHOTS_DIR\fR if this is set (or defined
|
||||
in \fBuser-dirs.\&dir\fR), or otherwise fall back to \fBXDG_PICTURES_DIR\fR.\&
|
||||
Set FILE to '-' to pipe the output to STDOUT.\&
|
||||
.P
|
||||
.RE
|
||||
\fBcopy\fR
|
||||
.RS 4
|
||||
Copy the screenshot data (as image/png) into the clipboard.\&
|
||||
.P
|
||||
.RE
|
||||
.SH DESCRIPTION
|
||||
.P
|
||||
Grimshot is an easy-to-use screenshot utility for sway.\& It provides a
|
||||
convenient interface over grim, slurp and jq, and supports storing the
|
||||
screenshot either directly to the clipboard using wl-copy or to a file.\&
|
||||
.P
|
||||
.SH EXAMPLES
|
||||
.P
|
||||
An example usage pattern is to add these bindings to your sway config:
|
||||
.P
|
||||
.nf
|
||||
.RS 4
|
||||
# Screenshots:
|
||||
# Super+P: Current window
|
||||
# Super+Shift+p: Select area
|
||||
# Super+Alt+p Current output
|
||||
# Super+Ctrl+p Select a window
|
||||
|
||||
bindsym Mod4+p exec grimshot save active
|
||||
bindsym Mod4+Shift+p exec grimshot save area
|
||||
bindsym Mod4+Mod1+p exec grimshot save output
|
||||
bindsym Mod4+Ctrl+p exec grimshot save window
|
||||
.fi
|
||||
.RE
|
||||
.P
|
||||
.SH TARGETS
|
||||
.P
|
||||
grimshot can capture the following named targets:
|
||||
.P
|
||||
\fIactive\fR
|
||||
.RS 4
|
||||
Captures the currently active window.\&
|
||||
.P
|
||||
.RE
|
||||
\fIscreen\fR
|
||||
.RS 4
|
||||
Captures the entire screen.\& This includes all visible outputs.\&
|
||||
.P
|
||||
.RE
|
||||
\fIarea\fR
|
||||
.RS 4
|
||||
Allows manually selecting a rectangular region, and captures that.\&
|
||||
.P
|
||||
.RE
|
||||
\fIwindow\fR
|
||||
.RS 4
|
||||
Allows manually selecting a single window (by clicking on it), and
|
||||
captures it.\&
|
||||
.P
|
||||
.RE
|
||||
\fIoutput\fR
|
||||
.RS 4
|
||||
Captures the currently active output.\&
|
||||
.P
|
||||
.RE
|
||||
.SH OUTPUT
|
||||
.P
|
||||
Grimshot will print the filename of the captured screenshot to stdout if called
|
||||
with the \fIsave\fR subcommand.\&
|
||||
.P
|
||||
.SH SEE ALSO
|
||||
.P
|
||||
\fBgrim\fR(1)
|
77
contrib/grimshot.1.scd
Normal file
77
contrib/grimshot.1.scd
Normal file
|
@ -0,0 +1,77 @@
|
|||
grimshot(1)
|
||||
|
||||
# NAME
|
||||
|
||||
grimshot - a helper for screenshots within sway
|
||||
|
||||
# SYNOPSIS
|
||||
|
||||
*grimshot* [--notify] (copy|save) [TARGET] [FILE]++
|
||||
*grimshot* check++
|
||||
*grimshot* usage
|
||||
|
||||
# OPTIONS
|
||||
|
||||
*--notify*
|
||||
Show notifications to the user that a screenshot has been taken.
|
||||
|
||||
*save*
|
||||
Save the screenshot into a regular file. Grimshot will write images
|
||||
files to *XDG_SCREENSHOTS_DIR* if this is set (or defined
|
||||
in *user-dirs.dir*), or otherwise fall back to *XDG_PICTURES_DIR*.
|
||||
Set FILE to '-' to pipe the output to STDOUT.
|
||||
|
||||
*copy*
|
||||
Copy the screenshot data (as image/png) into the clipboard.
|
||||
|
||||
# DESCRIPTION
|
||||
|
||||
Grimshot is an easy-to-use screenshot utility for sway. It provides a
|
||||
convenient interface over grim, slurp and jq, and supports storing the
|
||||
screenshot either directly to the clipboard using wl-copy or to a file.
|
||||
|
||||
# EXAMPLES
|
||||
|
||||
An example usage pattern is to add these bindings to your sway config:
|
||||
|
||||
```
|
||||
# Screenshots:
|
||||
# Super+P: Current window
|
||||
# Super+Shift+p: Select area
|
||||
# Super+Alt+p Current output
|
||||
# Super+Ctrl+p Select a window
|
||||
|
||||
bindsym Mod4+p exec grimshot save active
|
||||
bindsym Mod4+Shift+p exec grimshot save area
|
||||
bindsym Mod4+Mod1+p exec grimshot save output
|
||||
bindsym Mod4+Ctrl+p exec grimshot save window
|
||||
```
|
||||
|
||||
# TARGETS
|
||||
|
||||
grimshot can capture the following named targets:
|
||||
|
||||
_active_
|
||||
Captures the currently active window.
|
||||
|
||||
_screen_
|
||||
Captures the entire screen. This includes all visible outputs.
|
||||
|
||||
_area_
|
||||
Allows manually selecting a rectangular region, and captures that.
|
||||
|
||||
_window_
|
||||
Allows manually selecting a single window (by clicking on it), and
|
||||
captures it.
|
||||
|
||||
_output_
|
||||
Captures the currently active output.
|
||||
|
||||
# OUTPUT
|
||||
|
||||
Grimshot will print the filename of the captured screenshot to stdout if called
|
||||
with the _save_ subcommand.
|
||||
|
||||
# SEE ALSO
|
||||
|
||||
*grim*(1)
|
69
contrib/inactive-windows-transparency.py
Executable file
69
contrib/inactive-windows-transparency.py
Executable file
|
@ -0,0 +1,69 @@
|
|||
#!/usr/bin/python
|
||||
|
||||
# This script requires i3ipc-python package (install it from a system package manager
|
||||
# or pip).
|
||||
# It makes inactive windows transparent. Use `transparency_val` variable to control
|
||||
# transparency strength in range of 0…1 or use the command line argument -o.
|
||||
|
||||
import argparse
|
||||
import i3ipc
|
||||
import signal
|
||||
import sys
|
||||
from functools import partial
|
||||
|
||||
def on_window_focus(inactive_opacity, ipc, event):
|
||||
global prev_focused
|
||||
global prev_workspace
|
||||
|
||||
focused_workspace = ipc.get_tree().find_focused()
|
||||
|
||||
if focused_workspace == None:
|
||||
return
|
||||
|
||||
focused = event.container
|
||||
workspace = focused_workspace.workspace().num
|
||||
|
||||
if focused.id != prev_focused.id: # https://github.com/swaywm/sway/issues/2859
|
||||
focused.command("opacity 1")
|
||||
if workspace == prev_workspace:
|
||||
prev_focused.command("opacity " + inactive_opacity)
|
||||
prev_focused = focused
|
||||
prev_workspace = workspace
|
||||
|
||||
|
||||
def remove_opacity(ipc):
|
||||
for workspace in ipc.get_tree().workspaces():
|
||||
for w in workspace:
|
||||
w.command("opacity 1")
|
||||
ipc.main_quit()
|
||||
sys.exit(0)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
transparency_val = "0.80"
|
||||
|
||||
parser = argparse.ArgumentParser(
|
||||
description="This script allows you to set the transparency of unfocused windows in sway."
|
||||
)
|
||||
parser.add_argument(
|
||||
"--opacity",
|
||||
"-o",
|
||||
type=str,
|
||||
default=transparency_val,
|
||||
help="set opacity value in range 0...1",
|
||||
)
|
||||
args = parser.parse_args()
|
||||
|
||||
ipc = i3ipc.Connection()
|
||||
prev_focused = None
|
||||
prev_workspace = ipc.get_tree().find_focused().workspace().num
|
||||
|
||||
for window in ipc.get_tree():
|
||||
if window.focused:
|
||||
prev_focused = window
|
||||
else:
|
||||
window.command("opacity " + args.opacity)
|
||||
for sig in [signal.SIGINT, signal.SIGTERM]:
|
||||
signal.signal(sig, lambda signal, frame: remove_opacity(ipc))
|
||||
ipc.on("window::focus", partial(on_window_focus, args.opacity))
|
||||
ipc.main()
|
20
include/background-image.h
Normal file
20
include/background-image.h
Normal file
|
@ -0,0 +1,20 @@
|
|||
#ifndef _SWAY_BACKGROUND_IMAGE_H
|
||||
#define _SWAY_BACKGROUND_IMAGE_H
|
||||
#include "cairo_util.h"
|
||||
|
||||
enum background_mode {
|
||||
BACKGROUND_MODE_STRETCH,
|
||||
BACKGROUND_MODE_FILL,
|
||||
BACKGROUND_MODE_FIT,
|
||||
BACKGROUND_MODE_CENTER,
|
||||
BACKGROUND_MODE_TILE,
|
||||
BACKGROUND_MODE_SOLID_COLOR,
|
||||
BACKGROUND_MODE_INVALID,
|
||||
};
|
||||
|
||||
enum background_mode parse_background_mode(const char *mode);
|
||||
cairo_surface_t *load_background_image(const char *path);
|
||||
void render_background_image(cairo_t *cairo, cairo_surface_t *image,
|
||||
enum background_mode mode, int buffer_width, int buffer_height);
|
||||
|
||||
#endif
|
|
@ -1,104 +0,0 @@
|
|||
#ifndef _SWAY_GESTURE_H
|
||||
#define _SWAY_GESTURE_H
|
||||
|
||||
#include <stdbool.h>
|
||||
#include <stdint.h>
|
||||
|
||||
/**
|
||||
* A gesture type used in binding.
|
||||
*/
|
||||
enum gesture_type {
|
||||
GESTURE_TYPE_NONE = 0,
|
||||
GESTURE_TYPE_HOLD,
|
||||
GESTURE_TYPE_PINCH,
|
||||
GESTURE_TYPE_SWIPE,
|
||||
};
|
||||
|
||||
// Turns single type enum value to constant string representation.
|
||||
const char *gesture_type_string(enum gesture_type direction);
|
||||
|
||||
// Value to use to accept any finger count
|
||||
extern const uint8_t GESTURE_FINGERS_ANY;
|
||||
|
||||
/**
|
||||
* A gesture direction used in binding.
|
||||
*/
|
||||
enum gesture_direction {
|
||||
GESTURE_DIRECTION_NONE = 0,
|
||||
// Directions based on delta x and y
|
||||
GESTURE_DIRECTION_UP = 1 << 0,
|
||||
GESTURE_DIRECTION_DOWN = 1 << 1,
|
||||
GESTURE_DIRECTION_LEFT = 1 << 2,
|
||||
GESTURE_DIRECTION_RIGHT = 1 << 3,
|
||||
// Directions based on scale
|
||||
GESTURE_DIRECTION_INWARD = 1 << 4,
|
||||
GESTURE_DIRECTION_OUTWARD = 1 << 5,
|
||||
// Directions based on rotation
|
||||
GESTURE_DIRECTION_CLOCKWISE = 1 << 6,
|
||||
GESTURE_DIRECTION_COUNTERCLOCKWISE = 1 << 7,
|
||||
};
|
||||
|
||||
// Turns single direction enum value to constant string representation.
|
||||
const char *gesture_direction_string(enum gesture_direction direction);
|
||||
|
||||
/**
|
||||
* Struct representing a pointer gesture
|
||||
*/
|
||||
struct gesture {
|
||||
enum gesture_type type;
|
||||
uint8_t fingers;
|
||||
uint32_t directions;
|
||||
};
|
||||
|
||||
/**
|
||||
* Parses gesture from <gesture>[:<fingers>][:<directions>] string.
|
||||
*
|
||||
* Return NULL on success, otherwise error message string
|
||||
*/
|
||||
char *gesture_parse(const char *input, struct gesture *output);
|
||||
|
||||
// Turns gesture into string representation
|
||||
char *gesture_to_string(struct gesture *gesture);
|
||||
|
||||
// Check if gesture is of certain type and finger count.
|
||||
bool gesture_check(struct gesture *target,
|
||||
enum gesture_type type, uint8_t fingers);
|
||||
|
||||
// Check if a gesture target/binding is match by other gesture/input
|
||||
bool gesture_match(struct gesture *target,
|
||||
struct gesture *to_match, bool exact);
|
||||
|
||||
// Returns true if gesture are exactly the same
|
||||
bool gesture_equal(struct gesture *a, struct gesture *b);
|
||||
|
||||
// Compare distance between two matched target gestures.
|
||||
int8_t gesture_compare(struct gesture *a, struct gesture *b);
|
||||
|
||||
// Small helper struct to track gestures over time
|
||||
struct gesture_tracker {
|
||||
enum gesture_type type;
|
||||
uint8_t fingers;
|
||||
double dx, dy;
|
||||
double scale;
|
||||
double rotation;
|
||||
};
|
||||
|
||||
// Begin gesture tracking
|
||||
void gesture_tracker_begin(struct gesture_tracker *tracker,
|
||||
enum gesture_type type, uint8_t fingers);
|
||||
|
||||
// Check if the provides type is currently being tracked
|
||||
bool gesture_tracker_check(struct gesture_tracker *tracker,
|
||||
enum gesture_type type);
|
||||
|
||||
// Update gesture track with new data point
|
||||
void gesture_tracker_update(struct gesture_tracker *tracker, double dx,
|
||||
double dy, double scale, double rotation);
|
||||
|
||||
// Reset tracker
|
||||
void gesture_tracker_cancel(struct gesture_tracker *tracker);
|
||||
|
||||
// Reset tracker and return gesture tracked
|
||||
struct gesture *gesture_tracker_end(struct gesture_tracker *tracker);
|
||||
|
||||
#endif
|
|
@ -1,9 +1,6 @@
|
|||
#ifndef _SWAY_IPC_CLIENT_H
|
||||
#define _SWAY_IPC_CLIENT_H
|
||||
|
||||
// arbitrary number, it's probably sufficient, higher number = more memory usage
|
||||
#define JSON_MAX_DEPTH 512
|
||||
|
||||
#include <stdbool.h>
|
||||
#include <stdint.h>
|
||||
#include <sys/time.h>
|
||||
|
|
|
@ -5,7 +5,6 @@
|
|||
#include <stdint.h>
|
||||
#include <cairo.h>
|
||||
#include <pango/pangocairo.h>
|
||||
#include "stringop.h"
|
||||
|
||||
/**
|
||||
* Utility function which escape characters a & < > ' ".
|
||||
|
@ -14,12 +13,11 @@
|
|||
* escaped string to dest if provided.
|
||||
*/
|
||||
size_t escape_markup_text(const char *src, char *dest);
|
||||
PangoLayout *get_pango_layout(cairo_t *cairo, const PangoFontDescription *desc,
|
||||
PangoLayout *get_pango_layout(cairo_t *cairo, const char *font,
|
||||
const char *text, double scale, bool markup);
|
||||
void get_text_size(cairo_t *cairo, const PangoFontDescription *desc, int *width, int *height,
|
||||
int *baseline, double scale, bool markup, const char *fmt, ...) _SWAY_ATTRIB_PRINTF(8, 9);
|
||||
void get_text_metrics(const PangoFontDescription *desc, int *height, int *baseline);
|
||||
void render_text(cairo_t *cairo, PangoFontDescription *desc,
|
||||
double scale, bool markup, const char *fmt, ...) _SWAY_ATTRIB_PRINTF(5, 6);
|
||||
void get_text_size(cairo_t *cairo, const char *font, int *width, int *height,
|
||||
int *baseline, double scale, bool markup, const char *fmt, ...);
|
||||
void pango_printf(cairo_t *cairo, const char *font,
|
||||
double scale, bool markup, const char *fmt, ...);
|
||||
|
||||
#endif
|
||||
|
|
|
@ -2,15 +2,8 @@
|
|||
#define _SWAY_STRINGOP_H
|
||||
|
||||
#include <stdbool.h>
|
||||
#include <stddef.h>
|
||||
#include "list.h"
|
||||
|
||||
#ifdef __GNUC__
|
||||
#define _SWAY_ATTRIB_PRINTF(start, end) __attribute__((format(printf, start, end)))
|
||||
#else
|
||||
#define _SWAY_ATTRIB_PRINTF(start, end)
|
||||
#endif
|
||||
|
||||
void strip_whitespace(char *str);
|
||||
void strip_quotes(char *str);
|
||||
|
||||
|
@ -37,7 +30,4 @@ char *argsep(char **stringp, const char *delim, char *matched_delim);
|
|||
// Expand a path using shell replacements such as $HOME and ~
|
||||
bool expand_path(char **path);
|
||||
|
||||
char *vformat_str(const char *fmt, va_list args) _SWAY_ATTRIB_PRINTF(1, 0);
|
||||
char *format_str(const char *fmt, ...) _SWAY_ATTRIB_PRINTF(1, 2);
|
||||
|
||||
#endif
|
||||
|
|
|
@ -3,14 +3,13 @@
|
|||
|
||||
#include <wlr/util/edges.h>
|
||||
#include "config.h"
|
||||
#include "stringop.h"
|
||||
|
||||
struct sway_container;
|
||||
|
||||
typedef struct cmd_results *sway_cmd(int argc, char **argv);
|
||||
|
||||
struct cmd_handler {
|
||||
const char *command;
|
||||
char *command;
|
||||
sway_cmd *handle;
|
||||
};
|
||||
|
||||
|
@ -47,7 +46,7 @@ enum expected_args {
|
|||
struct cmd_results *checkarg(int argc, const char *name,
|
||||
enum expected_args type, int val);
|
||||
|
||||
const struct cmd_handler *find_handler(const char *line,
|
||||
const struct cmd_handler *find_handler(char *line,
|
||||
const struct cmd_handler *cmd_handlers, size_t handlers_size);
|
||||
|
||||
/**
|
||||
|
@ -77,7 +76,7 @@ struct cmd_results *config_commands_command(char *exec);
|
|||
/**
|
||||
* Allocates a cmd_results object.
|
||||
*/
|
||||
struct cmd_results *cmd_results_new(enum cmd_status status, const char *error, ...) _SWAY_ATTRIB_PRINTF(2, 3);
|
||||
struct cmd_results *cmd_results_new(enum cmd_status status, const char *error, ...);
|
||||
/**
|
||||
* Frees a cmd_results object.
|
||||
*/
|
||||
|
@ -104,18 +103,15 @@ struct sway_container *container_find_resize_parent(struct sway_container *con,
|
|||
sway_cmd cmd_exec_validate;
|
||||
sway_cmd cmd_exec_process;
|
||||
|
||||
sway_cmd cmd_allow_tearing;
|
||||
sway_cmd cmd_assign;
|
||||
sway_cmd cmd_bar;
|
||||
sway_cmd cmd_bindcode;
|
||||
sway_cmd cmd_bindgesture;
|
||||
sway_cmd cmd_bindswitch;
|
||||
sway_cmd cmd_bindsym;
|
||||
sway_cmd cmd_border;
|
||||
sway_cmd cmd_client_noop;
|
||||
sway_cmd cmd_client_focused;
|
||||
sway_cmd cmd_client_focused_inactive;
|
||||
sway_cmd cmd_client_focused_tab_title;
|
||||
sway_cmd cmd_client_unfocused;
|
||||
sway_cmd cmd_client_urgent;
|
||||
sway_cmd cmd_client_placeholder;
|
||||
|
@ -161,11 +157,12 @@ sway_cmd cmd_new_float;
|
|||
sway_cmd cmd_new_window;
|
||||
sway_cmd cmd_nop;
|
||||
sway_cmd cmd_opacity;
|
||||
sway_cmd cmd_new_float;
|
||||
sway_cmd cmd_new_window;
|
||||
sway_cmd cmd_no_focus;
|
||||
sway_cmd cmd_output;
|
||||
sway_cmd cmd_permit;
|
||||
sway_cmd cmd_popup_during_fullscreen;
|
||||
sway_cmd cmd_primary_selection;
|
||||
sway_cmd cmd_reject;
|
||||
sway_cmd cmd_reload;
|
||||
sway_cmd cmd_rename;
|
||||
|
@ -193,7 +190,6 @@ sway_cmd cmd_titlebar_border_thickness;
|
|||
sway_cmd cmd_titlebar_padding;
|
||||
sway_cmd cmd_unbindcode;
|
||||
sway_cmd cmd_unbindswitch;
|
||||
sway_cmd cmd_unbindgesture;
|
||||
sway_cmd cmd_unbindsym;
|
||||
sway_cmd cmd_unmark;
|
||||
sway_cmd cmd_urgent;
|
||||
|
@ -250,11 +246,9 @@ sway_cmd input_cmd_seat;
|
|||
sway_cmd input_cmd_accel_profile;
|
||||
sway_cmd input_cmd_calibration_matrix;
|
||||
sway_cmd input_cmd_click_method;
|
||||
sway_cmd input_cmd_clickfinger_button_map;
|
||||
sway_cmd input_cmd_drag;
|
||||
sway_cmd input_cmd_drag_lock;
|
||||
sway_cmd input_cmd_dwt;
|
||||
sway_cmd input_cmd_dwtp;
|
||||
sway_cmd input_cmd_events;
|
||||
sway_cmd input_cmd_left_handed;
|
||||
sway_cmd input_cmd_map_from_region;
|
||||
|
@ -263,12 +257,10 @@ sway_cmd input_cmd_map_to_region;
|
|||
sway_cmd input_cmd_middle_emulation;
|
||||
sway_cmd input_cmd_natural_scroll;
|
||||
sway_cmd input_cmd_pointer_accel;
|
||||
sway_cmd input_cmd_rotation_angle;
|
||||
sway_cmd input_cmd_scroll_factor;
|
||||
sway_cmd input_cmd_repeat_delay;
|
||||
sway_cmd input_cmd_repeat_rate;
|
||||
sway_cmd input_cmd_scroll_button;
|
||||
sway_cmd input_cmd_scroll_button_lock;
|
||||
sway_cmd input_cmd_scroll_method;
|
||||
sway_cmd input_cmd_tap;
|
||||
sway_cmd input_cmd_tap_button_map;
|
||||
|
@ -284,24 +276,18 @@ sway_cmd input_cmd_xkb_switch_layout;
|
|||
sway_cmd input_cmd_xkb_variant;
|
||||
|
||||
sway_cmd output_cmd_adaptive_sync;
|
||||
sway_cmd output_cmd_allow_tearing;
|
||||
sway_cmd output_cmd_background;
|
||||
sway_cmd output_cmd_color_profile;
|
||||
sway_cmd output_cmd_disable;
|
||||
sway_cmd output_cmd_dpms;
|
||||
sway_cmd output_cmd_enable;
|
||||
sway_cmd output_cmd_max_render_time;
|
||||
sway_cmd output_cmd_mode;
|
||||
sway_cmd output_cmd_modeline;
|
||||
sway_cmd output_cmd_position;
|
||||
sway_cmd output_cmd_power;
|
||||
sway_cmd output_cmd_render_bit_depth;
|
||||
sway_cmd output_cmd_scale;
|
||||
sway_cmd output_cmd_scale_filter;
|
||||
sway_cmd output_cmd_subpixel;
|
||||
sway_cmd output_cmd_toggle;
|
||||
sway_cmd output_cmd_transform;
|
||||
sway_cmd output_cmd_unplug;
|
||||
|
||||
sway_cmd seat_cmd_attach;
|
||||
sway_cmd seat_cmd_cursor;
|
||||
|
|
|
@ -5,21 +5,16 @@
|
|||
#include <string.h>
|
||||
#include <time.h>
|
||||
#include <wlr/interfaces/wlr_switch.h>
|
||||
#include <wlr/types/wlr_box.h>
|
||||
#include <wlr/types/wlr_tablet_tool.h>
|
||||
#include <wlr/util/box.h>
|
||||
#include <wlr/render/color.h>
|
||||
#include <xkbcommon/xkbcommon.h>
|
||||
#include <xf86drmMode.h>
|
||||
#include "../include/config.h"
|
||||
#include "gesture.h"
|
||||
#include "list.h"
|
||||
#include "stringop.h"
|
||||
#include "swaynag.h"
|
||||
#include "tree/container.h"
|
||||
#include "sway/input/tablet.h"
|
||||
#include "sway/tree/root.h"
|
||||
#include "wlr-layer-shell-unstable-v1-protocol.h"
|
||||
#include <pango/pangocairo.h>
|
||||
|
||||
// TODO: Refactor this shit
|
||||
|
||||
|
@ -36,8 +31,7 @@ enum binding_input_type {
|
|||
BINDING_KEYSYM,
|
||||
BINDING_MOUSECODE,
|
||||
BINDING_MOUSESYM,
|
||||
BINDING_SWITCH, // dummy, only used to call seat_execute_command
|
||||
BINDING_GESTURE // dummy, only used to call seat_execute_command
|
||||
BINDING_SWITCH
|
||||
};
|
||||
|
||||
enum binding_flags {
|
||||
|
@ -50,11 +44,10 @@ enum binding_flags {
|
|||
BINDING_RELOAD = 1 << 6, // switch only; (re)trigger binding on reload
|
||||
BINDING_INHIBITED = 1 << 7, // keyboard only: ignore shortcut inhibitor
|
||||
BINDING_NOREPEAT = 1 << 8, // keyboard only; do not trigger when repeating a held key
|
||||
BINDING_EXACT = 1 << 9, // gesture only; only trigger on exact match
|
||||
};
|
||||
|
||||
/**
|
||||
* A key (or mouse) binding and an associated command.
|
||||
* A key binding and an associated command.
|
||||
*/
|
||||
struct sway_binding {
|
||||
enum binding_input_type type;
|
||||
|
@ -68,10 +61,12 @@ struct sway_binding {
|
|||
char *command;
|
||||
};
|
||||
|
||||
enum sway_switch_trigger {
|
||||
SWAY_SWITCH_TRIGGER_OFF,
|
||||
SWAY_SWITCH_TRIGGER_ON,
|
||||
SWAY_SWITCH_TRIGGER_TOGGLE,
|
||||
/**
|
||||
* A mouse binding and an associated command.
|
||||
*/
|
||||
struct sway_mouse_binding {
|
||||
uint32_t button;
|
||||
char *command;
|
||||
};
|
||||
|
||||
/**
|
||||
|
@ -79,21 +74,11 @@ enum sway_switch_trigger {
|
|||
*/
|
||||
struct sway_switch_binding {
|
||||
enum wlr_switch_type type;
|
||||
enum sway_switch_trigger trigger;
|
||||
enum wlr_switch_state state;
|
||||
uint32_t flags;
|
||||
char *command;
|
||||
};
|
||||
|
||||
/**
|
||||
* A gesture binding and an associated command.
|
||||
*/
|
||||
struct sway_gesture_binding {
|
||||
char *input;
|
||||
uint32_t flags;
|
||||
struct gesture gesture;
|
||||
char *command;
|
||||
};
|
||||
|
||||
/**
|
||||
* Focus on window activation.
|
||||
*/
|
||||
|
@ -113,7 +98,6 @@ struct sway_mode {
|
|||
list_t *keycode_bindings;
|
||||
list_t *mouse_bindings;
|
||||
list_t *switch_bindings;
|
||||
list_t *gesture_bindings;
|
||||
bool pango;
|
||||
};
|
||||
|
||||
|
@ -149,21 +133,17 @@ struct input_config {
|
|||
int accel_profile;
|
||||
struct calibration_matrix calibration_matrix;
|
||||
int click_method;
|
||||
int clickfinger_button_map;
|
||||
int drag;
|
||||
int drag_lock;
|
||||
int dwt;
|
||||
int dwtp;
|
||||
int left_handed;
|
||||
int middle_emulation;
|
||||
int natural_scroll;
|
||||
float pointer_accel;
|
||||
float rotation_angle;
|
||||
float scroll_factor;
|
||||
int repeat_delay;
|
||||
int repeat_rate;
|
||||
int scroll_button;
|
||||
int scroll_button_lock;
|
||||
int scroll_method;
|
||||
int send_events;
|
||||
int tap;
|
||||
|
@ -253,6 +233,12 @@ struct seat_config {
|
|||
} xcursor_theme;
|
||||
};
|
||||
|
||||
enum config_dpms {
|
||||
DPMS_IGNORE,
|
||||
DPMS_ON,
|
||||
DPMS_OFF,
|
||||
};
|
||||
|
||||
enum scale_filter_mode {
|
||||
SCALE_FILTER_DEFAULT, // the default is currently smart
|
||||
SCALE_FILTER_LINEAR,
|
||||
|
@ -260,13 +246,6 @@ enum scale_filter_mode {
|
|||
SCALE_FILTER_SMART,
|
||||
};
|
||||
|
||||
enum render_bit_depth {
|
||||
RENDER_BIT_DEPTH_DEFAULT, // the default is currently 8
|
||||
RENDER_BIT_DEPTH_6,
|
||||
RENDER_BIT_DEPTH_8,
|
||||
RENDER_BIT_DEPTH_10,
|
||||
};
|
||||
|
||||
/**
|
||||
* Size and position configuration for a particular output.
|
||||
*
|
||||
|
@ -275,11 +254,9 @@ enum render_bit_depth {
|
|||
struct output_config {
|
||||
char *name;
|
||||
int enabled;
|
||||
int power;
|
||||
int width, height;
|
||||
float refresh_rate;
|
||||
int custom_mode;
|
||||
drmModeModeInfo drm_mode;
|
||||
int x, y;
|
||||
float scale;
|
||||
enum scale_filter_mode scale_filter;
|
||||
|
@ -287,14 +264,11 @@ struct output_config {
|
|||
enum wl_output_subpixel subpixel;
|
||||
int max_render_time; // In milliseconds
|
||||
int adaptive_sync;
|
||||
enum render_bit_depth render_bit_depth;
|
||||
bool set_color_transform;
|
||||
struct wlr_color_transform *color_transform;
|
||||
int allow_tearing;
|
||||
|
||||
char *background;
|
||||
char *background_option;
|
||||
char *background_fallback;
|
||||
enum config_dpms dpms_state;
|
||||
};
|
||||
|
||||
/**
|
||||
|
@ -307,12 +281,6 @@ struct side_gaps {
|
|||
int left;
|
||||
};
|
||||
|
||||
enum smart_gaps_mode {
|
||||
SMART_GAPS_OFF,
|
||||
SMART_GAPS_ON,
|
||||
SMART_GAPS_INVERSE_OUTER,
|
||||
};
|
||||
|
||||
/**
|
||||
* Stores configuration for a workspace, regardless of whether the workspace
|
||||
* exists.
|
||||
|
@ -324,12 +292,6 @@ struct workspace_config {
|
|||
struct side_gaps gaps_outer;
|
||||
};
|
||||
|
||||
enum pango_markup_config {
|
||||
PANGO_MARKUP_DISABLED = false,
|
||||
PANGO_MARKUP_ENABLED = true,
|
||||
PANGO_MARKUP_DEFAULT // The default is font dependent ("pango:" prefix)
|
||||
};
|
||||
|
||||
struct bar_config {
|
||||
char *swaybar_command;
|
||||
struct wl_client *client;
|
||||
|
@ -361,7 +323,7 @@ struct bar_config {
|
|||
char *position;
|
||||
list_t *bindings;
|
||||
char *status_command;
|
||||
enum pango_markup_config pango_markup;
|
||||
bool pango_markup;
|
||||
char *font;
|
||||
int height; // -1 not defined
|
||||
bool workspace_buttons;
|
||||
|
@ -448,6 +410,14 @@ enum sway_popup_during_fullscreen {
|
|||
POPUP_LEAVE,
|
||||
};
|
||||
|
||||
enum command_context {
|
||||
CONTEXT_CONFIG = 1 << 0,
|
||||
CONTEXT_BINDING = 1 << 1,
|
||||
CONTEXT_IPC = 1 << 2,
|
||||
CONTEXT_CRITERIA = 1 << 3,
|
||||
CONTEXT_ALL = 0xFFFFFFFF,
|
||||
};
|
||||
|
||||
enum focus_follows_mouse_mode {
|
||||
FOLLOWS_NO,
|
||||
FOLLOWS_YES,
|
||||
|
@ -509,10 +479,9 @@ struct sway_config {
|
|||
char *floating_scroll_right_cmd;
|
||||
enum sway_container_layout default_orientation;
|
||||
enum sway_container_layout default_layout;
|
||||
char *font; // Used for IPC.
|
||||
PangoFontDescription *font_description; // Used internally for rendering and validating.
|
||||
int font_height;
|
||||
int font_baseline;
|
||||
char *font;
|
||||
size_t font_height;
|
||||
size_t font_baseline;
|
||||
bool pango_markup;
|
||||
int titlebar_border_thickness;
|
||||
int titlebar_h_padding;
|
||||
|
@ -539,12 +508,11 @@ struct sway_config {
|
|||
bool auto_back_and_forth;
|
||||
bool show_marks;
|
||||
enum alignment title_align;
|
||||
bool primary_selection;
|
||||
|
||||
bool tiling_drag;
|
||||
int tiling_drag_threshold;
|
||||
|
||||
enum smart_gaps_mode smart_gaps;
|
||||
bool smart_gaps;
|
||||
int gaps_inner;
|
||||
struct side_gaps gaps_outer;
|
||||
|
||||
|
@ -567,15 +535,12 @@ struct sway_config {
|
|||
struct {
|
||||
struct border_colors focused;
|
||||
struct border_colors focused_inactive;
|
||||
struct border_colors focused_tab_title;
|
||||
struct border_colors unfocused;
|
||||
struct border_colors urgent;
|
||||
struct border_colors placeholder;
|
||||
float background[4];
|
||||
} border_colors;
|
||||
|
||||
bool has_focused_tab_title;
|
||||
|
||||
// floating view
|
||||
int32_t floating_maximum_width;
|
||||
int32_t floating_maximum_height;
|
||||
|
@ -633,7 +598,7 @@ void run_deferred_bindings(void);
|
|||
/**
|
||||
* Adds a warning entry to the swaynag instance used for errors.
|
||||
*/
|
||||
void config_add_swaynag_warning(char *fmt, ...) _SWAY_ATTRIB_PRINTF(1, 2);
|
||||
void config_add_swaynag_warning(char *fmt, ...);
|
||||
|
||||
/**
|
||||
* Free config struct
|
||||
|
@ -686,25 +651,21 @@ const char *sway_output_scale_filter_to_string(enum scale_filter_mode scale_filt
|
|||
|
||||
struct output_config *new_output_config(const char *name);
|
||||
|
||||
bool apply_output_configs(struct output_config **ocs, size_t ocs_len,
|
||||
bool test_only, bool degrade_to_off);
|
||||
void merge_output_config(struct output_config *dst, struct output_config *src);
|
||||
|
||||
void apply_stored_output_configs(void);
|
||||
bool apply_output_config(struct output_config *oc, struct sway_output *output);
|
||||
|
||||
/**
|
||||
* store_output_config stores a new output config. An output may be matched by
|
||||
* three different config types, in order of precedence: Identifier, name and
|
||||
* wildcard. When storing a config type of lower precedence, assume that the
|
||||
* user wants the config to take immediate effect by superseding (clearing) the
|
||||
* same values from higher presedence configuration.
|
||||
*/
|
||||
void store_output_config(struct output_config *oc);
|
||||
bool test_output_config(struct output_config *oc, struct sway_output *output);
|
||||
|
||||
struct output_config *store_output_config(struct output_config *oc);
|
||||
|
||||
struct output_config *find_output_config(struct sway_output *output);
|
||||
|
||||
void free_output_config(struct output_config *oc);
|
||||
void apply_output_config_to_outputs(struct output_config *oc);
|
||||
|
||||
void request_modeset(void);
|
||||
void reset_outputs(void);
|
||||
|
||||
void free_output_config(struct output_config *oc);
|
||||
|
||||
bool spawn_swaybg(void);
|
||||
|
||||
|
@ -714,8 +675,6 @@ void free_sway_binding(struct sway_binding *sb);
|
|||
|
||||
void free_switch_binding(struct sway_switch_binding *binding);
|
||||
|
||||
void free_gesture_binding(struct sway_gesture_binding *binding);
|
||||
|
||||
void seat_execute_command(struct sway_seat *seat, struct sway_binding *binding);
|
||||
|
||||
void load_swaybar(struct bar_config *bar);
|
||||
|
@ -731,13 +690,14 @@ void free_bar_binding(struct bar_binding *binding);
|
|||
void free_workspace_config(struct workspace_config *wsc);
|
||||
|
||||
/**
|
||||
* Updates the value of config->font_height based on the metrics for title's
|
||||
* font as reported by pango.
|
||||
* Updates the value of config->font_height based on the max title height
|
||||
* reported by each container. If recalculate is true, the containers will
|
||||
* recalculate their heights before reporting.
|
||||
*
|
||||
* If the height has changed, all containers will be rearranged to take on the
|
||||
* new size.
|
||||
*/
|
||||
void config_update_font_height(void);
|
||||
void config_update_font_height(bool recalculate);
|
||||
|
||||
/**
|
||||
* Convert bindsym into bindcode using the first configured layout.
|
||||
|
|
|
@ -1,16 +1,11 @@
|
|||
#ifndef _SWAY_CRITERIA_H
|
||||
#define _SWAY_CRITERIA_H
|
||||
|
||||
#define PCRE2_CODE_UNIT_WIDTH 8
|
||||
#include <pcre2.h>
|
||||
#include <pcre.h>
|
||||
#include "config.h"
|
||||
#include "list.h"
|
||||
#include "tree/view.h"
|
||||
|
||||
#if WLR_HAS_XWAYLAND
|
||||
#include "sway/xwayland.h"
|
||||
#endif
|
||||
|
||||
enum criteria_type {
|
||||
CT_COMMAND = 1 << 0,
|
||||
CT_ASSIGN_OUTPUT = 1 << 1,
|
||||
|
@ -20,13 +15,13 @@ enum criteria_type {
|
|||
};
|
||||
|
||||
enum pattern_type {
|
||||
PATTERN_PCRE2,
|
||||
PATTERN_PCRE,
|
||||
PATTERN_FOCUSED,
|
||||
};
|
||||
|
||||
struct pattern {
|
||||
enum pattern_type match_type;
|
||||
pcre2_code *regex;
|
||||
pcre *regex;
|
||||
};
|
||||
|
||||
struct criteria {
|
||||
|
@ -40,14 +35,13 @@ struct criteria {
|
|||
struct pattern *app_id;
|
||||
struct pattern *con_mark;
|
||||
uint32_t con_id; // internal ID
|
||||
#if WLR_HAS_XWAYLAND
|
||||
#if HAVE_XWAYLAND
|
||||
struct pattern *class;
|
||||
uint32_t id; // X11 window ID
|
||||
struct pattern *instance;
|
||||
struct pattern *window_role;
|
||||
enum atom_name window_type;
|
||||
#endif
|
||||
bool all;
|
||||
bool floating;
|
||||
bool tiling;
|
||||
char urgent; // 'l' for latest or 'o' for oldest
|
||||
|
|
13
include/sway/desktop.h
Normal file
13
include/sway/desktop.h
Normal file
|
@ -0,0 +1,13 @@
|
|||
#include <wlr/types/wlr_surface.h>
|
||||
|
||||
struct sway_container;
|
||||
struct sway_view;
|
||||
|
||||
void desktop_damage_surface(struct wlr_surface *surface, double lx, double ly,
|
||||
bool whole);
|
||||
|
||||
void desktop_damage_whole_container(struct sway_container *con);
|
||||
|
||||
void desktop_damage_box(struct wlr_box *box);
|
||||
|
||||
void desktop_damage_view(struct sway_view *view);
|
|
@ -1,6 +1,8 @@
|
|||
#ifndef _SWAY_DESKTOP_IDLE_INHIBIT_V1_H
|
||||
#define _SWAY_DESKTOP_IDLE_INHIBIT_V1_H
|
||||
#include <wlr/types/wlr_idle_inhibit_v1.h>
|
||||
#include <wlr/types/wlr_idle.h>
|
||||
#include "sway/server.h"
|
||||
|
||||
enum sway_idle_inhibit_mode {
|
||||
INHIBIT_IDLE_APPLICATION, // Application set inhibitor (when visible)
|
||||
|
@ -14,9 +16,12 @@ struct sway_idle_inhibit_manager_v1 {
|
|||
struct wlr_idle_inhibit_manager_v1 *wlr_manager;
|
||||
struct wl_listener new_idle_inhibitor_v1;
|
||||
struct wl_list inhibitors;
|
||||
|
||||
struct wlr_idle *idle;
|
||||
};
|
||||
|
||||
struct sway_idle_inhibitor_v1 {
|
||||
struct sway_idle_inhibit_manager_v1 *manager;
|
||||
struct wlr_idle_inhibitor_v1 *wlr_inhibitor;
|
||||
struct sway_view *view;
|
||||
enum sway_idle_inhibit_mode mode;
|
||||
|
@ -28,7 +33,8 @@ struct sway_idle_inhibitor_v1 {
|
|||
bool sway_idle_inhibit_v1_is_active(
|
||||
struct sway_idle_inhibitor_v1 *inhibitor);
|
||||
|
||||
void sway_idle_inhibit_v1_check_active(void);
|
||||
void sway_idle_inhibit_v1_check_active(
|
||||
struct sway_idle_inhibit_manager_v1 *manager);
|
||||
|
||||
void sway_idle_inhibit_v1_user_inhibitor_register(struct sway_view *view,
|
||||
enum sway_idle_inhibit_mode mode);
|
||||
|
@ -42,6 +48,6 @@ struct sway_idle_inhibitor_v1 *sway_idle_inhibit_v1_application_inhibitor_for_vi
|
|||
void sway_idle_inhibit_v1_user_inhibitor_destroy(
|
||||
struct sway_idle_inhibitor_v1 *inhibitor);
|
||||
|
||||
bool sway_idle_inhibit_manager_v1_init(void);
|
||||
|
||||
struct sway_idle_inhibit_manager_v1 *sway_idle_inhibit_manager_v1_create(
|
||||
struct wl_display *wl_display, struct wlr_idle *idle);
|
||||
#endif
|
||||
|
|
|
@ -1,40 +0,0 @@
|
|||
#ifndef _SWAY_LAUNCHER_H
|
||||
#define _SWAY_LAUNCHER_H
|
||||
|
||||
#include <stdlib.h>
|
||||
#include <wayland-server-core.h>
|
||||
#include "sway/input/seat.h"
|
||||
|
||||
struct launcher_ctx {
|
||||
pid_t pid;
|
||||
char *fallback_name;
|
||||
struct wlr_xdg_activation_token_v1 *token;
|
||||
struct wl_listener token_destroy;
|
||||
struct sway_seat *seat;
|
||||
struct wl_listener seat_destroy;
|
||||
|
||||
bool activated;
|
||||
bool had_focused_surface;
|
||||
|
||||
struct sway_node *node;
|
||||
struct wl_listener node_destroy;
|
||||
|
||||
struct wl_list link; // sway_server::pending_launcher_ctxs
|
||||
};
|
||||
|
||||
struct launcher_ctx *launcher_ctx_find_pid(pid_t pid);
|
||||
|
||||
struct sway_workspace *launcher_ctx_get_workspace(struct launcher_ctx *ctx);
|
||||
|
||||
void launcher_ctx_consume(struct launcher_ctx *ctx);
|
||||
|
||||
void launcher_ctx_destroy(struct launcher_ctx *ctx);
|
||||
|
||||
struct launcher_ctx *launcher_ctx_create_internal(void);
|
||||
|
||||
struct launcher_ctx *launcher_ctx_create(
|
||||
struct wlr_xdg_activation_token_v1 *token, struct sway_node *node);
|
||||
|
||||
const char *launcher_ctx_get_token_name(struct launcher_ctx *ctx);
|
||||
|
||||
#endif
|
|
@ -1,8 +1,6 @@
|
|||
#ifndef _SWAY_TRANSACTION_H
|
||||
#define _SWAY_TRANSACTION_H
|
||||
#include <stdint.h>
|
||||
#include <stdbool.h>
|
||||
#include <wlr/types/wlr_scene.h>
|
||||
|
||||
/**
|
||||
* Transactions enable us to perform atomic layout updates.
|
||||
|
@ -40,11 +38,8 @@ void transaction_commit_dirty_client(void);
|
|||
* Notify the transaction system that a view is ready for the new layout.
|
||||
*
|
||||
* When all views in the transaction are ready, the layout will be applied.
|
||||
*
|
||||
* A success boolean is returned denoting that this part of the transaction is
|
||||
* ready.
|
||||
*/
|
||||
bool transaction_notify_view_ready_by_serial(struct sway_view *view,
|
||||
void transaction_notify_view_ready_by_serial(struct sway_view *view,
|
||||
uint32_t serial);
|
||||
|
||||
/**
|
||||
|
@ -52,13 +47,8 @@ bool transaction_notify_view_ready_by_serial(struct sway_view *view,
|
|||
* identifying the instruction by geometry rather than by serial.
|
||||
*
|
||||
* This is used by xwayland views, as they don't have serials.
|
||||
*
|
||||
* A success boolean is returned denoting that this part of the transaction is
|
||||
* ready.
|
||||
*/
|
||||
bool transaction_notify_view_ready_by_geometry(struct sway_view *view,
|
||||
void transaction_notify_view_ready_by_geometry(struct sway_view *view,
|
||||
double x, double y, int width, int height);
|
||||
|
||||
void arrange_popups(struct wlr_scene_tree *popups);
|
||||
|
||||
#endif
|
||||
|
|
|
@ -4,7 +4,7 @@
|
|||
#include <stdint.h>
|
||||
#include <wlr/types/wlr_pointer_constraints_v1.h>
|
||||
#include <wlr/types/wlr_pointer_gestures_v1.h>
|
||||
#include <wlr/types/wlr_compositor.h>
|
||||
#include <wlr/types/wlr_surface.h>
|
||||
#include "sway/input/seat.h"
|
||||
#include "config.h"
|
||||
|
||||
|
@ -35,8 +35,7 @@ struct sway_cursor {
|
|||
pixman_region32_t confine; // invalid if active_constraint == NULL
|
||||
bool active_confine_requires_warp;
|
||||
|
||||
struct wl_listener hold_begin;
|
||||
struct wl_listener hold_end;
|
||||
struct wlr_pointer_gestures_v1 *pointer_gestures;
|
||||
struct wl_listener pinch_begin;
|
||||
struct wl_listener pinch_update;
|
||||
struct wl_listener pinch_end;
|
||||
|
@ -52,11 +51,8 @@ struct sway_cursor {
|
|||
|
||||
struct wl_listener touch_down;
|
||||
struct wl_listener touch_up;
|
||||
struct wl_listener touch_cancel;
|
||||
struct wl_listener touch_motion;
|
||||
struct wl_listener touch_frame;
|
||||
bool simulating_pointer_from_touch;
|
||||
bool pointer_touch_up;
|
||||
int32_t pointer_touch_id;
|
||||
|
||||
struct wl_listener tool_axis;
|
||||
|
@ -64,7 +60,6 @@ struct sway_cursor {
|
|||
struct wl_listener tool_proximity;
|
||||
struct wl_listener tool_button;
|
||||
bool simulating_pointer_from_tool_tip;
|
||||
bool simulating_pointer_from_tool_button;
|
||||
uint32_t tool_buttons;
|
||||
|
||||
struct wl_listener request_set_cursor;
|
||||
|
@ -108,16 +103,12 @@ void cursor_unhide(struct sway_cursor *cursor);
|
|||
int cursor_get_timeout(struct sway_cursor *cursor);
|
||||
void cursor_notify_key_press(struct sway_cursor *cursor);
|
||||
|
||||
void pointer_motion(struct sway_cursor *cursor, uint32_t time_msec,
|
||||
struct wlr_input_device *device, double dx, double dy,
|
||||
double dx_unaccel, double dy_unaccel);
|
||||
|
||||
void dispatch_cursor_button(struct sway_cursor *cursor,
|
||||
struct wlr_input_device *device, uint32_t time_msec, uint32_t button,
|
||||
enum wl_pointer_button_state state);
|
||||
enum wlr_button_state state);
|
||||
|
||||
void dispatch_cursor_axis(struct sway_cursor *cursor,
|
||||
struct wlr_pointer_axis_event *event);
|
||||
struct wlr_event_pointer_axis *event);
|
||||
|
||||
void cursor_set_image(struct sway_cursor *cursor, const char *image,
|
||||
struct wl_client *client);
|
||||
|
@ -145,6 +136,4 @@ uint32_t get_mouse_button(const char *name, char **error);
|
|||
|
||||
const char *get_mouse_button_name(uint32_t button);
|
||||
|
||||
void handle_request_set_cursor_shape(struct wl_listener *listener, void *data);
|
||||
|
||||
#endif
|
||||
|
|
|
@ -1,15 +1,14 @@
|
|||
#ifndef _SWAY_INPUT_INPUT_MANAGER_H
|
||||
#define _SWAY_INPUT_INPUT_MANAGER_H
|
||||
#include <libinput.h>
|
||||
#include <wlr/types/wlr_input_inhibitor.h>
|
||||
#include <wlr/types/wlr_keyboard_shortcuts_inhibit_v1.h>
|
||||
#include <wlr/types/wlr_virtual_keyboard_v1.h>
|
||||
#include <wlr/types/wlr_virtual_pointer_v1.h>
|
||||
#include <wlr/types/wlr_transient_seat_v1.h>
|
||||
#include "sway/server.h"
|
||||
#include "sway/config.h"
|
||||
#include "list.h"
|
||||
|
||||
struct sway_server;
|
||||
|
||||
struct sway_input_device {
|
||||
char *identifier;
|
||||
struct wlr_input_device *wlr_device;
|
||||
|
@ -22,11 +21,10 @@ struct sway_input_manager {
|
|||
struct wl_list devices;
|
||||
struct wl_list seats;
|
||||
|
||||
struct wlr_input_inhibit_manager *inhibit;
|
||||
struct wlr_keyboard_shortcuts_inhibit_manager_v1 *keyboard_shortcuts_inhibit;
|
||||
struct wlr_virtual_keyboard_manager_v1 *virtual_keyboard;
|
||||
struct wlr_virtual_pointer_manager_v1 *virtual_pointer;
|
||||
struct wlr_pointer_gestures_v1 *pointer_gestures;
|
||||
struct wlr_transient_seat_manager_v1 *transient_seat_manager;
|
||||
|
||||
struct wl_listener new_input;
|
||||
struct wl_listener inhibit_activate;
|
||||
|
@ -34,7 +32,6 @@ struct sway_input_manager {
|
|||
struct wl_listener keyboard_shortcuts_inhibit_new_inhibitor;
|
||||
struct wl_listener virtual_keyboard_new;
|
||||
struct wl_listener virtual_pointer_new;
|
||||
struct wl_listener transient_seat_create;
|
||||
};
|
||||
|
||||
struct sway_input_manager *input_manager_create(struct sway_server *server);
|
||||
|
@ -47,7 +44,7 @@ void input_manager_configure_xcursor(void);
|
|||
|
||||
void input_manager_apply_input_config(struct input_config *input_config);
|
||||
|
||||
void input_manager_configure_all_input_mappings(void);
|
||||
void input_manager_configure_all_inputs(void);
|
||||
|
||||
void input_manager_reset_input(struct sway_input_device *input_device);
|
||||
|
||||
|
|
|
@ -50,7 +50,6 @@ struct sway_shortcut_state {
|
|||
|
||||
struct sway_keyboard {
|
||||
struct sway_seat_device *seat_device;
|
||||
struct wlr_keyboard *wlr;
|
||||
|
||||
struct xkb_keymap *keymap;
|
||||
xkb_layout_index_t effective_layout;
|
||||
|
|
|
@ -2,10 +2,7 @@
|
|||
#define _SWAY_INPUT_LIBINPUT_H
|
||||
#include "sway/input/input-manager.h"
|
||||
|
||||
bool sway_input_configure_libinput_device(struct sway_input_device *device);
|
||||
|
||||
void sway_input_configure_libinput_device_send_events(
|
||||
struct sway_input_device *device);
|
||||
void sway_input_configure_libinput_device(struct sway_input_device *device);
|
||||
|
||||
void sway_input_reset_libinput_device(struct sway_input_device *device);
|
||||
|
||||
|
|
|
@ -3,9 +3,7 @@
|
|||
|
||||
#include <wlr/types/wlr_keyboard_shortcuts_inhibit_v1.h>
|
||||
#include <wlr/types/wlr_layer_shell_v1.h>
|
||||
#include <wlr/types/wlr_scene.h>
|
||||
#include <wlr/types/wlr_seat.h>
|
||||
#include <wlr/types/wlr_touch.h>
|
||||
#include <wlr/util/edges.h>
|
||||
#include "sway/config.h"
|
||||
#include "sway/input/input-manager.h"
|
||||
|
@ -17,41 +15,19 @@ struct sway_seat;
|
|||
struct sway_seatop_impl {
|
||||
void (*button)(struct sway_seat *seat, uint32_t time_msec,
|
||||
struct wlr_input_device *device, uint32_t button,
|
||||
enum wl_pointer_button_state state);
|
||||
enum wlr_button_state state);
|
||||
void (*pointer_motion)(struct sway_seat *seat, uint32_t time_msec);
|
||||
void (*pointer_axis)(struct sway_seat *seat,
|
||||
struct wlr_pointer_axis_event *event);
|
||||
void (*hold_begin)(struct sway_seat *seat,
|
||||
struct wlr_pointer_hold_begin_event *event);
|
||||
void (*hold_end)(struct sway_seat *seat,
|
||||
struct wlr_pointer_hold_end_event *event);
|
||||
void (*pinch_begin)(struct sway_seat *seat,
|
||||
struct wlr_pointer_pinch_begin_event *event);
|
||||
void (*pinch_update)(struct sway_seat *seat,
|
||||
struct wlr_pointer_pinch_update_event *event);
|
||||
void (*pinch_end)(struct sway_seat *seat,
|
||||
struct wlr_pointer_pinch_end_event *event);
|
||||
void (*swipe_begin)(struct sway_seat *seat,
|
||||
struct wlr_pointer_swipe_begin_event *event);
|
||||
void (*swipe_update)(struct sway_seat *seat,
|
||||
struct wlr_pointer_swipe_update_event *event);
|
||||
void (*swipe_end)(struct sway_seat *seat,
|
||||
struct wlr_pointer_swipe_end_event *event);
|
||||
struct wlr_event_pointer_axis *event);
|
||||
void (*rebase)(struct sway_seat *seat, uint32_t time_msec);
|
||||
void (*touch_motion)(struct sway_seat *seat,
|
||||
struct wlr_touch_motion_event *event, double lx, double ly);
|
||||
void (*touch_up)(struct sway_seat *seat,
|
||||
struct wlr_touch_up_event *event);
|
||||
void (*touch_down)(struct sway_seat *seat,
|
||||
struct wlr_touch_down_event *event, double lx, double ly);
|
||||
void (*touch_cancel)(struct sway_seat *seat,
|
||||
struct wlr_touch_cancel_event *event);
|
||||
void (*tablet_tool_motion)(struct sway_seat *seat,
|
||||
struct sway_tablet_tool *tool, uint32_t time_msec);
|
||||
void (*tablet_tool_tip)(struct sway_seat *seat, struct sway_tablet_tool *tool,
|
||||
uint32_t time_msec, enum wlr_tablet_tool_tip_state state);
|
||||
void (*end)(struct sway_seat *seat);
|
||||
void (*unref)(struct sway_seat *seat, struct sway_container *con);
|
||||
void (*render)(struct sway_seat *seat, struct sway_output *output,
|
||||
pixman_region32_t *damage);
|
||||
bool allow_set_cursor;
|
||||
};
|
||||
|
||||
|
@ -74,6 +50,19 @@ struct sway_seat_node {
|
|||
struct wl_listener destroy;
|
||||
};
|
||||
|
||||
struct sway_drag_icon {
|
||||
struct sway_seat *seat;
|
||||
struct wlr_drag_icon *wlr_drag_icon;
|
||||
struct wl_list link; // sway_root::drag_icons
|
||||
|
||||
double x, y; // in layout-local coordinates
|
||||
|
||||
struct wl_listener surface_commit;
|
||||
struct wl_listener map;
|
||||
struct wl_listener unmap;
|
||||
struct wl_listener destroy;
|
||||
};
|
||||
|
||||
struct sway_drag {
|
||||
struct sway_seat *seat;
|
||||
struct wlr_drag *wlr_drag;
|
||||
|
@ -84,23 +73,16 @@ struct sway_seat {
|
|||
struct wlr_seat *wlr_seat;
|
||||
struct sway_cursor *cursor;
|
||||
|
||||
// Seat scene tree structure
|
||||
// - scene_tree
|
||||
// - drag icons
|
||||
// - drag icon 1
|
||||
// - drag icon 2
|
||||
// - seatop specific stuff
|
||||
struct wlr_scene_tree *scene_tree;
|
||||
struct wlr_scene_tree *drag_icons;
|
||||
|
||||
bool has_focus;
|
||||
struct wl_list focus_stack; // list of containers in focus order
|
||||
struct sway_workspace *workspace;
|
||||
char *prev_workspace_name; // for workspace back_and_forth
|
||||
|
||||
// If the focused layer is set, views cannot receive keyboard focus
|
||||
struct wlr_layer_surface_v1 *focused_layer;
|
||||
// If the exclusive layer is set, views cannot receive keyboard focus
|
||||
bool has_exclusive_layer;
|
||||
|
||||
// If exclusive_client is set, no other clients will receive input events
|
||||
struct wl_client *exclusive_client;
|
||||
|
||||
// Last touch point
|
||||
int32_t touch_id;
|
||||
|
@ -124,7 +106,6 @@ struct sway_seat {
|
|||
struct wl_listener start_drag;
|
||||
struct wl_listener request_set_selection;
|
||||
struct wl_listener request_set_primary_selection;
|
||||
struct wl_listener destroy;
|
||||
|
||||
struct wl_list devices; // sway_seat_device::link
|
||||
struct wl_list keyboard_groups; // sway_keyboard_group::link
|
||||
|
@ -160,9 +141,6 @@ void seat_add_device(struct sway_seat *seat,
|
|||
void seat_configure_device(struct sway_seat *seat,
|
||||
struct sway_input_device *device);
|
||||
|
||||
void seat_configure_device_mapping(struct sway_seat *seat,
|
||||
struct sway_input_device *input_device);
|
||||
|
||||
void seat_reset_device(struct sway_seat *seat,
|
||||
struct sway_input_device *input_device);
|
||||
|
||||
|
@ -193,7 +171,8 @@ void seat_set_focus_surface(struct sway_seat *seat,
|
|||
void seat_set_focus_layer(struct sway_seat *seat,
|
||||
struct wlr_layer_surface_v1 *layer);
|
||||
|
||||
void seat_unfocus_unless_client(struct sway_seat *seat, struct wl_client *client);
|
||||
void seat_set_exclusive_client(struct sway_seat *seat,
|
||||
struct wl_client *client);
|
||||
|
||||
struct sway_node *seat_get_focus(struct sway_seat *seat);
|
||||
|
||||
|
@ -252,7 +231,7 @@ void seat_idle_notify_activity(struct sway_seat *seat,
|
|||
|
||||
bool seat_is_input_allowed(struct sway_seat *seat, struct wlr_surface *surface);
|
||||
|
||||
void drag_icons_update_position(struct sway_seat *seat);
|
||||
void drag_icon_update_position(struct sway_drag_icon *icon);
|
||||
|
||||
enum wlr_edges find_resize_edge(struct sway_container *cont,
|
||||
struct wlr_surface *surface, struct sway_cursor *cursor);
|
||||
|
@ -260,13 +239,7 @@ enum wlr_edges find_resize_edge(struct sway_container *cont,
|
|||
void seatop_begin_default(struct sway_seat *seat);
|
||||
|
||||
void seatop_begin_down(struct sway_seat *seat, struct sway_container *con,
|
||||
double sx, double sy);
|
||||
|
||||
void seatop_begin_down_on_surface(struct sway_seat *seat,
|
||||
struct wlr_surface *surface, double sx, double sy);
|
||||
|
||||
void seatop_begin_touch_down(struct sway_seat *seat, struct wlr_surface *surface,
|
||||
struct wlr_touch_down_event *event, double sx, double sy, double lx, double ly);
|
||||
uint32_t time_msec, int sx, int sy);
|
||||
|
||||
void seatop_begin_move_floating(struct sway_seat *seat,
|
||||
struct sway_container *con);
|
||||
|
@ -287,18 +260,18 @@ struct sway_container *seat_get_focus_inactive_floating(struct sway_seat *seat,
|
|||
struct sway_workspace *workspace);
|
||||
|
||||
void seat_pointer_notify_button(struct sway_seat *seat, uint32_t time_msec,
|
||||
uint32_t button, enum wl_pointer_button_state state);
|
||||
uint32_t button, enum wlr_button_state state);
|
||||
|
||||
void seat_consider_warp_to_focus(struct sway_seat *seat);
|
||||
|
||||
void seatop_button(struct sway_seat *seat, uint32_t time_msec,
|
||||
struct wlr_input_device *device, uint32_t button,
|
||||
enum wl_pointer_button_state state);
|
||||
enum wlr_button_state state);
|
||||
|
||||
void seatop_pointer_motion(struct sway_seat *seat, uint32_t time_msec);
|
||||
|
||||
void seatop_pointer_axis(struct sway_seat *seat,
|
||||
struct wlr_pointer_axis_event *event);
|
||||
struct wlr_event_pointer_axis *event);
|
||||
|
||||
void seatop_tablet_tool_tip(struct sway_seat *seat,
|
||||
struct sway_tablet_tool *tool, uint32_t time_msec,
|
||||
|
@ -307,37 +280,6 @@ void seatop_tablet_tool_tip(struct sway_seat *seat,
|
|||
void seatop_tablet_tool_motion(struct sway_seat *seat,
|
||||
struct sway_tablet_tool *tool, uint32_t time_msec);
|
||||
|
||||
void seatop_hold_begin(struct sway_seat *seat,
|
||||
struct wlr_pointer_hold_begin_event *event);
|
||||
void seatop_hold_end(struct sway_seat *seat,
|
||||
struct wlr_pointer_hold_end_event *event);
|
||||
|
||||
void seatop_pinch_begin(struct sway_seat *seat,
|
||||
struct wlr_pointer_pinch_begin_event *event);
|
||||
void seatop_pinch_update(struct sway_seat *seat,
|
||||
struct wlr_pointer_pinch_update_event *event);
|
||||
void seatop_pinch_end(struct sway_seat *seat,
|
||||
struct wlr_pointer_pinch_end_event *event);
|
||||
|
||||
void seatop_swipe_begin(struct sway_seat *seat,
|
||||
struct wlr_pointer_swipe_begin_event *event);
|
||||
void seatop_swipe_update(struct sway_seat *seat,
|
||||
struct wlr_pointer_swipe_update_event *event);
|
||||
void seatop_swipe_end(struct sway_seat *seat,
|
||||
struct wlr_pointer_swipe_end_event *event);
|
||||
|
||||
void seatop_touch_motion(struct sway_seat *seat,
|
||||
struct wlr_touch_motion_event *event, double lx, double ly);
|
||||
|
||||
void seatop_touch_up(struct sway_seat *seat,
|
||||
struct wlr_touch_up_event *event);
|
||||
|
||||
void seatop_touch_down(struct sway_seat *seat,
|
||||
struct wlr_touch_down_event *event, double lx, double ly);
|
||||
|
||||
void seatop_touch_cancel(struct sway_seat *seat,
|
||||
struct wlr_touch_cancel_event *event);
|
||||
|
||||
void seatop_rebase(struct sway_seat *seat, uint32_t time_msec);
|
||||
|
||||
/**
|
||||
|
@ -352,6 +294,13 @@ void seatop_end(struct sway_seat *seat);
|
|||
*/
|
||||
void seatop_unref(struct sway_seat *seat, struct sway_container *con);
|
||||
|
||||
/**
|
||||
* Instructs a seatop to render anything that it needs to render
|
||||
* (eg. dropzone for move-tiling)
|
||||
*/
|
||||
void seatop_render(struct sway_seat *seat, struct sway_output *output,
|
||||
pixman_region32_t *damage);
|
||||
|
||||
bool seatop_allows_set_cursor(struct sway_seat *seat);
|
||||
|
||||
/**
|
||||
|
|
|
@ -5,7 +5,6 @@
|
|||
|
||||
struct sway_switch {
|
||||
struct sway_seat_device *seat_device;
|
||||
struct wlr_switch *wlr;
|
||||
enum wlr_switch_state state;
|
||||
enum wlr_switch_type type;
|
||||
|
||||
|
|
|
@ -32,7 +32,6 @@ struct sway_tablet_pad {
|
|||
struct wl_list link;
|
||||
struct sway_seat_device *seat_device;
|
||||
struct sway_tablet *tablet;
|
||||
struct wlr_tablet_pad *wlr;
|
||||
struct wlr_tablet_v2_tablet_pad *tablet_v2_pad;
|
||||
|
||||
struct wl_listener attach;
|
||||
|
@ -63,7 +62,7 @@ void sway_configure_tablet_pad(struct sway_tablet_pad *tablet_pad);
|
|||
|
||||
void sway_tablet_pad_destroy(struct sway_tablet_pad *tablet_pad);
|
||||
|
||||
void sway_tablet_pad_set_focus(struct sway_tablet_pad *tablet_pad,
|
||||
void sway_tablet_pad_notify_enter(struct sway_tablet_pad *tablet_pad,
|
||||
struct wlr_surface *surface);
|
||||
|
||||
#endif
|
||||
|
|
|
@ -3,12 +3,13 @@
|
|||
|
||||
#include <wlr/types/wlr_text_input_v3.h>
|
||||
#include <wlr/types/wlr_input_method_v2.h>
|
||||
#include <wlr/types/wlr_compositor.h>
|
||||
#include <wlr/types/wlr_surface.h>
|
||||
#include "sway/input/seat.h"
|
||||
|
||||
/**
|
||||
* The relay structure manages the relationship between text-input and
|
||||
* input_method interfaces on a given seat. Multiple text-input interfaces may
|
||||
* be bound to a relay, but at most one will be focused (receiving events) at
|
||||
* be bound to a relay, but at most one will be focused (reveiving events) at
|
||||
* a time. At most one input-method interface may be bound to the seat. The
|
||||
* relay manages life cycle of both sides. When both sides are present and
|
||||
* focused, the relay passes messages between them.
|
||||
|
@ -21,21 +22,18 @@ struct sway_input_method_relay {
|
|||
struct sway_seat *seat;
|
||||
|
||||
struct wl_list text_inputs; // sway_text_input::link
|
||||
struct wl_list input_popups; // sway_input_popup::link
|
||||
struct wlr_input_method_v2 *input_method; // doesn't have to be present
|
||||
|
||||
struct wl_listener text_input_new;
|
||||
|
||||
struct wl_listener input_method_new;
|
||||
struct wl_listener input_method_commit;
|
||||
struct wl_listener input_method_new_popup_surface;
|
||||
struct wl_listener input_method_grab_keyboard;
|
||||
struct wl_listener input_method_destroy;
|
||||
|
||||
struct wl_listener input_method_keyboard_grab_destroy;
|
||||
};
|
||||
|
||||
|
||||
struct sway_text_input {
|
||||
struct sway_input_method_relay *relay;
|
||||
|
||||
|
|
|
@ -1,23 +0,0 @@
|
|||
#ifndef _SWAY_INPUT_TEXT_INPUT_POPUP_H
|
||||
#define _SWAY_INPUT_TEXT_INPUT_POPUP_H
|
||||
|
||||
#include "sway/tree/view.h"
|
||||
|
||||
struct sway_input_popup {
|
||||
struct sway_input_method_relay *relay;
|
||||
|
||||
struct wlr_scene_tree *scene_tree;
|
||||
struct sway_popup_desc desc;
|
||||
struct wlr_input_popup_surface_v2 *popup_surface;
|
||||
struct wlr_output *fixed_output;
|
||||
|
||||
struct wl_list link;
|
||||
|
||||
struct wl_listener popup_destroy;
|
||||
struct wl_listener popup_surface_commit;
|
||||
struct wl_listener popup_surface_map;
|
||||
struct wl_listener popup_surface_unmap;
|
||||
|
||||
struct wl_listener focused_surface_unmap;
|
||||
};
|
||||
#endif
|
|
@ -1,7 +1,6 @@
|
|||
#ifndef _SWAY_IPC_JSON_H
|
||||
#define _SWAY_IPC_JSON_H
|
||||
#include <json.h>
|
||||
#include "sway/output.h"
|
||||
#include "sway/tree/container.h"
|
||||
#include "sway/input/input-manager.h"
|
||||
|
||||
|
@ -10,7 +9,6 @@ json_object *ipc_json_get_version(void);
|
|||
json_object *ipc_json_get_binding_mode(void);
|
||||
|
||||
json_object *ipc_json_describe_disabled_output(struct sway_output *o);
|
||||
json_object *ipc_json_describe_non_desktop_output(struct sway_output_non_desktop *o);
|
||||
json_object *ipc_json_describe_node(struct sway_node *node);
|
||||
json_object *ipc_json_describe_node_recursive(struct sway_node *node);
|
||||
json_object *ipc_json_describe_input(struct sway_input_device *device);
|
||||
|
|
|
@ -21,6 +21,5 @@ void ipc_event_mode(const char *mode, bool pango);
|
|||
void ipc_event_shutdown(const char *reason);
|
||||
void ipc_event_binding(struct sway_binding *binding);
|
||||
void ipc_event_input(const char *change, struct sway_input_device *device);
|
||||
void ipc_event_output(void);
|
||||
|
||||
#endif
|
||||
|
|
|
@ -1,44 +1,59 @@
|
|||
#ifndef _SWAY_LAYERS_H
|
||||
#define _SWAY_LAYERS_H
|
||||
#include <stdbool.h>
|
||||
#include <wlr/types/wlr_compositor.h>
|
||||
#include <wlr/types/wlr_box.h>
|
||||
#include <wlr/types/wlr_surface.h>
|
||||
#include <wlr/types/wlr_layer_shell_v1.h>
|
||||
#include "sway/tree/view.h"
|
||||
|
||||
enum layer_parent {
|
||||
LAYER_PARENT_LAYER,
|
||||
LAYER_PARENT_POPUP,
|
||||
};
|
||||
|
||||
struct sway_layer_surface {
|
||||
struct wlr_layer_surface_v1 *layer_surface;
|
||||
struct wl_list link;
|
||||
|
||||
struct wl_listener destroy;
|
||||
struct wl_listener map;
|
||||
struct wl_listener unmap;
|
||||
struct wl_listener surface_commit;
|
||||
struct wl_listener output_destroy;
|
||||
struct wl_listener node_destroy;
|
||||
struct wl_listener new_popup;
|
||||
struct wl_listener new_subsurface;
|
||||
|
||||
bool mapped;
|
||||
|
||||
struct wlr_scene_tree *popups;
|
||||
struct sway_popup_desc desc;
|
||||
|
||||
struct sway_output *output;
|
||||
struct wlr_scene_layer_surface_v1 *scene;
|
||||
struct wlr_scene_tree *tree;
|
||||
struct wlr_layer_surface_v1 *layer_surface;
|
||||
struct wlr_box geo;
|
||||
enum zwlr_layer_shell_v1_layer layer;
|
||||
};
|
||||
|
||||
struct sway_layer_popup {
|
||||
struct wlr_xdg_popup *wlr_popup;
|
||||
struct wlr_scene_tree *scene;
|
||||
struct sway_layer_surface *toplevel;
|
||||
|
||||
enum layer_parent parent_type;
|
||||
union {
|
||||
struct sway_layer_surface *parent_layer;
|
||||
struct sway_layer_popup *parent_popup;
|
||||
};
|
||||
struct wl_listener map;
|
||||
struct wl_listener unmap;
|
||||
struct wl_listener destroy;
|
||||
struct wl_listener commit;
|
||||
struct wl_listener new_popup;
|
||||
};
|
||||
|
||||
struct sway_layer_subsurface {
|
||||
struct wlr_subsurface *wlr_subsurface;
|
||||
struct sway_layer_surface *layer_surface;
|
||||
|
||||
struct wl_listener map;
|
||||
struct wl_listener unmap;
|
||||
struct wl_listener destroy;
|
||||
struct wl_listener commit;
|
||||
};
|
||||
|
||||
struct sway_output;
|
||||
|
||||
struct wlr_layer_surface_v1 *toplevel_layer_surface_from_surface(
|
||||
struct wlr_surface *surface);
|
||||
|
||||
void arrange_layers(struct sway_output *output);
|
||||
|
||||
struct sway_layer_surface *layer_from_wlr_layer_surface_v1(
|
||||
struct wlr_layer_surface_v1 *layer_surface);
|
||||
|
||||
#endif
|
||||
|
|
|
@ -1,6 +0,0 @@
|
|||
#ifndef _SWAY_LOCK_H
|
||||
#define _SWAY_LOCK_H
|
||||
|
||||
void arrange_locks(void);
|
||||
|
||||
#endif
|
|
@ -3,9 +3,8 @@
|
|||
#include <time.h>
|
||||
#include <unistd.h>
|
||||
#include <wayland-server-core.h>
|
||||
#include <wlr/types/wlr_damage_ring.h>
|
||||
#include <wlr/types/wlr_box.h>
|
||||
#include <wlr/types/wlr_output.h>
|
||||
#include <wlr/types/wlr_scene.h>
|
||||
#include "config.h"
|
||||
#include "sway/tree/node.h"
|
||||
#include "sway/tree/view.h"
|
||||
|
@ -20,64 +19,43 @@ struct sway_output_state {
|
|||
|
||||
struct sway_output {
|
||||
struct sway_node node;
|
||||
|
||||
struct {
|
||||
struct wlr_scene_tree *shell_background;
|
||||
struct wlr_scene_tree *shell_bottom;
|
||||
struct wlr_scene_tree *tiling;
|
||||
struct wlr_scene_tree *fullscreen;
|
||||
struct wlr_scene_tree *shell_top;
|
||||
struct wlr_scene_tree *shell_overlay;
|
||||
struct wlr_scene_tree *session_lock;
|
||||
} layers;
|
||||
|
||||
// when a container is fullscreen, in case the fullscreen surface is
|
||||
// translucent (can see behind) we must make sure that the background is a
|
||||
// solid color in order to conform to the wayland protocol. This rect
|
||||
// ensures that when looking through a surface, all that will be seen
|
||||
// is black.
|
||||
struct wlr_scene_rect *fullscreen_background;
|
||||
|
||||
struct wlr_output *wlr_output;
|
||||
struct wlr_scene_output *scene_output;
|
||||
struct sway_server *server;
|
||||
struct wl_list link;
|
||||
|
||||
struct wl_list layers[4]; // sway_layer_surface::link
|
||||
struct wlr_box usable_area;
|
||||
|
||||
struct timespec last_frame;
|
||||
struct wlr_output_damage *damage;
|
||||
|
||||
int lx, ly; // layout coords
|
||||
int width, height; // transformed buffer size
|
||||
enum wl_output_subpixel detected_subpixel;
|
||||
enum scale_filter_mode scale_filter;
|
||||
// last applied mode when the output is DPMS'ed
|
||||
struct wlr_output_mode *current_mode;
|
||||
|
||||
bool enabled;
|
||||
bool enabling, enabled;
|
||||
list_t *workspaces;
|
||||
|
||||
struct sway_output_state current;
|
||||
|
||||
struct wl_listener layout_destroy;
|
||||
struct wl_listener destroy;
|
||||
struct wl_listener commit;
|
||||
struct wl_listener mode;
|
||||
struct wl_listener present;
|
||||
struct wl_listener frame;
|
||||
struct wl_listener request_state;
|
||||
struct wl_listener damage_destroy;
|
||||
struct wl_listener damage_frame;
|
||||
|
||||
struct {
|
||||
struct wl_signal disable;
|
||||
struct wl_signal destroy;
|
||||
} events;
|
||||
|
||||
struct wlr_color_transform *color_transform;
|
||||
|
||||
struct timespec last_presentation;
|
||||
uint32_t refresh_nsec;
|
||||
int max_render_time; // In milliseconds
|
||||
struct wl_event_source *repaint_timer;
|
||||
bool allow_tearing;
|
||||
};
|
||||
|
||||
struct sway_output_non_desktop {
|
||||
struct wlr_output *wlr_output;
|
||||
|
||||
struct wl_listener destroy;
|
||||
};
|
||||
|
||||
struct sway_output *output_create(struct wlr_output *wlr_output);
|
||||
|
@ -94,12 +72,22 @@ struct sway_output *output_get_in_direction(struct sway_output *reference,
|
|||
void output_add_workspace(struct sway_output *output,
|
||||
struct sway_workspace *workspace);
|
||||
|
||||
typedef void (*sway_surface_iterator_func_t)(struct sway_output *output,
|
||||
struct sway_view *view, struct wlr_surface *surface, struct wlr_box *box,
|
||||
typedef void (*sway_surface_iterator_func_t)(struct sway_output *output, struct sway_view *view,
|
||||
struct wlr_surface *surface, struct wlr_box *box, float rotation,
|
||||
void *user_data);
|
||||
|
||||
bool output_match_name_or_id(struct sway_output *output,
|
||||
const char *name_or_id);
|
||||
void output_damage_whole(struct sway_output *output);
|
||||
|
||||
void output_damage_surface(struct sway_output *output, double ox, double oy,
|
||||
struct wlr_surface *surface, bool whole);
|
||||
|
||||
void output_damage_from_view(struct sway_output *output,
|
||||
struct sway_view *view);
|
||||
|
||||
void output_damage_box(struct sway_output *output, struct wlr_box *box);
|
||||
|
||||
void output_damage_whole_container(struct sway_output *output,
|
||||
struct sway_container *con);
|
||||
|
||||
// this ONLY includes the enabled outputs
|
||||
struct sway_output *output_by_name_or_id(const char *name_or_id);
|
||||
|
@ -113,8 +101,47 @@ void output_enable(struct sway_output *output);
|
|||
|
||||
void output_disable(struct sway_output *output);
|
||||
|
||||
bool output_has_opaque_overlay_layer_surface(struct sway_output *output);
|
||||
|
||||
struct sway_workspace *output_get_active_workspace(struct sway_output *output);
|
||||
|
||||
void output_render(struct sway_output *output, struct timespec *when,
|
||||
pixman_region32_t *damage);
|
||||
|
||||
void output_surface_for_each_surface(struct sway_output *output,
|
||||
struct wlr_surface *surface, double ox, double oy,
|
||||
sway_surface_iterator_func_t iterator, void *user_data);
|
||||
|
||||
void output_view_for_each_surface(struct sway_output *output,
|
||||
struct sway_view *view, sway_surface_iterator_func_t iterator,
|
||||
void *user_data);
|
||||
|
||||
void output_view_for_each_popup_surface(struct sway_output *output,
|
||||
struct sway_view *view, sway_surface_iterator_func_t iterator,
|
||||
void *user_data);
|
||||
|
||||
void output_layer_for_each_surface(struct sway_output *output,
|
||||
struct wl_list *layer_surfaces, sway_surface_iterator_func_t iterator,
|
||||
void *user_data);
|
||||
|
||||
void output_layer_for_each_toplevel_surface(struct sway_output *output,
|
||||
struct wl_list *layer_surfaces, sway_surface_iterator_func_t iterator,
|
||||
void *user_data);
|
||||
|
||||
void output_layer_for_each_popup_surface(struct sway_output *output,
|
||||
struct wl_list *layer_surfaces, sway_surface_iterator_func_t iterator,
|
||||
void *user_data);
|
||||
|
||||
#if HAVE_XWAYLAND
|
||||
void output_unmanaged_for_each_surface(struct sway_output *output,
|
||||
struct wl_list *unmanaged, sway_surface_iterator_func_t iterator,
|
||||
void *user_data);
|
||||
#endif
|
||||
|
||||
void output_drag_icons_for_each_surface(struct sway_output *output,
|
||||
struct wl_list *drag_icons, sway_surface_iterator_func_t iterator,
|
||||
void *user_data);
|
||||
|
||||
void output_for_each_workspace(struct sway_output *output,
|
||||
void (*f)(struct sway_workspace *ws, void *data), void *data);
|
||||
|
||||
|
@ -132,8 +159,18 @@ void output_get_box(struct sway_output *output, struct wlr_box *box);
|
|||
enum sway_container_layout output_get_default_layout(
|
||||
struct sway_output *output);
|
||||
|
||||
void render_rect(struct sway_output *output,
|
||||
pixman_region32_t *output_damage, const struct wlr_box *_box,
|
||||
float color[static 4]);
|
||||
|
||||
void premultiply_alpha(float color[4], float opacity);
|
||||
|
||||
void scale_box(struct wlr_box *box, float scale);
|
||||
|
||||
enum wlr_direction opposite_direction(enum wlr_direction d);
|
||||
|
||||
void handle_output_layout_change(struct wl_listener *listener, void *data);
|
||||
|
||||
void handle_output_manager_apply(struct wl_listener *listener, void *data);
|
||||
|
||||
void handle_output_manager_test(struct wl_listener *listener, void *data);
|
||||
|
@ -141,8 +178,4 @@ void handle_output_manager_test(struct wl_listener *listener, void *data);
|
|||
void handle_output_power_manager_set_mode(struct wl_listener *listener,
|
||||
void *data);
|
||||
|
||||
struct sway_output_non_desktop *output_non_desktop_create(struct wlr_output *wlr_output);
|
||||
|
||||
void update_output_manager_config(struct sway_server *server);
|
||||
|
||||
#endif
|
||||
|
|
|
@ -1,33 +0,0 @@
|
|||
/**
|
||||
* Across a wayland compositor, there are multiple shells: It can be
|
||||
* a toplevel, or a layer_shell, or even something more meta like a drag
|
||||
* icon or highlight indicators when dragging windows around.
|
||||
*
|
||||
* This object lets us store values that represent these modes of operation
|
||||
* and keep track of what object is being represented.
|
||||
*/
|
||||
#ifndef _SWAY_SCENE_DESCRIPTOR_H
|
||||
#define _SWAY_SCENE_DESCRIPTOR_H
|
||||
#include <wlr/types/wlr_scene.h>
|
||||
|
||||
enum sway_scene_descriptor_type {
|
||||
SWAY_SCENE_DESC_BUFFER_TIMER,
|
||||
SWAY_SCENE_DESC_NON_INTERACTIVE,
|
||||
SWAY_SCENE_DESC_CONTAINER,
|
||||
SWAY_SCENE_DESC_VIEW,
|
||||
SWAY_SCENE_DESC_LAYER_SHELL,
|
||||
SWAY_SCENE_DESC_XWAYLAND_UNMANAGED,
|
||||
SWAY_SCENE_DESC_POPUP,
|
||||
SWAY_SCENE_DESC_DRAG_ICON,
|
||||
};
|
||||
|
||||
bool scene_descriptor_assign(struct wlr_scene_node *node,
|
||||
enum sway_scene_descriptor_type type, void *data);
|
||||
|
||||
void *scene_descriptor_try_get(struct wlr_scene_node *node,
|
||||
enum sway_scene_descriptor_type type);
|
||||
|
||||
void scene_descriptor_destroy(struct wlr_scene_node *node,
|
||||
enum sway_scene_descriptor_type type);
|
||||
|
||||
#endif
|
|
@ -2,63 +2,61 @@
|
|||
#define _SWAY_SERVER_H
|
||||
#include <stdbool.h>
|
||||
#include <wayland-server-core.h>
|
||||
#include <wlr/backend.h>
|
||||
#include <wlr/backend/session.h>
|
||||
#include <wlr/render/wlr_renderer.h>
|
||||
#include <wlr/types/wlr_compositor.h>
|
||||
#include <wlr/types/wlr_data_device.h>
|
||||
#include <wlr/types/wlr_input_method_v2.h>
|
||||
#include <wlr/types/wlr_foreign_toplevel_management_v1.h>
|
||||
#include <wlr/types/wlr_layer_shell_v1.h>
|
||||
#include <wlr/types/wlr_output_management_v1.h>
|
||||
#include <wlr/types/wlr_output_power_management_v1.h>
|
||||
#include <wlr/types/wlr_presentation_time.h>
|
||||
#include <wlr/types/wlr_relative_pointer_v1.h>
|
||||
#include <wlr/types/wlr_server_decoration.h>
|
||||
#include <wlr/types/wlr_text_input_v3.h>
|
||||
#include <wlr/types/wlr_xdg_shell.h>
|
||||
#include "config.h"
|
||||
#include "list.h"
|
||||
#include "sway/desktop/idle_inhibit_v1.h"
|
||||
#if WLR_HAS_XWAYLAND
|
||||
#if HAVE_XWAYLAND
|
||||
#include "sway/xwayland.h"
|
||||
#endif
|
||||
|
||||
struct sway_transaction;
|
||||
|
||||
struct sway_session_lock {
|
||||
struct wlr_session_lock_v1 *lock;
|
||||
struct wlr_surface *focused;
|
||||
bool abandoned;
|
||||
|
||||
struct wl_list outputs; // struct sway_session_lock_output
|
||||
|
||||
// invalid if the session is abandoned
|
||||
struct wl_listener new_surface;
|
||||
struct wl_listener unlock;
|
||||
struct wl_listener destroy;
|
||||
};
|
||||
|
||||
struct sway_server {
|
||||
struct wl_display *wl_display;
|
||||
struct wl_event_loop *wl_event_loop;
|
||||
const char *socket;
|
||||
|
||||
struct wlr_backend *backend;
|
||||
struct wlr_session *session;
|
||||
struct wlr_backend *noop_backend;
|
||||
// secondary headless backend used for creating virtual outputs on-the-fly
|
||||
struct wlr_backend *headless_backend;
|
||||
struct wlr_renderer *renderer;
|
||||
struct wlr_allocator *allocator;
|
||||
|
||||
struct wlr_compositor *compositor;
|
||||
|
||||
struct wlr_linux_dmabuf_v1 *linux_dmabuf_v1;
|
||||
struct wl_listener compositor_new_surface;
|
||||
|
||||
struct wlr_data_device_manager *data_device_manager;
|
||||
|
||||
struct sway_input_manager *input;
|
||||
|
||||
struct wl_listener new_output;
|
||||
struct wl_listener renderer_lost;
|
||||
struct wl_listener output_layout_change;
|
||||
|
||||
struct wlr_idle_notifier_v1 *idle_notifier_v1;
|
||||
struct sway_idle_inhibit_manager_v1 idle_inhibit_manager_v1;
|
||||
struct wlr_idle *idle;
|
||||
struct sway_idle_inhibit_manager_v1 *idle_inhibit_manager_v1;
|
||||
|
||||
struct wlr_layer_shell_v1 *layer_shell;
|
||||
struct wl_listener layer_shell_surface;
|
||||
|
||||
struct wlr_xdg_shell *xdg_shell;
|
||||
struct wl_listener xdg_shell_toplevel;
|
||||
struct wl_listener xdg_shell_surface;
|
||||
|
||||
struct wlr_tablet_manager_v2 *tablet_v2;
|
||||
|
||||
#if WLR_HAS_XWAYLAND
|
||||
#if HAVE_XWAYLAND
|
||||
struct sway_xwayland xwayland;
|
||||
struct wl_listener xwayland_surface;
|
||||
struct wl_listener xwayland_ready;
|
||||
|
@ -74,52 +72,20 @@ struct sway_server {
|
|||
struct wl_listener xdg_decoration;
|
||||
struct wl_list xdg_decorations; // sway_xdg_decoration::link
|
||||
|
||||
struct wlr_drm_lease_v1_manager *drm_lease_manager;
|
||||
struct wl_listener drm_lease_request;
|
||||
struct wlr_presentation *presentation;
|
||||
|
||||
struct wlr_pointer_constraints_v1 *pointer_constraints;
|
||||
struct wl_listener pointer_constraint;
|
||||
|
||||
struct wlr_xdg_output_manager_v1 *xdg_output_manager_v1;
|
||||
|
||||
struct wlr_output_manager_v1 *output_manager_v1;
|
||||
struct wl_listener output_manager_apply;
|
||||
struct wl_listener output_manager_test;
|
||||
|
||||
struct wlr_gamma_control_manager_v1 *gamma_control_manager_v1;
|
||||
struct wl_listener gamma_control_set_gamma;
|
||||
|
||||
struct {
|
||||
struct sway_session_lock *lock;
|
||||
struct wlr_session_lock_manager_v1 *manager;
|
||||
|
||||
struct wl_listener new_lock;
|
||||
struct wl_listener manager_destroy;
|
||||
} session_lock;
|
||||
|
||||
struct wlr_output_power_manager_v1 *output_power_manager_v1;
|
||||
struct wl_listener output_power_manager_set_mode;
|
||||
struct wlr_input_method_manager_v2 *input_method;
|
||||
struct wlr_text_input_manager_v3 *text_input;
|
||||
struct wlr_ext_foreign_toplevel_list_v1 *foreign_toplevel_list;
|
||||
struct wlr_foreign_toplevel_manager_v1 *foreign_toplevel_manager;
|
||||
struct wlr_content_type_manager_v1 *content_type_manager_v1;
|
||||
struct wlr_data_control_manager_v1 *data_control_manager_v1;
|
||||
struct wlr_screencopy_manager_v1 *screencopy_manager_v1;
|
||||
struct wlr_export_dmabuf_manager_v1 *export_dmabuf_manager_v1;
|
||||
struct wlr_security_context_manager_v1 *security_context_manager_v1;
|
||||
|
||||
struct wlr_xdg_activation_v1 *xdg_activation_v1;
|
||||
struct wl_listener xdg_activation_v1_request_activate;
|
||||
struct wl_listener xdg_activation_v1_new_token;
|
||||
|
||||
struct wl_listener request_set_cursor_shape;
|
||||
|
||||
struct wlr_tearing_control_manager_v1 *tearing_control_v1;
|
||||
struct wl_listener tearing_control_new_object;
|
||||
struct wl_list tearing_controllers; // sway_tearing_controller::link
|
||||
|
||||
struct wl_list pending_launcher_ctxs; // launcher_ctx::link
|
||||
|
||||
// The timeout for transactions, after which a transaction is applied
|
||||
// regardless of readiness.
|
||||
|
@ -138,8 +104,6 @@ struct sway_server {
|
|||
// Stores the nodes that have been marked as "dirty" and will be put into
|
||||
// the pending transaction.
|
||||
list_t *dirty_nodes;
|
||||
|
||||
struct wl_event_source *delayed_modeset;
|
||||
};
|
||||
|
||||
extern struct sway_server server;
|
||||
|
@ -148,43 +112,34 @@ struct sway_debug {
|
|||
bool noatomic; // Ignore atomic layout updates
|
||||
bool txn_timings; // Log verbose messages about transactions
|
||||
bool txn_wait; // Always wait for the timeout before applying
|
||||
bool legacy_wl_drm; // Enable the legacy wl_drm interface
|
||||
|
||||
enum {
|
||||
DAMAGE_DEFAULT, // Default behaviour
|
||||
DAMAGE_HIGHLIGHT, // Highlight regions of the screen being damaged
|
||||
DAMAGE_RERENDER, // Render the full output when any damage occurs
|
||||
} damage;
|
||||
};
|
||||
|
||||
extern struct sway_debug debug;
|
||||
|
||||
extern bool allow_unsupported_gpu;
|
||||
|
||||
/* Prepares an unprivileged server_init by performing all privileged operations in advance */
|
||||
bool server_privileged_prepare(struct sway_server *server);
|
||||
bool server_init(struct sway_server *server);
|
||||
void server_fini(struct sway_server *server);
|
||||
bool server_start(struct sway_server *server);
|
||||
void server_run(struct sway_server *server);
|
||||
|
||||
void restore_nofile_limit(void);
|
||||
|
||||
void handle_compositor_new_surface(struct wl_listener *listener, void *data);
|
||||
void handle_new_output(struct wl_listener *listener, void *data);
|
||||
|
||||
void handle_idle_inhibitor_v1(struct wl_listener *listener, void *data);
|
||||
void handle_layer_shell_surface(struct wl_listener *listener, void *data);
|
||||
void sway_session_lock_init(void);
|
||||
void sway_session_lock_add_output(struct sway_session_lock *lock,
|
||||
struct sway_output *output);
|
||||
bool sway_session_lock_has_surface(struct sway_session_lock *lock,
|
||||
struct wlr_surface *surface);
|
||||
void handle_xdg_shell_toplevel(struct wl_listener *listener, void *data);
|
||||
#if WLR_HAS_XWAYLAND
|
||||
void handle_xdg_shell_surface(struct wl_listener *listener, void *data);
|
||||
#if HAVE_XWAYLAND
|
||||
void handle_xwayland_surface(struct wl_listener *listener, void *data);
|
||||
#endif
|
||||
void handle_server_decoration(struct wl_listener *listener, void *data);
|
||||
void handle_xdg_decoration(struct wl_listener *listener, void *data);
|
||||
void handle_pointer_constraint(struct wl_listener *listener, void *data);
|
||||
void xdg_activation_v1_handle_request_activate(struct wl_listener *listener,
|
||||
void *data);
|
||||
void xdg_activation_v1_handle_new_token(struct wl_listener *listener,
|
||||
void *data);
|
||||
|
||||
void set_rr_scheduling(void);
|
||||
|
||||
void handle_new_tearing_hint(struct wl_listener *listener, void *data);
|
||||
|
||||
#endif
|
||||
|
|
18
include/sway/surface.h
Normal file
18
include/sway/surface.h
Normal file
|
@ -0,0 +1,18 @@
|
|||
#ifndef _SWAY_SURFACE_H
|
||||
#define _SWAY_SURFACE_H
|
||||
#include <wlr/types/wlr_surface.h>
|
||||
|
||||
struct sway_surface {
|
||||
struct wlr_surface *wlr_surface;
|
||||
|
||||
struct wl_listener destroy;
|
||||
|
||||
/**
|
||||
* This timer can be used for issuing delayed frame done callbacks (for
|
||||
* example, to improve presentation latency). Its handler is set to a
|
||||
* function that issues a frame done callback to this surface.
|
||||
*/
|
||||
struct wl_event_source *frame_done_timer;
|
||||
};
|
||||
|
||||
#endif
|
|
@ -1,28 +0,0 @@
|
|||
#ifndef _SWAY_BUFFER_H
|
||||
#define _SWAY_BUFFER_H
|
||||
#include <wlr/types/wlr_scene.h>
|
||||
|
||||
struct sway_text_node {
|
||||
int width;
|
||||
int max_width;
|
||||
int height;
|
||||
int baseline;
|
||||
bool pango_markup;
|
||||
float color[4];
|
||||
float background[4];
|
||||
|
||||
struct wlr_scene_node *node;
|
||||
};
|
||||
|
||||
struct sway_text_node *sway_text_node_create(struct wlr_scene_tree *parent,
|
||||
char *text, float color[4], bool pango_markup);
|
||||
|
||||
void sway_text_node_set_color(struct sway_text_node *node, float color[4]);
|
||||
|
||||
void sway_text_node_set_text(struct sway_text_node *node, char *text);
|
||||
|
||||
void sway_text_node_set_max_width(struct sway_text_node *node, int max_width);
|
||||
|
||||
void sway_text_node_set_background(struct sway_text_node *node, float background[4]);
|
||||
|
||||
#endif
|
|
@ -1,7 +1,6 @@
|
|||
#ifndef _SWAY_SWAYNAG_H
|
||||
#define _SWAY_SWAYNAG_H
|
||||
#include <wayland-server-core.h>
|
||||
#include "stringop.h"
|
||||
|
||||
struct swaynag_instance {
|
||||
struct wl_client *client;
|
||||
|
@ -22,7 +21,7 @@ bool swaynag_spawn(const char *swaynag_command,
|
|||
// Write a log message to swaynag->fd[1]. This will fail when swaynag->detailed
|
||||
// is false.
|
||||
void swaynag_log(const char *swaynag_command, struct swaynag_instance *swaynag,
|
||||
const char *fmt, ...) _SWAY_ATTRIB_PRINTF(3, 4);
|
||||
const char *fmt, ...);
|
||||
|
||||
// If swaynag->detailed, close swaynag->fd[1] so swaynag displays
|
||||
void swaynag_show(struct swaynag_instance *swaynag);
|
||||
|
|
|
@ -2,8 +2,8 @@
|
|||
#define _SWAY_CONTAINER_H
|
||||
#include <stdint.h>
|
||||
#include <sys/types.h>
|
||||
#include <wlr/types/wlr_compositor.h>
|
||||
#include <wlr/types/wlr_scene.h>
|
||||
#include <wlr/types/wlr_box.h>
|
||||
#include <wlr/types/wlr_surface.h>
|
||||
#include "list.h"
|
||||
#include "sway/tree/node.h"
|
||||
|
||||
|
@ -69,41 +69,11 @@ struct sway_container {
|
|||
struct sway_node node;
|
||||
struct sway_view *view;
|
||||
|
||||
struct wlr_scene_tree *scene_tree;
|
||||
|
||||
struct {
|
||||
struct wlr_scene_tree *tree;
|
||||
|
||||
struct wlr_scene_tree *border;
|
||||
struct wlr_scene_tree *background;
|
||||
|
||||
struct sway_text_node *title_text;
|
||||
struct sway_text_node *marks_text;
|
||||
} title_bar;
|
||||
|
||||
struct {
|
||||
struct wlr_scene_tree *tree;
|
||||
|
||||
struct wlr_scene_rect *top;
|
||||
struct wlr_scene_rect *bottom;
|
||||
struct wlr_scene_rect *left;
|
||||
struct wlr_scene_rect *right;
|
||||
} border;
|
||||
|
||||
struct wlr_scene_tree *content_tree;
|
||||
struct wlr_scene_buffer *output_handler;
|
||||
|
||||
struct wl_listener output_enter;
|
||||
struct wl_listener output_leave;
|
||||
|
||||
struct sway_container_state current;
|
||||
struct sway_container_state pending;
|
||||
|
||||
char *title; // The view's title (unformatted)
|
||||
char *formatted_title; // The title displayed in the title bar
|
||||
int title_width;
|
||||
|
||||
char *title_format;
|
||||
|
||||
enum sway_container_layout prev_split_layout;
|
||||
|
||||
|
@ -131,19 +101,33 @@ struct sway_container {
|
|||
double child_total_width;
|
||||
double child_total_height;
|
||||
|
||||
// In most cases this is the same as the content x and y, but if the view
|
||||
// refuses to resize to the content dimensions then it can be smaller.
|
||||
// These are in layout coordinates.
|
||||
double surface_x, surface_y;
|
||||
|
||||
// Outputs currently being intersected
|
||||
list_t *outputs; // struct sway_output
|
||||
|
||||
// Indicates that the container is a scratchpad container.
|
||||
// Both hidden and visible scratchpad containers have scratchpad=true.
|
||||
// Hidden scratchpad containers have a NULL parent.
|
||||
bool scratchpad;
|
||||
|
||||
// Stores last output size and position for adjusting coordinates of
|
||||
// scratchpad windows.
|
||||
// Unused for non-scratchpad windows.
|
||||
struct wlr_box transform;
|
||||
|
||||
float alpha;
|
||||
|
||||
struct wlr_texture *title_focused;
|
||||
struct wlr_texture *title_focused_inactive;
|
||||
struct wlr_texture *title_unfocused;
|
||||
struct wlr_texture *title_urgent;
|
||||
size_t title_height;
|
||||
size_t title_baseline;
|
||||
|
||||
list_t *marks; // char *
|
||||
struct wlr_texture *marks_focused;
|
||||
struct wlr_texture *marks_focused_inactive;
|
||||
struct wlr_texture *marks_unfocused;
|
||||
struct wlr_texture *marks_urgent;
|
||||
|
||||
struct {
|
||||
struct wl_signal destroy;
|
||||
|
@ -163,6 +147,19 @@ void container_begin_destroy(struct sway_container *con);
|
|||
struct sway_container *container_find_child(struct sway_container *container,
|
||||
bool (*test)(struct sway_container *view, void *data), void *data);
|
||||
|
||||
/**
|
||||
* Find a container at the given coordinates. Returns the surface and
|
||||
* surface-local coordinates of the given layout coordinates if the container
|
||||
* is a view and the view contains a surface at those coordinates.
|
||||
*/
|
||||
struct sway_container *container_at(struct sway_workspace *workspace,
|
||||
double lx, double ly, struct wlr_surface **surface,
|
||||
double *sx, double *sy);
|
||||
|
||||
struct sway_container *tiling_container_at(
|
||||
struct sway_node *parent, double lx, double ly,
|
||||
struct wlr_surface **surface, double *sx, double *sy);
|
||||
|
||||
void container_for_each_child(struct sway_container *container,
|
||||
void (*f)(struct sway_container *container, void *data), void *data);
|
||||
|
||||
|
@ -177,15 +174,20 @@ struct sway_container *container_obstructing_fullscreen_container(struct sway_co
|
|||
bool container_has_ancestor(struct sway_container *container,
|
||||
struct sway_container *ancestor);
|
||||
|
||||
void container_update_textures_recursive(struct sway_container *con);
|
||||
|
||||
void container_damage_whole(struct sway_container *container);
|
||||
|
||||
void container_reap_empty(struct sway_container *con);
|
||||
|
||||
struct sway_container *container_flatten(struct sway_container *container);
|
||||
|
||||
void container_update_title_bar(struct sway_container *container);
|
||||
void container_update_title_textures(struct sway_container *container);
|
||||
|
||||
void container_update_marks(struct sway_container *container);
|
||||
|
||||
size_t parse_title_format(struct sway_container *container, char *buffer);
|
||||
/**
|
||||
* Calculate the container's title_height property.
|
||||
*/
|
||||
void container_calculate_title_height(struct sway_container *container);
|
||||
|
||||
size_t container_build_representation(enum sway_container_layout layout,
|
||||
list_t *children, char *buffer);
|
||||
|
@ -200,9 +202,6 @@ size_t container_titlebar_height(void);
|
|||
void floating_calculate_constraints(int *min_width, int *max_width,
|
||||
int *min_height, int *max_height);
|
||||
|
||||
void floating_fix_coordinates(struct sway_container *con,
|
||||
struct wlr_box *old, struct wlr_box *new);
|
||||
|
||||
void container_floating_resize_and_center(struct sway_container *con);
|
||||
|
||||
void container_floating_set_default_size(struct sway_container *con);
|
||||
|
@ -221,6 +220,11 @@ void container_set_geometry_from_content(struct sway_container *con);
|
|||
*/
|
||||
bool container_is_floating(struct sway_container *container);
|
||||
|
||||
/**
|
||||
* Same as above, but for current container state.
|
||||
*/
|
||||
bool container_is_current_floating(struct sway_container *container);
|
||||
|
||||
/**
|
||||
* Get a container's box in layout coordinates.
|
||||
*/
|
||||
|
@ -283,12 +287,26 @@ bool container_is_floating_or_child(struct sway_container *container);
|
|||
*/
|
||||
bool container_is_fullscreen_or_child(struct sway_container *container);
|
||||
|
||||
/**
|
||||
* Return the output which will be used for scale purposes.
|
||||
* This is the most recently entered output.
|
||||
* If the container is not on any output, return NULL.
|
||||
*/
|
||||
struct sway_output *container_get_effective_output(struct sway_container *con);
|
||||
|
||||
void container_discover_outputs(struct sway_container *con);
|
||||
|
||||
enum sway_container_layout container_parent_layout(struct sway_container *con);
|
||||
|
||||
enum sway_container_layout container_current_parent_layout(
|
||||
struct sway_container *con);
|
||||
|
||||
list_t *container_get_siblings(struct sway_container *container);
|
||||
|
||||
int container_sibling_index(struct sway_container *child);
|
||||
|
||||
list_t *container_get_current_siblings(struct sway_container *container);
|
||||
|
||||
void container_handle_fullscreen_reparent(struct sway_container *con);
|
||||
|
||||
void container_add_child(struct sway_container *parent,
|
||||
|
@ -336,6 +354,8 @@ bool container_has_mark(struct sway_container *container, char *mark);
|
|||
|
||||
void container_add_mark(struct sway_container *container, char *mark);
|
||||
|
||||
void container_update_marks_textures(struct sway_container *container);
|
||||
|
||||
void container_raise_floating(struct sway_container *con);
|
||||
|
||||
bool container_is_scratchpad_hidden(struct sway_container *con);
|
||||
|
@ -350,7 +370,7 @@ bool container_is_sticky_or_child(struct sway_container *con);
|
|||
* This will destroy pairs of redundant H/V splits
|
||||
* e.g. H[V[H[app app]] app] -> H[app app app]
|
||||
* The middle "V[H[" are eliminated by a call to container_squash
|
||||
* on the V[ con. It's grandchildren are added to its parent.
|
||||
* on the V[ con. It's grandchildren are added to it's parent.
|
||||
*
|
||||
* This function is roughly equivalent to i3's tree_flatten here:
|
||||
* https://github.com/i3/i3/blob/1f0c628cde40cf87371481041b7197344e0417c6/src/tree.c#L651
|
||||
|
@ -359,10 +379,4 @@ bool container_is_sticky_or_child(struct sway_container *con);
|
|||
*/
|
||||
int container_squash(struct sway_container *con);
|
||||
|
||||
void container_arrange_title_bar(struct sway_container *con);
|
||||
|
||||
void container_update(struct sway_container *con);
|
||||
|
||||
void container_update_itself_and_parents(struct sway_container *con);
|
||||
|
||||
#endif
|
||||
|
|
|
@ -1,8 +1,6 @@
|
|||
#ifndef _SWAY_NODE_H
|
||||
#define _SWAY_NODE_H
|
||||
#include <wayland-server-core.h>
|
||||
#include <stdbool.h>
|
||||
#include <wlr/types/wlr_scene.h>
|
||||
#include "list.h"
|
||||
|
||||
#define MIN_SANE_W 100
|
||||
|
@ -76,15 +74,4 @@ list_t *node_get_children(struct sway_node *node);
|
|||
|
||||
bool node_has_ancestor(struct sway_node *node, struct sway_node *ancestor);
|
||||
|
||||
// when destroying a sway tree, it's not known which order the tree will be
|
||||
// destroyed. To prevent freeing of scene_nodes recursing up the tree,
|
||||
// let's use this helper function to disown them to the staging node.
|
||||
void scene_node_disown_children(struct wlr_scene_tree *tree);
|
||||
|
||||
// a helper function used to allocate tree nodes. If an allocation failure
|
||||
// occurs a flag is flipped that can be checked later to destroy a parent
|
||||
// of this scene node preventing memory leaks.
|
||||
struct wlr_scene_tree *alloc_scene_tree(struct wlr_scene_tree *parent,
|
||||
bool *failed);
|
||||
|
||||
#endif
|
||||
|
|
|
@ -2,12 +2,11 @@
|
|||
#define _SWAY_ROOT_H
|
||||
#include <wayland-server-core.h>
|
||||
#include <wayland-util.h>
|
||||
#include <wlr/config.h>
|
||||
#include <wlr/types/wlr_output_layout.h>
|
||||
#include <wlr/types/wlr_scene.h>
|
||||
#include <wlr/render/wlr_texture.h>
|
||||
#include "sway/tree/container.h"
|
||||
#include "sway/tree/node.h"
|
||||
#include "config.h"
|
||||
#include "list.h"
|
||||
|
||||
extern struct sway_root *root;
|
||||
|
@ -16,43 +15,11 @@ struct sway_root {
|
|||
struct sway_node node;
|
||||
struct wlr_output_layout *output_layout;
|
||||
|
||||
// scene node layout:
|
||||
// - root
|
||||
// - staging
|
||||
// - layer shell stuff
|
||||
// - tiling
|
||||
// - floating
|
||||
// - fullscreen stuff
|
||||
// - seat stuff
|
||||
// - ext_session_lock
|
||||
struct wlr_scene *root_scene;
|
||||
|
||||
// since wlr_scene nodes can't be orphaned and must always
|
||||
// have a parent, use this staging scene_tree so that a
|
||||
// node always have a valid parent. Nothing in this
|
||||
// staging node will be visible.
|
||||
struct wlr_scene_tree *staging;
|
||||
|
||||
// tree containing all layers the compositor will render. Cursor handling
|
||||
// will end up iterating this tree.
|
||||
struct wlr_scene_tree *layer_tree;
|
||||
|
||||
struct {
|
||||
struct wlr_scene_tree *shell_background;
|
||||
struct wlr_scene_tree *shell_bottom;
|
||||
struct wlr_scene_tree *tiling;
|
||||
struct wlr_scene_tree *floating;
|
||||
struct wlr_scene_tree *shell_top;
|
||||
struct wlr_scene_tree *fullscreen;
|
||||
struct wlr_scene_tree *fullscreen_global;
|
||||
#if WLR_HAS_XWAYLAND
|
||||
struct wlr_scene_tree *unmanaged;
|
||||
struct wl_listener output_layout_change;
|
||||
#if HAVE_XWAYLAND
|
||||
struct wl_list xwayland_unmanaged; // sway_xwayland_unmanaged::link
|
||||
#endif
|
||||
struct wlr_scene_tree *shell_overlay;
|
||||
struct wlr_scene_tree *popup;
|
||||
struct wlr_scene_tree *seat;
|
||||
struct wlr_scene_tree *session_lock;
|
||||
} layers;
|
||||
struct wl_list drag_icons; // sway_drag_icon::link
|
||||
|
||||
// Includes disabled outputs
|
||||
struct wl_list all_outputs; // sway_output::link
|
||||
|
@ -61,11 +28,10 @@ struct sway_root {
|
|||
double width, height;
|
||||
|
||||
list_t *outputs; // struct sway_output
|
||||
list_t *non_desktop_outputs; // struct sway_output_non_desktop
|
||||
list_t *scratchpad; // struct sway_container
|
||||
|
||||
// For when there's no connected outputs
|
||||
struct sway_output *fallback_output;
|
||||
struct sway_output *noop_output;
|
||||
|
||||
struct sway_container *fullscreen_global;
|
||||
|
||||
|
@ -74,7 +40,7 @@ struct sway_root {
|
|||
} events;
|
||||
};
|
||||
|
||||
struct sway_root *root_create(struct wl_display *display);
|
||||
struct sway_root *root_create(void);
|
||||
|
||||
void root_destroy(struct sway_root *root);
|
||||
|
||||
|
@ -102,6 +68,12 @@ void root_scratchpad_show(struct sway_container *con);
|
|||
*/
|
||||
void root_scratchpad_hide(struct sway_container *con);
|
||||
|
||||
struct sway_workspace *root_workspace_for_pid(pid_t pid);
|
||||
|
||||
void root_record_workspace_pid(pid_t pid);
|
||||
|
||||
void root_remove_workspace_pid(pid_t pid);
|
||||
|
||||
void root_for_each_workspace(void (*f)(struct sway_workspace *ws, void *data),
|
||||
void *data);
|
||||
|
||||
|
@ -119,4 +91,6 @@ struct sway_container *root_find_container(
|
|||
|
||||
void root_get_box(struct sway_root *root, struct wlr_box *box);
|
||||
|
||||
void root_rename_pid_workspaces(const char *old_name, const char *new_name);
|
||||
|
||||
#endif
|
||||
|
|
|
@ -1,12 +1,9 @@
|
|||
#ifndef _SWAY_VIEW_H
|
||||
#define _SWAY_VIEW_H
|
||||
#include <wayland-server-core.h>
|
||||
#include <wlr/config.h>
|
||||
#include <wlr/types/wlr_compositor.h>
|
||||
#include <wlr/types/wlr_scene.h>
|
||||
#include <wlr/types/wlr_tearing_control_v1.h>
|
||||
#include "sway/config.h"
|
||||
#if WLR_HAS_XWAYLAND
|
||||
#include <wlr/types/wlr_surface.h>
|
||||
#include "config.h"
|
||||
#if HAVE_XWAYLAND
|
||||
#include <wlr/xwayland.h>
|
||||
#endif
|
||||
#include "sway/input/input-manager.h"
|
||||
|
@ -17,7 +14,7 @@ struct sway_xdg_decoration;
|
|||
|
||||
enum sway_view_type {
|
||||
SWAY_VIEW_XDG_SHELL,
|
||||
#if WLR_HAS_XWAYLAND
|
||||
#if HAVE_XWAYLAND
|
||||
SWAY_VIEW_XWAYLAND,
|
||||
#endif
|
||||
};
|
||||
|
@ -29,18 +26,12 @@ enum sway_view_prop {
|
|||
VIEW_PROP_INSTANCE,
|
||||
VIEW_PROP_WINDOW_TYPE,
|
||||
VIEW_PROP_WINDOW_ROLE,
|
||||
#if WLR_HAS_XWAYLAND
|
||||
#if HAVE_XWAYLAND
|
||||
VIEW_PROP_X11_WINDOW_ID,
|
||||
VIEW_PROP_X11_PARENT_ID,
|
||||
#endif
|
||||
};
|
||||
|
||||
enum sway_view_tearing_mode {
|
||||
TEARING_OVERRIDE_FALSE,
|
||||
TEARING_OVERRIDE_TRUE,
|
||||
TEARING_WINDOW_HINT,
|
||||
};
|
||||
|
||||
struct sway_view_impl {
|
||||
void (*get_constraints)(struct sway_view *view, double *min_width,
|
||||
double *max_width, double *min_height, double *max_height);
|
||||
|
@ -54,6 +45,10 @@ struct sway_view_impl {
|
|||
void (*set_fullscreen)(struct sway_view *view, bool fullscreen);
|
||||
void (*set_resizing)(struct sway_view *view, bool resizing);
|
||||
bool (*wants_floating)(struct sway_view *view);
|
||||
void (*for_each_surface)(struct sway_view *view,
|
||||
wlr_surface_iterator_func_t iterator, void *user_data);
|
||||
void (*for_each_popup_surface)(struct sway_view *view,
|
||||
wlr_surface_iterator_func_t iterator, void *user_data);
|
||||
bool (*is_transient_for)(struct sway_view *child,
|
||||
struct sway_view *ancestor);
|
||||
void (*close)(struct sway_view *view);
|
||||
|
@ -61,36 +56,46 @@ struct sway_view_impl {
|
|||
void (*destroy)(struct sway_view *view);
|
||||
};
|
||||
|
||||
struct sway_saved_buffer {
|
||||
struct wlr_client_buffer *buffer;
|
||||
int x, y;
|
||||
int width, height;
|
||||
enum wl_output_transform transform;
|
||||
struct wlr_fbox source_box;
|
||||
struct wl_list link; // sway_view::saved_buffers
|
||||
};
|
||||
|
||||
struct sway_view {
|
||||
enum sway_view_type type;
|
||||
const struct sway_view_impl *impl;
|
||||
|
||||
struct wlr_scene_tree *scene_tree;
|
||||
struct wlr_scene_tree *content_tree;
|
||||
struct wlr_scene_tree *saved_surface_tree;
|
||||
|
||||
struct sway_container *container; // NULL if unmapped and transactions finished
|
||||
struct wlr_surface *surface; // NULL for unmapped views
|
||||
struct sway_xdg_decoration *xdg_decoration;
|
||||
|
||||
pid_t pid;
|
||||
struct launcher_ctx *ctx;
|
||||
|
||||
// The size the view would want to be if it weren't tiled.
|
||||
// Used when changing a view from tiled to floating.
|
||||
int natural_width, natural_height;
|
||||
|
||||
char *title_format;
|
||||
|
||||
bool using_csd;
|
||||
|
||||
struct timespec urgent;
|
||||
bool allow_request_urgent;
|
||||
struct wl_event_source *urgent_timer;
|
||||
|
||||
struct wl_list saved_buffers; // sway_saved_buffer::link
|
||||
|
||||
// The geometry for whatever the client is committing, regardless of
|
||||
// transaction state. Updated on every commit.
|
||||
struct wlr_box geometry;
|
||||
|
||||
struct wlr_ext_foreign_toplevel_handle_v1 *ext_foreign_toplevel;
|
||||
// The "old" geometry during a transaction. Used to damage the old location
|
||||
// when a transaction is applied.
|
||||
struct wlr_box saved_geometry;
|
||||
|
||||
struct wlr_foreign_toplevel_handle_v1 *foreign_toplevel;
|
||||
struct wl_listener foreign_activate_request;
|
||||
|
@ -103,22 +108,22 @@ struct sway_view {
|
|||
list_t *executed_criteria; // struct criteria *
|
||||
|
||||
union {
|
||||
struct wlr_xdg_toplevel *wlr_xdg_toplevel;
|
||||
#if WLR_HAS_XWAYLAND
|
||||
struct wlr_xdg_surface *wlr_xdg_surface;
|
||||
#if HAVE_XWAYLAND
|
||||
struct wlr_xwayland_surface *wlr_xwayland_surface;
|
||||
#endif
|
||||
struct wlr_wl_shell_surface *wlr_wl_shell_surface;
|
||||
};
|
||||
|
||||
struct {
|
||||
struct wl_signal unmap;
|
||||
} events;
|
||||
|
||||
struct wl_listener surface_new_subsurface;
|
||||
|
||||
int max_render_time; // In milliseconds
|
||||
|
||||
enum seat_config_shortcuts_inhibit shortcuts_inhibit;
|
||||
|
||||
enum sway_view_tearing_mode tearing_mode;
|
||||
enum wp_tearing_control_v1_presentation_hint tearing_hint;
|
||||
};
|
||||
|
||||
struct sway_xdg_shell_view {
|
||||
|
@ -136,12 +141,10 @@ struct sway_xdg_shell_view {
|
|||
struct wl_listener unmap;
|
||||
struct wl_listener destroy;
|
||||
};
|
||||
#if WLR_HAS_XWAYLAND
|
||||
#if HAVE_XWAYLAND
|
||||
struct sway_xwayland_view {
|
||||
struct sway_view view;
|
||||
|
||||
struct wlr_scene_tree *surface_tree;
|
||||
|
||||
struct wl_listener commit;
|
||||
struct wl_listener request_move;
|
||||
struct wl_listener request_resize;
|
||||
|
@ -153,55 +156,71 @@ struct sway_xwayland_view {
|
|||
struct wl_listener set_title;
|
||||
struct wl_listener set_class;
|
||||
struct wl_listener set_role;
|
||||
struct wl_listener set_startup_id;
|
||||
struct wl_listener set_window_type;
|
||||
struct wl_listener set_hints;
|
||||
struct wl_listener set_decorations;
|
||||
struct wl_listener associate;
|
||||
struct wl_listener dissociate;
|
||||
struct wl_listener map;
|
||||
struct wl_listener unmap;
|
||||
struct wl_listener destroy;
|
||||
struct wl_listener override_redirect;
|
||||
|
||||
struct wl_listener surface_tree_destroy;
|
||||
};
|
||||
|
||||
struct sway_xwayland_unmanaged {
|
||||
struct wlr_xwayland_surface *wlr_xwayland_surface;
|
||||
struct wl_list link;
|
||||
|
||||
struct wlr_scene_surface *surface_scene;
|
||||
int lx, ly;
|
||||
|
||||
struct wl_listener request_activate;
|
||||
struct wl_listener request_configure;
|
||||
struct wl_listener request_fullscreen;
|
||||
struct wl_listener commit;
|
||||
struct wl_listener set_geometry;
|
||||
struct wl_listener associate;
|
||||
struct wl_listener dissociate;
|
||||
struct wl_listener map;
|
||||
struct wl_listener unmap;
|
||||
struct wl_listener destroy;
|
||||
struct wl_listener override_redirect;
|
||||
};
|
||||
#endif
|
||||
struct sway_view_child;
|
||||
|
||||
struct sway_view_child_impl {
|
||||
void (*get_root_coords)(struct sway_view_child *child, int *sx, int *sy);
|
||||
void (*destroy)(struct sway_view_child *child);
|
||||
};
|
||||
|
||||
/**
|
||||
* A view child is a surface in the view tree, such as a subsurface or a popup.
|
||||
*/
|
||||
struct sway_view_child {
|
||||
const struct sway_view_child_impl *impl;
|
||||
struct wl_list link;
|
||||
|
||||
struct sway_popup_desc {
|
||||
struct wlr_scene_node *relative;
|
||||
struct sway_view *view;
|
||||
struct sway_view_child *parent;
|
||||
struct wl_list children; // sway_view_child::link
|
||||
struct wlr_surface *surface;
|
||||
bool mapped;
|
||||
|
||||
struct wl_listener surface_commit;
|
||||
struct wl_listener surface_new_subsurface;
|
||||
struct wl_listener surface_map;
|
||||
struct wl_listener surface_unmap;
|
||||
struct wl_listener surface_destroy;
|
||||
struct wl_listener view_unmap;
|
||||
};
|
||||
|
||||
struct sway_subsurface {
|
||||
struct sway_view_child child;
|
||||
|
||||
struct wl_listener destroy;
|
||||
};
|
||||
|
||||
struct sway_xdg_popup {
|
||||
struct sway_view *view;
|
||||
struct sway_view_child child;
|
||||
|
||||
struct wlr_scene_tree *scene_tree;
|
||||
struct wlr_scene_tree *xdg_surface_tree;
|
||||
struct wlr_xdg_popup *wlr_xdg_popup;
|
||||
struct wlr_xdg_surface *wlr_xdg_surface;
|
||||
|
||||
struct sway_popup_desc desc;
|
||||
|
||||
struct wl_listener surface_commit;
|
||||
struct wl_listener new_popup;
|
||||
struct wl_listener reposition;
|
||||
struct wl_listener destroy;
|
||||
};
|
||||
|
||||
|
@ -250,12 +269,7 @@ void view_set_activated(struct sway_view *view, bool activated);
|
|||
/**
|
||||
* Called when the view requests to be focused.
|
||||
*/
|
||||
void view_request_activate(struct sway_view *view, struct sway_seat *seat);
|
||||
|
||||
/*
|
||||
* Called when the view requests urgent state
|
||||
*/
|
||||
void view_request_urgent(struct sway_view *view);
|
||||
void view_request_activate(struct sway_view *view);
|
||||
|
||||
/**
|
||||
* If possible, instructs the client to change their decoration mode.
|
||||
|
@ -274,42 +288,52 @@ void view_close(struct sway_view *view);
|
|||
|
||||
void view_close_popups(struct sway_view *view);
|
||||
|
||||
void view_damage_from(struct sway_view *view);
|
||||
|
||||
/**
|
||||
* Iterate all surfaces of a view (toplevels + popups).
|
||||
*/
|
||||
void view_for_each_surface(struct sway_view *view,
|
||||
wlr_surface_iterator_func_t iterator, void *user_data);
|
||||
|
||||
/**
|
||||
* Iterate all popup surfaces of a view.
|
||||
*/
|
||||
void view_for_each_popup_surface(struct sway_view *view,
|
||||
wlr_surface_iterator_func_t iterator, void *user_data);
|
||||
|
||||
// view implementation
|
||||
|
||||
bool view_init(struct sway_view *view, enum sway_view_type type,
|
||||
void view_init(struct sway_view *view, enum sway_view_type type,
|
||||
const struct sway_view_impl *impl);
|
||||
|
||||
void view_destroy(struct sway_view *view);
|
||||
|
||||
void view_begin_destroy(struct sway_view *view);
|
||||
|
||||
/**
|
||||
* Map a view, ie. make it visible in the tree.
|
||||
*
|
||||
* `fullscreen` should be set to true (and optionally `fullscreen_output`
|
||||
* should be populated) if the view should be made fullscreen immediately.
|
||||
*
|
||||
* `decoration` should be set to true if the client prefers CSD. The client's
|
||||
* preference may be ignored.
|
||||
*/
|
||||
void view_map(struct sway_view *view, struct wlr_surface *wlr_surface,
|
||||
bool fullscreen, struct wlr_output *fullscreen_output, bool decoration);
|
||||
|
||||
void view_unmap(struct sway_view *view);
|
||||
|
||||
void view_update_size(struct sway_view *view);
|
||||
void view_center_and_clip_surface(struct sway_view *view);
|
||||
void view_center_surface(struct sway_view *view);
|
||||
|
||||
void view_child_init(struct sway_view_child *child,
|
||||
const struct sway_view_child_impl *impl, struct sway_view *view,
|
||||
struct wlr_surface *surface);
|
||||
|
||||
void view_child_destroy(struct sway_view_child *child);
|
||||
|
||||
|
||||
struct sway_view *view_from_wlr_xdg_surface(
|
||||
struct wlr_xdg_surface *xdg_surface);
|
||||
#if WLR_HAS_XWAYLAND
|
||||
#if HAVE_XWAYLAND
|
||||
struct sway_view *view_from_wlr_xwayland_surface(
|
||||
struct wlr_xwayland_surface *xsurface);
|
||||
#endif
|
||||
struct sway_view *view_from_wlr_surface(struct wlr_surface *surface);
|
||||
|
||||
void view_update_app_id(struct sway_view *view);
|
||||
|
||||
/**
|
||||
* Re-read the view's title property and update any relevant title bars.
|
||||
* The force argument makes it recreate the title bars even if the title hasn't
|
||||
|
@ -339,10 +363,4 @@ void view_save_buffer(struct sway_view *view);
|
|||
|
||||
bool view_is_transient_for(struct sway_view *child, struct sway_view *ancestor);
|
||||
|
||||
void view_assign_ctx(struct sway_view *view, struct launcher_ctx *ctx);
|
||||
|
||||
void view_send_frame_done(struct sway_view *view);
|
||||
|
||||
bool view_can_tear(struct sway_view *view);
|
||||
|
||||
#endif
|
||||
|
|
|
@ -2,8 +2,6 @@
|
|||
#define _SWAY_WORKSPACE_H
|
||||
|
||||
#include <stdbool.h>
|
||||
#include <wlr/types/wlr_scene.h>
|
||||
#include "sway/config.h"
|
||||
#include "sway/tree/container.h"
|
||||
#include "sway/tree/node.h"
|
||||
|
||||
|
@ -24,12 +22,6 @@ struct sway_workspace_state {
|
|||
|
||||
struct sway_workspace {
|
||||
struct sway_node node;
|
||||
|
||||
struct {
|
||||
struct wlr_scene_tree *tiling;
|
||||
struct wlr_scene_tree *fullscreen;
|
||||
} layers;
|
||||
|
||||
struct sway_container *fullscreen;
|
||||
|
||||
char *name;
|
||||
|
@ -68,20 +60,20 @@ void workspace_consider_destroy(struct sway_workspace *ws);
|
|||
|
||||
char *workspace_next_name(const char *output_name);
|
||||
|
||||
struct sway_workspace *workspace_auto_back_and_forth(
|
||||
struct sway_workspace *workspace);
|
||||
|
||||
bool workspace_switch(struct sway_workspace *workspace);
|
||||
bool workspace_switch(struct sway_workspace *workspace,
|
||||
bool no_auto_back_and_forth);
|
||||
|
||||
struct sway_workspace *workspace_by_number(const char* name);
|
||||
|
||||
struct sway_workspace *workspace_by_name(const char*);
|
||||
|
||||
struct sway_workspace *workspace_output_next(struct sway_workspace *current);
|
||||
struct sway_workspace *workspace_output_next(
|
||||
struct sway_workspace *current, bool create);
|
||||
|
||||
struct sway_workspace *workspace_next(struct sway_workspace *current);
|
||||
|
||||
struct sway_workspace *workspace_output_prev(struct sway_workspace *current);
|
||||
struct sway_workspace *workspace_output_prev(
|
||||
struct sway_workspace *current, bool create);
|
||||
|
||||
struct sway_workspace *workspace_prev(struct sway_workspace *current);
|
||||
|
||||
|
|
|
@ -16,6 +16,4 @@ struct sway_xdg_decoration {
|
|||
struct sway_xdg_decoration *xdg_decoration_from_surface(
|
||||
struct wlr_surface *surface);
|
||||
|
||||
void set_xdg_decoration_mode(struct sway_xdg_decoration *deco);
|
||||
|
||||
#endif
|
||||
|
|
|
@ -4,7 +4,6 @@
|
|||
#include "config.h"
|
||||
#include "input.h"
|
||||
#include "pool-buffer.h"
|
||||
#include "cursor-shape-v1-client-protocol.h"
|
||||
#include "wlr-layer-shell-unstable-v1-client-protocol.h"
|
||||
#include "xdg-output-unstable-v1-client-protocol.h"
|
||||
|
||||
|
@ -31,7 +30,6 @@ struct swaybar {
|
|||
struct wl_compositor *compositor;
|
||||
struct zwlr_layer_shell_v1 *layer_shell;
|
||||
struct zxdg_output_manager_v1 *xdg_output_manager;
|
||||
struct wp_cursor_shape_manager_v1 *cursor_shape_manager;
|
||||
struct wl_shm *shm;
|
||||
|
||||
struct swaybar_config *config;
|
||||
|
@ -60,6 +58,7 @@ struct swaybar_output {
|
|||
struct zxdg_output_v1 *xdg_output;
|
||||
struct wl_surface *surface;
|
||||
struct zwlr_layer_surface_v1 *layer_surface;
|
||||
struct wl_region *input_region;
|
||||
uint32_t wl_name;
|
||||
|
||||
struct wl_list workspaces; // swaybar_workspace::link
|
||||
|
|
|
@ -6,7 +6,6 @@
|
|||
#include "../include/config.h"
|
||||
#include "list.h"
|
||||
#include "util.h"
|
||||
#include <pango/pangocairo.h>
|
||||
|
||||
struct box_colors {
|
||||
uint32_t border;
|
||||
|
@ -29,7 +28,7 @@ struct swaybar_config {
|
|||
char *status_command;
|
||||
bool pango_markup;
|
||||
uint32_t position; // zwlr_layer_surface_v1_anchor
|
||||
PangoFontDescription *font_description;
|
||||
char *font;
|
||||
char *sep_symbol;
|
||||
char *mode;
|
||||
char *hidden_state;
|
||||
|
|
|
@ -19,7 +19,6 @@ struct i3bar_block {
|
|||
// Airblader features
|
||||
uint32_t background;
|
||||
uint32_t border;
|
||||
bool border_set;
|
||||
int border_top;
|
||||
int border_bottom;
|
||||
int border_left;
|
||||
|
@ -30,6 +29,6 @@ void i3bar_block_unref(struct i3bar_block *block);
|
|||
bool i3bar_handle_readable(struct status_line *status);
|
||||
enum hotspot_event_handling i3bar_block_send_click(struct status_line *status,
|
||||
struct i3bar_block *block, double x, double y, double rx, double ry,
|
||||
double w, double h, int scale, uint32_t button, bool released);
|
||||
double w, double h, int scale, uint32_t button);
|
||||
|
||||
#endif
|
||||
|
|
|
@ -1,7 +0,0 @@
|
|||
#ifndef _SWAYBAR_IMAGE_H
|
||||
#define _SWAYBAR_IMAGE_H
|
||||
#include <cairo.h>
|
||||
|
||||
cairo_surface_t *load_image(const char *path);
|
||||
|
||||
#endif
|
|
@ -49,7 +49,7 @@ struct swaybar_hotspot {
|
|||
int x, y, width, height;
|
||||
enum hotspot_event_handling (*callback)(struct swaybar_output *output,
|
||||
struct swaybar_hotspot *hotspot, double x, double y, uint32_t button,
|
||||
bool released, void *data);
|
||||
void *data);
|
||||
void (*destroy)(void *data);
|
||||
void *data;
|
||||
};
|
||||
|
|
|
@ -4,7 +4,6 @@
|
|||
#include <cairo.h>
|
||||
#include <stdbool.h>
|
||||
#include <stdint.h>
|
||||
#include <wayland-util.h>
|
||||
#include "swaybar/tray/tray.h"
|
||||
#include "list.h"
|
||||
|
||||
|
|
|
@ -4,9 +4,8 @@
|
|||
#include <strings.h>
|
||||
#include "list.h"
|
||||
#include "pool-buffer.h"
|
||||
#include "cursor-shape-v1-client-protocol.h"
|
||||
|
||||
#include "swaynag/types.h"
|
||||
#include "xdg-output-unstable-v1-client-protocol.h"
|
||||
|
||||
#define SWAYNAG_MAX_HEIGHT 500
|
||||
|
||||
|
@ -60,7 +59,6 @@ struct swaynag_button {
|
|||
struct swaynag_details {
|
||||
bool visible;
|
||||
char *message;
|
||||
char *details_text;
|
||||
|
||||
int x;
|
||||
int y;
|
||||
|
@ -77,17 +75,18 @@ struct swaynag_details {
|
|||
|
||||
struct swaynag {
|
||||
bool run_display;
|
||||
int querying_outputs;
|
||||
|
||||
struct wl_display *display;
|
||||
struct wl_compositor *compositor;
|
||||
struct wl_seat *seat;
|
||||
struct wl_shm *shm;
|
||||
struct zxdg_output_manager_v1 *xdg_output_manager;
|
||||
struct wl_list outputs; // swaynag_output::link
|
||||
struct wl_list seats; // swaynag_seat::link
|
||||
struct swaynag_output *output;
|
||||
struct zwlr_layer_shell_v1 *layer_shell;
|
||||
struct zwlr_layer_surface_v1 *layer_surface;
|
||||
struct wp_cursor_shape_manager_v1 *cursor_shape_manager;
|
||||
struct wl_surface *surface;
|
||||
|
||||
uint32_t width;
|
||||
|
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Reference in a new issue