Commit graph

5934 commits

Author SHA1 Message Date
Daniel Eklöf
a3d54614c7
render: OSD: center text vertically
Rewrite render_osd(), and instead of passing in an y-offset, let
render_osd() itself center the text inside the OSD buffer.

This is done using the same baseline calculation term_font_baseline()
does, except we use the buffer height instead of the line height.

Note that most OSDs are sized based on the line height...

Closes #1430
2023-08-07 16:38:03 +02:00
Daniel Eklöf
e567250449
main: translate command line options to overrides
Instead of special casing configuration affecting command line
options (like --font, --fullscreen, --maximized etc), translate them
to overrides, and let the configuration system handle them.

This also fixes an issue where -f,--font did not set csd.font, if
csd.font were otherwise unset.
2023-08-07 16:37:59 +02:00
Daniel Eklöf
e1d66ad0c1
changelog: add new ‘unreleased section’ 2023-08-07 16:37:46 +02:00
Daniel Eklöf
53a5d62e5a
meson: bump version to 1.15.2 2023-07-30 13:18:55 +02:00
Daniel Eklöf
3111bc89e5
changelog: prepare for 1.15.2 2023-07-30 13:18:41 +02:00
Daniel Eklöf
89d0fe561f
Merge branch 'master' into releases/1.15 2023-07-30 13:17:31 +02:00
Daniel Eklöf
1af0277564
--window-size-chars: ensure width/height are valid for current scaling factor
Before this patch, we didn’t ensure width and height were valid for
the current scaling factor, when fractional scaling _is_
available. That is, we didn’t ensure the width/height values
multiplied back to their original values after dividing with the
scaling factor.

Closes #1446
2023-07-30 07:53:33 +02:00
Daniel Eklöf
05131a9b0c
Merge branch 'csd-fractional-scaling'
Closes #1441
2023-07-29 09:10:56 +02:00
Daniel Eklöf
aea687c0a1
changelog: CSDs with fractional scaling 2023-07-29 09:09:59 +02:00
Daniel Eklöf
764248bb0d
wayl_surface_scale_explicit_width_height(): don’t assert width/height are valid for scale
This function is only called directly when scaling the mouse
pointer. The mouse pointer is never guaranteed to have a valid width
and height, so skip the width/height assertions for it.
2023-07-29 08:18:00 +02:00
Daniel Eklöf
1782474481
fractional scaling: another round(!) of rounding fixes
* Ensure buffer sizes are valid. That is, ensure that
  size / scale * scale == size.
* Do size calculation of the window geometry in the same way we
  calculate the CSD offsets.
2023-07-28 16:03:13 +02:00
Daniel Eklöf
753c4b5d4f
render: round scaled border/title/button widths
And calculation of compounded offsets/widths/heights, to compensate
for compositor rounding when positioning and scaling/sizing
subsurfaces.

Closes #1441
2023-07-28 16:03:08 +02:00
Daniel Eklöf
9d75c55146
wayland: don't try to use a non-existing viewporter interface
When instantiating the viewport for a pointer surface, we didn't first
check if the compositor implements the viewporter interface.

This triggered a crash when a) foot was compiled with fractional
scaling, and b) the compositor did not implement the viewporter
interface.

Closes #1444
2023-07-28 15:42:28 +02:00
Daniel Eklöf
139fd6d55c
meson: add -Dterminfo-base-name option
This defines the base name of the generated terminfo files. It
defaults to the value of -Ddefault-terminfo (i.e. 'foot')

Example:

  meson -Ddefault-terminfo=foot-bananas -Dterminfo-base-name=foot-apples

The generated terminfo files will be

* terminfo/f/foot-apples
* terminfo/f/foot-apples-direct

The default value of $TERM will be 'foot-bananas'
2023-07-28 15:40:53 +02:00
Daniel Eklöf
f3c5b82c82
config: add tweak.bold-text-in-bright-amount
By how much to increase the luminance when brightening bold
fonts. This was previously hard-coded to a factor of 1.3, which is now
the default value of the new config option.

