From 25ba37d0fd3ed298d5a0874718f878668a1be62e Mon Sep 17 00:00:00 2001
From: Kevin Smith <git@kismith.co.uk>
Date: Sun, 25 Jul 2010 15:52:51 +0100
Subject: ChatTabs improvements.

Resolves: #504
Resolves: #507

diff --git a/Swift/QtUI/QtChatTabs.cpp b/Swift/QtUI/QtChatTabs.cpp
index 138e815..48c882f 100644
--- a/Swift/QtUI/QtChatTabs.cpp
+++ b/Swift/QtUI/QtChatTabs.cpp
@@ -63,6 +63,7 @@ void QtChatTabs::addTab(QtTabbable* tab) {
 	connect(tab, SIGNAL(windowOpening()), this, SLOT(handleWidgetShown()));
 	connect(tab, SIGNAL(wantsToActivate()), this, SLOT(handleWantsToActivate()));
 	connect(tab, SIGNAL(requestNextTab()), this, SLOT(handleRequestedNextTab()));
+	connect(tab, SIGNAL(requestActiveTab()), this, SLOT(handleRequestedActiveTab()));
 	connect(tab, SIGNAL(requestPreviousTab()), this, SLOT(handleRequestedPreviousTab()));
 	setSizePolicy(policy);
 }
@@ -117,7 +118,28 @@ void QtChatTabs::handleRequestedPreviousTab() {
 void QtChatTabs::handleRequestedNextTab() {
 	int newIndex = tabs_->currentIndex() + 1;
 	tabs_->setCurrentIndex(newIndex < tabs_->count() ? newIndex : 0);
-	
+}
+
+void QtChatTabs::handleRequestedActiveTab() {
+	QtTabbable::AlertType types[] = {QtTabbable::WaitingActivity, QtTabbable::ImpendingActivity};
+	bool finished = false;
+	for (int j = 0; j < 2; j++) {
+		bool looped = false;
+		for (int i = tabs_->currentIndex() + 1; !finished && i != tabs_->currentIndex(); i++) {
+			if (i >= tabs_->count()) {
+				if (looped) {
+					break;
+				}
+				looped = true;
+				i = 0;
+			}
+			if (qobject_cast<QtTabbable*>(tabs_->widget(i))->getWidgetAlertState() == types[j]) {
+				tabs_->setCurrentIndex(i);
+				finished = true;
+				break;
+			}
+		}
+	}
 }
 
 
diff --git a/Swift/QtUI/QtChatTabs.h b/Swift/QtUI/QtChatTabs.h
index 41d7b2f0..69dd8d1 100644
--- a/Swift/QtUI/QtChatTabs.h
+++ b/Swift/QtUI/QtChatTabs.h
@@ -37,6 +37,7 @@ namespace Swift {
 			void handleWantsToActivate();
 			void handleRequestedPreviousTab();
 			void handleRequestedNextTab();
+			void handleRequestedActiveTab();
 
 		private:
 			void checkForFirstShow();
diff --git a/Swift/QtUI/QtChatWindow.cpp b/Swift/QtUI/QtChatWindow.cpp
index 5e96b3e..fdf1ebc 100644
--- a/Swift/QtUI/QtChatWindow.cpp
+++ b/Swift/QtUI/QtChatWindow.cpp
@@ -96,14 +96,19 @@ void QtChatWindow::handleKeyPressEvent(QKeyEvent* event) {
 		close();
 	} else if (
 		(key == Qt::Key_PageUp && modifiers == Qt::ControlModifier)
-		|| (key == Qt::Key_Left && modifiers == (Qt::ControlModifier & Qt::ShiftModifier))
+//		|| (key == Qt::Key_Left && modifiers == (Qt::ControlModifier & Qt::ShiftModifier))
 	) {
 		emit requestPreviousTab();
 	} else if (
 		(key == Qt::Key_PageDown && modifiers == Qt::ControlModifier)
-		|| (key == Qt::Key_Right && modifiers == (Qt::ControlModifier & Qt::ShiftModifier))
+//		|| (key == Qt::Key_Right && modifiers == (Qt::ControlModifier & Qt::ShiftModifier)
+		|| (key == Qt::Key_Tab && modifiers == Qt::ControlModifier)
 	) {
 		emit requestNextTab();
+	} else if (
+		(key == Qt::Key_A && modifiers == Qt::AltModifier)
+	)  {
+		emit requestActiveTab();
 	} else if (key == Qt::Key_Tab) {
 		tabComplete();
 	} else {
diff --git a/Swift/QtUI/QtTabbable.h b/Swift/QtUI/QtTabbable.h
index 9309841..1a1170f 100644
--- a/Swift/QtUI/QtTabbable.h
+++ b/Swift/QtUI/QtTabbable.h
@@ -29,5 +29,6 @@ namespace Swift {
 			void wantsToActivate();
 			void requestPreviousTab();
 			void requestNextTab();
+			void requestActiveTab();
 	};
 }
diff --git a/Swift/QtUI/QtTextEdit.cpp b/Swift/QtUI/QtTextEdit.cpp
index 89fc68f..f94d80d 100644
--- a/Swift/QtUI/QtTextEdit.cpp
+++ b/Swift/QtUI/QtTextEdit.cpp
@@ -27,8 +27,10 @@ void QtTextEdit::keyPressEvent(QKeyEvent* event) {
 			   || (key == Qt::Key_W && modifiers == Qt::ControlModifier)
 			   || (key == Qt::Key_PageUp && modifiers == Qt::ControlModifier)
 			   || (key == Qt::Key_PageDown && modifiers == Qt::ControlModifier)
-			   || (key == Qt::Key_Left && modifiers == (Qt::ControlModifier | Qt::ShiftModifier))
-			   || (key == Qt::Key_Right && modifiers == (Qt::ControlModifier | Qt::ShiftModifier))
+//			   || (key == Qt::Key_Left && modifiers == (Qt::ControlModifier | Qt::ShiftModifier))
+//			   || (key == Qt::Key_Right && modifiers == (Qt::ControlModifier | Qt::ShiftModifier))
+			   || (key == Qt::Key_Tab && modifiers == Qt::ControlModifier)
+			   || (key == Qt::Key_A && modifiers == Qt::AltModifier)
 			   || (key == Qt::Key_Tab)
 	) {
 		emit unhandledKeyPressEvent(event);
-- 
cgit v0.10.2-6-g49f6