src/xdg.c: verify source surface for xdg_activation request
wlroots < 0.17 didn't allow to reliably check the source surface of
an xdg activation request as it reset the surface to NULL when it
was destroyed before the token was used. This happens regularly for
notifications for example. Thus we treated the token as valid even
without checking for the source surface.
wlroots 0.17 added a new_token signal where we can attach information
to the existing token which we can then use when evaluating activation
requests. This patch implements that check.
I forgot to set session_lock_manager->lock, so it was always NULL.
This barely worked, but allowed multiple session-locks and conflicted
with comments in session-lock.h.
Before this patch, we were leaking memory [0] because the
shadow implementation did not free the ssd_parts on destruction.
There was also no check if shadows were actually enabled via
rc.xml or not so this also impacted people who were not using
shadows but were not setting the shadow size via their theme to 0.
[0] 44 bytes per ssd_part * 8 parts * 2 states == 704 bytes per
view closed. Note that Reconfigure also re-creates the SSD, thus
we were also leaking 704 bytes * nr_views per Reconfigure.
John Lindgren [Thu, 27 Jun 2024 23:17:38 +0000 (19:17 -0400)]
xdg: support xdg-shell v3 with popup repositioning
See https://gitlab.freedesktop.org/wlroots/wlroots/-/merge_requests/3514
which added support on the wlroots side.
We now re-run popup positioning (for both xdg-shell and layer-shell
popups) when the "reposition" event is received. This allows popups that
change size (such as qmpanel's applications menu) to be positioned
correctly.
xdg-shell v3 also gives the compositor some additional "hints" for popup
positioning (reactive, parent_size, and parent_configure_serial) which
are available but we don't make use of currently.
Consolatis [Mon, 17 Jun 2024 14:36:07 +0000 (16:36 +0200)]
magnifier: fix flickering on simultaneous gamma changes
Gamma changes take another code path and thus did not
render the magnifier. This patch consalidates both
code paths and therefore also renders the magnifier on
gamma changes.
tokyo4j [Wed, 19 Jun 2024 02:48:39 +0000 (11:48 +0900)]
view: don't try to restore to very small width/height on unmaximize
Thonny (Python IDE made with Tk) may set the window geometry to 1x1 and
maximizes the window before mapping. This set `view->natural_geometry`
to 1x1, so labwc tried to restore the window geometry to it on
unmaximize, causing validation errors in `ssd_update_geometry()` as its
width and height are smaller than `LAB_MIN_VIEW_{WIDTH,HEIGHT}`.
This commit fixes it by not allowing geometries smaller than
`LAB_MIN_VIEW_{WIDTH,HEIGHT}` in `view->natural_geometry`.
droc12345 [Wed, 26 Jun 2024 21:03:56 +0000 (16:03 -0500)]
action: remember initial direction of PreviousView
...when cycling windows. Also make the toggling of direction when shift
is pressed relative to the initial direction. For example if W-j is
bound to PreviousWindow, subsequent key presses will continue to
cycle backwards unless shift if pressed.
Add documentation for using shift/arrow keys in Next/Previous
Consolatis [Sun, 9 Jun 2024 22:01:54 +0000 (00:01 +0200)]
xwayland: reset cursor image on cursor theme reload
As wlr_xwayland caches the pixel data when not yet started
up due to the delayed lazy startup approach, we do have to
re-set the xwayland cursor image when reloading the cursor
theme. Otherwise the first X11 client connected will cause
the xwayland server to use the cached (and destroyed) pixel
data.
To reproduce:
- Compile with b_sanitize=address,undefined
- Start labwc (nothing in autostart that could create
a X11 connection, e.g. no GTK or X11 application)
- Reconfigure
- Start some X11 client
Simon Long [Fri, 26 Apr 2024 10:05:12 +0000 (11:05 +0100)]
Add onRelease option to <keybind>
...to make keybind actions fire on the release event rather then when the
key is first pressed. This is useful for binding actions to modifier keys
only. The most likely use-case for this is the binding of a Super key to a
menu, for example:
tokyo4j [Mon, 3 Jun 2024 08:54:49 +0000 (17:54 +0900)]
IME: fix flicker when popup surface is initially mapped
Before this commit, a popup surface was placed at (0,0) on its creation.
So if the popup surface is already mapped on its creation, the popup was
shown at (0,0) then quickly moved to the input-rect on surface commits
or input-rect updates.
tokyo4j [Mon, 3 Jun 2024 08:50:13 +0000 (17:50 +0900)]
IME: destroy popup node when popup is destroyed
Before this commit, scene-nodes for IME popup were destroyed when
the bound wl_surface is destroyed. However, this caused a bug that
multiple popup nodes are shown when input_popup_surface_v2 is recreated
with the same wl_surface.
Jens Peters [Tue, 28 May 2024 18:50:05 +0000 (20:50 +0200)]
input: prevent cursor notifications from pointer and tablet tool
... at the same time. Omit cursor notifications from
a pointer when a tablet tool (stylus/pen) is in
proximity. We expect to get cursor notifications
from the tablet tool instead.
tokyo4j [Wed, 29 May 2024 15:29:59 +0000 (00:29 +0900)]
session-lock: fix flashing screen when the session is locked
The protocol says screen should be filled with opaque color when the
session is locked, but it allows some delay to wait for the session-lock
client to offer surfaces.
With this commit, filling the sceen with opaque color is delayed by 100ms.
tokyo4j [Wed, 29 May 2024 15:13:34 +0000 (00:13 +0900)]
session-lock: refactor
- Replaced `session_lock` with `session_lock_manager` which is
persistent throughout the session.
- Replaced `session_lock->abandoned` with `session_lock_manager->locked`.
Old `session_lock->abandoned` is equal to
`!session_lock_manager->lock && session_lock_manager->locked`.
- Eliminated the use of global variables in `session-lock.c`.
- Changed some function names.
Consolatis [Wed, 22 May 2024 01:36:33 +0000 (03:36 +0200)]
src/config/rcxml.c: ensure parent action is available
Before this patch, having a branch or query with an invalid or
missing parent action would trigger an assert when trying to
access the parent. This patch ensures that we bail out instead.
tokyo4j [Mon, 20 May 2024 11:36:30 +0000 (20:36 +0900)]
magnifier: fix high CPU usage even with magnifier disabled
Fixes the high CPU usage issue reported by @droc12345.
Changing `last_mag != is_magnify_on()` to `last_mag == is_magnify_on()`
works fine, but this check isn't needed in the first place because
magnifier state changes call `wlr_output_schedule_frame()`, which sets
`wlr_output->needs_frame`.
Also added a FIXME comment regarding the performance issue when the
magnifier is enabled.
tokyo4j [Thu, 16 May 2024 05:57:31 +0000 (14:57 +0900)]
IME: support multiple IME popups
We didn't support multiple IME popups since input-method-v2 protocol
has no way to position them individually, but we should support it to
provide IME developers with more programming flexibility.
Consolatis [Sat, 4 May 2024 20:17:24 +0000 (22:17 +0200)]
src/main: delay startup of applications until event loop is ready
This mostly allows for using scripts that trigger a labwc SIGHUP
to work as expected. Before this patch, there was a race between
the event loop starting up and the autostart scripts executing.
One example of such a use-case is dynamically setting the keyboard
layout or cursor theme via environment variable based on feedback
from a dbus service like discussed in #1588.