https://bugs.winehq.org/show_bug.cgi?id=52515
Bug ID: 52515 Summary: Resizing/maximizing foobar2000 has stale rendering errors (more in Light Blue theme) Product: Wine Version: 7.0 Hardware: x86-64 OS: Linux Status: UNCONFIRMED Severity: normal Priority: P2 Component: comctl32 Assignee: wine-bugs@winehq.org Reporter: nyanpasu64@tuta.io Distribution: ---
Created attachment 71815 --> https://bugs.winehq.org/attachment.cgi?id=71815 Screenshot of list header, scrollbar, and resize handle rendering incorrectly
- Install foobar2000 v1.6.9. - (optional) In winecfg, switch to Light Blue theme, then open foobar2000. - In "Quick Appearance Setup", pick "Album List + Properties". - Add some files to the playback list (preferably enough for a vertical scrollbar). - (Optional) Press Ctrl+N to show playlist tabs. - Resize and enlarge the window slowly horizontally. Then shrink the window horizontally, and tile or maximize the window (expanding it quickly).
When resizing the window slowly, you will get vertical lines in the sort header, and stale resize handles in the window's bottom right corner (faintly visible). When maximizing the window, a scrollbar will mistakenly render in the song list (which remains when resizing the window further, moves when you scroll the song list, and gets cleared when you select/deselect the songs behind it). I also saw entire stale tabs to the right of real tabs, but was unable to replicate this bug.
On (No Theme) and Light "Classic Blue", when maximizing, the glitched scrollbar rendering occurs as well. When resizing slowly, the stale resize handles are *more* visible, but the vertical lines do not occur.
Confirmed on Xfce and KDE Plasma X11, with X11/Wine running at 96 and 120 DPI. Video at https://youtu.be/jch76UQpn2w.
I assume this is a Wine rendering bug, but perhaps it could be a foobar2000 redrawing bug, or an interaction between Wine and foobar2000's redraw events.
Operating System: Arch Linux Kernel Version: 5.16.4-zen1-1-zen (64-bit) Graphics Platform: X11 Processors: 12 × AMD Ryzen 5 5600X 6-Core Processor Memory: 15.6 GiB of RAM Graphics Processor: NVIDIA GeForce GT 730/PCIe/SSE2 (proprietary drivers 470.103.01)
https://bugs.winehq.org/show_bug.cgi?id=52515
Zhiyi Zhang zzhang@codeweavers.com changed:
What |Removed |Added ---------------------------------------------------------------------------- CC| |zzhang@codeweavers.com
https://bugs.winehq.org/show_bug.cgi?id=52515
Zhiyi Zhang zzhang@codeweavers.com changed:
What |Removed |Added ---------------------------------------------------------------------------- Status|UNCONFIRMED |NEW Ever confirmed|0 |1
--- Comment #1 from Zhiyi Zhang zzhang@codeweavers.com --- Confirmed with wine 7.1
https://bugs.winehq.org/show_bug.cgi?id=52515
Zhiyi Zhang zzhang@codeweavers.com changed:
What |Removed |Added ---------------------------------------------------------------------------- Assignee|wine-bugs@winehq.org |zzhang@codeweavers.com
https://bugs.winehq.org/show_bug.cgi?id=52515
Zhiyi Zhang zzhang@codeweavers.com changed:
What |Removed |Added ---------------------------------------------------------------------------- Assignee|zzhang@codeweavers.com |wine-bugs@winehq.org
https://bugs.winehq.org/show_bug.cgi?id=52515
--- Comment #2 from Zhiyi Zhang zzhang@codeweavers.com --- Created attachment 71862 --> https://bugs.winehq.org/attachment.cgi?id=71862 test program
I spent several days looking at this bug but haven't been able to figure out why on Windows this doesn't appear. I can reproduce this problem with control spy v6 as well. So I use it to debug since the bug behavior with foobar2000 is less visible comparatively. When enlarging control spy horizontally, there is a good chance the "Extended styles" list box horizontal scrollbar overlaps the buttons on its right, e.g., Apply, Recreate and Reset buttons. The reason why this would happen on Wine is something like this. When the application receives size change messages, MoveWindow(listbox_handle, positions..., TRUE) and MoveWindow(button_handle, positions..., TRUE) is called. When the list box paints the scrollbar, it paints into the original window rectangle that the buttons were in, so their window content is corrupted. Then, MoveWindow(button_handle, positions..., TRUE) will use move_window_bits_parent() to move the corrupted content to the new window rectangle. The problem is, on Windows, right after WM_WINDOWPOSCHANGING messages, WINDOWPOS.flags get added a SWP_NOCOPYBITS bit on Windows. This bit is not from the application, so it's from SetWindowPos() internally. And I haven't been able to figure out the condition that Windows automatically add this bit. It seems to be some kind of live resize heuristics. I also try to reproduce the same behavior using a sample program. However, the bug can be reproduced on Windows as well with the sample program so it's not helpful. Running out of ideas, I have to give this up for the moment.
https://bugs.winehq.org/show_bug.cgi?id=52515
--- Comment #3 from Zhiyi Zhang zzhang@codeweavers.com --- To clarify, SWP_NOCOPYBITS is added to the button WM_WINDOWPOSCHANGED messages so buttons can be successfully repainted on Windows. On Wine, this bit is missing so the old window content is used and no WM_PAINT messages are generated.
https://bugs.winehq.org/show_bug.cgi?id=52515
--- Comment #4 from Zhiyi Zhang zzhang@codeweavers.com --- If we can find an open-source program that can exhibit this bug, it would be very helpful to understand this bug.
https://bugs.winehq.org/show_bug.cgi?id=52515
--- Comment #5 from nyanpasu64@tuta.io --- I asked on the foobar2000 forums (https://hydrogenaud.io/index.php?topic=122151.0) and was told:
They could have a look at the SDK...
https://www.foobar2000.org/SDK
A relevant changelog entry...
Published CListControl source code (now part of libPPUI), which is the basis of the Default User Interface playlist view.
Inside the zip file is a folder named libPPUI and inside that are a whole bunch of files prefixed CListControl....
Is this sufficient to build a test app exhibiting the bug (hopefully at least the list views)? I'm on Linux right now, and I'm scared by the pervasive telemetry in Visual Studio, even PowerShell and Developer Command Prompt, etc. and don't want to run Windows to try building a test app.
https://bugs.winehq.org/show_bug.cgi?id=52515
--- Comment #6 from Zhiyi Zhang zzhang@codeweavers.com --- (In reply to nyanpasu64 from comment #5)
I asked on the foobar2000 forums (https://hydrogenaud.io/index.php?topic=122151.0) and was told:
They could have a look at the SDK...
https://www.foobar2000.org/SDK
A relevant changelog entry...
Published CListControl source code (now part of libPPUI), which is the basis of the Default User Interface playlist view.
Inside the zip file is a folder named libPPUI and inside that are a whole bunch of files prefixed CListControl....
Is this sufficient to build a test app exhibiting the bug (hopefully at least the list views)? I'm on Linux right now, and I'm scared by the pervasive telemetry in Visual Studio, even PowerShell and Developer Command Prompt, etc. and don't want to run Windows to try building a test app.
Sure, if you can build a test app from that and can reproduce the same bug. What I worry about is that these are only control source code, they need to be coupled together the same way to exhibit the bug.
https://bugs.winehq.org/show_bug.cgi?id=52515
--- Comment #7 from nyanpasu64@tuta.io --- Bug 52903 may be the same bug as this, in an open-source program, in Wine 7.7 and Bottles Wine 7.2+ (but I could not trigger that on Bottles Wine 7.0, unlike my initial report of this issue on Arch Wine 7.0 I think).
https://bugs.winehq.org/show_bug.cgi?id=52515
Petrichor Park ppark@codeweavers.com changed:
What |Removed |Added ---------------------------------------------------------------------------- CC| |ppark@codeweavers.com
--- Comment #8 from Petrichor Park ppark@codeweavers.com --- FWIW, I'm getting this same issue as of now (8.10-103).
https://bugs.winehq.org/show_bug.cgi?id=52515
Ken Sharp imwellcushtymelike@gmail.com changed:
What |Removed |Added ---------------------------------------------------------------------------- URL| |https://www.foobar2000.org/ | |download Keywords| |download, testcase