about summary refs log tree commit diff stats
diff options
context:
space:
mode:
-rw-r--r--src/command/command.c4
-rw-r--r--src/command/commands.c12
-rw-r--r--src/ui/core.c2
-rw-r--r--src/ui/titlebar.c8
-rw-r--r--src/ui/window.c8
-rw-r--r--src/ui/window.h2
6 files changed, 19 insertions, 17 deletions
diff --git a/src/command/command.c b/src/command/command.c
index 89ae17fc..022de166 100644
--- a/src/command/command.c
+++ b/src/command/command.c
@@ -1782,9 +1782,9 @@ cmd_execute_default(const char * inp)
             } else {
                 GString *send_recipient = g_string_new(recipient);
                 ProfWin *current = wins_get_current();
-                if (current && current->chat_resource) {
+                if (current && current->wins.chat.chat_resource) {
                     g_string_append(send_recipient, "/");
-                    g_string_append(send_recipient, current->chat_resource);
+                    g_string_append(send_recipient, current->wins.chat.chat_resource);
                 }
 
 #ifdef HAVE_LIBOTR
diff --git a/src/command/commands.c b/src/command/commands.c
index e6e6923f..40310e45 100644
--- a/src/command/commands.c
+++ b/src/command/commands.c
@@ -1151,9 +1151,9 @@ cmd_msg(gchar **args, struct cmd_help_t help)
         }
         GString *send_jid = g_string_new(usr_jid);
         ProfWin *current = wins_get_current();
-        if (current && current->chat_resource) {
+        if (current->type == WIN_CHAT && current->wins.chat.chat_resource) {
             g_string_append(send_jid, "/");
-            g_string_append(send_jid, current->chat_resource);
+            g_string_append(send_jid, current->wins.chat.chat_resource);
         }
 
         if (msg != NULL) {
@@ -1574,11 +1574,11 @@ cmd_resource(gchar **args, struct cmd_help_t help)
             return TRUE;
         }
 
-        current->chat_resource = strdup(resource);
+        current->wins.chat.chat_resource = strdup(resource);
         return TRUE;
 
     } else if (g_strcmp0(cmd, "off") == 0) {
-        FREE_SET_NULL(current->chat_resource);
+        FREE_SET_NULL(current->wins.chat.chat_resource);
         return TRUE;
     } else {
         cons_show("Usage: %s", help.usage);
@@ -2941,9 +2941,9 @@ cmd_tiny(gchar **args, struct cmd_help_t help)
                 char *recipient = ui_current_recipient();
                 GString *send_recipient = g_string_new(recipient);
                 ProfWin *current = wins_get_current();
-                if (current && current->chat_resource) {
+                if (current && current->wins.chat.chat_resource) {
                     g_string_append(send_recipient, "/");
-                    g_string_append(send_recipient, current->chat_resource);
+                    g_string_append(send_recipient, current->wins.chat.chat_resource);
                 }
 
 #ifdef HAVE_LIBOTR
diff --git a/src/ui/core.c b/src/ui/core.c
index f8f564fc..c62d6b4d 100644
--- a/src/ui/core.c
+++ b/src/ui/core.c
@@ -888,7 +888,7 @@ _ui_gone_secure(const char * const recipient, gboolean trusted)
         return;
     }
 
-    FREE_SET_NULL(window->chat_resource);
+    FREE_SET_NULL(window->wins.chat.chat_resource);
 
     window->wins.chat.is_otr = TRUE;
     window->wins.chat.is_trusted = trusted;
diff --git a/src/ui/titlebar.c b/src/ui/titlebar.c
index cb593b4b..5c11c346 100644
--- a/src/ui/titlebar.c
+++ b/src/ui/titlebar.c
@@ -324,21 +324,21 @@ _show_contact_presence(void)
     int bracket_attrs = theme_attrs(THEME_TITLE_BRACKET);
 
     ProfWin *current = wins_get_current();
-    if (current && current->chat_resource) {
+    if (current && current->wins.chat.chat_resource) {
         wprintw(win, "/");
-        wprintw(win, current->chat_resource);
+        wprintw(win, current->wins.chat.chat_resource);
     }
 
     if (prefs_get_boolean(PREF_PRESENCE)) {
         theme_item_t presence_colour = THEME_TITLE_OFFLINE;
         const char *presence = "offline";
 
-        if (current && current->chat_resource) {
+        if (current && current->wins.chat.chat_resource) {
             char *barejid = roster_barejid_from_name(current_recipient);
             if (barejid) {
                 PContact contact = roster_get_contact(barejid);
                 if (contact) {
-                    Resource *resource = p_contact_get_resource(contact, current->chat_resource);
+                    Resource *resource = p_contact_get_resource(contact, current->wins.chat.chat_resource);
                     if (resource) {
                         presence = string_from_resource_presence(resource->presence);
                     }
diff --git a/src/ui/window.c b/src/ui/window.c
index 89fde6c3..56225b67 100644
--- a/src/ui/window.c
+++ b/src/ui/window.c
@@ -122,10 +122,9 @@ win_create(const char * const title, win_type_t type)
     if (new_win->type == WIN_CHAT) {
         new_win->wins.chat.is_otr = FALSE;
         new_win->wins.chat.is_trusted = FALSE;
+        new_win->wins.chat.chat_resource = NULL;
     }
 
-    new_win->chat_resource = NULL;
-
     scrollok(new_win->win, TRUE);
 
     return new_win;
@@ -223,7 +222,10 @@ win_free(ProfWin* window)
         break;
     }
 
-    free(window->chat_resource);
+    if (window->type == WIN_CHAT) {
+        free(window->wins.chat.chat_resource);
+    }
+
     free(window->from);
 
     if (window->type == WIN_MUC_CONFIG) {
diff --git a/src/ui/window.h b/src/ui/window.h
index c74b7cae..f613c72a 100644
--- a/src/ui/window.h
+++ b/src/ui/window.h
@@ -71,7 +71,6 @@ typedef struct prof_win_t {
     WINDOW *win;
     ProfBuff buffer;
     char *from;
-    char *chat_resource;
     int y_pos;
     int paged;
     int unread;
@@ -87,6 +86,7 @@ typedef struct prof_win_t {
         struct {
             gboolean is_otr;
             gboolean is_trusted;
+            char *chat_resource;
         } chat;
 
         // WIN_MUC