X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/2b5f62a0b2db198609b45dec622a018dae37008e..fc17ff87a1fd5021d47c6cd610cf750bf6821fbd:/contrib/src/stc/ScintillaWX.cpp diff --git a/contrib/src/stc/ScintillaWX.cpp b/contrib/src/stc/ScintillaWX.cpp index e389534c80..12ad21dafe 100644 --- a/contrib/src/stc/ScintillaWX.cpp +++ b/contrib/src/stc/ScintillaWX.cpp @@ -139,7 +139,6 @@ END_EVENT_TABLE() ScintillaWX::ScintillaWX(wxStyledTextCtrl* win) { - capturedMouse = false; wMain = win; stc = win; wheelRotation = 0; @@ -221,16 +220,15 @@ void ScintillaWX::SetTicking(bool on) { void ScintillaWX::SetMouseCapture(bool on) { - if (on && !capturedMouse) + if (on && !stc->HasCapture()) stc->CaptureMouse(); - else if (!on && capturedMouse) + else if (!on && stc->HasCapture()) stc->ReleaseMouse(); - capturedMouse = on; } bool ScintillaWX::HaveMouseCapture() { - return capturedMouse; + return stc->HasCapture(); } @@ -407,6 +405,11 @@ void ScintillaWX::AddToPopUp(const char *label, int cmd, bool enabled) { // This is called by the Editor base class whenever something is selected void ScintillaWX::ClaimSelection() { +#if 0 + // Until wxGTK is able to support using both the primary selection and the + // clipboard at the same time I think it causes more problems than it is + // worth to implement this method. Selecting text should not clear the + // clipboard. --Robin #ifdef __WXGTK__ // Put the selected text in the PRIMARY selection if (currentPos != anchor) { @@ -421,6 +424,7 @@ void ScintillaWX::ClaimSelection() { } } #endif +#endif } @@ -429,13 +433,45 @@ long ScintillaWX::DefWndProc(unsigned int /*iMessage*/, unsigned long /*wParam*/ } long ScintillaWX::WndProc(unsigned int iMessage, unsigned long wParam, long lParam) { -// switch (iMessage) { -// case EM_CANPASTE: -// return CanPaste(); -// default: - return ScintillaBase::WndProc(iMessage, wParam, lParam); -// } -// return 0; + switch (iMessage) { + case SCI_CALLTIPSHOW: { + // NOTE: This is copied here from scintilla/src/ScintillaBase.cxx + // because of the little tweak that needs done below. When updating + // new versions double check that this is still needed, and that any + // new code there is copied here too. + AutoCompleteCancel(); + if (!ct.wCallTip.Created()) { + Point pt = LocationFromPosition(wParam); + pt.y += vs.lineHeight; + PRectangle rc = ct.CallTipStart(currentPos, pt, + reinterpret_cast(lParam), + vs.styles[STYLE_DEFAULT].fontName, + vs.styles[STYLE_DEFAULT].sizeZoomed, + IsUnicodeMode()); + // If the call-tip window would be out of the client + // space, adjust so it displays above the text. + PRectangle rcClient = GetClientRectangle(); + if (rc.bottom > rcClient.bottom) { +#ifdef __WXGTK__ + int offset = int(vs.lineHeight * 1.25) + rc.Height(); +#else + int offset = vs.lineHeight + rc.Height(); +#endif + rc.top -= offset; + rc.bottom -= offset; + } + // Now display the window. + CreateCallTipWindow(rc); + ct.wCallTip.SetPositionRelative(rc, wMain); + ct.wCallTip.Show(); + } + } + break; + + default: + return ScintillaBase::WndProc(iMessage, wParam, lParam); + } + return 0; } @@ -527,6 +563,8 @@ void ScintillaWX::DoMouseWheel(int rotation, int delta, } } else { // otherwise just scroll the window + if ( !delta ) + delta = 120; wheelRotation += rotation; lines = wheelRotation / delta; wheelRotation -= lines * delta; @@ -607,11 +645,10 @@ void ScintillaWX::DoMiddleButtonUp(Point pt) { void ScintillaWX::DoAddChar(int key) { #if wxUSE_UNICODE - char ansiChars[3]; - ansiChars[0] = key; - ansiChars[1] = 0; - wxString uniChar(ansiChars, wxConvLocal); - wxWX2MBbuf buf = (wxWX2MBbuf)wx2stc(uniChar); + wxChar wszChars[2]; + wszChars[0] = key; + wszChars[1] = 0; + wxWX2MBbuf buf = (wxWX2MBbuf)wx2stc(wszChars); AddCharUTF((char*)buf.data(), strlen(buf)); #else AddChar(key); @@ -633,7 +670,9 @@ int ScintillaWX::DoKeyDown(int key, bool shift, bool ctrl, bool alt, bool* cons case WXK_RIGHT: key = SCK_RIGHT; break; case WXK_HOME: key = SCK_HOME; break; case WXK_END: key = SCK_END; break; + case WXK_PAGEUP: // fall through case WXK_PRIOR: key = SCK_PRIOR; break; + case WXK_PAGEDOWN: // fall through case WXK_NEXT: key = SCK_NEXT; break; case WXK_DELETE: key = SCK_DELETE; break; case WXK_INSERT: key = SCK_INSERT; break;