aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--types/wlr_output_damage.c16
1 files changed, 11 insertions, 5 deletions
diff --git a/types/wlr_output_damage.c b/types/wlr_output_damage.c
index 08f11207..f9aabc31 100644
--- a/types/wlr_output_damage.c
+++ b/types/wlr_output_damage.c
@@ -187,11 +187,17 @@ void wlr_output_damage_add(struct wlr_output_damage *output_damage,
int width, height;
wlr_output_transformed_resolution(output_damage->output, &width, &height);
- pixman_region32_union(&output_damage->current, &output_damage->current,
- damage);
- pixman_region32_intersect_rect(&output_damage->current,
- &output_damage->current, 0, 0, width, height);
- wlr_output_schedule_frame(output_damage->output);
+ pixman_region32_t clipped_damage;
+ pixman_region32_init(&clipped_damage);
+ pixman_region32_intersect_rect(&clipped_damage, damage, 0, 0, width, height);
+
+ if (pixman_region32_not_empty(&clipped_damage)) {
+ pixman_region32_union(&output_damage->current, &output_damage->current,
+ &clipped_damage);
+ wlr_output_schedule_frame(output_damage->output);
+ }
+
+ pixman_region32_fini(&clipped_damage);
}
void wlr_output_damage_add_whole(struct wlr_output_damage *output_damage) {