On switching to a console vt when an application is painting,
labwc produces a stream of log messages of the form
```
`00:00:52.345 [ERROR] [../src/output-state.c:45] Failed to commit frame` lines.
``
This patch tries to follow the lead from the solution to this problem
in https://github.com/WayfireWM/wayfire/pull/2484.patch
As noted in that commit message, this patch depends on unreleased
patches to seatd (master) to work reliably, and there may be a a risk
of locking up the labwc if it is used with the seatd-0.8.0.
Check that the session is initialized (is not NULL) before checking it
is active.
Co-authored-by: Madhu <enometh@net.meer>
...to guard against recursive constructs like FOO=$FOO:bar which would
grow on each reconfigure.
Add log message as well as a warning against this in the man page.
Prior to this commit, a menu opened with:
<action name="ShowMenu">
<position x="center" y="center" />
</action>
was not correctly centered when menu.items.padding.x is non-zero.
... to more specific/logical locations, to make it possible in future to
*not* immediately auto-configure new outputs when connected.
In particular:
- Move regions_reconfigure_output() and session_lock_output_create()
into add_output_to_layout(), which would be called also if the output
is enabled later.
- Move seat_output_layout_changed() to do_output_layout_change() so it
is called for any layout change, not just adding new outputs.
Currently, the cursor plane does not allow async page flips which causes tearing page flips to be rejected if the cursor was moved.
However, in games where no cursor image is present, the async page flips can still work as expected.
Instead of permanently disabling tearing after too many failures, test the output state first before each frame to see if we can commit with tearing_page_flip set to true.
session_lock_output_create() can safely no-op if the lock output has
already been created for the specified output. This scenario doesn't
happen currently, and the change is in preparation for some other
output-related changes I am working on. But I think it's a nice code
improvement worth merging separately.
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().
...to all clients rather than just the one with keyboard focus on keyboard
enter/create, modifer press/release and wlr_seat_set_keyboard().
This enables:
- Clients such as panels to display the current keyboard layout without
introducing new wayland protocols or other IPC.
- Unfocused xdg-shell clients to understand button press with keyboard
modifiers for example Ctrl+click.
The keymap is forwarded to all clients in wlr_seat_set_keyboard(). When a
keymap contains multiple layouts, the selection is made via modifiers,
which previously were only sent to the client with keyboard focus.
Tested with: https://github.com/johanmalm/keyboard-layout
Ref: https://gitlab.freedesktop.org/wlroots/wlroots/-/merge_requests/4496Fixes: #2271
The iterator value of `wl_list_for_each` should never be referenced
outside the loop because it points to invalid memory location when the
list is empty.
When `wlr_seat_pointer_notify_button()` is called on a button press event,
that funtion must also be called on the subsequent button release event
because otherwise wlroots thinks the button is kept pressed and it
causes issues with validating DnD requests from clients, where only one
button must be pressed. This was the case when a CSD client opens a
client-menu via `show_window_menu` request after pressing its window with
the right button because we were always not notifying button release
events while a menu is open.
So let's keep track of bound (pressed but not notified) buttons and notify
button release events only when the button is not bound, like we are doing
for key-state.
The rounded mask buffer to be applied to the corner button buffer should
be resized and shifted when there's a vertical gap between the button
and the window border.