code: drawterm

Download patch

ref: 5e5cd80755ea4c164eae70d876a3f9b864fe742e
parent: 5c08d0f7ce762e0e9ec5e5be2e504ef2359173f3
author: Sigrid Solveig Haflínudóttir <ftrvxmtrx@gmail.com>
date: Wed Jan 19 19:46:07 EST 2022

gui-wl: do not hold the lock, otherwise compositor locks up for the duration of the redraw

--- a/gui-wl/wl-cb.c
+++ b/gui-wl/wl-cb.c
@@ -79,9 +79,7 @@
 	wl = data;
 	wl_callback_destroy(cb);
 	cb = wl_surface_frame(wl->surface);
-	qlock(&drawlock);
 	wlflush(wl);
-	qunlock(&drawlock);
 	wl_callback_add_listener(cb, &wl_surface_frame_listener, wl);
 }
 
--- a/gui-wl/wl-screen.c
+++ b/gui-wl/wl-screen.c
@@ -51,7 +51,8 @@
 		memcpy(wl->shm_data, gscreen->data->bdata, wl->dx*wl->dy*4);
 
 	wl_surface_attach(wl->surface, wl->screenbuffer, 0, 0);
-	wl_surface_damage(wl->surface, 0, 0, wl->dx, wl->dy);
+	if(wl->dirty)
+		wl_surface_damage(wl->surface, 0, 0, wl->dx, wl->dy);
 	wl_surface_commit(wl->surface);
 	wl->dirty = 0;
 }