about summary refs log tree commit diff stats
diff options
context:
space:
mode:
authorJames Booth <boothj5@gmail.com>2018-03-10 22:41:55 +0000
committerJames Booth <boothj5@gmail.com>2018-03-10 22:41:55 +0000
commit4bf67fb35ac0fa9d78f3fe32d5ef14d146b39b6a (patch)
tree7783e024c6c47d7c15cbbb544565f255021a75e0
parent95b639a21f77c825a36076562363154216cdad05 (diff)
downloadprofani-tty-4bf67fb35ac0fa9d78f3fe32d5ef14d146b39b6a.tar.gz
Use jid prefs in statusbar
-rw-r--r--src/ui/core.c4
-rw-r--r--src/ui/statusbar.c58
-rw-r--r--src/ui/statusbar.h4
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);
     }
 }
@@ -220,6 +228,29 @@ status_bar_clear_prompt(void)
 }
 
 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)
 {
     werase(statusbar_win);
@@ -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