From 5af9a5c5cd4d74b29ce5bf4882b5b8391f09b468 Mon Sep 17 00:00:00 2001
From: Tobias Markmann <tm@ayena.de>
Date: Mon, 23 Apr 2012 16:23:14 +0200
Subject: Move accelerator handling for active-,next-,previous- and close-tab
 into QtTabbable.

Resolves: #1091

License: This patch is BSD-licensed, see http://www.opensource.org/licenses/bsd-license.php

diff --git a/Swift/QtUI/QtChatWindow.cpp b/Swift/QtUI/QtChatWindow.cpp
index e4cb004..0d94ecd 100644
--- a/Swift/QtUI/QtChatWindow.cpp
+++ b/Swift/QtUI/QtChatWindow.cpp
@@ -216,26 +216,15 @@ void QtChatWindow::setTabComplete(TabComplete* completer) {
 }
 
 void QtChatWindow::handleKeyPressEvent(QKeyEvent* event) {
+	event->ignore();
+	QtTabbable::handleKeyPressEvent(event);
+	if (event->isAccepted()) {
+		return;
+	}
+	event->accept();
+
 	int key = event->key();
-	Qt::KeyboardModifiers modifiers = event->modifiers();
-	if (key == Qt::Key_W && modifiers == Qt::ControlModifier) {
-		close();
-	} else if (
-		(key == Qt::Key_PageUp && modifiers == Qt::ControlModifier)
-//		|| (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_Tab && modifiers == Qt::ControlModifier)
-	) {
-		emit requestNextTab();
-	} else if (
-		(key == Qt::Key_A && modifiers == Qt::AltModifier)
-	)  {
-		emit requestActiveTab();
-	} else if (key == Qt::Key_Tab) {
+	if (key == Qt::Key_Tab) {
 		tabComplete();
 	} else if ((key == Qt::Key_Up) && input_->toPlainText().isEmpty() && !(lastSentMessage_.isEmpty())) {
 		beginCorrection();
diff --git a/Swift/QtUI/QtTabbable.cpp b/Swift/QtUI/QtTabbable.cpp
index 07a17c1..84a5100 100644
--- a/Swift/QtUI/QtTabbable.cpp
+++ b/Swift/QtUI/QtTabbable.cpp
@@ -25,4 +25,36 @@ bool QtTabbable::isWidgetSelected() {
 	return parent ? parent->getCurrentTab() == this : isAncestorOf(QApplication::focusWidget());
 }
 
+void QtTabbable::keyPressEvent(QKeyEvent *event) {
+	handleKeyPressEvent(event);
+}
+
+void QtTabbable::handleKeyPressEvent(QKeyEvent *event) {
+	event->ignore();
+	int key = event->key();
+	Qt::KeyboardModifiers modifiers = event->modifiers();
+	if (key == Qt::Key_W && modifiers == Qt::ControlModifier) {
+		close();
+		event->accept();
+	} else if (
+		(key == Qt::Key_PageUp && modifiers == Qt::ControlModifier)
+//		|| (key == Qt::Key_Left && modifiers == (Qt::ControlModifier & Qt::ShiftModifier))
+	) {
+		emit requestPreviousTab();
+		event->accept();
+	} else if (
+		(key == Qt::Key_PageDown && modifiers == Qt::ControlModifier)
+//		|| (key == Qt::Key_Right && modifiers == (Qt::ControlModifier & Qt::ShiftModifier)
+		|| (key == Qt::Key_Tab && modifiers == Qt::ControlModifier)
+	) {
+		emit requestNextTab();
+		event->accept();
+	} else if (
+		(key == Qt::Key_A && modifiers == Qt::AltModifier)
+	)  {
+		emit requestActiveTab();
+		event->accept();
+	}
+}
+
 }
diff --git a/Swift/QtUI/QtTabbable.h b/Swift/QtUI/QtTabbable.h
index e236a0b..baab15c 100644
--- a/Swift/QtUI/QtTabbable.h
+++ b/Swift/QtUI/QtTabbable.h
@@ -6,6 +6,7 @@
 
 #pragma once
 
+#include <QKeyEvent>
 #include <QWidget>
 
 
@@ -20,6 +21,10 @@ namespace Swift {
 			virtual int getCount() {return 0;}
 		protected:
 			QtTabbable() : QWidget() {};
+			void keyPressEvent(QKeyEvent* event);
+
+		protected slots:
+			void handleKeyPressEvent(QKeyEvent* event);
 
 		signals:
 			void titleUpdated();
-- 
cgit v0.10.2-6-g49f6