Htop_Reaction Action_follow(State* st) { st->pl->following = MainPanel_selectedPid((MainPanel*)st->panel); Panel_setSelectionColor(st->panel, CRT_colors[PANEL_SELECTION_FOLLOW]); return HTOP_KEEP_FOLLOWING; }
static HandlerResult ColumnsPanel_eventHandler(Panel* super, int ch) { ColumnsPanel* const this = (ColumnsPanel*) super; int selected = Panel_getSelectedIndex(super); HandlerResult result = IGNORED; int size = Panel_size(super); switch(ch) { case 0x0a: case 0x0d: case KEY_ENTER: case KEY_MOUSE: case KEY_RECLICK: { if (selected < size - 1) { this->moving = !(this->moving); Panel_setSelectionColor(super, this->moving ? CRT_colors[PANEL_SELECTION_FOLLOW] : CRT_colors[PANEL_SELECTION_FOCUS]); ((ListItem*)Panel_getSelected(super))->moving = this->moving; result = HANDLED; } break; } case KEY_UP: { if (!this->moving) { break; } } /* else fallthrough */ case KEY_F(7): case '[': case '-': { if (selected < size - 1) Panel_moveSelectedUp(super); result = HANDLED; break; } case KEY_DOWN: { if (!this->moving) { break; } } /* else fallthrough */ case KEY_F(8): case ']': case '+': { if (selected < size - 2) Panel_moveSelectedDown(super); result = HANDLED; break; } case KEY_F(9): case KEY_DC: { if (selected < size - 1) { Panel_remove(super, selected); } result = HANDLED; break; } default: { if (ch < 255 && isalpha(ch)) result = Panel_selectByTyping(super, ch); if (result == BREAK_LOOP) result = IGNORED; break; } } if (result == HANDLED) ColumnsPanel_update(super); return result; }