From 0e29a6c750f30a089923b6f16d303b9640e0f589 Mon Sep 17 00:00:00 2001
From: Kevin Smith <git@kismith.co.uk>
Date: Sun, 10 Nov 2013 15:56:22 +0000
Subject: Make Ctrl-K to delete to end of the line in chat input.

Change-Id: I04f34018fd99c687a41724d7a32d2b640757359f

diff --git a/Swift/QtUI/QtTabbable.cpp b/Swift/QtUI/QtTabbable.cpp
index 5659157..124d1b4 100644
--- a/Swift/QtUI/QtTabbable.cpp
+++ b/Swift/QtUI/QtTabbable.cpp
@@ -13,17 +13,10 @@
 #include <Swiften/Base/Platform.h>
 
 #include <Swift/QtUI/QtChatTabs.h>
+#include <Swift/QtUI/QtUtilities.h>
 
 namespace Swift {
 
-namespace {
-#ifdef SWIFTEN_PLATFORM_MACOSX
-const Qt::KeyboardModifier ctrlHardwareKeyModifier = Qt::MetaModifier;
-#else
-const Qt::KeyboardModifier ctrlHardwareKeyModifier = Qt::ControlModifier;
-#endif
-}
-
 QtTabbable::QtTabbable() : QWidget() {
 	shortcuts << new QShortcut(QKeySequence(Qt::CTRL + Qt::Key_W), window(), SLOT(close()));
 	shortcuts << new QShortcut(QKeySequence(Qt::CTRL + Qt::Key_PageUp), window(), SIGNAL(requestPreviousTab()));
@@ -52,9 +45,9 @@ bool QtTabbable::event(QEvent* event) {
 	if (keyEvent) {
 		// According to Qt's focus documentation, one can only override CTRL+TAB via reimplementing QWidget::event().
 #ifdef SWIFTEN_PLATFORM_LINUX
-		if (keyEvent->modifiers() == ctrlHardwareKeyModifier && keyEvent->key() == Qt::Key_Tab && event->type() != QEvent::KeyRelease) {
+		if (keyEvent->modifiers() == QtUtilities::ctrlHardwareKeyModifier && keyEvent->key() == Qt::Key_Tab && event->type() != QEvent::KeyRelease) {
 #else
-		if (keyEvent->modifiers() == ctrlHardwareKeyModifier && keyEvent->key() == Qt::Key_Tab) {
+		if (keyEvent->modifiers() == QtUtilities::ctrlHardwareKeyModifier && keyEvent->key() == Qt::Key_Tab) {
 #endif
 			emit requestNextTab();
 			return true;
diff --git a/Swift/QtUI/QtTextEdit.cpp b/Swift/QtUI/QtTextEdit.cpp
index 2c4677e..cac8bb4 100644
--- a/Swift/QtUI/QtTextEdit.cpp
+++ b/Swift/QtUI/QtTextEdit.cpp
@@ -1,28 +1,31 @@
 /*
- * Copyright (c) 2010 Kevin Smith
+ * Copyright (c) 2010-2013 Kevin Smith
  * Licensed under the GNU General Public License v3.
  * See Documentation/Licenses/GPLv3.txt for more information.
  */
 
+#include <Swift/QtUI/QtTextEdit.h>
+
 #include <boost/tuple/tuple.hpp>
 #include <boost/algorithm/string.hpp>
 #include <boost/bind.hpp>
 
+#include <QApplication>
+#include <QFontMetrics>
+#include <QKeyEvent>
+#include <QDebug>
+#include <QMenu>
+
 #include <Swiften/Base/foreach.h>
 
 #include <SwifTools/SpellCheckerFactory.h>
 #include <SwifTools/SpellChecker.h>
 
-#include <Swift/QtUI/QtTextEdit.h>
-#include <Swift/QtUI/QtSwiftUtil.h>
-#include <Swift/QtUI/QtSpellCheckerWindow.h>
 #include <Swift/Controllers/SettingConstants.h>
 
-#include <QApplication>
-#include <QFontMetrics>
-#include <QKeyEvent>
-#include <QDebug>
-#include <QMenu>
+#include <Swift/QtUI/QtSpellCheckerWindow.h>
+#include <Swift/QtUI/QtSwiftUtil.h>
+#include <Swift/QtUI/QtUtilities.h>
 
 namespace Swift {
 
@@ -63,6 +66,11 @@ void QtTextEdit::keyPressEvent(QKeyEvent* event) {
 		emit unhandledKeyPressEvent(event);
 		QTextEdit::keyPressEvent(event);
 	}
+	else if ((key == Qt::Key_K && modifiers == QtUtilities::ctrlHardwareKeyModifier)) {
+		QTextCursor cursor = textCursor();
+		cursor.setPosition(toPlainText().size(), QTextCursor::KeepAnchor);
+		cursor.removeSelectedText();
+	}
 	else {
 		QTextEdit::keyPressEvent(event);
 #ifdef HAVE_SPELLCHECKER
diff --git a/Swift/QtUI/QtUtilities.cpp b/Swift/QtUI/QtUtilities.cpp
index e9aa4a4..5ae1b13 100644
--- a/Swift/QtUI/QtUtilities.cpp
+++ b/Swift/QtUI/QtUtilities.cpp
@@ -18,6 +18,7 @@
 
 namespace QtUtilities {
 
+
 void setX11Resource(QWidget* widget, const QString& c) {
 #if defined (Q_OS_UNIX) && !defined(Q_OS_MAC)
 	char res_class[] = SWIFT_APPLICATION_NAME;
diff --git a/Swift/QtUI/QtUtilities.h b/Swift/QtUI/QtUtilities.h
index 40c16bc..6f82dfd 100644
--- a/Swift/QtUI/QtUtilities.h
+++ b/Swift/QtUI/QtUtilities.h
@@ -9,7 +9,14 @@
 class QWidget;
 class QString;
 
+#include <QKeyEvent>
+
 namespace QtUtilities {
 	void setX11Resource(QWidget* widget, const QString& c);
 	QString htmlEscape(const QString& s);
+	#ifdef SWIFTEN_PLATFORM_MACOSX
+	const Qt::KeyboardModifier ctrlHardwareKeyModifier = Qt::MetaModifier;
+	#else
+	const Qt::KeyboardModifier ctrlHardwareKeyModifier = Qt::ControlModifier;
+	#endif
 }
-- 
cgit v0.10.2-6-g49f6