ref: 3268aa3c1ab1278090c95c9895854f2882cad33d
parent: 90dacd69f4625f09040cbdfdc619624e4b41ad3e
author: penny <penny@limitedideas.org>
date: Sat Jan 24 17:15:00 EST 2026
Add hidden window menu on button 2 in menuless mode
--- a/main.c
+++ b/main.c
@@ -541,6 +541,64 @@
wsendmsg(w, Wakeup);
}
+void
+btn2nomenu(void)
+{+ enum {+ Delete,
+ Hide,
+ Hidden
+ };
+ static char *str[Hidden+1 + MAXWINDOWS] = {+ "Delete",
+ "Hide",
+ nil
+ };
+
+ Window *w, *t;
+ static Menu menu = { str };+
+ static Window *hidden[MAXWINDOWS];
+ int nhidden;
+ int i, sel;
+
+ nhidden = 0;
+ for(i = 0; i < nwindows; i++){+ t = windows[i];
+ if(!rectXrect(screen->r, t->frame->r))
+ continue;
+ if(t->hidden || obscured(t, t->frame->r, t->higher)){+ hidden[nhidden] = windows[i];
+ str[nhidden+Hidden] = windows[i]->cur->label;
+ nhidden++;
+ }
+ }
+ str[nhidden+Hidden] = nil;
+
+ sel = menuhit(2, mctl, &menu, wscreen);
+ switch(sel){+ case Delete:
+ w = pick();
+ if(w) wdelete(w);
+ break;
+ case Hide:
+ w = pick();
+ if(w) whide(w);
+ break;
+ default:
+ if(sel >= Hidden){+ w = hidden[sel-Hidden];
+ if(w->hidden)
+ wunhide(w);
+ else{+ wraise(w);
+ wfocus(w);
+ }
+ }
+ break;
+ }
+}
+
void
btn3menu(void)
{@@ -784,6 +842,8 @@
btn13menu();
readmouse(mctl);
}
+ if(mctl->buttons & 2 && nomenu)
+ btn2nomenu();
if(mctl->buttons & 4)
btn3menu();
}else if(!ptinrect(mctl->xy, w->contrect)){--
⑨