about summary refs log tree commit diff stats
diff options
context:
space:
mode:
-rw-r--r--src/command/cmd_defs.c4
-rw-r--r--src/command/cmd_funcs.c19
-rw-r--r--src/config/preferences.c5
-rw-r--r--src/config/preferences.h1
-rw-r--r--src/config/theme.c1
-rw-r--r--src/ui/rosterwin.c20
6 files changed, 48 insertions, 2 deletions
diff --git a/src/command/cmd_defs.c b/src/command/cmd_defs.c
index 17b9d6cb..5e3e556a 100644
--- a/src/command/cmd_defs.c
+++ b/src/command/cmd_defs.c
@@ -291,6 +291,8 @@ static struct cmd_t command_defs[] =
             "/roster room unread before|after|off",
             "/roster room show server",
             "/roster room hide server",
+            "/roster room use name",
+            "/roster room use jid",
             "/roster private room|group|off",
             "/roster private char <char>|none",
             "/roster header char <char>|none",
@@ -364,6 +366,8 @@ static struct cmd_t command_defs[] =
             { "room unread off",                "Do not show unread message count for rooms." },
             { "room show server",               "Show the conference server with room JIDs." },
             { "room hide server",               "Do not show the conference server with room JIDs." },
+            { "room use name",                  "Use the MUC name as room name." },
+            { "room use jid",                   "Use the JID as room name." },
             { "private room",                   "Show room private chats with the room." },
             { "private group",                  "Show room private chats as a separate roster group." },
             { "private off",                    "Do not show room private chats." },
diff --git a/src/command/cmd_funcs.c b/src/command/cmd_funcs.c
index fbb5e581..2c85251e 100644
--- a/src/command/cmd_funcs.c
+++ b/src/command/cmd_funcs.c
@@ -2861,6 +2861,25 @@ cmd_roster(ProfWin *window, const char *const command, gchar **args)
                 cons_bad_cmd_usage(command);
                 return TRUE;
             }
+        } else if (g_strcmp0(args[1], "use") == 0) {
+            if (g_strcmp0(args[2], "jid") == 0) {
+                cons_show("Roster room display jid as name.");
+                prefs_set_string(PREF_ROSTER_ROOMS_USE_AS_NAME, "jid");
+                if (conn_status == JABBER_CONNECTED) {
+                    rosterwin_roster();
+                }
+                return TRUE;
+            } else if (g_strcmp0(args[2], "name") == 0) {
+                cons_show("Roster room display room name as name.");
+                prefs_set_string(PREF_ROSTER_ROOMS_USE_AS_NAME, "name");
+                if (conn_status == JABBER_CONNECTED) {
+                    rosterwin_roster();
+                }
+                return TRUE;
+            } else {
+                cons_bad_cmd_usage(command);
+                return TRUE;
+            }
         } else {
             cons_bad_cmd_usage(command);
             return TRUE;
diff --git a/src/config/preferences.c b/src/config/preferences.c
index ec797f06..728fb54c 100644
--- a/src/config/preferences.c
+++ b/src/config/preferences.c
@@ -1701,6 +1701,7 @@ _get_group(preference_t pref)
         case PREF_ROSTER_ROOMS_ORDER:
         case PREF_ROSTER_ROOMS_UNREAD:
         case PREF_ROSTER_ROOMS_SERVER:
+        case PREF_ROSTER_ROOMS_USE_AS_NAME:
         case PREF_ROSTER_PRIVATE:
         case PREF_RESOURCE_TITLE:
         case PREF_RESOURCE_MESSAGE:
@@ -1948,6 +1949,8 @@ _get_key(preference_t pref)
             return "roster.rooms.unread";
         case PREF_ROSTER_ROOMS_SERVER:
             return "roster.rooms.server";
+        case PREF_ROSTER_ROOMS_USE_AS_NAME:
+            return "roster.rooms.use.name";
         case PREF_ROSTER_PRIVATE:
             return "roster.private";
         case PREF_RESOURCE_TITLE:
@@ -2082,6 +2085,8 @@ _get_default_string(preference_t pref)
             return "last";
         case PREF_ROSTER_ROOMS_BY:
             return "none";
+        case PREF_ROSTER_ROOMS_USE_AS_NAME:
+            return "name";
         case PREF_ROSTER_ROOMS_ORDER:
             return "name";
         case PREF_ROSTER_ROOMS_UNREAD:
diff --git a/src/config/preferences.h b/src/config/preferences.h
index c899143a..99545bdb 100644
--- a/src/config/preferences.h
+++ b/src/config/preferences.h
@@ -88,6 +88,7 @@ typedef enum {
     PREF_ROSTER_ROOMS_ORDER,
     PREF_ROSTER_ROOMS_UNREAD,
     PREF_ROSTER_ROOMS_SERVER,
+    PREF_ROSTER_ROOMS_USE_AS_NAME,
     PREF_ROSTER_PRIVATE,
     PREF_MUC_PRIVILEGES,
     PREF_PRESENCE,
diff --git a/src/config/theme.c b/src/config/theme.c
index 1342f551..56e1fe7b 100644
--- a/src/config/theme.c
+++ b/src/config/theme.c
@@ -336,6 +336,7 @@ _load_preferences(void)
     _set_string_preference("roster.rooms.by", PREF_ROSTER_ROOMS_BY);
     _set_string_preference("roster.private", PREF_ROSTER_PRIVATE);
     _set_string_preference("roster.count", PREF_ROSTER_COUNT);
+    _set_string_preference("roster.rooms.use.name", PREF_ROSTER_ROOMS_USE_AS_NAME);
     _set_string_preference("statusbar.self", PREF_STATUSBAR_SELF);
     _set_string_preference("statusbar.chat", PREF_STATUSBAR_CHAT);
     _set_string_preference("statusbar.room", PREF_STATUSBAR_ROOM);
diff --git a/src/ui/rosterwin.c b/src/ui/rosterwin.c
index 8571baec..5e240468 100644
--- a/src/ui/rosterwin.c
+++ b/src/ui/rosterwin.c
@@ -775,13 +775,29 @@ _rosterwin_room(ProfLayoutSplit *layout, ProfMucWin *mucwin)
         jid_destroy(jidp);
     } else {
         gboolean show_server = prefs_get_boolean(PREF_ROSTER_ROOMS_SERVER);
+        char *use_as_name = prefs_get_string(PREF_ROSTER_ROOMS_USE_AS_NAME);
+
         if (show_server) {
-            g_string_append(msg, mucwin->roomjid);
+            if (mucwin->room_name == NULL ||
+                    (g_strcmp0(use_as_name, "jid") == 0)) {
+                g_string_append(msg, mucwin->roomjid);
+            } else {
+                g_string_append(msg, mucwin->room_name);
+            }
         } else {
             Jid *jidp = jid_create(mucwin->roomjid);
-            g_string_append(msg, jidp->localpart);
+
+            if (mucwin->room_name == NULL ||
+                    (g_strcmp0(use_as_name, "jid") == 0)) {
+                g_string_append(msg, jidp->localpart);
+            } else {
+                g_string_append(msg, mucwin->room_name);
+            }
+
             jid_destroy(jidp);
         }
+
+        prefs_free_string(use_as_name);
     }
     prefs_free_string(roombypref);
     if ((g_strcmp0(unreadpos, "after") == 0) && mucwin->unread > 0) {