shithub: view

Download patch

ref: c5f189be7a76f9b0c1376fd5a5d75c7106bad1a6
parent: 120c11d47e0505a831c68d146869cf872c648c60
author: phil9 <telephil9@gmail.com>
date: Fri Nov 19 16:46:56 EST 2021

added menu2 with open and exit options

--- a/view.c
+++ b/view.c
@@ -24,6 +24,21 @@
 Image *img;
 Point pos;
 
+enum
+{
+	Mopen,
+	Mexit,
+};
+char *menu2str[] =
+{
+	"open",
+	"exit",
+	nil,
+};
+Menu menu2 = { menu2str };
+
+void redraw(void);
+
 Image*
 load9(char *filename)
 {
@@ -91,6 +106,21 @@
 	return i;
 }
 
+int
+loadfromfile(char *filename)
+{
+	Image *i;
+
+	i = load(filename);
+	if(i == nil)
+		return -1;
+	freeimage(img);
+	img = i;
+	pos = subpt(ZP, img->r.min);
+	redraw();
+	return 0;
+}
+
 void
 initbg(void)
 {
@@ -158,7 +188,6 @@
 {
 	int rm;
 	char *a, *f;
-	Image *i;
 
 	rm = 0;
 	a = plumblookup(m->attr, "action");
@@ -172,13 +201,7 @@
 	}else{
 		f = strdup(m->data);
 	}
-	i = load(f);
-	if(i != nil){
-		freeimage(img);
-		img = i;
-		pos = subpt(ZP, img->r.min);
-		redraw();
-	}else
+	if(loadfromfile(f) < 0)
 		fprint(2, "cannot load plumbed image: %r"); /* XXX: visual report */
 Err:
 	plumbfree(m);
@@ -200,6 +223,8 @@
 evtmouse(Mouse m)
 {
 	Point o;
+	int n;
+	char buf[255] = {0};
 
 	if(m.buttons == 1){
 		for(;;){
@@ -209,6 +234,19 @@
 			if((mctl->buttons & 1) == 0)
 				break;
 			pan(subpt(mctl->xy, o));
+		}
+	}else if(m.buttons == 2){
+		n = menuhit(2, mctl, &menu2, nil);
+		switch(n){
+		case Mopen:
+			if(enter("open:", buf, sizeof buf, mctl, kctl, nil) > 0){
+				if(loadfromfile(buf) < 0)
+					fprint(2, "cannot open file '%s': %r\n", buf);
+			}
+			break;
+		case Mexit:
+			threadexitsall(nil);
+			break;
 		}
 	}
 }