From 1edfc36235cc67d303ceb2bcf0630affc509f2f7 Mon Sep 17 00:00:00 2001
From: Richard Maudsley <richard.maudsley@isode.com>
Date: Mon, 30 Jun 2014 11:42:05 +0100
Subject: Fix attempting to start impromptu chat when impromptu not supported.

Test-Information:

Connect to a server where impromptu is NOT supported. Confirm that adding multiple users by dragging or typing into the JID box is not allowed.
Connect to a server where impromptu is supported. Confirm that it is still possible to drag multiple users and add multiple users by typing into the JID box.

Change-Id: Ibb4c1f7d6a5820f7ccf3629c1e0d30a441d9d159

diff --git a/Swift/QtUI/UserSearch/QtContactListWidget.cpp b/Swift/QtUI/UserSearch/QtContactListWidget.cpp
index 4adc929..6504f3e 100644
--- a/Swift/QtUI/UserSearch/QtContactListWidget.cpp
+++ b/Swift/QtUI/UserSearch/QtContactListWidget.cpp
@@ -77,6 +77,10 @@ void QtContactListWidget::setMaximumNoOfContactsToOne(bool limited) {
 	limited_ = limited;
 }
 
+bool QtContactListWidget::isFull() const {
+	return limited_ && (getList().size() == 1);
+}
+
 void QtContactListWidget::updateContacts(const std::vector<Contact::ref>& contactUpdates) {
 	std::vector<Contact::ref> contacts = contactListModel_->getList();
 	foreach(const Contact::ref& contactUpdate, contactUpdates) {
diff --git a/Swift/QtUI/UserSearch/QtContactListWidget.h b/Swift/QtUI/UserSearch/QtContactListWidget.h
index 601d320..112f3ee 100644
--- a/Swift/QtUI/UserSearch/QtContactListWidget.h
+++ b/Swift/QtUI/UserSearch/QtContactListWidget.h
@@ -40,6 +40,7 @@ public:
 	std::vector<Contact::ref> getList() const;
 	Contact::ref getContact(const size_t i);
 	void setMaximumNoOfContactsToOne(bool limited);
+	bool isFull() const;
 
 public slots:
 	void updateContacts(const std::vector<Contact::ref>& contactUpdates);
diff --git a/Swift/QtUI/UserSearch/QtUserSearchFirstMultiJIDPage.cpp b/Swift/QtUI/UserSearch/QtUserSearchFirstMultiJIDPage.cpp
index 597c88b..8ea49c4 100644
--- a/Swift/QtUI/UserSearch/QtUserSearchFirstMultiJIDPage.cpp
+++ b/Swift/QtUI/UserSearch/QtUserSearchFirstMultiJIDPage.cpp
@@ -72,7 +72,9 @@ void QtUserSearchFirstMultiJIDPage::handleEditingDone() {
 void QtUserSearchFirstMultiJIDPage::dragEnterEvent(QDragEnterEvent *event) {
 	if (event->mimeData()->hasFormat("application/vnd.swift.contact-jid-list")
 		|| event->mimeData()->hasFormat("application/vnd.swift.contact-jid-muc")) {
-			event->acceptProposedAction();
+			if (!contactList_->isFull()) {
+				event->acceptProposedAction();
+			}
 	}
 }
 
diff --git a/Swift/QtUI/UserSearch/QtUserSearchWindow.cpp b/Swift/QtUI/UserSearch/QtUserSearchWindow.cpp
index 40b4e28..260ccfe 100644
--- a/Swift/QtUI/UserSearch/QtUserSearchWindow.cpp
+++ b/Swift/QtUI/UserSearch/QtUserSearchWindow.cpp
@@ -270,13 +270,9 @@ JID QtUserSearchWindow::getContactJID() const {
 }
 
 void QtUserSearchWindow::addSearchedJIDToList(const JID& jid) {
-	Contact::ref contact = boost::make_shared<Contact>(jid, jid.toString(), StatusShow::None, "");
-	contactVector_.push_back(contact);
-	firstMultiJIDPage_->contactList_->setList(contactVector_);
-	firstMultiJIDPage_->emitCompletenessCheck();
-	if (type_ == ChatToContact) {
-		firstMultiJIDPage_->groupBox->setEnabled(supportsImpromptu_ ? 1 : (contactVector_.size() < 1));
-	}
+	std::vector<JID> jids;
+	jids.push_back(jid);
+	handleJIDsAdded(jids);
 }
 
 void QtUserSearchWindow::show() {
@@ -394,8 +390,14 @@ void QtUserSearchWindow::addContacts(const std::vector<Contact::ref>& contacts)
 				contactVector_.push_back(newContact);
 			}
 		}
+		if (!supportsImpromptu_ && contactVector_.size() > 1) {
+			contactVector_.resize(1); /* can't chat with more than one user */
+		}
 		firstMultiJIDPage_->contactList_->setList(contactVector_);
 		firstMultiJIDPage_->emitCompletenessCheck();
+		if (type_ == ChatToContact) {
+			firstMultiJIDPage_->groupBox->setEnabled(supportsImpromptu_ ? true : (contactVector_.size() < 1));
+		}
 	}
 }
 
-- 
cgit v0.10.2-6-g49f6