Commit graph

2441 commits

Author SHA1 Message Date
John Lindgren
990706b081 ssd: allow arbitrary cairo pattern as titlebar background
The titlebar background is now first rendered to a 1px wide buffer,
then stretched horizontally. This allows vertical gradients to be used.
2025-06-18 15:48:24 -04:00
John Lindgren
54b236e027 common/font: add scaled_font_buffer_create_for_titlebar()
Co-authored-by: tokyo4j <hrak1529@gmail.com>
2025-06-18 15:48:24 -04:00
John Lindgren
3ca7adace0 common/graphic-helpers: add a few cairo pattern helpers 2025-06-18 15:48:24 -04:00
John Lindgren
ee6f9a6baa theme: parse more color string formats for Openbox compatibility 2025-06-18 15:48:24 -04:00
John Lindgren
c4bae87c04 common/graphic-helpers: adopt lookup_named_color from xpm parser 2025-06-18 15:48:24 -04:00
Consolatis
30248e1ba3 Destroy xdg_popups when its parent is destroyed
Fixes: #2845
2025-06-18 20:19:48 +01:00
Consolatis
a8df2487b2 xwayland: support _NET_WM_ICON 2025-06-18 14:31:05 +09:00
Jens Peters
e0d3bebbb7 input: clear SSD hover effects after touch-up
Having a hover effect visible without interaction looks out of
place when there is no cursor (the cursor becomes hidden for/after
touch interaction until next mouse or tablet interaction). Just
clear the hover effect after touch-up to prevent this.
Note that SSD hover effects are still shown during touch-move and
touch-down.
2025-06-16 22:56:46 +02:00
Jens Peters
31dd21de5b input: use mouse emulation for touch when labwc menu is open
Only use the touch protocol when no labwc menu is open.
This ensure that labwc menus will be closed on first touch
down/up since cursor emulation takes care of closing a
menu.
This prevents that a labwc menu stay open during touch
interactions in native touch mode.
2025-06-14 14:07:35 +01:00
Jens Peters
bdd1b8dc60 input: handle tablet tool creation internally
No need anymore to expose this function.
2025-06-14 13:45:51 +01:00
Jens Peters
6f6fcbc2e1 input: move tablet tool functions into tablet.c
Just a big move and a rename of the tablet tool destroy handler.
2025-06-14 13:45:51 +01:00
Jens Peters
b3c1ef41c3 input: remove zero initialization
This is already done by `znew()`.
2025-06-14 13:45:51 +01:00
Jens Peters
9cf9e129e1 input: move tablet axis members to tablet tool
It doesn't matter much since those are about the combination
of tablet and tablet tool. That said, this feels slightly more
natural.
As a consequence we always create a tablet tool and decide
indirectly via `tablet_get_coords()` and the returning surface
if mouse emulation should be used or not. Now we can also
add a `motion_mode` to the tablet tool which is slightly cleaner.
2025-06-14 13:45:51 +01:00
tokyo4j
ab9cf4dc97 Bump xdg-shell version from 3 to 6
- Send xdg_toplevel.wm_capabilities
- Send xdg_toplevel.configure_bounds so that clients can map a window that
  fits within the usable area, without relying on
  view_constrain_size_to_that_of_usable_area() which is called after map.
- (The new "suspended" state should be handled by wlr_scene in the future)
2025-06-13 20:43:12 +01:00
Johan Malm
145de91932 config: add <core><primarySelection>
...to enable/disable primary selection clipboard support. This only works
on launch.

The reason it is useful to be able to disable this is that some clients
(like browsers) support middle-button-click to start scrolling up/down.

With some clients can be disabled via

   gsettings set org.gnome.desktop.interface gtk-enable-primary-paste false

...but for others (like chromium and electron based programs) a compositor
setting is required.

Fixes: #2815
2025-06-13 20:27:49 +01:00
Jens Peters
c63ba3c7fa cursor: omit pointer cursor shape for tablet tool
Omit cursor notifications from a pointer when a tablet
tool (stylus/pen) is in proximity. This is equivalent
to `handle_request_set_cursor()` and prevents a resize
cursor for out-of-surface scrolling with a tablet tool in
recent GTK4 (which uses the cursor shape protocol).
2025-06-13 19:24:20 +01:00
John Lindgren
9782ffa868 desktop: give focus to a modal dialog rather than its parent
Fixes: #2722
2025-06-13 18:40:29 +01:00
Consolatis
ea1df930e9 Wayland protocols: support ext_data_control_manager_v1 2025-06-13 17:44:16 +01:00
Consolatis
1f1e8dbf64 Wayland protocols: support wp_alpha_modifier_v1 2025-06-13 17:44:16 +01:00
Consolatis
f08a56aac9 server.c: prefix protocol version define with LAB_ 2025-06-13 17:44:16 +01:00
Consolatis
ba604e3a8c scene-helpers: use wlr_scene_output_needs_frame 2025-06-13 18:37:44 +02:00
John Lindgren
5a50a02ba3 xwayland: fix possible loss of focus when multiple views are unmapped
Due to the asynchronous nature of view_offer_focus(), there was a race
condition that could result in no view remaining active when multiple
views were unmapped at once. Check for this and prevent it.
2025-06-12 20:33:25 +01:00
John Lindgren
1b937ed247 xwayland: correctly return seat focus from menus/tooltips in CLion
CLion's main window uses the Globally Active input model, and since
8fb2ecefcb it is given focus asynchronously via view_offer_focus().
However, we need to return seat focus immediately after an unmanaged
surface (e.g. popup) is unmapped, or focus is lost completely.
2025-06-12 20:33:25 +01:00
John Lindgren
5a1466d355 xwayland: handle rare case of focus_in event occurring before map
This fixes a timing-dependent issue where the CLion main window was
sometimes not correctly focused at startup.
2025-06-12 20:33:25 +01:00
John Lindgren
8fb2ecefcb xwayland: always offer focus in Globally Active case
In 9e3785f8cd, a heuristic was added to assume that NORMAL and DIALOG
window types were always focusable. (This was before we had the "offer
focus" mechanism in place.)

However, we should still call wlr_xwayland_surface_offer_focus() for
these views, in case they actually don't want focus. (This is uncommon
but has recently been seen with WeChat popups, which have both NORMAL
and UTILITY type.)

