summaryrefslogtreecommitdiffstats
path: root/CategoriesPanel.c
diff options
context:
space:
mode:
Diffstat (limited to 'CategoriesPanel.c')
-rw-r--r--CategoriesPanel.c52
1 files changed, 29 insertions, 23 deletions
diff --git a/CategoriesPanel.c b/CategoriesPanel.c
index 89e93385..9d471217 100644
--- a/CategoriesPanel.c
+++ b/CategoriesPanel.c
@@ -64,37 +64,43 @@ HandlerResult CategoriesPanel_eventHandler(Panel* super, int ch) {
HandlerResult result = IGNORED;
- int previous = Panel_getSelectedIndex(super);
-
+ int selected = Panel_getSelectedIndex(super);
switch (ch) {
+ case EVENT_SETSELECTED:
+ result = HANDLED;
+ break;
case KEY_UP:
case KEY_DOWN:
case KEY_NPAGE:
case KEY_PPAGE:
case KEY_HOME:
case KEY_END: {
+ int previous = selected;
Panel_onKey(super, ch);
- int selected = Panel_getSelectedIndex(super);
- if (previous != selected) {
- int size = ScreenManager_size(this->scr);
- for (int i = 1; i < size; i++)
- ScreenManager_remove(this->scr, 1);
- switch (selected) {
- case 0:
- CategoriesPanel_makeMetersPage(this);
- break;
- case 1:
- CategoriesPanel_makeDisplayOptionsPage(this);
- break;
- case 2:
- CategoriesPanel_makeColorsPage(this);
- break;
- case 3:
- CategoriesPanel_makeColumnsPage(this);
- break;
- }
- }
- result = HANDLED;
+ selected = Panel_getSelectedIndex(super);
+ if (previous != selected)
+ result = HANDLED;
+ break;
+ }
+ }
+
+ if (result == HANDLED) {
+ int size = ScreenManager_size(this->scr);
+ for (int i = 1; i < size; i++)
+ ScreenManager_remove(this->scr, 1);
+ switch (selected) {
+ case 0:
+ CategoriesPanel_makeMetersPage(this);
+ break;
+ case 1:
+ CategoriesPanel_makeDisplayOptionsPage(this);
+ break;
+ case 2:
+ CategoriesPanel_makeColorsPage(this);
+ break;
+ case 3:
+ CategoriesPanel_makeColumnsPage(this);
+ break;
}
}