From bd5c623c6e54c1f449b7af06177a9a5c7fbcb4a7 Mon Sep 17 00:00:00 2001
From: Thanos Doukoudakis <thanos.doukoudakis@isode.com>
Date: Fri, 10 Mar 2017 15:55:13 +0000
Subject: Open 1:1 chat to real JIDs from MUC rooms (not PMs) when possible

Opens the chat with the user JID instead of the MUC JID.
Does not affect existing behaviour on normal one2one chats.

Test-Information:

Builds on Windows and unit test pass.
Tested the behaviour on single chats from contacts list (roster), start new chat with
one and multiple users. Also tested on MUC rooms that are non-anonymous,
semi-anonymous and anonymous.

Change-Id: I2b8fbacb1fa640167ec196d4215a13ad4905d45c

diff --git a/Swift/Controllers/Roster/ContactRosterItem.h b/Swift/Controllers/Roster/ContactRosterItem.h
index 37c3840..9779859 100644
--- a/Swift/Controllers/Roster/ContactRosterItem.h
+++ b/Swift/Controllers/Roster/ContactRosterItem.h
@@ -43,6 +43,14 @@ class ContactRosterItem : public RosterItem {
         };
 
     public:
+        /**
+        * @brief ContactRosterItem contains the information of a contact that is part of a XMPP Roster.
+        * @param jid The JabberID of the contact in the Roster entry.
+        * @param displayJID An alternate JID that is used instead of the JID this item represents. If not available, 
+        * an empty node should be passed. This parameter will be converted to a bare JID.
+        * @param name The name or nickname of the contact
+        * @param parent The roster group that the contact is a member of. The same JID may be in several roster groups, in which case they will have individual ContactRosterItems with the same JID.
+        */
         ContactRosterItem(const JID& jid, const JID& displayJID, const std::string& name, GroupRosterItem* parent);
         virtual ~ContactRosterItem();
 
diff --git a/Swift/QtUI/QtChatWindow.cpp b/Swift/QtUI/QtChatWindow.cpp
index ca615f3..c509ab3 100644
--- a/Swift/QtUI/QtChatWindow.cpp
+++ b/Swift/QtUI/QtChatWindow.cpp
@@ -114,7 +114,7 @@ QtChatWindow::QtChatWindow(const QString& contact, QtChatTheme* theme, UIEventSt
     }
     logRosterSplitter_->addWidget(messageLog_);
 
-    treeWidget_ = new QtOccupantListWidget(eventStream_, settings_, QtTreeWidget::MessageDefaultJID, this);
+    treeWidget_ = new QtOccupantListWidget(eventStream_, settings_, QtTreeWidget::MessageDisplayJID, this);
     treeWidget_->hide();
     logRosterSplitter_->addWidget(treeWidget_);
     logRosterSplitter_->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
@@ -459,7 +459,6 @@ void QtChatWindow::closeEvent(QCloseEvent* event) {
 
 void QtChatWindow::convertToMUC(MUCType mucType) {
     impromptu_ = (mucType == ImpromptuMUC);
-    treeWidget_->setMessageTarget(impromptu_ ? QtTreeWidget::MessageDisplayJID : QtTreeWidget::MessageDefaultJID);
     isMUC_ = true;
     treeWidget_->show();
     subject_->setVisible(!impromptu_);
diff --git a/Swift/QtUI/Roster/QtTreeWidget.cpp b/Swift/QtUI/Roster/QtTreeWidget.cpp
index 1264a09..ac9f541 100644
--- a/Swift/QtUI/Roster/QtTreeWidget.cpp
+++ b/Swift/QtUI/Roster/QtTreeWidget.cpp
@@ -240,7 +240,6 @@ JID QtTreeWidget::jidFromIndex(const QModelIndex& index) const {
     JID target;
     if (messageTarget_ == MessageDisplayJID) {
         target = JID(Q2PSTRING(index.data(DisplayJIDRole).toString()));
-        target = target.toBare();
     }
     if (!target.isValid()) {
         target = JID(Q2PSTRING(index.data(JIDRole).toString()));
-- 
cgit v0.10.2-6-g49f6