[SteamOS compositor] Fix overlay flickering problem.

This commit is contained in:
Pierre-Loup Griffais 2014-07-24 15:03:24 -08:00 committed by Pierre-Loup A. Griffais
parent acbd2c8d7c
commit 8ae95f1f37
2 changed files with 15 additions and 1 deletions

6
debian/changelog vendored
View file

@ -1,3 +1,9 @@
steamos-compositor (1.21) alchemist; urgency=medium
* Fix issue with 1.20 where overlay would appear flickery.
-- Pierre-Loup A. Griffais <pgriffais@valvesoftware.com> Wed, 23 Jul 2014 18:02:07 -0700
steamos-compositor (1.20) alchemist; urgency=medium steamos-compositor (1.20) alchemist; urgency=medium
* Fix cases where notifications/overlays would start getting presented before * Fix cases where notifications/overlays would start getting presented before

View file

@ -103,6 +103,7 @@ typedef struct _win {
unsigned int requestedHeight; unsigned int requestedHeight;
Bool nudged; Bool nudged;
Bool ignoreOverrideRedirect; Bool ignoreOverrideRedirect;
Bool validContents;
Bool mouseMoved; Bool mouseMoved;
} win; } win;
@ -483,6 +484,7 @@ teardown_win_resources (Display *dpy, win *w)
} }
w->damaged = 0; w->damaged = 0;
w->validContents = False;
} }
static void static void
@ -606,7 +608,7 @@ paint_window (Display *dpy, win *w, Bool doBlend, Bool notificationMode)
if (!w) if (!w)
return; return;
if (w->isOverlay && !w->damaged) if (w->isOverlay && !w->validContents)
return; return;
win *mainOverlayWindow = find_win(dpy, currentOverlayWindow); win *mainOverlayWindow = find_win(dpy, currentOverlayWindow);
@ -1329,6 +1331,8 @@ map_win (Display *dpy, Window id, unsigned long sequence)
w->damage_sequence = 0; w->damage_sequence = 0;
w->map_sequence = sequence; w->map_sequence = sequence;
w->validContents = False;
determine_and_apply_focus(dpy); determine_and_apply_focus(dpy);
} }
@ -1336,6 +1340,7 @@ static void
finish_unmap_win (Display *dpy, win *w) finish_unmap_win (Display *dpy, win *w)
{ {
w->damaged = 0; w->damaged = 0;
w->validContents = False;
if (w->pixmap && fadeOutWindow.id != w->id) if (w->pixmap && fadeOutWindow.id != w->id)
{ {
@ -1391,6 +1396,7 @@ add_win (Display *dpy, Window id, Window prev, unsigned long sequence)
return; return;
} }
new->damaged = 0; new->damaged = 0;
new->validContents = False;
new->pixmap = None; new->pixmap = None;
new->fbConfig = win_fbconfig(dpy, new->id); new->fbConfig = win_fbconfig(dpy, new->id);
if (new->fbConfig == None) if (new->fbConfig == None)
@ -1564,6 +1570,8 @@ damage_win (Display *dpy, XDamageNotifyEvent *de)
if (!w) if (!w)
return; return;
w->validContents = True;
if (w->isOverlay && !w->opacity) if (w->isOverlay && !w->opacity)
return; return;