Linux Painting Invalidation broken 8.0.1 to 8.0.2 due to Component::isShowing changes

Hi

I upgraded shortcircuit to 8.0.2 from 8.0.1 yesterday and almost immediately we got reports that repainting was broken on Linux in some circumstances.

I did a git bisect and the problem is introduced in this commit: 555b667d228439e36cbcd by @reuk

That commit changes the nature of ‘isShowing’ and on linux uses XWindowSystem::getInstance()->isMinimised (windowH); but it seems this call is working improperly.

You can see a video of the repainting issue in this issue: UI Repaitning Issue · Issue #1395 · surge-synthesizer/shortcircuit-xt · GitHub basically when you do menu actions to change and cause a repaint, the ui is no longer showing consistently.

At 555b667d228439e36cbcd~1 the UI works fine.

if I take 555b667d228439e36cbcd and then modify juce_Windowing_linux.cpp near line 207 to say

    bool isShowing() const override
    {
        return true;
        // return XWindowSystem::getInstance()->isMinimised (windowH);
    }

and then the UI works as it did with 8.0.1.

We saw this both on ubuntu24 and on a differently configured debian system.

I have not dug into why isMinimised is returning the wrong value but one thought I had is the creation of menus creates more handles - I’m wondering if that handle reference is the wrong one when asked later and you are asking a dismissed menu if it is showing when trying to repaint the parent.

If you want to try this yourself you can easily build shortcircuit. I pushed a change this morning to make it build with both 8.0.1 and 8.0.2.

GitHub - surge-synthesizer/shortcircuit-xt: Will be a sampler when its done! is the repo and you an just do a standard cmake build after a submodules.

Thanks

Sorry about that, I’m aware of a few problems with the commit you mentioned (ComponentPeer: Add isShowing() member, which more closely matches exp… · juce-framework/JUCE@555b667 · GitHub). At the moment I’m leaning towards reverting it and trying to find another approach to get the desired behaviour in Live and other hosts that hide/show plugin windows without minimising them. I’ll update this thread once we’ve published a fix.

Thanks

I’ll back shortcircuit and surge back to 8.0.1 later today then!

arghhh ok i’ll back shortcircuit down. surge has a few patches in the way that make it trickier.

is that commit ok to revert standalone? So I can run 8.0.2 + reverting that?

Yes, I should think so.

1 Like

Thanks!

This is now fixed on develop:

Awesome thanks @reuk !!

Also ran into this with 8.0.2. Somehow expected that this update from 8.0.0 would work without any issues and released it to prod.

8.0.2 is not usable for plugin Linux builds as long as this isn’t fixed. We need to rollback to 8.0.0 for all platforms because of this. Can you please merge this into the master?

1 Like

We’re expecting to make a new point release shortly, most likely next week, once the current fixes on the develop branch have had a little time to settle. There’s also another fix for Direct2D rendering that I’d like to be included in the release, but which is yet to be published.

2 Likes