summaryrefslogtreecommitdiff
Commit message (Collapse)AuthorAgeFilesLines
* build: override wayland-scanner depHEADmainSimon Ser2023-05-091-0/+3
| | | | | | This allows a parent project to find wayland-scanner. Signed-off-by: Simon Ser <contact@emersion.fr>
* server: stop wl_display_run() on dispatch errorSimon Ser2023-05-091-1/+3
| | | | | | | If wl_event_loop_dispatch() fails, we could enter an infinite loop, repeatedly calling a failing wl_event_loop_dispatch() forever. Signed-off-by: Simon Ser <contact@emersion.fr>
* util: simplify wl_fixed_to_double()Simon Ser2023-05-091-8/+1
| | | | | | | | We can just use a simple division instead of bit operations with magic numbers. Readability matters more than performance here. References: https://gitlab.freedesktop.org/wayland/wayland/-/merge_requests/296 Signed-off-by: Simon Ser <contact@emersion.fr>
* event-loop: optimize timer check logicYang Wang2023-05-031-1/+3
| | | | | | | the 'has_timers' flag can be returned directly without having to track all the ready events when a timer is found ready. Signed-off-by: Yang Wang <KevinYang.Wang@amd.com>
* tests: drop misleading fixed-benchmarkManuel Stoeckl2023-05-032-116/+0
| | | | | | | | | | | Because this benchmark performed wl_fixed_to_double conversions on a long sequence of consecutive integers, the compiler could optimize away the addition performed in wl_fixed_to_double, merging it with the loop iteration code. This made tests/fixed-benchmark.c significantly underestimate the actual cost of the current wl_fixed_to_double implementation. Signed-off-by: Manuel Stoeckl <code@mstoeckl.com>
* protocol: add new shm formatsManuel Stoeckl2023-05-031-0/+15
| | | | | | This brings the format list up to date with libdrm 2.4.115. Signed-off-by: Manuel Stoeckl <code@mstoeckl.com>
* event-loop: Handle EINTR and EAGAIN in wl_event_loop_dispatchJoshua Ashton2023-05-021-1/+76
| | | | | | | | | | | This fixes an issue where it was not possible to start Gamescope under GDB on some setups. https://github.com/ValveSoftware/gamescope/issues/743 Any signals would cause epoll_wait to return -1 and set errno to EINTR. This also handles the EAGAIN case like the other polling loops in libwayland. Signed-off-by: Joshua Ashton <joshua@froggi.es>
* protocol: improve wl_keyboard focus documentationXaver Hugl2023-04-121-2/+15
| | | | | | | | The compositor must not send any key events while a surface is not focused, but in order to allow for common actions like ctrl+scroll for zooming to work with unfocused surfaces it may do so with modifiers. Signed-off-by: Xaver Hugl <xaver.hugl@gmail.com>
* protocol: disallow re-using wl_data_sourceSimon Ser2023-04-041-0/+9
| | | | | | | | | | | | As pointed out in [1], re-using a wl_data_source for multiple start_drag or set_selection requests has bad consequences, because this object has events that allo tracking the state of a selection/drag-and-drop operation. Tracking two operations at the same time isn't possible with this interface. [1]: https://lists.freedesktop.org/archives/wayland-devel/2019-January/039936.html Signed-off-by: Simon Ser <contact@emersion.fr> Signed-off-by: Daniel Stone <daniels@collabora.com>
* build: re-open main branch for regular developmentSimon Ser2023-04-041-1/+1
|
* build: bump to version 1.22.0 for the official release1.22.0Simon Ser2023-04-041-1/+1
|
* build: bump to version 1.21.93 for the RC1 release1.21.93Simon Ser2023-03-281-1/+1
|
* Add a .mailmap fileFaith Ekstrand2023-03-251-0/+3
| | | | | | | | | This will let command-line Git tools re-map my name and e-mail address properly. I'm using my personal e-mail address and not my Collabora address because I'm not actively contributing to Wayland anymore and this is mostly for letting people find me should they dig me up in the project history. Signed-off-by: Faith Ekstrand <faith@gfxstrand.net>
* build: bump version to 1.21.92 for the beta release1.21.92Simon Ser2023-03-161-1/+1
|
* client: fix wl_display_disconnect() documentationSimon Ser2023-03-071-2/+3
| | | | | Signed-off-by: Simon Ser <contact@emersion.fr> Closes: https://gitlab.freedesktop.org/wayland/wayland/-/issues/361
* client: Do not warn about attached proxies on default queue destruction.Alexandros Frantzis2023-03-012-6/+71
| | | | | | | | | | | | | | If the default queue is being destroyed, the client is disconnecting from the wl_display, so there is no possibility of subsequent events being queued to the destroyed default queue, which is what this warning is about. Note that interacting with (e.g., destroying) a wl_proxy after its wl_display is destroyed is a certain memory error, and this warning will indirectly warn about this issue. However, this memory error should be detected and warned about through a more deliberate mechanism. Signed-off-by: Alexandros Frantzis <alexandros.frantzis@collabora.com>
* build: bump version to 1.21.91 for the alpha release1.21.91Simon Ser2023-02-281-1/+1
|
* client: Abort when trying to add an event to a destroyed queueAlexandros Frantzis2023-02-282-0/+66
| | | | | | | | | | Detect when we are trying to add an event to a destroyed queue, and abort instead of causing a use-after-free memory error. This situation can occur when an wl_event_queue is destroyed before its attached wl_proxy objects. Signed-off-by: Alexandros Frantzis <alexandros.frantzis@collabora.com>
* tests: Support tests that check for client failureAlexandros Frantzis2023-02-282-3/+21
| | | | | | | | Add the display_destroy_expect_signal() function to check that test clients exit due to a particular signal. This is useful for checking that clients fail in an expected way. Signed-off-by: Alexandros Frantzis <alexandros.frantzis@collabora.com>
* client: Warn when a queue is destroyed with attached proxiesAlexandros Frantzis2023-02-282-0/+109
| | | | | | | Log a warning if the queue is destroyed while proxies are still attached, to help developers debug and fix potential memory errors. Signed-off-by: Alexandros Frantzis <alexandros.frantzis@collabora.com>
* tests: Capture the test client logAlexandros Frantzis2023-02-283-2/+104
| | | | | | | Capture the test client log to a temporary fd, so that is accessible by both the test server process and the test client process. Signed-off-by: Alexandros Frantzis <alexandros.frantzis@collabora.com>
* client: Track the proxies attached to a queueAlexandros Frantzis2023-02-281-0/+22
| | | | | | | | Maintain a list of all wl_proxy objects that are attached to a wl_event_queue. We will use this information in upcoming commits to warn about improper object destruction order that can lead to memory errors. Signed-off-by: Alexandros Frantzis <alexandros.frantzis@collabora.com>
* shm: fix segfault when accessing destroyed pool resourceSimon Ser2023-02-271-4/+6
| | | | | | | | | | | With wl_shm_buffer_ref_pool(), it's possible for a wl_shm_pool to outlive its wl_resource. We need to be careful not to access wl_shm_pool.resource if it's been destroyed. Reset resource to NULL in the resource destroy handler, and add NULL checks. Signed-off-by: Simon Ser <contact@emersion.fr>
* protocol: Clarify meaning of input region for cursors, DnD iconsMikhail Gusarov2023-02-271-10/+5
| | | | | | | | Input region is ignored for cursors, DnD icons. Current wording implies that this state is temporary, but surfaces never lose the role once assigned, so reword to make it clearer. Signed-off-by: Mikhail Gusarov <dottedmag@dottedmag.net>
* protocol: reorder wl_data_offer.source_actions and wl_data_device.enterVlad Zahorodnii2023-02-271-2/+3
| | | | | | | | | | | | | | | | | | | Most compositors send the wl_data_offer.source_actions event before the wl_data_device.enter event, i.e. after creation of the data offer. This contradicts to the wayland spec. On the other hand, it's reasonable to send all the information useful to the client before the enter event, rather than send mime types before the enter event and source actions (that don't depend on drop target) after the enter event. On the client side, toolkits such as Qt and GTK already expect to see the source actions before receiving the enter event. Given all of that, this change adjusts the spec to match the behavior observed in the compositors in the wild. Signed-off-by: Vlad Zahorodnii <vlad.zahorodnii@kde.org>
* protocol: do not change pending x and y when attaching a bufferSebastian Wick2023-02-271-2/+3
| | | | | | | | | | | Attaching a buffer with interface version 5 requires clients to pass zero to x and y but it still affects the pending surface state. Attaching a buffer after a request to offset therefore sets the pending x and y to zero. The intent of version 5 was to allow exactly this sequence of requests to work so let's just make sure the protocol actually spells it out. Signed-off-by: Sebastian Wick <sebastian.wick@redhat.com>
* protocol: add wl_pointer's axis relative physical directionPeter Hutterer2023-02-211-4/+60
| | | | | | | | | | | | This event adds the physical direction of the axis motion, relative to the axis event we get. Right now, when natural scrolling is enabled things like virtual volume sliders move the wrong way round. By adding the axis motion direction, we can have toolkits swap the scroll direction for applicable widgets, getting the right behavior on all widgets. Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net> Reviewed-by: Yong Bakos <ybakos@humanoriented.com>
* readme: convert to MarkdownSimon Ser2023-02-131-1/+1
| | | | | | Gives us nice links and code blocks. Signed-off-by: Simon Ser <contact@emersion.fr>
* readme: reword website descriptionSimon Ser2023-02-131-3/+3
| | | | | | | | The website is most useful for docs. Build instructions have been mostly dropped from it: they're better described in downstream projects' READMEs. Signed-off-by: Simon Ser <contact@emersion.fr>
* readme: drop paragraph about WestonSimon Ser2023-02-131-4/+0
| | | | | | There are many Wayland compositors nowadays. Signed-off-by: Simon Ser <contact@emersion.fr>
* wayland-server: Add method to get global nameAndri Yngvason2023-02-112-0/+21
| | | | | | | This is useful for protocol designs where globals need to be referenced in some manner. Signed-off-by: Andri Yngvason <andri@yngvason.is>
* protocol: add wl_surface.preferred_buffer_transformSimon Ser2023-02-071-0/+13
| | | | | | | | | Same as the new wl_surface.preferred_buffer_scale event but for transform. No version bump needed since the previous commit did that. Signed-off-by: Simon Ser <contact@emersion.fr>
* protocol: add wl_surface.preferred_buffer_scaleSimon Ser2023-02-071-2/+17
| | | | | | | | | | | | | | | | | | | | | | Right now, clients need to bind to wl_output globals, listen to wl_output.scale, listen to wl_surface.enter/leave, pick the highest scale factor. This is an issue because it breaks Wayland's "policy, not mechanism" motto. Clients take the decision of which scale to use depending on the outputs they're on, compositors have no say in this (apart from faking output events, which isn't great). This commit introduces a new wl_surface.preferred_buffer_scale event to allow compositors to directly indicate the preferred scale factor for each surface. This unlocks features which require dynamically changing the scale such as: - Accessibility features such as screen magnifier - In a VR environment, render surfaces close to the eye at a higher scale - HiDPI screenshots on LoDPI screens Signed-off-by: Simon Ser <contact@emersion.fr> Closes: https://gitlab.freedesktop.org/wayland/wayland/-/issues/271
* server: rename wl_display.id to next_global_nameSimon Ser2023-01-251-4/+4
| | | | | | | This is much more descriptive. This value is a counter incremented each time a new global is created. Signed-off-by: Simon Ser <contact@emersion.fr>
* server: fail on global name overflowSimon Ser2023-01-251-0/+5
| | | | | | | | | display->id is initialized to 1, making 0 a convenient value to indicate an invalid global name. Make sure to not return a zero global name on overflow. Moreover, if we wrap around, we might cycle back to a global name which is already in-use. Signed-off-by: Simon Ser <contact@emersion.fr>
* protocol: wl_subsurface::destroy does not remove the roleMikhail Gusarov2023-01-161-2/+1
| | | | | | | Role assigned to wl_surface cannot be removed. Delete contradicting text from wl_subsurface::destroy documentation. Signed-off-by: Mikhail Gusarov <dottedmag@dottedmag.net>
* release.sh: Don't push *all* tagsMarius Vlad2023-01-161-1/+4
| | | | | | | Rather than trying to push all possible tags just push the one created for that release. Signed-off-by: Marius Vlad <marius.vlad@collabora.com>
* scanner: Fix undefined behavior around qsortFergus Dall2023-01-031-2/+7
| | | | | | | | | According to clang, qsort cannot be passed a null pointer, even if the size is specified to be zero. The scanner can hit this while trying to sort forward declarations if it happens to be building a protocol file that doesn't require any, either in the header or the source. Signed-off-by: Fergus Dall <sidereal@google.com>
* protocol: add note about wl_buffer/wl_callback versionSimon Ser2022-12-071-0/+6
| | | | | | | This is an exception which can be confusing. Add an explicit note about it in the protocol text. Signed-off-by: Simon Ser <contact@emersion.fr>
* protocol: add defunct_role_object errorKirill Primak2022-11-291-2/+5
| | | | | | | | | This commit adds wl_surface.defunct_role_object error, which has semantics similar to xdg_wm_base.defunct_surfaces error, and is sent when a client destroys a surface while the corresponding role object still exists. Signed-off-by: Kirill Primak <vyivel@eclair.cafe>
* protocol: remove wl_subsurface lifetime contradictionKirill Primak2022-11-291-6/+4
| | | | | | | | | This statement assumes that a wl_surface can be destroyed before the corresponding wl_subsurface, which is not true, as wl_surface description explicitly states that the role object must be destroyed before the wl_surface itself. Signed-off-by: Kirill Primak <vyivel@eclair.cafe>
* tests: Ensure resource vs. client destroy handler orderDaniel Stone2022-10-201-1/+31
| | | | | | | | Make sure that the client destroy handler runs strictly before the resource destroy handler, which runs strictly before the client late-destroy handler. Signed-off-by: Daniel Stone <daniels@collabora.com>
* wayland-server: Add wl_client_add_destroy_late_listenerDaniel Stone2022-10-203-0/+74
| | | | | | | | | | A late-destroy listener for a client is called after all the client's resources have been destroyed and the destroy callbacks emitted. This lives in parallel to the existing client destroy listener, called immediately before the client's objects get destroyed. Signed-off-by: Daniel Stone <daniels@collabora.com> Fixes: wayland/wayland#207
* tests: Use bool for client testDaniel Stone2022-10-201-4/+4
| | | | | | A 0/1-only int is a bool. Signed-off-by: Daniel Stone <daniels@collabora.com>
* protocol: add wl_compositor.error.bad_parentSimon Ser2022-09-211-0/+6
| | | | | | This forbids loops in sub-surface trees. Signed-off-by: Simon Ser <contact@emersion.fr>
* protocol: mention protocol error name in wl_subcompositor.get_subsurfaceSimon Ser2022-09-211-2/+2
| | | | | | Let's be explicit here. Signed-off-by: Simon Ser <contact@emersion.fr>
* ci: upgrade imagesSimon Ser2022-09-131-5/+5
| | | | | | | | Upgrade Debian to bullseye and FreeBSD to 13.1. FreeBSD 13.0 is not supported anymore, and this ensures we still build on fresh images. Signed-off-by: Simon Ser <contact@emersion.fr>
* ci: set ASAN_OPTIONS=detect_odr_violation=0Simon Ser2022-09-131-1/+3
| | | | | Signed-off-by: Simon Ser <contact@emersion.fr> References: https://gitlab.freedesktop.org/wayland/wayland/-/merge_requests/154
* cursor: make param names match with documentationSimon Ser2022-09-131-24/+24
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | There was a mismatch here. Use a good-looking function param name because that's what will show up in docs. Use an abbreviation inside the function. Fixes the following warnings: cursor/wayland-cursor.c:504: warning: argument 'cursor' of command @param is not found in the argument list of wl_cursor_frame(struct wl_cursor *_cursor, uint32_t time) cursor/wayland-cursor.c:504: warning: The following parameter of wl_cursor_frame(struct wl_cursor *_cursor, uint32_t time) is not documented: parameter '_cursor' cursor/wayland-cursor.c:452: warning: argument 'cursor' of command @param is not found in the argument list of wl_cursor_frame_and_duration(struct wl_cursor *_cursor, uint32_t time, uint32_t *duration) cursor/wayland-cursor.c:452: warning: The following parameter of wl_cursor_frame_and_duration(struct wl_cursor *_cursor, uint32_t time, uint32_t *duration) is not documented: parameter '_cursor' cursor/wayland-cursor.c:147: warning: argument 'image' of command @param is not found in the argument list of wl_cursor_image_get_buffer(struct wl_cursor_image *_img) cursor/wayland-cursor.c:147: warning: The following parameter of wl_cursor_image_get_buffer(struct wl_cursor_image *_img) is not documented: parameter '_img' cursor/wayland-cursor.c:504: warning: argument 'cursor' of command @param is not found in the argument list of wl_cursor_frame(struct wl_cursor *_cursor, uint32_t time) cursor/wayland-cursor.c:504: warning: The following parameter of wl_cursor_frame(struct wl_cursor *_cursor, uint32_t time) is not documented: parameter '_cursor' cursor/wayland-cursor.c:452: warning: argument 'cursor' of command @param is not found in the argument list of wl_cursor_frame_and_duration(struct wl_cursor *_cursor, uint32_t time, uint32_t *duration) cursor/wayland-cursor.c:452: warning: The following parameter of wl_cursor_frame_and_duration(struct wl_cursor *_cursor, uint32_t time, uint32_t *duration) is not documented: parameter '_cursor' cursor/wayland-cursor.c:147: warning: argument 'image' of command @param is not found in the argument list of wl_cursor_image_get_buffer(struct wl_cursor_image *_img) cursor/wayland-cursor.c:147: warning: The following parameter of wl_cursor_image_get_buffer(struct wl_cursor_image *_img) is not documented: parameter '_img' Signed-off-by: Simon Ser <contact@emersion.fr>
* server: don't document void return valuesSimon Ser2022-09-131-2/+0
| | | | | | | | | Fixes the following warnings: src/wayland-server.c:1152: warning: documented empty return type of wl_display::wl_display_destroy src/wayland-server.c:1193: warning: documented empty return type of wl_display::wl_display_set_global_filter Signed-off-by: Simon Ser <contact@emersion.fr>