diff options
author | John Rennie <john.rennie@ratsauce.co.uk> | 2013-08-02 00:12:52 -0700 |
---|---|---|
committer | John Rennie <john.rennie@ratsauce.co.uk> | 2013-08-02 00:12:52 -0700 |
commit | bb4fdbb5d14cebf08ac04885431e375af5270775 (patch) | |
tree | 7d74cdbb1a330a7ca29411775384a64f0ef93816 | |
parent | 294063daf24a3df11d9f18bcdddc3ea4393d9088 (diff) | |
parent | 4bb0f755c403425bf6880006c17410d44130659f (diff) |
Merge pull request #3029 from jhsrennie/keyedpaste
Add OnPasteClipboard method to CGUIDialogKeyboardGeneric
-rw-r--r-- | xbmc/dialogs/GUIDialogKeyboardGeneric.cpp | 48 | ||||
-rw-r--r-- | xbmc/dialogs/GUIDialogKeyboardGeneric.h | 1 |
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(); |