X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/0c5b83b0fa94deaa77ff72760bb9ba0e51a03202..57530dba8561c3133657ea946665b2d6a56279b8:/src/stc/ScintillaWX.cpp diff --git a/src/stc/ScintillaWX.cpp b/src/stc/ScintillaWX.cpp index a633e35e70..5a256340ed 100644 --- a/src/stc/ScintillaWX.cpp +++ b/src/stc/ScintillaWX.cpp @@ -63,6 +63,11 @@ void wxSTCDropTarget::OnLeave() { #endif +#ifdef __WXGTK__ +#undef wxSTC_USE_POPUP +#define wxSTC_USE_POPUP 0 +#endif + #if wxUSE_POPUPWIN && wxSTC_USE_POPUP #include #define wxSTCCallTipBase wxPopupWindow @@ -80,6 +85,10 @@ public: m_ct = ct; } + ~wxSTCCallTip() { + if (HasCapture()) ReleaseMouse(); + } + void OnPaint(wxPaintEvent& evt) { wxPaintDC dc(this); Surface* surfaceWindow = Surface::Allocate(); @@ -106,12 +115,10 @@ public: virtual bool Show( bool show = TRUE ) { bool retval = wxSTCCallTipBase::Show(show); - if (show) { + if (show) CaptureMouse(); - } - else { - ReleaseMouse(); - } + else + if (HasCapture()) ReleaseMouse(); return retval; } @@ -319,10 +326,12 @@ void ScintillaWX::Copy() { if (currentPos != anchor) { SelectionText st; CopySelectionRange(&st); - wxTheClipboard->Open(); - wxString text = stc2wx(st.s, st.len); - wxTheClipboard->SetData(new wxTextDataObject(text)); - wxTheClipboard->Close(); + if (wxTheClipboard->Open()) { + wxTheClipboard->UsePrimarySelection(); + wxString text = stc2wx(st.s, st.len); + wxTheClipboard->SetData(new wxTextDataObject(text)); + wxTheClipboard->Close(); + } } } @@ -332,11 +341,13 @@ void ScintillaWX::Paste() { ClearSelection(); wxTextDataObject data; - bool gotData; + bool gotData = FALSE; - wxTheClipboard->Open(); - gotData = wxTheClipboard->GetData(data); - wxTheClipboard->Close(); + if (wxTheClipboard->Open()) { + wxTheClipboard->UsePrimarySelection(); + gotData = wxTheClipboard->GetData(data); + wxTheClipboard->Close(); + } if (gotData) { wxWX2MBbuf buf = (wxWX2MBbuf)wx2stc(data.GetText()); int len = strlen(buf); @@ -351,12 +362,18 @@ void ScintillaWX::Paste() { bool ScintillaWX::CanPaste() { - bool canPaste; + bool canPaste = FALSE; + bool didOpen; - wxTheClipboard->Open(); - canPaste = wxTheClipboard->IsSupported(wxUSE_UNICODE ? wxDF_UNICODETEXT : wxDF_TEXT); - wxTheClipboard->Close(); + if ( (didOpen = !wxTheClipboard->IsOpened()) ) + wxTheClipboard->Open(); + if (wxTheClipboard->IsOpened()) { + wxTheClipboard->UsePrimarySelection(); + canPaste = wxTheClipboard->IsSupported(wxUSE_UNICODE ? wxDF_UNICODETEXT : wxDF_TEXT); + if (didOpen) + wxTheClipboard->Close(); + } return canPaste; } @@ -464,8 +481,9 @@ void ScintillaWX::DoVScroll(int type, int pos) { ScrollTo(topLineNew); } - -void ScintillaWX::DoMouseWheel(int rotation, int delta, int linesPerAction, int ctrlDown) { +void ScintillaWX::DoMouseWheel(int rotation, int delta, + int linesPerAction, int ctrlDown, + bool isPageScroll ) { int topLineNew = topLine; int lines; @@ -482,7 +500,10 @@ void ScintillaWX::DoMouseWheel(int rotation, int delta, int linesPerAction, int lines = wheelRotation / delta; wheelRotation -= lines * delta; if (lines != 0) { - lines *= linesPerAction; + if (isPageScroll) + lines = lines * LinesOnScreen(); // lines is either +1 or -1 + else + lines *= linesPerAction; topLineNew -= lines; ScrollTo(topLineNew); } @@ -527,7 +548,7 @@ void ScintillaWX::DoAddChar(int key) { } int ScintillaWX::DoKeyDown(int key, bool shift, bool ctrl, bool alt, bool* consumed) { -#ifdef __WXGTK__ +#if defined(__WXGTK__) || defined(__WXMAC__) // Ctrl chars (A-Z) end up with the wrong keycode on wxGTK... if (ctrl && key >= 1 && key <= 26) key += 'A' - 1; @@ -575,7 +596,8 @@ void ScintillaWX::DoCommand(int ID) { void ScintillaWX::DoContextMenu(Point pt) { - ContextMenu(pt); + if (displayPopupMenu) + ContextMenu(pt); } void ScintillaWX::DoOnListBox() {