aboutsummaryrefslogtreecommitdiff
AgeCommit message (Collapse)Author
2022-06-11Add missing &bi4k8
2022-06-11render/vulkan/pixel_format: do not leak props->...bi4k8
`vulkan_format_props_query` calls `query_modifier_support` which initializes fields of `props` with allocated memory. this memory is leaked if `query_modifier_support` does not find a supported format and shmtex is not supported, as in this case `add_fmt_props` ends up being false and the allocated fields of `props` are never freed.
2022-06-11xdg-shell: improve shell version checkKirill Primak
2022-06-08scene/layer_shell_v1.c: fix bug in width/height calculationsJohan Malm
...in wlr_scene_layer_surface_v1_configure() Reproduce bug with waybar by setting `"margin": 5,` in ~/.config/waybar/config. It will result in the right edge of the panel extending outside the edge of the output. The bug can also be reproduced with gtk-layer-demo by anchoring left/right/top/bottom and setting respective margins Relates-to: https://github.com/labwc/labwc/issues/382
2022-06-08matrix: remove wlr_matrix_projection()Simon Ser
69477051ccff ("matrix: deprecate wlr_matrix_projection") marked it as deprecated. 1 year later, we can now remove it from our public API.
2022-06-08render/gles2: simplify flipped projectionSimon Ser
Instead of computing the projection, then flipping, just provide the correct transform to wlr_matrix_projection().
2022-06-08output: use state setters in wlr_output_set_*Simon Ser
2022-06-08output: compare state before commitSimon Ser
Before calling wlr_output_impl.{test,commit}, perform a cheap comparison between the current and candidate state. Unset any fields which didn't change.
2022-06-08output: add output state settersSimon Ser
This ensures compositors don't forget to set the committed flag or the mode_type when setting a field.
2022-06-07scene/output_layout: Fix crash in scene_output_layout_output_destroyConsolatis
Closes: #3448
2022-06-07util/global: fix memory leak on display destroy in wlr_global_destroy_safeSimon Ser
If the display is destroyed before wlr_global_destroy_safe's timer fires, the struct destroy_global_data is leaked. This shouldn't cause issues in practice because the timer will never fire, but makes it harder to spot compositor memory leaks.
2022-06-07output: fix make/model/serial memory leakSimon Ser
These have been turned into `char *` in be86145322e6 ("output: turn make/model/serial into char *"), but forgot to add the cleanup logic.
2022-06-07output: fix leak of empty back buffer lockIsaac Freund
This refactors output_ensure_buffer() to not mutate the state passed, making the previous subtle behavior much more explicit. Fixes: d483dd2f ("output: add wlr_output_commit_state") Closes: #3442
2022-06-07backend/drm: fix NULL pointer deference due to typoIsaac Freund
2022-06-07backend/drm: make serial optionalSimon Ser
The EDID 1.4 spec says that the serial number is optional: > If this field is not used, then enter “00h, 00h, 00h, 00h”. Leave the wlr_output.serial field NULL in that case, and hide it from the output description.
2022-06-07backend/drm: unconditionally set "content type" to graphicsSimon Ser
CTA-861-G says that "graphics" is used to indicate non-analog (ie, digital) content. With that bit set, the sink should turn off analog reconstruction and other related filtering.
2022-06-06dmabuf: Don't leak file descriptors on error pathAlexander Orzechowski
2022-06-05Remove remaining wl_signal_emit callsSimon Ser
Replace them with wlr_signal_emit_safe, which correctly handles cases where a listener removes another listener. Reported-by: Isaac Freund <ifreund@ifreund.xyz>
2022-06-05wlr_output_commit_state: Make sure to clear the back bufferAlexander Orzechowski
Fixes: #3445
2022-06-04examples/screencopy-dmabuf: stop using strncpySimon Ser
strncpy doesn't guarantee that the result is zero-terminated.
2022-06-04examples/text-input: stop using strcpy/strcatSimon Ser
These functions are too easy to misuse, they don't do bounds checking.
2022-06-02backend/drm: fix check for no-op commitsIsaac Freund
Since 6936e163b, we short-circut no-op commits as an optimization. However, the logic in the check was slightly off.
2022-06-02wlr_scene_buffer: Update primary_output on output destroyAlexander Orzechowski
2022-06-02wlr_scene_buffer: Call output enter/leave after primary_output calculationAlexander Orzechowski
2022-06-02backend/drm: short-circuit no-op commitsSimon Ser
Some output commits (changing e.g. the output scale or transform) don't require any change in the KMS state. Instead of going through a KMS commit, return early. Blocking KMS commits can be expensive.
2022-06-01backend/drm: make commits without a buffer blockingSimon Ser
The wlr_output API requires compositors to wait for wlr_output.frame before submitting a new buffer. However, compositors can perform a commit which doesn't involve a buffer anytime. If the commit is a modeset, we set DRM_MODE_ATOMIC_ALLOW_MODESET and block until the commit is done. If it isn't, we currently always perform a non-blocking commit. This is an issue because a previous page-flip might still be in flight kernel-side, returning EBUSY. Fix this by using blocking commits when a buffer isn't submitted by the compositor. Closes: https://github.com/swaywm/sway/issues/6962 References: https://gitlab.freedesktop.org/wlroots/wlroots/-/issues/2239
2022-06-01xdg-shell: add support for v4Simon Ser
This adds a configure_bounds event to let the client know of the preferred maximum window geometry size.
2022-06-01compositor: send WL_SURFACE_ERROR_INVALID_SIZE for non-cursor surfacesSimon Ser
See the discussion at [1]: there's no easy way to fix libwayland-cursor without a new API. Sending the error for other roles will prevent the same client bug from appearing elsewhere. [1]: https://gitlab.freedesktop.org/wayland/wayland/-/issues/194
2022-06-01scene/output-layout: add initial outputsKirill Primak
2022-06-01scene/output-layout: improve ownership logicKirill Primak
This commit ensures that outputs that weren't created by the output layout helper aren't destroyed on the output layout change. Consider the following piece of logic: // struct wlr_output *o1, *o2; // struct wlr_scene *scene; // struct wlr_output_layout *layout; wlr_scene_attach_output_layout(scene, layout); wlr_output_layout_add_auto(layout, o1); struct wlr_scene_output *so2 = wlr_scene_output_create(scene, o2); wlr_output_layout_move(layout, o1, 100, 200); // so2 is invalid now
2022-06-01scene: add wlr_scene_output.events.destroyKirill Primak
2022-05-31scene/wlr_scene.h: fix indentationKirill Primak
2022-05-31output: drop wlr_output_cursor.events.destroySimon Ser
Compositors can just listen to wlr_output.events.destroy instead.
2022-05-31output: re-implement set_image with set_bufferSimon Ser
Avoids having two code-paths doing the same thing.
2022-05-31output: introduce wlr_output_cursor_set_bufferSimon Ser
This will supersede wlr_output_cursor_set_image, and then later also supersede wlr_output_cursor_set_surface.
2022-05-31output: remove noop backend check in wlr_output_cursor_set_imageSimon Ser
The noop backend doesn't exist anymore.
2022-05-31wlr_scene: Move children list from wlr_scene_node to wlr_scene_treeAlexander Orzechowski
2022-05-31wlr_scene: Inline wlr_scene_node_stateAlexander Orzechowski
This seems like nothing interesting was done with this. Let's simplify and allow us some flexibility in the future.
2022-05-31wlr_scene: Only allow parenting on a wlr_scene_treeAlexander Orzechowski
2022-05-31wlr_scene: Refactor wlr_scene (the root element) to encase a wlr_scene_treeAlexander Orzechowski
Co-authored-by: Isaac Freund <mail@isaacfreund.com>
2022-05-31backend/drm: improve atomic commit flag loggingSimon Ser
We weren't logging all of the flags, which made debugging more difficult.
2022-05-30relative-pointer-v1: don't allocate when inertSimon Ser
When the wl_pointer the zwp_relative_pointer_v1 is created with is inert, don't allocate any struct, just leave the resource's data pointer NULL.
2022-05-30relative-pointer-v1: remove unnecessary log messagesSimon Ser
Logging when a client creates or destroys an object is a bit too chatty.
2022-05-30relative-pointer-v1: remove unnecessary commentsSimon Ser
We don't do this in other implementations, so it feels out of place.
2022-05-30wlr_scene: Fix scaling with default source_boxConsolatis
Default to texture instead of destination_box geometry.
2022-05-30relative_pointer: handle inert pointer objectsRouven Czerwinski
Since 5e0ef70cc085 ("seat: Create inert objects for missing capabilities") wlroots can create inert seat objects when the capability is currently missing for the client but it had the capablity before. The client hoever will happily handover the wl_pointer resource to the relative_pointer implementation, creating a NULL pointer dereference when trying to access the seat_client which is set to NULL for inert objects. Since the protocol does not contain an error for such requests, we hand out an relative_pointer handle with the seat set to NULL. We also need to check whether there is an associated seat in send_relative_motion and need to tweak the destroy notifier in case no seat is available. This way we can hand out a valid relative_pointer resource and don't crash the compositor when trying to access an inert seat pointer resource in relative_pointer. Relevant WAYLAND_DEBUG=1 when testing a client and switching VT every second: [2619872.442] wl_seat@30.capabilities(3) [2619872.460] -> wl_seat@30.get_pointer(new id wl_pointer@36) [2619872.484] wl_data_device@25.selection(nil) [2619872.504] zwp_primary_selection_device_v1@26.selection(nil) [2619874.995] wl_seat@12.capabilities(3) [2619875.035] -> wl_compositor@5.create_surface(new id wl_surface@37) [2619875.088] -> wl_seat@12.get_pointer(new id wl_pointer@29) [2619875.105] -> zwp_relative_pointer_manager_v1@8.get_relative_pointer(new id zwp_relative_pointer_v1@27, wl_pointer@29) [2619875.127] -> wl_compositor@5.create_surface(new id wl_surface@35) [2619875.139] -> wl_seat@12.get_pointer(new id wl_pointer@43) [2619981.180] wl_seat@12.capabilities(2) [2619981.214] -> zwp_relative_pointer_v1@27.destroy() [2619981.226] -> wl_pointer@29.release() [2619981.236] -> wl_surface@37.destroy() [2619981.247] -> wl_pointer@43.release() [2619981.254] -> wl_surface@35.destroy() [2619981.262] wl_seat@12.capabilities(0) [2619981.285] -> wl_keyboard@33.release() [2619987.316] wl_seat@30.capabilities(2) [2619987.336] -> wl_pointer@36.release() [2619987.363] wl_seat@30.capabilities(0) [2619987.371] -> wl_keyboard@34.release() [2621932.880] wl_display@1.delete_id(41) [2621932.903] wl_display@1.delete_id(40) [2621932.910] wl_display@1.delete_id(27) [2621932.917] wl_display@1.delete_id(29) [2621932.924] wl_display@1.delete_id(37) [2621932.930] wl_display@1.delete_id(43) [2621932.944] wl_display@1.delete_id(35) [2621932.950] wl_display@1.delete_id(33) [2621932.959] wl_seat@12.capabilities(2) [2621932.976] -> wl_seat@12.get_keyboard(new id wl_keyboard@33) [2621936.875] wl_seat@12.capabilities(3) [2621936.893] -> wl_compositor@5.create_surface(new id wl_surface@35) [2621936.931] -> wl_seat@12.get_pointer(new id wl_pointer@43) [2621936.945] -> zwp_relative_pointer_manager_v1@8.get_relative_pointer(new id zwp_relative_pointer_v1@37, wl_pointer@43) [2621936.965] -> wl_compositor@5.create_surface(new id wl_surface@29) [2621936.987] -> wl_seat@12.get_pointer(new id wl_pointer@27) [2621942.796] wl_data_device@25.selection(nil) [2621942.817] zwp_primary_selection_device_v1@26.selection(nil) [2621942.823] wl_seat@30.capabilities(2)
2022-05-30build: make GBM optionalSimon Ser
Now that the DRM backend no longer depends on GBM, we can make it optional. The GLES2 renderer still depends on it because of our EGL device selection. This is useful for compositors with their own renderers, and for compositors using the Vulkan renderer.
2022-05-30output: add wlr_output_commit_stateSimon Ser
Same as wlr_output_commit, but takes a wlr_output_state.
2022-05-30output: add output_state_{init,finish}Simon Ser
2022-05-30output: add wlr_output_event_precommit.stateSimon Ser