diff options
| author | nyamatongwe <unknown> | 2001-02-06 02:16:11 +0000 | 
|---|---|---|
| committer | nyamatongwe <unknown> | 2001-02-06 02:16:11 +0000 | 
| commit | c274332afa3c5d28ae43fa280d60fa7c52d5666b (patch) | |
| tree | d776419273883b6292745c8ce829638f827d7766 | |
| parent | a90a236a6fe722717bdecb89d98dde6e961a5ddb (diff) | |
| download | scintilla-mirror-c274332afa3c5d28ae43fa280d60fa7c52d5666b.tar.gz | |
Made SCI_CANPASTE and EM_CANPASTE work correctly using
IsClipboardFormatAvailable on Windows.
| -rw-r--r-- | src/Editor.cxx | 6 | ||||
| -rw-r--r-- | src/Editor.h | 1 | ||||
| -rw-r--r-- | win32/ScintillaWin.cxx | 23 | 
3 files changed, 18 insertions, 12 deletions
| diff --git a/src/Editor.cxx b/src/Editor.cxx index c638ca5b3..67d8ea856 100644 --- a/src/Editor.cxx +++ b/src/Editor.cxx @@ -1643,6 +1643,10 @@ void Editor::PasteRectangular(int pos, const char *ptr, int len) {  	SetEmptySelection(insertPos);  } +bool Editor::CanPaste() { +	return !pdoc->IsReadOnly(); +} +  void Editor::Clear() {  	if (currentPos == anchor) {  		DelChar(); @@ -3525,7 +3529,7 @@ long Editor::WndProc(unsigned int iMessage, unsigned long wParam, long lParam) {  	case EM_CANPASTE:  	case SCI_CANPASTE: -		return !pdoc->IsReadOnly(); +		return CanPaste();  	case EM_CHARFROMPOS: {  			if (lParam == 0) diff --git a/src/Editor.h b/src/Editor.h index 0a37c8b8f..4e1ffc782 100644 --- a/src/Editor.h +++ b/src/Editor.h @@ -221,6 +221,7 @@ protected:	// ScintillaBase subclass needs access to much of Editor  	void Cut();  	void PasteRectangular(int pos, const char *ptr, int len);  	virtual void Copy() = 0; +	virtual bool CanPaste();  	virtual void Paste() = 0;  	void Clear();  	void SelectAll(); 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(); | 