Closes #1434
2023-07-28 15:40:07 +02:00
Daniel Eklöf
e912656682
render: revert part of a36f67cbe3
render_osd() shouldn't use term_font_baseline().

This is because term_font_baseline() uses the line height to determine
the position, while render_osd() renders to surfaces that aren't sized
like the grid.

This fixes a regression, where the CSD title were sometimes rendered
too high up, and sometimes too low.
2023-07-28 15:37:48 +02:00
Daniel Eklöf
fd813d0e6c
font baseline: use max(font->height, font->ascent + font->descent) when calculating font height
This is how it's done when calculating the cell height, and we should
do the same thing when calculating the font baseline.
2023-07-28 15:36:48 +02:00
Daniel Eklöf
613c61abb4
scaling: always round the scaling factor when converting to int
* In all calls to wl_subsurface_set_position()
* (wp_viewport_set_destination() already does this)
* Whenever we use the scale to calculate margins (search box,
  scrollback indicator etc)
* Since the scaling factor is stored as a float (and not a double),
  use roundf() instead of round()
2023-07-25 16:48:50 +02:00
Daniel Eklöf
391bc119de
ci (sr.ht): alpine no longer allows pip installing to the system installation 2023-07-25 16:47:40 +02:00
Daniel Eklöf
76e471c4bc
ci: alpine no longer allows pip installing to the system installation 2023-07-25 16:45:29 +02:00
Daniel Eklöf
a36f67cbe3
render: apply new baseline calculation everywhere
* URL jump labels
* Scrollback position indicator
* Line/box drawings characters

Closes #1430
2023-07-25 15:53:29 +02:00
Daniel Eklöf
0a61cfc3be
wayland: update terminals (fonts etc) on xdg_output_handle_done()
Monitor DPI depends on information from both the wl_output and the
xdg_output interfaces.

Before this patch, terminals were only updated after changes to the
wl_output interfaces (thus depending on xdg output changes being
pushed by the compositor before wl_output changes).

That assumption (xdg_output happening before wl_output) isn’t always
true.

This patch fixes the issue by updating the terminals in the
xdg_output’s “done” event.

Closes #1431
2023-07-23 20:12:13 +02:00
Daniel Eklöf
57d8f74554
Merge branch 'invalid-utf8'
Closes #1423
2023-07-23 20:10:57 +02:00
Daniel Eklöf
8223b4b76c
changelog: ignore invalid UTF-8 in input 2023-07-22 11:23:22 +02:00
Daniel Eklöf
b59fd7c388
vt: detect and ignore invalid UTF-8 sequences
This patch detects invalid codepoints in the UTF-8 EDxxxx range, and
the F4xxxxxx range.

Note that we still allow the E0xxxx and F0xxxxxx ranges. These
contains overlong encodings. We allow them, because they still decode
into correct UTF-32.

Closes #1423
2023-07-22 11:21:41 +02:00
Daniel Eklöf
fc973a3bb9
selection: send_clipboard_or_primary(): handle selection text being NULL 2023-07-22 11:21:12 +02:00
Daniel Eklöf
15d7885c78
changelog: add new ‘unreleased’ section 2023-07-21 09:00:57 +02:00
Daniel Eklöf
d68d5faa05
Merge branch 'releases/1.15' 2023-07-21 09:00:39 +02:00
Daniel Eklöf
9e4d82a484
meson: bump version to 1.15.1 2023-07-21 08:57:03 +02:00
Daniel Eklöf
fa97df0eab
changelog: prepare for 1.15.1 2023-07-21 08:56:49 +02:00
Daniel Eklöf
62c6c9a78a
Merge branch 'master' into releases/1.15 2023-07-21 08:55:57 +02:00
Daniel Eklöf
b3255465f1
render: change baseline calculation, to center it within the line
Before this patch, fonts were anchored to the top of the line. With
this patch, it is instead centered.

