Commit graph

178 commits

Author SHA1 Message Date
tokyo4j
85388d194e server: eliminate use of global vars 2025-06-09 21:57:51 +01:00
tokyo4j
88b15f1ca6 Bump wl_compositor version from 5 to 6 2025-06-09 21:56:08 +01:00
tokyo4j
fb077c0095 Support xdg-toplevel-icon protocol
This patch also changes the semantics of scaled_icon_buffer: rather than
calling scaled_icon_buffer_set_app_id() every time an app_id is set, we
can now call scaled_icon_buffer_set_view() just once so that multiple
scaled_icon_buffers bound to a window are automatically updated when an
app_id is set or new icon is set via xdg-toplevel-icon-v1.
2025-06-07 02:12:56 +09:00
Consolatis
e19f0fc267 server.c: add missing privileged protocols 2025-05-23 21:25:23 +01:00
John Lindgren
a3d6226728 treewide: remove empty statements in switch cases
For longer cases, factor out the logic to new functions.
For very short cases, just move the declaration before the switch.

v2: in one case, replace the switch with if/else.
2025-05-22 22:52:43 +01:00
zeusgoose
32ea970b1b drm_syncobj check backend support for timelines
ref: 17e2e52c6d
2025-05-22 20:29:24 +02:00
zeusgoose
052035e7d9 drm_syncobj_v1
ref: 05e895c463
2025-05-22 12:04:42 +02:00
Andri Yngvason
34947b7791 Enable ext-image-copy-capture-v1 2025-05-22 11:51:06 +02:00
Consolatis
d285b74a7b chase wlroots: new presentation_time version MR 4858
Ref: 4c74a8843a08a39d6278de4a26759d93155feb2c
("presentation-time: bump protocol version to v2")
2025-05-21 06:36:08 +01:00
Consolatis
0c2cf61895 chase wlroots: use WLR_PRIVATE (MR 4842)
Ref: 6006023a377868187f73d2e0922bbe952072684f
("Use WLR_PRIVATE for private fields")
2025-05-21 06:36:08 +01:00
tokyo4j
140e913c44 project wide: clean up event listeners on shutdown (part 2) 2025-03-13 20:08:59 +00:00
Consolatis
9e6aaa689a project wide: clean up event listeners on shutdown
This ensures all event listeners are removed before the emitting
wlroots object is being destroyed. This will be enforced with asserts
in wlroots 0.19 but there is no reason to not do it right now either.

This change in wlroots 0.19 is implemented via commit
8f56f7ca43257cc05c7c4eb57a0f541e05cf9a79
"Assert (almost all) signals have no attached listeners on destroy"
2025-03-13 17:33:51 +09:00
tokyo4j
b66c0d8797 magnifier: rename some functions 2025-02-23 14:17:31 +09:00
tokyo4j
fa6bffa6c6 osd: prevent preview outlines from overlapping OSD in first output
Following code didn't consider multi-monitor setup:

  wlr_scene_node_raise_to_top(&server->menu_tree->node);
  wlr_scene_node_raise_to_top(&output->osd_tree->node);

...because when executed twice, server->menu_tree is raised above
output->osd_tree for the first output. This resulted in a scene tree like
(higher to lower):

- output->osd_tree (for 2nd output)
- output->server->osd_state.preview_outline (placed just above menu_tree)
- sever->menu_tree
- output->osd_tree (for 1st output)

So the previous outline for window switcher is placed above the OSD in the
first output.
2025-02-17 15:41:44 +00:00
Consolatis
897799da5a server: on exit, destroy backends first
This fixes a UAF caused by trying to update the xcursor in a
output destroy handler, in turn caused by destroying the backend.

Fixes: #2539
2025-02-04 19:56:36 +00:00
tokyo4j
a0cf6bb068 Move "#if HAVE_LIBSFDO" inside desktop-entry.h 2025-01-25 07:27:21 +09:00
tokyo4j
925360ffba scaled-scene-buffer: block sharing of buffers created before reconfigure
This prevents potential bugs that buffers created by scaled_scene_buffers
before Reconfigure are reused by other newly created scaled_scene_buffers.

This is targeted for scaled_icon_buffer whose buffer creation depends on
server->sfdo.
2025-01-13 18:24:10 +09:00
tokyo4j
773bdc3823 osd: prevent preview outlines to be above OSD
86c3597 raised server->menu_tree above layer shell surfaces, but it caused
preview outlines for window switcher to be placed above the OSD because
the preview outlines are placed just above server->menu_tree.

