]> git.saurik.com Git - wxWidgets.git/blobdiff - src/stc/ScintillaWX.cpp
Michael Fieldings patch 598106 applied in part
[wxWidgets.git] / src / stc / ScintillaWX.cpp
index ec2297af18a9f9cc95ac7703d3787a8b04b579b4..5a256340edffe8d62a9b5b6474e5bb6a445fee7c 100644 (file)
@@ -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 <wx/popupwin.h>
 #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);
         }
@@ -575,7 +596,8 @@ void ScintillaWX::DoCommand(int ID) {
 
 
 void ScintillaWX::DoContextMenu(Point pt) {
-    ContextMenu(pt);
+    if (displayPopupMenu)
+        ContextMenu(pt);
 }
 
 void ScintillaWX::DoOnListBox() {