diff options
Diffstat (limited to 'win32/ScintillaWin.cxx')
-rw-r--r-- | win32/ScintillaWin.cxx | 23 |
1 files changed, 12 insertions, 11 deletions
diff --git a/win32/ScintillaWin.cxx b/win32/ScintillaWin.cxx index b10193d4c..120df13eb 100644 --- a/win32/ScintillaWin.cxx +++ b/win32/ScintillaWin.cxx @@ -141,6 +141,7 @@ class ScintillaWin : virtual void NotifyParent(SCNotification scn); virtual void NotifyDoubleClick(Point pt, bool shift); virtual void Copy(); + virtual bool CanPaste(); virtual void Paste(); virtual void CreateCallTipWindow(PRectangle rc); virtual void AddToPopUp(const char *label, int cmd = 0, bool enabled = true); @@ -553,7 +554,7 @@ LRESULT ScintillaWin::WndProc(unsigned int iMessage, unsigned long wParam, long return ::DefWindowProc(wMain.GetID(), iMessage, wParam, lParam); case WM_IME_CHAR: { - AddCharBytes(HIBYTE(wParam), LOBYTE(wParam)); + AddCharBytes(HIBYTE(wParam), LOBYTE(wParam)); return 0; } @@ -565,16 +566,8 @@ LRESULT ScintillaWin::WndProc(unsigned int iMessage, unsigned long wParam, long #endif break; - case EM_CANPASTE: { - ::OpenClipboard(wMain.GetID()); - HGLOBAL hmemSelection = ::GetClipboardData(CF_TEXT); - if (!hmemSelection && IsUnicodeMode()) - hmemSelection = ::GetClipboardData(CF_UNICODETEXT); - if (hmemSelection) - ::GlobalUnlock(hmemSelection); - ::CloseClipboard(); - return hmemSelection != 0; - } + case EM_CANPASTE: + return CanPaste(); case EM_SCROLL: { int topStart = topLine; @@ -753,6 +746,14 @@ void ScintillaWin::Copy() { } } +bool ScintillaWin::CanPaste() { + if (::IsClipboardFormatAvailable(CF_TEXT)) + return true; + if (IsUnicodeMode()) + return ::IsClipboardFormatAvailable(CF_UNICODETEXT); + return false; +} + void ScintillaWin::Paste() { pdoc->BeginUndoAction(); int selStart = SelectionStart(); |