This MR introduces the driver mechanisms to handle dynamic events from the Wayland compositor, using wl_output events as the guiding use case (i.e., we want to update the win32u display settings when the host settings change).
In this design we create a dedicated thread to read and dispatch Wayland events received from the compositor. If a Wayland event handler wants some code to be run in the context of a particular HWND's thread, it can add an internal event to a custom queue we have for each (GUI enabled) thread. The ProcessEvents driver callback processes internal events from that queue. In order to wake up waiting threads we use a pipe to notify about new internal events, with the read end acting as the thread's host queue fd. This is similar to how winemac.drv works.
We use the aforementioned mechanisms to queue win32u display device updates to the desktop window thread. Since there are many pieces that need to fall into place, this MR gradually reaches the final design:
1. We first introduce the dedicated read/dispatch thread and handle events (and also display device updates if in the desktop process) in that thread.
2. We ensure access to Wayland output information is thread-safe and consistent (since in step 3 we will need to access it from a different thread).
3. We finally introduce per-thread internal event queues and, if we are in the desktop process, queue the display device update to the desktop window thread internal event queue. Note that the main portion of the wl_output event code is still handled in the dedicated read/dispatch thread.
--
v3: winewayland.drv: Update desktop window size on display changes.
https://gitlab.winehq.org/wine/wine/-/merge_requests/2712
Find only supports one Column to filter on.
The parser for this will be the same for both Find/Filter with the only different
is the Filter supports multiple columns.
In trying to keep this patch small, only WSTR/BSTR/Integer have been supported. (The Common cases).
--
v2: msado15: Implement _Recordset Find
https://gitlab.winehq.org/wine/wine/-/merge_requests/2498
--
v2: vkd3d-shader/tpf: Write out comparison mode sampler declarations and corresponding sampling instruction.
vkd3d-shader/hlsl: Parse SampleCmp() method.
vkd3d-shader/hlsl: Parse SamplerComparisonState objects.
vkd3d-shader/hlsl: Use a function table for object methods handlers.
vkd3d-shader/hlsl: Move object type checks to methods handlers.
https://gitlab.winehq.org/wine/vkd3d/-/merge_requests/206
> If you mean setting `O_NONBLOCK` on `server`, that would cause `accept` to return `EWOULDBLOCK` or `EAGAIN`.
No, I mean you can set O_NONBLOCK on "client", i.e. the socket that calls connect().
> By "clean up", do you mean only calling `WaitForSingleObject` on it, or is there more that I would need to do?
Wait for it and close the handle. It should be unnecessary if you just use nonblocking i/o with the socket, though.
--
https://gitlab.winehq.org/wine/wine/-/merge_requests/2786#note_33265
> ~~Yes,~~ `SO_REUSEADDR` is a valid option on AF_UNIX sockets and is supported by this patch. I'll add a test for it. It looks like this is only true for abstract AF_UNIX sockets, which are expressly unsupported due to Windows' own lack of support for them.
Okay, I think I was assuming that "unbinding" meant doing the opposite of bind(), rather than "allowing other sockets to use that address". It'd be nice to have some tests for that functionality, then:
* test that trying to use the same address *without* deleting the socket fails (even if you close the socket handle? That part is very surprising to me.)
* test that trying to use the same address after deleting the socket succeeds, which currently isn't actually tested.
* Can the socket be used normally after deleting it?
--
https://gitlab.winehq.org/wine/wine/-/merge_requests/2786#note_33264