i3-compatible Wayland compositor
Find a file
Hugo Osvaldo Barrera dca4de48a9 Use fixed titlebar heights
Currently the height of titlebars can vary depending on their text.

If the text contains latin characters, then the height of those
characters (in whatever font applies) will define the titlebar height.
If a text contains CJK characters, the height of that font will
determine the height. The same applies for emoji and any other character
that's available only in the non-default font.

This issue is annoying in itself, but because all existing windows are
immediately resized, all applications need to rerender and this
frequently results in some of them crashing (Firefox, Chromium and
Signal are all curlpits here). I've only been able to reproduce this
with many windows open, so I suspect it's a matter of too much load for
the system to handle.

This quickly escalates to the point where visiting websites with emoji
in their title can kill all browser windows.

Additionally, when the titlebar of a window grows, it's first rendered
cropped, and the actual height only updates when there's a change in the
focused window (I'm sure other state changes trigger a redraw too), at
which point it's no longer cropped.

The approach taken here calculates the expected titlebar height based on
a short set of characters. Since these are likely to all use different
fonts, titlebars will be big enough to fit latin, CJK or emoji
characters without resizing.

I'm sure this still leaves out specific languages (e.g.: arabic
character bigger?). There's two ways to further improve this situation:

- Add a single character of each acceptable family to the same text
  used.
- Make the sample text user-configurable. This would allow a user to
  configure which font-families he expects to see, any anything bigger
  will be cropped. I don't feel the benefits are worth the effort here,
  but have nothing against it.
2021-08-11 21:29:28 +02:00
.builds ci: make Meson warnings fatal 2021-06-30 13:37:00 +02:00
.github/ISSUE_TEMPLATE Fix IRC links in READMEs and templates 2021-05-26 08:25:13 +02:00
assets License wallpapers as CC-0 2019-12-16 14:35:58 -05:00
client cairo: Replace <cairo/cairo.h> by <cairo.h> 2021-05-10 10:28:32 +02:00
common input: Move get_current_time_msec in from util 2021-06-23 09:55:36 +02:00
completions i3-compat: add GET_BINDING_STATE IPC command 2020-06-14 00:55:14 -04:00
contrib grimshot: Exit 1 on cancellation 2021-07-10 13:03:42 +02:00
include seatop_down: Change type of sx, sy to double in begin_seatop_down 2021-08-05 09:26:11 -04:00
protocols build: use Dependency.get_variable instead of get_pkgconfig_variable 2021-06-30 13:37:00 +02:00
sway Use fixed titlebar heights 2021-08-11 21:29:28 +02:00
swaybar swaybar: log Wayland display errors 2021-07-26 16:58:28 +02:00
swaymsg Make command line option lists const 2021-02-04 09:49:06 +01:00
swaynag swaynag: adds option to set wayland shell layer 2021-06-17 11:47:49 +02:00
.clang-format Update clang format to better match existing code 2021-06-22 20:21:45 +02:00
.editorconfig Create .editorconfig 2016-07-04 14:12:32 +02:00
.gitignore Allocate minimum size necessary in pango text functions. (#3473) 2019-01-20 15:03:30 +01:00
config.in config.in: change terminal emulator to foot 2021-05-06 20:52:51 +02:00
CONTRIBUTING.md Fix IRC links in READMEs and templates 2021-05-26 08:25:13 +02:00
LICENSE MIT license 2017-01-06 13:45:48 -05:00
meson.build Add meson options to enable/disable swaybar and swaynag 2021-07-21 18:24:09 +02:00
meson_options.txt Add meson options to enable/disable swaybar and swaynag 2021-07-21 18:24:09 +02:00
README.de.md readme: switch back to IRC web client 2021-05-26 22:09:05 +02:00
README.dk.md readme: switch back to IRC web client 2021-05-26 22:09:05 +02:00
README.es.md readme: switch back to IRC web client 2021-05-26 22:09:05 +02:00
README.fr.md readme: switch back to IRC web client 2021-05-26 22:09:05 +02:00
README.hu.md readme: switch back to IRC web client 2021-05-26 22:09:05 +02:00
README.ir.md Add persian README file 2021-08-10 15:55:57 +02:00
README.ja.md readme: switch back to IRC web client 2021-05-26 22:09:05 +02:00
README.ko.md readme: switch back to IRC web client 2021-05-26 22:09:05 +02:00
README.md Add persian README file 2021-08-10 15:55:57 +02:00
README.nl.md readme: switch back to IRC web client 2021-05-26 22:09:05 +02:00
README.pl.md readme: switch back to IRC web client 2021-05-26 22:09:05 +02:00
README.pt.md readme: switch back to IRC web client 2021-05-26 22:09:05 +02:00
README.ro.md readme: switch back to IRC web client 2021-05-26 22:09:05 +02:00
README.ru.md readme: switch back to IRC web client 2021-05-26 22:09:05 +02:00
README.tr.md readme: switch back to IRC web client 2021-05-26 22:09:05 +02:00
README.uk.md readme: switch back to IRC web client 2021-05-26 22:09:05 +02:00
README.zh-CN.md readme: switch back to IRC web client 2021-05-26 22:09:05 +02:00
README.zh-TW.md readme: switch back to IRC web client 2021-05-26 22:09:05 +02:00
sway.desktop Update language in sway.desktop & sway(1) 2019-03-10 15:09:52 -04:00

sway

English - 日本語 - Français - Українська - Español - Polski - 中文-简体 - Deutsch - Nederlands - Русский - 中文-繁體 - Português - Dansk - 한국어 - Română - Magyar - Türkçe - فارسی

sway is an i3-compatible Wayland compositor. Read the FAQ. Join the IRC channel (#sway on irc.libera.chat).

Release Signatures

Releases are signed with E88F5E48 and published on GitHub.

Installation

From Packages

Sway is available in many distributions. Try installing the "sway" package for yours.

If you're interested in packaging sway for your distribution, stop by the IRC channel or shoot an email to sir@cmpwn.com for advice.

Compiling from Source

Check out this wiki page if you want to build the HEAD of sway and wlroots for testing or development.

Install dependencies:

  • meson *
  • wlroots
  • wayland
  • wayland-protocols *
  • pcre
  • json-c
  • pango
  • cairo
  • gdk-pixbuf2 (optional: system tray)
  • scdoc (optional: man pages) *
  • git (optional: version info) *

*Compile-time dep

Run these commands:

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

If you already use i3, then copy your i3 config to ~/.config/sway/config and it'll work out of the box. Otherwise, copy the sample configuration file to ~/.config/sway/config. It is usually located at /etc/sway/config. Run man 5 sway for information on the configuration.

Running

Run sway from a TTY. Some display managers may work but are not supported by sway (gdm is known to work fairly well).