From af53136d04a72b05efd8c51cfa5573f97e93c6cf Mon Sep 17 00:00:00 2001
From: Kevin Smith <git@kismith.co.uk>
Date: Mon, 15 Jun 2009 22:31:15 +0100
Subject: Moving towards allowing tabs to be closed. At the moment they'll then
 be lost to tabbing forever, though.


diff --git a/Swift/QtUI/QtChatTabs.cpp b/Swift/QtUI/QtChatTabs.cpp
index f52a3fe..78cdf2d 100644
--- a/Swift/QtUI/QtChatTabs.cpp
+++ b/Swift/QtUI/QtChatTabs.cpp
@@ -7,8 +7,11 @@ namespace Swift {
 QtChatTabs::QtChatTabs() : QWidget() {
 	tabs_ = new QTabWidget(this);
 #if QT_VERSION >= 0x040500
-	//For Macs, change the tab rendering.
+	/*For Macs, change the tab rendering.*/
 	tabs_->setDocumentMode(true);
+	/*Closable tabs are only in Qt4.5 and later*/
+	tabs_->setTabsClosable(true);
+	connect(tabs_, SIGNAL(tabCloseRequested(int)), this, SLOT(handleTabCloseRequested(int)));
 #endif
 	QVBoxLayout *layout = new QVBoxLayout;
 	layout->setSpacing(0);
@@ -20,14 +23,29 @@ QtChatTabs::QtChatTabs() : QWidget() {
 
 void QtChatTabs::addTab(QtTabbable* tab) {
 	tabs_->addTab(tab, tab->windowTitle());
-	connect(tab, SIGNAL(titleUpdated()), this, SLOT(tabTitleUpdated()));
+	connect(tab, SIGNAL(titleUpdated()), this, SLOT(handleTabTitleUpdated()));
+	connect(tab, SIGNAL(windowClosing()), this, SLOT(handleTabClosing()));
 }
 
-void QtChatTabs::tabClosing() {
+void QtChatTabs::handleTabClosing() {
+	QWidget* widget = qobject_cast<QWidget*>(sender());
+	if (!widget) {
+		return;
+	}
+	int index = tabs_->indexOf(widget);
+	if (index < 0) {
+		return;
+	}
+	tabs_->removeTab(index);
+}
 
+void QtChatTabs::handleTabCloseRequested(int index) {
+	QWidget* widget = tabs_->widget(index);
+	tabs_->removeTab(index);
+	widget->hide();
 }
 
-void QtChatTabs::tabTitleUpdated() {
+void QtChatTabs::handleTabTitleUpdated() {
 	QWidget* widget = qobject_cast<QWidget*>(sender());
 	if (!widget) {
 		return;
diff --git a/Swift/QtUI/QtChatTabs.h b/Swift/QtUI/QtChatTabs.h
index 39a3e44..37acc91 100644
--- a/Swift/QtUI/QtChatTabs.h
+++ b/Swift/QtUI/QtChatTabs.h
@@ -12,8 +12,9 @@ namespace Swift {
 			void addTab(QtTabbable* tab);
 
 		private slots:
-			void tabClosing();
-			void tabTitleUpdated();
+			void handleTabClosing();
+			void handleTabTitleUpdated();
+			void handleTabCloseRequested(int index);
 		private:
 			QTabWidget* tabs_; 
 	};
diff --git a/Swift/QtUI/QtTabbable.h b/Swift/QtUI/QtTabbable.h
index dfae498..9894bfe 100644
--- a/Swift/QtUI/QtTabbable.h
+++ b/Swift/QtUI/QtTabbable.h
@@ -11,5 +11,6 @@ namespace Swift {
 
 		signals:
 			void titleUpdated();
+			void windowClosing();
 	};
 }
-- 
cgit v0.10.2-6-g49f6