shithub: lola

Download patch

ref: 1ee61ee58ef158458a8727f31e3a94de3447412f
parent: 97cdca10bf57c2640feca790d302327b00d3d33f
author: aap <[email protected]>
date: Mon Sep 9 09:29:51 EDT 2024

only close opened fids. delete all tabs when deleting windows.

--- a/fs.c
+++ b/fs.c
@@ -199,7 +199,7 @@
 			}
 			w = tcreate(w->w, cmd.scrolling);
 		}else
-			w = wcreate(cmd.r, cmd.hidden, cmd.scrolling);
+			w = wtcreate(cmd.r, cmd.hidden, cmd.scrolling);
 		if(w == nil){
 			respond(r, Ewindow);
 			return;
@@ -475,6 +475,7 @@
 
 	rd = fid->omode==ORDWR || fid->omode==OREAD;
 	wr = fid->omode==ORDWR || fid->omode==OWRITE;
+	if(fid->omode != -1)
 	switch(QFILE(fid->qid.path)){
 	/* replace snarf buffer when /dev/snarf is closed */
 	case Qsnarf:
--- a/inc.h
+++ b/inc.h
@@ -268,6 +268,7 @@
 extern Window *focused, *cursorwin;
 extern Point screenoff;
 
+Window *wcreate(Rectangle r, bool hidden);
 int wcolsel(Window *w);
 void wtitlectl(Window *w);
 void wdecor(Window *w);
@@ -286,7 +287,6 @@
 int wunhide(Window *w);
 void wmovemouse(Window *w, Point pt, bool force);
 
-WinTab *wcreate(Rectangle r, bool hidden, bool scrolling);
 void wrelease(WinTab *w);
 void wsendmsg(WinTab *w, int type);
 WinTab *wfind(int id);
@@ -304,6 +304,8 @@
 void tmigrate(WinTab *t, Window *w);
 void tmoveleft(WinTab *t);
 void tmoveright(WinTab *t);
+
+WinTab *wtcreate(Rectangle r, bool hidden, bool scrolling);
 
 void screenoffset(int offx, int offy);
 
--- a/main.c
+++ b/main.c
@@ -147,7 +147,7 @@
 {
 	WinTab *w;
 
-	w = wcreate(r, FALSE, scrolling);
+	w = wtcreate(r, FALSE, scrolling);
 	assert(w);
 	if(wincmd(w, 0, nil, rcargv) == 0)
 		return nil;
@@ -647,9 +647,6 @@
 		screenoffset(ssel.x*dx, ssel.y*dy);
 }
 
-// TODO: header
-Window *wcreate_(Rectangle r, bool hidden);
-
 static void
 wtabctl(Window *w)
 {
@@ -697,7 +694,7 @@
 							ww = wpointto(mctl->xy);
 							if(ww == nil){
 								r = rectaddpt(w->rect, subpt(mctl->xy, pt));
-								ww = wcreate_(r, 0);
+								ww = wcreate(r, 0);
 								tmigrate(t, ww);
 							}
 						}
--- a/wctl.c
+++ b/wctl.c
@@ -430,7 +430,7 @@
 		refresh();
 		return nil;
 	case New:
-		w = wcreate(cmd.r, cmd.hidden, cmd.scrolling);
+		w = wtcreate(cmd.r, cmd.hidden, cmd.scrolling);
 		if(w == nil)
 			return "window creation failed";
 		return wctlnew(w, cmd);
--- a/wind.c
+++ b/wind.c
@@ -202,7 +202,7 @@
 static int id = 1;
 
 Window*
-wcreate_(Rectangle r, bool hidden)
+wcreate(Rectangle r, bool hidden)
 {
 	Window *w;
 
@@ -277,9 +277,9 @@
 }
 
 WinTab*
-wcreate(Rectangle r, bool hidden, bool scrolling)
+wtcreate(Rectangle r, bool hidden, bool scrolling)
 {
-	return tcreate(wcreate_(r, hidden), scrolling);
+	return tcreate(wcreate(r, hidden), scrolling);
 }
 
 /* called from winthread when it exits */
@@ -599,8 +599,8 @@
 {
 	wremove(w);
 	wunfocus(w);
-	for(WinTab *t = w->tab; t; t = t->next)
-		wsendmsg(t, Deleted);
+	while(w->tab)
+		tdelete(w->tab);
 }
 
 static void
@@ -1029,12 +1029,9 @@
 	Text *x;
 	int i;
 
-	if(type == Deleted){
+	if(type == Deleted)
 		if(w->notefd >= 0)
 			write(w->notefd, "hangup", 6);
-		tclose(w);
-		return;
-	}
 	if(w->deleted)
 		return;