console/libgnt/gnttree.c

changeset 14277
feec61ac5bae
parent 14270
710ef4096bac
child 14278
9e2a97a4542e
--- a/console/libgnt/gnttree.c	Sun Aug 20 02:13:05 2006 +0000
+++ b/console/libgnt/gnttree.c	Sun Aug 20 02:24:15 2006 +0000
@@ -2,6 +2,7 @@
 #include "gntmarshal.h"
 
 #include <string.h>
+#include <ctype.h>
 
 enum
 {
@@ -468,10 +469,10 @@
 	GntTree *tree = GNT_TREE(widget);
 	GntTreeRow *old = tree->current;
 	GntTreeRow *row;
+	int dist;
 
 	if (text[0] == 27)
 	{
-		int dist;
 		if (strcmp(text+1, GNT_KEY_DOWN) == 0 && (row = get_next(tree->current)) != NULL)
 		{
 			tree->current = row;
@@ -490,9 +491,29 @@
 				redraw_tree(tree);
 		}
 	}
-	else if (text[0] == '\r')
+	else if (iscntrl(text[0]))
 	{
-		gnt_widget_activate(widget);
+		if (strcmp(text, GNT_KEY_CTRL_N) == 0 && (row = get_next(tree->current)) != NULL)
+		{
+			tree->current = row;
+			if ((dist = get_distance(tree->current, tree->bottom)) < 0)
+				gnt_tree_scroll(tree, -dist);
+			else
+				redraw_tree(tree);
+		}
+		else if (strcmp(text, GNT_KEY_CTRL_P) == 0 && (row = get_prev(tree->current)) != NULL)
+		{
+			tree->current = row;
+
+			if ((dist = get_distance(tree->current, tree->top)) > 0)
+				gnt_tree_scroll(tree, -dist);
+			else
+				redraw_tree(tree);
+		}
+		else if (text[0] == '\r')
+		{
+			gnt_widget_activate(widget);
+		}
 	}
 	else if (text[0] == ' ' && text[1] == 0)
 	{

mercurial