From 42876619ec9a1c45be4411a38654f24f7d38bd56 Mon Sep 17 00:00:00 2001 From: Michael Vetter Date: Wed, 19 Jun 2024 11:15:17 +0200 Subject: [PATCH 1/3] Make statusbar actlist respect the /statusbar show setting This lets users use the actlist and decide if they want to see name or numbers. The old behaviour can be achieved with: ``` /statusbar hide read /statusbar hide name /statusbar show number /statusbar tabmode actlist ``` Fix https://github.com/profanity-im/profanity/issues/1974 --- src/ui/statusbar.c | 25 ++++++++++++------------- 1 file changed, 12 insertions(+), 13 deletions(-) diff --git a/src/ui/statusbar.c b/src/ui/statusbar.c index 025a71ce..65482c3b 100644 --- a/src/ui/statusbar.c +++ b/src/ui/statusbar.c @@ -83,7 +83,7 @@ static int _status_bar_draw_time(int pos); static int _status_bar_draw_maintext(int pos); static int _status_bar_draw_bracket(gboolean current, int pos, const char* ch); static int _status_bar_draw_extended_tabs(int pos, gboolean prefix, int start, int end, gboolean is_static); -static int _status_bar_draw_tab(StatusBarTab* tab, int pos, int num); +static int _status_bar_draw_tab(StatusBarTab* tab, int pos, int num, gboolean include_brackets); static int _status_bar_draw_tabs(int pos); static void _destroy_tab(StatusBarTab* tab); static int _tabs_width(int start, int end); @@ -317,7 +317,7 @@ _status_bar_draw_tabs(int pos) for (int i = start; i <= end; i++) { StatusBarTab* tab = g_hash_table_lookup(statusbar->tabs, GINT_TO_POINTER(i)); if (tab) { - pos = _status_bar_draw_tab(tab, pos, i); + pos = _status_bar_draw_tab(tab, pos, i, TRUE); } } @@ -342,14 +342,9 @@ _status_bar_draw_tabs(int pos) for (guint i = 1; i <= tabnum && print_act; ++i) { StatusBarTab* tab = g_hash_table_lookup(statusbar->tabs, GINT_TO_POINTER(i)); if (tab && tab->highlight) { - if (print_act == 1) { - mvwprintw(statusbar_win, 0, pos, "%d", i); - pos++; - } else { - mvwprintw(statusbar_win, 0, pos, "%d,", i); - pos += 2; - } - for (guint limit = 10; i >= limit; limit *= 10) { + pos = _status_bar_draw_tab(tab, pos, i, FALSE); + if (print_act > 1) { + mvwprintw(statusbar_win, 0, pos, ","); pos++; } print_act--; @@ -429,7 +424,7 @@ _status_bar_draw_extended_tabs(int pos, gboolean prefix, int start, int end, gbo } static int -_status_bar_draw_tab(StatusBarTab* tab, int pos, int num) +_status_bar_draw_tab(StatusBarTab* tab, int pos, int num, gboolean include_brackets) { gboolean is_current = num == statusbar->current_tab; @@ -441,7 +436,9 @@ _status_bar_draw_tab(StatusBarTab* tab, int pos, int num) if (!show_read && !is_current && !tab->highlight) return pos; - pos = _status_bar_draw_bracket(is_current, pos, "["); + if (include_brackets) { + pos = _status_bar_draw_bracket(is_current, pos, "["); + } int status_attrs; if (is_current) { @@ -468,7 +465,9 @@ _status_bar_draw_tab(StatusBarTab* tab, int pos, int num) } wattroff(statusbar_win, status_attrs); - pos = _status_bar_draw_bracket(is_current, pos, "]"); + if (include_brackets) { + pos = _status_bar_draw_bracket(is_current, pos, "]"); + } return pos; } From c32aac76448edc14ffbdd1890d8e0c754d91d1f5 Mon Sep 17 00:00:00 2001 From: Michael Vetter Date: Wed, 19 Jun 2024 12:41:18 +0200 Subject: [PATCH 2/3] statusbar: dont query setting twice We already got that just a couple of lines above.. --- src/ui/statusbar.c | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/src/ui/statusbar.c b/src/ui/statusbar.c index 65482c3b..20c4a113 100644 --- a/src/ui/statusbar.c +++ b/src/ui/statusbar.c @@ -565,17 +565,15 @@ _status_bar_draw_maintext(int pos) } if (statusbar->fulljid) { - auto_gchar gchar* pref = prefs_get_string(PREF_STATUSBAR_SELF); - - if (g_strcmp0(pref, "off") == 0) { + if (g_strcmp0(self, "off") == 0) { return pos; } - if (g_strcmp0(pref, "user") == 0) { + if (g_strcmp0(self, "user") == 0) { auto_jid Jid* jidp = jid_create(statusbar->fulljid); mvwprintw(statusbar_win, 0, pos, "%s", jidp->localpart); return pos; } - if (g_strcmp0(pref, "barejid") == 0) { + if (g_strcmp0(self, "barejid") == 0) { auto_jid Jid* jidp = jid_create(statusbar->fulljid); mvwprintw(statusbar_win, 0, pos, "%s", jidp->barejid); return pos; From ebcb198f09cb1615d7c0b6b206b2cdc2124901dd Mon Sep 17 00:00:00 2001 From: Michael Vetter Date: Wed, 19 Jun 2024 13:04:09 +0200 Subject: [PATCH 3/3] Fix statusbar display of active tab When using `/statusbar tabmode actlist` and `/statusbar self user` then we get `[00:23] [user]` and now `[00:23] [1:user]` where `1` is the active tab. The active tab is only displayed with fulljid. This commit fixes 7d290b04d. Fix https://github.com/profanity-im/profanity/issues/1980 --- src/ui/statusbar.c | 37 ++++++++++--------------------------- 1 file changed, 10 insertions(+), 27 deletions(-) diff --git a/src/ui/statusbar.c b/src/ui/statusbar.c index 20c4a113..164babca 100644 --- a/src/ui/statusbar.c +++ b/src/ui/statusbar.c @@ -549,37 +549,20 @@ _status_bar_draw_maintext(int pos) return pos; } - if (statusbar->fulljid) { - jidp = jid_create(statusbar->fulljid); - if (g_strcmp0(self, "user") == 0) { - maintext = jidp->localpart; - } else if (g_strcmp0(self, "barejid") == 0) { - maintext = jidp->barejid; - } else { - maintext = statusbar->fulljid; - } - } - - if (maintext == NULL) { + if (statusbar->fulljid == NULL) { return pos; } - if (statusbar->fulljid) { - if (g_strcmp0(self, "off") == 0) { - return pos; - } - if (g_strcmp0(self, "user") == 0) { - auto_jid Jid* jidp = jid_create(statusbar->fulljid); - mvwprintw(statusbar_win, 0, pos, "%s", jidp->localpart); - return pos; - } - if (g_strcmp0(self, "barejid") == 0) { - auto_jid Jid* jidp = jid_create(statusbar->fulljid); - mvwprintw(statusbar_win, 0, pos, "%s", jidp->barejid); - return pos; - } + jidp = jid_create(statusbar->fulljid); + if (!jidp) + return pos; - mvwprintw(statusbar_win, 0, pos, "%s", statusbar->fulljid); + if (g_strcmp0(self, "user") == 0) { + maintext = jidp->localpart; + } else if (g_strcmp0(self, "barejid") == 0) { + maintext = jidp->barejid; + } else { + maintext = statusbar->fulljid; } gboolean actlist_tabmode = _tabmode_is_actlist();