]> git.saurik.com Git - wxWidgets.git/blobdiff - src/stc/ScintillaWX.cpp
fixing focus, fixes #9985
[wxWidgets.git] / src / stc / ScintillaWX.cpp
index 48655b2966fafe43675966140f05df60c0f89fea..0ac6b14415b157718c16741d4bc94baff2c74717 100644 (file)
@@ -64,21 +64,6 @@ private:
 
 
 #if wxUSE_DRAG_AND_DROP
-class wxStartDragTimer : public wxTimer {
-public:
-    wxStartDragTimer(ScintillaWX* swx) {
-        m_swx = swx;
-    }
-
-    void Notify() {
-        m_swx->DoStartDrag();
-    }
-
-private:
-    ScintillaWX* m_swx;
-};
-
-
 bool wxSTCDropTarget::OnDropText(wxCoord x, wxCoord y, const wxString& data) {
     return m_swx->DoDropText(x, y, data);
 }
@@ -97,14 +82,12 @@ void  wxSTCDropTarget::OnLeave() {
 #endif // wxUSE_DRAG_AND_DROP
 
 
-#if wxUSE_POPUPWIN && wxSTC_USE_POPUP
+#if wxUSE_POPUPWIN
 #include "wx/popupwin.h"
 #define wxSTCCallTipBase wxPopupWindow
-#define param2  wxBORDER_NONE  // popup's 2nd param is flags
 #else
 #include "wx/frame.h"
 #define wxSTCCallTipBase wxFrame
-#define param2 -1 // wxWindow's 2nd param is ID
 #endif
 
 #include "wx/dcbuffer.h"
@@ -112,7 +95,7 @@ void  wxSTCDropTarget::OnLeave() {
 class wxSTCCallTip : public wxSTCCallTipBase {
 public:
     wxSTCCallTip(wxWindow* parent, CallTip* ct, ScintillaWX* swx) :
-#if wxUSE_POPUPWIN && wxSTC_USE_POPUP
+#if wxUSE_POPUPWIN
         wxSTCCallTipBase(parent, wxBORDER_NONE),
 #else
         wxSTCCallTipBase(parent, -1, wxEmptyString, wxDefaultPosition, wxDefaultSize,
@@ -126,10 +109,11 @@ public:
 #endif
           m_ct(ct), m_swx(swx), m_cx(wxDefaultCoord), m_cy(wxDefaultCoord)
         {
+            SetBackgroundStyle(wxBG_STYLE_CUSTOM);
         }
 
     ~wxSTCCallTip() {
-#if wxUSE_POPUPWIN && wxSTC_USE_POPUP && defined(__WXGTK__)
+#if wxUSE_POPUPWIN && defined(__WXGTK__)
         wxRect rect = GetRect();
         rect.x = m_cx;
         rect.y = m_cy;
@@ -141,7 +125,7 @@ public:
 
     void OnPaint(wxPaintEvent& WXUNUSED(evt))
     {
-        wxBufferedPaintDC dc(this);
+        wxAutoBufferedPaintDC dc(this);
         Surface* surfaceWindow = Surface::Allocate();
         surfaceWindow->Init(&dc, m_ct->wDraw.GetID());
         m_ct->PaintCT(surfaceWindow);
@@ -179,7 +163,7 @@ public:
         wxSTCCallTipBase::DoSetSize(x, y, width, height, sizeFlags);
     }
 
-#if wxUSE_POPUPWIN && wxSTC_USE_POPUP
+#if wxUSE_POPUPWIN
 #else
     virtual bool Show( bool show = true )
     {
@@ -261,16 +245,10 @@ ScintillaWX::ScintillaWX(wxStyledTextCtrl* win) {
     sysCaretWidth = 0;
     sysCaretHeight = 0;
 #endif
-#if wxUSE_DRAG_AND_DROP
-    startDragTimer = new wxStartDragTimer(this);
-#endif // wxUSE_DRAG_AND_DROP
 }
 
 
 ScintillaWX::~ScintillaWX() {
-#if wxUSE_DRAG_AND_DROP
-    delete startDragTimer;
-#endif // wxUSE_DRAG_AND_DROP
     Finalise();
 }
 
@@ -302,15 +280,6 @@ void ScintillaWX::Finalise() {
 
 
 void ScintillaWX::StartDrag() {
-#if wxUSE_DRAG_AND_DROP
-    // We defer the starting of the DnD, otherwise the LeftUp of a normal
-    // click could be lost and the STC will think it is doing a DnD when the
-    // user just wanted a normal click.
-    startDragTimer->Start(200, true);
-#endif // wxUSE_DRAG_AND_DROP
-}
-
-void ScintillaWX::DoStartDrag() {
 #if wxUSE_DRAG_AND_DROP
     wxString dragText = stc2wx(drag.s, drag.len);
 
@@ -331,6 +300,7 @@ void ScintillaWX::DoStartDrag() {
 
         source.SetData(data);
         dropWentOutside = true;
+        inDragDrop = ddDragging;
         result = source.DoDragDrop(evt.GetDragAllowMove());
         if (result == wxDragMove && dropWentOutside)
             ClearSelection();
@@ -553,6 +523,9 @@ void ScintillaWX::Paste() {
 
 void ScintillaWX::CopyToClipboard(const SelectionText& st) {
 #if wxUSE_CLIPBOARD
+    if ( !st.len )
+        return;
+
     wxTheClipboard->UsePrimarySelection(false);
     if (wxTheClipboard->Open()) {
         wxString text = wxTextBuffer::Translate(stc2wx(st.s, st.len-1));
@@ -644,8 +617,8 @@ void ScintillaWX::UpdateSystemCaret() {
 
 bool ScintillaWX::HasCaretSizeChanged() {
 #ifdef __WXMSW__
-    if (( (0 != vs.caretWidth) && (sysCaretWidth != vs.caretWidth) )
-        || (0 != vs.lineHeight) && (sysCaretHeight != vs.lineHeight)) {
+    if ( (vs.caretWidth && (sysCaretWidth != vs.caretWidth))
+        || (vs.lineHeight && (sysCaretHeight != vs.lineHeight)) ) {
         return true;
     }
 #endif
@@ -879,14 +852,6 @@ void ScintillaWX::DoLeftButtonDown(Point pt, unsigned int curTime, bool shift, b
 
 void ScintillaWX::DoLeftButtonUp(Point pt, unsigned int curTime, bool ctrl) {
     ButtonUp(pt, curTime, ctrl);
-#if wxUSE_DRAG_AND_DROP
-    if (startDragTimer->IsRunning()) {
-        startDragTimer->Stop();
-        SetDragPosition(invalidPosition);
-        SetEmptySelection(PositionFromLocation(pt));
-        ShowCaretAtCurrentPosition();
-    }
-#endif // wxUSE_DRAG_AND_DROP
 }
 
 void ScintillaWX::DoLeftButtonMove(Point pt) {
@@ -1129,7 +1094,7 @@ void ScintillaWX::ClipChildren(wxDC& WXUNUSED(dc), PRectangle WXUNUSED(rect))
 //     if (ct.inCallTipMode) {
 //         wxSTCCallTip* tip = (wxSTCCallTip*)ct.wCallTip.GetID();
 //         wxRect childRect = tip->GetRect();
-// #if wxUSE_POPUPWIN && wxSTC_USE_POPUP
+// #if wxUSE_POPUPWIN
 //         childRect.SetPosition(tip->GetMyPosition());
 // #endif
 //         rgn.Subtract(childRect);