This series adds a couple of features to WinRT's media.speech:
- IVoiceInformation, and synthetizer's options are present
(mainly use to store information, not yet to make fully use of it)
- add a dummy implementation (1 single voice); that should be extended
in future series by using ISpVoice instead
- add a couple of more tests to go with implementation
(the serie should prevent MS Flight simulator to crash on first
connection. Crash is due to exception handling of C# generated
exceptions from E_NOTIMPL with some X11 related critical resources).
A+
--
v2: windows.media.speech: Implement get/put voice on synthesizer.
windows.media.speech: Implement default voice.
windows.media.speech: Add more tests about voice selection.
windows.media.speech: Finish implement the voice information view.
windows.media.speech/tests: Added tests about vector view's content.
windows.media.speech: Add basic implementation of IVoiceInformation.
windows.media.speech: Add more tests about IVoiceInformation.
windows.media.speech: Add basic implementation on synthesizer options.
windows.media.speech: Adding a couple of synthesizer's options tests.
https://gitlab.winehq.org/wine/wine/-/merge_requests/3048
On my Nvidia GeForce GTX 1050 Ti `ddxddy.shader_test` doesn't pass because of considerably different numeric results.
As Giovanni pointed out, this is because my GPU uses the fine derivate and not the coarse derivate to implement ddx() and ddy().
For this reason, the result for ddx|ddy() is quantized so that the test passes if the GPU uses either coarse or fine derivates.
Additionally, tests for both ddx_coarse|ddy_coarse() and ddx_fine|ddy_fine() are added, that expect a more precise result.
--
v2: vkd3d-shader/hlsl: Fine derivates support.
vkd3d-shader/hlsl: Coarse derivates support.
tests: Quantize ddx() and ddy() test.
tests: Make ddx() and ddy() test behave correctly for shader models < 4.
tests: Test coarse and fine derivates.
https://gitlab.winehq.org/wine/vkd3d/-/merge_requests/224
Today, the preloader is linked with -fPIE in spite of the fact that the
preloader is a non-PIE statically linked binary. This is due to a
limitation in tools/makedep that makes it difficult to specify CFLAGS
for each individual object file's recipe.
This can seemingly cause problems with some GOTPCREL(X) relocations
inside the preloader. Since preloader does not link to the system
library directly, there is no need for a Global Offset Table (GOT).
However, a few extern (non-static) function symbols are declared, the
use of which makes GCC emit instructions that references those symbols
by indirection through GOT. The linker then tries to optimize such
instructions to eliminate GOT references, which can fail due to various
reasons.
This stands in contradiction with Jinoh Kang's suggestion (in bug 55050)
that "-fPIE is harmless even when applied to an object linked into
non-PIE executables." The claim is theoretically true since
position-independent code can in principle be relocated to any address
(fixed or dynamic); however, it fails due to some peculiar practical
issues, which is arguably a limitation in the linker's implementation
(since it can be worked around with -Wl,--no-relax without issues).
Fix this by eliminating GOT usage by setting the default visibility of
non-static declarations to "hidden". Assuming GCC's medium code model
(-mcmodel=medium; default code model for x86_64), this suppresses any
unnecessary PLT or GOT relocations for defined symbols, and provides
opportunity for GCC to optimize the code better.
Fixes: 78ed343842dcd8ffb95c416420953e121959d40d
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=55091
cc/ @epo
--
v3: loader: Set the visibility of symbols in preloader to "hidden".
https://gitlab.winehq.org/wine/wine/-/merge_requests/3117
Today, the preloader is linked with -fPIE in spite of the fact that the
preloader is a non-PIE statically linked binary. This is due to a
limitation in tools/makedep that makes it difficult to specify CFLAGS
for each individual object file's recipe.
This can seemingly cause problems with some GOTPCREL(X) relocations
inside the preloader. Since preloader does not link to the system
library directly, there is no need for Global Offset Tables (GOT).
However, a few extern (non-static) function symbols are declared, the
use of which makes GCC emit instructions that references those symbols
by indirection through GOT. The linker then tries to optimize such
instructions to eliminate GOT references, which can fail due to various
reasons.
This stands in contradiction with Jinoh Kang's suggestion (in bug 55050)
that "-fPIE is harmless even when applied to an object linked into
non-PIE executables." The claim is theoretically true since
position-independent code can in principle be relocated to any address
(fixed or dynamic); however, it fails due to some peculiar practical
issues, which is arguably a limitation in the linker's implementation
(since it can be worked around --no-relax without issues).
Fix this by eliminating GOT usage by setting the default visibility of
non-static declarations to "hidden". Assuming GCC's medium code model
(-mcmodel=medium; default code model for x86_64), this suppresses any
unnecessary PLT or GOT relocations for defined symbols, and provides
opportunity for GCC to optimize the code better.
Fixes: 78ed343842dcd8ffb95c416420953e121959d40d
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=55095
cc/ @epo
--
https://gitlab.winehq.org/wine/wine/-/merge_requests/3117
Some of these fixes are subtle (like the first patch) and very annoying to debug. Although the first patch looks like a hack, surprisingly, it's how the spec itself says it is! It's not even an IE quirk, but a special case in the spec.
For example, the variable name (which holds the builtin eval func) **does** matter: if it's called something other than 'eval', it gets treated differently (as if indirect), and this is verified by the tests + the spec's wording (so Microsoft's implementation follows it).
Most of the patches other than the first 2 are pretty small so they're in same MR.
--
v7: jscript: Store ref to the function code instead of the function instance
jscript: Start from the last argument when adding them to named locals.
jscript: Store detached locals into a scope's specialized buffer.
jscript: Detach the frame's scope before inserting eval() variables into it.
jscript: Don't use iface_to_jsdisp where it's not necessary to grab it.
jscript: Get rid of jsobj in scope_chain_t.
jscript: Fix function leak in scope_init_locals.
jscript: Fix addressing invalid memory if ref is an argument.
jscript: Correctly implement context for indirect eval calls in ES5+ modes.
https://gitlab.winehq.org/wine/wine/-/merge_requests/2942
Currently shell32 only transfers the plain icon for `Shell_NotifyIcon` calls, ignoring balloon icons. This patch allows transferring both images to explorer.exe tray.
--
v4: shell32: add support for balloon icon copying
shell32: refactor notify_icon for multiple icons
https://gitlab.winehq.org/wine/wine/-/merge_requests/2875
Reference
https://bugs.winehq.org/show_bug.cgi?id=54985
From the line we see the mingw version used causes an
In file included from /usr/share/mingw-w64/include/unknwnbase.h:47,
[ 935s] from /usr/share/mingw-w64/include/objidlbase.h:439,
[ 935s] from include/combaseapi.h:29,
[ 935s] from include/objbase.h:267,
[ 935s] from include/ole2.h:25,
[ 935s] from /usr/share/mingw-w64/include/wtypes.h:13,
[ 935s] from include/winscard.h:22,
[ 935s] from include/windows.h:68,
[ 935s] from libs/vkd3d/include/private/vkd3d_common.h:23,
[ 935s] from libs/vkd3d/libs/vkd3d-shader/vkd3d_shader_private.h:49,
[ 935s] from libs/vkd3d/libs/vkd3d-shader/preproc.y:24,
[ 935s] from libs/vkd3d/libs/vkd3d-shader/preproc.l:23:
[ 935s] /usr/share/mingw-w64/include/wtypesbase.h:148:16: error: redefinition of 'struct _SECURITY_ATTRIBUTES'
[ 935s] 148 | typedef struct _SECURITY_ATTRIBUTES {
The included file winscard.h seemed a little odd. The vkd3d isn't going to use this.
Adding the define WIN32_LEAN_AND_MEAN to the Makefile.in (in wine), produce the following warnings.
/home/alesliehughes/wine/libs/vkd3d/include/private/vkd3d_common.h:75:5: warning: implicit declaration of function ‘abort’ [-Wimplicit-function-declaration]
75 | abort();
| ^~~~~
/home/alesliehughes/wine/libs/vkd3d/include/private/vkd3d_common.h:258:14: warning: implicit declaration of function ‘atoi’ [-Wimplicit-function-declaration]
258 | *major = atoi(version);
Adding header <stdlib.h> removed all the warnings.
--
https://gitlab.winehq.org/wine/vkd3d/-/merge_requests/217
This MR supercedes !1895 as a solution to bug [#50771](https://bugs.winehq.org/show_bug.cgi?id=50771). Rather than fixing the problem of Wine's inability to modify the attributes of read-only files, this patch set instead implements `FILE_DISPOSITION_IGNORE_READONLY_ATTRIBUTE` which the Msys2 and Cygwin runtime libriries can use to avoid needing to modify attributes.
--
v4: ntdll: Implemented FILE_DISPOSITION_IGNORE_READONLY_ATTRIBUTE
ntdll/tests: Added tests for FILE_DISPOSITION_IGNORE_READONLY_ATTRIBUTE
ntdll: Initial implementation of FileDispositionInformationEx
include: Defined FILE_DISPOSITION_INFORMATION_EX and friends
https://gitlab.winehq.org/wine/wine/-/merge_requests/3073
Adds the tray icons implementation based on org.kde.StatusNotifierItem interface usage. Does allow restarting StatusNotifierWatcher object, but will fallback to XEMBED or internal tray, if wine gets initialized when there is no StatusNotifierWatcher object registered.
--
v23: winesni.drv: add dbus watch instead of using plain unix fds and flush
winesni.drv: replaced the dbus connection logic with a single connection per each SNI object
winesni.drv: wrap functions with pthread mutex locking
winesni.drv: implement basic balloon notification support
explorer: add winesni.drv tray implementation support
winesni.drv: add KDE StatusNotifierItem implementation for tray
https://gitlab.winehq.org/wine/wine/-/merge_requests/2808
Required for !1857 to not break when comctl32 version 6 isn't requested by application (in particular, found this in [qapitrace](https://github.com/apitrace/apitrace)).
Manifest resource id and assembly identity name match with Windows.
For isolation purposes, activation context is disabled while emitting events.
--
v8: comdlg32: Enable visual styles when showing IFileDialog.
comdlg32: Return E_UNEXPECTED if IFileDialog is already shown
https://gitlab.winehq.org/wine/wine/-/merge_requests/2068
MR !607 was trying to fix an issue with Life Is Strange Remastered, but
although it fixed some race conditions with presentation end, the issue
it was trying to fix is still there.
The game calls IMFMediaSession_Stop while the presentation is ending, expects
that command to quickly execute, interrupting the presentation end and
emitting a MESessionStopped event instead of the MESessionEnded.
Delaying the Stop command and emitting the MESessionEnded event breaks
the game assumptions and it crashes.
--
v4: mf: Discard end of presentation on IMFMediaSession_Stop.
mf/tests: Test IMFMediaSession_Stop command near presentation end.
mf/tests: Test Start / Pause / Stop IMFMEdiaSession events.
mf/tests: Split wait_media_event helper into wait_next_media_event.
https://gitlab.winehq.org/wine/wine/-/merge_requests/1710
This tests that the resolution should be quick enough to not trigger an Unreal Engine race condition. This also checks the determinism of the media source presentation descriptor stream ordering, as well as the stream selection updates when the media source is started.
--
v2: mf/tests: Test media source presentation stream descriptor update.
winegstreamer: Keep a reference on the media source start descriptor.
mf/tests: Test media sources stream descriptors attributes.
mf/tests: Test media sources with multiple audio/video streams.
mf/tests: Test byte stream handler to media source resolution time.
https://gitlab.winehq.org/wine/wine/-/merge_requests/2782
This will be required for MFT decoder transforms to work. They don't usually produce an output sample on every pushed input sample, and the session may need to request more sample from upstream and push them into the transform or it will not get any output and get stuck.
--
v2: mf/session: Request more data from upstream when requests are still pending.
mf/session: Process pending transform nodes samples in a loop.
mf/session: Move transform node ProcessInput calls to a separate helper.
mf/session: Use helpers to push and pop samples for transform streams.
mf/session: Use local variables to access transform node streams.
https://gitlab.winehq.org/wine/wine/-/merge_requests/3004
Reset the valuse of bNoItemMetrics to TRUE in LISTVIEW_DeleteAllItems() to Fix
"2345 picture viewer" not displaying all files.
Signed-off-by: Zhao Yi <zhaoyi(a)uniontech.com>
--
v9: comctl32: Make the correct linkid from fun SYSLINK_LinkAtPt.
https://gitlab.winehq.org/wine/wine/-/merge_requests/2413
Log: The flag that bNoItemMetrics should be reset to TRUE after
calling LISTVIEW_DeleteAllItems().
Signed-off-by: Zhao Yi <zhaoyi(a)uniontech.com>
--
v7: comctl32: Make the correct linkid from fun SYSLINK_LinkAtPt.
https://gitlab.winehq.org/wine/wine/-/merge_requests/2413
Reset the valuse of bNoItemMetrics to TRUE in LISTVIEW_DeleteAllItems() to Fix
"2345 picture viewer" not displaying all files.
Signed-off-by: Zhao Yi <zhaoyi(a)uniontech.com>
--
https://gitlab.winehq.org/wine/wine/-/merge_requests/3113
Java (1.3 at least) calls ChoosePixelFormat() with the PFD_SUPPORT_GDI flag set
and expects the returned PIXELFORMATDESCRIPTOR to have that flag set. If it
doesn't, an exception is thrown and it fails to initialize graphics. If no
PIXELFORMATDESCRIPTOR is returned instead, it falls back to an alternative
rendering method and proceeds further.
Therefore, when the PFD_SUPPORT_GDI flag is specified, treat it as a mandatory
requirement, and only return a PIXELFORMATDESCRIPTOR on which it is set, if
any.
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=7767
Closes #7767
--
https://gitlab.winehq.org/wine/wine/-/merge_requests/3111
--
v2: uiautomationcore: Implement UiaEventAddWindow.
uiautomationcore: Add support for advising providers of events on serverside events.
uiautomationcore: Prevent creation of duplicate serverside events.
uiautomationcore: Add support for creating serverside events.
uiautomationcore/tests: Add tests for cross-process events.
https://gitlab.winehq.org/wine/wine/-/merge_requests/3066
This MR supercedes !1895 as a solution to bug [#50771](https://bugs.winehq.org/show_bug.cgi?id=50771). Rather than fixing the problem of Wine's inability to modify the attributes of read-only files, this patch set instead implements `FILE_DISPOSITION_IGNORE_READONLY_ATTRIBUTE` which the Msys2 and Cygwin runtime libriries can use to avoid needing to modify attributes.
--
v3: ntdll: Implemented FILE_DISPOSITION_IGNORE_READONLY_ATTRIBUTE
ntdll/tests: Added tests for FILE_DISPOSITION_IGNORE_READONLY_ATTRIBUTE
ntdll: Initial implementation of FileDispositionInformationEx
include: Defined FILE_DISPOSITION_INFORMATION_EX and friends
https://gitlab.winehq.org/wine/wine/-/merge_requests/3073
--
v2: winegstreamer: Lookup stream handler result using a dedicated helper.
winegstreamer: Rename winegstreamer_stream_handler to stream_handler.
winegstreamer: Create and destroy result entries using dedicated helpers.
winegstreamer: Lookup stream descriptors before starting streams.
winegstreamer: Keep a reference on the media source start descriptor.
https://gitlab.winehq.org/wine/wine/-/merge_requests/3100
Required for !1857 to not break when comctl32 version 6 isn't requested by application (in particular, found this in [qapitrace](https://github.com/apitrace/apitrace)).
Manifest resource id and assembly identity name match with Windows.
For isolation purposes, activation context is disabled while emitting events.
--
v7: comdlg32: Enable visual styles when showing IFileDialog.
comdlg32: Return E_UNEXPECTED if IFileDialog is already shown
https://gitlab.winehq.org/wine/wine/-/merge_requests/2068
Required for !1857 to not break when comctl32 version 6 isn't requested by application (in particular, found this in [qapitrace](https://github.com/apitrace/apitrace)).
Manifest resource id and assembly identity name match with Windows.
For isolation purposes, activation context is disabled while emitting events.
--
v6: comdlg32: Enable visual styles when showing IFileDialog.
https://gitlab.winehq.org/wine/wine/-/merge_requests/2068
Required for !1857 to not break when comctl32 version 6 isn't requested by application (in particular, found this in [qapitrace](https://github.com/apitrace/apitrace)).
Manifest resource id and assembly identity name match with Windows.
For isolation purposes, activation context is disabled while emitting events.
--
v5: comdlg32: Enable visual styles when showing IFileDialog.
https://gitlab.winehq.org/wine/wine/-/merge_requests/2068
This also converts the opaque pointers passed across the PE->Unix interface to opaque types
represented as UINT64 which store the unix side pointer. This makes the thunking simpler and should
avoid anyone accidently dereferencing the unix pointer in the PE code.
This was tested with warcraft 3 (1.26, the last non-reforged release), and is consistent with the standard 32bit build. But since movies on warcraft 3 are broken in standard 32bit builds I could only test that that the gstreamer graph gets built up similarly and not verify the video playback. Id appreciate if someone knew of a working exercise of the gstreamer code.
--
v6: Fixup: assert struct sizes with bool/enum
Fixup: designated initializers
winegstreamer: Implement Wow64 entrypoints in the Unix library.
https://gitlab.winehq.org/wine/wine/-/merge_requests/3075
Adds the tray icons implementation based on org.kde.StatusNotifierItem interface usage. Does allow restarting StatusNotifierWatcher object, but will fallback to XEMBED or internal tray, if wine gets initialized when there is no StatusNotifierWatcher object registered.
--
v21: winesni.drv: add dbus watch instead of using plain unix fds and flush
https://gitlab.winehq.org/wine/wine/-/merge_requests/2808
Adds the tray icons implementation based on org.kde.StatusNotifierItem interface usage. Does allow restarting StatusNotifierWatcher object, but will fallback to XEMBED or internal tray, if wine gets initialized when there is no StatusNotifierWatcher object registered.
--
v20: winesni.drv: add dbus watch instead of using plain unix fds and flush
https://gitlab.winehq.org/wine/wine/-/merge_requests/2808
Adds the tray icons implementation based on org.kde.StatusNotifierItem interface usage. Does allow restarting StatusNotifierWatcher object, but will fallback to XEMBED or internal tray, if wine gets initialized when there is no StatusNotifierWatcher object registered.
--
v19: winesni.drv: add dbus watch instead of using plain unix fds and flush
https://gitlab.winehq.org/wine/wine/-/merge_requests/2808
On Fri Jun 16 17:31:25 2023 +0000, Zebediah Figura wrote:
> Do we need to bother with the client thread here? (Could we potentially
> make the client socket nonblocking instead?)
No; making the client socket nonblocking with `ioctlsocket()` causes it to instantly return with `WSAEWOULDBLOCK`. [Microsoft's documentation](https://learn.microsoft.com/en-us/windows/win32/winsock/wind… notes:
> It is normal for WSAEWOULDBLOCK to be reported as the result from calling connect on a nonblocking SOCK_STREAM socket, since some time must elapse for the connection to be established.
--
https://gitlab.winehq.org/wine/wine/-/merge_requests/2786#note_36050
On Fri Jun 16 17:31:21 2023 +0000, Zebediah Figura wrote:
> Can the length be less than the whole size of sun_path? As always we
> should test for this.
Windows 10 does not throw an error if the length is less than `sizeof(struct sockaddr_un)`; it successfully created a socket when I passed a length of `sizeof(addr.sun_family) + strlen(addr.sun_path) - 1` (minus), though the path was truncated by one character.
--
https://gitlab.winehq.org/wine/wine/-/merge_requests/2786#note_36049
On Fri Jun 16 17:31:21 2023 +0000, Zebediah Figura wrote:
> I don't think the {} construction is portable. We have offsetof() for
> this anyway.
It's portable for C99 if I hadn't forgotten to include the `0` (and C23 as-is), but Wine does use C89. I'll replace it with an `offsetof()`.
It's worth noting that this entire initializer is only portable for C99 due to the use of designators.
--
https://gitlab.winehq.org/wine/wine/-/merge_requests/2786#note_36048
On Fri Jun 16 17:31:27 2023 +0000, Zebediah Figura wrote:
> Similarly this isn't going to work without converting from Unix to win32 paths.
In addition to the size mismatch issue, if the conversion must be lossless, it's not practical to provide a Windows path for a Unix one, since relativity, UNC prefixes, etc. would probably change.
--
https://gitlab.winehq.org/wine/wine/-/merge_requests/2786#note_36047
On Fri Jun 16 17:31:20 2023 +0000, Zebediah Figura wrote:
> This can't work, though; we need to convert it to Unix first. (Or print
> a FIXME and fail for DGRAM sockets.)
> Linux man-pages call out returning sizeof(sockaddr_un) as okay on Linux,
> but is it portable? We may want to return strlen()+1 just to be safe.
Converting the path cannot realistically be done due to size differences for the same path:
```
$ echo -n 'C:\tmp\foo.sock' | wc -c
15
$ winepath 'C:\tmp\foo.sock' | tr -d '\n' | wc -c
47
```
For the same reason as needing to change directories to actually bind and connect, path translation in these functions and their server equivalents is not feasible.
--
https://gitlab.winehq.org/wine/wine/-/merge_requests/2786#note_36046
On Fri Jun 16 17:31:23 2023 +0000, Zebediah Figura wrote:
> We shouldn't need this anymore now that we're pssing the real unix path, right?
This is still needed because we need to change directories to the Unix path. We can't use the provided Unix path directly because the Unix path length can be larger than the Windows path due to the wineprefix, and that length may exceed `sizeof(sun_path)` even if the Windows path length does not.
--
https://gitlab.winehq.org/wine/wine/-/merge_requests/2786#note_36045
Initializing to NULL makes it more clear that the initial value is only
used as a parameter to realloc.
--
v2: hhctrl: Initialize item->items to NULL in parse_index_sitemap_object (scan-build).
https://gitlab.winehq.org/wine/wine/-/merge_requests/3089
Adds the tray icons implementation based on org.kde.StatusNotifierItem interface usage. Does allow restarting StatusNotifierWatcher object, but will fallback to XEMBED or internal tray, if wine gets initialized when there is no StatusNotifierWatcher object registered.
--
v18: winesni.drv: replaced the dbus connection logic with a single connection per each SNI object
winesni.drv: wrap functions with pthread mutex locking
winesni.drv: implement basic balloon notification support
explorer: add winesni.drv tray implementation support
winesni.drv: add KDE StatusNotifierItem implementation for tray
https://gitlab.winehq.org/wine/wine/-/merge_requests/2808
This also converts the opaque pointers passed across the PE->Unix interface to opaque types
represented as UINT64 which store the unix side pointer. This makes the thunking simpler and should
avoid anyone accidently dereferencing the unix pointer in the PE code.
This was tested with warcraft 3 (1.26, the last non-reforged release), and is consistent with the standard 32bit build. But since movies on warcraft 3 are broken in standard 32bit builds I could only test that that the gstreamer graph gets built up similarly and not verify the video playback. Id appreciate if someone knew of a working exercise of the gstreamer code.
--
v5: Fixup: assert struct sizes with bool/enum
Fixup: designated initializers
winegstreamer: Implement Wow64 entrypoints in the Unix library.
https://gitlab.winehq.org/wine/wine/-/merge_requests/3075
This also converts the opaque pointers passed across the PE->Unix interface to opaque types
represented as UINT64 which store the unix side pointer. This makes the thunking simpler and should
avoid anyone accidently dereferencing the unix pointer in the PE code.
This was tested with warcraft 3 (1.24, the last non-reforged release), and is consistent with the standard 32bit build. But since movies on warcraft 3 are broken in standard 32bit builds I could only test that that the gstreamer graph gets built up similarly and not verify the video playback. Id appreciate if someone knew of a working exercise of the gstreamer code.
--
v4: winegstreamer: Implement Wow64 entrypoints in the Unix library.
https://gitlab.winehq.org/wine/wine/-/merge_requests/3075
Redo of !1857, as suggested, the plan is to split original MR in half, breadcrumbs in first (this) MR, and address edit in another.
The changes are mostly cleanup (formatting, renaming, unused variables, missing free).
Visually, it hasn't changed from original MR, part 1 changes are:

And part 2:

Part 2 branch can be found [here](https://gitlab.winehq.org/vt/wine/-/commits/fd-navbar-part2).
Requires !2068, otherwise if application doesn't request comctl v6 (e.g. qapitrace), navigation bar will look like this:

Closes:
- https://bugs.winehq.org/show_bug.cgi?id=29912
- https://bugs.winehq.org/show_bug.cgi?id=54812
- https://bugs.winehq.org/show_bug.cgi?id=50338 (partially? fully with address edit?)
MR changes:
- v2
- Changed the gap between buttons to be scaled with DPI
- v3
- DPI scale the gap in layout calculation in breadcrumbs commit
missed it earlier
- remove padding from layout calculation
`GetWindowRect` was unintentionally returning double padding, 4px from `hspacing` in `itemdlg.c:update_layout`, and another 4px from somewhere else
- drop `comdlg32: Keep IExplorerBrowser in IFileDialog focused after Backspace.` hack
- retain IExplorerBrowser view focus in IFileDialog when creating new view
- redirect navigation bar buttons focus back to the previous window
Description edits:
- v2
- Updated the changes image (by splitting it)
- Added MR changes
- v3
- Added description edits
- Updated the changes image again (forgot the overflow button change)
--
v4: comdlg32: Avoid taking focus on LMB click in IFileDialog navigation bar buttons.
comdlg32: Add tab navigation to IFileDialog navigation bar.
comdlg32: Retain IExplorerBrowser view focus in IFileDialog when creating new view.
comdlg32: Add breadcrumb overflow menu to IFileDialog navigation bar.
comdlg32: Add inner border to breadcrumbs in IFileDialog navigation bar.
comdlg32: Always show at least 2 crumbs in IFileDialog navigation bar.
comdlg32: Reuse address breadcrumbs in IFileDialog navigation bar.
comdlg32: Add address breadcrumbs to IFileDialog navigation bar.
https://gitlab.winehq.org/wine/wine/-/merge_requests/2993
Hopefully useful for people like me who had a hard time understanding
what was going on. Especially with the rearranged divison and the
simplification I had a hard time seeing why that does what it does
Signed-off-by: Fabian Maurer <dark.shadow4(a)web.de>
--
https://gitlab.winehq.org/wine/wine/-/merge_requests/3079