about summary refs log tree commit diff
path: root/menu.c
diff options
context:
space:
mode:
authorokan <okan>2012-10-23 15:32:38 +0000
committerokan <okan>2012-10-23 15:32:38 +0000
commitc21d56e5a1c98eacb70f3197311232731ccf1a6f (patch)
tree40025d040515645f31e3d9f417b169b085bd9e38 /menu.c
parent871fdf56715dbc85b2ad4f058366a06a66615c65 (diff)
downloadcwm-c21d56e5a1c98eacb70f3197311232731ccf1a6f.tar.gz
cwm-c21d56e5a1c98eacb70f3197311232731ccf1a6f.tar.xz
cwm-c21d56e5a1c98eacb70f3197311232731ccf1a6f.zip
Stop drawing when menu doesn't fit inside the screen; picked from a
larger diff from Alexander Polakov.
Diffstat (limited to 'menu.c')
-rw-r--r--menu.c7
1 files changed, 6 insertions, 1 deletions
diff --git a/menu.c b/menu.c
index 29008e6..4090921 100644
--- a/menu.c
+++ b/menu.c
@@ -387,9 +387,14 @@ menu_draw(struct screen_ctx *sc, struct menu_ctx *mc, struct menu_q *menuq,
 	TAILQ_FOREACH(mi, resultq, resultentry) {
 		char *text = mi->print[0] != '\0' ?
 		    mi->print : mi->text;
+		int y = n * font_height(sc) + font_ascent(sc) + 1;
+
+		/* Stop drawing when menu doesn't fit inside the screen. */
+		if (mc->y + y > ymax)
+			break;
 
 		font_draw(sc, text, MIN(strlen(text), MENU_MAXENTRY),
-		    sc->menuwin, 0, n * font_height(sc) + font_ascent(sc) + 1);
+		    sc->menuwin, 0, y);
 		n++;
 	}