The Kirikiri Z [menu](https://github.com/krkrz/menu/blob/master/Main.cpp) plugin causes an exception to be raised (and the engine unloads the DLL) if GetKeyNameText returns a length of 1 with a null character. The affected applications later fail with script exception dialogs as menu.dll was unloaded.
When using winex11 (and presumably winemac), the function returns the return value of the driver function for GetKeyNameText, and that returns 0 on an unsupported key which works. On winewayland (and the null driver), that isn't implemented, and instead the function continues and calls NtUserMapVirtualKeyEx with MAPVK_VK_TO_CHAR filling the buffer with one character which is 0 (no translation). The function then returns 1 for that null character and the applications don't seem to handle that well.
--
https://gitlab.winehq.org/wine/wine/-/merge_requests/7628
This MR adds an initial implementation of the winsock `WSALookupsService*` methods for performing Bluetooth device discovery (`LUP_CONTAINERS`).
Pending !7472, the code will also eventually support performing device inquiry scans.
--
v13: ws2_32: Implement WSALookupServiceNext for Bluetooth device discovery.
ws2_32: Implement WSALookupServiceBegin for Bluetooth device discovery.
ws2_32/tests: Add tests for Bluetooth device discovery in WSALookupServiceBegin/Next.
https://gitlab.winehq.org/wine/wine/-/merge_requests/7542
Introduce infrastructure necessary to support receiving, sending and replying (to) Bluetooth authentication/pairing requests:
- During startup, the Bluetooth driver now creates a "pairing agent" and registers it with BlueZ. The pairing agent is a DBus object implementing the `org.bluez.Agent1` interface (documented [here](https://github.com/bluez/bluez/blob/master/doc/org.bluez.Agent.rst)), which receives authentication requests from BlueZ. The pairing agent then forwards the request data to the PE driver, in form of a `WINEBLUETOOTH_EVENT_AUTH_EVENT` event. The agent is unregistered during driver shutdown.
- Right now, the agent only supports Numeric Comparison pairing requests.
- Create a new auxiliary device, `\??\WINEBTHAUTH` during driver startup. This device handles authentication functionality that is independent of radio PDOs on the system, which allows the userspace APIs to not track individual Bluetooth radio objects to implement authentication. `WINEBTHAUTH` right now serves two purposes:
- Serve as the device object for which `GUID_WINEBTH_AUTHENTICATION_REQUEST` PnP events are broadcasted. This event is sent whenever the Bluetooth event loop in (`bluetooth_event_loop_thread_proc`) receives `WINEBLUETOOTH_EVENT_AUTH_EVENT`. The event's buffer contains a `struct winebth_authentication_request` value, which contains data relevant to the incoming auth request.
- Handle the `IOCTL_WINEBTH_AUTH_REGISTER` IOCTL. This simply calls the [`RequestDefaultAgent` BlueZ method](https://github.com/bluez/bluez/blob/master/doc/org.bluez.AgentManag… right now, which asks BlueZ to send all incoming Bluetooth authentication requests to Wine's pairing agent (described above). This is not always strictly necessary, but is useful if there already is a default pairing agent set.
- `WINEBTHAUTH` will also ultimately be in charge of responding to authentication requests, which I'll be adding in the next-ish MR(s).
- Implement `BluetoothRegisterForAuthenticationEx` and `BluetoothUnregisterAuthentication`. Registration is done by invoking `IOCTL_WINEBTH_AUTH_REGISTER`, and then listening for `GUID_WINEBTH_AUTHENTICATION_REQUEST` events on a `HANDLE` to `\??\WINEBTHAUTH` using the newly added `CM_Register_Notifications`.
To keep the MR from getting any larger, I have not included support for `BluetoothSendAuthenticationResponseEx`. That will likely be introduced in the future.
--
https://gitlab.winehq.org/wine/wine/-/merge_requests/7630
This confuses mutter and it manifests with spurious IconicState WM_STATE
change when it decides to try managing the window, but it also makes it
randomly lose focus or even fail to map the window back on screen.
Adding the flag after the window has been created fixes the issue.
--
v4: winex11: Avoid creating windows with override-redirect flag set.
https://gitlab.winehq.org/wine/wine/-/merge_requests/7181
This confuses mutter and it manifests with spurious IconicState WM_STATE
change when it decides to try managing the window, but it also makes it
randomly lose focus or even fail to map the window back on screen.
Adding the flag after the window has been created fixes the issue.
--
v2: winex11: Avoid creating windows with override-redirect flag set.
https://gitlab.winehq.org/wine/wine/-/merge_requests/7181
After this there is one more set of patches to finish up the file saving functions, I split it into two to hopefully make it easier to review. :)
--
v2: d3dx9: Use D3DXSaveVolumeToFileInMemory() inside of D3DXSaveTextureToFileInMemory().
d3dx9: Implement D3DXSaveVolumeToFile{A,W,InMemory}().
d3dx9/tests: Add tests for D3DXSaveVolumeToFile{A,W,InMemory}().
d3dx9: Add stubs for D3DXSaveVolumeToFile{A,W,InMemory}().
https://gitlab.winehq.org/wine/wine/-/merge_requests/7577
These tests serve to illustrate the output sample time and duration values from their respective native MFT video decoders with respect to the following circumstances:
1. When no frame rate nor input sample timestamps are provided;
2. When a frame rate is provided but there are no sample timestamps; and
3. When a frame rate is provided, but the input sample timestamps disagree with this value
It also highlights the gap in our implementation. However, I don't believe this can be fixed without first confirming the correct output from our IMFMediaStream implementations.
--
v3: mf/tests: Test timestamps in WMV decoder.
mf/tests: Test timestamps in H264 decoder.
https://gitlab.winehq.org/wine/wine/-/merge_requests/7563
The Win32 state might not have been updated with the latest X11 state,
and we want to take future updates into account when deciding to accept
focus or not.
At this point, and because we ignore WM_TAKE_FOCUS when a state change
is pending, all the states are the same, we use current_state as the
logic is to accept focus or not according to our current understanding
of the X state.
--
https://gitlab.winehq.org/wine/wine/-/merge_requests/7626