https://bugs.winehq.org/show_bug.cgi?id=49592
Bug ID: 49592 Summary: WinSCP shows folders with file icons and blank column data Product: Wine Version: 5.13 Hardware: x86-64 OS: Linux Status: UNCONFIRMED Severity: normal Priority: P2 Component: -unknown Assignee: wine-bugs@winehq.org Reporter: mgruber_72@yahoo.de Distribution: ---
Created attachment 67751 --> https://bugs.winehq.org/attachment.cgi?id=67751 WinSCP with mixed up icons and blank column data
Steps to reproduce:
1. Get WinSCP 5.17 from winscp.net 2. Connect to a linux box. 3. Navigate to root folder with your mouse using the "/" icon, then click on /etc, scroll to /etc/init (or any other folder which requires scrolling) and click on it. 4. Use the "upper directory" button to go back to /etc
Result:
Folders suddenly show up with file icons (see the attached screenshot) and column data is blank.
https://bugs.winehq.org/show_bug.cgi?id=49592
mgruber mgruber_72@yahoo.de changed:
What |Removed |Added ---------------------------------------------------------------------------- CC| |martin@winscp.net
https://bugs.winehq.org/show_bug.cgi?id=49592
mgruber mgruber_72@yahoo.de changed:
What |Removed |Added ---------------------------------------------------------------------------- Component|-unknown |comctl32
https://bugs.winehq.org/show_bug.cgi?id=49592
--- Comment #1 from Nikolay Sivov bunglehead@gmail.com --- Why do you think it's a control issue?
https://bugs.winehq.org/show_bug.cgi?id=49592
--- Comment #2 from mgruber mgruber_72@yahoo.de --- I guessed that comctl32 might be responsible for the whole list view. Correct me if I'm wrong, I'm no expert in windows programming.
https://bugs.winehq.org/show_bug.cgi?id=49592
--- Comment #3 from Nikolay Sivov bunglehead@gmail.com --- It might be, but it might also be given incorrect per-item icons in a first place, so issue could be in some host code that determines item kind (folder or a file).
https://bugs.winehq.org/show_bug.cgi?id=49592
--- Comment #4 from mgruber mgruber_72@yahoo.de --- To me it looks like some kind of icon caching bug that gets triggered when you return to a previously visited folder. Reloading the folder normalizes it.
https://bugs.winehq.org/show_bug.cgi?id=49592
Nikolay Sivov bunglehead@gmail.com changed:
What |Removed |Added ---------------------------------------------------------------------------- Component|comctl32 |-unknown
https://bugs.winehq.org/show_bug.cgi?id=49592
--- Comment #5 from mgruber mgruber_72@yahoo.de --- Since I just had to close one of my other bug reports (#49594) due to mixing up my Wine Staging with my Wine Stable environment: I just double checked that this bug still exists in 5.13 -> it does.
https://bugs.winehq.org/show_bug.cgi?id=49592
--- Comment #6 from mgruber mgruber_72@yahoo.de --- I was in contact with Martin Přikryl (author of WinSCP). After several debug builds he was able to confirm that it's not a WinSCP bug: it's a bug in the Wine component which caches the icons and timestamps.
https://bugs.winehq.org/show_bug.cgi?id=49592
--- Comment #7 from Nikolay Sivov bunglehead@gmail.com --- (In reply to mgruber from comment #6)
I was in contact with Martin Přikryl (author of WinSCP). After several debug builds he was able to confirm that it's not a WinSCP bug: it's a bug in the Wine component which caches the icons and timestamps.
Any idea which component is this?
https://bugs.winehq.org/show_bug.cgi?id=49592
mgruber mgruber_72@yahoo.de changed:
What |Removed |Added ---------------------------------------------------------------------------- Component|-unknown |comctl32
--- Comment #8 from mgruber mgruber_72@yahoo.de --- List views are provided by comctl32 and user32 according to the MS documentation. I've set it to comctl32 now, feel free to change if I'm wrong.
I just verified the bug with 5.16, it persists.
https://bugs.winehq.org/show_bug.cgi?id=49592
Nikolay Sivov bunglehead@gmail.com changed:
What |Removed |Added ---------------------------------------------------------------------------- Component|comctl32 |-unknown
--- Comment #9 from Nikolay Sivov bunglehead@gmail.com --- This will need some more information from the author to get it fixed, e.g. what specifically breaks.
https://bugs.winehq.org/show_bug.cgi?id=49592
--- Comment #10 from mgruber mgruber_72@yahoo.de --- I'm feeling like I'm caught in an endless loop with this bug report.
Martin Přikryl told me a few hours ago that the list view component is responsible for the row data handling. List view functionality is provided by comctl32 and user32. It works fine on native Windows.
There's no sign in the debug files why Wine is messing it up. WinSCP requests the folder data and gets the wrong data back once it has been cached before.
https://bugs.winehq.org/show_bug.cgi?id=49592
--- Comment #11 from Martin Prikryl martin@winscp.net --- WinSCP does not get wrong data. It gets the same data everytime. Based on that, WinSCP asks to draw the same icon (icon index) everytime. But different data is drawn in some cases.
https://bugs.winehq.org/show_bug.cgi?id=49592
--- Comment #12 from Nikolay Sivov bunglehead@gmail.com --- (In reply to Martin Prikryl from comment #11)
WinSCP does not get wrong data. It gets the same data everytime. Based on that, WinSCP asks to draw the same icon (icon index) everytime. But different data is drawn in some cases.
Same data from where? Could you point me to relevant part in winscp code that does not work correctly? If it's really listview issue it might be LVS_OWNERDATA problem, or not. Listview does not do caching in usual sense, it either stores per-item data or doesn't and calls back to hosting window when it has to.
https://bugs.winehq.org/show_bug.cgi?id=49592
--- Comment #13 from Martin Prikryl martin@winscp.net --- Sorry for my late answer. It took some time to debug this.
WinSCP uses a list view to implement a file browser. To indicate the icon for the file, WinSCP uses LVN_GETDISPINFO callback.
The reported problem only happens in specific situation, which is actually not related to caching at all.
The problem happens after loading the file list into the list view. In a specific situation, WinSCP moves the focus to specific file (list view item). That happens, when the user browses to the parent directory. WinSCP then focuses the previously visited subdirectory. For the focus, ListView_SetItemState is used with mask=LVIS_FOCUSED. If the change of the focus requires scrolling of the view, Wine immediately triggers the LVN_GETDISPINFO callback. WinSCP does not expect the callback so soon and ignores it. That probably results into use of some default icons. This does not happen in Windows. Windows trigger the callback much later.
It would be easy to change WinSCP not to trigger the problem. But I believe it's against Wine policy.
https://bugs.winehq.org/show_bug.cgi?id=49592
Nikolay Sivov bunglehead@gmail.com changed:
What |Removed |Added ---------------------------------------------------------------------------- Component|-unknown |comctl32
--- Comment #14 from Nikolay Sivov bunglehead@gmail.com --- Thank you for the details.