From 34ce2c58ecfe9bfb04688af321e68f80236d104d Mon Sep 17 00:00:00 2001
From: Thorbjørn Lindeijer <thorbjorn@lindeijer.nl>
Date: Thu, 25 Feb 2010 23:09:41 +0100
Subject: Handle Ctrl+v for pasting in text fields

Reviewed-by: Jared Adams
---
 src/gui/widgets/textfield.cpp | 16 ++++++++++++++++
 src/gui/widgets/textfield.h   |  2 ++
 2 files changed, 18 insertions(+)

(limited to 'src/gui')

diff --git a/src/gui/widgets/textfield.cpp b/src/gui/widgets/textfield.cpp
index 803de396..278b4cb9 100644
--- a/src/gui/widgets/textfield.cpp
+++ b/src/gui/widgets/textfield.cpp
@@ -31,6 +31,7 @@
 #include "resources/image.h"
 #include "resources/resourcemanager.h"
 
+#include "utils/copynpaste.h"
 #include "utils/dtor.h"
 
 #include <guichan/font.hpp>
@@ -250,8 +251,23 @@ void TextField::keyPressed(gcn::KeyEvent &keyEvent)
             if (mLoseFocusOnTab)
                 return;
             break;
+
+        case 22: // Control code 22, SYNCHRONOUS IDLE, sent on Ctrl+v
+            handlePaste();
+            break;
     }
 
     keyEvent.consume();
     fixScroll();
 }
+
+void TextField::handlePaste()
+{
+    std::string text = getText();
+    std::string::size_type caretPos = getCaretPosition();
+
+    if (RetrieveBuffer(text, caretPos)) {
+        setText(text);
+        setCaretPosition(caretPos);
+    }
+}
diff --git a/src/gui/widgets/textfield.h b/src/gui/widgets/textfield.h
index c66139cd..58e37f5c 100644
--- a/src/gui/widgets/textfield.h
+++ b/src/gui/widgets/textfield.h
@@ -91,6 +91,8 @@ class TextField : public gcn::TextField
         int getValue() const;
 
     private:
+        void handlePaste();
+
         static int instances;
         static float mAlpha;
         static ImageRect skin;
-- 
cgit v1.2.3-70-g09d2