Commit Diff


commit - 522700c3d859c7ef1fc1e46c076c1d51e7b9d482
commit + e49ce157fae23fdb5dac3e093f743b85af2d952f
blob - 6dc5f5b56eb5202d22b9c7e460388325acec7501
blob + bdbb0df70436547074fb284a20ded7414f1f21bb
--- telescope.c
+++ telescope.c
@@ -25,7 +25,7 @@ static void		 die(void) __attribute__((__noreturn__));
 static struct tab	*tab_by_id(uint32_t);
 static void		 handle_imsg_err(struct imsg*, size_t);
 static void		 handle_imsg_check_cert(struct imsg*, size_t);
-static void		 handle_check_cert_user_choice(int, unsigned int);
+static void		 handle_check_cert_user_choice(int, void*);
 static void		 handle_imsg_got_code(struct imsg*, size_t);
 static void		 handle_imsg_got_meta(struct imsg*, size_t);
 static void		 handle_imsg_buf(struct imsg*, size_t);
@@ -128,13 +128,15 @@ handle_imsg_check_cert(struct imsg *imsg, size_t datal
 		tab->trust = TS_UNTRUSTED;
 		load_page_from_str(tab, "# Certificate mismatch\n");
 		ui_yornp("Certificate mismatch.  Proceed?",
-		    handle_check_cert_user_choice);
+		    handle_check_cert_user_choice, &tab->id);
 	}
 }
 
 static void
-handle_check_cert_user_choice(int accept, unsigned int tabid)
+handle_check_cert_user_choice(int accept, void *d)
 {
+	unsigned int tabid = *(unsigned int*)d;
+
 	imsg_compose(netibuf, IMSG_CERT_STATUS, tabid, 0, -1,
 	    &accept, sizeof(accept));
 	imsg_flush(netibuf);
blob - 6a359b37e8369f9d9c2dc88667d3f919637041b3
blob + 50a7cc2dee9be23766864d7cf244a65e06b7363f
--- telescope.h
+++ telescope.h
@@ -250,7 +250,7 @@ int		 ui_init(int, char * const*);
 void		 ui_on_tab_loaded(struct tab*);
 void		 ui_on_tab_refresh(struct tab*);
 void		 ui_require_input(struct tab*, int);
-void		 ui_yornp(const char*, void (*)(int, unsigned int));
+void		 ui_yornp(const char*, void (*)(int, void*), void*);
 void		 ui_notify(const char*, ...) __attribute__((format(printf, 1, 2)));
 void		 ui_end(void);
 
blob - 598ff494985258d1c5f9ce7d8176e29616492ac0
blob + 05ffdd75e9e4b6cd6c5c3808ca18c7f721fcc6b4
--- ui.c
+++ ui.c
@@ -168,7 +168,8 @@ static uint32_t		 tab_counter;
 
 static char	keybuf[64];
 
-static void (*yornp_cb)(int, unsigned int);
+static void (*yornp_cb)(int, void*);
+static void *yornp_data;
 
 struct kmap global_map,
 	minibuffer_map,
@@ -1141,14 +1142,16 @@ yornp_self_insert(void)
 		return;
 	}
 
-	yornp_cb(thiskey.key == 'y', current_tab()->id);
+	yornp_cb(thiskey.key == 'y', yornp_data);
+	yornp_data = NULL;
 	exit_minibuffer();
 }
 
 static void
 yornp_abort(void)
 {
-	yornp_cb(0, current_tab()->id);
+	yornp_cb(0, yornp_data);
+	yornp_data = NULL;
 	exit_minibuffer();
 }
 
@@ -2016,11 +2019,12 @@ ui_require_input(struct tab *tab, int hide)
 }
 
 void
-ui_yornp(const char *prompt, void (*fn)(int, unsigned int))
+ui_yornp(const char *prompt, void (*fn)(int, void*), void *data)
 {
 	size_t len;
 
 	yornp_cb = fn;
+	yornp_data = data;
 	enter_minibuffer(yornp_self_insert, yornp_self_insert,
 	    yornp_abort, NULL);