From 0740d692dc401dd8614fcbc9f628086279ca3c93 Mon Sep 17 00:00:00 2001 From: John Hernandez <129467592+H3rnand3zzz@users.noreply.github.com> Date: Tue, 4 Apr 2023 00:06:04 +0200 Subject: [PATCH 1/2] Improve titlebar flexibility Before this change, only nickname or JID (if no nickname set) is shown in the titlebar. Change allows to alter nickname/JID preference using already implemented /titlebar show jid|name setting. If both are set to "show", then it is displayed in "nickname " format. --- src/command/cmd_defs.c | 4 ++-- src/ui/window.c | 26 +++++++++++++++++--------- 2 files changed, 19 insertions(+), 11 deletions(-) diff --git a/src/command/cmd_defs.c b/src/command/cmd_defs.c index b985464f..574b9656 100644 --- a/src/command/cmd_defs.c +++ b/src/command/cmd_defs.c @@ -1260,8 +1260,8 @@ static const struct cmd_t command_defs[] = { { "show tls", "Show or hide TLS indicator in the titlebar." }, { "show encwarn", "Enable or disable the unencrypted warning message in the titlebar." }, { "show resource", "Show or hide the current resource in the titlebar." }, - { "show name", "In case of a MUC. Show the MUC name in the titlebar." }, - { "show jid", "In case of a MUC. Show the JID in the titlebar." }) + { "show name", "Show the nickname or MUC name in the titlebar." }, + { "show jid", "Show the JID in the titlebar." }) CMD_EXAMPLES( "/titlebar up", "/titlebar show tls", diff --git a/src/ui/window.c b/src/ui/window.c index c1d5edf3..6718d0c5 100644 --- a/src/ui/window.c +++ b/src/ui/window.c @@ -312,18 +312,26 @@ win_get_title(ProfWin* window) { ProfChatWin* chatwin = (ProfChatWin*)window; assert(chatwin->memcheck == PROFCHATWIN_MEMCHECK); + + gboolean show_titlebar_jid = prefs_get_boolean(PREF_TITLEBAR_MUC_TITLE_JID); + gboolean show_titlebar_name = prefs_get_boolean(PREF_TITLEBAR_MUC_TITLE_NAME); jabber_conn_status_t conn_status = connection_get_status(); - if (conn_status == JABBER_CONNECTED) { - PContact contact = roster_get_contact(chatwin->barejid); - if (contact) { - const char* name = p_contact_name_or_jid(contact); - return strdup(name); - } else { - return strdup(chatwin->barejid); - } - } else { + + if (conn_status != JABBER_CONNECTED || !show_titlebar_name) { return strdup(chatwin->barejid); } + PContact contact = roster_get_contact(chatwin->barejid); + if (!contact) { + return strdup(chatwin->barejid); + } + const char* name = p_contact_name(contact); + if (name == NULL) { + return strdup(chatwin->barejid); + } + if(show_titlebar_jid){ + return g_strdup_printf("%s <%s>", name, chatwin->barejid); + } + return g_strdup_printf("%s", name); } case WIN_MUC: { From 7d290b04d50c59075d7cd6efa0650f7b8b9d4c77 Mon Sep 17 00:00:00 2001 From: John Hernandez <129467592+H3rnand3zzz@users.noreply.github.com> Date: Tue, 4 Apr 2023 02:14:52 +0200 Subject: [PATCH 2/2] Fixes Statusbar tabs and Cleanup - Fixes statusbar tabs. Bug: Statusbar used nickname if it was set in roster, irrelevant to /statusbar chat setting. Expected behaviour would be using this setting set as "user" to show nickname, and to show jid with "jid" setting. Other solution is to give a user control over it with another settings. - _status_bar_draw_maintext cleaned up, no changes to behaviour --- src/ui/statusbar.c | 52 +++++++++++++++++++++++++++++++++------------- src/ui/window.c | 2 +- 2 files changed, 39 insertions(+), 15 deletions(-) diff --git a/src/ui/statusbar.c b/src/ui/statusbar.c index 38d28c31..08ecdcd7 100644 --- a/src/ui/statusbar.c +++ b/src/ui/statusbar.c @@ -182,10 +182,7 @@ status_bar_inactive(const int win) void _create_tab(const int win, win_type_t wintype, char* identifier, gboolean highlight) { - int true_win = win; - if (true_win == 0) { - true_win = 10; - } + int true_win = win == 0 ? 10 : win; StatusBarTab* tab = malloc(sizeof(StatusBarTab)); tab->identifier = strdup(identifier); @@ -198,11 +195,12 @@ _create_tab(const int win, win_type_t wintype, char* identifier, gboolean highli if (roster_exists()) { contact = roster_get_contact(tab->identifier); } - if (contact && p_contact_name(contact)) { - tab->display_name = strdup(p_contact_name(contact)); - } else { - char* pref = prefs_get_string(PREF_STATUSBAR_CHAT); - if (g_strcmp0("user", pref) == 0) { + const char* pcontact_name = contact ? p_contact_name(contact) : NULL; + auto_char char* pref = prefs_get_string(PREF_STATUSBAR_CHAT); + if (g_strcmp0("user", pref) == 0) { + if (pcontact_name) { + tab->display_name = strdup(pcontact_name); + } else { Jid* jidp = jid_create(tab->identifier); if (jidp) { tab->display_name = jidp->localpart != NULL ? strdup(jidp->localpart) : strdup(jidp->barejid); @@ -210,10 +208,9 @@ _create_tab(const int win, win_type_t wintype, char* identifier, gboolean highli } else { tab->display_name = strdup(tab->identifier); } - } else { - tab->display_name = strdup(tab->identifier); } - g_free(pref); + } else { + tab->display_name = strdup(tab->identifier); } } @@ -518,12 +515,17 @@ _status_bar_draw_maintext(int pos) const char* maintext = NULL; auto_jid Jid* jidp = NULL; auto_char char* self = prefs_get_string(PREF_STATUSBAR_SELF); + if (statusbar->prompt) { mvwprintw(statusbar_win, 0, pos, "%s", statusbar->prompt); return utf8_display_len(statusbar->prompt); - } else if (g_strcmp0(self, "off") == 0) { + } + + if (g_strcmp0(self, "off") == 0) { return pos; - } else if (statusbar->fulljid) { + } + + if (statusbar->fulljid) { jidp = jid_create(statusbar->fulljid); if (g_strcmp0(self, "user") == 0) { maintext = jidp->localpart; @@ -538,6 +540,28 @@ _status_bar_draw_maintext(int pos) return pos; } + if (statusbar->fulljid) { + auto_char char* pref = prefs_get_string(PREF_STATUSBAR_SELF); + + if (g_strcmp0(pref, "off") == 0) { + return pos; + } + if (g_strcmp0(pref, "user") == 0) { + Jid* jidp = jid_create(statusbar->fulljid); + mvwprintw(statusbar_win, 0, pos, "%s", jidp->localpart); + jid_destroy(jidp); + return pos; + } + if (g_strcmp0(pref, "barejid") == 0) { + Jid* jidp = jid_create(statusbar->fulljid); + mvwprintw(statusbar_win, 0, pos, "%s", jidp->barejid); + jid_destroy(jidp); + return pos; + } + + mvwprintw(statusbar_win, 0, pos, "%s", statusbar->fulljid); + } + gboolean actlist_tabmode = _tabmode_is_actlist(); auto_gchar gchar* maintext_ = NULL; if (actlist_tabmode) { diff --git a/src/ui/window.c b/src/ui/window.c index 6718d0c5..e5b90f7b 100644 --- a/src/ui/window.c +++ b/src/ui/window.c @@ -328,7 +328,7 @@ win_get_title(ProfWin* window) if (name == NULL) { return strdup(chatwin->barejid); } - if(show_titlebar_jid){ + if (show_titlebar_jid) { return g_strdup_printf("%s <%s>", name, chatwin->barejid); } return g_strdup_printf("%s", name);