> (The TlsIndex field in the LDR_DATA_TABLE_ENTRY structure appears to be unused except as a flag that the module has TLS (being always set to -1), at least as far back as Windows XP. It is worth mentioning that the WINE implementation of implicit TLS incorrectly uses TlsIndex as the real module TLS index, so it may be unreliable to assume that it is always -1 if you care about working on WINE.)
>
> \- http://www.nynaeve.net/?p=186
and the "links to that article but still doesn't work in wine" award goes to... [the D runtime](https://github.com/dlang/dmd/blob/6bf60ea0eb174631ede0074a77d3898d…! (Admittedly, there aren't too many ways to do what they're trying to do.)
With this, the D runtime will now work in Wine, even if in a dll loaded into an exe with no tls (which gets it the tls index 0)
The changes to the debugger are a bit icky, a possible alternative is to find some other easily-debugger-accessible place to stuff the tls index.
--
v7: TMP: Use module info for tls in winedbg
winedbg: Track loaded modules
https://gitlab.winehq.org/wine/wine/-/merge_requests/1578
There are times when it is useful to test changes on the Windows XP and 2003 VMs, but the direct use of functions not on those platforms makes this impossible.
Once applied, the kernel32 tests will run on the Windows XP and 2003 testbot VMs.
--
https://gitlab.winehq.org/wine/wine/-/merge_requests/1899
Implements navigation bar featuring:
- back/forward buttons
- go up button
- address crumbs
- hides crumbs when there's not enough space to display all of them
- always shows at least 2 crumbs
- truncating them if needed
- first crumb is at least 56px
- aligns label to the left if truncated
- right clicking on the crumb, or free space, opens a menu with `Copy address as text` and `Edit address` options
- reuses existing crumbs to avoid some flickering
- overflow menu
- first crumb is always moved here
- removes the split, if there are no items in the menu
- hidden crumbs are moved here
- left or right click on the button starts address editing
- address edit
- accepts an existing path
- expands environment variables, e.g. `%APPDATA%\Microsoft` -> `C:\users\%USERNAME%\AppData\Roaming\Microsoft`
- errors with a `MessageBox` on nonexistent paths
- refresh button
- changes into go to button when editing address
- DPI scaling
Screenshots:






Remaining issues:
- crumbs not lighting up when hovered sometimes
- can be observed in current file dialog, hovering over dropdown arrow of a file type fixes it for a moment
- crumbs flickering on address change sometimes
- mostly when there's not enough space to display all of them
- `DeferWindowPos` doesn't seem to be atomic in Wine, presumably is in native Windows?
- unexpected address conversion for some PIDLs
- e.g. `Desktop` -> `C:\users\%USERNAME%\Desktop`, which is an entirely different location
- or `My Computer` into an empty string
- known folders are not handled by address edit, e.g. `Desktop`, `My Computer`
- icons are not DPI scaled
- while writing this:
```
0024:fixme:bitmap:NtGdiCreateBitmap planes = 0
0024:err:system:user_check_not_lock BUG: holding USER lock
wine/dlls/win32u/sysparams.c:396: user_check_not_lock: Assertion `0' failed.
wine: Assertion failed at address F7FF8549 (thread 0024), starting debugger...
```
- can't reproduce, happened when clicking on an item in overflow menu
- race condition? cosmic ray?
Addresses following bugs:
- https://bugs.winehq.org/show_bug.cgi?id=29912
- https://bugs.winehq.org/show_bug.cgi?id=50338
- https://bugs.winehq.org/show_bug.cgi?id=51855 (partially? no search box)
--
v7: comdlg32: Add refresh/go to button to IFileDialog navigation bar.
comdlg32: Add address edit to IFileDialog navigation bar.
comdlg32: Add breadcrumb overflow menu to IFileDialog navigation bar.
https://gitlab.winehq.org/wine/wine/-/merge_requests/1857
While this doesn't fully fix https://bugs.winehq.org/show_bug.cgi?id=50703 as we can read in the code comments ideally the number of devices is "unbound" it does resolve the immediate issue that I've been facing.
Since the total number of ports displayed is both hardware + software it's incredibly easy to go beyond just 16.
The increase to 64 helps a lot, but is still not perfect. We could also set it to 128 or 256, but it's still arbitrary.
I think this would already be enough for the vast majority of cases, but I guess they also thought this with 16 ;)
--
v2: update comment
https://gitlab.winehq.org/wine/wine/-/merge_requests/1893
Implements navigation bar featuring:
- back/forward buttons
- go up button
- address crumbs
- hides crumbs when there's not enough space to display all of them
- always shows at least 2 crumbs
- truncating them if needed
- first crumb is at least 56px
- aligns label to the left if truncated
- right clicking on the crumb, or free space, opens a menu with `Copy address as text` and `Edit address` options
- reuses existing crumbs to avoid some flickering
- overflow menu
- first crumb is always moved here
- removes the split, if there are no items in the menu
- hidden crumbs are moved here
- left or right click on the button starts address editing
- address edit
- accepts an existing path
- expands environment variables, e.g. `%APPDATA%\Microsoft` -> `C:\users\%USERNAME%\AppData\Roaming\Microsoft`
- errors with a `MessageBox` on nonexistent paths
- refresh button
- changes into go to button when editing address
- DPI scaling
Screenshots:






Remaining issues:
- crumbs not lighting up when hovered sometimes
- can be observed in current file dialog, hovering over dropdown arrow of a file type fixes it for a moment
- crumbs flickering on address change sometimes
- mostly when there's not enough space to display all of them
- `DeferWindowPos` doesn't seem to be atomic in Wine, presumably is in native Windows?
- unexpected address conversion for some PIDLs
- e.g. `Desktop` -> `C:\users\%USERNAME%\Desktop`, which is an entirely different location
- or `My Computer` into an empty string
- known folders are not handled by address edit, e.g. `Desktop`, `My Computer`
- icons are not DPI scaled
- while writing this:
```
0024:fixme:bitmap:NtGdiCreateBitmap planes = 0
0024:err:system:user_check_not_lock BUG: holding USER lock
wine/dlls/win32u/sysparams.c:396: user_check_not_lock: Assertion `0' failed.
wine: Assertion failed at address F7FF8549 (thread 0024), starting debugger...
```
- can't reproduce, happened when clicking on an item in overflow menu
- race condition? cosmic ray?
Addresses following bugs:
- https://bugs.winehq.org/show_bug.cgi?id=29912
- https://bugs.winehq.org/show_bug.cgi?id=50338
- https://bugs.winehq.org/show_bug.cgi?id=51855 (partially? no search box)
--
v6: comdlg32: Add refresh/go to button to IFileDialog navigation bar.
comdlg32: Add address edit to IFileDialog navigation bar.
comdlg32: Add breadcrumb overflow menu to IFileDialog navigation bar.
comdlg32: Add address breadcrumbs to IFileDialog navigation bar.
comdlg32: Add go up button to IFileDialog navigation bar.
comdlg32: Add IFileDialog navigation bar.
https://gitlab.winehq.org/wine/wine/-/merge_requests/1857
While this doesn't fully fix https://bugs.winehq.org/show_bug.cgi?id=50703 as we can read in the code comments ideally the number of devices is "unbound" it does resolve the immediate issue that I've been facing.
Since the total number of ports displayed is both hardware + software it's incredibly easy to go beyond just 16.
The increase to 64 helps a lot, but is still not perfect. We could also set it to 128 or 256, but it's still arbitrary.
I think this would already be enough for the vast majority of cases, but I guess they also thought this with 16 ;)
--
https://gitlab.winehq.org/wine/wine/-/merge_requests/1893
Implements navigation bar featuring:
- back/forward buttons
- go up button
- address crumbs
- hides crumbs when there's not enough space to display all of them
- always shows at least 2 crumbs
- truncating them if needed
- first crumb is at least 56px
- aligns label to the left if truncated
- right clicking on the crumb, or free space, opens a menu with `Copy address as text` and `Edit address` options
- reuses existing crumbs to avoid some flickering
- overflow menu
- first crumb is always moved here
- removes the split, if there are no items in the menu
- hidden crumbs are moved here
- left or right click on the button starts address editing
- address edit
- accepts an existing path
- expands environment variables, e.g. `%APPDATA%\Microsoft` -> `C:\users\%USERNAME%\AppData\Roaming\Microsoft`
- errors with a `MessageBox` on nonexistent paths
- refresh button
- changes into go to button when editing address
- DPI scaling
Screenshots:






