Consolatis [Sat, 16 Mar 2024 17:16:44 +0000 (18:16 +0100)]
CI: ensure Void has a font installed
Otherwise the runtime test randomly fails due to
strange pango behavior. This is a workaround for
the issue and not a permanent fix.
A full investigation into pango internals is required
to figure out why `pango_layout_get_extents()` returns
invalid data after the first call. See PR #1627 for a
testcase.
Consolatis [Sat, 16 Mar 2024 03:39:45 +0000 (04:39 +0100)]
src/common/buf.c: enhance the buffer API
There is at least one user of the buffer API that reuse a single
buffer by just resetting `buf.len` to `0`. This works as long as
the new user of the buffer actually adds something to the buffer.
However, if we don't add anything but still provide `buf.buf` to
a consumer, the old content will be re-used.
This patch thus adds two new clearing variants to the buffer API:
- `buf_clear()` which doesn't reset the internal allocations
- `buf_reset()` which does free the internal allocations
Additionally, this patch makes `buffer_add_char()` public which
allows adding single characters to an existing buffer. This will
be used in a future PR which implements custom format strings for
the OSD.
session: process environment.d and allow empty variables
1. All '*.env' files in an 'environment.d' directory alongside each
potential 'environment' file will be parsed and added to the
environment.
2. For the purposes of configuration merging, an environment definition
exists at one level if either the 'environment' file is defined or
its corresponding 'environment.d' contains any valid '*.env' file.
3. Variable declarations of the form "VARIABLE=", with no following
value, will be written to the environment as empty strings.
Johan Malm [Thu, 7 Mar 2024 19:15:02 +0000 (19:15 +0000)]
cursor: process layer subsurfaces in `cursor_button_press()`
...to give keyboard focus to layer-shell clients if exclusive or on-demand
interactivity is set, so that menu popups can be navigated with the
keyboard. This still only works if the client is in top (or overlay)
layers. Support for bottom and background to be done as a separate patch
set.
Revert 06b19f0 to process layer-shell subsurfaces in
`cursor_button_press()`, but only when their parent layer-shell surface
has keyboard interactivity.
Fix bug in `get_cursor_context()` which resulted in layer-surfaces not
being detected correctly.
Background:
Commit 06b19f0 (issue #1131) disabled processing of layer-shell
subsurfaces in cursor_button_press() because when pressing a task in
Waybar (Gtk panel using layer-shell subsurfaces) the foreign-toplevel
minimize-raise action did not work correctly as the action logic relied on
the recipient window being activated and by clicking on the panel, the
panel itself was both surface-focusd and activated (and thus the window
de-activated).
The un-intended consequence was that by not responding to layer-subsurface
cursor buttons presses, layer-shell clients (such as panels) were not
given keyboard focus if they indeed wanted it by setting exclusive or
on-demand keyboard interactivity.
The good news is that that following @jlindgren90's refactoring (various)
the only place where we call `view_set_actived()` is in
`focus_change_notify()` in `seat.c` and we now only do it for views
(bb8f0bc).
Another side-effect (positive) of 06b19f0 was that a Waybar dnd bug was
fixed (pointer-serial-number validation failure).
Have tested with sfwbar, waybar and tint (test-panel) the following
results:
- Minimize-raise works even when on-demand keyboard interactivity is set
- Keyboard interactivity is given popup-menus (sfwbar and tint) when the
panels are in the top layer (support for bottom will be as a separate
patch set)
- Waybar dnd still works (even when hard-coding keyboard-interactivity)
Consolatis [Thu, 7 Mar 2024 01:11:46 +0000 (02:11 +0100)]
Add optional headless fallback output
This allows configuring a headless fallback output that
is automatically created whenever there is no other output
around. It is destroyed when a new output is discovered.
It can be enabled by setting the environment variable
LABWC_FALLBACK_OUTPUT to the desired output name.
The feature benefits applications like wayvnc the most
as there is always an output available to connect to.
Co-Authored-By: Simon Long <simon@raspberrypi.com>
tokyo4j [Thu, 7 Mar 2024 15:53:39 +0000 (00:53 +0900)]
view: validate move/resize request from clients
Move/resize requests from xwayland views and xdg toplevels should be
ignored when the view is not pressed.
This is relevant for touchpad taps with <tapAndDrag> disabled.
When the user taps the client surface (e.g. chromium and mpv) with the
setting above, libinput sends button press & release signals so quickly
that the compositor receives move/resize request from the client AFTER
the button release signal is processed, so `interactive_finish()` is
never called.
Consolatis [Wed, 6 Mar 2024 23:22:51 +0000 (00:22 +0100)]
src/output.c: refactor virtual output related functions
This commit moves the virtual output related functions
into their own file at `src/output-virtual.c` with its
own include file to reduce `include/labwc.h` bit by bit.
Additionally, it removes the need to keep the
`server->headless.pending_output_name` char array around
by temporarily disconnecting the handler when creating a
new virtual output. This allows to set the output name
right in the `output_virtual_add()` call rather than to
store the pending name until the new output event handler
has been called.
It also makes adding a virtual fallback output easier in
a follow-up PR.
John Lindgren [Wed, 14 Feb 2024 08:11:32 +0000 (03:11 -0500)]
seat: don't deactivate view for any non-view surface
Now we now longer gray-out the active window when opening a focusable
popup menu (e.g. the applications menu from an XWayland panel). This
matches Openbox behavior.
John Lindgren [Wed, 14 Feb 2024 03:32:14 +0000 (22:32 -0500)]
xwayland: remove "try to focus on parent surface" logic
This was apparently to fix an Intellij focus issue, but I don't see any
issues with Intellij currently, and the logic is wrong when the parent
XWayland surface doesn't want focus (e.g. an XWayland panel with a
focusable applications menu).
Consolatis [Tue, 27 Feb 2024 22:25:45 +0000 (23:25 +0100)]
src/output.c: restore flicker free resize when running nested
PR #1301 did partly revert the first variant because
`lab_wlr_scene_output_commit()` (which uses the `output->pending`
state in contrast to `wlr_scene_output_commit()`) was deemd to
cause 'frozen' frames during video playback (#1273).
We are now back at using `lab_wlr_scene_output_commit()` for
unrelated reasons and the cause of the original issue #1273 was
likely that `wlr_scene_output_send_frame_done()` was only sent
on a successful commit. This was changed to always be sent.
So lets restore the flicker free nested resize as well.
Johan Malm [Sat, 2 Mar 2024 15:42:05 +0000 (15:42 +0000)]
view: add MoveToOutput `wrap` attribute
Support `wrap` in view_get_adjacent_output(). This means that when seeking
an adjacent output in a particular direction from an output that is
already furthest in that direction within the layout, rather than
returning NULL, wrap around from the leftmost to the rightmost, or topmost
to the bottommost and vice versa.
Jens Peters [Sat, 24 Feb 2024 18:12:56 +0000 (19:12 +0100)]
seat: fix configure condition for click method
Exclude none (zero) from the bitmask test , otherwise
the bitmask test is always true when click method is
configured to 'none' and as a result the configuration
will be skipped.
Consolatis [Thu, 22 Feb 2024 20:22:28 +0000 (21:22 +0100)]
src/output.c: notify clients about config errors
Preliminary fix for #1525.
Based on the protocol we should also revert all
previously correctly committed outputs. #1528
is doing just that but may cause regressions so
we need a short term solution and then deal with
potential issues in #1528 after the release.
Consolatis [Wed, 31 Jan 2024 21:09:15 +0000 (22:09 +0100)]
src/ssd: allow invisible resize area across outputs
This uses the new `view->outputs` bitset to calculate the intersection
with *all* outputs the view is currently visible on.
This ensures that the invisible resize handle works across outputs
while still making sure that it won't leak into neighboring ones just
because it is positioned closely to an output edge (either manually,
maximized or snapped via SnapToEdge or SnapToRegion).
Rick Calixte [Mon, 22 Jan 2024 19:44:58 +0000 (14:44 -0500)]
meson.build: install badges for labwc and migrate to data/
A .desktop file was previously added for the labwc session, this adds a
badge for it where it is supported. The .desktop files and the badges
are also moved to `data/`.