summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHisham Muhammad <hisham@gobolinux.org>2010-03-03 21:13:33 +0000
committerHisham Muhammad <hisham@gobolinux.org>2010-03-03 21:13:33 +0000
commitb4a63409f54b9c324d1baf0f153fe615a21502aa (patch)
treea017ffab35707ff1335db6a6efba4017fba00dbd
parent282f16c4b8df9fb5bac6c7952afe5b49c1b4dd11 (diff)
* Add Bash/emacs style navigation keys
(thanks to Daniel Schuler)
-rw-r--r--CategoriesPanel.c2
-rw-r--r--ChangeLog4
-rw-r--r--Panel.c8
-rw-r--r--Panel.h4
-rw-r--r--ScreenManager.c2
5 files changed, 20 insertions, 0 deletions
diff --git a/CategoriesPanel.c b/CategoriesPanel.c
index 24316f39..b3cb3aa9 100644
--- a/CategoriesPanel.c
+++ b/CategoriesPanel.c
@@ -79,7 +79,9 @@ static HandlerResult CategoriesPanel_eventHandler(Panel* super, int ch) {
result = HANDLED;
break;
case KEY_UP:
+ case KEY_CTRLP:
case KEY_DOWN:
+ case KEY_CTRLN:
case KEY_NPAGE:
case KEY_PPAGE:
case KEY_HOME:
diff --git a/ChangeLog b/ChangeLog
index af148520..52b06b40 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -7,6 +7,10 @@ What's new in version 0.8.4
(thanks to Tom Callaway)
* getopt-based long options and --no-color
(thanks to Vincent Launchbury)
+* BUGFIX: Fix memory leak
+ (thanks to Pavol Rusnak)
+* Add Bash/emacs style navigation keys
+ (thanks to Daniel Schuler)
What's new in version 0.8.3
diff --git a/Panel.c b/Panel.c
index 438cf614..f4f286e5 100644
--- a/Panel.c
+++ b/Panel.c
@@ -64,6 +64,10 @@ char* PANEL_CLASS = "Panel";
#define PANEL_CLASS NULL
#endif
+#define KEY_CTRLN 0016 /* control-n key */
+#define KEY_CTRLP 0020 /* control-p key */
+#define KEY_CTRLF 0006 /* control-f key */
+#define KEY_CTRLB 0002 /* control-b key */
Panel* Panel_new(int x, int y, int w, int h, char* type, bool owner, Object_Compare compare) {
Panel* this;
@@ -330,10 +334,12 @@ bool Panel_onKey(Panel* this, int key) {
assert (this != NULL);
switch (key) {
case KEY_DOWN:
+ case KEY_CTRLN:
if (this->selected + 1 < Vector_size(this->items))
this->selected++;
return true;
case KEY_UP:
+ case KEY_CTRLP:
if (this->selected > 0)
this->selected--;
return true;
@@ -360,12 +366,14 @@ bool Panel_onKey(Panel* this, int key) {
return true;
#endif
case KEY_LEFT:
+ case KEY_CTRLB:
if (this->scrollH > 0) {
this->scrollH -= 5;
this->needsRedraw = true;
}
return true;
case KEY_RIGHT:
+ case KEY_CTRLF:
this->scrollH += 5;
this->needsRedraw = true;
return true;
diff --git a/Panel.h b/Panel.h
index 9af9ace9..66723251 100644
--- a/Panel.h
+++ b/Panel.h
@@ -65,6 +65,10 @@ extern char* PANEL_CLASS;
#define PANEL_CLASS NULL
#endif
+#define KEY_CTRLN 0016 /* control-n key */
+#define KEY_CTRLP 0020 /* control-p key */
+#define KEY_CTRLF 0006 /* control-f key */
+#define KEY_CTRLB 0002 /* control-b key */
Panel* Panel_new(int x, int y, int w, int h, char* type, bool owner, Object_Compare compare);
diff --git a/ScreenManager.c b/ScreenManager.c
index 2c6180d1..2be94f6c 100644
--- a/ScreenManager.c
+++ b/ScreenManager.c
@@ -184,6 +184,7 @@ void ScreenManager_run(ScreenManager* this, Panel** lastFocus, int* lastKey) {
continue;
}
case KEY_LEFT:
+ case KEY_CTRLB:
tryLeft:
if (focus > 0)
focus--;
@@ -192,6 +193,7 @@ void ScreenManager_run(ScreenManager* this, Panel** lastFocus, int* lastKey) {
goto tryLeft;
break;
case KEY_RIGHT:
+ case KEY_CTRLF:
case 9:
tryRight:
if (focus < this->itemCount - 1)

© 2014-2024 Faster IT GmbH | imprint | privacy policy