about summary refs log tree commit diff stats
path: root/p9c/menu.c
diff options
context:
space:
mode:
Diffstat (limited to 'p9c/menu.c')
-rw-r--r--p9c/menu.c77
1 files changed, 77 insertions, 0 deletions
diff --git a/p9c/menu.c b/p9c/menu.c
new file mode 100644
index 0000000..97004d6
--- /dev/null
+++ b/p9c/menu.c
@@ -0,0 +1,77 @@
+#include <u.h>
+#include <libc.h>
+#include <draw.h>
+#include <event.h>
+
+char* options1[] = {"Middle Click", "", "Paste", "Snarf", "Exit", 0};
+char* options2[] = {"Right Click", "", "Option3", "Option4", "Exit", 0};
+
+Menu middlemenu = {options1};
+Menu rightmenu = {options2};
+
+void
+eresized(int new)
+{
+	if(new&& getwindow(display, Refnone) < 0)
+		sysfatal("can't reattach to window");
+}
+
+void
+dopaste(void)
+{
+	int f;
+	if((f = open("/dev/snarf", OREAD)) >= 0) {
+		char body[30];
+		read(f, body, 30);
+		print("Paste: %s\n", body);
+		close(f);
+	}
+}
+
+void
+dosnarf(void)
+{
+	int f;
+	if((f = open("/dev/snarf", OWRITE)) >= 0) {
+		char* body = "some text";
+		write(f, body, strlen(body));
+		print("Snarf: %s\n", body);
+		close(f);
+	}
+}
+
+void
+main(int argc, char* argv[])
+{
+	// USED(argc, argv);
+
+	Event ev;
+	int e;
+
+	initdraw(0, 0, "Example: Menu");
+	eresized(0);
+	einit(Emouse);
+
+	/* Main event loop */
+	for(;;) {
+		e = event(&ev);
+		/* Middle Click */
+		if((e == Emouse) && (ev.mouse.buttons & 3)) {
+			if(emenuhit(2, &ev.mouse, &middlemenu) == 2)
+				dopaste();
+			if(emenuhit(2, &ev.mouse, &middlemenu) == 3)
+				dosnarf();
+			if(emenuhit(2, &ev.mouse, &middlemenu) == 4)
+				exits(nil);
+		}
+		/* Right Click */
+		else if((e == Emouse) && (ev.mouse.buttons & 4)) {
+			if(emenuhit(3, &ev.mouse, &rightmenu) == 2)
+				print("Pressed Option 3\n");
+			if(emenuhit(3, &ev.mouse, &rightmenu) == 3)
+				print("Pressed Option 4\n");
+			if(emenuhit(3, &ev.mouse, &rightmenu) == 4)
+				exits(nil);
+		}
+	}
+}
\ No newline at end of file