]> git.sur5r.net Git - i3/i3/commitdiff
Copy the entire window content on Expose events. (#2685)
authorIngo Bürk <admin@airblader.de>
Fri, 17 Feb 2017 08:06:40 +0000 (09:06 +0100)
committerMichael Stapelberg <stapelberg@users.noreply.github.com>
Fri, 17 Feb 2017 08:06:40 +0000 (00:06 -0800)
With commit d58dbc3 we started ignoring Expose events in a sequence
except for the last one. Since we only copied the affected part of
the window in the Expose event handler, this caused incorrectly
rendered window decorations.

Instead of reverting to the old behavior, we now copy the entire window
content on this single, last event with the following rationale:
- It's cheaper to copy a larger chunk once than multiple smaller
  chunks doing one server roundtrip each.
- That's how we do it when rendering out decoration on decoration
  changes as well.

fixes #2683

src/handlers.c

index 315688c440768cae2c05caa3ff46c45c3bb2c993..9fb9040e3067f6170805f51a4060a6f087b1d76c 100644 (file)
@@ -614,12 +614,9 @@ static void handle_expose_event(xcb_expose_event_t *event) {
     }
 
     /* Since we render to our surface on every change anyways, expose events
-     * only tell us that the X server lost (parts of) the window contents. We
-     * can handle that by copying the appropriate part from our surface to the
-     * window. */
+     * only tell us that the X server lost (parts of) the window contents. */
     draw_util_copy_surface(&(parent->frame_buffer), &(parent->frame),
-                           event->x, event->y, event->x, event->y,
-                           event->width, event->height);
+                           0, 0, 0, 0, parent->rect.width, parent->rect.height);
     xcb_flush(conn);
     return;
 }