Remaining issues:
- crumbs not lighting up when hovered sometimes
- can be observed in current file dialog, hovering over dropdown arrow of a file type fixes it for a moment
- crumbs flickering on address change sometimes
- mostly when there's not enough space to display all of them
- `DeferWindowPos` doesn't seem to be atomic in Wine, presumably is in native Windows?
- unexpected address conversion for some PIDLs
- e.g. `Desktop` -> `C:\users\%USERNAME%\Desktop`, which is an entirely different location
- or `My Computer` into an empty string
- known folders are not handled by address edit, e.g. `Desktop`, `My Computer`
- icons are not DPI scaled
- while writing this:
```
0024:fixme:bitmap:NtGdiCreateBitmap planes = 0
0024:err:system:user_check_not_lock BUG: holding USER lock
wine/dlls/win32u/sysparams.c:396: user_check_not_lock: Assertion `0' failed.
wine: Assertion failed at address F7FF8549 (thread 0024), starting debugger...
```
- can't reproduce, happened when clicking on an item in overflow menu
- race condition? cosmic ray?
Addresses following bugs:
- https://bugs.winehq.org/show_bug.cgi?id=29912
- https://bugs.winehq.org/show_bug.cgi?id=50338
- https://bugs.winehq.org/show_bug.cgi?id=51855 (partially? no search box)
--
v5: comdlg32: Add refresh/go to button to IFileDialog navigation bar.
comdlg32: Add address edit to IFileDialog navigation bar.
comdlg32: Add breadcrumb overflow menu to IFileDialog navigation bar.
comdlg32: Add address breadcrumbs to IFileDialog navigation bar.
comdlg32: Add go up button to IFileDialog navigation bar.
comdlg32: Add IFileDialog navigation bar.
https://gitlab.winehq.org/wine/wine/-/merge_requests/1857
On Wed Dec 28 23:08:08 2022 +0000, Vladislav Timonin wrote:
> Just some padding so that the icon isn't so close to the text. Probably
> could use a comment.
> `dis->rcItem.left, dis->rcItem.top` on the left.
> `dis->rcItem.left - (icon_width / 2), dis->rcItem.top` on the right.
> 
Was pointed out that I shouldn't draw outside `rcItem` and can add padding in `WM_MEASUREITEM` instead. Should've read docs thoroughly enough ,_,

--
https://gitlab.winehq.org/wine/wine/-/merge_requests/1857#note_20183
On Wed Dec 28 19:30:29 2022 +0000, Esme Povirk wrote:
> Drawing outside of rcItem doesn't seem right. Why is this necessary?
Just some padding so that the icon isn't so close to the text. Probably could use a comment.
`dis->rcItem.left, dis->rcItem.top` on the left.
`dis->rcItem.left - (icon_width / 2), dis->rcItem.top` on the right.

--
https://gitlab.winehq.org/wine/wine/-/merge_requests/1857#note_20182
On Wed Dec 28 19:30:28 2022 +0000, Esme Povirk wrote:
> I think you could remove the need for this by drawing the left border
> outside the window.
If you mean extending it to be painted under crumbs, it originally was, static control with `SS_GRAYFRAME` taking up full width. But that had issues with frame being painted over crumbs on initial dialog show. And right border trailing on resize that I was ignoring thinking it was caused by [54137](https://bugs.winehq.org/show_bug.cgi?id=54137).
--
https://gitlab.winehq.org/wine/wine/-/merge_requests/1857#note_20181
On Wed Dec 28 19:30:30 2022 +0000, Esme Povirk wrote:
> I think removing items from the list like this is confusing. It also
> results in the need for a special case "preserving" the first crumb in
> the layout code.
This is similar to what Windows does, but it indeed does complicate things a little, I'll remove it.
--
https://gitlab.winehq.org/wine/wine/-/merge_requests/1857#note_20180