Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 15 Nov 2012 23:05:00 GMT
From:      Brooks Davis <brooks@FreeBSD.org>
To:        Perforce Change Reviews <perforce@freebsd.org>
Subject:   PERFORCE change 219801 for review
Message-ID:  <201211152305.qAFN50SA079903@skunkworks.freebsd.org>

next in thread | raw e-mail | index | archive | help
http://p4web.freebsd.org/@@219801?ac=10

Change 219801 by brooks@brooks_zenith on 2012/11/15 23:04:08

	Address a couple low-hanging UI nits reported by rwatson:
	 * put black box around the configuration dialog.
	 * Allow swiping to the next or previous slide from the
	   Exploit Mitigated dialog.  This is something of a hack.

Affected files ...

.. //depot/projects/ctsrd/cheribsd/src/ctsrd/cheripoint/cheripoint.c#8 edit

Differences ...

==== //depot/projects/ctsrd/cheribsd/src/ctsrd/cheripoint/cheripoint.c#8 (text+ko) ====

@@ -266,6 +266,10 @@
 	    textbuf, f_width * CD_RES_COLS, f_height);
 
 	fb_post_region(dbuf, d_x, d_y, d_width, d_height);
+	/* XXX: should composite into a somewhat larger buffer */
+	fb_rectangle(black, CD_BORDER_WIDTH,
+	    d_x - CD_BORDER_WIDTH, d_y - CD_BORDER_WIDTH,
+	    d_width + (CD_BORDER_WIDTH * 2), d_height + (CD_BORDER_WIDTH * 2));
 
 	for(;;) {
 		ts = ts_poll();
@@ -413,15 +417,17 @@
 static int
 render_slide(int dfd, int slidenum, const char *slide)
 {
-	int pfd;
+	int error, pfd;
 	int f_width, f_height;
 	uint sv1, sv2;
 	size_t olen;
 	char sntext[8];
-	uint32_t *snimage, *save;
+	uint32_t *snimage;
 	uint32_t r, header_height;
 	struct iboxstate *is;
 
+	error = 0;
+
 	printf("rendering slide %s\n", slide);
 
 	fb_fill_region(white, 0, 0, fb_width, fb_height);
@@ -524,37 +530,15 @@
 		    is->height < slide_height ? is->height : slide_height);
 	switch (sb) {
 	case SB_CAPSICUM:
-		if (is->error == 99)  {
-			save = malloc(sizeof(uint32_t) * fb_width * fb_height);
-			if (save != NULL)
-				fb_save(save);
-			fb_dialog(FBDT_PINCH2CLOSE, black, white, black,
-			    "Exploit Mitigated",
-			    "Capsicum prevented an exploit\n"
-			    "from gaining control!");
-			if (save != NULL) {
-				fb_post(save);
-				free(save);
-			}
-		}
+		if (is->error == 99)
+			error = 99;
 		break;
 	case SB_CHERI:
 		olen = sizeof(sv2);
 		sysctlbyname("security.cheri.syscall_violations",
 		    &sv2, &olen, NULL, 0);
-		if (sv1 != sv2) {
-			save = malloc(sizeof(uint32_t) * fb_width * fb_height);
-			if (save != NULL)
-				fb_save(save);
-			fb_dialog(FBDT_PINCH2CLOSE, black, white, black,
-			    "Exploit Mitigated",
-			    "CHERI prevented an exploit\n"
-			    "from gaining control!");
-			if (save != NULL) {
-				fb_post(save);
-				free(save);
-			}
-		}
+		if (sv1 != sv2)
+			error = 99;
 		break;
 	default:
 		break;
@@ -578,7 +562,7 @@
 			free(snimage);
 	}
 
-	return (0);
+	return (error);
 }
 
 static void
@@ -727,11 +711,12 @@
 	struct dirent *entry;
 	char *coverpat;
 	char **covers, **slides;
-	int error;
+	uint32_t *save;
+	int error, gesture;
 	int ch, forkflag = 0;
 	int cover, ncovers, maxcovers;
 	int slide, nslides, maxslides;
-	struct tsstate *ts;
+	struct tsstate *ts, tshack = {0, 0, 0, 0, 0, 0,};
 
 	while ((ch = getopt(argc, argv, "f")) != -1) {
 		switch (ch) {
@@ -792,6 +777,7 @@
 	
 	slide = *slidep;
 	for (;;) {
+		gesture = 0;
 		if (slide == 0) {
 			asprintf(&coverpat, "*-cover-%d.png", slide_width);
 			for (cover = 0; cover < ncovers; cover++)
@@ -801,12 +787,55 @@
 			if (cover == ncovers)
 				cover = 0;	/* Smallest cover due to sort */
 			render_cover(dirfd(dirp), covers[cover]);
-		} else
-			render_slide(dirfd(dirp), slide, slides[slide - 1]);
-		*slidep = slide; /* Update post success */
+			*slidep = slide; /* Update post success */
+		} else {
+			error = render_slide(dirfd(dirp), slide,
+			    slides[slide - 1]);
+			if (error == 0)
+				*slidep = slide; /* Update post success */
+			else if (error == 99) {
+				save = malloc(sizeof(uint32_t) * fb_width *
+				    fb_height);
+				if (save != NULL)
+					fb_save(save);
+				switch (sb) {
+				case SB_CAPSICUM:
+					gesture = fb_dialog_gestures(
+					    TSGF_ZOOM_OUT |
+					    TSGF_EAST | TSGF_WEST,
+					    black, white, black,
+					    "Exploit Mitigated",
+					    "Capsicum prevented an exploit\n"
+					    "from gaining control!");
+					break;
+				case SB_CHERI:
+					gesture = fb_dialog_gestures(
+					    TSGF_ZOOM_OUT |
+					    TSGF_EAST | TSGF_WEST,
+					    black, white, black,
+					    "Exploit Mitigated",
+					    "CHERI prevented an exploit\n"
+					    "from gaining control!");
+					break;
+				default:
+					break;
+				}
+				if (gesture == TSGF_ZOOM_OUT)
+					gesture = 0;
+				if (save != NULL) {
+					fb_post(save);
+					free(save);
+				}
+			}
+		}
 		ts_drain();
 nop:
-		ts = ts_poll();
+		if (gesture != 0) {
+			tshack.ts_gesture = tsgf2tsg(gesture);
+			ts = &tshack;
+			gesture = 0;
+		} else
+			ts = ts_poll();
 #ifdef DEBUG
 		printf("gesture 0x%x\n", ts->ts_gesture);
 #endif



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201211152305.qAFN50SA079903>