From 4bf67fb35ac0fa9d78f3fe32d5ef14d146b39b6a Mon Sep 17 00:00:00 2001 From: James Booth Date: Sat, 10 Mar 2018 22:41:55 +0000 Subject: [PATCH] Use jid prefs in statusbar --- src/ui/core.c | 4 ++-- src/ui/statusbar.c | 58 +++++++++++++++++++++++++++++++++++++++++++--- src/ui/statusbar.h | 4 +++- 3 files changed, 60 insertions(+), 6 deletions(-) diff --git a/src/ui/core.c b/src/ui/core.c index a0ca8495..5246d06a 100644 --- a/src/ui/core.c +++ b/src/ui/core.c @@ -388,7 +388,7 @@ ui_handle_login_account_success(ProfAccount *account, gboolean secured) title_bar_set_connected(TRUE); title_bar_set_tls(secured); - status_bar_set_prompt(connection_get_fulljid()); + status_bar_set_fulljid(connection_get_fulljid()); } void @@ -481,7 +481,7 @@ ui_disconnected(void) title_bar_set_connected(FALSE); title_bar_set_tls(FALSE); title_bar_set_presence(CONTACT_OFFLINE); - status_bar_clear_prompt(); + status_bar_clear_fulljid(); ui_hide_roster(); } diff --git a/src/ui/statusbar.c b/src/ui/statusbar.c index 28b20f01..3515b0a7 100644 --- a/src/ui/statusbar.c +++ b/src/ui/statusbar.c @@ -62,6 +62,7 @@ typedef struct _status_bar_tab_t { typedef struct _status_bar_t { gchar *time; char *prompt; + char *fulljid; GHashTable *tabs; int current_tab; } StatusBar; @@ -71,7 +72,7 @@ static StatusBar *statusbar; static WINDOW *statusbar_win; static int _status_bar_draw_time(int pos); -static void _status_bar_draw_prompt(int pos); +static void _status_bar_draw_maintext(int pos); static int _status_bar_draw_bracket(gboolean current, int pos, char* ch); static int _status_bar_draw_extended_tabs(int pos); static int _status_bar_draw_tab(StatusBarTab *tab, int pos, int num); @@ -88,6 +89,7 @@ status_bar_init(void) statusbar = malloc(sizeof(StatusBar)); statusbar->time = NULL; statusbar->prompt = NULL; + statusbar->fulljid = NULL; statusbar->tabs = g_hash_table_new_full(g_direct_hash, g_direct_equal, NULL, (GDestroyNotify)_destroy_tab); StatusBarTab *console = malloc(sizeof(StatusBarTab)); console->window_type = WIN_CONSOLE; @@ -115,6 +117,12 @@ status_bar_close(void) if (statusbar->prompt) { free(statusbar->prompt); } + if (statusbar->fulljid) { + free(statusbar->fulljid); + } + if (statusbar->tabs) { + g_hash_table_destroy(statusbar->tabs); + } free(statusbar); } } @@ -219,6 +227,29 @@ status_bar_clear_prompt(void) status_bar_draw(); } +void +status_bar_set_fulljid(const char *const fulljid) +{ + if (statusbar->fulljid) { + free(statusbar->fulljid); + statusbar->fulljid = NULL; + } + statusbar->fulljid = strdup(fulljid); + + status_bar_draw(); +} + +void +status_bar_clear_fulljid(void) +{ + if (statusbar->fulljid) { + free(statusbar->fulljid); + statusbar->fulljid = NULL; + } + + status_bar_draw(); +} + void status_bar_draw(void) { @@ -229,7 +260,7 @@ status_bar_draw(void) pos = _status_bar_draw_time(pos); - _status_bar_draw_prompt(pos); + _status_bar_draw_maintext(pos); pos = getmaxx(stdscr) - _tabs_width(); gint max_tabs = prefs_get_statusbartabs(); @@ -389,10 +420,31 @@ _status_bar_draw_time(int pos) } static void -_status_bar_draw_prompt(int pos) +_status_bar_draw_maintext(int pos) { if (statusbar->prompt) { mvwprintw(statusbar_win, 0, pos, statusbar->prompt); + return; + } + + if (statusbar->fulljid) { + char *pref = prefs_get_string(PREF_STATUSBAR_SELF); + if (g_strcmp0(pref, "off") == 0) { + return; + } + if (g_strcmp0(pref, "user") == 0) { + Jid *jidp = jid_create(statusbar->fulljid); + mvwprintw(statusbar_win, 0, pos, jidp->localpart); + jid_destroy(jidp); + return; + } + if (g_strcmp0(pref, "barejid") == 0) { + Jid *jidp = jid_create(statusbar->fulljid); + mvwprintw(statusbar_win, 0, pos, jidp->barejid); + jid_destroy(jidp); + return; + } + mvwprintw(statusbar_win, 0, pos, statusbar->fulljid); } } diff --git a/src/ui/statusbar.h b/src/ui/statusbar.h index ce1f5482..de8b51cc 100644 --- a/src/ui/statusbar.h +++ b/src/ui/statusbar.h @@ -39,8 +39,10 @@ void status_bar_init(void); void status_bar_draw(void); void status_bar_close(void); void status_bar_resize(void); -void status_bar_clear_prompt(void); void status_bar_set_prompt(const char *const prompt); +void status_bar_clear_prompt(void); +void status_bar_set_fulljid(const char *const fulljid); +void status_bar_clear_fulljid(void); void status_bar_current(int i); #endif