diff options
-rw-r--r-- | CategoriesPanel.c | 2 | ||||
-rw-r--r-- | ChangeLog | 4 | ||||
-rw-r--r-- | Panel.c | 8 | ||||
-rw-r--r-- | Panel.h | 4 | ||||
-rw-r--r-- | ScreenManager.c | 2 |
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: @@ -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 @@ -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; @@ -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) |