Johan Malm [Thu, 21 Sep 2023 22:09:05 +0000 (23:09 +0100)]
action: do not expand env vars in Exec action
...<command> argument (but still resolve tilde).
This makes it easier to write sh -c '' constructs without turning labwc
into a shell parser in order to expand environment variables, whilst
respecting single quotes and escaped characters as well as ignoring
subshells syntax like $(foo) and backticks.
Also, fix bug where buffer length+alloc get out-of-sync
src/ssd: use view->ssd_titlebar_hidden for ssd_thickness calculations
Before this patch we were using the internal .enabled flag of the titlebar
tree node. This failed due to ssd_thickness() not having view->ssd assigned
when initially called. Instead of assigning view->ssd within ssd_create()
we just always use the view boolean flag directly. This fixes an issue
where a border-only view that has been snapped to an edge or region would
have a gap in the size of the titlebar on top after a Reconfigure.
Ensure xdg and xwayland string_prop() handlers deal with destroying views
When a view is destroyed (including override_redirect in the xwayland
case), the view_destroy() handler is called which checks for a currently
open A-Tab window switcher and causes an update there to remove the
destroying view from the list. Before view_destroy() is called, both
xwayland and xdg handlers reset the xdg_surface / xwayland_surface.
The window switcher update then creates a list of all windows which do
not have the 'skipWindowSwitcher' window rule property set. If there is
at least one 'matchOnce' window rule configured, this also tries to get
string properties of the destroying view which already had their
xdg_surface / xwayland_surface reset and thus run into an assert.
This patch fixes that so that the string_prop() handlers always return
an empty string in those cases rather than running into the assert.
For a more in-depth analyses and alternative solutions see the linked
issue.
Johan Malm [Sun, 17 Sep 2023 10:40:48 +0000 (11:40 +0100)]
build: make svg buttons optional
Add -Dsvg=disabled to your meson setup/configure command to disable svg
buttons even if the correct version of librsvg is available.
Note that regardless of this patch and the value of the 'svg' variable,
the build will gracefully fall back to not using librsvg if the correct
version is not available.
This allows to define keybinds as layout dependent. E.g. keybinds
only trigger if the configured key exists in the currently active
keyboard layout. The keybind will also only trigger on the physical
key that is mapped to the configured key in the active layout.
By default the new argument is false which means all keybinds by
default are layout agnostic. This optional argument can be used
to restore the earlier default behavior of having keys layout
dependent.
Consolatis [Mon, 28 Aug 2023 14:43:51 +0000 (16:43 +0200)]
src/cursor: ensure interactive move/resize ends correctly for CSD clients
Before this patch, when moving a CSD client below a layershell surface -
like a panel that was configured with either the "top" or "overlay"
layers - we'd only send a matching release button event to the client but
not actually end the interactive move operation. That caused the drag to
continue even though the user already released the mouse button.
In comparison, SSD clients were not suffering from the same issue because
the initial mouse "down" event was not attached to any client surface and
thus it would not take the first early return because there was no surface
attached to the release event.
This patch fixes the issue by reordering the conditions where we return
early. It also ensures that when we finish the move, we still send the
release event to CSD clients.
Consolatis [Fri, 25 Aug 2023 11:22:23 +0000 (13:22 +0200)]
src/ssd: fix tiling via keybind when maximized
The previous PR introduced an issue with tiling based actions
like SnapToEdge and SnapToRegion using outdated SSD margin
values when called via keybind while maximized. That resulted
in wrong offsets for the tiled windows.
This commit restores the functionality by forcing a re-calculation
of the SSD margin when changing the maximized state.
Thanks to @Flrian for reporting the issue via IRC.
Make src/osd.c use this new interface. Note that always-on-top views are
still filtered out from the window-switcher and that desktop_cycle_view()
needs to be re-worked before always-on-top views can be opted in.
Consolatis [Sun, 6 Aug 2023 08:26:04 +0000 (10:26 +0200)]
Restore SnapToEdge and MoveToEdge default keybinds
When adding the fallback keybinds we add them as string but expect them being an int.
This commit fixes that by using the same parsing routines that are used when parsing
user supplied configuration.
Consolatis [Sun, 6 Aug 2023 07:47:37 +0000 (09:47 +0200)]
Fix crash when using _ToEdge actions when using the default keybinds
This happens because of two separate bugs:
- The action validation failed to verify the data type of the argument
- When adding the fallback keybinds we add them as string but expect them being an int
Johan Malm [Wed, 2 Aug 2023 19:57:39 +0000 (20:57 +0100)]
view: minimize parents/children together
Minimize the whole view-hierarchy from top to bottom regardless of which
one in the hierarchy requested the minimize. For example, if an 'About' or
'Open File' dialog is minimized, its toplevel is minimized also, and vice
versa.
For reference:
- This is consistent with in openbox, where child views (dialogs) can be
minimized, but when doing so the parent is also minimized.
- In mutter these types of dialogs cannot be minimized (via client-menu or
otherwise).
- In both openbox and mutter, when a toplevel window is minimized any open
children are also minimized.
Johan Malm [Fri, 4 Aug 2023 20:58:52 +0000 (21:58 +0100)]
xwayland: guard against mapping view without surface
...which may occur if a user minimizes an xwayland view (typically a
child view such as a dialog) at the same time as the client sends a
request-unmap, which xwayland clients sometimes do without actually
requesting destroy and just leave them dangling.
Johan Malm [Wed, 19 Jul 2023 16:19:37 +0000 (17:19 +0100)]
view: move (z-order) ancestors with modal dialogs
...so that other window cannot be positioned between modal dialogs and
their parent windows. This is consistent with Gtk3 and Qt5 applications on
mutter and openbox.
Johan Malm [Fri, 4 Aug 2023 21:37:39 +0000 (22:37 +0100)]
labwc-theme(5): describe color alpha value
...which has been supported for a long time but not been reflected in the
man page. Colors can be parsed as `#rrggbb aaa` with aaa representing a
decimal alpha value. This could be used to hide a button, for example:
Consolatis [Wed, 2 Aug 2023 02:30:50 +0000 (04:30 +0200)]
actions: use enum for _ToEdge actions
This also improves the config robustness as invalid edge names will now
prevent the action to be created in the first place and the user gets
notified about the issue.
Johan Malm [Mon, 17 Jul 2023 19:08:32 +0000 (20:08 +0100)]
keyboard: fallback on raw keysyms for bindings
When looking up keybinds, if the translated keysyms (based on the keymap
for the keyboard) do not match a defined keybind, try raw keysyms (as if
there were no modifier translation).
This allows a user to define for example keybind with "S-1" rather than
"S-exclam". It also supports "W-S-Tab".
Johan Malm [Mon, 10 Jul 2023 15:56:02 +0000 (16:56 +0100)]
dnd: fix focus at end of dnd operation
By default, leave keyboard-focus with the surface that originally had it
at the end of a dnd operation. This is consistent with the default
behaviour of openbox and mutter.
If the 'focus/followMouse' option is enabled, then focus on the surface
under the cursor at the end of the dnd operation.