mirror of
https://github.com/swaywm/sway.git
synced 2026-04-17 06:46:32 -04:00
Compare commits
52 commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
a1b9aa11d1 | ||
|
|
0940a46c11 | ||
|
|
34f5c1e7c4 | ||
|
|
f22aef018b | ||
|
|
eaec82abd2 | ||
|
|
c6b43359e7 | ||
|
|
f120f70f5a | ||
|
|
d2456c3b37 | ||
|
|
19586ab768 | ||
|
|
9ff59b7c6b | ||
|
|
8dbd4b98f7 | ||
|
|
c07d91ca96 | ||
|
|
b02198a0d1 | ||
|
|
1a46da7fcf | ||
|
|
47abc45e86 | ||
|
|
8d708b8e1d | ||
|
|
f0e8c68ca7 | ||
|
|
ee236afb43 | ||
|
|
1d4b995c0f | ||
|
|
ad34837dda | ||
|
|
d126410de1 | ||
|
|
59b3c4d06e | ||
|
|
e50e1fe058 | ||
|
|
06e03ed878 | ||
|
|
e4e579ea36 | ||
|
|
40023d45a1 | ||
|
|
a5a189cc73 | ||
|
|
a4d7ee1923 | ||
|
|
4e27785980 | ||
|
|
062da8eae7 | ||
|
|
95e16bb744 | ||
|
|
243d5a3a43 | ||
|
|
4339ba6424 | ||
|
|
32f790bd15 | ||
|
|
8229814e7a | ||
|
|
a2f661dceb | ||
|
|
6ade4bd7dd | ||
|
|
d2d2fc545a | ||
|
|
48511c3b35 | ||
|
|
d4e49a49eb | ||
|
|
cc5139d52a | ||
|
|
2112f0aa2f | ||
|
|
0c091bed76 | ||
|
|
9346ed1805 | ||
|
|
41e10db0de | ||
|
|
610794d4e3 | ||
|
|
5d770d028a | ||
|
|
66062f53de | ||
|
|
df3ea6a55f | ||
|
|
4272bf1274 | ||
|
|
130626a5db | ||
|
|
743d345383 |
343 changed files with 14241 additions and 31716 deletions
|
|
@ -1,37 +1,30 @@
|
|||
# vim: ft=yaml ts=2 sw=2 et :
|
||||
image: archlinux
|
||||
packages:
|
||||
- cairo
|
||||
- gdk-pixbuf2
|
||||
- json-c
|
||||
- lcms2
|
||||
- libdisplay-info
|
||||
- libegl
|
||||
- libinput
|
||||
- libxcb
|
||||
- libxkbcommon
|
||||
- meson
|
||||
- xorg-server-xwayland
|
||||
- xcb-util-image
|
||||
- json-c
|
||||
- pango
|
||||
- pcre2
|
||||
- scdoc
|
||||
- cairo
|
||||
- wayland
|
||||
- wayland-protocols
|
||||
- xcb-util-image
|
||||
- xcb-util-wm
|
||||
- xorg-xwayland
|
||||
- seatd
|
||||
- hwdata
|
||||
- gdk-pixbuf2
|
||||
- libinput
|
||||
- libxkbcommon
|
||||
- scdoc
|
||||
sources:
|
||||
- https://github.com/swaywm/sway
|
||||
- https://gitlab.freedesktop.org/wlroots/wlroots.git
|
||||
- https://github.com/swaywm/wlroots
|
||||
tasks:
|
||||
- wlroots: |
|
||||
cd wlroots
|
||||
meson setup --prefix=/usr build -Dexamples=false
|
||||
meson --prefix=/usr build
|
||||
ninja -C build
|
||||
sudo ninja -C build install
|
||||
- setup: |
|
||||
cd sway
|
||||
meson setup build --fatal-meson-warnings -Dauto_features=enabled -Dsd-bus-provider=libsystemd
|
||||
meson build
|
||||
- build: |
|
||||
cd sway
|
||||
ninja -C build
|
||||
|
|
@ -1,56 +0,0 @@
|
|||
image: alpine/edge
|
||||
packages:
|
||||
- cairo-dev
|
||||
- eudev-dev
|
||||
- gdk-pixbuf-dev
|
||||
- json-c-dev
|
||||
- lcms2-dev
|
||||
- libdisplay-info-dev
|
||||
- libevdev-dev
|
||||
- libinput-dev
|
||||
- libseat-dev
|
||||
- libxcb-dev
|
||||
- libxkbcommon-dev
|
||||
- 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
|
||||
sources:
|
||||
- https://github.com/swaywm/sway
|
||||
- https://gitlab.freedesktop.org/wlroots/wlroots.git
|
||||
tasks:
|
||||
- wlroots: |
|
||||
cd wlroots
|
||||
meson setup --prefix=/usr build -Dexamples=false
|
||||
ninja -C build
|
||||
sudo ninja -C build install
|
||||
- setup: |
|
||||
cd sway
|
||||
meson setup build --fatal-meson-warnings -Dauto_features=enabled -Dtray=disabled
|
||||
- build: |
|
||||
cd sway
|
||||
ninja -C build
|
||||
- build-no-xwayland: |
|
||||
cd wlroots
|
||||
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 setup build --fatal-meson-warnings --default-library=static --force-fallback-for=wlroots
|
||||
ninja -C build
|
||||
|
|
@ -1,45 +0,0 @@
|
|||
image: freebsd/latest
|
||||
packages:
|
||||
- devel/basu
|
||||
- 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
|
||||
- x11-toolkits/pango
|
||||
- x11/libxcb
|
||||
- x11/libxkbcommon
|
||||
# wlroots dependencies
|
||||
- devel/evdev-proto
|
||||
- devel/libepoll-shim
|
||||
- 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
|
||||
tasks:
|
||||
- setup: |
|
||||
cd sway
|
||||
mkdir subprojects
|
||||
cd subprojects
|
||||
ln -s ../../wlroots wlroots
|
||||
cd ..
|
||||
meson setup build --fatal-meson-warnings -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
|
||||
35
.github/ISSUE_TEMPLATE/bug_report.md
vendored
35
.github/ISSUE_TEMPLATE/bug_report.md
vendored
|
|
@ -1,35 +0,0 @@
|
|||
---
|
||||
name: Bugs
|
||||
about: Crashes and other bugs
|
||||
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.
|
||||
- Proprietary graphics drivers, including nvidia, are not supported. Please use the open source equivalents, such as nouveau, if you would like to use Sway.
|
||||
- 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.
|
||||
|
||||
### Please fill out the following:
|
||||
- **Sway Version:**
|
||||
- `swaymsg -t get_version` or `sway -v`
|
||||
|
||||
- **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.
|
||||
- If you cannot reproduce with the default configuration, please try to find the minimal configuration to reproduce.
|
||||
- Upload the config to a pastebin such as gist.github.com.
|
||||
|
||||
- **Stack Trace:**
|
||||
- This is only needed if sway crashes.
|
||||
- If you use systemd, you should be able to open the coredump of the most recent crash with gdb with
|
||||
`coredumpctl gdb sway` and then `bt full` to obtain the stack trace.
|
||||
- If the lines mentioning sway or wlroots have `??` for the location, your binaries were built without debug symbols. Please compile both sway and wlroots from source and try to reproduce.
|
||||
|
||||
- **Description:**
|
||||
- The steps you took in plain English to reproduce the problem.
|
||||
5
.github/ISSUE_TEMPLATE/config.yml
vendored
5
.github/ISSUE_TEMPLATE/config.yml
vendored
|
|
@ -1,5 +0,0 @@
|
|||
blank_issues_enabled: false
|
||||
contact_links:
|
||||
- name: Questions
|
||||
url: "https://libera.chat"
|
||||
about: "Please ask questions on IRC in #sway on Libera Chat"
|
||||
13
.github/ISSUE_TEMPLATE/enhancement.md
vendored
13
.github/ISSUE_TEMPLATE/enhancement.md
vendored
|
|
@ -1,13 +0,0 @@
|
|||
---
|
||||
name: Enhancements
|
||||
about: New functionality
|
||||
labels: 'enhancement'
|
||||
|
||||
---
|
||||
|
||||
### Please read the following before submitting:
|
||||
- We are not accepting any new window management features unless they get implemented by i3.
|
||||
|
||||
### Please fill out the following:
|
||||
- **Description:**
|
||||
Please describe in plain English what the enhancement is and what the use case is.
|
||||
20
.github/ISSUE_TEMPLATE/i3_compat.md
vendored
20
.github/ISSUE_TEMPLATE/i3_compat.md
vendored
|
|
@ -1,20 +0,0 @@
|
|||
---
|
||||
name: i3 Compatibility
|
||||
about: Sway behaves differently from or lacks i3 functionality
|
||||
labels: 'i3-compat'
|
||||
|
||||
---
|
||||
|
||||
### Please read the following before submitting:
|
||||
- The following either do not make sense for Wayland or we have decided against supporting:
|
||||
- `restart`
|
||||
- `resource`
|
||||
- saving and loading layouts
|
||||
- the i3 sync protocol
|
||||
|
||||
### Please fill out the following:
|
||||
- **i3 PR:**
|
||||
- If this is new i3 functionality, please add a link to the i3 pull request.
|
||||
|
||||
- **Description:**
|
||||
- Please describe in plain English how Sway and i3's behaviors differ or what functionality Sway is lacking.
|
||||
1
.gitignore
vendored
1
.gitignore
vendored
|
|
@ -6,7 +6,6 @@ bin/
|
|||
test/
|
||||
build/
|
||||
build-*/
|
||||
.cache/
|
||||
.lvimrc
|
||||
config-debug
|
||||
wayland-*-protocol.*
|
||||
|
|
|
|||
1
.mailmap
1
.mailmap
|
|
@ -1 +0,0 @@
|
|||
Ronan Pigott <ronan@rjp.ie> <rpigott@berkeley.edu>
|
||||
|
|
@ -1,21 +1,13 @@
|
|||
# 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.
|
||||
|
||||
## Scope of future changes to sway
|
||||
|
||||
**Important**: Sway has completed its core value proposition: it is a fully
|
||||
featured Wayland-compatible replacement for i3. It is not our intention to
|
||||
expand on the scope of what i3 aims to accomplish. Our priorities now are
|
||||
increasing the stability, reliability, and performance of sway within its
|
||||
current scope. For this reason, most new window management feature requests are
|
||||
not accepted, even if accompanied by a patch.
|
||||
|
||||
## Pull Requests
|
||||
|
||||
If you already have your own pull request habits, feel free to use them. If you
|
||||
|
|
|
|||
42
ISSUE_TEMPLATE.md
Normal file
42
ISSUE_TEMPLATE.md
Normal file
|
|
@ -0,0 +1,42 @@
|
|||
If you are using the nvidia proprietary driver for any reason, you have two choices:
|
||||
|
||||
1. Uninstall it and use nouveau instead
|
||||
2. Use X11+i3 and close your browser tab
|
||||
|
||||
If `lsmod | grep nvidia | wc -l` shows anything other than zero, your bug report is not welcome here.
|
||||
|
||||
Otherwise, please include the following four components in your bug report: sway version, debug log, configuration (if applicable), and an explanation of steps taken to reproduce the issue. If sway crashes, also include a stack trace.
|
||||
|
||||
Obtain your version like so:
|
||||
|
||||
swaymsg -t get_version
|
||||
|
||||
If this doesn't work, use:
|
||||
|
||||
sway -v
|
||||
|
||||
* Sway Version:
|
||||
|
||||
Obtain a debug log like so:
|
||||
|
||||
sway -d 2> ~/sway.log
|
||||
|
||||
This will record information about sway's activity when it's running. Briefly reproduce your problem and exit sway. When preparing a debug log, brevity is important - start up sway, do the minimum work necessary to reproduce the error, then close sway.
|
||||
|
||||
Upload the debug log to a pastebin service such as [gist.github.com](https://gist.github.com), and link to it below.
|
||||
|
||||
* Debug Log:
|
||||
|
||||
You should try to reproduce the issue with the default configuration. If you cannot, please reproduce with a minimal configuration, upload the config to a pastebin service, and link to it below.
|
||||
|
||||
* Configuration File:
|
||||
|
||||
Finally, explain the steps you took in plain English to reproduce the problem below.
|
||||
|
||||
* Stack Trace, if sway crashes:
|
||||
|
||||
If you use systemd, you should be able to open the coredump of the most recent crash with GDB like so:
|
||||
|
||||
coredumpctl gdb sway
|
||||
|
||||
And then type `bt full` to obtain the stack trace.
|
||||
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 setup 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
|
||||
66
README.az.md
66
README.az.md
|
|
@ -1,66 +0,0 @@
|
|||
# sway
|
||||
|
||||
sway [i3]-ə uyğun [Wayland] kompozitorudur. [Tez-tez verilən sualları] oxuyun.
|
||||
[IRC kanalına] qoşulun ("irc.libera.chat"-da #sway).
|
||||
|
||||
## Buraxılış İmzaları
|
||||
|
||||
Buraxılışlar [E88F5E48] ilə imzalanıb və [GitHub-da][GitHub releases] dərc edilib.
|
||||
|
||||
## Quraşdırma
|
||||
|
||||
### Paketlərdən
|
||||
|
||||
Sway bir çox distributivdə mövcuddur. Öz distributiviniz üçün
|
||||
"sway" paketini quraşdırmağa çalışın.
|
||||
|
||||
### Mənbə kodundan kompilyasiya
|
||||
|
||||
Test və ya inkişaf üçün sway və wlroots-un HEAD-ini qurmaq istəyirsinizsə,
|
||||
[bu viki səhifəsini][Development setup] nəzərdən keçirin.
|
||||
|
||||
Asılılıqları quraşdırın:
|
||||
|
||||
* meson \*
|
||||
* [wlroots]
|
||||
* wayland
|
||||
* wayland-protocols \*
|
||||
* pcre2
|
||||
* json-c
|
||||
* pango
|
||||
* cairo
|
||||
* gdk-pixbuf2 (ixtiyari: sistem trayı üçün əlavə şəkil formatları)
|
||||
* [swaybg] (ixtiyari: divar kağızı)
|
||||
* [scdoc] (ixtiyari: man səhifələri) \*
|
||||
* git (ixtiyari: versiya məlumatı) \*
|
||||
|
||||
_\* Kompilyasiya asılılıqları_
|
||||
|
||||
Bu əmrləri icra edin:
|
||||
|
||||
meson setup build/
|
||||
ninja -C build/
|
||||
sudo ninja -C build/ install
|
||||
|
||||
## Konfiqurasiya
|
||||
|
||||
Əgər artıq i3-dən istifadə edirsinizsə, i3 konfiqurasiyanızı `~/.config/sway/config`
|
||||
ünvanına köçürün və o, dərhal işləyəcək. Əks halda, nümunə konfiqurasiya faylını
|
||||
`~/.config/sway/config` ünvanına köçürün. O, adətən `/etc/sway/config` ünvanında yerləşir.
|
||||
Konfiqurasiya haqqında məlumat üçün `man 5 sway` əmrini icra edin.
|
||||
|
||||
## İşə Salma
|
||||
|
||||
TTY-dan `sway`-ı işə salın. Bəzi ekran menecerləri işləyə bilər, lakin sway tərəfindən
|
||||
dəstəklənmir (gdm-in kifayət qədər yaxşı işlədiyi məlumdur).
|
||||
|
||||
[i3]: https://i3wm.org/
|
||||
[Wayland]: http://wayland.freedesktop.org/
|
||||
[Tez-tez verilən sualları]: https://github.com/swaywm/sway/wiki
|
||||
[IRC kanalına]: 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
|
||||
78
README.bg.md
Normal file
78
README.bg.md
Normal file
|
|
@ -0,0 +1,78 @@
|
|||
# sway
|
||||
|
||||
Sway е в процес на разработка, съвместим с i3,
|
||||
[Wayland](http://wayland.freedesktop.org/) композитор. Прочетете
|
||||
[FAQ](https://github.com/swaywm/sway/wiki). Присъединете се в [IRC
|
||||
канала](http://webchat.freenode.net/?channels=sway&uio=d4) (#sway на
|
||||
irc.freenode.net).
|
||||
|
||||
[](https://sr.ht/ICd5.png)
|
||||
|
||||
Ако желаете, може да дарите на [Patreon страницата на автора](https://patreon.com/sircmpwn), което ще помогне за цялостното здраве и развитие на проекта.
|
||||
|
||||
## Помощ
|
||||
|
||||
Ако имате нужда от помощ - влезте в IRC канала. Ако не ви отговорят в IRC или желаете кореспонденция по и-мейл - [fokditkak](mailto:martin.kalchev@mail.ru)
|
||||
може да отговаря на основни въпроси на български език.
|
||||
|
||||
## Подпис
|
||||
|
||||
Версии подписани с ключ [B22DA89A](http://pgp.mit.edu/pks/lookup?op=vindex&search=0x52CB6609B22DA89A)
|
||||
и публикувани в [GitHub](https://github.com/swaywm/sway/releases).
|
||||
|
||||
## Инсталация
|
||||
|
||||
### От пакети
|
||||
|
||||
Sway съществува в репотата (хранилищата) на много дистрибуции. Пробвайте да го инсталирате със съответния пакетен мениджър на вашата дистрибуция.
|
||||
В случай, че имате проблем погледнете [тази страница](https://github.com/swaywm/sway/wiki/Unsupported-packages) за помощ.
|
||||
|
||||
Ако желаете да пакетирате Sway за вашата дистрибуция влезте в IRC канала
|
||||
или пратете и-мейл на [sir@cmpwn.com](mailto:sir@cmpwn.com) за съвет как да го направите.
|
||||
|
||||
### Компилиране от сорс-код
|
||||
|
||||
Инсталирайте следните пакети:
|
||||
|
||||
* meson
|
||||
* [wlc](https://github.com/Cloudef/wlc)
|
||||
* wayland
|
||||
* xwayland
|
||||
* libinput >= 1.6.0
|
||||
* libcap
|
||||
* pcre
|
||||
* json-c >= 0.13
|
||||
* pango
|
||||
* cairo
|
||||
* gdk-pixbuf2 *
|
||||
* dbus >= 1.10 **
|
||||
* [scdoc](https://git.sr.ht/~sircmpwn/scdoc) (Нужен за man страници)
|
||||
* git
|
||||
|
||||
_\*Нужен само за swaybar, swaybg_
|
||||
|
||||
_\*\*Нужен само за tray_
|
||||
|
||||
Изпълнете следните команди:
|
||||
|
||||
meson build
|
||||
ninja -C build
|
||||
sudo ninja -C build install
|
||||
|
||||
Ако имате logind:
|
||||
|
||||
sudo setcap "cap_sys_ptrace,cap_sys_tty_config=eip" /usr/local/bin/sway
|
||||
|
||||
Иначе:
|
||||
|
||||
sudo chmod a+s /usr/local/bin/sway
|
||||
|
||||
## Настройка
|
||||
|
||||
Ако имте съшествуващa конфигурация от i3, просто я копирайте в `/.config/sway/config` и би трябвало безпроблемно да работи.
|
||||
В противен случай, поставете примерната конфигурация, която би трябвало да се намиреа в `/etc/sway/config`.
|
||||
Напишете `man 5 sway` за повече информация.
|
||||
|
||||
## Пускане
|
||||
|
||||
Напишете 'sway' в терминала (TTY). Някои дисплей мениджъри (display managers) може и да работят, но като цяло не са поддържани от Sway.
|
||||
92
README.cs.md
92
README.cs.md
|
|
@ -1,92 +0,0 @@
|
|||
# sway
|
||||
|
||||
sway je [waylandový][Wayland] kompozitor kompatibilní s [i3]. Přečtěte si
|
||||
[FAQ (anglicky)][FAQ]. Připojte se na [IRC kanál (anglicky)][IRC channel]
|
||||
\(#sway na irc.libera.chat).
|
||||
|
||||
## Podpisy vydání
|
||||
|
||||
Vydané verze jsou podepsány klíčem [E88F5E48] a publikovány
|
||||
[na GitHubu][GitHub releases].
|
||||
|
||||
## Instalace
|
||||
|
||||
### Z balíků
|
||||
|
||||
Sway je dostupný v mnoha distribucích. Zkuste v té vaší nainstalovat balík "sway".
|
||||
|
||||
### Kompilace ze zdrojových kódů
|
||||
|
||||
Pokud chcete sestavit HEAD repozitáře sway a wlroots pro testování nebo vývoj,
|
||||
použijte návod na [této stránce na wiki (anglicky)][Development setup].
|
||||
|
||||
Nainstalujte závislosti:
|
||||
|
||||
* meson \*
|
||||
* [wlroots]
|
||||
* wayland
|
||||
* wayland-protocols \*
|
||||
* pcre2
|
||||
* json-c
|
||||
* pango
|
||||
* cairo
|
||||
* gdk-pixbuf2 (volitelné: dodatečné formáty ikon pro oznamovací oblast)
|
||||
* [swaybg] (volitelné: tapeta plochy)
|
||||
* [scdoc] (volitelné: man stránky) \*
|
||||
* git (volitelné: informace o verzi) \*
|
||||
|
||||
_\* Závislost pouze pro kompilaci_
|
||||
|
||||
Spusťte tyto příkazy:
|
||||
|
||||
meson setup 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 nebo ze správce displeje.
|
||||
|
||||
[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
|
||||
100
README.de.md
100
README.de.md
|
|
@ -1,56 +1,84 @@
|
|||
# Sway
|
||||
Sway ist ein [i3]-kompatibler [Wayland]-Compositor. Lies die [FAQ]. Tritt dem [IRC Channel] bei (#sway on irc.libera.chat; Englisch).
|
||||
# sway
|
||||
|
||||
## Signaturen
|
||||
Jeder Release wird mit dem PGP-Schlüssel [E88F5E48] signiert und [auf GitHub][GitHub releases] veröffentlicht.
|
||||
Der Fortschritt dieser Übersetzung kann [hier](https://github.com/swaywm/sway/issues/1318)
|
||||
eingesehen werden.
|
||||
|
||||
Sway ist ein i3-kompatibler
|
||||
[Wayland](http://wayland.freedesktop.org/)-Kompositor. Lies die
|
||||
[FAQ](https://github.com/swaywm/sway/wiki#faq). Tritt dem
|
||||
[IRC-Channel](http://webchat.freenode.net/?channels=sway&uio=d4) bei (#sway in
|
||||
irc.freenode.net).
|
||||
|
||||
[](https://sr.ht/ICd5.png)
|
||||
|
||||
Falls du die Entwicklung von Sway unterstützen möchtest, kannst du das auf der
|
||||
[Patreon-Seite](https://patreon.com/sircmpwn) tun, oder indem du zu
|
||||
[Entwicklungsprämien](https://github.com/swaywm/sway/issues/986)
|
||||
bestimmter Features beiträgst. Jeder ist dazu eingeladen, eine Prämie in Anspruch
|
||||
zu nehmen oder für gewünschte Features bereitzustellen. Patreon ist eher dafür
|
||||
gedacht, Sways Wartung und das Projekt generell zu unterstützen.
|
||||
|
||||
## Deutscher Support
|
||||
|
||||
refacto(UTC+2) bietet Support im IRC (unter dem Namen azarus) und auf Github an.
|
||||
ParadoxSpiral(UTC+2) bietet Support im IRC und auf Github an.
|
||||
|
||||
## Releasesignaturen
|
||||
|
||||
Neue Versionen werden mit
|
||||
[B22DA89A](http://pgp.mit.edu/pks/lookup?op=vindex&search=0x52CB6609B22DA89A)
|
||||
signiert und [auf Github](https://github.com/swaywm/sway/releases) veröffentlicht.
|
||||
|
||||
## Installation
|
||||
|
||||
### Über die Paketverwaltung
|
||||
### Als Paket
|
||||
|
||||
Sway kann in vielen Distributionen direkt durch die Paketverwaltung installiert werden. Versuche einfach das Paket "sway" zu installieren.
|
||||
Sway ist in vielen Distributionen verfügbar: versuche einfach, das „sway“-Paket
|
||||
zu installieren. Falls es nicht vorhanden ist, schaue dir
|
||||
[diese Wikiseite](https://github.com/swaywm/sway/wiki/Unsupported-packages) für
|
||||
distributionsspezifische Installationsinformationen an.
|
||||
|
||||
### Quellcode selbst kompilieren
|
||||
Wenn du Interesse hast, Sway für deine Distribution als Paket bereitzustellen,
|
||||
schaue im IRC-Channel vorbei oder schreibe eine E‑Mail an sir@cmpwn.com (nur englischsprachig).
|
||||
|
||||
sway benötigt die folgenden Pakete:
|
||||
### Kompilieren des Quellcodes
|
||||
|
||||
* meson \*
|
||||
* [wlroots]
|
||||
Abhängigkeiten:
|
||||
|
||||
* meson
|
||||
* [wlc](https://github.com/Cloudef/wlc)
|
||||
* wayland
|
||||
* wayland-protocols\*
|
||||
* pcre2
|
||||
* json-c
|
||||
* xwayland
|
||||
* libinput >= 1.6.0
|
||||
* libcap
|
||||
* pcre
|
||||
* json-c >= 0.13
|
||||
* pango
|
||||
* cairo
|
||||
* gdk-pixbuf2 (Optional, wird für das Benachrichtigungsfeld (System Tray) benötigt)
|
||||
* [swaybg] (Optional, wird für das Setzen von Desktophintergrundbildern benötigt)
|
||||
* [scdoc] (Optional, wird für die Dokumentation (Man Pages) benötigt)\*
|
||||
* git (Optional: Versionsinfo)\*
|
||||
* gdk-pixbuf2 *
|
||||
* [scdoc](https://git.sr.ht/~sircmpwn/scdoc) (erforderlich für man pages)
|
||||
* git
|
||||
|
||||
_\*Werden nur für das Kompilieren benötigt_
|
||||
_\*Nur erforderlich für swaybar, swaybg_
|
||||
|
||||
Führe die folgenden Befehle aus:
|
||||
Führe diese Befehle aus:
|
||||
|
||||
meson setup build/
|
||||
ninja -C build/
|
||||
sudo ninja -C build/ install
|
||||
meson build
|
||||
ninja -C build
|
||||
sudo ninja -C build install
|
||||
|
||||
Schaue in das [Wiki][Development setup] (Englisch) für Informationen, falls du zum Testen oder Entwickeln den neuesten Stand (HEAD) von sway und wlroots kompilieren willst.
|
||||
In Systemen ohne logind musst du `sway` das suid-Flag geben:
|
||||
|
||||
sudo chmod a+s /usr/local/bin/sway
|
||||
|
||||
## 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`.
|
||||
Wenn du schon i3 benutzt, kopiere einfach deine i3 Konfiguration nach
|
||||
`~/.config/sway/config`. Falls nicht, kannst du die Beispielkonfiguration
|
||||
benutzen. Die befindet sich normalerweise unter `/etc/sway/config`.
|
||||
Um mehr Informationen über die Konfiguration zu erhalten, führe `man 5 sway` aus.
|
||||
|
||||
## Sway starten
|
||||
Sway kann einfach mit dem Befehl `sway` vom TTY oder mithilfe eines Displaymanagers gestartet werden.
|
||||
## Verwendung
|
||||
|
||||
[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
|
||||
Führe `sway` von einem TTY aus. Manche Displaymanager könnten funktionieren, werden aber
|
||||
nicht von Sway unterstützt (gdm scheint relativ gut zu funktionieren).
|
||||
|
|
|
|||
67
README.dk.md
67
README.dk.md
|
|
@ -1,67 +0,0 @@
|
|||
# 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).
|
||||
|
||||
## Udgivelses Signaturer
|
||||
|
||||
Udgivelser er signeret med [E88F5E48] og publiceret [på GitHub][GitHub
|
||||
releases].
|
||||
|
||||
## Installation
|
||||
|
||||
### Fra pakker
|
||||
|
||||
Sway er tilgængelig i mange distributioner. Prøv at installere "sway" pakken
|
||||
fra din.
|
||||
|
||||
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.
|
||||
|
||||
### 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:
|
||||
|
||||
* meson \*
|
||||
* [wlroots]
|
||||
* wayland
|
||||
* wayland-protocols \*
|
||||
* pcre2
|
||||
* json-c
|
||||
* pango
|
||||
* cairo
|
||||
* gdk-pixbuf2 (valgfrit: system tray)
|
||||
* [scdoc] (valgfrit: man pages) \*
|
||||
* git \*
|
||||
|
||||
_\*Kompileringsafhængighed_
|
||||
|
||||
Kør følgende kommandoer:
|
||||
|
||||
meson setup build
|
||||
ninja -C build
|
||||
sudo ninja -C build install
|
||||
|
||||
## 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.
|
||||
|
||||
## Eksekvering
|
||||
|
||||
Kør `sway` fra en TTY eller fra en display manager.
|
||||
|
||||
[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
|
||||
73
README.el.md
Normal file
73
README.el.md
Normal file
|
|
@ -0,0 +1,73 @@
|
|||
# sway
|
||||
|
||||
Sway είναι ένας **υπό ανάπτυξη** [Wayland](http://wayland.freedesktop.org/) διαχειριστής παραθύρων συμβατός με τον αντίστοιχο διαχειριστή παραθύρων i3 για τον X11.
|
||||
Διαβάστε τις [Συνήθεις Ερωτήσεις](https://github.com/swaywm/sway/wiki). Συνδεθείτε στο [κανάλι μας στο IRC](http://webchat.freenode.net/?channels=sway&uio=d4) (#sway στο
|
||||
irc.freenode.net).
|
||||
|
||||
[](https://sr.ht/ICd5.png)
|
||||
|
||||
|
||||
### Η ελληνική μετάφραση ενδέχεται να είναι ελλειπής!
|
||||
|
||||
Η τεκμηρίωση του Sway ξεκινάει πάντα από τα Αγγλικά και στη συνέχεια μεταφράζεται, γι' αυτό ενδέχεται τα ελληνικά κείμενα να μην είναι πάντα διαθέσιμα ή ενημερωμένα.
|
||||
Μπορείτε πάντα να υποδεικνύετε σφάλματα και να κάνετε ερωτήσεις σχετικά με τις ελληνικές μεταφράσεις στο [IRC](http://webchat.freenode.net/?channels=sway&uio=d4).
|
||||
To username μου στο Freenode είναι kon14 και θα με βρείτε στο IRC σε ώρες GMT+2.
|
||||
Δείτε [εδώ](https://github.com/swaywm/sway/issues/1318) πως μπορείτε και οι ίδιοι να βοηθήσετε στη μετάφραση του Sway.
|
||||
|
||||
Αν θέλετε να υποστηρίξετε την ανάπτυξη του Sway, μπορείτε να συμβάλετε στη [σελίδα Patreon του SirCmpwn](https://patreon.com/sircmpwn)
|
||||
ή να επιδοτήσετε τις [αμοιβές](https://github.com/swaywm/sway/issues/986) για υλοποίηση συγκεκριμένων δυνατοτήτων.
|
||||
Ο καθένας μπορεί να διεκδικήσει μια αμοιβή και μπορείτε να προσθέσετε μια αμοιβή για οποιαδήποτε δυνατότητα θέλετε.
|
||||
Προτιμήστε το Patreon αν θέλετε να υποστήριξετε την συνολική ανάπτυξη και διατήρηση του Sway.
|
||||
|
||||
## Υπογραφές Έκδοσης
|
||||
|
||||
Οι εκδόσεις υπογράφονται ως [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 ή στείλτε ένα email, στα **Αγγλικά**, στο sir@cmpwn.com για συμβουλές.
|
||||
|
||||
### Compile από Πηγαίο Κώδικα
|
||||
|
||||
Εγκατάσταση εξαρτήσεων:
|
||||
|
||||
* meson
|
||||
* [wlc](https://github.com/Cloudef/wlc)
|
||||
* wayland
|
||||
* xwayland
|
||||
* libinput >= 1.6.0
|
||||
* libcap
|
||||
* pcre
|
||||
* json-c >= 0.13
|
||||
* pango
|
||||
* cairo
|
||||
* gdk-pixbuf2 *
|
||||
* [scdoc](https://git.sr.ht/~sircmpwn/scdoc) (required for man pages)
|
||||
* git
|
||||
|
||||
_\*Απαιτείται μόνο για swaybar, swaybg_
|
||||
|
||||
Εκτελέστε αυτές τις εντολές:
|
||||
|
||||
meson build
|
||||
ninja -C build
|
||||
sudo ninja -C build install
|
||||
|
||||
Σε συστήματα χωρίς logind, χρειάζεται να θέσετε το suid bit στο εκτελέσιμο αρχείο:
|
||||
|
||||
sudo chmod a+s /usr/local/bin/sway
|
||||
|
||||
## Παραμετροποίηση
|
||||
|
||||
Αν είστε ήδη χρήστης του i3, τότε απλά αντιγράψτε το αρχείο ρυθμίσεων σας στο `~/.config/sway/config` και θα είναι όλα έτοιμα για χρήση.
|
||||
Διαφορετικά, αντιγράψτε το συνοδευόμενο δείγμα ρυθμίσεων, το οποίο θα βρείτε τυπικά στο `/etc/sway/config`, και μεταφέρετε το στην τοποθεσία `~/.config/sway/config`. Εκτελέστε `man 5 sway` για πληροφορίες σχετικά με την παραμετροποίηση των ρυθμίσεων σας.
|
||||
|
||||
## Εκτέλεση
|
||||
|
||||
Εκτελέστε `sway` απο ένα TTY. Μερικοί γραφικοί διαχειριστές σύνδεσης ενδέχεται να δουλεύουν, αλλά δεν υποστηρίζονται επίσημα (ο GDM "προτείνεται" ως λειτουργικός).
|
||||
57
README.es.md
57
README.es.md
|
|
@ -1,57 +0,0 @@
|
|||
# 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).
|
||||
|
||||
## Firmas de las versiones
|
||||
|
||||
Las distintas versiones están firmadas con [E88F5E48](https://keys.openpgp.org/search?q=34FF9526CFEF0E97A340E2E40FDE7BE0E88F5E48)
|
||||
y publicadas [en GitHub](https://github.com/swaywm/sway/releases).
|
||||
|
||||
## Instalación
|
||||
|
||||
### Usando paquetes
|
||||
|
||||
Sway está disponible en muchas distribuciones. Pruebe instalando el paquete "sway" desde la suya.
|
||||
Si no está disponible, puede consultar [esta documentación](https://github.com/swaywm/sway/wiki/Unsupported-packages)
|
||||
y así obtener información acerca de como instalarlo.
|
||||
|
||||
Si está interesado en crear un paquete para su distribución, únase al canal de IRC o
|
||||
escriba un email a sir@cmpwn.com
|
||||
|
||||
### Compilando el código fuente
|
||||
|
||||
Instale las dependencias:
|
||||
|
||||
* meson \*
|
||||
* [wlroots](https://gitlab.freedesktop.org/wlroots/wlroots)
|
||||
* wayland
|
||||
* wayland-protocols \*
|
||||
* pcre2
|
||||
* json-c
|
||||
* pango
|
||||
* cairo
|
||||
* gdk-pixbuf2 (optional: system tray)
|
||||
* [scdoc](https://git.sr.ht/~sircmpwn/scdoc) (optional: man pages) \*
|
||||
* git \*
|
||||
|
||||
_\*Compile-time dep_
|
||||
|
||||
Desde su consola, ejecute las órdenes:
|
||||
|
||||
meson setup build
|
||||
ninja -C build
|
||||
sudo ninja -C build install
|
||||
|
||||
## Configuración
|
||||
|
||||
Si ya utiliza i3, copie su archivo de configuración de i3 a `~/.config/sway/config` y
|
||||
sway funcionará sin tener que configurar nada más. En otro caso, copie el archivo de
|
||||
configuración básico a `~/.config/sway/config`, normalmente se encuentra en `/etc/sway/config`.
|
||||
Ejecute `man 5 sway` para obtener información sobre la configuración.
|
||||
|
||||
## Ejecución
|
||||
|
||||
Ejecute `sway` desde su consola. Algunos gestores de pantalla pueden funcionar sin estar
|
||||
soportados por `sway` (sabemos que gdm funciona bastante bien).
|
||||
91
README.fr.md
91
README.fr.md
|
|
@ -1,75 +1,82 @@
|
|||
# sway
|
||||
|
||||
Sway est un compositeur [Wayland] compatible avec [i3]. Lisez la
|
||||
[FAQ]. Rejoignez le [canal IRC] (#sway sur irc.libera.chat).
|
||||
Sway est un compositeur [Wayland](http://wayland.freedesktop.org/) compatible
|
||||
avec i3, **en cours de développement**. Lisez la
|
||||
[FAQ](https://github.com/swaywm/sway/wiki). Rejoignez le [canal
|
||||
IRC](http://webchat.freenode.net/?channels=sway&uio=d4) (#sway sur
|
||||
irc.freenode.net).
|
||||
|
||||
[](https://sr.ht/ICd5.png)
|
||||
|
||||
Si vous souhaitez soutenir le développement de Sway, vous pouvez contribuer à [ma page
|
||||
Patreon](https://patreon.com/sircmpwn) ou aux [primes](https://github.com/swaywm/sway/issues/986)
|
||||
pour des fonctionnalités spécifiques.
|
||||
Tout le monde est invité à réclamer une prime et vous pouvez donner une prime pour n'importe quelle
|
||||
fonctionnalité souhaitée. Patreon est plus utile pour supporter l'état général et la
|
||||
maintenance de Sway.
|
||||
|
||||
## Aide en français
|
||||
|
||||
[abdelq] fournit du support en français sur IRC et Github, dans le fuseau
|
||||
horaire UTC-4 (EST).
|
||||
[abdelq](//github.com/abdelq) fournit du support en français sur IRC et Github, dans le fuseau horaire UTC-4 (EST).
|
||||
|
||||
## Signatures de nouvelles versions
|
||||
|
||||
Les nouvelles versions sont signées avec [E88F5E48] et publiées
|
||||
[sur GitHub][versions GitHub].
|
||||
Les nouvelles versions sont signées avec [B22DA89A](http://pgp.mit.edu/pks/lookup?op=vindex&search=0x52CB6609B22DA89A)
|
||||
et publiées [sur GitHub](https://github.com/swaywm/sway/releases).
|
||||
|
||||
## Installation
|
||||
|
||||
### À partir de paquets
|
||||
|
||||
Sway est disponible sur beaucoup de distributions. Essayez d'installer le
|
||||
paquet "sway" pour la vôtre.
|
||||
Sway est disponible sur plusieurs distributions. Essayez d'installer le paquet "sway" pour
|
||||
la vôtre. Si ce n'est pas disponible, consultez [cette page wiki](https://github.com/swaywm/sway/wiki/Unsupported-packages)
|
||||
pour de l'information sur l'installation pour vos distributions.
|
||||
|
||||
Si vous êtes intéressé à maintenir Sway pour votre distribution, passez sur le
|
||||
canal IRC ou envoyez un e-mail à sir@cmpwn.com (en anglais seulement) pour des
|
||||
conseils.
|
||||
Si vous êtes intéressé à maintenir Sway pour votre distribution, passez par le canal
|
||||
IRC ou envoyez un e-mail à sir@cmpwn.com (en anglais seulement) pour des conseils.
|
||||
|
||||
### Compilation depuis les sources
|
||||
|
||||
Consultez [cette page wiki][Configuration de développement] si vous souhaitez
|
||||
compiler la révision HEAD de sway et wlroots pour tester ou développer.
|
||||
### Compilation depuis la source
|
||||
|
||||
Installez les dépendances :
|
||||
|
||||
* meson \*
|
||||
* [wlroots]
|
||||
* meson
|
||||
* [wlc](https://github.com/Cloudef/wlc)
|
||||
* wayland
|
||||
* wayland-protocols \*
|
||||
* pcre2
|
||||
* json-c
|
||||
* xwayland
|
||||
* libinput >= 1.6.0
|
||||
* libcap
|
||||
* pcre
|
||||
* json-c >= 0.13
|
||||
* pango
|
||||
* cairo
|
||||
* gdk-pixbuf2 (optionnel : system tray)
|
||||
* [scdoc] (optionnel : requis pour les pages man) \*
|
||||
* git (optionnel : information de version) \*
|
||||
* gdk-pixbuf2 *
|
||||
* [scdoc](https://git.sr.ht/~sircmpwn/scdoc) (requis pour les pages man)
|
||||
* git
|
||||
|
||||
_\* Requis uniquement pour la compilation_
|
||||
_\*Uniquement requis pour swaybar, swaybg_
|
||||
|
||||
Exécutez ces commandes :
|
||||
|
||||
meson setup build
|
||||
meson build
|
||||
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
|
||||
|
||||
## Configuration
|
||||
|
||||
Si vous utilisez déjà i3, copiez votre configuration i3 vers
|
||||
`~/.config/sway/config` et sway fonctionnera directement. Sinon, copiez
|
||||
l'exemple de fichier de configuration vers `~/.config/sway/config`. Il se
|
||||
trouve généralement dans `/etc/sway/config`. Exécutez `man 5 sway` pour lire la
|
||||
documentation pour la configuration de sway.
|
||||
Si vous utilisez déjà i3, copiez votre configuration i3 à `~/.config/sway/config` et
|
||||
cela va fonctionner. Sinon, copiez l'exemple de fichier de configuration à
|
||||
`~/.config/sway/config`. Il se trouve généralement dans `/etc/sway/config`.
|
||||
Exécutez `man 5 sway` pour l'information sur la configuration.
|
||||
|
||||
Mes propres dotfiles sont disponibles [ici](https://git.sr.ht/~sircmpwn/dotfiles) si
|
||||
vous voulez un peu d'inspiration. Je vous recommande aussi de consulter le
|
||||
[wiki](https://github.com/swaywm/sway/wiki).
|
||||
|
||||
## Exécution
|
||||
|
||||
Exécutez `sway` à partir d'un TTY ou d'un gestionnaires d'affichage.
|
||||
|
||||
[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
|
||||
[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
|
||||
[scdoc]: https://git.sr.ht/~sircmpwn/scdoc
|
||||
Exécutez `sway` à partir d'un TTY. Certains gestionnaires d'affichage peuvent fonctionner,
|
||||
mais ne sont pas supportés par Sway (gdm est réputé pour assez bien fonctionner).
|
||||
|
|
|
|||
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 setup 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 setup 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 setup 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).
|
||||
|
||||
## Csomagaláírások
|
||||
|
||||
A kiadott csomagok az [E88F5E48] kulccsal vannak aláírva, és [GitHubon][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 wikioldalt][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 setup build
|
||||
ninja -C build
|
||||
sudo ninja -C build install
|
||||
|
||||
## Konfiguráció
|
||||
|
||||
Ha előzőleg i3-at 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 setup build
|
||||
ninja -C build
|
||||
sudo ninja -C build install
|
||||
|
||||
### شخصی سازی و تنظیمات
|
||||
|
||||
اگر در حال حاضر از i3 استفاده میکنید، تنظیمات i3 خودتان را در فایل `~/.config/sway/config` کپی کنید و بدون نیاز به تغییر کار خواهد کرد. در غیر اینصورت، فایل نمونه تنظیمات را استفاده کنید. این فایل عموما در `/etc/sway/config` قرار دارد. برای آگاهی بیشتر `man 5 sway` را اجرا کنید.
|
||||
|
||||
## اجرا
|
||||
|
||||
در محیط TTY کافیست `sway` را اجرا کنید. ممکن است ابزارهای مدیریت نمایشگری نیز برای این کار وجود داشته باشند اما از طرف sway پشتیبانی نمیشوند (gdm عملکرد خوبی در این زمینه دارد).
|
||||
92
README.it.md
92
README.it.md
|
|
@ -1,65 +1,79 @@
|
|||
# sway
|
||||
|
||||
sway è un compositore di [Wayland] compatibile con [i3]. Leggi le [FAQ].
|
||||
Unisciti al [canale IRC] \(#sway su irc.libera.chat).
|
||||
Sway è un compositor [Wayland](http://wayland.freedesktop.org/) **in via di
|
||||
sviluppo** compatibile con i3. Leggi le [FAQ (in
|
||||
Inglese)](https://github.com/swaywm/sway/wiki). Unisciti al [canale IRC (in
|
||||
Inglese)](http://webchat.freenode.net/?channels=sway&uio=d4) (#sway on
|
||||
irc.freenode.net).
|
||||
|
||||
## Firma delle versioni
|
||||
[](https://sr.ht/ICd5.png)
|
||||
|
||||
Le versioni sono firmate con la chiave [E88F5E48] e sono pubblicate
|
||||
[su GitHub][GitHub releases].
|
||||
Se vuoi supportare lo sviluppo di Sway, puoi contribuire dalla
|
||||
[pagina Patreon di SirCmpwn's](https://patreon.com/sircmpwn) o con dei
|
||||
[premi](https://github.com/swaywm/sway/issues/986) per finanziare lo sviluppo
|
||||
di funzionalità specifiche.
|
||||
Chiunque è libero di reclamare un premio o crearne uno per qualsiasi funzionalità.
|
||||
Patreon è più utile al supporto e alla manutenzione generale di Sway.
|
||||
|
||||
## Supporto italiano
|
||||
syknro offre supporto in Italiano su GitHub nel fuso orario UTC+2.
|
||||
Questa traduzione non è ancora completa. [Clicca qui per maggiori informazioni](https://github.com/swaywm/sway/issues/1318)
|
||||
|
||||
## Firme digitali
|
||||
|
||||
Le release sono firmate con [B22DA89A](http://pgp.mit.edu/pks/lookup?op=vindex&search=0x52CB6609B22DA89A)
|
||||
e pubblicate [su GitHub](https://github.com/swaywm/sway/releases).
|
||||
|
||||
## Installazione
|
||||
|
||||
### Da un pacchetto
|
||||
### Dai pacchetti
|
||||
|
||||
Sway è disponibile in molte distribuzioni, prova a installare il pacchetto
|
||||
"sway" per la tua.
|
||||
Sway è disponibile in molte distribuzioni. Prova a installare il pacchetto "sway" per la tua.
|
||||
Se non funziona, controlla [questa pagina (in Inglese)](https://github.com/swaywm/sway/wiki/Unsupported-packages)
|
||||
per informazioni sull'installazione per le tue distribuzioni.
|
||||
|
||||
### Compilazione dei sorgenti
|
||||
Se vuoi creare un pacchetto per la tua distribuzione, passa dall'IRC o manda un email (in Inglese)
|
||||
a sir@cmpwn.com.
|
||||
|
||||
Consulta [questa pagina del wiki][Development setup] se vuoi compilare l'HEAD
|
||||
di sway e wlroots per testarli o contribuire allo sviluppo.
|
||||
### Compilando il codice sorgente
|
||||
|
||||
Installa le dipendenze:
|
||||
Installa queste dipendenze:
|
||||
|
||||
* meson \*
|
||||
* [wlroots]
|
||||
* meson
|
||||
* [wlc](https://github.com/Cloudef/wlc)
|
||||
* wayland
|
||||
* wayland-protocols \*
|
||||
* xwayland
|
||||
* libinput >= 1.6.0
|
||||
* libcap
|
||||
* pcre
|
||||
* json-c
|
||||
* json-c >= 0.13
|
||||
* pango
|
||||
* cairo
|
||||
* gdk-pixbuf2 (opzionale: area di notifica)
|
||||
* [scdoc] (opzionale: pagine del manuale) \*
|
||||
* git (opzionale: informazioni sulla versione) \*
|
||||
* gdk-pixbuf2 *
|
||||
* [scdoc](https://git.sr.ht/~sircmpwn/scdoc) (rrichiesto per man pages)
|
||||
* git
|
||||
|
||||
_\* Dipendenza necessaria per la compilazione_
|
||||
_\*Richiesto solo per swaybar, swaybg_
|
||||
|
||||
Esegui questi comandi:
|
||||
|
||||
meson setup build/
|
||||
ninja -C build/
|
||||
sudo ninja -C build/ install
|
||||
meson build
|
||||
ninja -C build
|
||||
sudo ninja -C build install
|
||||
|
||||
Per i sistemi senza logind, devi cambiare i permessi (suid):
|
||||
|
||||
sudo chmod a+s /usr/local/bin/sway
|
||||
|
||||
## 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.
|
||||
Se usi i3, copia la tua configurazione in `~/.config/sway/config` e
|
||||
funzionerà direttamente.
|
||||
Altrimenti copia in `~/.config/sway/config` la configurazione di esempio,
|
||||
solitamente si trova in `/etc/sway/config`.
|
||||
Esegui `man 5 sway` per informazioni sulla configurazione.
|
||||
|
||||
## Esecuzione
|
||||
|
||||
Lancia `sway` da un TTY o da un display manager.
|
||||
|
||||
[i3]: https://i3wm.org/
|
||||
[Wayland]: http://wayland.freedesktop.org/
|
||||
[FAQ]: https://github.com/swaywm/sway/wiki
|
||||
[canale 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
|
||||
Esegui `sway` da un TTY. Qualche display manager potrebbe funzionare ma non sono
|
||||
ufficialmente supportati da Sway (gdm è risaputo funzionare abbastanza bene).
|
||||
|
|
|
|||
33
README.ja.md
33
README.ja.md
|
|
@ -1,18 +1,20 @@
|
|||
# sway
|
||||
|
||||
Swayは[i3](https://i3wm.org/)互換な[Wayland](http://wayland.freedesktop.org/)コンポジタです。
|
||||
Swayはi3互換な[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) (#sway on irc.freenode.net)もあります。
|
||||
|
||||
[](https://sr.ht/ICd5.png)
|
||||
|
||||
Swayの開発を支援したい場合は、[SirCmpwnのPatreon](https://patreon.com/sircmpwn)や、特定の機能に対する[報奨金のページ](https://github.com/swaywm/sway/issues/986)から寄付ができます。誰でも報奨金を請求できますし、自分の欲しい機能に報奨金を懸ける事も出来ます。またSwayのメンテナンスを支援するには、Patreonがより有用です。
|
||||
|
||||
## 日本語サポート
|
||||
|
||||
SirCmpwnは、日本語でのサポートをIRCとGitHubで行います。タイムゾーンはUTC-4です。
|
||||
|
||||
## リリースの署名
|
||||
|
||||
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,29 +29,38 @@ 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 \*
|
||||
|
||||
_\*コンパイル時の依存_
|
||||
_\*コンパイルの時_
|
||||
|
||||
_\*\*オプション: swaybgでのみ必要です_
|
||||
|
||||
次のコマンドを実行してください:
|
||||
|
||||
meson setup build
|
||||
meson build
|
||||
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`を実行することで、設定に関する情報を見ることができます。
|
||||
|
||||
## 実行
|
||||
|
||||
`sway`をTTYまたはディスプレイマネージャから実行してください。
|
||||
`sway`をTTYから実行してください。いくつかのディスプレイマネージャは動くかもしれませんが、Swayからサポートされていません(gdmは非常に良く動作することが知られています)。
|
||||
|
||||
|
|
|
|||
55
README.ko.md
55
README.ko.md
|
|
@ -1,55 +0,0 @@
|
|||
# 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)도 있습니다.
|
||||
|
||||
## 릴리즈 서명
|
||||
|
||||
릴리즈는 [E88F5E48](https://keys.openpgp.org/search?q=34FF9526CFEF0E97A340E2E40FDE7BE0E88F5E48)에서 서명되고,
|
||||
[GitHub에서](https://github.com/swaywm/sway/releases) 공개되고 있습니다.
|
||||
|
||||
## 설치
|
||||
|
||||
### 패키지를 통한 설치
|
||||
|
||||
Sway는 많은 배포판에서 이용할 수 있습니다. "sway" 패키지를 설치해 보세요.
|
||||
만약 없다면, [위키 페이지](https://github.com/swaywm/sway/wiki/Unsupported-packages)를 확인하세요.
|
||||
해당 배포판에 대한 설치 정보를 확인할 수 있습니다.
|
||||
|
||||
당신의 배포판에 sway 패키지를 제공하고 싶다면,
|
||||
IRC 채널을 방문하거나 sir@cmpwn.com으로 이메일을 보내 상담 받으세요.
|
||||
|
||||
### 소스를 통한 컴파일
|
||||
|
||||
다음 의존 패키지들을 설치해 주세요:
|
||||
|
||||
* 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) (선택: man pages) \*
|
||||
* git \*
|
||||
|
||||
_\*컴파일 떄 필요_
|
||||
|
||||
다음 명령을 실행하세요:
|
||||
|
||||
meson setup build
|
||||
ninja -C build
|
||||
sudo ninja -C build install
|
||||
|
||||
## 설정
|
||||
|
||||
i3를 이미 사용 중이라면, i3 config을 `~/.config/sway/config`로 복사하세요.
|
||||
아니면, 샘플 구성 파일을 '~/.config/sway/config'에 복사할 수도 있습니다.
|
||||
일반적으로 "/etc/sway/config"에 위치해 있습니다.
|
||||
설정에 대한 정보를 보려면 "man 5 sway"를 실행하세요.
|
||||
|
||||
## 실행
|
||||
|
||||
TTY나 display manager에서 `sway`를 실행하세요.
|
||||
93
README.md
93
README.md
|
|
@ -1,48 +1,63 @@
|
|||
# sway
|
||||
|
||||
**[English][en]** - [عربي][ar] - [Azərbaycanca][az] - [Č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] - [Српски][sr] - [Svenska][sv] - [Türkçe][tr] - [Українська][uk] - [中文-简体][zh-CN] - [中文-繁體][zh-TW]
|
||||
[**English**](https://github.com/swaywm/sway/blob/master/README.md#sway--) - [日本語](https://github.com/swaywm/sway/blob/master/README.ja.md#sway--) - [Deutsch](https://github.com/swaywm/sway/blob/master/README.de.md#sway--) - [Ελληνικά](https://github.com/swaywm/sway/blob/master/README.el.md#sway--) - [Français](https://github.com/swaywm/sway/blob/master/README.fr.md#sway--) - [Українська](https://github.com/swaywm/sway/blob/master/README.uk.md#sway--) - [Italiano](https://github.com/swaywm/sway/blob/master/README.it.md#sway--) - [Português](https://github.com/swaywm/sway/blob/master/README.pt.md#sway--) -
|
||||
[Русский](https://github.com/swaywm/sway/blob/master/README.ru.md#sway--) - [Български](https://github.com/swaywm/sway/blob/master/README.bg.md#sway--)
|
||||
|
||||
sway is an [i3]-compatible [Wayland] compositor. Read the [FAQ]. Join the
|
||||
[IRC channel] \(#sway on irc.libera.chat).
|
||||
sway is an i3-compatible [Wayland](http://wayland.freedesktop.org/) compositor.
|
||||
Read the [FAQ](https://github.com/swaywm/sway/wiki). Join the [IRC
|
||||
channel](http://webchat.freenode.net/?channels=sway&uio=d4) (#sway on
|
||||
irc.freenode.net).
|
||||
|
||||
If you'd like to support sway development, please contribute to [SirCmpwn's
|
||||
Patreon page](https://patreon.com/sircmpwn).
|
||||
|
||||
## Release Signatures
|
||||
|
||||
Releases are signed with [E88F5E48] and published [on GitHub][GitHub releases].
|
||||
Releases are signed with [B22DA89A](http://pgp.mit.edu/pks/lookup?op=vindex&search=0x52CB6609B22DA89A)
|
||||
and published [on GitHub](https://github.com/swaywm/sway/releases).
|
||||
|
||||
## Installation
|
||||
|
||||
### From Packages
|
||||
|
||||
Sway is available in many distributions. Try installing the "sway" package for
|
||||
yours.
|
||||
yours. If it's not available, check out [this wiki page](https://github.com/swaywm/sway/wiki/Unsupported-packages)
|
||||
for information on installation for your distributions.
|
||||
|
||||
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
|
||||
sway and wlroots for testing or development.
|
||||
|
||||
Install dependencies:
|
||||
|
||||
* meson \*
|
||||
* [wlroots]
|
||||
* [wlroots](https://github.com/swaywm/wlroots)
|
||||
* wayland
|
||||
* wayland-protocols \*
|
||||
* pcre2
|
||||
* pcre
|
||||
* json-c
|
||||
* pango
|
||||
* cairo
|
||||
* gdk-pixbuf2 (optional: additional image formats for system tray)
|
||||
* [swaybg] (optional: wallpaper)
|
||||
* [scdoc] (optional: man pages) \*
|
||||
* git (optional: version info) \*
|
||||
* gdk-pixbuf2 \*\*
|
||||
* [scdoc](https://git.sr.ht/~sircmpwn/scdoc) >= 1.8.1 (optional: man pages) \*
|
||||
* git \*
|
||||
|
||||
_\* Compile-time dep_
|
||||
_\*Compile-time dep_
|
||||
|
||||
_\*\*optional: required for swaybg_
|
||||
|
||||
Run these commands:
|
||||
|
||||
meson setup 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
|
||||
|
||||
|
|
@ -53,43 +68,5 @@ Run `man 5 sway` for information on the configuration.
|
|||
|
||||
## Running
|
||||
|
||||
Run `sway` from a TTY or from a display manager.
|
||||
|
||||
[en]: https://github.com/swaywm/sway#readme
|
||||
[ar]: README.ar.md
|
||||
[az]: README.az.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
|
||||
[sr]: README.sr.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
|
||||
Run `sway` from a TTY. Some display managers may work but are not supported by
|
||||
sway (gdm is known to work fairly well).
|
||||
|
|
|
|||
57
README.nl.md
57
README.nl.md
|
|
@ -1,57 +0,0 @@
|
|||
# sway
|
||||
|
||||
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).
|
||||
|
||||
## Releasehandtekeningen
|
||||
|
||||
Releases worden ondertekend met [E88F5E48](https://keys.openpgp.org/search?q=34FF9526CFEF0E97A340E2E40FDE7BE0E88F5E48)
|
||||
en gepubliceerd [op GitHub](https://github.com/swaywm/sway/releases).
|
||||
|
||||
## Installatie
|
||||
|
||||
### Via een pakket
|
||||
|
||||
Sway is beschikbaar in vele distributies. Probeer het "sway"-pakket te installeren met jouw pakketbeheerapplicatie. Als het niet beschikbaar is, bekijk dan [deze wikipagina](https://github.com/swaywm/sway/wiki/Unsupported-packages)
|
||||
voor informatie over installatie in jouw distributie.
|
||||
|
||||
Als je geïnteresseerd bent in het maken van pakketten voor je distributie, stuur een bericht in het IRC-
|
||||
kanaal of stuur een e-mail naar sir@cmpwn.com voor advies.
|
||||
|
||||
### Compilatie vanuit broncode
|
||||
|
||||
Afhankelijkheden installeren:
|
||||
|
||||
* meson \*
|
||||
* [wlroots](https://gitlab.freedesktop.org/wlroots/wlroots)
|
||||
* wayland
|
||||
* wayland-protocols \*
|
||||
* pcre2
|
||||
* json-c
|
||||
* pango
|
||||
* cairo
|
||||
* gdk-pixbuf2 (optioneel: systeemtray)
|
||||
* [scdoc](https://git.sr.ht/~ircmpwn/scdoc) (optioneel: manpagina's) \*
|
||||
* git \*
|
||||
|
||||
_\* Compileerafhankelijkheden_
|
||||
|
||||
Voer deze opdrachten uit:
|
||||
|
||||
meson setup build
|
||||
ninja -C build
|
||||
sudo ninja -C build install
|
||||
|
||||
## Configuratie
|
||||
|
||||
Als je al i3 gebruikt, kopieer dan je i3-configuratie naar `~/.config/sway/config` en
|
||||
het zal zonder verdere configuratie werken. Kopieer anders het voorbeeldconfiguratiebestand naar
|
||||
`~/.config/sway/config`. Dit is meestal het bestand: `/etc/sway/config`.
|
||||
Voer `man 5 sway` uit voor informatie over het configureren van sway.
|
||||
|
||||
## Uitvoeren
|
||||
|
||||
Voer `sway` vanaf een TTY uit. Sommige display-managers kunnen werken, maar worden niet ondersteund door
|
||||
sway (van gdm is bekend dat het redelijk goed werkt).
|
||||
65
README.no.md
65
README.no.md
|
|
@ -1,65 +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).
|
||||
|
||||
## Signaturer
|
||||
|
||||
Utgivelser er signert med [E88F5E48] og publisert [på GitHub][GitHub releases].
|
||||
|
||||
## Installasjon
|
||||
|
||||
### Fra systempakker
|
||||
|
||||
Sway er tilgjengelig i mange distribusjoner. Prøv å installere pakken "sway"
|
||||
fra din distro sine repoer.
|
||||
|
||||
### 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.
|
||||
|
||||
Installer avhengigheter:
|
||||
|
||||
* meson \*
|
||||
* [wlroots]
|
||||
* wayland
|
||||
* wayland-protocols \*
|
||||
* pcre2
|
||||
* json-c
|
||||
* pango
|
||||
* cairo
|
||||
* gdk-pixbuf2 (valgfritt: støtte for ekstra bildeformater i system tray)
|
||||
* [swaybg] (valgfritt: bakgrunnsbilde)
|
||||
* [scdoc] (valgfritt: man pages) \*
|
||||
* git (valgfritt: versjonsinformasjon) \*
|
||||
|
||||
_\* Kompileringsavhengigheter_
|
||||
|
||||
Kjør følgende kommandoer:
|
||||
|
||||
meson setup 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 eksempelkonfigurasjonsfilen til
|
||||
`~/.config/sway/config`. Eksempelfilen er normalt plasert i `/etc/sway/config`.
|
||||
Kjør `man 5 sway` for å få opplysninger om konfigurasjonen.
|
||||
|
||||
## Kjøring
|
||||
|
||||
Kjør `sway` fra en TTY eller fra en display manager.
|
||||
|
||||
[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
|
||||
[swaybg]: https://github.com/swaywm/swaybg/
|
||||
[scdoc]: https://git.sr.ht/~sircmpwn/scdoc
|
||||
56
README.pl.md
56
README.pl.md
|
|
@ -1,56 +0,0 @@
|
|||
# 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).
|
||||
|
||||
## Podpisy cyfrowe wydań
|
||||
|
||||
Wydania są podpisywane przy pomocy klucza [E88F5E48](https://keys.openpgp.org/search?q=34FF9526CFEF0E97A340E2E40FDE7BE0E88F5E48)
|
||||
i publikowane [na GitHubie](https://github.com/swaywm/sway/releases).
|
||||
|
||||
## Instalacja
|
||||
|
||||
### Z pakietów
|
||||
|
||||
Sway jest dostępny w wielu dystybucjach. Spróbuj zainstalować pakiet "sway" w swoim
|
||||
menedżerze pakietów. Jeśli nie jest dostępny, sprawdź [tę stronę wiki](https://github.com/swaywm/sway/wiki/Unsupported-packages)
|
||||
aby uzyskać informacje dotyczące instalacji w swojej dystrybucji.
|
||||
|
||||
Jeśli chciałbyś stworzyć pakiet sway dla swojej dystrybucji, odwiedź kanał IRC lub wyślij email na
|
||||
adres sir@cmpwn.com w celu uzyskania wskazówek.
|
||||
|
||||
### Kompilacja ze Źródła
|
||||
|
||||
Zainstaluj zależności:
|
||||
|
||||
* meson \*
|
||||
* [wlroots](https://gitlab.freedesktop.org/wlroots/wlroots)
|
||||
* wayland
|
||||
* wayland-protocols \*
|
||||
* pcre2
|
||||
* json-c
|
||||
* pango
|
||||
* cairo
|
||||
* gdk-pixbuf2 (opcjonalnie: system tray)
|
||||
* [scdoc](https://git.sr.ht/~sircmpwn/scdoc) (opcjonalnie: strony pomocy man) \*
|
||||
* git \*
|
||||
|
||||
_\*zależności kompilacji_
|
||||
|
||||
Wykonaj następujące polecenia:
|
||||
|
||||
meson setup build
|
||||
ninja -C build
|
||||
sudo ninja -C build install
|
||||
|
||||
## Konfiguracja
|
||||
|
||||
Jeśli już korzystasz z i3, skopiuj swoją konfigurację i3 do katalogu `~/.config/sway/config` i
|
||||
zadziała od ręki. W przeciwnym razie skopiuj przykładowy plik konfiguracyjny do folderu
|
||||
`~/.config/sway/config`; zazwyczaj znajduje się w `/etc/sway/config`.
|
||||
Wykonaj polecenie `man 5 sway` aby uzyskać informacje dotyczące konfiguracji.
|
||||
|
||||
## Uruchamianie
|
||||
|
||||
Wykonaj polecenie `sway` z poziomu TTY lub menedżera wyświetlania.
|
||||
96
README.pt.md
96
README.pt.md
|
|
@ -1,59 +1,91 @@
|
|||
# sway
|
||||
|
||||
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).
|
||||
Sway é um compositor [Wayland](http://wayland.freedesktop.org/) compatível com o
|
||||
i3. Leia o [FAQ](https://github.com/swaywm/sway/wiki). Participe do [canal
|
||||
IRC](http://webchat.freenode.net/?channels=sway&uio=d4) (#sway no
|
||||
irc.freenode.net).
|
||||
|
||||
## Assinatura das versões
|
||||
[](https://sr.ht/ICd5.png)
|
||||
|
||||
As versões são assinadas com [E88F5E48](https://keys.openpgp.org/search?q=34FF9526CFEF0E97A340E2E40FDE7BE0E88F5E48)
|
||||
Se você deseja apoiar o desenvolvimento do Sway, você pode contribuir com o
|
||||
SirCmpwn em sua [página no Patreon](https://patreon.com/sircmpwn) ou você
|
||||
pode colaborar com [premiações](https://github.com/swaywm/sway/issues/986)
|
||||
para recursos específicos. Qualquer um pode requerer uma premiação ao implementar
|
||||
o recurso especificado, e você pode criar uma premiação para qualquer recurso que desejar.
|
||||
O Patreon é melhor direcionado para a manutenção a longo prazo do Sway.
|
||||
|
||||
## Ajuda em português
|
||||
|
||||
No momento, o suporte em português no canal do IRC **não está ativo**. Em caso de problemas,
|
||||
use as [*issues*](https://github.com/swaywm/sway/issues/) do Github (*em inglês*).
|
||||
|
||||
A tradução para português é um *trabalho em progresso*, no momento. Caso encontre algum erro
|
||||
ou queira colaborar com a tradução, visite
|
||||
[essa *issue*](https://github.com/swaywm/sway/issues/1318) para mais informações e não
|
||||
exite em enviar quaisquer correções necessárias.
|
||||
|
||||
## Assinaturas dos *Releases*
|
||||
|
||||
*Releases* são assinadas com a chave
|
||||
[B22DA89A](http://pgp.mit.edu/pks/lookup?op=vindex&search=0x52CB6609B22DA89A)
|
||||
e publicadas [no GitHub](https://github.com/swaywm/sway/releases).
|
||||
|
||||
## Instalação
|
||||
|
||||
### A partir de pacotes
|
||||
O Sway está disponível em várias distribuições. Tente instalar o pacote "sway"
|
||||
na sua. Caso não esteja disponível, verifique [esta wiki](https://github.com/swaywm/sway/wiki/Unsupported-packages)
|
||||
para se informar a sobre a instalação para sua distribuição.
|
||||
|
||||
Se você está interessado em criar um pacote do sway para a sua distribuição, verifique canal do IRC
|
||||
ou mande um email para sir@cmpwn.com para obter informações.
|
||||
Sway está disponível em várias distribuições. Verifique se o pacote "sway" está
|
||||
disponível a partir do gerenciador de pacotes da sua distribuição. Caso não esteja,
|
||||
procure por informações sobre como instalar o Sway na sua distribuição
|
||||
[aqui](https://github.com/swaywm/sway/wiki/Unsupported-packages).
|
||||
|
||||
### Compilando a partir do código-fonte
|
||||
Se você está interessado em manter um pacote do Sway para a sua distribuição,
|
||||
visite o canal no IRC ou mande um email para sir@cmpwn.com (*em inglês*).
|
||||
|
||||
Verifique [essa página da wiki](https://github.com/swaywm/sway/wiki/Development-Setup) se você quer compilar o HEAD do sway e o wlroots para testes ou desenvolvimento.
|
||||
### A partir do código-fonte
|
||||
|
||||
Instale as dependências:
|
||||
Antes de iniciar a compilação, instale as dependências:
|
||||
|
||||
* meson \*
|
||||
* [wlroots](https://gitlab.freedesktop.org/wlroots/wlroots)
|
||||
* meson
|
||||
* [wlc](https://github.com/Cloudef/wlc)
|
||||
* wayland
|
||||
* wayland-protocols \*
|
||||
* pcre2
|
||||
* json-c
|
||||
* xwayland
|
||||
* libinput >= 1.6.0
|
||||
* libcap
|
||||
* pcre
|
||||
* json-c >= 0.13
|
||||
* pango
|
||||
* cairo
|
||||
* gdk-pixbuf2 (opcional: system tray)
|
||||
* [scdoc](https://git.sr.ht/~sircmpwn/scdoc) (opcional: man pages) \*
|
||||
* git (opcional: informações de versão) \*
|
||||
* gdk-pixbuf2 *
|
||||
* [scdoc](https://git.sr.ht/~sircmpwn/scdoc) (man pages)
|
||||
* git
|
||||
|
||||
_\*Dependência de tempo de compilação_
|
||||
_\*Dependência apenas de swaybar, swaybg_
|
||||
|
||||
Execute esses comandos:
|
||||
Para compilar, execute estes comandos:
|
||||
|
||||
meson setup build
|
||||
meson build
|
||||
ninja -C build
|
||||
sudo ninja -C build install
|
||||
|
||||
Em sistemas com logind, configure as seguintes capacidades para o arquivo binário:
|
||||
|
||||
sudo setcap "cap_sys_ptrace,cap_sys_tty_config=eip" /usr/local/bin/sway
|
||||
|
||||
Em sistemas sem logind, ative a *flag* de *suid* do arquivo binário:
|
||||
|
||||
sudo chmod a+s /usr/local/bin/sway
|
||||
|
||||
## Configuração
|
||||
|
||||
Se você já utiliza o i3, então copie os seus arquivos de configuração para `~/.config/sway/config` e
|
||||
tudo funcionará normalmente. Caso contrário, copie o arquivo de configuração de exemplo para
|
||||
`~/.config/sway/config`. Normalmente, este arquivo está localizado em `/etc/sway/config`.
|
||||
Execute `man 5 sway` para se informar sobre a configuração.
|
||||
Se você já usa o i3, copie o arquivo de configuração do i3 para `~/.config/sway/config`;
|
||||
o Sway lerá o arquivo normalmente. Senão, copie o arquivo de configuração de exemplo
|
||||
para `~/.config/sway/config`. É comum esse arquivo estar localizado em
|
||||
`/etc/sway/config`. Veja `man 5 sway` para informações sobre configuração.
|
||||
|
||||
## Execução
|
||||
## Executando
|
||||
|
||||
Execute `sway` a partir de um terminal do Linux. Alguns gerenciadores de *display*
|
||||
podem funcionar, porém o Sway não procura manter compatibilidade com esses (segundo
|
||||
relatos, o gdm funciona bem com o Sway).
|
||||
|
||||
Execute o comando `sway` de um TTY. Alguns gerenciadores de display (ou gerenciadores de login) podem funcionar mas alguns não são suportados
|
||||
pelo sway (o gdm é conhecido por funcionar bem).
|
||||
|
|
|
|||
53
README.ro.md
53
README.ro.md
|
|
@ -1,53 +0,0 @@
|
|||
# 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).
|
||||
|
||||
## Semnarea digitală
|
||||
|
||||
Noile versiuni sunt semnate cu [E88F5E48](https://keys.openpgp.org/search?q=34FF9526CFEF0E97A340E2E40FDE7BE0E88F5E48)
|
||||
și postate [pe GitHub](https://github.com/swaywm/sway/releases).
|
||||
|
||||
## Instalare
|
||||
|
||||
### Din pachete (packages)
|
||||
|
||||
sway este disponibil în multe distribuții. Încercați să instalați pachetul "sway" pe distribuția voastră. Dacă nu este disponibil, uitați-vă în [această pagină wiki](https://github.com/swaywm/sway/wiki/Unsupported-packages)
|
||||
pentru informații a cum puteți să instalați pentru distribuția voastră.
|
||||
|
||||
Dacă sunteți interesați in a crea pachete pentru distribuția voastră, informați-ne prin IRC sau contactați prin email pe sir@cmpwn.com pentru ajutor.
|
||||
|
||||
### Compilare din sursă
|
||||
|
||||
Dependențe pentru instalare:
|
||||
|
||||
* meson \*
|
||||
* [wlroots](https://gitlab.freedesktop.org/wlroots/wlroots)
|
||||
* wayland
|
||||
* wayland-protocols \*
|
||||
* pcre2
|
||||
* json-c
|
||||
* pango
|
||||
* cairo
|
||||
* gdk-pixbuf2 (opțional, dacă doriți să aveți system tray)
|
||||
* [scdoc](https://git.sr.ht/~sircmpwn/scdoc) (opțional, pentru paginile man) \*
|
||||
* git (opțional, pentru informații de versiune) \*
|
||||
|
||||
*Dependențe doar pentru compilare*
|
||||
|
||||
Rulați aceste comenzi:
|
||||
|
||||
```
|
||||
meson setup build
|
||||
ninja -C build
|
||||
sudo ninja -C build install
|
||||
```
|
||||
|
||||
## 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`.
|
||||
Folosiți comanda `man 5 sway` pentru informații despre configurare.
|
||||
|
||||
## Lansare
|
||||
|
||||
Folosiți comanda `sway` într-un TTY. Managerii de display nu sunt suportați de către Sway, dar unii pot functiona (se știe că gdm functioneazâ destul de bine).
|
||||
96
README.ru.md
96
README.ru.md
|
|
@ -1,67 +1,83 @@
|
|||
# sway
|
||||
|
||||
sway - это [i3]-совместимый композитор [Wayland].
|
||||
Больше информации в [FAQ]. Присоединяйтесь к
|
||||
[IRC-каналу][IRC channel] (#sway на
|
||||
irc.libera.chat).
|
||||
Sway на данный момент **(в разработке)** i3-совместимый
|
||||
[Wayland](http://wayland.freedesktop.org/) композитор. Прочитайте
|
||||
[FAQ](https://github.com/swaywm/sway/wiki). Присоединяйтесь к [IRC
|
||||
каналу](http://webchat.freenode.net/?channels=sway&uio=d4) (#sway на
|
||||
irc.freenode.net).
|
||||
|
||||
## Подписи релизов
|
||||
[](https://sr.ht/ICd5.png)
|
||||
|
||||
Релизы подписываются ключом [E88F5E48] и публикуются [на GitHub][GitHub releases].
|
||||
При желании поддержать разработку Sway вы можете пожертвовать [автору
|
||||
на его Patreon странице](https://patreon.com/sircmpwn) или взяться
|
||||
за разработку определённых целей в обмен на [награду](https://github.com/swaywm/sway/issues/986).
|
||||
|
||||
Вы также можете объявить свою награду за определённую цель и больше всего для этого подходит Patreon.
|
||||
|
||||
## Помощь
|
||||
|
||||
DarkReef оказывает поддержку на русском языке в IRC канале и на GitHub в часовом поясе UTC +05:00.
|
||||
Если у вас есть желание помочь с переводом на русский язык, то, пожалуйста, ознакомьтесь с [подсказками для переводчиков](https://github.com/swaywm/sway/issues/1318). На этой же странице можно узнать [статус перевода](https://github.com/swaywm/sway/issues/1318#issuecomment-326913020).
|
||||
|
||||
## Подпись версий
|
||||
|
||||
Версии подписаны ключом [B22DA89A](http://pgp.mit.edu/pks/lookup?op=vindex&search=0x52CB6609B22DA89A)
|
||||
и опубликованы [на GitHub'е](https://github.com/swaywm/sway/releases).
|
||||
|
||||
## Установка
|
||||
|
||||
### Из репозиториев
|
||||
### Из пакета
|
||||
|
||||
Sway доступен во многих дистрибутивах. Попробуйте установить пакет "sway".
|
||||
Sway доступен во многих дистрибутивах и находится в официальных репозиториях. Попробуйте установить "sway" через ваш пакетный менеджер.
|
||||
В случае, если это не представляется возможным, то обратитесь к [этой странице](https://github.com/swaywm/sway/wiki/Unsupported-packages)
|
||||
для получения инструкций по установке для вашего дистрибутива.
|
||||
|
||||
Если вас интересует создание пакета sway для вашего дистрибутива, зайдите на [IRC-канал][IRC channel]
|
||||
или отправьте письмо на sir@cmpwn.com за советом.
|
||||
Если вы заинтересованы в создании пакета "sway" в вашем дистрибутиве, то сообщите об этом в IRC
|
||||
канале или отправьте письмо [sir@cmpwn.com](mailto:sir@cmpwn.com).
|
||||
|
||||
### Сборка из исходников
|
||||
|
||||
Посетите [эту страницу на вики][Development setup], если вы хотите построить последнюю версию
|
||||
sway и wlroots для тестирования или разработки.
|
||||
Установите следующие пакеты:
|
||||
|
||||
Установите зависимости:
|
||||
|
||||
* meson \*
|
||||
* [wlroots]
|
||||
* meson
|
||||
* [wlc](https://github.com/Cloudef/wlc)
|
||||
* wayland
|
||||
* wayland-protocols \*
|
||||
* pcre2
|
||||
* json-c
|
||||
* xwayland
|
||||
* libinput >= 1.6.0
|
||||
* libcap
|
||||
* pcre
|
||||
* json-c >= 0.13
|
||||
* pango
|
||||
* cairo
|
||||
* gdk-pixbuf2 (опционально: для работы трея)
|
||||
* [scdoc] (опционально: для man-страниц) \*
|
||||
* git (опционально: для информации о версии) \*
|
||||
* gdk-pixbuf2 *
|
||||
* dbus >= 1.10 **
|
||||
* [scdoc](https://git.sr.ht/~sircmpwn/scdoc) (required for man pages)
|
||||
* git
|
||||
|
||||
_\*Зависимости для сборки_
|
||||
_\*Требуется только для swaybar, swaybg_
|
||||
|
||||
Выполните эти команды:
|
||||
_\*\*Требуется только для tray_
|
||||
|
||||
meson setup build
|
||||
Выполните следующие команды:
|
||||
|
||||
meson build
|
||||
ninja -C build
|
||||
sudo ninja -C build install
|
||||
|
||||
Если у вас logind:
|
||||
|
||||
sudo setcap "cap_sys_ptrace,cap_sys_tty_config=eip" /usr/local/bin/sway
|
||||
|
||||
Иначе:
|
||||
|
||||
sudo chmod a+s /usr/local/bin/sway
|
||||
|
||||
## Настройка
|
||||
|
||||
Если вы уже используете i3, скопируйте ваш конфигурационный файл i3 в `~/.config/sway/config`, и
|
||||
он сразу же заработает. В противном случае, скопируйте образец конфигурационного файла в
|
||||
`~/.config/sway/config`. Обычно он располагается в `/etc/sway/config`.
|
||||
Запустите `man 5 sway` для изучения информации о настройке.
|
||||
Если вы уже используете i3, тогда просто скопируйте ваш конфиг в `~/.config/sway/config`.
|
||||
В любом другом случае, скопируйте `/etc/sway/config` в `~/.config/sway/config`.
|
||||
Для более детальной информации о настройке: `man 5 sway`.
|
||||
|
||||
## Запуск
|
||||
|
||||
Выполните команду `sway` прямо из TTY или дисплейного менеджера.
|
||||
|
||||
[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
|
||||
Выполните 'sway' в терминале. **Некоторые** менеджеры сессий могут работать, но не поддерживаются sway (к примеру, gdm работает со sway без проблем).
|
||||
|
|
|
|||
65
README.sr.md
65
README.sr.md
|
|
@ -1,65 +0,0 @@
|
|||
# sway
|
||||
|
||||
sway је [i3]-компатибилан [Wayland] композитор. Прочитајте [FAQ]. Придружите се
|
||||
[IRC каналу] \(#sway на irc.libera.chat).
|
||||
|
||||
## Потписи Издања
|
||||
|
||||
Издања су потписана са [E88F5E48] и објављена [на GitHub-у][GitHub releases].
|
||||
|
||||
## Инсталација
|
||||
|
||||
### Из пакета
|
||||
|
||||
Sway је доступан у многим дистрибуцијама. Покушајте да инсталирате "sway" пакет за
|
||||
вашу.
|
||||
|
||||
### Компајлирање из Извора
|
||||
|
||||
Погледајте [ову вики страницу][Development setup], ако желите да компајлирате HEAD верзију
|
||||
sway-а и wlroots-а за тестирање или развој.
|
||||
|
||||
Инсталирајте зависности:
|
||||
|
||||
* meson \*
|
||||
* [wlroots]
|
||||
* wayland
|
||||
* wayland-protocols \*
|
||||
* pcre2
|
||||
* json-c
|
||||
* pango
|
||||
* cairo
|
||||
* gdk-pixbuf2 (опционо: додатни формати слика за системску траку)
|
||||
* [swaybg] (опционо: позадина)
|
||||
* [scdoc] (опционо: man странице) \*
|
||||
* git (опционо: информације о верзији) \*
|
||||
|
||||
_\* Потребно само за компајлирање_
|
||||
|
||||
Покрените следеће команде:
|
||||
|
||||
meson setup 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-a или из менаџера приказа.
|
||||
|
||||
[i3]: https://i3wm.org/
|
||||
[Wayland]: http://wayland.freedesktop.org/
|
||||
[FAQ]: https://github.com/swaywm/sway/wiki
|
||||
[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
|
||||
[swaybg]: https://github.com/swaywm/swaybg/
|
||||
[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 setup 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 setup 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
|
||||
56
README.uk.md
56
README.uk.md
|
|
@ -1,9 +1,20 @@
|
|||
# sway
|
||||
|
||||
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).
|
||||
**Sway** це сумісний з i3 композитор [Wayland](http://wayland.freedesktop.org/)
|
||||
(**у стані розробки**). Ознайомтесь з
|
||||
[ЧаПами](https://github.com/swaywm/sway/wiki). Приєднуйтесь до [спільноти в
|
||||
IRC](http://webchat.freenode.net/?channels=sway&uio=d4) (#sway на
|
||||
irc.freenode.net).
|
||||
|
||||
[](https://sr.ht/ICd5.png)
|
||||
|
||||
Якщо ви хочете підтримати розробку Sway, ви можете зробити свій внесок у
|
||||
[SirCmpwn'ову сторінку Patreon](https://patreon.com/sircmpwn) або до
|
||||
[фонду винагород](https://github.com/swaywm/sway/issues/986) за реалізацію
|
||||
певного функціоналу.
|
||||
Кожен може виставити винагороду за реалізацію довільної функції
|
||||
(і, відповідно, забрати її собі, виконавши це завдання);
|
||||
кошти від сторінки Patreon підтримують загальну розробку та підтримку Sway.
|
||||
|
||||
## Підтримка українською мовою
|
||||
|
||||
|
|
@ -15,7 +26,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).
|
||||
|
||||
## Встановлення
|
||||
|
|
@ -28,33 +39,44 @@ Sway доступний у багатьох дистрибутивах Linux (а
|
|||
для інформації щодо встановлення на вашому дистрибутиві.
|
||||
|
||||
Якщо ви готові та зацікавлені запакувати і підтримувати Sway у вашому
|
||||
дистрибутиві, звертайтесь за порадами до нашого каналу в IRC або
|
||||
пишіть на електронну пошту [sir@cmpwn.com](mailto:sir@cmpwn.com).
|
||||
дистрибутиві, будемо раді вас бачити у нашому каналі IRC. Ви також можете
|
||||
спитати порад за адресою sir@cmpwn.com.
|
||||
|
||||
### З вихідного коду
|
||||
|
||||
Встановіть залежності:
|
||||
|
||||
* meson \*
|
||||
* [wlroots](https://gitlab.freedesktop.org/wlroots/wlroots)
|
||||
* meson
|
||||
* [wlc](https://github.com/Cloudef/wlc)
|
||||
* wayland
|
||||
* wayland-protocols \*
|
||||
* pcre2
|
||||
* json-c
|
||||
* xwayland
|
||||
* libinput >= 1.6.0
|
||||
* libcap
|
||||
* pcre
|
||||
* json-c >= 0.13
|
||||
* pango
|
||||
* cairo
|
||||
* gdk-pixbuf2 (optional: system tray)
|
||||
* [scdoc](https://git.sr.ht/~sircmpwn/scdoc) (необов'язково, необхідно для сторінок man) \*
|
||||
* git \*
|
||||
* gdk-pixbuf2 *
|
||||
* [scdoc](https://git.sr.ht/~sircmpwn/scdoc) (required for man pages)
|
||||
* git
|
||||
|
||||
_\*Лише для компіляції_
|
||||
_\*Лише для swaybar, swaybg_
|
||||
|
||||
Виконайте ці команди:
|
||||
|
||||
meson setup build
|
||||
meson build
|
||||
ninja -C build
|
||||
sudo ninja -C build install
|
||||
|
||||
На системах **з** logind, варто встановити декілька можливостей (caps)
|
||||
на виконуваний файл sway:
|
||||
|
||||
sudo setcap "cap_sys_ptrace,cap_sys_tty_config=eip" /usr/local/bin/sway
|
||||
|
||||
На системах **без** logind, необхідно встановити біт SUID на виконуваний файл sway:
|
||||
|
||||
sudo chmod a+s /usr/local/bin/sway
|
||||
|
||||
## Налаштування
|
||||
|
||||
Якщо ви вже використовуєте i3, скопіюйте свій файл налаштувань
|
||||
|
|
|
|||
|
|
@ -1,50 +0,0 @@
|
|||
# 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)
|
||||
|
||||
## 发行签名
|
||||
|
||||
每个发行版都以 [E88F5E48](https://keys.openpgp.org/search?q=34FF9526CFEF0E97A340E2E40FDE7BE0E88F5E48) 的密钥签名并发布在 [GitHub](https://github.com/swaywm/sway/releases)上。
|
||||
|
||||
## 安装
|
||||
|
||||
### 从包管理器安装
|
||||
|
||||
Sway 在很多发行版中可用。请尝试在你的发行版中安装 `sway` 。
|
||||
|
||||
### 从源码编译
|
||||
|
||||
如果想要构建最新版sway和wlroots用以测试和开发,请查看 [此wiki页面](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) (可选: man pages) \*
|
||||
* git \*
|
||||
|
||||
_\*编译时依赖_
|
||||
|
||||
运行如下命令:
|
||||
|
||||
meson setup build/
|
||||
ninja -C build/
|
||||
sudo ninja -C build/ install
|
||||
|
||||
## 配置
|
||||
|
||||
如果你已经在使用i3,直接复制i3配置文件到 `~/.config/sway/config`,这是开箱即用的。或者,你可以复制配置样例到`~/.config/sway/config`。它通常位于 `/etc/sway/config`。
|
||||
运行 `man 5 sway` 获取关于配置的更多信息。
|
||||
|
||||
## 运行
|
||||
|
||||
从 TTY 中运行 `sway`。 某些显示管理器(Display Manager)也许可以工作但不被 sway 支持。
|
||||
(已知 gdm 工作得非常好)。
|
||||
|
|
@ -1,55 +0,0 @@
|
|||
# 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)
|
||||
|
||||
## 發行簽章
|
||||
|
||||
所有發行的版本都會以 [E88F5E48](https://keys.openpgp.org/search?q=34FF9526CFEF0E97A340E2E40FDE7BE0E88F5E48) 簽署
|
||||
並發佈於 [GitHub](https://github.com/swaywm/sway/releases)
|
||||
|
||||
## 安裝
|
||||
|
||||
### 從套件安裝
|
||||
|
||||
Sway 在許多發行版都有提供。請自己嘗試於你的發行版安裝 「sway」這個套件。
|
||||
如果無法取得,請查看 [這個 wiki 頁面](https://github.com/swaywm/sway/wiki/Unsupported-packages)
|
||||
以取得更多關於如何於你使用的發行版上安裝的資訊。
|
||||
|
||||
如果你想要為你使用的發行版包裝 sway,請到 IRC 頻道或是直接寄封信到 sir@cmpwn.com 來取得一些建議。
|
||||
|
||||
### 從原始碼編譯
|
||||
|
||||
相依套件:
|
||||
|
||||
* 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) (選擇性: man pages) \*
|
||||
* git \*
|
||||
|
||||
_\*編譯時相依_
|
||||
|
||||
執行這些指令:
|
||||
|
||||
meson setup build
|
||||
ninja -C build
|
||||
sudo ninja -C build install
|
||||
|
||||
## 設定檔
|
||||
|
||||
如果你已經在使用 i3,你可以直接將你的 i3 設定檔複製到 `~/.config/sway/config` 然後就能直接使用。
|
||||
或者你也可以把範例設定檔複製到 `~/.config/sway/config`。 它通常會在 `/etc/sway/config`。
|
||||
執行 `man 5 sway` 來取得更多關於設定檔的資訊。
|
||||
|
||||
## 執行
|
||||
|
||||
在 TTY 執行 `sway`。有些 display manager 可能可以運作但 sway 不提供支援 (已知 gdm 運作的很好)
|
||||
121
assets/LICENSE
121
assets/LICENSE
|
|
@ -1,121 +0,0 @@
|
|||
Creative Commons Legal Code
|
||||
|
||||
CC0 1.0 Universal
|
||||
|
||||
CREATIVE COMMONS CORPORATION IS NOT A LAW FIRM AND DOES NOT PROVIDE
|
||||
LEGAL SERVICES. DISTRIBUTION OF THIS DOCUMENT DOES NOT CREATE AN
|
||||
ATTORNEY-CLIENT RELATIONSHIP. CREATIVE COMMONS PROVIDES THIS
|
||||
INFORMATION ON AN "AS-IS" BASIS. CREATIVE COMMONS MAKES NO WARRANTIES
|
||||
REGARDING THE USE OF THIS DOCUMENT OR THE INFORMATION OR WORKS
|
||||
PROVIDED HEREUNDER, AND DISCLAIMS LIABILITY FOR DAMAGES RESULTING FROM
|
||||
THE USE OF THIS DOCUMENT OR THE INFORMATION OR WORKS PROVIDED
|
||||
HEREUNDER.
|
||||
|
||||
Statement of Purpose
|
||||
|
||||
The laws of most jurisdictions throughout the world automatically confer
|
||||
exclusive Copyright and Related Rights (defined below) upon the creator
|
||||
and subsequent owner(s) (each and all, an "owner") of an original work of
|
||||
authorship and/or a database (each, a "Work").
|
||||
|
||||
Certain owners wish to permanently relinquish those rights to a Work for
|
||||
the purpose of contributing to a commons of creative, cultural and
|
||||
scientific works ("Commons") that the public can reliably and without fear
|
||||
of later claims of infringement build upon, modify, incorporate in other
|
||||
works, reuse and redistribute as freely as possible in any form whatsoever
|
||||
and for any purposes, including without limitation commercial purposes.
|
||||
These owners may contribute to the Commons to promote the ideal of a free
|
||||
culture and the further production of creative, cultural and scientific
|
||||
works, or to gain reputation or greater distribution for their Work in
|
||||
part through the use and efforts of others.
|
||||
|
||||
For these and/or other purposes and motivations, and without any
|
||||
expectation of additional consideration or compensation, the person
|
||||
associating CC0 with a Work (the "Affirmer"), to the extent that he or she
|
||||
is an owner of Copyright and Related Rights in the Work, voluntarily
|
||||
elects to apply CC0 to the Work and publicly distribute the Work under its
|
||||
terms, with knowledge of his or her Copyright and Related Rights in the
|
||||
Work and the meaning and intended legal effect of CC0 on those rights.
|
||||
|
||||
1. Copyright and Related Rights. A Work made available under CC0 may be
|
||||
protected by copyright and related or neighboring rights ("Copyright and
|
||||
Related Rights"). Copyright and Related Rights include, but are not
|
||||
limited to, the following:
|
||||
|
||||
i. the right to reproduce, adapt, distribute, perform, display,
|
||||
communicate, and translate a Work;
|
||||
ii. moral rights retained by the original author(s) and/or performer(s);
|
||||
iii. publicity and privacy rights pertaining to a person's image or
|
||||
likeness depicted in a Work;
|
||||
iv. rights protecting against unfair competition in regards to a Work,
|
||||
subject to the limitations in paragraph 4(a), below;
|
||||
v. rights protecting the extraction, dissemination, use and reuse of data
|
||||
in a Work;
|
||||
vi. database rights (such as those arising under Directive 96/9/EC of the
|
||||
European Parliament and of the Council of 11 March 1996 on the legal
|
||||
protection of databases, and under any national implementation
|
||||
thereof, including any amended or successor version of such
|
||||
directive); and
|
||||
vii. other similar, equivalent or corresponding rights throughout the
|
||||
world based on applicable law or treaty, and any national
|
||||
implementations thereof.
|
||||
|
||||
2. Waiver. To the greatest extent permitted by, but not in contravention
|
||||
of, applicable law, Affirmer hereby overtly, fully, permanently,
|
||||
irrevocably and unconditionally waives, abandons, and surrenders all of
|
||||
Affirmer's Copyright and Related Rights and associated claims and causes
|
||||
of action, whether now known or unknown (including existing as well as
|
||||
future claims and causes of action), in the Work (i) in all territories
|
||||
worldwide, (ii) for the maximum duration provided by applicable law or
|
||||
treaty (including future time extensions), (iii) in any current or future
|
||||
medium and for any number of copies, and (iv) for any purpose whatsoever,
|
||||
including without limitation commercial, advertising or promotional
|
||||
purposes (the "Waiver"). Affirmer makes the Waiver for the benefit of each
|
||||
member of the public at large and to the detriment of Affirmer's heirs and
|
||||
successors, fully intending that such Waiver shall not be subject to
|
||||
revocation, rescission, cancellation, termination, or any other legal or
|
||||
equitable action to disrupt the quiet enjoyment of the Work by the public
|
||||
as contemplated by Affirmer's express Statement of Purpose.
|
||||
|
||||
3. Public License Fallback. Should any part of the Waiver for any reason
|
||||
be judged legally invalid or ineffective under applicable law, then the
|
||||
Waiver shall be preserved to the maximum extent permitted taking into
|
||||
account Affirmer's express Statement of Purpose. In addition, to the
|
||||
extent the Waiver is so judged Affirmer hereby grants to each affected
|
||||
person a royalty-free, non transferable, non sublicensable, non exclusive,
|
||||
irrevocable and unconditional license to exercise Affirmer's Copyright and
|
||||
Related Rights in the Work (i) in all territories worldwide, (ii) for the
|
||||
maximum duration provided by applicable law or treaty (including future
|
||||
time extensions), (iii) in any current or future medium and for any number
|
||||
of copies, and (iv) for any purpose whatsoever, including without
|
||||
limitation commercial, advertising or promotional purposes (the
|
||||
"License"). The License shall be deemed effective as of the date CC0 was
|
||||
applied by Affirmer to the Work. Should any part of the License for any
|
||||
reason be judged legally invalid or ineffective under applicable law, such
|
||||
partial invalidity or ineffectiveness shall not invalidate the remainder
|
||||
of the License, and in such case Affirmer hereby affirms that he or she
|
||||
will not (i) exercise any of his or her remaining Copyright and Related
|
||||
Rights in the Work or (ii) assert any associated claims and causes of
|
||||
action with respect to the Work, in either case contrary to Affirmer's
|
||||
express Statement of Purpose.
|
||||
|
||||
4. Limitations and Disclaimers.
|
||||
|
||||
a. No trademark or patent rights held by Affirmer are waived, abandoned,
|
||||
surrendered, licensed or otherwise affected by this document.
|
||||
b. Affirmer offers the Work as-is and makes no representations or
|
||||
warranties of any kind concerning the Work, express, implied,
|
||||
statutory or otherwise, including without limitation warranties of
|
||||
title, merchantability, fitness for a particular purpose, non
|
||||
infringement, or the absence of latent or other defects, accuracy, or
|
||||
the present or absence of errors, whether or not discoverable, all to
|
||||
the greatest extent permissible under applicable law.
|
||||
c. Affirmer disclaims responsibility for clearing rights of other persons
|
||||
that may apply to the Work or any use thereof, including without
|
||||
limitation any person's Copyright and Related Rights in the Work.
|
||||
Further, Affirmer disclaims responsibility for obtaining any necessary
|
||||
consents, permissions or other rights required for any use of the
|
||||
Work.
|
||||
d. Affirmer understands and acknowledges that Creative Commons is not a
|
||||
party to this document and has no duty or obligation with respect to
|
||||
this CC0 or use of the Work.
|
||||
|
|
@ -5,6 +5,7 @@ lib_sway_client = static_library(
|
|||
),
|
||||
dependencies: [
|
||||
cairo,
|
||||
gdk_pixbuf,
|
||||
pango,
|
||||
pangocairo,
|
||||
wayland_client
|
||||
|
|
|
|||
|
|
@ -1,42 +1,62 @@
|
|||
#define _POSIX_C_SOURCE 200809
|
||||
#include <assert.h>
|
||||
#include <cairo.h>
|
||||
#include <errno.h>
|
||||
#include <cairo/cairo.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 bool set_cloexec(int fd) {
|
||||
long flags = fcntl(fd, F_GETFD);
|
||||
if (flags == -1) {
|
||||
return false;
|
||||
}
|
||||
|
||||
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);
|
||||
if (fcntl(fd, F_SETFD, flags | FD_CLOEXEC) == -1) {
|
||||
return false;
|
||||
}
|
||||
|
||||
// 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;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
--retries;
|
||||
} while (retries > 0 && errno == EEXIST);
|
||||
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;
|
||||
}
|
||||
|
||||
return -1;
|
||||
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);
|
||||
|
||||
int fd = mkstemp(*name);
|
||||
if (fd < 0) {
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (!set_cloexec(fd)) {
|
||||
close(fd);
|
||||
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 +74,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;
|
||||
|
|
|
|||
120
common/background-image.c
Normal file
120
common/background-image.c
Normal file
|
|
@ -0,0 +1,120 @@
|
|||
#include <assert.h>
|
||||
#include "background-image.h"
|
||||
#include "cairo.h"
|
||||
#include "log.h"
|
||||
|
||||
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;
|
||||
}
|
||||
|
||||
cairo_surface_t *load_background_image(const char *path) {
|
||||
cairo_surface_t *image;
|
||||
#if HAVE_GDK_PIXBUF
|
||||
GError *err = NULL;
|
||||
GdkPixbuf *pixbuf = gdk_pixbuf_new_from_file(path, &err);
|
||||
if (!pixbuf) {
|
||||
sway_log(SWAY_ERROR, "Failed to load background image (%s).",
|
||||
err->message);
|
||||
return NULL;
|
||||
}
|
||||
image = gdk_cairo_image_surface_create_from_pixbuf(pixbuf);
|
||||
g_object_unref(pixbuf);
|
||||
#else
|
||||
image = cairo_image_surface_create_from_png(path);
|
||||
#endif // HAVE_GDK_PIXBUF
|
||||
if (!image) {
|
||||
sway_log(SWAY_ERROR, "Failed to read background image.");
|
||||
return NULL;
|
||||
}
|
||||
if (cairo_surface_status(image) != CAIRO_STATUS_SUCCESS) {
|
||||
sway_log(SWAY_ERROR, "Failed to read background image: %s."
|
||||
#if !HAVE_GDK_PIXBUF
|
||||
"\nSway was compiled without gdk_pixbuf support, so only"
|
||||
"\nPNG images can be loaded. This is the likely cause."
|
||||
#endif // !HAVE_GDK_PIXBUF
|
||||
, cairo_status_to_string(cairo_surface_status(image)));
|
||||
return NULL;
|
||||
}
|
||||
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);
|
||||
}
|
||||
103
common/cairo.c
103
common/cairo.c
|
|
@ -1,6 +1,9 @@
|
|||
#include <stdint.h>
|
||||
#include <cairo.h>
|
||||
#include "cairo_util.h"
|
||||
#include <cairo/cairo.h>
|
||||
#include "cairo.h"
|
||||
#if HAVE_GDK_PIXBUF
|
||||
#include <gdk-pixbuf/gdk-pixbuf.h>
|
||||
#endif
|
||||
|
||||
void cairo_set_source_u32(cairo_t *cairo, uint32_t color) {
|
||||
cairo_set_source_rgba(cairo,
|
||||
|
|
@ -42,3 +45,99 @@ cairo_surface_t *cairo_image_surface_scale(cairo_surface_t *image,
|
|||
cairo_destroy(cairo);
|
||||
return new;
|
||||
}
|
||||
|
||||
#if HAVE_GDK_PIXBUF
|
||||
cairo_surface_t* gdk_cairo_image_surface_create_from_pixbuf(const GdkPixbuf *gdkbuf) {
|
||||
int chan = gdk_pixbuf_get_n_channels(gdkbuf);
|
||||
if (chan < 3) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
const guint8* gdkpix = gdk_pixbuf_read_pixels(gdkbuf);
|
||||
if (!gdkpix) {
|
||||
return NULL;
|
||||
}
|
||||
gint w = gdk_pixbuf_get_width(gdkbuf);
|
||||
gint h = gdk_pixbuf_get_height(gdkbuf);
|
||||
int stride = gdk_pixbuf_get_rowstride(gdkbuf);
|
||||
|
||||
cairo_format_t fmt = (chan == 3) ? CAIRO_FORMAT_RGB24 : CAIRO_FORMAT_ARGB32;
|
||||
cairo_surface_t * cs = cairo_image_surface_create (fmt, w, h);
|
||||
cairo_surface_flush (cs);
|
||||
if ( !cs || cairo_surface_status(cs) != CAIRO_STATUS_SUCCESS) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
int cstride = cairo_image_surface_get_stride(cs);
|
||||
unsigned char * cpix = cairo_image_surface_get_data(cs);
|
||||
|
||||
if (chan == 3) {
|
||||
int i;
|
||||
for (i = h; i; --i) {
|
||||
const guint8 *gp = gdkpix;
|
||||
unsigned char *cp = cpix;
|
||||
const guint8* end = gp + 3*w;
|
||||
while (gp < end) {
|
||||
#if G_BYTE_ORDER == G_LITTLE_ENDIAN
|
||||
cp[0] = gp[2];
|
||||
cp[1] = gp[1];
|
||||
cp[2] = gp[0];
|
||||
#else
|
||||
cp[1] = gp[0];
|
||||
cp[2] = gp[1];
|
||||
cp[3] = gp[2];
|
||||
#endif
|
||||
gp += 3;
|
||||
cp += 4;
|
||||
}
|
||||
gdkpix += stride;
|
||||
cpix += cstride;
|
||||
}
|
||||
} else {
|
||||
/* premul-color = alpha/255 * color/255 * 255 = (alpha*color)/255
|
||||
* (z/255) = z/256 * 256/255 = z/256 (1 + 1/255)
|
||||
* = z/256 + (z/256)/255 = (z + z/255)/256
|
||||
* # recurse once
|
||||
* = (z + (z + z/255)/256)/256
|
||||
* = (z + z/256 + z/256/255) / 256
|
||||
* # only use 16bit uint operations, loose some precision,
|
||||
* # result is floored.
|
||||
* -> (z + z>>8)>>8
|
||||
* # add 0x80/255 = 0.5 to convert floor to round
|
||||
* => (z+0x80 + (z+0x80)>>8 ) >> 8
|
||||
* ------
|
||||
* tested as equal to lround(z/255.0) for uint z in [0..0xfe02]
|
||||
*/
|
||||
#define PREMUL_ALPHA(x,a,b,z) \
|
||||
G_STMT_START { z = a * b + 0x80; x = (z + (z >> 8)) >> 8; } \
|
||||
G_STMT_END
|
||||
int i;
|
||||
for (i = h; i; --i) {
|
||||
const guint8 *gp = gdkpix;
|
||||
unsigned char *cp = cpix;
|
||||
const guint8* end = gp + 4*w;
|
||||
guint z1, z2, z3;
|
||||
while (gp < end) {
|
||||
#if G_BYTE_ORDER == G_LITTLE_ENDIAN
|
||||
PREMUL_ALPHA(cp[0], gp[2], gp[3], z1);
|
||||
PREMUL_ALPHA(cp[1], gp[1], gp[3], z2);
|
||||
PREMUL_ALPHA(cp[2], gp[0], gp[3], z3);
|
||||
cp[3] = gp[3];
|
||||
#else
|
||||
PREMUL_ALPHA(cp[1], gp[0], gp[3], z1);
|
||||
PREMUL_ALPHA(cp[2], gp[1], gp[3], z2);
|
||||
PREMUL_ALPHA(cp[3], gp[2], gp[3], z3);
|
||||
cp[0] = gp[3];
|
||||
#endif
|
||||
gp += 4;
|
||||
cp += 4;
|
||||
}
|
||||
gdkpix += stride;
|
||||
cpix += cstride;
|
||||
}
|
||||
#undef PREMUL_ALPHA
|
||||
}
|
||||
cairo_surface_mark_dirty(cs);
|
||||
return cs;
|
||||
}
|
||||
#endif // HAVE_GDK_PIXBUF
|
||||
|
|
|
|||
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>
|
||||
|
|
@ -68,16 +69,9 @@ int ipc_open_socket(const char *socket_path) {
|
|||
return socketfd;
|
||||
}
|
||||
|
||||
bool ipc_set_recv_timeout(int socketfd, struct timeval tv) {
|
||||
if (setsockopt(socketfd, SOL_SOCKET, SO_RCVTIMEO, &tv, sizeof(tv)) == -1) {
|
||||
sway_log_errno(SWAY_ERROR, "Failed to set ipc recv timeout");
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
struct ipc_response *ipc_recv_response(int socketfd) {
|
||||
char data[IPC_HEADER_SIZE];
|
||||
uint32_t *data32 = (uint32_t *)(data + sizeof(ipc_magic));
|
||||
|
||||
size_t total = 0;
|
||||
while (total < IPC_HEADER_SIZE) {
|
||||
|
|
@ -93,15 +87,15 @@ struct ipc_response *ipc_recv_response(int socketfd) {
|
|||
goto error_1;
|
||||
}
|
||||
|
||||
memcpy(&response->size, data + sizeof(ipc_magic), sizeof(uint32_t));
|
||||
memcpy(&response->type, data + sizeof(ipc_magic) + sizeof(uint32_t), sizeof(uint32_t));
|
||||
total = 0;
|
||||
memcpy(&response->size, &data32[0], sizeof(data32[0]));
|
||||
memcpy(&response->type, &data32[1], sizeof(data32[1]));
|
||||
|
||||
char *payload = malloc(response->size + 1);
|
||||
if (!payload) {
|
||||
goto error_2;
|
||||
}
|
||||
|
||||
total = 0;
|
||||
while (total < response->size) {
|
||||
ssize_t received = recv(socketfd, payload + total, response->size - total, 0);
|
||||
if (received < 0) {
|
||||
|
|
@ -115,6 +109,7 @@ struct ipc_response *ipc_recv_response(int socketfd) {
|
|||
return response;
|
||||
error_2:
|
||||
free(response);
|
||||
free(payload);
|
||||
error_1:
|
||||
sway_log(SWAY_ERROR, "Unable to allocate memory for IPC response");
|
||||
return NULL;
|
||||
|
|
@ -127,9 +122,10 @@ void free_ipc_response(struct ipc_response *response) {
|
|||
|
||||
char *ipc_single_command(int socketfd, uint32_t type, const char *payload, uint32_t *len) {
|
||||
char data[IPC_HEADER_SIZE];
|
||||
uint32_t *data32 = (uint32_t *)(data + sizeof(ipc_magic));
|
||||
memcpy(data, ipc_magic, sizeof(ipc_magic));
|
||||
memcpy(data + sizeof(ipc_magic), len, sizeof(*len));
|
||||
memcpy(data + sizeof(ipc_magic) + sizeof(*len), &type, sizeof(type));
|
||||
memcpy(&data32[0], len, sizeof(*len));
|
||||
memcpy(&data32[1], &type, sizeof(type));
|
||||
|
||||
if (write(socketfd, data, IPC_HEADER_SIZE) == -1) {
|
||||
sway_abort("Unable to send IPC header");
|
||||
|
|
|
|||
67
common/log.c
67
common/log.c
|
|
@ -1,3 +1,4 @@
|
|||
#define _POSIX_C_SOURCE 199506L
|
||||
#include <signal.h>
|
||||
#include <stdarg.h>
|
||||
#include <stdio.h>
|
||||
|
|
@ -35,63 +36,34 @@ bool _sway_assert(bool condition, const char *format, ...) {
|
|||
|
||||
static bool colored = true;
|
||||
static sway_log_importance_t log_importance = SWAY_ERROR;
|
||||
static struct timespec start_time = {-1, -1};
|
||||
|
||||
static const char *verbosity_colors[] = {
|
||||
[SWAY_SILENT] = "",
|
||||
[SWAY_ERROR ] = "\x1B[1;31m",
|
||||
[SWAY_INFO ] = "\x1B[1;34m",
|
||||
[SWAY_DEBUG ] = "\x1B[1;90m",
|
||||
[SWAY_DEBUG ] = "\x1B[1;30m",
|
||||
};
|
||||
|
||||
static const char *verbosity_headers[] = {
|
||||
[SWAY_SILENT] = "",
|
||||
[SWAY_ERROR] = "[ERROR]",
|
||||
[SWAY_INFO] = "[INFO]",
|
||||
[SWAY_DEBUG] = "[DEBUG]",
|
||||
};
|
||||
|
||||
static void timespec_sub(struct timespec *r, const struct timespec *a,
|
||||
const struct timespec *b) {
|
||||
const long NSEC_PER_SEC = 1000000000;
|
||||
r->tv_sec = a->tv_sec - b->tv_sec;
|
||||
r->tv_nsec = a->tv_nsec - b->tv_nsec;
|
||||
if (r->tv_nsec < 0) {
|
||||
r->tv_sec--;
|
||||
r->tv_nsec += NSEC_PER_SEC;
|
||||
}
|
||||
}
|
||||
|
||||
static void init_start_time(void) {
|
||||
if (start_time.tv_sec >= 0) {
|
||||
return;
|
||||
}
|
||||
clock_gettime(CLOCK_MONOTONIC, &start_time);
|
||||
}
|
||||
|
||||
static void sway_log_stderr(sway_log_importance_t verbosity, const char *fmt,
|
||||
va_list args) {
|
||||
init_start_time();
|
||||
|
||||
if (verbosity > log_importance) {
|
||||
return;
|
||||
}
|
||||
// prefix the time to the log message
|
||||
struct tm result;
|
||||
time_t t = time(NULL);
|
||||
struct tm *tm_info = localtime_r(&t, &result);
|
||||
char buffer[26];
|
||||
|
||||
struct timespec ts = {0};
|
||||
clock_gettime(CLOCK_MONOTONIC, &ts);
|
||||
timespec_sub(&ts, &ts, &start_time);
|
||||
|
||||
fprintf(stderr, "%02d:%02d:%02d.%03ld ", (int)(ts.tv_sec / 60 / 60),
|
||||
(int)(ts.tv_sec / 60 % 60), (int)(ts.tv_sec % 60),
|
||||
ts.tv_nsec / 1000000);
|
||||
// generate time prefix
|
||||
strftime(buffer, sizeof(buffer), "%F %T - ", tm_info);
|
||||
fprintf(stderr, "%s", buffer);
|
||||
|
||||
unsigned c = (verbosity < SWAY_LOG_IMPORTANCE_LAST) ? verbosity :
|
||||
SWAY_LOG_IMPORTANCE_LAST - 1;
|
||||
|
||||
if (colored && isatty(STDERR_FILENO)) {
|
||||
fprintf(stderr, "%s", verbosity_colors[c]);
|
||||
} else {
|
||||
fprintf(stderr, "%s ", verbosity_headers[c]);
|
||||
}
|
||||
|
||||
vfprintf(stderr, fmt, args);
|
||||
|
|
@ -103,8 +75,6 @@ static void sway_log_stderr(sway_log_importance_t verbosity, const char *fmt,
|
|||
}
|
||||
|
||||
void sway_log_init(sway_log_importance_t verbosity, terminate_callback_t callback) {
|
||||
init_start_time();
|
||||
|
||||
if (verbosity < SWAY_LOG_IMPORTANCE_LAST) {
|
||||
log_importance = verbosity;
|
||||
}
|
||||
|
|
@ -123,3 +93,20 @@ void _sway_log(sway_log_importance_t verbosity, const char *fmt, ...) {
|
|||
sway_log_stderr(verbosity, fmt, args);
|
||||
va_end(args);
|
||||
}
|
||||
|
||||
// strips the path prefix from filepath
|
||||
// will try to strip SWAY_SRC_DIR as well as a relative src dir
|
||||
// e.g. '/src/build/sway/util/log.c' and
|
||||
// '../util/log.c' will both be stripped to
|
||||
// 'util/log.c'
|
||||
const char *_sway_strip_path(const char *filepath) {
|
||||
static int srclen = sizeof(SWAY_SRC_DIR);
|
||||
if (strstr(filepath, SWAY_SRC_DIR) == filepath) {
|
||||
filepath += srclen;
|
||||
} else if (*filepath == '.') {
|
||||
while (*filepath == '.' || *filepath == '/') {
|
||||
++filepath;
|
||||
}
|
||||
}
|
||||
return filepath;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,3 +1,4 @@
|
|||
#define _POSIX_C_SOURCE 200112L
|
||||
#include <limits.h>
|
||||
#include <string.h>
|
||||
#include <stdbool.h>
|
||||
|
|
@ -116,15 +117,9 @@ void loop_add_fd(struct loop *loop, int fd, short mask,
|
|||
struct pollfd pfd = {fd, mask, 0};
|
||||
|
||||
if (loop->fd_length == loop->fd_capacity) {
|
||||
int capacity = loop->fd_capacity + 10;
|
||||
struct pollfd *tmp = realloc(loop->fds,
|
||||
sizeof(struct pollfd) * capacity);
|
||||
if (!tmp) {
|
||||
sway_log(SWAY_ERROR, "Unable to allocate memory for pollfd");
|
||||
return;
|
||||
}
|
||||
loop->fds = tmp;
|
||||
loop->fd_capacity = capacity;
|
||||
loop->fd_capacity += 10;
|
||||
loop->fds = realloc(loop->fds,
|
||||
sizeof(struct pollfd) * loop->fd_capacity);
|
||||
}
|
||||
|
||||
loop->fds[loop->fd_length++] = pfd;
|
||||
|
|
|
|||
|
|
@ -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,9 +13,9 @@ lib_sway_common = static_library(
|
|||
),
|
||||
dependencies: [
|
||||
cairo,
|
||||
gdk_pixbuf,
|
||||
pango,
|
||||
pangocairo,
|
||||
wayland_client.partial_dependency(compile_args: true)
|
||||
pangocairo
|
||||
],
|
||||
include_directories: sway_inc
|
||||
)
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
#include <cairo.h>
|
||||
#include <cairo/cairo.h>
|
||||
#include <pango/pangocairo.h>
|
||||
#include <stdarg.h>
|
||||
#include <stdbool.h>
|
||||
|
|
@ -6,7 +6,7 @@
|
|||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include "cairo_util.h"
|
||||
#include "cairo.h"
|
||||
#include "log.h"
|
||||
#include "stringop.h"
|
||||
|
||||
|
|
@ -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,95 +73,66 @@ 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, ...) {
|
||||
if (width) {
|
||||
*width = 0;
|
||||
}
|
||||
if (height) {
|
||||
*height = 0;
|
||||
}
|
||||
if (baseline) {
|
||||
*baseline = 0;
|
||||
}
|
||||
|
||||
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 format string");
|
||||
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);
|
||||
cairo_status_t status = cairo_status(cairo);
|
||||
if (status != CAIRO_STATUS_SUCCESS) {
|
||||
sway_log(SWAY_ERROR, "pango_cairo_update_layout() failed: %s",
|
||||
cairo_status_to_string(status));
|
||||
goto out;
|
||||
}
|
||||
|
||||
pango_layout_get_pixel_size(layout, width, height);
|
||||
if (baseline) {
|
||||
*baseline = pango_layout_get_baseline(layout) / PANGO_SCALE;
|
||||
}
|
||||
|
||||
out:
|
||||
g_object_unref(layout);
|
||||
free(buf);
|
||||
}
|
||||
|
||||
void get_text_metrics(const PangoFontDescription *description, int *height, int *baseline) {
|
||||
PangoFontMap *fontmap = pango_cairo_font_map_get_default();
|
||||
PangoContext *pango = pango_font_map_create_context(fontmap);
|
||||
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);
|
||||
}
|
||||
|
||||
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 format string");
|
||||
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);
|
||||
cairo_font_options_destroy(fo);
|
||||
|
||||
pango_cairo_update_layout(cairo, layout);
|
||||
cairo_status_t status = cairo_status(cairo);
|
||||
if (status != CAIRO_STATUS_SUCCESS) {
|
||||
sway_log(SWAY_ERROR, "pango_cairo_update_layout() failed: %s",
|
||||
cairo_status_to_string(status));
|
||||
goto out;
|
||||
}
|
||||
|
||||
pango_cairo_show_layout(cairo, layout);
|
||||
|
||||
out:
|
||||
g_object_unref(layout);
|
||||
free(buf);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,14 +1,13 @@
|
|||
#include <ctype.h>
|
||||
#include <stdarg.h>
|
||||
#include <stdbool.h>
|
||||
#include <stdio.h>
|
||||
#define _POSIX_C_SOURCE 200809L
|
||||
#include <stdlib.h>
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
#include <strings.h>
|
||||
#include <wordexp.h>
|
||||
#include "list.h"
|
||||
#include "log.h"
|
||||
#include <ctype.h>
|
||||
#include "stringop.h"
|
||||
#include "log.h"
|
||||
#include "string.h"
|
||||
#include "list.h"
|
||||
|
||||
static const char whitespace[] = " \f\n\r\t\v";
|
||||
|
||||
|
|
@ -64,7 +63,7 @@ char *lenient_strncat(char *dest, const char *src, size_t len) {
|
|||
}
|
||||
|
||||
// strcmp that also handles null pointers.
|
||||
int lenient_strcmp(const char *a, const char *b) {
|
||||
int lenient_strcmp(char *a, char *b) {
|
||||
if (a == b) {
|
||||
return 0;
|
||||
} else if (!a) {
|
||||
|
|
@ -79,10 +78,12 @@ int lenient_strcmp(const char *a, const char *b) {
|
|||
list_t *split_string(const char *str, const char *delims) {
|
||||
list_t *res = create_list();
|
||||
char *copy = strdup(str);
|
||||
char *token;
|
||||
|
||||
char *token = strtok(copy, delims);
|
||||
while (token) {
|
||||
list_add(res, strdup(token));
|
||||
token = strtok(copy, delims);
|
||||
while(token) {
|
||||
token = strdup(token);
|
||||
list_add(res, token);
|
||||
token = strtok(NULL, delims);
|
||||
}
|
||||
free(copy);
|
||||
|
|
@ -96,7 +97,7 @@ char **split_args(const char *start, int *argc) {
|
|||
bool in_token = false;
|
||||
bool in_string = false;
|
||||
bool in_char = false;
|
||||
bool in_brackets = false; // brackets are used for criteria
|
||||
bool in_brackets = false; // brackets are used for critera
|
||||
bool escaped = false;
|
||||
const char *end = start;
|
||||
if (start) {
|
||||
|
|
@ -149,6 +150,29 @@ void free_argv(int argc, char **argv) {
|
|||
free(argv);
|
||||
}
|
||||
|
||||
char *code_strstr(const char *haystack, const char *needle) {
|
||||
/* TODO */
|
||||
return strstr(haystack, needle);
|
||||
}
|
||||
|
||||
char *code_strchr(const char *str, char delimiter) {
|
||||
int in_string = 0, in_character = 0;
|
||||
int i = 0;
|
||||
while (str[i] != '\0') {
|
||||
if (str[i] == '"' && !in_character) {
|
||||
in_string = !in_string;
|
||||
} else if (str[i] == '\'' && !in_string) {
|
||||
in_character = !in_character;
|
||||
} else if (!in_character && !in_string) {
|
||||
if (str[i] == delimiter) {
|
||||
return (char *)str + i;
|
||||
}
|
||||
}
|
||||
++i;
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
|
||||
int unescape_string(char *string) {
|
||||
/* TODO: More C string escapes */
|
||||
int len = strlen(string);
|
||||
|
|
@ -252,115 +276,130 @@ char *join_args(char **argv, int argc) {
|
|||
return res;
|
||||
}
|
||||
|
||||
static inline char *argsep_next_interesting(const char *src, const char *delim) {
|
||||
char *special = strpbrk(src, "\"'\\");
|
||||
char *next_delim = strpbrk(src, delim);
|
||||
if (!special) {
|
||||
return next_delim;
|
||||
static bool has_whitespace(const char *str) {
|
||||
while (*str) {
|
||||
if (isspace(*str)) {
|
||||
return true;
|
||||
}
|
||||
++str;
|
||||
}
|
||||
if (!next_delim) {
|
||||
return special;
|
||||
}
|
||||
return (next_delim < special) ? next_delim : special;
|
||||
return false;
|
||||
}
|
||||
|
||||
char *argsep(char **stringp, const char *delim, char *matched) {
|
||||
/**
|
||||
* Add quotes around any argv with whitespaces.
|
||||
*/
|
||||
void add_quotes(char **argv, int argc) {
|
||||
int i;
|
||||
for (i = 0; i < argc; ++i) {
|
||||
if (has_whitespace(argv[i])) {
|
||||
int len = strlen(argv[i]) + 3;
|
||||
char *tmp = argv[i];
|
||||
argv[i] = malloc(len * sizeof(char));
|
||||
snprintf(argv[i], len, "\"%s\"", tmp);
|
||||
free(tmp);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Join a list of strings, adding separator in between. Separator can be NULL.
|
||||
*/
|
||||
char *join_list(list_t *list, char *separator) {
|
||||
if (!sway_assert(list != NULL, "list != NULL") || list->length == 0) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
size_t len = 1; // NULL terminator
|
||||
size_t sep_len = 0;
|
||||
if (separator != NULL) {
|
||||
sep_len = strlen(separator);
|
||||
len += (list->length - 1) * sep_len;
|
||||
}
|
||||
|
||||
for (int i = 0; i < list->length; i++) {
|
||||
len += strlen(list->items[i]);
|
||||
}
|
||||
|
||||
char *res = malloc(len);
|
||||
|
||||
char *p = res + strlen(list->items[0]);
|
||||
strcpy(res, list->items[0]);
|
||||
|
||||
for (int i = 1; i < list->length; i++) {
|
||||
if (sep_len) {
|
||||
memcpy(p, separator, sep_len);
|
||||
p += sep_len;
|
||||
}
|
||||
strcpy(p, list->items[i]);
|
||||
p += strlen(list->items[i]);
|
||||
}
|
||||
|
||||
*p = '\0';
|
||||
|
||||
return res;
|
||||
}
|
||||
|
||||
char *cmdsep(char **stringp, const char *delim) {
|
||||
// skip over leading delims
|
||||
char *head = *stringp + strspn(*stringp, delim);
|
||||
// Find end token
|
||||
char *tail = *stringp += strcspn(*stringp, delim);
|
||||
// Set stringp to beginning of next token
|
||||
*stringp += strspn(*stringp, delim);
|
||||
// Set stringp to null if last token
|
||||
if (!**stringp) *stringp = NULL;
|
||||
// Nullify end of first token
|
||||
*tail = 0;
|
||||
return head;
|
||||
}
|
||||
|
||||
char *argsep(char **stringp, const char *delim) {
|
||||
char *start = *stringp;
|
||||
char *end = start;
|
||||
bool in_string = false;
|
||||
bool in_char = false;
|
||||
bool escaped = false;
|
||||
char *interesting = NULL;
|
||||
|
||||
while ((interesting = argsep_next_interesting(end, delim))) {
|
||||
if (escaped && interesting != end) {
|
||||
escaped = false;
|
||||
}
|
||||
if (*interesting == '"' && !in_char && !escaped) {
|
||||
while (1) {
|
||||
if (*end == '"' && !in_char && !escaped) {
|
||||
in_string = !in_string;
|
||||
end = interesting + 1;
|
||||
} else if (*interesting == '\'' && !in_string && !escaped) {
|
||||
} else if (*end == '\'' && !in_string && !escaped) {
|
||||
in_char = !in_char;
|
||||
end = interesting + 1;
|
||||
} else if (*interesting == '\\') {
|
||||
} else if (*end == '\\') {
|
||||
escaped = !escaped;
|
||||
end = interesting + 1;
|
||||
} else if (!in_string && !in_char && !escaped) {
|
||||
// We must have matched a separator
|
||||
end = interesting;
|
||||
if (matched) {
|
||||
*matched = *end;
|
||||
}
|
||||
} else if (*end == '\0') {
|
||||
*stringp = NULL;
|
||||
goto found;
|
||||
} else if (!in_string && !in_char && !escaped && strchr(delim, *end)) {
|
||||
if (end - start) {
|
||||
*(end++) = 0;
|
||||
*stringp = end;
|
||||
break;
|
||||
*stringp = end + strspn(end, delim);;
|
||||
if (!**stringp) *stringp = NULL;
|
||||
goto found;
|
||||
} else {
|
||||
end = ++start;
|
||||
++start;
|
||||
end = start;
|
||||
}
|
||||
} else {
|
||||
end++;
|
||||
}
|
||||
}
|
||||
if (!interesting) {
|
||||
*stringp = NULL;
|
||||
if (matched) {
|
||||
*matched = '\0';
|
||||
if (*end != '\\') {
|
||||
escaped = false;
|
||||
}
|
||||
++end;
|
||||
}
|
||||
found:
|
||||
return start;
|
||||
}
|
||||
|
||||
bool expand_path(char **path) {
|
||||
wordexp_t p = {0};
|
||||
while (strstr(*path, " ")) {
|
||||
*path = realloc(*path, strlen(*path) + 2);
|
||||
char *ptr = strstr(*path, " ") + 1;
|
||||
memmove(ptr + 1, ptr, strlen(ptr) + 1);
|
||||
*ptr = '\\';
|
||||
const char *strcasestr(const char *haystack, const char *needle) {
|
||||
size_t needle_len = strlen(needle);
|
||||
const char *pos = haystack;
|
||||
const char *end = pos + strlen(haystack) - needle_len;
|
||||
|
||||
while (pos <= end) {
|
||||
if (strncasecmp(pos, needle, needle_len) == 0) {
|
||||
return pos;
|
||||
}
|
||||
++pos;
|
||||
}
|
||||
if (wordexp(*path, &p, 0) != 0 || p.we_wordv[0] == NULL) {
|
||||
wordfree(&p);
|
||||
return false;
|
||||
}
|
||||
free(*path);
|
||||
*path = join_args(p.we_wordv, p.we_wordc);
|
||||
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;
|
||||
}
|
||||
|
||||
bool has_prefix(const char *str, const char *prefix) {
|
||||
return strncmp(str, prefix, strlen(prefix)) == 0;
|
||||
return NULL;
|
||||
}
|
||||
|
|
|
|||
119
common/util.c
119
common/util.c
|
|
@ -1,11 +1,9 @@
|
|||
#include <ctype.h>
|
||||
#include <fcntl.h>
|
||||
#define _POSIX_C_SOURCE 200809L
|
||||
#include <float.h>
|
||||
#include <math.h>
|
||||
#include <time.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <strings.h>
|
||||
#include <wayland-server-protocol.h>
|
||||
#include "log.h"
|
||||
#include "util.h"
|
||||
|
||||
|
|
@ -13,28 +11,21 @@ int wrap(int i, int max) {
|
|||
return ((i % max) + max) % max;
|
||||
}
|
||||
|
||||
bool parse_color(const char *color, uint32_t *result) {
|
||||
uint32_t parse_color(const char *color) {
|
||||
if (color[0] == '#') {
|
||||
++color;
|
||||
}
|
||||
int len = strlen(color);
|
||||
if ((len != 6 && len != 8) || !isxdigit(color[0]) || !isxdigit(color[1])) {
|
||||
return false;
|
||||
}
|
||||
char *ptr;
|
||||
uint32_t parsed = strtoul(color, &ptr, 16);
|
||||
if (*ptr != '\0') {
|
||||
return false;
|
||||
}
|
||||
*result = len == 6 ? ((parsed << 8) | 0xFF) : parsed;
|
||||
return true;
|
||||
}
|
||||
|
||||
void color_to_rgba(float dest[static 4], uint32_t color) {
|
||||
dest[0] = ((color >> 24) & 0xff) / 255.0;
|
||||
dest[1] = ((color >> 16) & 0xff) / 255.0;
|
||||
dest[2] = ((color >> 8) & 0xff) / 255.0;
|
||||
dest[3] = (color & 0xff) / 255.0;
|
||||
int len = strlen(color);
|
||||
if (len != 6 && len != 8) {
|
||||
sway_log(SWAY_DEBUG, "Invalid color %s, defaulting to color 0xFFFFFFFF", color);
|
||||
return 0xFFFFFFFF;
|
||||
}
|
||||
uint32_t res = (uint32_t)strtoul(color, NULL, 16);
|
||||
if (strlen(color) == 6) {
|
||||
res = (res << 8) | 0xFF;
|
||||
}
|
||||
return res;
|
||||
}
|
||||
|
||||
bool parse_boolean(const char *boolean, bool current) {
|
||||
|
|
@ -63,87 +54,3 @@ float parse_float(const char *value) {
|
|||
}
|
||||
return flt;
|
||||
}
|
||||
|
||||
enum movement_unit parse_movement_unit(const char *unit) {
|
||||
if (strcasecmp(unit, "px") == 0) {
|
||||
return MOVEMENT_UNIT_PX;
|
||||
}
|
||||
if (strcasecmp(unit, "ppt") == 0) {
|
||||
return MOVEMENT_UNIT_PPT;
|
||||
}
|
||||
if (strcasecmp(unit, "default") == 0) {
|
||||
return MOVEMENT_UNIT_DEFAULT;
|
||||
}
|
||||
return MOVEMENT_UNIT_INVALID;
|
||||
}
|
||||
|
||||
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) {
|
||||
// e.g. 10px
|
||||
amount->unit = parse_movement_unit(err);
|
||||
return 1;
|
||||
}
|
||||
if (argc == 1) {
|
||||
amount->unit = MOVEMENT_UNIT_DEFAULT;
|
||||
return 1;
|
||||
}
|
||||
// Try the second argument
|
||||
amount->unit = parse_movement_unit(argv[1]);
|
||||
if (amount->unit == MOVEMENT_UNIT_INVALID) {
|
||||
amount->unit = MOVEMENT_UNIT_DEFAULT;
|
||||
return 1;
|
||||
}
|
||||
return 2;
|
||||
}
|
||||
|
||||
const char *sway_wl_output_subpixel_to_string(enum wl_output_subpixel subpixel) {
|
||||
switch (subpixel) {
|
||||
case WL_OUTPUT_SUBPIXEL_UNKNOWN:
|
||||
return "unknown";
|
||||
case WL_OUTPUT_SUBPIXEL_NONE:
|
||||
return "none";
|
||||
case WL_OUTPUT_SUBPIXEL_HORIZONTAL_RGB:
|
||||
return "rgb";
|
||||
case WL_OUTPUT_SUBPIXEL_HORIZONTAL_BGR:
|
||||
return "bgr";
|
||||
case WL_OUTPUT_SUBPIXEL_VERTICAL_RGB:
|
||||
return "vrgb";
|
||||
case WL_OUTPUT_SUBPIXEL_VERTICAL_BGR:
|
||||
return "vbgr";
|
||||
}
|
||||
sway_assert(false, "Unknown value for wl_output_subpixel.");
|
||||
return NULL;
|
||||
}
|
||||
|
||||
bool sway_set_cloexec(int fd, bool cloexec) {
|
||||
int flags = fcntl(fd, F_GETFD);
|
||||
if (flags == -1) {
|
||||
sway_log_errno(SWAY_ERROR, "fcntl failed");
|
||||
return false;
|
||||
}
|
||||
if (cloexec) {
|
||||
flags = flags | FD_CLOEXEC;
|
||||
} else {
|
||||
flags = flags & ~FD_CLOEXEC;
|
||||
}
|
||||
if (fcntl(fd, F_SETFD, flags) == -1) {
|
||||
sway_log_errno(SWAY_ERROR, "fcntl failed");
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
uint32_t get_current_time_in_msec(void) {
|
||||
struct timespec now;
|
||||
clock_gettime(CLOCK_MONOTONIC, &now);
|
||||
return now.tv_sec * 1000 + now.tv_nsec / 1000000;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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=(
|
||||
|
|
@ -15,16 +15,12 @@ _swaymsg()
|
|||
'get_bar_config'
|
||||
'get_version'
|
||||
'get_binding_modes'
|
||||
'get_binding_state'
|
||||
'get_config'
|
||||
'send_tick'
|
||||
'subscribe'
|
||||
)
|
||||
|
||||
short=(
|
||||
-h
|
||||
-m
|
||||
-p
|
||||
-q
|
||||
-r
|
||||
-s
|
||||
|
|
@ -34,13 +30,11 @@ _swaymsg()
|
|||
|
||||
long=(
|
||||
--help
|
||||
--monitor
|
||||
--pretty
|
||||
--quiet
|
||||
--raw
|
||||
--socket
|
||||
--type
|
||||
--version
|
||||
--verbose
|
||||
)
|
||||
|
||||
case $prev in
|
||||
|
|
|
|||
|
|
@ -1,8 +1,7 @@
|
|||
# sway(1) completion
|
||||
|
||||
complete -f -c sway
|
||||
complete -c sway -s h -l help --description "Show help message and quit."
|
||||
complete -c sway -s c -l config --description "Specifies a config file." -r
|
||||
complete -c sway -s c -l config --description "Specifies a config file."
|
||||
complete -c sway -s C -l validate --description "Check the validity of the config file, then exit."
|
||||
complete -c sway -s d -l debug --description "Enables full logging, including debug information."
|
||||
complete -c sway -s v -l version --description "Show the version number and quit."
|
||||
|
|
|
|||
|
|
@ -1,13 +1,10 @@
|
|||
# swaymsg(1) completion
|
||||
|
||||
complete -f -c swaymsg
|
||||
complete -c swaymsg -s h -l help --description "Show help message and quit."
|
||||
complete -c swaymsg -s m -l monitor --description "Monitor subscribed events until killed."
|
||||
complete -c swaymsg -s p -l pretty --description "Use pretty output even when not using a tty."
|
||||
complete -c swaymsg -s q -l quiet --description "Sends the IPC message but does not print the response from sway."
|
||||
complete -c swaymsg -s v -l version --description "Print the version (of swaymsg) and quit."
|
||||
complete -c swaymsg -s r -l raw --description "Use raw output even if using tty."
|
||||
complete -c swaymsg -s s -l socket -r --description "Use the specified socket path. Otherwise, swaymsg will ask where the socket is (which is the value of $SWAYSOCK, then of $I3SOCK)."
|
||||
complete -c swaymsg -s v -l version --description "Print the version (of swaymsg) and quit."
|
||||
|
||||
complete -c swaymsg -s t -l type -fr --description "Specify the type of IPC message."
|
||||
complete -c swaymsg -s t -l type -fra 'get_workspaces' --description "Gets a JSON-encoded list of workspaces and their status."
|
||||
|
|
@ -18,8 +15,6 @@ complete -c swaymsg -s t -l type -fra 'get_marks' --description "Get a JSON-enco
|
|||
complete -c swaymsg -s t -l type -fra 'get_bar_config' --description "Get a JSON-encoded configuration for swaybar."
|
||||
complete -c swaymsg -s t -l type -fra 'get_version' --description "Get JSON-encoded version information for the running instance of sway."
|
||||
complete -c swaymsg -s t -l type -fra 'get_binding_modes' --description "Gets a JSON-encoded list of currently configured binding modes."
|
||||
complete -c swaymsg -s t -l type -fra 'get_binding_state' --description "Get JSON-encoded info about the current binding state."
|
||||
complete -c swaymsg -s t -l type -fra 'get_config' --description "Gets a JSON-encoded copy of the current configuration."
|
||||
complete -c swaymsg -s t -l type -fra 'get_seats' --description "Gets a JSON-encoded list of all seats, its properties and all assigned devices."
|
||||
complete -c swaymsg -s t -l type -fra 'send_tick' --description "Sends a tick event to all subscribed clients."
|
||||
complete -c swaymsg -s t -l type -fra 'subscribe' --description "Subscribe to a list of event types."
|
||||
|
|
|
|||
|
|
@ -1,30 +1,29 @@
|
|||
# swaynag
|
||||
complete -f -c swaynag
|
||||
complete -c swaynag -s C -l config -r --description 'The config file to use. Default: $HOME/.swaynag/config, $XDG_CONFIG_HOME/swaynag/config, and SYSCONFDIR/swaynag/config.'
|
||||
complete -c swaynag -s C -l config --description 'The config file to use. Default: $HOME/.swaylock/config, $XDG_CONFIG_HOME/swaylock/config, and SYSCONFDIR/swaylock/config.'
|
||||
complete -c swaynag -s d -l debug --description 'Enable debugging.'
|
||||
complete -c swaynag -s e -l edge -fr --description 'Set the edge to use: top or bottom'
|
||||
complete -c swaynag -s f -l font -r --description 'Set the font to use.'
|
||||
complete -c swaynag -s e -l edge --description 'Set the edge to use: top or bottom'
|
||||
complete -c swaynag -s f -l font --description 'Set the font to use.'
|
||||
complete -c swaynag -s h -l help --description 'Show help message and quit.'
|
||||
complete -c swaynag -s b -l button -fr --description 'Create a button with a text and an action which is executed when pressed. Multiple buttons can be defined by providing the flag multiple times.'
|
||||
complete -c swaynag -s b -l button --description 'Create a button with a text and an action which is executed when pressed. Multiple buttons can be defined by providing the flag multiple times.'
|
||||
complete -c swaynag -s l -l detailed-message --description 'Read a detailed message from stdin. A button to toggle details will be added. Details are shown in a scrollable multi-line text area.'
|
||||
complete -c swaynag -s L -l detailed-button -fr --description 'Set the text for the button that toggles details. This has no effect if there is not a detailed message. The default is "Toggle details".'
|
||||
complete -c swaynag -s m -l message -fr --description 'Set the message text.'
|
||||
complete -c swaynag -s o -l output -fr --description 'Set the output to use.'
|
||||
complete -c swaynag -s s -l dismiss-button -fr --description 'Sets the text for the dismiss nagbar button. The default is "X".'
|
||||
complete -c swaynag -s t -l type -fr --description 'Set the message type. Two types are created by default "error" and "warning". Custom types can be defined in the config file.'
|
||||
complete -c swaynag -s L -l detailed-button --description 'Set the text for the button that toggles details. This has no effect if there is not a detailed message. The default is "Toggle details".'
|
||||
complete -c swaynag -s m -l message --description 'Set the message text.'
|
||||
complete -c swaynag -s o -l output --description 'Set the output to use.'
|
||||
complete -c swaynag -s s -l dismiss-button --description 'Sets the text for the dismiss nagbar button. The default is "X".'
|
||||
complete -c swaynag -s t -l type --description 'Set the message type. Two types are created by default "error" and "warning". Custom types can be defined in the config file.'
|
||||
complete -c swaynag -s v -l version --description 'Show the version number and quit.'
|
||||
|
||||
# Appearance
|
||||
complete -c swaynag -l background -fr --description 'Set the color of the background.'
|
||||
complete -c swaynag -l border -fr --description 'Set the color of the border.'
|
||||
complete -c swaynag -l border-bottom -fr --description 'Set the color of the bottom border.'
|
||||
complete -c swaynag -l button-background -fr --description 'Set the color for the background for buttons.'
|
||||
complete -c swaynag -l text -fr --description 'Set the text color.'
|
||||
complete -c swaynag -l border-bottom-size -fr --description 'Set the thickness of the bottom border.'
|
||||
complete -c swaynag -l message-padding -fr --description 'Set the padding for the message.'
|
||||
complete -c swaynag -l details-border-size -fr --description 'Set the thickness for the details border.'
|
||||
complete -c swaynag -l button-border-size -fr --description 'Set the thickness for the button border.'
|
||||
complete -c swaynag -l button-gap -fr --description 'Set the size of the gap between buttons.'
|
||||
complete -c swaynag -l button-dismiss-gap -fr --description 'Set the size of the gap between the dismiss button and another button.'
|
||||
complete -c swaynag -l button-margin-right -fr --description 'Set the margin from the right of the dismiss button to edge.'
|
||||
complete -c swaynag -l button-padding -fr --description 'Set the padding for the button text.'
|
||||
complete -c swaynag -l background --description 'Set the color of the background.'
|
||||
complete -c swaynag -l border --description 'Set the color of the border.'
|
||||
complete -c swaynag -l border-bottom --description 'Set the color of the bottom border.'
|
||||
complete -c swaynag -l button-background --description 'Set the color for the background for buttons.'
|
||||
complete -c swaynag -l text --description 'Set the text color.'
|
||||
complete -c swaynag -l border-bottom-size --description 'Set the thickness of the bottom border.'
|
||||
complete -c swaynag -l message-padding --description 'Set the padding for the message.'
|
||||
complete -c swaynag -l details-border-size --description 'Set the thickness for the details border.'
|
||||
complete -c swaynag -l button-border-size --description 'Set the thickness for the button border.'
|
||||
complete -c swaynag -l button-gap --description 'Set the size of the gap between buttons.'
|
||||
complete -c swaynag -l button-dismiss-gap --description 'Set the size of the gap between the dismiss button and another button.'
|
||||
complete -c swaynag -l button-margin-right --description 'Set the margin from the right of the dismiss button to edge.'
|
||||
complete -c swaynag -l button-padding --description 'Set the padding for the button text.'
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
@ -23,18 +23,15 @@ types=(
|
|||
'get_bar_config'
|
||||
'get_version'
|
||||
'get_binding_modes'
|
||||
'get_binding_state'
|
||||
'get_config'
|
||||
'send_tick'
|
||||
'subscribe'
|
||||
)
|
||||
|
||||
_arguments -s \
|
||||
'(-h --help)'{-h,--help}'[Show help message and quit]' \
|
||||
'(-v --version)'{-v,--version}'[Show the version number and quit]' \
|
||||
'(-m --monitor)'{-m,--monitor}'[Monitor until killed (-t SUBSCRIBE only)]' \
|
||||
'(-p --pretty)'{-p,--pretty}'[Use pretty output even when not using a tty]' \
|
||||
'(-h --help)'{-h,--help}'[Show help message and quit]' \
|
||||
'(-q --quiet)'{-q,--quiet}'[Be quiet]' \
|
||||
'(-r --raw)'{-r,--raw}'[Use raw output even if using a tty]' \
|
||||
'(-s --socket)'{-s,--socket}'[Use the specified socket path]:files:_files' \
|
||||
'(-t --type)'{-t,--type}'[Specify the message type]:type:{_describe "type" types}' \
|
||||
'(-v --version)'{-v,--version}'[Show the version number and quit]'
|
||||
'(-t --type)'{-t,--type}'[Specify the message type]:type:{_describe "type" types}'
|
||||
|
|
|
|||
108
config.in
108
config.in
|
|
@ -14,9 +14,10 @@ set $down j
|
|||
set $up k
|
||||
set $right l
|
||||
# Your preferred terminal emulator
|
||||
set $term foot
|
||||
set $term urxvt
|
||||
# Your preferred application launcher
|
||||
set $menu wmenu-run
|
||||
# Note: it's recommended that you pass the final command to sway
|
||||
set $menu dmenu_path | dmenu | xargs swaymsg exec
|
||||
|
||||
### Output configuration
|
||||
#
|
||||
|
|
@ -35,7 +36,8 @@ 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
|
||||
|
|
@ -46,31 +48,27 @@ output * bg @datadir@/backgrounds/sway/Sway_Wallpaper_Blue_1920x1080.png fill
|
|||
#
|
||||
# Example configuration:
|
||||
#
|
||||
# input type:touchpad {
|
||||
# input "2:14:SynPS/2_Synaptics_TouchPad" {
|
||||
# dwt enabled
|
||||
# tap enabled
|
||||
# natural_scroll enabled
|
||||
# middle_emulation enabled
|
||||
# }
|
||||
#
|
||||
# input type:keyboard {
|
||||
# xkb_layout "eu"
|
||||
# }
|
||||
#
|
||||
# You can also configure each device individually.
|
||||
# You can get the names of your inputs by running: swaymsg -t get_inputs
|
||||
# Read `man 5 sway-input` for more information about this section.
|
||||
|
||||
### Key bindings
|
||||
#
|
||||
# Basics:
|
||||
#
|
||||
# Start a terminal
|
||||
# start a terminal
|
||||
bindsym $mod+Return exec $term
|
||||
|
||||
# Kill focused window
|
||||
# kill focused window
|
||||
bindsym $mod+Shift+q kill
|
||||
|
||||
# Start your launcher
|
||||
# start your launcher
|
||||
bindsym $mod+d exec $menu
|
||||
|
||||
# Drag floating windows by holding down $mod and left mouse button.
|
||||
|
|
@ -80,11 +78,11 @@ output * bg @datadir@/backgrounds/sway/Sway_Wallpaper_Blue_1920x1080.png fill
|
|||
# mouse button for dragging.
|
||||
floating_modifier $mod normal
|
||||
|
||||
# Reload the configuration file
|
||||
# reload the configuration file
|
||||
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'
|
||||
# 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'
|
||||
#
|
||||
# Moving around:
|
||||
#
|
||||
|
|
@ -93,18 +91,18 @@ output * bg @datadir@/backgrounds/sway/Sway_Wallpaper_Blue_1920x1080.png fill
|
|||
bindsym $mod+$down focus down
|
||||
bindsym $mod+$up focus up
|
||||
bindsym $mod+$right focus right
|
||||
# Or use $mod+[up|down|left|right]
|
||||
# or use $mod+[up|down|left|right]
|
||||
bindsym $mod+Left focus left
|
||||
bindsym $mod+Down focus down
|
||||
bindsym $mod+Up focus up
|
||||
bindsym $mod+Right focus right
|
||||
|
||||
# Move the focused window with the same, but add Shift
|
||||
# _move_ the focused window with the same, but add Shift
|
||||
bindsym $mod+Shift+$left move left
|
||||
bindsym $mod+Shift+$down move down
|
||||
bindsym $mod+Shift+$up move up
|
||||
bindsym $mod+Shift+$right move right
|
||||
# Ditto, with arrow keys
|
||||
# ditto, with arrow keys
|
||||
bindsym $mod+Shift+Left move left
|
||||
bindsym $mod+Shift+Down move down
|
||||
bindsym $mod+Shift+Up move up
|
||||
|
|
@ -112,28 +110,28 @@ output * bg @datadir@/backgrounds/sway/Sway_Wallpaper_Blue_1920x1080.png fill
|
|||
#
|
||||
# Workspaces:
|
||||
#
|
||||
# Switch to workspace
|
||||
bindsym $mod+1 workspace number 1
|
||||
bindsym $mod+2 workspace number 2
|
||||
bindsym $mod+3 workspace number 3
|
||||
bindsym $mod+4 workspace number 4
|
||||
bindsym $mod+5 workspace number 5
|
||||
bindsym $mod+6 workspace number 6
|
||||
bindsym $mod+7 workspace number 7
|
||||
bindsym $mod+8 workspace number 8
|
||||
bindsym $mod+9 workspace number 9
|
||||
bindsym $mod+0 workspace number 10
|
||||
# Move focused container to workspace
|
||||
bindsym $mod+Shift+1 move container to workspace number 1
|
||||
bindsym $mod+Shift+2 move container to workspace number 2
|
||||
bindsym $mod+Shift+3 move container to workspace number 3
|
||||
bindsym $mod+Shift+4 move container to workspace number 4
|
||||
bindsym $mod+Shift+5 move container to workspace number 5
|
||||
bindsym $mod+Shift+6 move container to workspace number 6
|
||||
bindsym $mod+Shift+7 move container to workspace number 7
|
||||
bindsym $mod+Shift+8 move container to workspace number 8
|
||||
bindsym $mod+Shift+9 move container to workspace number 9
|
||||
bindsym $mod+Shift+0 move container to workspace number 10
|
||||
# switch to workspace
|
||||
bindsym $mod+1 workspace 1
|
||||
bindsym $mod+2 workspace 2
|
||||
bindsym $mod+3 workspace 3
|
||||
bindsym $mod+4 workspace 4
|
||||
bindsym $mod+5 workspace 5
|
||||
bindsym $mod+6 workspace 6
|
||||
bindsym $mod+7 workspace 7
|
||||
bindsym $mod+8 workspace 8
|
||||
bindsym $mod+9 workspace 9
|
||||
bindsym $mod+0 workspace 10
|
||||
# move focused container to workspace
|
||||
bindsym $mod+Shift+1 move container to workspace 1
|
||||
bindsym $mod+Shift+2 move container to workspace 2
|
||||
bindsym $mod+Shift+3 move container to workspace 3
|
||||
bindsym $mod+Shift+4 move container to workspace 4
|
||||
bindsym $mod+Shift+5 move container to workspace 5
|
||||
bindsym $mod+Shift+6 move container to workspace 6
|
||||
bindsym $mod+Shift+7 move container to workspace 7
|
||||
bindsym $mod+Shift+8 move container to workspace 8
|
||||
bindsym $mod+Shift+9 move container to workspace 9
|
||||
bindsym $mod+Shift+0 move container to workspace 10
|
||||
# Note: workspaces can have any name you want, not just numbers.
|
||||
# We just use 1-10 as the default.
|
||||
#
|
||||
|
|
@ -159,7 +157,7 @@ output * bg @datadir@/backgrounds/sway/Sway_Wallpaper_Blue_1920x1080.png fill
|
|||
# Swap focus between the tiling area and the floating area
|
||||
bindsym $mod+space focus mode_toggle
|
||||
|
||||
# Move focus to the parent container
|
||||
# move focus to the parent container
|
||||
bindsym $mod+a focus parent
|
||||
#
|
||||
# Scratchpad:
|
||||
|
|
@ -186,39 +184,17 @@ mode "resize" {
|
|||
bindsym $up resize shrink height 10px
|
||||
bindsym $right resize grow width 10px
|
||||
|
||||
# Ditto, with arrow keys
|
||||
# ditto, with arrow keys
|
||||
bindsym Left resize shrink width 10px
|
||||
bindsym Down resize grow height 10px
|
||||
bindsym Up resize shrink height 10px
|
||||
bindsym Right resize grow width 10px
|
||||
|
||||
# Return to default mode
|
||||
# return to default mode
|
||||
bindsym Return mode "default"
|
||||
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 control media via playerctl
|
||||
bindsym --locked XF86AudioPlay exec playerctl play-pause
|
||||
bindsym --locked XF86AudioPause exec playerctl play-pause
|
||||
bindsym --locked XF86AudioPrev exec playerctl previous
|
||||
bindsym --locked XF86AudioNext exec playerctl next
|
||||
bindsym --locked XF86AudioStop exec playerctl stop
|
||||
|
||||
# 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:
|
||||
|
|
@ -229,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
|
||||
|
|
|
|||
28
contrib/inactive-windows-transparency.py
Executable file
28
contrib/inactive-windows-transparency.py
Executable file
|
|
@ -0,0 +1,28 @@
|
|||
#!/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.
|
||||
|
||||
import i3ipc
|
||||
|
||||
transparency_val = '0.8';
|
||||
ipc = i3ipc.Connection()
|
||||
prev_focused = None
|
||||
|
||||
for window in ipc.get_tree():
|
||||
if window.focused:
|
||||
prev_focused = window
|
||||
else:
|
||||
window.command('opacity ' + transparency_val)
|
||||
|
||||
def on_window_focus(ipc, focused):
|
||||
global prev_focused
|
||||
if focused.container.id != prev_focused.id: # https://github.com/swaywm/sway/issues/2859
|
||||
focused.container.command('opacity 1')
|
||||
prev_focused.command('opacity ' + transparency_val)
|
||||
prev_focused = focused.container
|
||||
|
||||
ipc.on("window::focus", on_window_focus)
|
||||
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.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,9 +1,13 @@
|
|||
#ifndef _SWAY_CAIRO_UTIL_H
|
||||
#define _SWAY_CAIRO_UTIL_H
|
||||
#ifndef _SWAY_CAIRO_H
|
||||
#define _SWAY_CAIRO_H
|
||||
|
||||
#include "config.h"
|
||||
#include <stdint.h>
|
||||
#include <cairo.h>
|
||||
#include <cairo/cairo.h>
|
||||
#include <wayland-client-protocol.h>
|
||||
#if HAVE_GDK_PIXBUF
|
||||
#include <gdk-pixbuf/gdk-pixbuf.h>
|
||||
#endif
|
||||
|
||||
void cairo_set_source_u32(cairo_t *cairo, uint32_t color);
|
||||
cairo_subpixel_order_t to_cairo_subpixel_order(enum wl_output_subpixel subpixel);
|
||||
|
|
@ -11,4 +15,11 @@ cairo_subpixel_order_t to_cairo_subpixel_order(enum wl_output_subpixel subpixel)
|
|||
cairo_surface_t *cairo_image_surface_scale(cairo_surface_t *image,
|
||||
int width, int height);
|
||||
|
||||
#if HAVE_GDK_PIXBUF
|
||||
|
||||
cairo_surface_t* gdk_cairo_image_surface_create_from_pixbuf(
|
||||
const GdkPixbuf *gdkbuf);
|
||||
|
||||
#endif // HAVE_GDK_PIXBUF
|
||||
|
||||
#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,12 +1,7 @@
|
|||
#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>
|
||||
|
||||
#include "ipc.h"
|
||||
|
||||
|
|
@ -41,9 +36,5 @@ struct ipc_response *ipc_recv_response(int socketfd);
|
|||
* Free ipc_response struct
|
||||
*/
|
||||
void free_ipc_response(struct ipc_response *response);
|
||||
/**
|
||||
* Sets the receive timeout for the IPC socket
|
||||
*/
|
||||
bool ipc_set_recv_timeout(int socketfd, struct timeval tv);
|
||||
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -17,7 +17,6 @@ enum ipc_command_type {
|
|||
IPC_GET_CONFIG = 9,
|
||||
IPC_SEND_TICK = 10,
|
||||
IPC_SYNC = 11,
|
||||
IPC_GET_BINDING_STATE = 12,
|
||||
|
||||
// sway-specific command types
|
||||
IPC_GET_INPUTS = 100,
|
||||
|
|
@ -35,7 +34,6 @@ enum ipc_command_type {
|
|||
|
||||
// sway-specific event types
|
||||
IPC_EVENT_BAR_STATE_UPDATE = ((1<<31) | 20),
|
||||
IPC_EVENT_INPUT = ((1<<31) | 21),
|
||||
};
|
||||
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -33,26 +33,22 @@ void _sway_vlog(sway_log_importance_t verbosity, const char *format, va_list arg
|
|||
void _sway_abort(const char *filename, ...) ATTRIB_PRINTF(1, 2);
|
||||
bool _sway_assert(bool condition, const char* format, ...) ATTRIB_PRINTF(2, 3);
|
||||
|
||||
#ifdef SWAY_REL_SRC_DIR
|
||||
// strip prefix from __FILE__, leaving the path relative to the project root
|
||||
#define _SWAY_FILENAME ((const char *)__FILE__ + sizeof(SWAY_REL_SRC_DIR) - 1)
|
||||
#else
|
||||
#define _SWAY_FILENAME __FILE__
|
||||
#endif
|
||||
// TODO: get meson to precompute this, for better reproducibility/less overhead
|
||||
const char *_sway_strip_path(const char *filepath);
|
||||
|
||||
#define sway_log(verb, fmt, ...) \
|
||||
_sway_log(verb, "[%s:%d] " fmt, _SWAY_FILENAME, __LINE__, ##__VA_ARGS__)
|
||||
_sway_log(verb, "[%s:%d] " fmt, _sway_strip_path(__FILE__), __LINE__, ##__VA_ARGS__)
|
||||
|
||||
#define sway_vlog(verb, fmt, args) \
|
||||
_sway_vlog(verb, "[%s:%d] " fmt, _SWAY_FILENAME, __LINE__, args)
|
||||
_sway_vlog(verb, "[%s:%d] " fmt, _sway_strip_path(__FILE__), __LINE__, args)
|
||||
|
||||
#define sway_log_errno(verb, fmt, ...) \
|
||||
sway_log(verb, fmt ": %s", ##__VA_ARGS__, strerror(errno))
|
||||
|
||||
#define sway_abort(FMT, ...) \
|
||||
_sway_abort("[%s:%d] " FMT, _SWAY_FILENAME, __LINE__, ##__VA_ARGS__)
|
||||
_sway_abort("[%s:%d] " FMT, _sway_strip_path(__FILE__), __LINE__, ##__VA_ARGS__)
|
||||
|
||||
#define sway_assert(COND, FMT, ...) \
|
||||
_sway_assert(COND, "[%s:%d] %s:" FMT, _SWAY_FILENAME, __LINE__, __PRETTY_FUNCTION__, ##__VA_ARGS__)
|
||||
_sway_assert(COND, "[%s:%d] %s:" FMT, _sway_strip_path(__FILE__), __LINE__, __PRETTY_FUNCTION__, ##__VA_ARGS__)
|
||||
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -3,9 +3,8 @@
|
|||
#include <stdarg.h>
|
||||
#include <stdbool.h>
|
||||
#include <stdint.h>
|
||||
#include <cairo.h>
|
||||
#include <cairo/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
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
#ifndef _SWAY_BUFFERS_H
|
||||
#define _SWAY_BUFFERS_H
|
||||
#include <cairo.h>
|
||||
#include <cairo/cairo.h>
|
||||
#include <pango/pangocairo.h>
|
||||
#include <stdbool.h>
|
||||
#include <stdint.h>
|
||||
|
|
|
|||
|
|
@ -1,17 +1,10 @@
|
|||
#ifndef _SWAY_STRINGOP_H
|
||||
#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);
|
||||
char *strip_comments(char *str);
|
||||
void strip_quotes(char *str);
|
||||
|
||||
// strcat that does nothing if dest or src is NULL
|
||||
|
|
@ -19,7 +12,7 @@ char *lenient_strcat(char *dest, const char *src);
|
|||
char *lenient_strncat(char *dest, const char *src, size_t len);
|
||||
|
||||
// strcmp that also handles null pointers.
|
||||
int lenient_strcmp(const char *a, const char *b);
|
||||
int lenient_strcmp(char *a, char *b);
|
||||
|
||||
// Simply split a string with delims, free with `list_free_items_and_destroy`
|
||||
list_t *split_string(const char *str, const char *delims);
|
||||
|
|
@ -28,18 +21,22 @@ list_t *split_string(const char *str, const char *delims);
|
|||
char **split_args(const char *str, int *argc);
|
||||
void free_argv(int argc, char **argv);
|
||||
|
||||
char *code_strchr(const char *string, char delimiter);
|
||||
char *code_strstr(const char *haystack, const char *needle);
|
||||
int unescape_string(char *string);
|
||||
char *join_args(char **argv, int argc);
|
||||
char *join_list(list_t *list, char *separator);
|
||||
|
||||
/**
|
||||
* Add quotes around any argv with whitespaces.
|
||||
*/
|
||||
void add_quotes(char **argv, int argc);
|
||||
|
||||
// split string into 2 by delim.
|
||||
char *cmdsep(char **stringp, const char *delim);
|
||||
// Split string into 2 by delim, handle quotes
|
||||
char *argsep(char **stringp, const char *delim, char *matched_delim);
|
||||
char *argsep(char **stringp, const char *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);
|
||||
|
||||
bool has_prefix(const char *str, const char *prefix);
|
||||
const char *strcasestr(const char *haystack, const char *needle);
|
||||
|
||||
#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,9 +46,8 @@ 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 *cmd_handlers, size_t handlers_size);
|
||||
|
||||
struct cmd_handler *find_handler(char *line, struct cmd_handler *cmd_handlers,
|
||||
int handlers_size);
|
||||
/**
|
||||
* Parse and executes a command.
|
||||
*
|
||||
|
|
@ -69,7 +67,7 @@ struct cmd_results *config_command(char *command, char **new_block);
|
|||
* Parse and handle a sub command
|
||||
*/
|
||||
struct cmd_results *config_subcommand(char **argv, int argc,
|
||||
const struct cmd_handler *handlers, size_t handlers_size);
|
||||
struct cmd_handler *handlers, size_t handlers_size);
|
||||
/*
|
||||
* Parses a command policy rule.
|
||||
*/
|
||||
|
|
@ -77,7 +75,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.
|
||||
*/
|
||||
|
|
@ -89,6 +87,8 @@ void free_cmd_results(struct cmd_results *results);
|
|||
*/
|
||||
char *cmd_results_to_json(list_t *res_list);
|
||||
|
||||
struct cmd_results *add_color(char *buffer, const char *color);
|
||||
|
||||
/**
|
||||
* TODO: Move this function and its dependent functions to container.c.
|
||||
*/
|
||||
|
|
@ -98,24 +98,14 @@ void container_resize_tiled(struct sway_container *parent, uint32_t axis,
|
|||
struct sway_container *container_find_resize_parent(struct sway_container *con,
|
||||
uint32_t edge);
|
||||
|
||||
/**
|
||||
* Handlers shared by exec and exec_always.
|
||||
*/
|
||||
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;
|
||||
|
|
@ -145,7 +135,6 @@ sway_cmd cmd_fullscreen;
|
|||
sway_cmd cmd_gaps;
|
||||
sway_cmd cmd_hide_edge_borders;
|
||||
sway_cmd cmd_include;
|
||||
sway_cmd cmd_inhibit_idle;
|
||||
sway_cmd cmd_input;
|
||||
sway_cmd cmd_seat;
|
||||
sway_cmd cmd_ipc;
|
||||
|
|
@ -153,19 +142,17 @@ sway_cmd cmd_kill;
|
|||
sway_cmd cmd_layout;
|
||||
sway_cmd cmd_log_colors;
|
||||
sway_cmd cmd_mark;
|
||||
sway_cmd cmd_max_render_time;
|
||||
sway_cmd cmd_mode;
|
||||
sway_cmd cmd_mouse_warping;
|
||||
sway_cmd cmd_move;
|
||||
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;
|
||||
|
|
@ -173,7 +160,6 @@ sway_cmd cmd_resize;
|
|||
sway_cmd cmd_scratchpad;
|
||||
sway_cmd cmd_seamless_mouse;
|
||||
sway_cmd cmd_set;
|
||||
sway_cmd cmd_shortcuts_inhibitor;
|
||||
sway_cmd cmd_show_marks;
|
||||
sway_cmd cmd_smart_borders;
|
||||
sway_cmd cmd_smart_gaps;
|
||||
|
|
@ -191,10 +177,6 @@ sway_cmd cmd_title_align;
|
|||
sway_cmd cmd_title_format;
|
||||
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;
|
||||
sway_cmd cmd_workspace;
|
||||
|
|
@ -228,11 +210,8 @@ sway_cmd bar_cmd_tray_bindcode;
|
|||
sway_cmd bar_cmd_tray_bindsym;
|
||||
sway_cmd bar_cmd_tray_output;
|
||||
sway_cmd bar_cmd_tray_padding;
|
||||
sway_cmd bar_cmd_unbindcode;
|
||||
sway_cmd bar_cmd_unbindsym;
|
||||
sway_cmd bar_cmd_wrap_scroll;
|
||||
sway_cmd bar_cmd_workspace_buttons;
|
||||
sway_cmd bar_cmd_workspace_min_width;
|
||||
|
||||
sway_cmd bar_colors_cmd_active_workspace;
|
||||
sway_cmd bar_colors_cmd_background;
|
||||
|
|
@ -248,72 +227,46 @@ sway_cmd bar_colors_cmd_urgent_workspace;
|
|||
|
||||
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;
|
||||
sway_cmd input_cmd_map_to_output;
|
||||
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;
|
||||
sway_cmd input_cmd_tool_mode;
|
||||
sway_cmd input_cmd_xkb_capslock;
|
||||
sway_cmd input_cmd_xkb_file;
|
||||
sway_cmd input_cmd_xkb_layout;
|
||||
sway_cmd input_cmd_xkb_model;
|
||||
sway_cmd input_cmd_xkb_numlock;
|
||||
sway_cmd input_cmd_xkb_options;
|
||||
sway_cmd input_cmd_xkb_rules;
|
||||
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_hdr;
|
||||
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;
|
||||
sway_cmd seat_cmd_fallback;
|
||||
sway_cmd seat_cmd_hide_cursor;
|
||||
sway_cmd seat_cmd_idle_inhibit;
|
||||
sway_cmd seat_cmd_idle_wake;
|
||||
sway_cmd seat_cmd_keyboard_grouping;
|
||||
sway_cmd seat_cmd_pointer_constraint;
|
||||
sway_cmd seat_cmd_shortcuts_inhibitor;
|
||||
sway_cmd seat_cmd_xcursor_theme;
|
||||
|
||||
sway_cmd cmd_ipc_cmd;
|
||||
sway_cmd cmd_ipc_events;
|
||||
|
|
|
|||
|
|
@ -4,22 +4,14 @@
|
|||
#include <stdint.h>
|
||||
#include <string.h>
|
||||
#include <time.h>
|
||||
#include <wlr/interfaces/wlr_switch.h>
|
||||
#include <wlr/types/wlr_tablet_tool.h>
|
||||
#include <wlr/util/box.h>
|
||||
#include <wlr/render/color.h>
|
||||
#include <wlr/types/wlr_box.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
|
||||
|
||||
|
|
@ -31,30 +23,24 @@ struct sway_variable {
|
|||
char *value;
|
||||
};
|
||||
|
||||
|
||||
enum binding_input_type {
|
||||
BINDING_KEYCODE,
|
||||
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
|
||||
};
|
||||
|
||||
enum binding_flags {
|
||||
BINDING_RELEASE = 1 << 0,
|
||||
BINDING_LOCKED = 1 << 1, // keyboard only
|
||||
BINDING_BORDER = 1 << 2, // mouse only; trigger on container border
|
||||
BINDING_CONTENTS = 1 << 3, // mouse only; trigger on container contents
|
||||
BINDING_TITLEBAR = 1 << 4, // mouse only; trigger on container titlebar
|
||||
BINDING_CODE = 1 << 5, // keyboard only; convert keysyms into keycodes
|
||||
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
|
||||
BINDING_RELEASE=1,
|
||||
BINDING_LOCKED=2, // keyboard only
|
||||
BINDING_BORDER=4, // mouse only; trigger on container border
|
||||
BINDING_CONTENTS=8, // mouse only; trigger on container contents
|
||||
BINDING_TITLEBAR=16, // mouse only; trigger on container titlebar
|
||||
};
|
||||
|
||||
/**
|
||||
* A key (or mouse) binding and an associated command.
|
||||
* A key binding and an associated command.
|
||||
*/
|
||||
struct sway_binding {
|
||||
enum binding_input_type type;
|
||||
|
|
@ -62,35 +48,15 @@ struct sway_binding {
|
|||
char *input;
|
||||
uint32_t flags;
|
||||
list_t *keys; // sorted in ascending order
|
||||
list_t *syms; // sorted in ascending order; NULL if BINDING_CODE is not set
|
||||
uint32_t modifiers;
|
||||
xkb_layout_index_t group;
|
||||
char *command;
|
||||
};
|
||||
|
||||
enum sway_switch_trigger {
|
||||
SWAY_SWITCH_TRIGGER_OFF,
|
||||
SWAY_SWITCH_TRIGGER_ON,
|
||||
SWAY_SWITCH_TRIGGER_TOGGLE,
|
||||
};
|
||||
|
||||
/**
|
||||
* A laptop switch binding and an associated command.
|
||||
*/
|
||||
struct sway_switch_binding {
|
||||
enum wlr_switch_type type;
|
||||
enum sway_switch_trigger trigger;
|
||||
uint32_t flags;
|
||||
char *command;
|
||||
};
|
||||
|
||||
/**
|
||||
* A gesture binding and an associated command.
|
||||
* A mouse binding and an associated command.
|
||||
*/
|
||||
struct sway_gesture_binding {
|
||||
char *input;
|
||||
uint32_t flags;
|
||||
struct gesture gesture;
|
||||
struct sway_mouse_binding {
|
||||
uint32_t button;
|
||||
char *command;
|
||||
};
|
||||
|
||||
|
|
@ -112,8 +78,6 @@ struct sway_mode {
|
|||
list_t *keysym_bindings;
|
||||
list_t *keycode_bindings;
|
||||
list_t *mouse_bindings;
|
||||
list_t *switch_bindings;
|
||||
list_t *gesture_bindings;
|
||||
bool pango;
|
||||
};
|
||||
|
||||
|
|
@ -123,47 +87,25 @@ struct input_config_mapped_from_region {
|
|||
bool mm;
|
||||
};
|
||||
|
||||
struct calibration_matrix {
|
||||
bool configured;
|
||||
float matrix[6];
|
||||
};
|
||||
|
||||
enum input_config_mapped_to {
|
||||
MAPPED_TO_DEFAULT,
|
||||
MAPPED_TO_OUTPUT,
|
||||
MAPPED_TO_REGION,
|
||||
};
|
||||
|
||||
struct input_config_tool {
|
||||
enum wlr_tablet_tool_type type;
|
||||
enum sway_tablet_tool_mode mode;
|
||||
};
|
||||
|
||||
/**
|
||||
* options for input devices
|
||||
*/
|
||||
struct input_config {
|
||||
char *identifier;
|
||||
const char *input_type;
|
||||
|
||||
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;
|
||||
|
|
@ -174,20 +116,12 @@ struct input_config {
|
|||
char *xkb_options;
|
||||
char *xkb_rules;
|
||||
char *xkb_variant;
|
||||
char *xkb_file;
|
||||
|
||||
bool xkb_file_is_set;
|
||||
|
||||
int xkb_numlock;
|
||||
int xkb_capslock;
|
||||
|
||||
struct input_config_mapped_from_region *mapped_from_region;
|
||||
|
||||
enum input_config_mapped_to mapped_to;
|
||||
char *mapped_to_output;
|
||||
struct wlr_box *mapped_to_region;
|
||||
|
||||
list_t *tools;
|
||||
|
||||
bool capturable;
|
||||
struct wlr_box region;
|
||||
|
|
@ -201,37 +135,10 @@ struct seat_attachment_config {
|
|||
// TODO other things are configured here for some reason
|
||||
};
|
||||
|
||||
enum seat_config_hide_cursor_when_typing {
|
||||
HIDE_WHEN_TYPING_DEFAULT, // the default is currently disabled
|
||||
HIDE_WHEN_TYPING_ENABLE,
|
||||
HIDE_WHEN_TYPING_DISABLE,
|
||||
};
|
||||
|
||||
enum seat_config_allow_constrain {
|
||||
CONSTRAIN_DEFAULT, // the default is currently enabled
|
||||
CONSTRAIN_DEFAULT, // the default is currently enabled
|
||||
CONSTRAIN_ENABLE,
|
||||
CONSTRAIN_DISABLE,
|
||||
};
|
||||
|
||||
enum seat_config_shortcuts_inhibit {
|
||||
SHORTCUTS_INHIBIT_DEFAULT, // the default is currently enabled
|
||||
SHORTCUTS_INHIBIT_ENABLE,
|
||||
SHORTCUTS_INHIBIT_DISABLE,
|
||||
};
|
||||
|
||||
enum seat_keyboard_grouping {
|
||||
KEYBOARD_GROUP_DEFAULT, // the default is currently smart
|
||||
KEYBOARD_GROUP_NONE,
|
||||
KEYBOARD_GROUP_SMART, // keymap and repeat info
|
||||
};
|
||||
|
||||
enum sway_input_idle_source {
|
||||
IDLE_SOURCE_KEYBOARD = 1 << 0,
|
||||
IDLE_SOURCE_POINTER = 1 << 1,
|
||||
IDLE_SOURCE_TOUCH = 1 << 2,
|
||||
IDLE_SOURCE_TABLET_PAD = 1 << 3,
|
||||
IDLE_SOURCE_TABLET_TOOL = 1 << 4,
|
||||
IDLE_SOURCE_SWITCH = 1 << 5,
|
||||
CONSTRAIN_DISABLE
|
||||
};
|
||||
|
||||
/**
|
||||
|
|
@ -242,35 +149,13 @@ struct seat_config {
|
|||
int fallback; // -1 means not set
|
||||
list_t *attachments; // list of seat_attachment configs
|
||||
int hide_cursor_timeout;
|
||||
enum seat_config_hide_cursor_when_typing hide_cursor_when_typing;
|
||||
enum seat_config_allow_constrain allow_constrain;
|
||||
enum seat_config_shortcuts_inhibit shortcuts_inhibit;
|
||||
enum seat_keyboard_grouping keyboard_grouping;
|
||||
uint32_t idle_inhibit_sources, idle_wake_sources;
|
||||
struct {
|
||||
char *name;
|
||||
int size;
|
||||
} xcursor_theme;
|
||||
};
|
||||
|
||||
enum scale_filter_mode {
|
||||
SCALE_FILTER_DEFAULT, // the default is currently smart
|
||||
SCALE_FILTER_LINEAR,
|
||||
SCALE_FILTER_NEAREST,
|
||||
SCALE_FILTER_SMART,
|
||||
};
|
||||
|
||||
enum render_bit_depth {
|
||||
RENDER_BIT_DEPTH_DEFAULT, // the default is currently 8 for SDR, 10 for HDR
|
||||
RENDER_BIT_DEPTH_6,
|
||||
RENDER_BIT_DEPTH_8,
|
||||
RENDER_BIT_DEPTH_10,
|
||||
};
|
||||
|
||||
enum color_profile {
|
||||
COLOR_PROFILE_DEFAULT, // default is Transform with NULL color_transform
|
||||
COLOR_PROFILE_TRANSFORM, // use color_transform from output_config
|
||||
COLOR_PROFILE_TRANSFORM_WITH_DEVICE_PRIMARIES, // create transform from wlr_output
|
||||
enum config_dpms {
|
||||
DPMS_IGNORE,
|
||||
DPMS_ON,
|
||||
DPMS_OFF
|
||||
};
|
||||
|
||||
/**
|
||||
|
|
@ -281,27 +166,16 @@ enum color_profile {
|
|||
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;
|
||||
int32_t transform;
|
||||
enum wl_output_subpixel subpixel;
|
||||
int max_render_time; // In milliseconds
|
||||
int adaptive_sync;
|
||||
enum render_bit_depth render_bit_depth;
|
||||
enum color_profile color_profile;
|
||||
struct wlr_color_transform *color_transform;
|
||||
int allow_tearing;
|
||||
int hdr;
|
||||
|
||||
char *background;
|
||||
char *background_option;
|
||||
char *background_fallback;
|
||||
enum config_dpms dpms_state;
|
||||
};
|
||||
|
||||
/**
|
||||
|
|
@ -314,12 +188,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.
|
||||
|
|
@ -331,17 +199,7 @@ 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;
|
||||
struct wl_listener client_destroy;
|
||||
|
||||
/**
|
||||
* One of "dock", "hide", "invisible"
|
||||
*
|
||||
|
|
@ -368,7 +226,8 @@ struct bar_config {
|
|||
char *position;
|
||||
list_t *bindings;
|
||||
char *status_command;
|
||||
enum pango_markup_config pango_markup;
|
||||
bool pango_markup;
|
||||
char *swaybar_command;
|
||||
char *font;
|
||||
int height; // -1 not defined
|
||||
bool workspace_buttons;
|
||||
|
|
@ -379,9 +238,9 @@ struct bar_config {
|
|||
bool binding_mode_indicator;
|
||||
bool verbose;
|
||||
struct side_gaps gaps;
|
||||
pid_t pid;
|
||||
int status_padding;
|
||||
int status_edge_padding;
|
||||
uint32_t workspace_min_width;
|
||||
struct {
|
||||
char *background;
|
||||
char *statusline;
|
||||
|
|
@ -437,16 +296,12 @@ struct border_colors {
|
|||
};
|
||||
|
||||
enum edge_border_types {
|
||||
E_NONE, /**< Don't hide edge borders */
|
||||
E_VERTICAL, /**< hide vertical edge borders */
|
||||
E_HORIZONTAL, /**< hide horizontal edge borders */
|
||||
E_BOTH, /**< hide vertical and horizontal edge borders */
|
||||
};
|
||||
|
||||
enum edge_border_smart_types {
|
||||
ESMART_OFF,
|
||||
ESMART_ON, /**< hide edges if precisely one window is present in workspace */
|
||||
ESMART_NO_GAPS, /**< hide edges if one window and gaps to edge is zero */
|
||||
E_NONE, /**< Don't hide edge borders */
|
||||
E_VERTICAL, /**< hide vertical edge borders */
|
||||
E_HORIZONTAL, /**< hide horizontal edge borders */
|
||||
E_BOTH, /**< hide vertical and horizontal edge borders */
|
||||
E_SMART, /**< hide both if precisely one window is present in workspace */
|
||||
E_SMART_NO_GAPS, /**< hide both if one window and gaps to edge is zero */
|
||||
};
|
||||
|
||||
enum sway_popup_during_fullscreen {
|
||||
|
|
@ -455,35 +310,85 @@ enum sway_popup_during_fullscreen {
|
|||
POPUP_LEAVE,
|
||||
};
|
||||
|
||||
enum command_context {
|
||||
CONTEXT_CONFIG = 1,
|
||||
CONTEXT_BINDING = 2,
|
||||
CONTEXT_IPC = 4,
|
||||
CONTEXT_CRITERIA = 8,
|
||||
CONTEXT_ALL = 0xFFFFFFFF,
|
||||
};
|
||||
|
||||
struct command_policy {
|
||||
char *command;
|
||||
uint32_t context;
|
||||
};
|
||||
|
||||
enum secure_feature {
|
||||
FEATURE_LOCK = 1,
|
||||
FEATURE_PANEL = 2,
|
||||
FEATURE_BACKGROUND = 4,
|
||||
FEATURE_SCREENSHOT = 8,
|
||||
FEATURE_FULLSCREEN = 16,
|
||||
FEATURE_KEYBOARD = 32,
|
||||
FEATURE_MOUSE = 64,
|
||||
};
|
||||
|
||||
struct feature_policy {
|
||||
char *program;
|
||||
uint32_t features;
|
||||
};
|
||||
|
||||
enum ipc_feature {
|
||||
IPC_FEATURE_COMMAND = 1,
|
||||
IPC_FEATURE_GET_WORKSPACES = 2,
|
||||
IPC_FEATURE_GET_OUTPUTS = 4,
|
||||
IPC_FEATURE_GET_TREE = 8,
|
||||
IPC_FEATURE_GET_MARKS = 16,
|
||||
IPC_FEATURE_GET_BAR_CONFIG = 32,
|
||||
IPC_FEATURE_GET_VERSION = 64,
|
||||
IPC_FEATURE_GET_INPUTS = 128,
|
||||
IPC_FEATURE_EVENT_WORKSPACE = 256,
|
||||
IPC_FEATURE_EVENT_OUTPUT = 512,
|
||||
IPC_FEATURE_EVENT_MODE = 1024,
|
||||
IPC_FEATURE_EVENT_WINDOW = 2048,
|
||||
IPC_FEATURE_EVENT_BINDING = 4096,
|
||||
IPC_FEATURE_EVENT_INPUT = 8192,
|
||||
IPC_FEATURE_GET_SEATS = 16384,
|
||||
|
||||
IPC_FEATURE_ALL_COMMANDS =
|
||||
1 | 2 | 4 | 8 | 16 | 32 | 64 | 128 | 16384,
|
||||
IPC_FEATURE_ALL_EVENTS = 256 | 512 | 1024 | 2048 | 4096 | 8192,
|
||||
|
||||
IPC_FEATURE_ALL = IPC_FEATURE_ALL_COMMANDS | IPC_FEATURE_ALL_EVENTS,
|
||||
};
|
||||
|
||||
struct ipc_policy {
|
||||
char *program;
|
||||
uint32_t features;
|
||||
};
|
||||
|
||||
enum focus_follows_mouse_mode {
|
||||
FOLLOWS_NO,
|
||||
FOLLOWS_YES,
|
||||
FOLLOWS_ALWAYS,
|
||||
FOLLOWS_ALWAYS
|
||||
};
|
||||
|
||||
enum focus_wrapping_mode {
|
||||
WRAP_NO,
|
||||
WRAP_YES,
|
||||
WRAP_FORCE,
|
||||
WRAP_WORKSPACE,
|
||||
WRAP_FORCE
|
||||
};
|
||||
|
||||
enum mouse_warping_mode {
|
||||
WARP_NO,
|
||||
WARP_OUTPUT,
|
||||
WARP_CONTAINER,
|
||||
WARP_CONTAINER
|
||||
};
|
||||
|
||||
enum alignment {
|
||||
ALIGN_LEFT,
|
||||
ALIGN_CENTER,
|
||||
ALIGN_RIGHT,
|
||||
};
|
||||
|
||||
enum xwayland_mode {
|
||||
XWAYLAND_MODE_DISABLED,
|
||||
XWAYLAND_MODE_LAZY,
|
||||
XWAYLAND_MODE_IMMEDIATE,
|
||||
ALIGN_RIGHT
|
||||
};
|
||||
|
||||
/**
|
||||
|
|
@ -499,13 +404,13 @@ struct sway_config {
|
|||
list_t *workspace_configs;
|
||||
list_t *output_configs;
|
||||
list_t *input_configs;
|
||||
list_t *input_type_configs;
|
||||
list_t *seat_configs;
|
||||
list_t *criteria;
|
||||
list_t *no_focus;
|
||||
list_t *active_bar_modifiers;
|
||||
struct sway_mode *current_mode;
|
||||
struct bar_config *current_bar;
|
||||
char *swaybg_command;
|
||||
uint32_t floating_mod;
|
||||
bool floating_mod_inverse;
|
||||
uint32_t dragging_key;
|
||||
|
|
@ -516,10 +421,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;
|
||||
|
|
@ -527,12 +431,7 @@ struct sway_config {
|
|||
size_t urgent_timeout;
|
||||
enum sway_fowa focus_on_window_activation;
|
||||
enum sway_popup_during_fullscreen popup_during_fullscreen;
|
||||
enum xwayland_mode xwayland;
|
||||
|
||||
// swaybg
|
||||
char *swaybg_command;
|
||||
struct wl_client *swaybg_client;
|
||||
struct wl_listener swaybg_client_destroy;
|
||||
bool xwayland;
|
||||
|
||||
// Flags
|
||||
enum focus_follows_mouse_mode focus_follows_mouse;
|
||||
|
|
@ -546,17 +445,15 @@ 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;
|
||||
|
||||
list_t *config_chain;
|
||||
bool user_config_path;
|
||||
const char *current_config_path;
|
||||
const char *current_config;
|
||||
int current_config_line_number;
|
||||
|
|
@ -567,30 +464,28 @@ struct sway_config {
|
|||
int border_thickness;
|
||||
int floating_border_thickness;
|
||||
enum edge_border_types hide_edge_borders;
|
||||
enum edge_border_smart_types hide_edge_borders_smart;
|
||||
bool hide_lone_tab;
|
||||
enum edge_border_types saved_edge_borders;
|
||||
|
||||
// border colors
|
||||
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;
|
||||
int32_t floating_minimum_width;
|
||||
int32_t floating_minimum_height;
|
||||
|
||||
// The keysym to keycode translation
|
||||
struct xkb_state *keysym_translation_state;
|
||||
// Security
|
||||
list_t *command_policies;
|
||||
list_t *feature_policies;
|
||||
list_t *ipc_policies;
|
||||
|
||||
// Context for command handlers
|
||||
struct {
|
||||
|
|
@ -601,7 +496,7 @@ struct sway_config {
|
|||
struct sway_node *node;
|
||||
struct sway_container *container;
|
||||
struct sway_workspace *workspace;
|
||||
bool node_overridden; // True if the node is selected by means other than focus
|
||||
bool using_criteria;
|
||||
struct {
|
||||
int argc;
|
||||
char **argv;
|
||||
|
|
@ -618,7 +513,7 @@ bool load_main_config(const char *path, bool is_active, bool validating);
|
|||
/**
|
||||
* Loads an included config. Can only be used after load_main_config.
|
||||
*/
|
||||
void load_include_configs(const char *path, struct sway_config *config,
|
||||
bool load_include_configs(const char *path, struct sway_config *config,
|
||||
struct swaynag_instance *swaynag);
|
||||
|
||||
/**
|
||||
|
|
@ -632,15 +527,10 @@ bool read_config(FILE *file, struct sway_config *config,
|
|||
*/
|
||||
void run_deferred_commands(void);
|
||||
|
||||
/**
|
||||
* Run the binding commands that were deferred when initializing the inputs
|
||||
*/
|
||||
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
|
||||
|
|
@ -660,10 +550,7 @@ struct input_config *new_input_config(const char* identifier);
|
|||
|
||||
void merge_input_config(struct input_config *dst, struct input_config *src);
|
||||
|
||||
struct input_config *store_input_config(struct input_config *ic, char **error);
|
||||
|
||||
void input_config_fill_rule_names(struct input_config *ic,
|
||||
struct xkb_rule_names *rules);
|
||||
struct input_config *store_input_config(struct input_config *ic);
|
||||
|
||||
void free_input_config(struct input_config *ic);
|
||||
|
||||
|
|
@ -689,48 +576,38 @@ int output_name_cmp(const void *item, const void *data);
|
|||
void output_get_identifier(char *identifier, size_t len,
|
||||
struct sway_output *output);
|
||||
|
||||
const char *sway_output_scale_filter_to_string(enum scale_filter_mode scale_filter);
|
||||
|
||||
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);
|
||||
struct output_config *store_output_config(struct output_config *oc);
|
||||
|
||||
struct output_config *find_output_config(struct sway_output *output);
|
||||
void apply_output_config_to_outputs(struct output_config *oc);
|
||||
|
||||
void reset_outputs(void);
|
||||
|
||||
void free_output_config(struct output_config *oc);
|
||||
|
||||
void request_modeset(void);
|
||||
void force_modeset(void);
|
||||
bool modeset_is_pending(void);
|
||||
|
||||
bool spawn_swaybg(void);
|
||||
|
||||
int workspace_output_cmp_workspace(const void *a, const void *b);
|
||||
|
||||
int sway_binding_cmp(const void *a, const void *b);
|
||||
|
||||
int sway_binding_cmp_qsort(const void *a, const void *b);
|
||||
|
||||
int sway_binding_cmp_keys(const void *a, const void *b);
|
||||
|
||||
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);
|
||||
|
||||
void load_swaybars(void);
|
||||
|
||||
void terminate_swaybg(pid_t pid);
|
||||
|
||||
struct bar_config *default_bar_config(void);
|
||||
|
||||
void free_bar_config(struct bar_config *bar);
|
||||
|
|
@ -740,23 +617,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);
|
||||
|
||||
/**
|
||||
* Convert bindsym into bindcode using the first configured layout.
|
||||
* Return false in case the conversion is unsuccessful.
|
||||
*/
|
||||
bool translate_binding(struct sway_binding *binding);
|
||||
|
||||
void translate_keysyms(struct input_config *input_config);
|
||||
|
||||
void binding_add_translated(struct sway_binding *binding, list_t *bindings);
|
||||
void config_update_font_height(bool recalculate);
|
||||
|
||||
/* Global config singleton. */
|
||||
extern struct sway_config *config;
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
|
|
@ -19,50 +14,31 @@ enum criteria_type {
|
|||
CT_NO_FOCUS = 1 << 4,
|
||||
};
|
||||
|
||||
enum pattern_type {
|
||||
PATTERN_PCRE2,
|
||||
PATTERN_FOCUSED,
|
||||
};
|
||||
|
||||
struct pattern {
|
||||
enum pattern_type match_type;
|
||||
pcre2_code *regex;
|
||||
};
|
||||
|
||||
struct criteria {
|
||||
enum criteria_type type;
|
||||
char *raw; // entire criteria string (for logging)
|
||||
char *cmdlist;
|
||||
char *target; // workspace or output name for `assign` criteria
|
||||
|
||||
struct pattern *title;
|
||||
struct pattern *shell;
|
||||
struct pattern *app_id;
|
||||
struct pattern *con_mark;
|
||||
pcre *title;
|
||||
pcre *shell;
|
||||
pcre *app_id;
|
||||
pcre *con_mark;
|
||||
uint32_t con_id; // internal ID
|
||||
#if WLR_HAS_XWAYLAND
|
||||
struct pattern *class;
|
||||
#if HAVE_XWAYLAND
|
||||
pcre *class;
|
||||
uint32_t id; // X11 window ID
|
||||
struct pattern *instance;
|
||||
struct pattern *window_role;
|
||||
pcre *instance;
|
||||
pcre *window_role;
|
||||
enum atom_name window_type;
|
||||
#endif
|
||||
bool all;
|
||||
bool floating;
|
||||
bool tiling;
|
||||
char urgent; // 'l' for latest or 'o' for oldest
|
||||
struct pattern *workspace;
|
||||
pid_t pid;
|
||||
struct pattern *sandbox_engine;
|
||||
struct pattern *sandbox_app_id;
|
||||
struct pattern *sandbox_instance_id;
|
||||
struct pattern *tag;
|
||||
char *workspace;
|
||||
};
|
||||
|
||||
bool criteria_is_empty(struct criteria *criteria);
|
||||
bool criteria_is_equal(struct criteria *left, struct criteria *right);
|
||||
|
||||
bool criteria_already_exists(struct criteria *criteria);
|
||||
|
||||
void criteria_destroy(struct criteria *criteria);
|
||||
|
||||
|
|
@ -84,8 +60,8 @@ struct criteria *criteria_parse(char *raw, char **error);
|
|||
list_t *criteria_for_view(struct sway_view *view, enum criteria_type types);
|
||||
|
||||
/**
|
||||
* Compile a list of containers matching the given criteria.
|
||||
* Compile a list of views matching the given criteria.
|
||||
*/
|
||||
list_t *criteria_get_containers(struct criteria *criteria);
|
||||
list_t *criteria_get_views(struct criteria *criteria);
|
||||
|
||||
#endif
|
||||
|
|
|
|||
22
include/sway/debug.h
Normal file
22
include/sway/debug.h
Normal file
|
|
@ -0,0 +1,22 @@
|
|||
#ifndef SWAY_DEBUG_H
|
||||
#define SWAY_DEBUG_H
|
||||
#include <stdbool.h>
|
||||
|
||||
struct sway_debug {
|
||||
bool noatomic; // Ignore atomic layout updates
|
||||
bool render_tree; // Render the tree overlay
|
||||
bool txn_timings; // Log verbose messages about transactions
|
||||
bool txn_wait; // Always wait for the timeout before applying
|
||||
|
||||
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;
|
||||
|
||||
void update_debug_tree(void);
|
||||
|
||||
#endif
|
||||
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,48 +1,28 @@
|
|||
#ifndef _SWAY_DESKTOP_IDLE_INHIBIT_V1_H
|
||||
#define _SWAY_DESKTOP_IDLE_INHIBIT_V1_H
|
||||
#include <wlr/types/wlr_idle_inhibit_v1.h>
|
||||
|
||||
enum sway_idle_inhibit_mode {
|
||||
INHIBIT_IDLE_APPLICATION, // Application set inhibitor (when visible)
|
||||
INHIBIT_IDLE_FOCUS, // User set inhibitor when focused
|
||||
INHIBIT_IDLE_FULLSCREEN, // User set inhibitor when fullscreen + visible
|
||||
INHIBIT_IDLE_OPEN, // User set inhibitor while open
|
||||
INHIBIT_IDLE_VISIBLE // User set inhibitor when visible
|
||||
};
|
||||
#include <wlr/types/wlr_idle.h>
|
||||
#include "sway/server.h"
|
||||
|
||||
struct sway_idle_inhibit_manager_v1 {
|
||||
struct wlr_idle_inhibit_manager_v1 *wlr_manager;
|
||||
struct wl_listener new_idle_inhibitor_v1;
|
||||
struct wl_listener manager_destroy;
|
||||
struct wl_list inhibitors;
|
||||
|
||||
struct wlr_idle *idle;
|
||||
};
|
||||
|
||||
struct sway_idle_inhibitor_v1 {
|
||||
struct wlr_idle_inhibitor_v1 *wlr_inhibitor;
|
||||
struct sway_idle_inhibit_manager_v1 *manager;
|
||||
struct sway_view *view;
|
||||
enum sway_idle_inhibit_mode mode;
|
||||
|
||||
struct wl_list link;
|
||||
struct wl_listener destroy;
|
||||
};
|
||||
|
||||
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_user_inhibitor_register(struct sway_view *view,
|
||||
enum sway_idle_inhibit_mode mode);
|
||||
|
||||
struct sway_idle_inhibitor_v1 *sway_idle_inhibit_v1_user_inhibitor_for_view(
|
||||
struct sway_view *view);
|
||||
|
||||
struct sway_idle_inhibitor_v1 *sway_idle_inhibit_v1_application_inhibitor_for_view(
|
||||
struct sway_view *view);
|
||||
|
||||
void sway_idle_inhibit_v1_user_inhibitor_destroy(
|
||||
struct sway_idle_inhibitor_v1 *inhibitor);
|
||||
|
||||
bool sway_idle_inhibit_manager_v1_init(void);
|
||||
void idle_inhibit_v1_check_active(
|
||||
struct sway_idle_inhibit_manager_v1 *manager);
|
||||
|
||||
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.
|
||||
|
|
@ -30,35 +28,21 @@ struct sway_view;
|
|||
*/
|
||||
void transaction_commit_dirty(void);
|
||||
|
||||
/*
|
||||
* Same as transaction_commit_dirty, but signalling that this is a
|
||||
* client-initiated change has already taken effect.
|
||||
*/
|
||||
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);
|
||||
|
||||
/**
|
||||
* Notify the transaction system that a view is ready for the new layout, but
|
||||
* identifying the instruction by geometry rather than by serial.
|
||||
* identifying the instruction by width and height 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,
|
||||
double x, double y, int width, int height);
|
||||
|
||||
void arrange_popups(struct wlr_scene_tree *popups);
|
||||
void transaction_notify_view_ready_by_size(struct sway_view *view,
|
||||
int width, int height);
|
||||
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -3,10 +3,8 @@
|
|||
#include <stdbool.h>
|
||||
#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"
|
||||
|
||||
#define SWAY_CURSOR_PRESSED_BUTTONS_CAP 32
|
||||
|
||||
|
|
@ -23,8 +21,6 @@ struct sway_cursor {
|
|||
struct sway_node *node;
|
||||
} previous;
|
||||
struct wlr_xcursor_manager *xcursor_manager;
|
||||
struct wl_list tablets;
|
||||
struct wl_list tablet_pads;
|
||||
|
||||
const char *image;
|
||||
struct wl_client *image_client;
|
||||
|
|
@ -33,16 +29,6 @@ struct sway_cursor {
|
|||
|
||||
struct wlr_pointer_constraint_v1 *active_constraint;
|
||||
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 wl_listener pinch_begin;
|
||||
struct wl_listener pinch_update;
|
||||
struct wl_listener pinch_end;
|
||||
struct wl_listener swipe_begin;
|
||||
struct wl_listener swipe_update;
|
||||
struct wl_listener swipe_end;
|
||||
|
||||
struct wl_listener motion;
|
||||
struct wl_listener motion_absolute;
|
||||
|
|
@ -52,33 +38,22 @@ 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;
|
||||
struct wl_listener tool_tip;
|
||||
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;
|
||||
struct wl_listener image_surface_destroy;
|
||||
|
||||
struct wl_listener constraint_commit;
|
||||
|
||||
struct wl_event_source *hide_source;
|
||||
bool hidden;
|
||||
// This field is just a cache of the field in seat_config in order to avoid
|
||||
// costly seat_config lookups on every keypress. HIDE_WHEN_TYPING_DEFAULT
|
||||
// indicates that there is no cached value.
|
||||
enum seat_config_hide_cursor_when_typing hide_when_typing;
|
||||
|
||||
// Mouse binding state
|
||||
uint32_t pressed_buttons[SWAY_CURSOR_PRESSED_BUTTONS_CAP];
|
||||
size_t pressed_button_count;
|
||||
};
|
||||
|
||||
|
|
@ -98,26 +73,24 @@ struct sway_cursor *sway_cursor_create(struct sway_seat *seat);
|
|||
*/
|
||||
void cursor_rebase(struct sway_cursor *cursor);
|
||||
void cursor_rebase_all(void);
|
||||
void cursor_update_image(struct sway_cursor *cursor, struct sway_node *node);
|
||||
|
||||
void cursor_handle_activity_from_idle_source(struct sway_cursor *cursor,
|
||||
enum sway_input_idle_source idle_source);
|
||||
void cursor_handle_activity_from_device(struct sway_cursor *cursor,
|
||||
struct wlr_input_device *device);
|
||||
void cursor_handle_activity(struct sway_cursor *cursor);
|
||||
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);
|
||||
/**
|
||||
* Like cursor_rebase, but also allows focus to change when the cursor enters a
|
||||
* new container.
|
||||
*/
|
||||
void cursor_send_pointer_motion(struct sway_cursor *cursor, uint32_t time_msec,
|
||||
struct sway_node *node, struct wlr_surface *surface, double sx, double sy);
|
||||
|
||||
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);
|
||||
|
|
@ -127,7 +100,7 @@ void cursor_set_image_surface(struct sway_cursor *cursor,
|
|||
struct wl_client *client);
|
||||
|
||||
void cursor_warp_to_container(struct sway_cursor *cursor,
|
||||
struct sway_container *container, bool force);
|
||||
struct sway_container *container);
|
||||
|
||||
void cursor_warp_to_workspace(struct sway_cursor *cursor,
|
||||
struct sway_workspace *workspace);
|
||||
|
|
@ -145,6 +118,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,46 +1,34 @@
|
|||
#ifndef _SWAY_INPUT_INPUT_MANAGER_H
|
||||
#define _SWAY_INPUT_INPUT_MANAGER_H
|
||||
#include <libinput.h>
|
||||
#include <wlr/types/wlr_keyboard_shortcuts_inhibit_v1.h>
|
||||
#include <wlr/types/wlr_input_inhibitor.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;
|
||||
struct wl_list link;
|
||||
struct wl_listener device_destroy;
|
||||
bool is_virtual;
|
||||
};
|
||||
|
||||
struct sway_input_manager {
|
||||
struct wl_list devices;
|
||||
struct wl_list seats;
|
||||
|
||||
struct wlr_keyboard_shortcuts_inhibit_manager_v1 *keyboard_shortcuts_inhibit;
|
||||
struct wlr_input_inhibit_manager *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;
|
||||
struct wl_listener inhibit_deactivate;
|
||||
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);
|
||||
|
||||
void input_manager_finish(struct sway_input_manager *input);
|
||||
|
||||
bool input_manager_has_focus(struct sway_node *node);
|
||||
|
||||
void input_manager_set_focus(struct sway_node *node);
|
||||
|
|
@ -49,11 +37,9 @@ 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_reset_input(struct sway_input_device *input_device);
|
||||
|
||||
void input_manager_reset_all_inputs(void);
|
||||
void input_manager_reset_all_inputs();
|
||||
|
||||
void input_manager_apply_seat_config(struct seat_config *seat_config);
|
||||
|
||||
|
|
@ -76,6 +62,4 @@ struct input_config *input_device_get_config(struct sway_input_device *device);
|
|||
|
||||
char *input_device_get_identifier(struct wlr_input_device *device);
|
||||
|
||||
const char *input_device_get_type(struct sway_input_device *device);
|
||||
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -8,7 +8,7 @@
|
|||
/**
|
||||
* Get modifier mask from modifier name.
|
||||
*
|
||||
* Returns the modifier mask or 0 if the name isn't found.
|
||||
* Returns the modifer mask or 0 if the name isn't found.
|
||||
*/
|
||||
uint32_t get_modifier_mask_by_name(const char *name);
|
||||
|
||||
|
|
@ -50,13 +50,8 @@ 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;
|
||||
|
||||
int32_t repeat_rate;
|
||||
int32_t repeat_delay;
|
||||
|
||||
struct wl_listener keyboard_key;
|
||||
struct wl_listener keyboard_modifiers;
|
||||
|
|
@ -64,26 +59,12 @@ struct sway_keyboard {
|
|||
struct sway_shortcut_state state_keysyms_translated;
|
||||
struct sway_shortcut_state state_keysyms_raw;
|
||||
struct sway_shortcut_state state_keycodes;
|
||||
struct sway_shortcut_state state_pressed_sent;
|
||||
struct sway_binding *held_binding;
|
||||
|
||||
struct wl_event_source *key_repeat_source;
|
||||
struct sway_binding *repeat_binding;
|
||||
};
|
||||
|
||||
struct sway_keyboard_group {
|
||||
struct wlr_keyboard_group *wlr_group;
|
||||
struct sway_seat_device *seat_device;
|
||||
struct wl_listener keyboard_key;
|
||||
struct wl_listener keyboard_modifiers;
|
||||
struct wl_listener enter;
|
||||
struct wl_listener leave;
|
||||
struct wl_list link; // sway_seat::keyboard_groups
|
||||
};
|
||||
|
||||
struct xkb_keymap *sway_keyboard_compile_keymap(struct input_config *ic,
|
||||
char **error);
|
||||
|
||||
struct sway_keyboard *sway_keyboard_create(struct sway_seat *seat,
|
||||
struct sway_seat_device *device);
|
||||
|
||||
|
|
|
|||
|
|
@ -1,14 +0,0 @@
|
|||
#ifndef _SWAY_INPUT_LIBINPUT_H
|
||||
#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_reset_libinput_device(struct sway_input_device *device);
|
||||
|
||||
bool sway_libinput_device_is_builtin(struct sway_input_device *device);
|
||||
|
||||
#endif
|
||||
|
|
@ -1,67 +1,26 @@
|
|||
#ifndef _SWAY_INPUT_SEAT_H
|
||||
#define _SWAY_INPUT_SEAT_H
|
||||
|
||||
#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"
|
||||
#include "sway/input/tablet.h"
|
||||
#include "sway/input/text_input.h"
|
||||
|
||||
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);
|
||||
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);
|
||||
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 (*motion)(struct sway_seat *seat, uint32_t time_msec);
|
||||
void (*finish)(struct sway_seat *seat);
|
||||
void (*abort)(struct sway_seat *seat);
|
||||
void (*unref)(struct sway_seat *seat, struct sway_container *con);
|
||||
bool allow_set_cursor;
|
||||
void (*render)(struct sway_seat *seat, struct sway_output *output,
|
||||
pixman_region32_t *damage);
|
||||
};
|
||||
|
||||
struct sway_seat_device {
|
||||
struct sway_seat *sway_seat;
|
||||
struct sway_input_device *input_device;
|
||||
struct sway_keyboard *keyboard;
|
||||
struct sway_switch *switch_device;
|
||||
struct sway_tablet *tablet;
|
||||
struct sway_tablet_pad *tablet_pad;
|
||||
struct wl_list link; // sway_seat::devices
|
||||
};
|
||||
|
||||
|
|
@ -74,9 +33,16 @@ struct sway_seat_node {
|
|||
struct wl_listener destroy;
|
||||
};
|
||||
|
||||
struct sway_drag {
|
||||
struct sway_drag_icon {
|
||||
struct sway_seat *seat;
|
||||
struct wlr_drag *wlr_drag;
|
||||
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;
|
||||
};
|
||||
|
||||
|
|
@ -84,23 +50,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;
|
||||
|
|
@ -109,47 +68,28 @@ struct sway_seat {
|
|||
// Seat operations (drag and resize)
|
||||
const struct sway_seatop_impl *seatop_impl;
|
||||
void *seatop_data;
|
||||
uint32_t seatop_button;
|
||||
|
||||
uint32_t last_button;
|
||||
uint32_t last_button_serial;
|
||||
|
||||
uint32_t idle_inhibit_sources, idle_wake_sources;
|
||||
|
||||
list_t *deferred_bindings; // struct sway_binding
|
||||
|
||||
struct sway_input_method_relay im_relay;
|
||||
|
||||
struct wl_listener focus_destroy;
|
||||
struct wl_listener new_node;
|
||||
struct wl_listener request_start_drag;
|
||||
struct wl_listener start_drag;
|
||||
struct wl_listener new_drag_icon;
|
||||
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
|
||||
struct wl_list keyboard_shortcuts_inhibitors;
|
||||
// sway_keyboard_shortcuts_inhibitor::link
|
||||
|
||||
struct wl_list link; // input_manager::seats
|
||||
};
|
||||
|
||||
struct sway_pointer_constraint {
|
||||
struct sway_cursor *cursor;
|
||||
struct wlr_pointer_constraint_v1 *constraint;
|
||||
|
||||
struct wl_listener set_region;
|
||||
struct wl_listener destroy;
|
||||
};
|
||||
|
||||
struct sway_keyboard_shortcuts_inhibitor {
|
||||
struct wlr_keyboard_shortcuts_inhibitor_v1 *inhibitor;
|
||||
|
||||
struct wl_listener destroy;
|
||||
|
||||
struct wl_list link; // sway_seat::keyboard_shortcuts_inhibitors
|
||||
};
|
||||
|
||||
struct sway_seat *seat_create(const char *seat_name);
|
||||
|
||||
void seat_destroy(struct sway_seat *seat);
|
||||
|
|
@ -160,9 +100,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,17 +130,13 @@ 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);
|
||||
|
||||
struct sway_workspace *seat_get_focused_workspace(struct sway_seat *seat);
|
||||
|
||||
// If a scratchpad container is fullscreen global, this can be used to try to
|
||||
// determine the last focused workspace. Otherwise, this should yield the same
|
||||
// results as seat_get_focused_workspace.
|
||||
struct sway_workspace *seat_get_last_known_workspace(struct sway_seat *seat);
|
||||
|
||||
struct sway_container *seat_get_focused_container(struct sway_seat *seat);
|
||||
|
||||
/**
|
||||
|
|
@ -247,103 +180,49 @@ struct seat_config *seat_get_config(struct sway_seat *seat);
|
|||
|
||||
struct seat_config *seat_get_config_by_name(const char *name);
|
||||
|
||||
void seat_idle_notify_activity(struct sway_seat *seat,
|
||||
enum sway_input_idle_source source);
|
||||
|
||||
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);
|
||||
|
||||
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);
|
||||
void seatop_begin_down(struct sway_seat *seat,
|
||||
struct sway_container *con, uint32_t button, int sx, int sy);
|
||||
|
||||
void seatop_begin_move_floating(struct sway_seat *seat,
|
||||
struct sway_container *con);
|
||||
struct sway_container *con, uint32_t button);
|
||||
|
||||
void seatop_begin_move_tiling_threshold(struct sway_seat *seat,
|
||||
struct sway_container *con);
|
||||
struct sway_container *con, uint32_t button);
|
||||
|
||||
void seatop_begin_move_tiling(struct sway_seat *seat,
|
||||
struct sway_container *con);
|
||||
struct sway_container *con, uint32_t button);
|
||||
|
||||
void seatop_begin_resize_floating(struct sway_seat *seat,
|
||||
struct sway_container *con, enum wlr_edges edge);
|
||||
struct sway_container *con, uint32_t button, enum wlr_edges edge);
|
||||
|
||||
void seatop_begin_resize_tiling(struct sway_seat *seat,
|
||||
struct sway_container *con, enum wlr_edges edge);
|
||||
struct sway_container *con, uint32_t button, enum wlr_edges edge);
|
||||
|
||||
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);
|
||||
bool seat_doing_seatop(struct sway_seat *seat);
|
||||
|
||||
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);
|
||||
|
||||
void seatop_tablet_tool_tip(struct sway_seat *seat,
|
||||
struct sway_tablet_tool *tool, uint32_t time_msec,
|
||||
enum wlr_tablet_tool_tip_state state);
|
||||
|
||||
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);
|
||||
void seatop_motion(struct sway_seat *seat, uint32_t time_msec);
|
||||
|
||||
/**
|
||||
* End a seatop (ie. free any seatop specific resources).
|
||||
* End a seatop and apply the affects.
|
||||
*/
|
||||
void seatop_end(struct sway_seat *seat);
|
||||
void seatop_finish(struct sway_seat *seat);
|
||||
|
||||
/**
|
||||
* End a seatop without applying the affects.
|
||||
*/
|
||||
void seatop_abort(struct sway_seat *seat);
|
||||
|
||||
/**
|
||||
* Instructs the seatop implementation to drop any references to the given
|
||||
|
|
@ -352,21 +231,12 @@ void seatop_end(struct sway_seat *seat);
|
|||
*/
|
||||
void seatop_unref(struct sway_seat *seat, struct sway_container *con);
|
||||
|
||||
bool seatop_allows_set_cursor(struct sway_seat *seat);
|
||||
|
||||
/**
|
||||
* Returns the keyboard shortcuts inhibitor that applies to the given surface
|
||||
* or NULL if none exists.
|
||||
* Instructs a seatop to render anything that it needs to render
|
||||
* (eg. dropzone for move-tiling)
|
||||
*/
|
||||
struct sway_keyboard_shortcuts_inhibitor *
|
||||
keyboard_shortcuts_inhibitor_get_for_surface(const struct sway_seat *seat,
|
||||
const struct wlr_surface *surface);
|
||||
void seatop_render(struct sway_seat *seat, struct sway_output *output,
|
||||
pixman_region32_t *damage);
|
||||
|
||||
/**
|
||||
* Returns the keyboard shortcuts inhibitor that applies to the currently
|
||||
* focused surface of a seat or NULL if none exists.
|
||||
*/
|
||||
struct sway_keyboard_shortcuts_inhibitor *
|
||||
keyboard_shortcuts_inhibitor_get_for_focused_surface(const struct sway_seat *seat);
|
||||
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -1,24 +0,0 @@
|
|||
#ifndef _SWAY_INPUT_SWITCH_H
|
||||
#define _SWAY_INPUT_SWITCH_H
|
||||
|
||||
#include "sway/input/seat.h"
|
||||
|
||||
struct sway_switch {
|
||||
struct sway_seat_device *seat_device;
|
||||
struct wlr_switch *wlr;
|
||||
enum wlr_switch_state state;
|
||||
enum wlr_switch_type type;
|
||||
|
||||
struct wl_listener switch_toggle;
|
||||
};
|
||||
|
||||
struct sway_switch *sway_switch_create(struct sway_seat *seat,
|
||||
struct sway_seat_device *device);
|
||||
|
||||
void sway_switch_configure(struct sway_switch *sway_switch);
|
||||
|
||||
void sway_switch_destroy(struct sway_switch *sway_switch);
|
||||
|
||||
void sway_switch_retrigger_bindings_for_all(void);
|
||||
|
||||
#endif
|
||||
|
|
@ -1,69 +0,0 @@
|
|||
#ifndef _SWAY_INPUT_TABLET_H
|
||||
#define _SWAY_INPUT_TABLET_H
|
||||
#include <wlr/types/wlr_layer_shell_v1.h>
|
||||
|
||||
struct sway_seat;
|
||||
struct wlr_tablet_tool;
|
||||
|
||||
struct sway_tablet {
|
||||
struct wl_list link;
|
||||
struct sway_seat_device *seat_device;
|
||||
struct wlr_tablet_v2_tablet *tablet_v2;
|
||||
};
|
||||
|
||||
enum sway_tablet_tool_mode {
|
||||
SWAY_TABLET_TOOL_MODE_ABSOLUTE,
|
||||
SWAY_TABLET_TOOL_MODE_RELATIVE,
|
||||
};
|
||||
|
||||
struct sway_tablet_tool {
|
||||
struct sway_seat *seat;
|
||||
struct sway_tablet *tablet;
|
||||
struct wlr_tablet_v2_tablet_tool *tablet_v2_tool;
|
||||
|
||||
enum sway_tablet_tool_mode mode;
|
||||
double tilt_x, tilt_y;
|
||||
|
||||
struct wl_listener set_cursor;
|
||||
struct wl_listener tool_destroy;
|
||||
};
|
||||
|
||||
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;
|
||||
struct wl_listener button;
|
||||
struct wl_listener ring;
|
||||
struct wl_listener strip;
|
||||
|
||||
struct wlr_surface *current_surface;
|
||||
struct wl_listener surface_destroy;
|
||||
|
||||
struct wl_listener tablet_destroy;
|
||||
};
|
||||
|
||||
struct sway_tablet *sway_tablet_create(struct sway_seat *seat,
|
||||
struct sway_seat_device *device);
|
||||
|
||||
void sway_configure_tablet(struct sway_tablet *tablet);
|
||||
|
||||
void sway_tablet_destroy(struct sway_tablet *tablet);
|
||||
|
||||
void sway_tablet_tool_configure(struct sway_tablet *tablet,
|
||||
struct wlr_tablet_tool *wlr_tool);
|
||||
|
||||
struct sway_tablet_pad *sway_tablet_pad_create(struct sway_seat *seat,
|
||||
struct sway_seat_device *device);
|
||||
|
||||
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,
|
||||
struct wlr_surface *surface);
|
||||
|
||||
#endif
|
||||
|
|
@ -1,73 +0,0 @@
|
|||
#ifndef _SWAY_INPUT_TEXT_INPUT_H
|
||||
#define _SWAY_INPUT_TEXT_INPUT_H
|
||||
|
||||
#include <wlr/types/wlr_text_input_v3.h>
|
||||
#include <wlr/types/wlr_input_method_v2.h>
|
||||
#include <wlr/types/wlr_compositor.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
|
||||
* 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.
|
||||
*
|
||||
* Text input focus is a subset of keyboard focus - if the text-input is
|
||||
* in the focused state, wl_keyboard sent an enter as well. However, having
|
||||
* wl_keyboard focused doesn't mean that text-input will be focused.
|
||||
*/
|
||||
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 text_input_manager_destroy;
|
||||
|
||||
struct wl_listener input_method_new;
|
||||
struct wl_listener input_method_manager_destroy;
|
||||
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;
|
||||
|
||||
struct wlr_text_input_v3 *input;
|
||||
// The surface getting seat's focus. Stored for when text-input cannot
|
||||
// be sent an enter event immediately after getting focus, e.g. when
|
||||
// there's no input method available. Cleared once text-input is entered.
|
||||
struct wlr_surface *pending_focused_surface;
|
||||
|
||||
struct wl_list link;
|
||||
|
||||
struct wl_listener pending_focused_surface_destroy;
|
||||
|
||||
struct wl_listener text_input_enable;
|
||||
struct wl_listener text_input_commit;
|
||||
struct wl_listener text_input_disable;
|
||||
struct wl_listener text_input_destroy;
|
||||
};
|
||||
|
||||
void sway_input_method_relay_init(struct sway_seat *seat,
|
||||
struct sway_input_method_relay *relay);
|
||||
|
||||
void sway_input_method_relay_finish(struct sway_input_method_relay *relay);
|
||||
|
||||
// Updates currently focused surface. Surface must belong to the same seat.
|
||||
void sway_input_method_relay_set_focus(struct sway_input_method_relay *relay,
|
||||
struct wlr_surface *surface);
|
||||
|
||||
struct sway_text_input *sway_text_input_create(
|
||||
struct sway_input_method_relay *relay,
|
||||
struct wlr_text_input_v3 *text_input);
|
||||
|
||||
#endif
|
||||
|
|
@ -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,16 +1,12 @@
|
|||
#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"
|
||||
|
||||
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);
|
||||
|
|
|
|||
|
|
@ -2,7 +2,6 @@
|
|||
#define _SWAY_IPC_SERVER_H
|
||||
#include <sys/socket.h>
|
||||
#include "sway/config.h"
|
||||
#include "sway/input/input-manager.h"
|
||||
#include "sway/tree/container.h"
|
||||
#include "ipc.h"
|
||||
|
||||
|
|
@ -20,7 +19,5 @@ void ipc_event_bar_state_update(struct bar_config *bar);
|
|||
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,48 +1,28 @@
|
|||
#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"
|
||||
|
||||
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 node_destroy;
|
||||
struct wl_listener new_popup;
|
||||
struct wl_listener output_destroy;
|
||||
|
||||
bool mapped;
|
||||
|
||||
struct wlr_scene_tree *popups;
|
||||
struct sway_popup_desc desc;
|
||||
|
||||
struct sway_output *output;
|
||||
struct wl_list link; // sway_output.layer_surfaces
|
||||
|
||||
struct wlr_scene_layer_surface_v1 *scene;
|
||||
struct wlr_scene_tree *tree;
|
||||
struct wlr_layer_surface_v1 *layer_surface;
|
||||
};
|
||||
|
||||
struct sway_layer_popup {
|
||||
struct wlr_xdg_popup *wlr_popup;
|
||||
struct wlr_scene_tree *scene;
|
||||
struct sway_layer_surface *toplevel;
|
||||
|
||||
struct wl_listener destroy;
|
||||
struct wl_listener new_popup;
|
||||
struct wl_listener commit;
|
||||
struct wl_listener reposition;
|
||||
bool configured;
|
||||
struct wlr_box geo;
|
||||
};
|
||||
|
||||
struct sway_output;
|
||||
|
||||
struct wlr_layer_surface_v1 *toplevel_layer_surface_from_surface(
|
||||
struct wlr_surface *surface);
|
||||
|
||||
void arrange_layers(struct sway_output *output);
|
||||
|
||||
void destroy_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
|
||||
|
|
@ -2,10 +2,9 @@
|
|||
#define _SWAY_OUTPUT_H
|
||||
#include <time.h>
|
||||
#include <unistd.h>
|
||||
#include <wayland-server-core.h>
|
||||
#include <wlr/types/wlr_damage_ring.h>
|
||||
#include <wayland-server.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,38 @@ 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;
|
||||
|
||||
int lx, ly; // layout coords
|
||||
int width, height; // transformed buffer size
|
||||
enum wl_output_subpixel detected_subpixel;
|
||||
enum scale_filter_mode scale_filter;
|
||||
struct timespec last_frame;
|
||||
struct wlr_output_damage *damage;
|
||||
|
||||
bool enabled;
|
||||
int lx, ly;
|
||||
int width, height;
|
||||
|
||||
bool enabled, configured;
|
||||
list_t *workspaces;
|
||||
struct wl_list layer_surfaces; // sway_layer_surface.link
|
||||
|
||||
struct sway_output_state current;
|
||||
|
||||
struct wl_listener layout_destroy;
|
||||
struct wl_client *swaybg_client;
|
||||
|
||||
struct wl_listener destroy;
|
||||
struct wl_listener mode;
|
||||
struct wl_listener transform;
|
||||
struct wl_listener scale;
|
||||
struct wl_listener present;
|
||||
struct wl_listener frame;
|
||||
struct wl_listener request_state;
|
||||
struct wl_listener damage_destroy;
|
||||
struct wl_listener damage_frame;
|
||||
struct wl_listener swaybg_client_destroy;
|
||||
|
||||
struct wlr_color_transform *color_transform;
|
||||
struct wlr_ext_workspace_group_handle_v1 *ext_workspace_group;
|
||||
|
||||
struct timespec last_presentation;
|
||||
uint32_t refresh_nsec;
|
||||
int max_render_time; // In milliseconds
|
||||
struct wl_event_source *repaint_timer;
|
||||
|
||||
bool allow_tearing;
|
||||
bool hdr;
|
||||
};
|
||||
|
||||
struct sway_output_non_desktop {
|
||||
struct wlr_output *wlr_output;
|
||||
|
||||
struct wl_listener destroy;
|
||||
struct {
|
||||
struct wl_signal destroy;
|
||||
} events;
|
||||
};
|
||||
|
||||
struct sway_output *output_create(struct wlr_output *wlr_output);
|
||||
|
|
@ -91,33 +64,69 @@ struct sway_output *output_from_wlr_output(struct wlr_output *output);
|
|||
struct sway_output *output_get_in_direction(struct sway_output *reference,
|
||||
enum wlr_direction direction);
|
||||
|
||||
void output_configure_scene(struct sway_output *output,
|
||||
struct wlr_scene_node *node, float opacity);
|
||||
|
||||
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,
|
||||
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);
|
||||
|
||||
// this includes all the outputs, including disabled ones
|
||||
struct sway_output *all_output_by_name_or_id(const char *name_or_id);
|
||||
|
||||
void output_sort_workspaces(struct sway_output *output);
|
||||
|
||||
void output_enable(struct sway_output *output);
|
||||
struct output_config *output_find_config(struct sway_output *output);
|
||||
|
||||
void output_enable(struct sway_output *output, struct output_config *oc);
|
||||
|
||||
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(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);
|
||||
|
||||
#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,22 +141,17 @@ struct sway_container *output_find_container(struct sway_output *output,
|
|||
|
||||
void output_get_box(struct sway_output *output, struct wlr_box *box);
|
||||
|
||||
bool output_supports_hdr(struct wlr_output *output, const char **unsupported_reason_ptr);
|
||||
|
||||
enum sway_container_layout output_get_default_layout(
|
||||
struct sway_output *output);
|
||||
|
||||
void render_rect(struct wlr_output *wlr_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_manager_apply(struct wl_listener *listener, void *data);
|
||||
|
||||
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
|
||||
18
include/sway/security.h
Normal file
18
include/sway/security.h
Normal file
|
|
@ -0,0 +1,18 @@
|
|||
#ifndef _SWAY_SECURITY_H
|
||||
#define _SWAY_SECURITY_H
|
||||
#include <unistd.h>
|
||||
#include "sway/config.h"
|
||||
|
||||
uint32_t get_feature_policy_mask(pid_t pid);
|
||||
uint32_t get_ipc_policy_mask(pid_t pid);
|
||||
uint32_t get_command_policy_mask(const char *cmd);
|
||||
|
||||
struct feature_policy *get_feature_policy(const char *name);
|
||||
|
||||
const char *command_policy_str(enum command_context context);
|
||||
|
||||
struct feature_policy *alloc_feature_policy(const char *program);
|
||||
struct ipc_policy *alloc_ipc_policy(const char *program);
|
||||
struct command_policy *alloc_command_policy(const char *command);
|
||||
|
||||
#endif
|
||||
|
|
@ -1,65 +1,52 @@
|
|||
#ifndef _SWAY_SERVER_H
|
||||
#define _SWAY_SERVER_H
|
||||
#include <stdbool.h>
|
||||
#include <wayland-server-core.h>
|
||||
#include <wayland-server.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_layer_shell_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_xdg_shell_v6.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;
|
||||
char *socket;
|
||||
const char *socket;
|
||||
|
||||
struct wlr_backend *backend;
|
||||
struct wlr_session *session;
|
||||
// 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_backend *noop_backend;
|
||||
|
||||
struct wlr_compositor *compositor;
|
||||
|
||||
struct wlr_linux_dmabuf_v1 *linux_dmabuf_v1;
|
||||
|
||||
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_event_source *recreating_renderer;
|
||||
|
||||
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_v6 *xdg_shell_v6;
|
||||
struct wl_listener xdg_shell_v6_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;
|
||||
|
|
@ -75,98 +62,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 *wlr_data_control_manager_v1;
|
||||
struct wlr_ext_data_control_manager_v1 *ext_data_control_manager_v1;
|
||||
struct wlr_screencopy_manager_v1 *screencopy_manager_v1;
|
||||
struct wlr_ext_image_copy_capture_manager_v1 *ext_image_copy_capture_manager_v1;
|
||||
struct wlr_export_dmabuf_manager_v1 *export_dmabuf_manager_v1;
|
||||
struct wlr_security_context_manager_v1 *security_context_manager_v1;
|
||||
|
||||
struct wlr_ext_foreign_toplevel_image_capture_source_manager_v1 *ext_foreign_toplevel_image_capture_source_manager_v1;
|
||||
struct wl_listener new_foreign_toplevel_capture_request;
|
||||
|
||||
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 xdg_toplevel_tag_manager_v1_set_tag;
|
||||
|
||||
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 wlr_ext_workspace_manager_v1 *workspace_manager_v1;
|
||||
struct wl_listener workspace_manager_v1_commit;
|
||||
|
||||
struct wl_list pending_launcher_ctxs; // launcher_ctx::link
|
||||
|
||||
// The timeout for transactions, after which a transaction is applied
|
||||
// regardless of readiness.
|
||||
size_t txn_timeout_ms;
|
||||
|
||||
// Stores a transaction after it has been committed, but is waiting for
|
||||
// views to ack the new dimensions before being applied. A queued
|
||||
// transaction is frozen and must not have new instructions added to it.
|
||||
struct sway_transaction *queued_transaction;
|
||||
|
||||
// Stores a pending transaction that will be committed once the existing
|
||||
// queued transaction is applied and freed. The pending transaction can be
|
||||
// updated with new instructions as needed.
|
||||
struct sway_transaction *pending_transaction;
|
||||
|
||||
// Stores the nodes that have been marked as "dirty" and will be put into
|
||||
// the pending transaction.
|
||||
list_t *transactions;
|
||||
list_t *dirty_nodes;
|
||||
|
||||
struct wl_event_source *delayed_modeset;
|
||||
};
|
||||
|
||||
extern struct sway_server server;
|
||||
|
||||
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
|
||||
};
|
||||
|
||||
extern struct sway_debug debug;
|
||||
|
||||
extern bool unsupported_gpu_detected;
|
||||
|
||||
void sway_terminate(int exit_code);
|
||||
struct sway_server server;
|
||||
|
||||
/* 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);
|
||||
|
|
@ -176,25 +85,13 @@ 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);
|
||||
bool 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_v6_surface(struct wl_listener *listener, void *data);
|
||||
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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
Some files were not shown because too many files have changed in this diff Show more
Loading…
Add table
Add a link
Reference in a new issue