aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJohn Rennie <john.rennie@ratsauce.co.uk>2013-08-02 00:12:52 -0700
committerJohn Rennie <john.rennie@ratsauce.co.uk>2013-08-02 00:12:52 -0700
commitbb4fdbb5d14cebf08ac04885431e375af5270775 (patch)
tree7d74cdbb1a330a7ca29411775384a64f0ef93816
parent294063daf24a3df11d9f18bcdddc3ea4393d9088 (diff)
parent4bb0f755c403425bf6880006c17410d44130659f (diff)
Merge pull request #3029 from jhsrennie/keyedpaste
Add OnPasteClipboard method to CGUIDialogKeyboardGeneric
-rw-r--r--xbmc/dialogs/GUIDialogKeyboardGeneric.cpp48
-rw-r--r--xbmc/dialogs/GUIDialogKeyboardGeneric.h1
2 files changed, 49 insertions, 0 deletions
diff --git a/xbmc/dialogs/GUIDialogKeyboardGeneric.cpp b/xbmc/dialogs/GUIDialogKeyboardGeneric.cpp
index e8749b79f4..4fbe0c8eab 100644
--- a/xbmc/dialogs/GUIDialogKeyboardGeneric.cpp
+++ b/xbmc/dialogs/GUIDialogKeyboardGeneric.cpp
@@ -34,6 +34,9 @@
#include "windowing/WindowingFactory.h"
#include "utils/CharsetConverter.h"
+#if defined(TARGET_DARWIN)
+#include "osx/CocoaInterface.h"
+#endif
// Symbol mapping (based on MS virtual keyboard - may need improving)
static char symbol_map[37] = ")!@#$%^&*([]{}-_=+;:\'\",.<>/?\\|`~ ";
@@ -145,6 +148,10 @@ bool CGUIDialogKeyboardGeneric::OnAction(const CAction &action)
{
OnRemoteNumberClick(action.GetID());
}
+ else if (action.GetID() == ACTION_PASTE)
+ {
+ OnPasteClipboard();
+ }
else if (action.GetID() >= KEY_VKEY && action.GetID() < KEY_ASCII)
{ // input from the keyboard (vkey, not ascii)
if (!m_strEditing.IsEmpty())
@@ -740,3 +747,44 @@ bool CGUIDialogKeyboardGeneric::ShowAndGetInput(char_callback_t pCallback, const
}
else return false;
}
+
+void CGUIDialogKeyboardGeneric::OnPasteClipboard(void)
+{
+ CStdStringW pasted_text;
+
+// Get text from the clipboard
+#if defined(TARGET_DARWIN_OSX)
+ const char *szStr = Cocoa_Paste();
+ if (szStr)
+ pasted_text = szStr;
+#elif defined TARGET_WINDOWS
+ if (OpenClipboard(NULL))
+ {
+ HGLOBAL hglb = GetClipboardData(CF_UNICODETEXT);
+ if (hglb != NULL)
+ {
+ LPWSTR lpwstr = (LPWSTR) GlobalLock(hglb);
+ if (lpwstr != NULL)
+ {
+ pasted_text = lpwstr;
+ GlobalUnlock(hglb);
+ }
+ }
+ CloseClipboard();
+ }
+#endif
+
+ // Insert the pasted text at the current cursor position.
+ if (pasted_text.length() > 0)
+ {
+ int i = GetCursorPos();
+ CStdStringW left_end = m_strEdit.Left(i);
+ CStdStringW right_end = m_strEdit.Right(m_strEdit.length() - i);
+
+ m_strEdit = left_end;
+ m_strEdit.append(pasted_text);
+ m_strEdit.append(right_end);
+ UpdateLabel();
+ MoveCursor(pasted_text.length());
+ }
+}
diff --git a/xbmc/dialogs/GUIDialogKeyboardGeneric.h b/xbmc/dialogs/GUIDialogKeyboardGeneric.h
index ebe0f3993f..47df71fa05 100644
--- a/xbmc/dialogs/GUIDialogKeyboardGeneric.h
+++ b/xbmc/dialogs/GUIDialogKeyboardGeneric.h
@@ -46,6 +46,7 @@ class CGUIDialogKeyboardGeneric : public CGUIDialog, public CGUIKeyboard
bool IsConfirmed() { return m_bIsConfirmed; };
void SetHiddenInput(bool hiddenInput) { m_hiddenInput = hiddenInput; };
void Character(WCHAR wch);
+ void OnPasteClipboard(void);
protected:
virtual void OnInitWindow();