Skip to content
  • Vlad Zahorodnii's avatar
    [libkwineffects] Don't enable painting for windows that are not kept alive · 1b7cad95
    Vlad Zahorodnii authored
    Summary:
    862bf0f1 introduced a regression(sorry
    for that): if you close a confirmation dialog(with the Scale effect and the
    Dialog Parent effect being enabled), the main window(s) will flicker.
    
    That flickering happens because the C++ version of the Scale effect and
    AnimationEffect unref deleted windows in different places. AnimationEffect
    unrefs deleted windows in prePaintScreen, which btw is not the best
    place to do that. The C++ version unrefed windows in postPaintScreen.
    
    So, when the Scale effect has finished animating the main windows, it
    will unref them, but windowDeleted signal won't be emitted immediately.
    Which means that the Dialog Parent won't be able to delete corresponding
    animations on its side and main windows will be painted for a single
    frame.
    
    This change addresses flickering by adjusting prePaintWindow in
    AnimationEffect so deleted windows won't be painted if none of
    animations keeps them alive.
    
    Test Plan:
    (make sure that both the scale and the dialog parent effect are enabled)
    * Go to System Settings > Application Style > Window Decorations;
    * Select a decoration that is different from the current;
    * Close the system settings window (don't click "Apply" button);
    * When a dialog is shown, click "Discard" or "Apply" button.
    
    Reviewers: #kwin, davidedmundson
    
    Reviewed By: #kwin, davidedmundson
    
    Subscribers: kwin
    
    Tags: #kwin
    
    Differential Revision: https://phabricator.kde.org/D16542
    1b7cad95