So this commit fixes it by placing server->osd_tree above server->menu.
This also prevents layer-shell surfaces from covering the OSD.

Before (higher-first):
- preview outlines (just above menu)
- menu
- layer-shell (top/overlay/popup)
- osd

After (higher-first):
- osd
- preview outlines (just above menu)
- menu
- layer-shell (top/overlay/popup)
2025-01-06 21:02:22 +00:00
tokyo4j
a1e2e19a8f src/server.c: delete a comment which was missed to erase 2025-01-04 17:42:44 +09:00
Consolatis
663f913ee4 keyboard: cancel keybind_repeat on reconfigure
Currently we may end up in an endless loop of Reconfigure requests
if the Reconfigure action was called by a keybind. If the reconfigure
takes too long (which may happen on slow systems with libsfdo full
debug logging for example) the reconfigure might be triggered again
and again.

To prevent that, simply cancel all keybind_repeat timers on reconfigure.
2024-12-31 19:53:34 +09:00
Johan Malm
86c35976ba menu: put menu_tree above overlay layer 2024-12-19 16:01:31 +09:00
Consolatis
64bb57afa2
Add support for xdg-foreign-v1 and xdg-foreign-v2 (#2400) 2024-12-03 20:23:57 +00:00
Consolatis
f1e43762e0 server.c: block privileged protocols for sandboxed clients
In the longer term we want this to be user-configurable (and also depend
on the sandbox engine, app_id and instance).

But dropping privileged protocols for sandboxed clients in the meantime
seems like a sensible thing to do and matches user expectations.

Related: #2392
2024-12-03 19:32:22 +00:00
Jens Peters
f69576f8a6
icon-loader: rename to desktop-entry
Also rename `struct icon_loader` to `struct sfdo`.
2024-11-19 18:36:08 +01:00
tokyo4j
eaf11face6 server: release all the resources on exit
Release all the resources including wlr_allocator, wlr_renderer,
wlr_backend and wlr_scene. This makes it a lot easier to detect memory
leaks with ASAN.

On wlroots side, the commit ce615a44 needs to be reverted to detect memory
leaks with EGL renderer.
2024-11-12 16:21:06 +09:00
tokyo4j
71629741d6 server: release server->ssd_hover_state on exit 2024-11-12 16:21:06 +09:00
Consolatis
d6a48ab7a7 foreign-toplevel: add ext-toplevel-list support 2024-11-09 20:06:19 +00:00
Consolatis
2a825008c6 foreign-toplevel: create generic abstraction 2024-11-09 20:06:19 +00:00
John Lindgren
7912665b0f output: remove ported wlr_output functions
We have several wlr_output_* functions which are just wrappers around
corresponding wlr_output_state_* functions and don't actually touch the
wlr_output itself. These probably made some sense historically, but IMHO
they are just confusing now. So remove them and call wlr_output_state_*
directly.

Rename wlr_output_commit() (still useful) to output_state_commit().
2024-10-29 21:39:19 +00:00
Jens Peters
c4aa3fe3e6 server: add dmabuf feedback
Co-authored-by: Consolatis <35009135+Consolatis@users.noreply.github.com>
2024-10-13 13:54:34 +01:00
tokyo4j
a745f91169 ssd: support window icons
The default `titleLayout` is updated to `icon:iconify,max,close` which
replaces the window menu button with the window icon.

When the icon file is not found or could not be loaded, the window menu
icon as before is shown.

The icon theme can be selected with `<theme><icon>`.

This commit adds libsfdo as an optional dependency. `-Dicon=disabled` can
be passsed to `meson setup` command in order to disable window icon, in
which case the window icon is always replaced with a window menu button.
2024-09-25 18:04:09 +09:00
Christopher Snowhill
3879f1f080 backend/drm: Implement support for renderer loss recovery
This implementation is nearly identical to Sway's, except that
it also reloads the configuration, to spur on reloading the
server-side decorations.

v2: Fix style.
v3: Add a reset to the magnifier.
v4: Oops, restructure reset handler a bit.
v5: Commit the magnifier reset immediately, before freeing the
    lost allocator and renderer.
v6: Also check for failed render pass, which may return NULL.
v7: Add a second NULL test, just in case.
2024-07-23 14:44:31 +02:00
Consolatis
40684bad9d magnifier: disable direct scanout when active
Fixes: #1980
2024-07-17 22:44:48 +02:00
Consolatis
0a03c00b8b chase: backend create now requires event_loop arg
https://gitlab.freedesktop.org/wlroots/wlroots/-/merge_requests/4443
2024-07-17 21:28:59 +01:00
Consolatis
36b0dc2db4 chase: output->pending
https://gitlab.freedesktop.org/wlroots/wlroots/-/merge_requests/4202
2024-07-17 21:28:59 +01:00
Consolatis
d8f57fe4e7 chase: presentation is now handled internally
https://gitlab.freedesktop.org/wlroots/wlroots/-/merge_requests/4482
2024-07-17 21:28:59 +01:00
Consolatis
50047db8b2 chase: output-layout takes wl_display in constructor
https://gitlab.freedesktop.org/wlroots/wlroots/-/merge_requests/4310
2024-07-17 21:28:59 +01:00
Consolatis
3e614814fe chase: input inhibit removal
https://gitlab.freedesktop.org/wlroots/wlroots/-/merge_requests/4440
2024-07-17 21:28:59 +01:00
Yuri Nesterov
65f7499f1c wayland: add support for security-context-v1 2024-05-29 22:28:06 +01:00
Jens Peters
9c219564be server: create tablet-v2-manager 2024-05-27 22:40:50 +02:00
tokyo4j
23b96ad2a6 Replace _ with - in source file names 2024-05-22 07:10:51 +01:00
tokyo4j
b0ba585ff8 overlay: allow to draw both/either of filled/outlined rectangle
Filled/outlined rectangles shown as snapping overlay are now enabled/disabled
independently with `snapping.overlay.[region|edge].bg.enabled` and
`snapping.overlay.[region|edge].border.enabled`.

To keep the default behavior, `*.bg.enabled` is yes and `*.border.enabled` is
no for hardware-based renderers, while `*.bg.enabled` is no and
`*.border.enabled` is yes for software-based (pixman) renderer.

Users can now use a filled rectangle as an overlay even with pixman renderer.
However, this may severely impact performance when used with translucent
`snapping.overlay.[region|edge].bg.color`.

This commit includes a refactor to use substruct `theme_snapping_overlay`
inside `theme` in order to pass it to `create_overlay_rect()` in a cleaner way.

Breaking changes is:
- `snapping.overlay.[region|edge].fill` is now removed.
2024-04-22 19:22:23 +01:00
tokyo4j
bc0174d849 workspaces: react to Reconfigure
Changes in `<desktops><names>` or `<desktop><number="" prefix="">` required
restarting labwc to take effect.

This commit adds `workspaces_reconfigure()` to update `server->workspaces` on
Reconfigure.
2024-04-22 05:44:52 +09:00
Johan Malm
48e6c0009c server: refactor to avoid *g_server
No functional change intended.
2024-04-21 16:54:17 +02:00
Johan Malm
c841a25acf Add -S|--session <command> option
...to start <command> on startup and to terminate the compositor when
<command> exits.

This is useful for session management as it allows the session client (for
example `lxqt-session`) to terminate labwc - be exiting itself.

Under X, xinit starts the server and keeps it alive for as long as
lxqt-session runs. Thus either the session client starts the Window
Manager, or the Window Manager can be launched independently first.  On
Wayland, the Compositor is both Display Server and Window Manager, so the
described session management mechanisms do not work because the Compositor
needs to be running before the session can function.

As some session clients support both X11 and Wayland, this command line
option avoids re-writes and fragmentation.

Co-authored-by: @Consolatis
2024-04-14 13:05:25 +02:00
Consolatis
55138dbe0e server: don't create headless backend twice
This may happen when running with WLR_BACKENDS=headless.

Fixes: #1618
2024-04-13 19:38:51 +01:00
Consolatis
e5488fefcb common/spawn.c: add spawn_piped() 2024-03-24 21:44:16 +00:00
Consolatis
60aab98e8d 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>
2024-03-08 13:54:13 +01:00
tokyo4j
334cd09106 IME: support input method 2024-03-05 20:28:15 +00:00
Consolatis
7e60c57b81 src/server.c: filter out xwayland shell for usual clients 2024-03-04 21:35:40 +00:00