summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChristian Göttsche <cgzones@googlemail.com>2020-12-22 17:12:38 +0100
committercgzones <cgzones@googlemail.com>2020-12-23 12:47:04 +0100
commit86d293125565a15bbd94683080dbc755c5d7edee (patch)
treeb0a2f530cc5f633bebdf22124d8ce2d91ecf765b
parent0672be7db1ed50fceff0619e1411b510aa11f0f7 (diff)
Restore highlighted header of current sorted process column
-rw-r--r--MainPanel.c10
-rw-r--r--Panel.c22
-rw-r--r--Panel.h6
-rw-r--r--ScreenManager.c2
-rw-r--r--htop.c2
5 files changed, 23 insertions, 19 deletions
diff --git a/MainPanel.c b/MainPanel.c
index 949138dc..c8a4c059 100644
--- a/MainPanel.c
+++ b/MainPanel.c
@@ -102,7 +102,7 @@ static HandlerResult MainPanel_eventHandler(Panel* super, int ch) {
MainPanel_updateTreeFunctions(this, this->state->settings->treeView);
}
if (reaction & HTOP_UPDATE_PANELHDR) {
- ProcessList_printHeader(this->state->pl, Panel_getHeader(super));
+ result |= REDRAW;
}
if (reaction & HTOP_REFRESH) {
result |= REFRESH;
@@ -168,13 +168,19 @@ static void MainPanel_drawFunctionBar(Panel* super) {
}
}
+static void MainPanel_printHeader(Panel* super) {
+ MainPanel* this = (MainPanel*) super;
+ ProcessList_printHeader(this->state->pl, &super->header);
+}
+
const PanelClass MainPanel_class = {
.super = {
.extends = Class(Panel),
.delete = MainPanel_delete
},
.eventHandler = MainPanel_eventHandler,
- .drawFunctionBar = MainPanel_drawFunctionBar
+ .drawFunctionBar = MainPanel_drawFunctionBar,
+ .printHeader = MainPanel_printHeader
};
MainPanel* MainPanel_new() {
diff --git a/Panel.c b/Panel.c
index b36f1efc..26a0c0ec 100644
--- a/Panel.c
+++ b/Panel.c
@@ -76,13 +76,6 @@ void Panel_setSelectionColor(Panel* this, ColorElements colorId) {
this->selectionColorId = colorId;
}
-RichString* Panel_getHeader(Panel* this) {
- assert (this != NULL);
-
- this->needsRedraw = true;
- return &(this->header);
-}
-
inline void Panel_setHeader(Panel* this, const char* header) {
RichString_writeWide(&(this->header), CRT_colors[PANEL_HEADER_FOCUS], header);
this->needsRedraw = true;
@@ -228,15 +221,20 @@ void Panel_draw(Panel* this, bool force_redraw, bool focus, bool highlightSelect
int x = this->x;
int h = this->h;
+ const int header_attr = focus
+ ? CRT_colors[PANEL_HEADER_FOCUS]
+ : CRT_colors[PANEL_HEADER_UNFOCUS];
+ if (force_redraw) {
+ if (Panel_printHeaderFn(this))
+ Panel_printHeader(this);
+ else
+ RichString_setAttr(&this->header, header_attr);
+ }
int headerLen = RichString_sizeVal(this->header);
if (headerLen > 0) {
- int attr = focus
- ? CRT_colors[PANEL_HEADER_FOCUS]
- : CRT_colors[PANEL_HEADER_UNFOCUS];
- attrset(attr);
+ attrset(header_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));
}
diff --git a/Panel.h b/Panel.h
index 959c0b78..63659e3c 100644
--- a/Panel.h
+++ b/Panel.h
@@ -37,11 +37,13 @@ typedef enum HandlerResult_ {
typedef HandlerResult (*Panel_EventHandler)(Panel*, int);
typedef void (*Panel_DrawFunctionBar)(Panel*);
+typedef void (*Panel_PrintHeader)(Panel*);
typedef struct PanelClass_ {
const ObjectClass super;
const Panel_EventHandler eventHandler;
const Panel_DrawFunctionBar drawFunctionBar;
+ const Panel_PrintHeader printHeader;
} PanelClass;
#define As_Panel(this_) ((const PanelClass*)((this_)->super.klass))
@@ -49,6 +51,8 @@ typedef struct PanelClass_ {
#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_)))
+#define Panel_printHeaderFn(this_) As_Panel(this_)->printHeader
+#define Panel_printHeader(this_) (assert(As_Panel(this_)->printHeader), As_Panel(this_)->printHeader((Panel*)(this_)))
struct Panel_ {
Object super;
@@ -84,8 +88,6 @@ void Panel_done(Panel* this);
void Panel_setSelectionColor(Panel* this, ColorElements colorId);
-RichString* Panel_getHeader(Panel* this);
-
void Panel_setHeader(Panel* this, const char* header);
void Panel_move(Panel* this, int x, int y);
diff --git a/ScreenManager.c b/ScreenManager.c
index 57cb564d..4c74e477 100644
--- a/ScreenManager.c
+++ b/ScreenManager.c
@@ -141,7 +141,7 @@ void ScreenManager_run(ScreenManager* this, Panel** lastFocus, int* lastKey) {
bool timedOut = true;
bool redraw = true;
- bool force_redraw = false;
+ bool force_redraw = true;
bool rescan = false;
int sortTimeout = 0;
int resetSortTimeout = 5;
diff --git a/htop.c b/htop.c
index 4b43ed2a..aa6d9147 100644
--- a/htop.c
+++ b/htop.c
@@ -313,8 +313,6 @@ int main(int argc, char** argv) {
MainPanel_updateTreeFunctions(panel, settings->treeView);
- ProcessList_printHeader(pl, Panel_getHeader((Panel*)panel));
-
State state = {
.settings = settings,
.ut = ut,

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