To make this possible, refine view_wants_focus() to return either
LIKELY or UNLIKELY for Globally Active input windows. This decouples
the question of "should we try to focus this view" from the actual
mechanism used to do so.
2025-06-10 11:03:54 -04:00
tokyo4j
97ce4131bb Replace scaled_rect_buffer with lab_scene_rect
This fixes the gap between menu items and the menu border in an output
with a fractional scale due to the semantic gap between cairo and
wlroots's position-independent scene renderer.
2025-06-10 06:03:03 +09:00
tokyo4j
ffd400503e Replace multi_rect with lab_scene_rect
lab_scene_rect accepts the arbitrary number of borders and a background
color.
2025-06-10 06:03:03 +09:00
tokyo4j
4cc6b354b0 server: remove server->sig{int,term,chld}_source in server_finish() 2025-06-09 21:57:51 +01:00
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
Jens Peters
33fc1c6d05 input: emulate cursor axis for tablet tool mouse
We only have to deal with non-high-res mouses, so we can
emulate it even without having delta_discrete being
exposed by wlroots.
2025-06-08 05:31:23 +09:00
Jens Peters
8584e073de input: always use mouse emulation for tablet tool mouse
Using mouse emulation for a tablet tool mouse is just a practical
decision to let such a tool work more smootly, e.g. it avoids weird
menu issues in GTK applications. Since such a tool doesn't have
pen specifix axis like pressure or distance, no functionality is lost.

A solution fully in line with the protocol, which would pass the tool
mouse buttons to the client, would leave us with  e.g. non-working
buttons in current GTK4 since they don't handle the buttons
reported from the tool mouse.
May be this changes in future. But for now, let's just be practical.
2025-06-08 05:31:23 +09:00
Jens Peters
cf032b1fc1 input: do not bind motion mode to tablet
Instead, always derive it from the current tool. This prevents any
mismatches when working with multiple tools.
2025-06-08 05:31:23 +09:00
Jens Peters
36c1948d0b input: add tool_v2 NULL check
Should be quite unusual, but tool_v2 can be NULL.
2025-06-08 05:31:23 +09:00
Jens Peters
a73b866129 config: support tablet tool mouse buttons
Those are regular mouse buttons, but attached
to a tablet tool (which looks like a mouse).
2025-06-08 05:31:23 +09:00
Jens Peters
1859d5f113 config: formatting to improve readability 2025-06-08 05:31:23 +09:00
may
e96b5af42d libinput: implement threeFingerDrag feature 2025-06-07 21:30:07 +09:00
tokyo4j
22d319cce8 libinput: support <dragLock>sticky<dragLock> and enable it by default
It is recommended by libinput:
https://lists.freedesktop.org/archives/wayland-devel/2024-November/043860.html
2025-06-07 12:46:53 +01:00
tokyo4j
cc84cee75b scaled-icon-buffer: don't render twice in scaled_icon_buffer_set_view() 2025-06-07 08:54:34 +01:00
tokyo4j
624cf85afe view: simplify freeing of view->icon 2025-06-07 08:51:37 +01:00
Consolatis
74018495cd view.c: free icon name on view destroy 2025-06-07 08:33:22 +01:00
Consolatis
4d79f0057f Ensure the view signals are initialized early
This prevents a crash observed by the scaled-icon-buffer listening
to the `view->events.set_icons` signal before it is initialized.
For this to happen, the application needs to use the kde decoration
protocol and set it on the xdg_surface before creating the xdg_toplevel.

Fixes: #2798
2025-06-07 05:03:57 +02:00
tokyo4j
073d8c39c1 scaled-icon-buffer: fix window icons not loaded after Reconfigure
This patch fixes the issue that window icons become the fallback
one after Reconfigure, by setting scaled_icon_buffer->view_app_id (and
other properties) in scaled_icon_buffer_set_view().

The reason why the window icons were displayed before Reconfigure is that
applications usually enable decorations and then set app_id which fires
handle_view_set_icon().
2025-06-06 21:47:43 +02: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
tokyo4j
649773b4f8 buffer: add buffer_create_from_wlr_buffer() 2025-06-07 02:12:56 +09:00
tokyo4j
82b0235aca buffer: add buffer_resize() 2025-06-07 02:12:56 +09:00
tokyo4j
0657a1d767 view: add destroy signal 2025-06-07 02:12:56 +09:00
DreamMaoMao
614c008bea feat: add left-occupied and right-occupied to workspaces_find 2025-06-06 18:35:32 +02:00
DreamMaoMao
5cf4aa83e2 view.c: add new NO_OMNIPRESENT criteria 2025-06-06 18:35:32 +02:00
dd
c5b9e2665d
ssd: add configurable drop-shadows for tiled windows 2025-06-05 22:46:58 +02:00