shithub: rio

Download patch

ref: 685fce9942b9f9f877ba36db91bf8ef1e20f8254
parent: e8e42318371ad89d7b048a3a05d3c57aed8fc0fd
author: glenda <glenda@cirno>
date: Thu Mar 20 21:31:07 EDT 2025

preserve window contents when resizing (weird over drawterm)

--- a/rio.c
+++ b/rio.c
@@ -1018,12 +1018,14 @@
 Image*
 bandsize(Window *w)
 {
-	Rectangle r, or;
+	Rectangle r, or, origr;
 	Point p, startp;
 	int which, owhich, but;
+	Image *tmp;
 
 	owhich = -1;
 	or = w->screenr;
+	origr = or;
 	but = mouse->buttons;
 	startp = onscreen(mouse->xy);
 	drawborder(or, sizecol);
@@ -1036,6 +1038,10 @@
 		}
 		r = whichrect(or, p, owhich);
 		if(!eqrect(r, or) && goodrect(r)){
+			tmp = allocwindow(wscreen, r, Refnone, DNofill);
+			if(tmp != nil){
+				wsendctlmesg(w, Reshaped, r, tmp);
+			}
 			drawborder(r, sizecol);
 			or = r;
 		}
@@ -1044,14 +1050,20 @@
 	drawborder(or, nil);
 	if(!goodrect(or))
 		riosetcursor(nil);
-	if(mouse->buttons!=0 || !goodrect(or) || eqrect(or, w->screenr)
+	
+	if(mouse->buttons!=0 || !goodrect(or) || eqrect(or, origr)
 	|| abs(p.x-startp.x)+abs(p.y-startp.y) <= 1){
+		tmp = allocwindow(wscreen, origr, Refnone, DNofill);
+		if(tmp == nil)
+			error("bandsize: can't restore window");
+		wsendctlmesg(w, Reshaped, origr, tmp);
 		flushimage(display, 1);
 		while(mouse->buttons)
 			readmouse(mousectl);
 		return nil;
 	}
-	return allocwindow(wscreen, or, Refbackup, DNofill);
+	
+	return allocwindow(wscreen, r, Refbackup, DNofill);
 }
 
 Window*