This is a series of commits tackling dead key state handling and scan code to vkey mapping improvements (especially for French and German keyboards).
* https://gitlab.winehq.org/mzent/wine/-/commit/6c5c90b746cc341049eec216e3bb9…: Simplifies the logic a bit there and also correctly null-terminates dead keys in ToUnicodeEx
* https://gitlab.winehq.org/mzent/wine/-/commit/a05e2fc5068a22cae94bc800b4972…: Windows does not do it and some applications misbehave with this, fully fixed later in https://gitlab.winehq.org/mzent/wine/-/commit/7cf1f6a00f17b0626126448f77a1c…
* https://gitlab.winehq.org/mzent/wine/-/commit/4bd96932139a22f2c3b1311e44c43…: MSDN states single keys are always uppercased there.
* https://gitlab.winehq.org/mzent/wine/-/commit/bac8e97d7e6a7494672d76f5fc586…: There is a bug in `CFStringCompare` with the flags used there currently, resulting in the comparison of the identical buffers "ß" and "ß" to be false. In any case `UCCompareText` behaves correctly and is much faster there.
* https://gitlab.winehq.org/mzent/wine/-/commit/bac5f485a09fbddd39efb8f2c0d87…: I think this was an accidental mistake there, going through all modifiers first per symbol almost always results in the wrong match being made. The logic is adjusted there now to be similar to the other iterations involving `char_matches_string`.
* https://gitlab.winehq.org/mzent/wine/-/commit/ffde55df4ae3f6d53198839c58356…https://gitlab.winehq.org/mzent/wine/-/commit/a453d0d4c89c59c3e1ba6c24d2d0f…: Adds additional symbol vkey mappings (now completely maps a German Macintosh and PC keyboard correctly). There are still some minor defects with the French layout (around the ú region), however changing the symbol mapping there will cause issues with other layouts I think, since the wrong match happens very early there in the priority in these cases. With this change at least the number row is now behaving correctly. Additionally the French Macintosh keyboard layout is further complicated by the "=" key being next to right shift, which is in conflict with pretty much any other keyboard layout. To fix this properly would require a partial rewrite of the heuristic being used or a new approach, but most likely more of a long term project.
* https://gitlab.winehq.org/mzent/wine/-/commit/7cf1f6a00f17b0626126448f77a1c…: Gives dead keys friendly names in `GetKeyNameFriendlyText`, just like Windows does. I tried to be as exhaustive as possible, but if there are any missing the mapping can be easily extended.
All in all the incorrect scan code to vkey mapping is usually not that tragic, since an application would need to be aware of the layout and have its own mapping of scan codes of each (FFXIV does this though). The French layout corrections are now "good enough" to behave correctly for all the hotbar slots being assigned there with these changes now though.
--
v4: winemac.drv: Give dead keys a friendly name in GetKeyNameText.
winemac.drv: Add additional German symbol vkeys.
winemac.drv: Resolve symbol vkeys first without modifiers.
winemac.drv: Use UCCompareText in char_matches_string.
winemac.drv: Uppercase single keys in GetKeyNameText.
winemac.drv: Do not append " dead" to dead keycodes in GetKeyNameText.
winemac.drv: Handle length of dead keycodes in ToUnicodeEx correctly.
https://gitlab.winehq.org/wine/wine/-/merge_requests/5319
Fix for latest autodesk [fusion360 installer](https://github.com/cryinkfly/Autodesk-Fusion-360-for-Linux/issue… calling SHGetKnownFolderPath against [FOLDERID_UserPinned](https://learn.microsoft.com/lv-lv/windows/win32/shell/…
Trace Output pre-patch:
```
15285.659:057c:05c0:trace:shell:SHGetKnownFolderPath {9e3995ab-1f9c-4f13-b827-48b24b6c7174}, 0x00000000, 0000000000000000, 0000000003FB0D98
15285.659:057c:05c0:trace:shell:SHGetFolderPathAndSubDirW 0000000000000000,0x6c,0000000000000000,0,(null),000000000410E3F0
15285.659:057c:05c0:trace:shell:SHGetFolderPathAndSubDirW returning 0x80070057 (final path is L"")
15285.659:057c:05c0:trace:shell:SHGetKnownFolderPath Failed to get folder path, 0x80070057.
15285.659:057c:05c0:Ret shell32.SHGetKnownFolderPath() retval=80070057 ret=6ffff9774771
```
SHGetFolderPathAndSubDirW returns 0x57 invalid-parameter error (0x80070057) due to the folder array in shell32/shellpath.c having CSIDL_Type_Disallowed set on UserPinned and QuickLaunch folders.
--
https://gitlab.winehq.org/wine/wine/-/merge_requests/5525