Schedule a workspace repaint in AbstractClient::minimize()
ClosedPublic

Authored by zzag on Feb 20 2020, 8:58 AM.

Details

Summary

We need to schedule a workspace repaint in minimize() to ensure that
there are no ghost windows on Wayland.

Test Plan

Make sure that window minimization effects are disabled,
minimize a window. Without this patch, you are going to see a ghost
window. With this patch, no ghost window.

Diff Detail

Repository
R108 KWin
Lint
Automatic diff as part of commit; lint not applicable.
Unit
Automatic diff as part of commit; unit tests not applicable.
zzag created this revision.Feb 20 2020, 8:58 AM
Restricted Application added a project: KWin. · View Herald TranscriptFeb 20 2020, 8:58 AM
Restricted Application added a subscriber: kwin. · View Herald Transcript
zzag requested review of this revision.Feb 20 2020, 8:58 AM
apol added a subscriber: apol.Feb 20 2020, 2:57 PM

How do I reproduce this issue in the first place?

zzag added a comment.Feb 20 2020, 2:59 PM
In D27516#614661, @apol wrote:

How do I reproduce this issue in the first place?

Go to system settings, and disable "squash" effect or whatever effect you use to animate minimized windows.

apol added a comment.Feb 20 2020, 3:03 PM

I can confirm it's broken now (for me only on one of my screens, maybe because damage propagation is broken on multiscreen).

+1 on the change, make sense to me.

davidedmundson accepted this revision.Feb 20 2020, 3:04 PM
This revision is now accepted and ready to land.Feb 20 2020, 3:04 PM
apol accepted this revision.Feb 20 2020, 3:06 PM
zzag added a comment.Feb 20 2020, 3:12 PM
In D27516#614665, @apol wrote:

I can confirm it's broken now (for me only on one of my screens, maybe because damage propagation is broken on multiscreen).

No, whether the window is damaged doesn't really matter. Due to somewhat incomplete support for per-screen rendering, we force full repaints on all screens but one. Maybe that's why you weren't able to reproduce this bug previously.

For what it's worth, this bug is not reproducible on X11 because X11Client::internalHide() schedules a repaint.

This revision was automatically updated to reflect the committed changes.