Closes #1302
2023-07-21 08:17:32 +02:00
Daniel Eklöf
098f0aafd4
Merge branch 'systemd-units-socket-activation' 2023-07-21 08:13:51 +02:00
Max Gautier
478474d0ce
Changelog: standard system target + footclient fallback 2023-07-21 08:13:36 +02:00
Max Gautier
555edd60d4
Update documentation regarding systemd units 2023-07-21 08:12:55 +02:00
Max Gautier
d3ffb0bde1
Ties systemd units to graphical-session.target
- wayland-instance template target was a mistake.
  Systemd does not support simultaneous same user session, so stop
  trying to go against that.
- Only start systemd units in Wayland environments.
2023-07-21 08:12:55 +02:00
Max Gautier
c12db68363
footclient: fallback logic when socket paths don't exist
Even if WAYLAND_DISPLAY / XDG_RUNTIME_DIR are defined, if we can't
find the corresponding socket, we fallback to the path used when they
are not defined.
2023-07-21 08:12:49 +02:00
CismonX
c3b119ea81
vt: improve handling of HTS
Do not insert existing positions into the tab stop list.

This prevents a performance issue when iterating through
an extremely long tab stop list.

Also corrects the behaviour of CBT.
2023-07-20 08:47:40 +08:00
Daniel Eklöf
a49281ced3
render: OSD: don’t mark surface as being opaque, when it’s not 2023-07-19 16:43:18 +02:00
Daniel Eklöf
899b768b74
render: disable transparency when we’re fullscreened
The wayland protocol recommends (or mandates?) that compositors render
a black background behind fullscreened transparent windows. I.e. you
never see what’s _actually_ behind the window.

So, if you have a white, but semi-transparent background in foot,
it’ll be rendered in a shade of gray.

Given this, it’s better to simply disable transparency while we’re
fullscreened. That way, we at least get the "correct" background
color.

Closes #1416
2023-07-19 16:42:41 +02:00
Daniel Eklöf
648f6016e3
changelog: spelling: sacling -> scaling 2023-07-19 16:37:25 +02:00
Daniel Eklöf
fdd753263b
term: destroy: unref key bindings *after* destroying window
This fixes a crash-on-exit on compositors that emit a _"keyboard
leave"_ event when a surface is unmapped.

In our case, destroying the window (where we unmap it) in
term_destroy(), lead to a crash in term_mouse_grabbed(), due to
key_binding_for() returning NULL.

The call chain in this is case is, roughly:

  term_destroy() ->
  wayl_win_destroy() ->
  keyboard_leave() ->
  term_xcursor_update_for_seat() ->
  term_mouse_grabbed()
2023-07-18 18:26:28 +02:00
Daniel Eklöf
27b4c2ac2d
themes: starlight: update to V4
This also updates the default theme in foot, as well as the
documentation.

Closes #1409
2023-07-18 16:20:33 +02:00
Daniel Eklöf
023a1b8da6
changelog: crash on pointer capability loss 2023-07-18 16:12:43 +02:00
xdavidwu
0b8791d1c5
wayland: fix pointer cap lost handling
Before this, on compositor without cursor-shape support, a pointer
capability lost of the seat makes foot crash.
2023-07-18 16:09:31 +02:00
Daniel Eklöf
e6d1e0cc27
Merge branch 'scale-is-floating-point'
Closes #1404
2023-07-18 16:06:37 +02:00
Daniel Eklöf
4a4f2b5dae
pgo: add stub for wayl_fractional_scaling() 2023-07-18 05:48:22 +02:00
Daniel Eklöf
df96b7f4c0
changelog: wrong DPI, and wrong initial font size with fractional scaling 2023-07-18 05:48:21 +02:00
Daniel Eklöf
5b3b89cb64
changelog: monitor metadata is now picked from the one we were last mapped on 2023-07-18 05:48:02 +02:00
Daniel Eklöf
7fca81dd3f
term: get_font_subpixel(): use subpixel from monitor we were *last* mapped on 2023-07-18 05:48:02 +02:00