commit:     2750c23c9e168f7e2d53f75405d5f8d0f1f7a7bc
Author:     Lars Wendler <polynomial-c <AT> gentoo <DOT> org>
AuthorDate: Sun Dec 27 23:44:42 2020 +0000
Commit:     Lars Wendler <polynomial-c <AT> gentoo <DOT> org>
CommitDate: Sun Dec 27 23:45:17 2020 +0000
URL:        https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=2750c23c

sys-process/htop: Revbump to fix column header sort highlight

Package-Manager: Portage-3.0.12, Repoman-3.0.2
Signed-off-by: Lars Wendler <polynomial-c <AT> gentoo.org>

 .../htop-3.0.4-sort_column_header_highlight.patch  | 153 +++++++++++++++++++++
 .../{htop-3.0.4.ebuild => htop-3.0.4-r1.ebuild}    |   4 +
 2 files changed, 157 insertions(+)

diff --git 
a/sys-process/htop/files/htop-3.0.4-sort_column_header_highlight.patch 
b/sys-process/htop/files/htop-3.0.4-sort_column_header_highlight.patch
new file mode 100644
index 00000000000..a2b6a0d4259
--- /dev/null
+++ b/sys-process/htop/files/htop-3.0.4-sort_column_header_highlight.patch
@@ -0,0 +1,153 @@
+From 86d293125565a15bbd94683080dbc755c5d7edee Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Christian=20G=C3=B6ttsche?= <[email protected]>
+Date: Tue, 22 Dec 2020 17:12:38 +0100
+Subject: [PATCH] Restore highlighted header of current sorted process column
+
+---
+ MainPanel.c     | 10 ++++++++--
+ Panel.c         | 22 ++++++++++------------
+ Panel.h         |  6 ++++--
+ ScreenManager.c |  2 +-
+ htop.c          |  2 --
+ 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,

diff --git a/sys-process/htop/htop-3.0.4.ebuild 
b/sys-process/htop/htop-3.0.4-r1.ebuild
similarity index 95%
rename from sys-process/htop/htop-3.0.4.ebuild
rename to sys-process/htop/htop-3.0.4-r1.ebuild
index 1e6c67cacd0..8b37c2d31a5 100644
--- a/sys-process/htop/htop-3.0.4.ebuild
+++ b/sys-process/htop/htop-3.0.4-r1.ebuild
@@ -29,6 +29,10 @@ CONFIG_CHECK="~TASKSTATS ~TASK_XACCT ~TASK_IO_ACCOUNTING 
~CGROUPS"
 
 S="${WORKDIR}/${P/_}"
 
+PATCHES=(
+       "${FILESDIR}/${P}-sort_column_header_highlight.patch"
+)
+
 pkg_setup() {
        if ! has_version sys-process/lsof; then
                ewarn "To use lsof features in htop (what processes are 
accessing"

Reply via email to