summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorNathan Scott <nathans@redhat.com>2020-12-22 15:25:08 +1100
committerNathan Scott <nathans@redhat.com>2020-12-22 15:25:08 +1100
commit737cd6167ace671e488af6af0f3ef011e899cdde (patch)
tree92ebe5d4fae3ffc575cc3a6cf0483f113f74550f
parent068561351f6267eb505b1d3a956358111c28a289 (diff)
parent3f9c63d5c02fc822c3fbdda3c2328c85cdbc1740 (diff)
Merge branch 'resize_bar' of https://github.com/cgzones/htop into cgzones-resize_bar
-rw-r--r--Action.c4
-rw-r--r--AffinityPanel.c1
-rw-r--r--AvailableMetersPanel.c1
-rw-r--r--ColorsPanel.c19
-rw-r--r--ColumnsPanel.c2
-rw-r--r--CommandScreen.c4
-rw-r--r--FunctionBar.c7
-rw-r--r--IncSet.c19
-rw-r--r--InfoScreen.c15
-rw-r--r--MainPanel.c19
-rw-r--r--MetersPanel.c9
-rw-r--r--Panel.c25
-rw-r--r--Panel.h27
-rw-r--r--ScreenManager.c32
-rw-r--r--TraceScreen.c6
15 files changed, 97 insertions, 93 deletions
diff --git a/Action.c b/Action.c
index 92191810..5accac2e 100644
--- a/Action.c
+++ b/Action.c
@@ -341,7 +341,7 @@ static Htop_Reaction actionKill(State* st) {
if (sgn) {
if (sgn->key != 0) {
Panel_setHeader(st->panel, "Sending...");
- Panel_draw(st->panel, true, true);
+ Panel_draw(st->panel, false, true, true);
refresh();
MainPanel_foreachProcess((MainPanel*)st->panel, Process_sendSignal, (Arg) { .i = sgn->key }, NULL);
napms(500);
@@ -372,7 +372,7 @@ static Htop_Reaction actionFilterByUser(State* st) {
Htop_Reaction Action_follow(State* st) {
st->pl->following = MainPanel_selectedPid((MainPanel*)st->panel);
- Panel_setSelectionColor(st->panel, CRT_colors[PANEL_SELECTION_FOLLOW]);
+ Panel_setSelectionColor(st->panel, PANEL_SELECTION_FOLLOW);
return HTOP_KEEP_FOLLOWING;
}
diff --git a/AffinityPanel.c b/AffinityPanel.c
index 314dcae3..a4d63616 100644
--- a/AffinityPanel.c
+++ b/AffinityPanel.c
@@ -173,7 +173,6 @@ static void AffinityPanel_update(AffinityPanel* this, bool keepSelected) {
Panel* super = (Panel*) this;
FunctionBar_setLabel(super->currentBar, KEY_F(3), this->topoView ? "Collapse/Expand" : "");
- FunctionBar_draw(super->currentBar);
int oldSelected = Panel_getSelectedIndex(super);
Panel_prune(super);
diff --git a/AvailableMetersPanel.c b/AvailableMetersPanel.c
index ce012557..7c82229b 100644
--- a/AvailableMetersPanel.c
+++ b/AvailableMetersPanel.c
@@ -35,7 +35,6 @@ static inline void AvailableMetersPanel_addMeter(Header* header, Panel* panel, c
Panel_add(panel, (Object*) Meter_toListItem(meter, false));
Panel_setSelected(panel, Panel_size(panel) - 1);
MetersPanel_setMoving((MetersPanel*)panel, true);
- FunctionBar_draw(panel->currentBar);
}
static HandlerResult AvailableMetersPanel_eventHandler(Panel* super, int ch) {
diff --git a/ColorsPanel.c b/ColorsPanel.c
index 2fb1c92f..c076adc0 100644
--- a/ColorsPanel.c
+++ b/ColorsPanel.c
@@ -60,26 +60,21 @@ static HandlerResult ColorsPanel_eventHandler(Panel* super, int ch) {
case KEY_MOUSE:
case KEY_RECLICK:
case ' ':
+ assert(mark >= 0);
+ assert(mark < LAST_COLORSCHEME);
for (int i = 0; ColorSchemeNames[i] != NULL; i++)
CheckItem_set((CheckItem*)Panel_get(super, i), false);
CheckItem_set((CheckItem*)Panel_get(super, mark), true);
this->settings->colorScheme = mark;
- result = HANDLED;
- }
-
- if (result == HANDLED) {
this->settings->changed = true;
- const Header* header = this->scr->header;
+
CRT_setColors(mark);
clear();
- Panel* menu = (Panel*) Vector_get(this->scr->panels, 0);
- Header_draw(header);
- FunctionBar_draw(super->currentBar);
- RichString_setAttr(&(super->header), CRT_colors[PANEL_HEADER_FOCUS]);
- RichString_setAttr(&(menu->header), CRT_colors[PANEL_HEADER_UNFOCUS]);
- ScreenManager_resize(this->scr, this->scr->x1, header->height, this->scr->x2, this->scr->y2);
+
+ result = HANDLED | REDRAW;
}
+
return result;
}
@@ -100,6 +95,8 @@ ColorsPanel* ColorsPanel_new(Settings* settings, ScreenManager* scr) {
this->settings = settings;
this->scr = scr;
+ assert(ARRAYSIZE(ColorSchemeNames) == LAST_COLORSCHEME + 1);
+
Panel_setHeader(super, "Colors");
for (int i = 0; ColorSchemeNames[i] != NULL; i++) {
Panel_add(super, (Object*) CheckItem_newByVal(ColorSchemeNames[i], false));
diff --git a/ColumnsPanel.c b/ColumnsPanel.c
index b2a82465..ea561663 100644
--- a/ColumnsPanel.c
+++ b/ColumnsPanel.c
@@ -44,7 +44,7 @@ static HandlerResult ColumnsPanel_eventHandler(Panel* super, int ch) {
{
if (selected < size - 1) {
this->moving = !(this->moving);
- Panel_setSelectionColor(super, this->moving ? CRT_colors[PANEL_SELECTION_FOLLOW] : CRT_colors[PANEL_SELECTION_FOCUS]);
+ Panel_setSelectionColor(super, this->moving ? PANEL_SELECTION_FOLLOW : PANEL_SELECTION_FOCUS);
ListItem* selectedItem = (ListItem*) Panel_getSelected(super);
if (selectedItem)
selectedItem->moving = this->moving;
diff --git a/CommandScreen.c b/CommandScreen.c
index d3428290..56b752d6 100644
--- a/CommandScreen.c
+++ b/CommandScreen.c
@@ -17,9 +17,10 @@ static void CommandScreen_scan(InfoScreen* this) {
Panel_prune(panel);
const char* p = Process_getCommand(this->process);
- char* line = xMalloc(COLS + 1);
+ char line[COLS + 1];
int line_offset = 0, last_spc = -1, len;
for (; *p != '\0'; p++, line_offset++) {
+ assert(line_offset >= 0 && (size_t)line_offset < sizeof(line));
line[line_offset] = *p;
if (*p == ' ') {
last_spc = line_offset;
@@ -41,7 +42,6 @@ static void CommandScreen_scan(InfoScreen* this) {
InfoScreen_addLine(this, line);
}
- free(line);
Panel_setSelected(panel, idx);
}
diff --git a/FunctionBar.c b/FunctionBar.c
index 627bc777..1c260ab7 100644
--- a/FunctionBar.c
+++ b/FunctionBar.c
@@ -112,10 +112,11 @@ void FunctionBar_drawExtra(const FunctionBar* this, const char* buffer, int attr
attrset(attr);
}
mvaddstr(LINES - 1, x, buffer);
- attrset(CRT_colors[RESET_COLOR]);
x += strlen(buffer);
}
+ attrset(CRT_colors[RESET_COLOR]);
+
if (setCursor) {
CRT_cursorX = x;
curs_set(1);
@@ -132,10 +133,10 @@ void FunctionBar_append(const char* buffer, int attr) {
} else {
attrset(attr);
}
- mvaddstr(LINES - 1, currentLen, buffer);
+ mvaddstr(LINES - 1, currentLen + 1, buffer);
attrset(CRT_colors[RESET_COLOR]);
- currentLen += strlen(buffer);
+ currentLen += strlen(buffer) + 1;
}
int FunctionBar_synthesizeEvent(const FunctionBar* this, int pos) {
diff --git a/IncSet.c b/IncSet.c
index 8cd850b3..af8e3aef 100644
--- a/IncSet.c
+++ b/IncSet.c
@@ -54,12 +54,13 @@ static inline void IncMode_done(IncMode* mode) {
}
IncSet* IncSet_new(FunctionBar* bar) {
- IncSet* this = xCalloc(1, sizeof(IncSet));
+ IncSet* this = xMalloc(sizeof(IncSet));
IncMode_initSearch(&(this->modes[INC_SEARCH]));
IncMode_initFilter(&(this->modes[INC_FILTER]));
this->active = NULL;
- this->filtering = false;
this->defaultBar = bar;
+ this->filtering = false;
+ this->found = false;
return this;
}
@@ -99,20 +100,14 @@ static void updateWeakPanel(IncSet* this, Panel* panel, Vector* lines) {
static bool search(IncMode* mode, Panel* panel, IncMode_GetPanelValue getPanelValue) {
int size = Panel_size(panel);
- bool found = false;
for (int i = 0; i < size; i++) {
if (String_contains_i(getPanelValue(panel, i), mode->buffer)) {
Panel_setSelected(panel, i);
- found = true;
- break;
+ return true;
}
}
- FunctionBar_drawExtra(mode->bar,
- mode->buffer,
- found ? -1 : CRT_colors[FAILED_SEARCH],
- true);
- return found;
+ return false;
}
static bool IncMode_find(IncMode* mode, Panel* panel, IncMode_GetPanelValue getPanelValue, int step) {
@@ -202,7 +197,6 @@ bool IncSet_handleKey(IncSet* this, int ch, Panel* panel, IncMode_GetPanelValue
}
this->active = NULL;
Panel_setDefaultBar(panel);
- FunctionBar_draw(this->defaultBar);
doSearch = false;
}
if (doSearch) {
@@ -221,13 +215,12 @@ const char* IncSet_getListItemValue(Panel* panel, int i) {
void IncSet_activate(IncSet* this, IncType type, Panel* panel) {
this->active = &(this->modes[type]);
- FunctionBar_drawExtra(this->active->bar, this->active->buffer, -1, true);
panel->currentBar = this->active->bar;
}
void IncSet_drawBar(const IncSet* this) {
if (this->active) {
- FunctionBar_drawExtra(this->active->bar, this->active->buffer, -1, true);
+ FunctionBar_drawExtra(this->active->bar, this->active->buffer, (this->active->isFilter || this->found) ? -1 : CRT_colors[FAILED_SEARCH], true);
} else {
FunctionBar_draw(this->defaultBar);
}
diff --git a/InfoScreen.c b/InfoScreen.c
index 515d64f0..79f123e9 100644
--- a/InfoScreen.c
+++ b/InfoScreen.c
@@ -44,8 +44,10 @@ void InfoScreen_drawTitled(InfoScreen* this, const char* fmt, ...) {
va_list ap;
va_start(ap, fmt);
- char* title = xMalloc(COLS + 1);
- int len = vsnprintf(title, COLS + 1, fmt, ap);
+ char title[COLS + 1];
+ int len = vsnprintf(title, sizeof(title), fmt, ap);
+ va_end(ap);
+
if (len > COLS) {
memset(&title[COLS - 3], '.', 3);
}
@@ -54,11 +56,9 @@ void InfoScreen_drawTitled(InfoScreen* this, const char* fmt, ...) {
mvhline(0, 0, ' ', COLS);
mvwprintw(stdscr, 0, 0, title);
attrset(CRT_colors[DEFAULT_COLOR]);
- this->display->needsRedraw = true;
- Panel_draw(this->display, true, true);
+ Panel_draw(this->display, true, true, true);
+
IncSet_drawBar(this->inc);
- free(title);
- va_end(ap);
}
void InfoScreen_addLine(InfoScreen* this, const char* line) {
@@ -89,7 +89,8 @@ void InfoScreen_run(InfoScreen* this) {
bool looping = true;
while (looping) {
- Panel_draw(panel, true, true);
+ Panel_draw(panel, false, true, true);
+ IncSet_drawBar(this->inc);
if (this->inc->active) {
(void) move(LINES - 1, CRT_cursorX);
diff --git a/MainPanel.c b/MainPanel.c
index 815609f6..949138dc 100644
--- a/MainPanel.c
+++ b/MainPanel.c
@@ -100,16 +100,12 @@ static HandlerResult MainPanel_eventHandler(Panel* super, int ch) {
if (reaction & HTOP_REDRAW_BAR) {
MainPanel_updateTreeFunctions(this, this->state->settings->treeView);
- IncSet_drawBar(this->inc);
- if (this->state->pauseProcessUpdate) {
- FunctionBar_append("PAUSED", CRT_colors[PAUSED]);
- }
}
if (reaction & HTOP_UPDATE_PANELHDR) {
ProcessList_printHeader(this->state->pl, Panel_getHeader(super));
}
if (reaction & HTOP_REFRESH) {
- result |= REDRAW;
+ result |= REFRESH;
}
if (reaction & HTOP_RECALCULATE) {
result |= RESCAN;
@@ -122,7 +118,7 @@ static HandlerResult MainPanel_eventHandler(Panel* super, int ch) {
}
if (!(reaction & HTOP_KEEP_FOLLOWING)) {
this->state->pl->following = -1;
- Panel_setSelectionColor(super, CRT_colors[PANEL_SELECTION_FOCUS]);
+ Panel_setSelectionColor(super, PANEL_SELECTION_FOCUS);
}
return result;
}
@@ -164,12 +160,21 @@ bool MainPanel_foreachProcess(MainPanel* this, MainPanel_ForeachProcessFn fn, Ar
return ok;
}
+static void MainPanel_drawFunctionBar(Panel* super) {
+ MainPanel* this = (MainPanel*) super;
+ IncSet_drawBar(this->inc);
+ if (this->state->pauseProcessUpdate) {
+ FunctionBar_append("PAUSED", CRT_colors[PAUSED]);
+ }
+}
+
const PanelClass MainPanel_class = {
.super = {
.extends = Class(Panel),
.delete = MainPanel_delete
},
- .eventHandler = MainPanel_eventHandler
+ .eventHandler = MainPanel_eventHandler,
+ .drawFunctionBar = MainPanel_drawFunctionBar
};
MainPanel* MainPanel_new() {
diff --git a/MetersPanel.c b/MetersPanel.c
index 7e20be0f..30991a0e 100644
--- a/MetersPanel.c
+++ b/MetersPanel.c
@@ -20,8 +20,8 @@ in the source distribution for its full text.
// Note: In code the meters are known to have bar/text/graph "Modes", but in UI
// we call them "Styles".
-static const char* const MetersFunctions[] = {"Style ", "Move ", " ", "Delete", "Done ", NULL};
-static const char* const MetersKeys[] = {"Space", "Enter", " ", "Del", "F10"};
+static const char* const MetersFunctions[] = {"Style ", "Move ", " ", "Delete", "Done ", NULL};
+static const char* const MetersKeys[] = {"Space", "Enter", "", "Del", "F10"};
static const int MetersEvents[] = {' ', 13, ERR, KEY_DC, KEY_F(10)};
// We avoid UTF-8 arrows ← → here as they might display full-width on Chinese
@@ -55,13 +55,12 @@ void MetersPanel_setMoving(MetersPanel* this, bool moving) {
selected->moving = moving;
}
if (!moving) {
- Panel_setSelectionColor(super, CRT_colors[PANEL_SELECTION_FOCUS]);
+ Panel_setSelectionColor(super, PANEL_SELECTION_FOCUS);
Panel_setDefaultBar(super);
} else {
- Panel_setSelectionColor(super, CRT_colors[PANEL_SELECTION_FOLLOW]);
+ Panel_setSelectionColor(super, PANEL_SELECTION_FOLLOW);
super->currentBar = Meters_movingBar;
}
- FunctionBar_draw(this->super.currentBar);
}
static inline bool moveToNeighbor(MetersPanel* this, MetersPanel* neighbor, int selected) {
diff --git a/Panel.c b/Panel.c
index 37b9c4ef..480a0125 100644
--- a/Panel.c
+++ b/Panel.c
@@ -56,10 +56,11 @@ void Panel_init(Panel* this, int x, int y, int w, int h, const ObjectClass* type
this->selected = 0;
this->oldSelected = 0;
this->needsRedraw = true;
+ this->wasFocus = false;
RichString_beginAllocated(this->header);
this->defaultBar = fuBar;
this->currentBar = fuBar;
- this->selectionColor = CRT_colors[PANEL_SELECTION_FOCUS];
+ this->selectionColorId = PANEL_SELECTION_FOCUS;
}
void Panel_done(Panel* this) {
@@ -70,8 +71,8 @@ void Panel_done(Panel* this) {
RichString_end(this->header);
}
-void Panel_setSelectionColor(Panel* this, int color) {
- this->selectionColor = color;
+void Panel_setSelectionColor(Panel* this, ColorElements colorId) {
+ this->selectionColorId = colorId;
}
RichString* Panel_getHeader(Panel* this) {
@@ -217,7 +218,7 @@ void Panel_splice(Panel* this, Vector* from) {
this->needsRedraw = true;
}
-void Panel_draw(Panel* this, bool focus, bool highlightSelected) {
+void Panel_draw(Panel* this, bool force_redraw, bool focus, bool highlightSelected) {
assert (this != NULL);
int size = Vector_size(this->items);
@@ -234,6 +235,7 @@ void Panel_draw(Panel* this, bool focus, bool highlightSelected) {
attrset(attr);
mvhline(y, x, ' ', this->w);
if (scrollH < headerLen) {
+ RichString_setAttr(&this->header, attr);
RichString_printoffnVal(this->header, y, x, scrollH,
MINIMUM(headerLen - scrollH, this->w));
}
@@ -262,10 +264,10 @@ void Panel_draw(Panel* this, bool focus, bool highlightSelected) {
int upTo = MINIMUM(first + h, size);
int selectionColor = focus
- ? this->selectionColor
+ ? CRT_colors[this->selectionColorId]
: CRT_colors[PANEL_SELECTION_UNFOCUS];
- if (this->needsRedraw) {
+ if (this->needsRedraw || force_redraw) {
int line = 0;
for (int i = first; line < h && i < upTo; i++) {
Object* itemObj = Vector_get(this->items, i);
@@ -293,7 +295,6 @@ void Panel_draw(Panel* this, bool focus, bool highlightSelected) {
mvhline(y + line, x, ' ', this->w);
line++;
}
- this->needsRedraw = false;
} else {
Object* oldObj = Vector_get(this->items, this->oldSelected);
@@ -319,7 +320,17 @@ void Panel_draw(Panel* this, bool focus, bool highlightSelected) {
RichString_end(new);
RichString_end(old);
}
+
+ if (focus && (this->needsRedraw || force_redraw || !this->wasFocus)) {
+ if (Panel_drawFunctionBarFn(this))
+ Panel_drawFunctionBar(this);
+ else
+ FunctionBar_draw(this->currentBar);
+ }
+
this->oldSelected = this->selected;
+ this->wasFocus = focus;
+ this->needsRedraw = false;
move(0, 0);
}
diff --git a/Panel.h b/Panel.h
index 86c134e0..959c0b78 100644
--- a/Panel.h
+++ b/Panel.h
@@ -9,6 +9,7 @@ in the source distribution for its full text.
#include <stdbool.h>
+#include "CRT.h"
#include "FunctionBar.h"
#include "Object.h"
#include "RichString.h"
@@ -22,9 +23,10 @@ typedef enum HandlerResult_ {
HANDLED = 0x01,
IGNORED = 0x02,
BREAK_LOOP = 0x04,
- REDRAW = 0x08,
- RESCAN = 0x10,
- SYNTH_KEY = 0x20,
+ REFRESH = 0x08,
+ REDRAW = 0x10,
+ RESCAN = 0x20,
+ SYNTH_KEY = 0x40,
} HandlerResult;
#define EVENT_SET_SELECTED (-1)
@@ -33,16 +35,20 @@ typedef enum HandlerResult_ {
#define EVENT_IS_HEADER_CLICK(ev_) ((ev_) >= -10000 && (ev_) <= -9000)
#define EVENT_HEADER_CLICK_GET_X(ev_) ((ev_) + 10000)
-typedef HandlerResult(*Panel_EventHandler)(Panel*, int);
+typedef HandlerResult (*Panel_EventHandler)(Panel*, int);
+typedef void (*Panel_DrawFunctionBar)(Panel*);
typedef struct PanelClass_ {
const ObjectClass super;
const Panel_EventHandler eventHandler;
+ const Panel_DrawFunctionBar drawFunctionBar;
} PanelClass;
-#define As_Panel(this_) ((const PanelClass*)((this_)->super.klass))
-#define Panel_eventHandlerFn(this_) As_Panel(this_)->eventHandler
-#define Panel_eventHandler(this_, ev_) As_Panel(this_)->eventHandler((Panel*)(this_), ev_)
+#define As_Panel(this_) ((const PanelClass*)((this_)->super.klass))
+#define Panel_eventHandlerFn(this_) As_Panel(this_)->eventHandler
+#define Panel_eventHandler(this_, ev_) (assert(As_Panel(this_)->eventHandler), As_Panel(this_)->eventHandler((Panel*)(this_), ev_))
+#define Panel_drawFunctionBarFn(this_) As_Panel(this_)->drawFunctionBar
+#define Panel_drawFunctionBar(this_) (assert(As_Panel(this_)->drawFunctionBar), As_Panel(this_)->drawFunctionBar((Panel*)(this_)))
struct Panel_ {
Object super;
@@ -55,10 +61,11 @@ struct Panel_ {
int scrollV;
short scrollH;
bool needsRedraw;
+ bool wasFocus;
FunctionBar* currentBar;
FunctionBar* defaultBar;
RichString header;
- int selectionColor;
+ ColorElements selectionColorId;
};
#define Panel_setDefaultBar(this_) do { (this_)->currentBar = (this_)->defaultBar; } while (0)
@@ -75,7 +82,7 @@ void Panel_init(Panel* this, int x, int y, int w, int h, const ObjectClass* type
void Panel_done(Panel* this);
-void Panel_setSelectionColor(Panel* this, int color);
+void Panel_setSelectionColor(Panel* this, ColorElements colorId);
RichString* Panel_getHeader(Panel* this);
@@ -109,7 +116,7 @@ int Panel_size(Panel* this);
void Panel_setSelected(Panel* this, int selected);
-void Panel_draw(Panel* this, bool focus, bool highlightSelected);
+void Panel_draw(Panel* this, bool force_redraw, bool focus, bool highlightSelected);
void Panel_splice(Panel* this, Vector* from);
diff --git a/ScreenManager.c b/ScreenManager.c
index 94904b5f..57cb564d 100644
--- a/ScreenManager.c
+++ b/ScreenManager.c
@@ -119,29 +119,20 @@ static void checkRecalculation(ScreenManager* this, double* oldTime, int* sortTi
*rescan = false;
}
-static void ScreenManager_drawPanels(ScreenManager* this, int focus) {
+static void ScreenManager_drawPanels(ScreenManager* this, int focus, bool force_redraw) {
const int nPanels = this->panelCount;
for (int i = 0; i < nPanels; i++) {
Panel* panel = (Panel*) Vector_get(this->panels, i);
- Panel_draw(panel, i == focus, !((panel == this->state->panel) && this->state->hideProcessSelection));
+ Panel_draw(panel, force_redraw, i == focus, !((panel == this->state->panel) && this->state->hideProcessSelection));
mvvline(panel->y, panel->x + panel->w, ' ', panel->h + 1);
}
}
-static Panel* setCurrentPanel(const ScreenManager* this, Panel* panel) {
- FunctionBar_draw(panel->currentBar);
- if (panel == this->state->panel && this->state->pauseProcessUpdate) {
- FunctionBar_append("PAUSED", CRT_colors[PAUSED]);
- }
-
- return panel;
-}
-
void ScreenManager_run(ScreenManager* this, Panel** lastFocus, int* lastKey) {
bool quit = false;
int focus = 0;
- Panel* panelFocus = setCurrentPanel(this, (Panel*) Vector_get(this->panels, focus));
+ Panel* panelFocus = (Panel*) Vector_get(this->panels, focus);
double oldTime = 0.0;
@@ -150,6 +141,7 @@ void ScreenManager_run(ScreenManager* this, Panel** lastFocus, int* lastKey) {
bool timedOut = true;
bool redraw = true;
+ bool force_redraw = false;
bool rescan = false;
int sortTimeout = 0;
int resetSortTimeout = 5;
@@ -159,8 +151,9 @@ void ScreenManager_run(ScreenManager* this, Panel** lastFocus, int* lastKey) {
checkRecalculation(this, &oldTime, &sortTimeout, &redraw, &rescan, &timedOut);
}
- if (redraw) {
- ScreenManager_drawPanels(this, focus);
+ if (redraw || force_redraw) {
+ ScreenManager_drawPanels(this, focus, force_redraw);
+ force_redraw = false;
}
int prevCh = ch;
@@ -187,7 +180,7 @@ void ScreenManager_run(ScreenManager* this, Panel** lastFocus, int* lastKey) {
ch = KEY_MOUSE;
if (panel == panelFocus || this->allowFocusChange) {
focus = i;
- panelFocus = setCurrentPanel(this, panel);
+ panelFocus = panel;
Object* oldSelection = Panel_getSelected(panel);
Panel_setSelected(panel, mevent.y - panel->y + panel->scrollV - 1);
if (Panel_getSelected(panel) == oldSelection) {
@@ -234,9 +227,12 @@ void ScreenManager_run(ScreenManager* this, Panel** lastFocus, int* lastKey) {
if (result & SYNTH_KEY) {
ch = result >> 16;
}
- if (result & REDRAW) {
+ if (result & REFRESH) {
sortTimeout = 0;
}
+ if (result & REDRAW) {
+ force_redraw = true;
+ }
if (result & RESCAN) {
rescan = true;
sortTimeout = 0;
@@ -269,7 +265,7 @@ tryLeft:
focus--;
}
- panelFocus = setCurrentPanel(this, (Panel*) Vector_get(this->panels, focus));
+ panelFocus = (Panel*) Vector_get(this->panels, focus);
if (Panel_size(panelFocus) == 0 && focus > 0) {
goto tryLeft;
}
@@ -290,7 +286,7 @@ tryRight:
focus++;
}
- panelFocus = setCurrentPanel(this, (Panel*) Vector_get(this->panels, focus));
+ panelFocus = (Panel*) Vector_get(this->panels, focus);
if (Panel_size(panelFocus) == 0 && focus < this->panelCount - 1) {
goto tryRight;
}
diff --git a/TraceScreen.c b/TraceScreen.c
index e6bd1fb1..e04f4f8a 100644
--- a/TraceScreen.c
+++ b/TraceScreen.c
@@ -71,11 +71,7 @@ void TraceScreen_delete(Object* cast) {
}
void TraceScreen_draw(InfoScreen* this) {
- attrset(CRT_colors[PANEL_HEADER_FOCUS]);
- mvhline(0, 0, ' ', COLS);
- mvprintw(0, 0, "Trace of process %d - %s", this->process->pid, Process_getCommand(this->process));
- attrset(CRT_colors[DEFAULT_COLOR]);
- IncSet_drawBar(this->inc);
+ InfoScreen_drawTitled(this, "Trace of process %d - %s", this->process->pid, Process_getCommand(this->process));
}
bool TraceScreen_forkTracer(TraceScreen* this) {

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