This MR introduces an initial implementation for `ReadPackageFromStream` in order to be able to decompress/read OPC packages, and enumerate their parts.
This is required for supporting AppX packages, which themselves are OPC packages as well. As such, the code does not implement support for reading relationships or interleaved archives, as AppX does not support either (`APPX_E_RELATIONSHIPS_NOT_ALLOWED`, `APPX_E_INTERLEAVING_NOT_ALLOWED`).
--
v6: opcservices: Implement IOpcPart::GetContentType for opened packages.
opcservices: Implement IOpcPart::GetContentStream for opened packages.
opcservices: Create IOpcPart objects for ZIP entries in an opened package.
https://gitlab.winehq.org/wine/wine/-/merge_requests/8837
This MR introduces an initial implementation for `ReadPackageFromStream` in order to be able to decompress/read OPC packages, and enumerate their parts.
This is required for supporting AppX packages, which themselves are OPC packages as well. As such, the code does not implement support for reading relationships or interleaved archives, as AppX does not support either (`APPX_E_RELATIONSHIPS_NOT_ALLOWED`, `APPX_E_INTERLEAVING_NOT_ALLOWED`).
--
v5: opcservices: Implement IOpcPart::GetContentType for opened packages.
opcservices: Implement IOpcPart::GetContentStream for opened packages.
opcservices: Create IOpcPart objects for ZIP entries in an opened package.
opcservices: Add stubs for ReadPackageFromStream.
opcservices: Set flags field for central directory records as well.
https://gitlab.winehq.org/wine/wine/-/merge_requests/8837
Under Windows and the PID specification it is possible to specify less than the full set of condition blocks. Under SDL and the Linux FF input API all condition blocks must always be specified.
The existing code does not set any values outside the specified axes. This effectively sets the strength to zero along the unspecified axes. Testing setting just one axis with the MS Sidewinder 2 under Windows, however, reveals that it sets the first axis (the X-axis) to the given parameter values and sets the other axis to full strength (this is most easily felt/tested with the spring effect).
This sets unspecified axes in the SDL and udev input backends to play at full strength to agree with Windows. It also updates joy.cpl to play condition effects along just the indicated axis too (as is done for non-condition effects).
--
v2: joycpl: Play condition effects on indicated axis too
https://gitlab.winehq.org/wine/wine/-/merge_requests/8824
Coordinates from mouse low level hook messages are not mapped the same way than WM_MOUSEMOVE or GetCursorPos. This causes problems on programs that make use of both values to calculate mouse movement, like the wine DirectInput implementation.
I'm marking this as a draft since I was not able to find a way to write a test for this. I'm able to easily reproduce it on Proton, because it creates a scaled full screen window, on Wine this doesn't happen so the coordinates are not required to be mapped to a scaled window.
Edit: I didn't realize that modesetting emulation was an experimental option! So, I was able to reproduce the bug by enabling it.
--
v3: dinput: Set per monitor aware DPI when handling WM_MOUSEMOVE.
win32u: Map raw coordinates to virtual screen in low-level hooks.
https://gitlab.winehq.org/wine/wine/-/merge_requests/8669