aboutsummaryrefslogtreecommitdiffstats
path: root/protocols/jabber/jabber.c
diff options
context:
space:
mode:
Diffstat (limited to 'protocols/jabber/jabber.c')
-rw-r--r--protocols/jabber/jabber.c12
1 files changed, 11 insertions, 1 deletions
diff --git a/protocols/jabber/jabber.c b/protocols/jabber/jabber.c
index ccc13f47..30e55159 100644
--- a/protocols/jabber/jabber.c
+++ b/protocols/jabber/jabber.c
@@ -62,6 +62,8 @@ static void jabber_init( account_t *acc )
s = set_add( &acc->set, "oauth", "false", set_eval_oauth, acc );
+ s = set_add( &acc->set, "display_name", NULL, NULL, acc );
+
g_snprintf( str, sizeof( str ), "%d", jabber_port_list[0] );
s = set_add( &acc->set, "port", str, set_eval_int, acc );
s->flags |= ACC_SET_OFFLINE_ONLY;
@@ -473,14 +475,22 @@ static void jabber_remove_buddy( struct im_connection *ic, char *who, char *grou
static struct groupchat *jabber_chat_join_( struct im_connection *ic, const char *room, const char *nick, const char *password, set_t **sets )
{
struct jabber_data *jd = ic->proto_data;
+ char *final_nick;
+ /* Ignore the passed nick parameter if we have our own default */
+ if ( !( final_nick = set_getstr( sets, "nick" ) ) &&
+ !( final_nick = set_getstr( &ic->acc->set, "display_name" ) ) ) {
+ /* Well, whatever, actually use the provided default, then */
+ final_nick = (char *) nick;
+ }
+
if( strchr( room, '@' ) == NULL )
imcb_error( ic, "%s is not a valid Jabber room name. Maybe you mean %s@conference.%s?",
room, room, jd->server );
else if( jabber_chat_by_jid( ic, room ) )
imcb_error( ic, "Already present in chat `%s'", room );
else
- return jabber_chat_join( ic, room, nick, set_getstr( sets, "password" ) );
+ return jabber_chat_join( ic, room, final_nick, set_getstr( sets, "password" ) );
return NULL;
}