The tests should go along with the existing ones in dlls/kernel32/tests/locale.c.
Also please write a more specific commit message, "behave according to documentation" can apply to just about anything.
--
https://gitlab.winehq.org/wine/wine/-/merge_requests/6455#note_81668
Previously, map_font() could return a font that does not directly
support the requested codepage but has a child font that does. By
enumerating fonts for the specific charset, as well as checking each
candidate font's signature, the returned font now directly supports the
codepage.
--
v2: mlang: Use EnumFontFamiliesEx() in map_font().
https://gitlab.winehq.org/wine/wine/-/merge_requests/6450
This fixes a bug in EastMoney, which calls SetFileTypes() with a COMDLG_FILTERSPEC structure in which pszSpec = L"" followed by SetFileName(L"*.fml"). In windows, this matches all *.fml files. In wine, this matched no files. Before this patch, wine did not use filters from the file name field (marked as a FIXME) and a file type entry with an empty spec would match no files (as opposed to leaving the current filter unmodified).
The exact rules worked out by testing in a Windows 10 VM seem to be:
Current filter is initially empty and can be set by typing a filter
into the file name field (or SetFileName) or selecting an entry from the file type menu (or SetFileTypeIndex).
Selecting a file type entry with an empty spec leaves the current filter unchanged.
Selecting a file type entry with a non-empty spec clears the file name field if it currently contains a filter.
This was tested using https://github.com/microsoft/Windows-classic-samples/blob/main/Samples/Win7… (MIT Licensed). There is a c_rgSaveTypes variable at the top which can be modified to various configurations (especially ones that include a COMDLG_FILTERSPEC with an empty pszSpec)
--
v2: comdlg32: allow entering a filter in the itemdlg file name field
https://gitlab.winehq.org/wine/wine/-/merge_requests/6443
Note that this creates two global DISPLAY DCs, where the drawables are selected, to avoid frequent DC recreations which is costly. The draw calls are serialized between threads with the global context mutex.
As far as I can tell it performs similarly to the current XCopyArea implementation that is used for child window rendering, but has the advantage of being able to use XRender for scaling when we need to rescale the GL client area.
This also avoids all the issues that come with Proton fshack (with hooking the GL context to scale the framebuffer through GL calls), and hopefully achieving more or less the same thing, at the probable cost of additional copies.
--
v4: winex11: Use offscreen rendering to scale DPI-unaware GL windows.
winex11: Drop now unnecessary X11DRV_FLUSH_GL_DRAWABLE ExtEscape.
winex11: Implement offscreen window presents with NtGdiStretchBlt.
winex11: Introduce a new present_gl_drawable helper.
winex11: Detach offscreen OpenGL windows after creation.
winex11: Create OpenGL client windows in window DPI units.
winex11: Resize offscreen client surfaces after they are presented.
https://gitlab.winehq.org/wine/wine/-/merge_requests/6398
v2: Better version which creates per-drawable DCs instead and fixes missing offscreen drawable resize.
Fwiw this fixes GL display when DPI scaling is used, and will also work for display mode virtualization, which I also intend to implement with DPI, similarly to how Windows now implements it.
I understand that using a display DC blit isn't great but it allows us to use XRender and to perform not too badly. Ideally this would be using some composition mechanism, but this will require a lot more work and could hopefully later replace it.
It's also not clear whether a compositor is doable in every case, as for instance it will require being able to export/import surfaces as DMA buffers, which simply may not be possible with remote X sessions.
--
https://gitlab.winehq.org/wine/wine/-/merge_requests/6398#note_81606
Note that this creates two global DISPLAY DCs, where the drawables are selected, to avoid frequent DC recreations which is costly. The draw calls are serialized between threads with the global context mutex.
As far as I can tell it performs similarly to the current XCopyArea implementation that is used for child window rendering, but has the advantage of being able to use XRender for scaling when we need to rescale the GL client area.
This also avoids all the issues that come with Proton fshack (with hooking the GL context to scale the framebuffer through GL calls), and hopefully achieving more or less the same thing, at the probable cost of additional copies.
--
v2: winex11: Use offscreen rendering to scale DPI-unaware GL windows.
winex11: Drop now unnecessary X11DRV_FLUSH_GL_DRAWABLE ExtEscape.
winex11: Implement offscreen window presents with NtGdiStretchBlt.
winex11: Introduce a new present_gl_drawable helper.
winex11: Detach offscreen OpenGL windows after creation.
winex11: Create OpenGL client windows in window DPI units.
winex11: Resize offscreen client surfaces after they are presented.
https://gitlab.winehq.org/wine/wine/-/merge_requests/6398
Previously, map_font() could return a font that does not directly
support the requested codepage but has a child font that does. By
enumerating fonts for the specific charset, as well as checking each
candidate font's signature, the returned font now directly supports the
codepage.
--
https://gitlab.winehq.org/wine/wine/-/merge_requests/6450
Commit 1 prevents the media session from starting execution of an asynchronous operation while another asynchronous operation is still running. Without this, it was possible for invalid state transitions to happen, which could leave the session in an intermediary state (not stopped, started, paused, closed or shut down) indefinitely.
Commits 2, 3 and 4 are some more fixes around pausing and unpausing in mfplat.
--
v2: mf/session: Fix pausing a media session when the media source sends buffering events.
winegstreamer: Also flush token queue on seek.
mf/sar: Allow starting audio renderer again after pausing it.
mf/session: Prevent media session from running commands concurrently.
mf: Fix media session staying in RESTARTING_SOURCES state after failing to start/seek a media source.
https://gitlab.winehq.org/wine/wine/-/merge_requests/6255