From 5518a05a200d6531b5ee1d1409a1d451bc3b0749 Mon Sep 17 00:00:00 2001
From: Kevin Smith <git@kismith.co.uk>
Date: Fri, 25 Jun 2010 19:36:42 +0100
Subject: Command-line option to not use tabs.

Resolves: #476

diff --git a/Swift/QtUI/QtChatWindow.cpp b/Swift/QtUI/QtChatWindow.cpp
index fcc1308..8fed3c6 100644
--- a/Swift/QtUI/QtChatWindow.cpp
+++ b/Swift/QtUI/QtChatWindow.cpp
@@ -222,7 +222,11 @@ void QtChatWindow::setName(const String& name) {
 }
 
 void QtChatWindow::updateTitleWithUnreadCount() {
-	setWindowTitle(contact_);
+	if (isWindow()) {
+		setWindowTitle(unreadCount_ > 0 ? QString("(%1) %2").arg(unreadCount_).arg(contact_) : contact_);
+	} else {
+		setWindowTitle(contact_);
+	}
 	emit titleUpdated();
 }
 
@@ -318,7 +322,18 @@ void QtChatWindow::show() {
 }
 
 void QtChatWindow::activate() {
+	if (isWindow()) {
+		QWidget::show();
+	}
 	emit wantsToActivate();
 }
 
+void QtChatWindow::resizeEvent(QResizeEvent*) {
+	emit geometryChanged();
+}
+
+void QtChatWindow::moveEvent(QMoveEvent*) {
+	emit geometryChanged();	
+}
+
 }
diff --git a/Swift/QtUI/QtChatWindow.h b/Swift/QtUI/QtChatWindow.h
index 00d7f25..f68ff1c 100644
--- a/Swift/QtUI/QtChatWindow.h
+++ b/Swift/QtUI/QtChatWindow.h
@@ -48,12 +48,18 @@ namespace Swift {
 			void setTabComplete(TabComplete* completer);
 			int getCount();
 
+		signals:
+			void geometryChanged();
+
 		protected slots:
 			void qAppFocusChanged(QWidget* old, QWidget* now);
 			void closeEvent(QCloseEvent* event);
+			void resizeEvent(QResizeEvent* event);
+			void moveEvent(QMoveEvent* event);
 
 		protected:
 			void showEvent(QShowEvent* event);
+
 		private slots:
 			void returnPressed();
 			void handleInputChanged();
diff --git a/Swift/QtUI/QtChatWindowFactory.cpp b/Swift/QtUI/QtChatWindowFactory.cpp
index 5029324..9787c2c 100644
--- a/Swift/QtUI/QtChatWindowFactory.cpp
+++ b/Swift/QtUI/QtChatWindowFactory.cpp
@@ -19,7 +19,7 @@ QtChatWindowFactory::QtChatWindowFactory(QSplitter* splitter, QtSettingsProvider
 	tabs_ = tabs;
 	if (splitter) {
 		splitter->addWidget(tabs_);
-	} else {
+	} else if (tabs_) {
 		QVariant chatTabsGeometryVariant = settings_->getQSettings()->value("chatTabsGeometry");
 		if (chatTabsGeometryVariant.isValid()) {
 			tabs_->restoreGeometry(chatTabsGeometryVariant.toByteArray());
@@ -30,12 +30,20 @@ QtChatWindowFactory::QtChatWindowFactory(QSplitter* splitter, QtSettingsProvider
 
 ChatWindow* QtChatWindowFactory::createChatWindow(const JID &contact,UIEventStream* eventStream) {
 	QtChatWindow *chatWindow = new QtChatWindow(P2QSTRING(contact.toString()), eventStream);
-	tabs_->addTab(chatWindow);
+	if (tabs_) {
+		tabs_->addTab(chatWindow);
+	} else {
+		QVariant chatGeometryVariant = settings_->getQSettings()->value("chatTabsGeometry");
+		if (chatGeometryVariant.isValid()) {
+			chatWindow->restoreGeometry(chatGeometryVariant.toByteArray());
+		}
+		connect(chatWindow, SIGNAL(geometryChanged()), this, SLOT(handleWindowGeometryChanged()));
+	}
 	return chatWindow;
 }
 
 void QtChatWindowFactory::handleWindowGeometryChanged() {
-	settings_->getQSettings()->setValue("chatTabsGeometry", tabs_->saveGeometry());
+	settings_->getQSettings()->setValue("chatTabsGeometry", qobject_cast<QWidget*>(sender())->saveGeometry());
 }
 
 }
diff --git a/Swift/QtUI/QtSwift.cpp b/Swift/QtUI/QtSwift.cpp
index 2bf1fcf..3e8bc8b 100644
--- a/Swift/QtUI/QtSwift.cpp
+++ b/Swift/QtUI/QtSwift.cpp
@@ -45,6 +45,7 @@ po::options_description QtSwift::getOptionsDescription() {
 	result.add_options()
 		("help", "produce help message")
 		("netbook-mode", "use netbook mode display")
+		("no-tabs", "don't manage chat windows in tabs")
 		("latency-debug", "use latency debugging")
 		;
 	return result;
@@ -62,7 +63,7 @@ QtSwift::QtSwift(po::variables_map options) : autoUpdater_(NULL) {
 	QCoreApplication::setOrganizationDomain(SWIFT_ORGANIZATION_DOMAIN);
 	QCoreApplication::setApplicationVersion(buildVersion);
 
-	tabs_ = new QtChatTabs();
+	tabs_ = options.count("no-tabs") && !splitter_ > 0 ? NULL : new QtChatTabs();
 	settings_ = new QtSettingsProvider();
 	application_ = new PlatformApplication(SWIFT_APPLICATION_NAME);
 	systemTray_ = new QtSystemTray();
-- 
cgit v0.10.2-6-g49f6