]> git.saurik.com Git - wxWidgets.git/blobdiff - contrib/src/stc/ScintillaWX.cpp
Applied patch [ 571965 ] update stc contrib stuff
[wxWidgets.git] / contrib / src / stc / ScintillaWX.cpp
index e45084ca7052a3842ae48483b760ab1c77f19134..5e3d95b65a799ce0b8155fb27bbc3d0d9ff39a7c 100644 (file)
@@ -88,6 +88,11 @@ public:
         delete surfaceWindow;
     }
 
+    void OnFocus(wxFocusEvent& event) {
+        GetParent()->SetFocus();
+        event.Skip();
+    }
+
 #if wxUSE_POPUPWIN && wxSTC_USE_POPUP
     virtual void DoSetSize(int x, int y,
                            int width, int height,
@@ -105,7 +110,7 @@ public:
             CaptureMouse();
         }
         else {
-            ReleaseMouse();
+            if (HasCapture()) ReleaseMouse();
         }
         return retval;
     }
@@ -122,6 +127,7 @@ private:
 
 BEGIN_EVENT_TABLE(wxSTCCallTip, wxSTCCallTipBase)
     EVT_PAINT(wxSTCCallTip::OnPaint)
+    EVT_SET_FOCUS(wxSTCCallTip::OnFocus)
 #if wxUSE_POPUPWIN && wxSTC_USE_POPUP
     EVT_LEFT_DOWN(wxSTCCallTip::OnLeftDown)
 #endif
@@ -166,7 +172,7 @@ void ScintillaWX::Finalise() {
 
 void ScintillaWX::StartDrag() {
 #if wxUSE_DRAG_AND_DROP
-    wxString dragText(drag.s, wxConvUTF8, drag.len);
+    wxString dragText = stc2wx(drag.s, drag.len);
 
     // Send an event to allow the drag text to be changed
     wxStyledTextEvent evt(wxEVT_STC_START_DRAG, stc->GetId());
@@ -314,7 +320,8 @@ void ScintillaWX::Copy() {
         SelectionText st;
         CopySelectionRange(&st);
         wxTheClipboard->Open();
-        wxString text(st.s, wxConvUTF8, st.len);
+        wxTheClipboard->UsePrimarySelection();
+        wxString text = stc2wx(st.s, st.len);
         wxTheClipboard->SetData(new wxTextDataObject(text));
         wxTheClipboard->Close();
     }
@@ -329,10 +336,11 @@ void ScintillaWX::Paste() {
     bool gotData;
 
     wxTheClipboard->Open();
+    wxTheClipboard->UsePrimarySelection();
     gotData = wxTheClipboard->GetData(data);
     wxTheClipboard->Close();
     if (gotData) {
-        wxWX2MBbuf buf = (wxWX2MBbuf)data.GetText().mb_str(wxConvUTF8);
+        wxWX2MBbuf buf = (wxWX2MBbuf)wx2stc(data.GetText());
         int        len = strlen(buf);
         pdoc->InsertString(currentPos, buf, len);
         SetEmptySelection(currentPos + len);
@@ -348,6 +356,7 @@ bool ScintillaWX::CanPaste() {
     bool canPaste;
 
     wxTheClipboard->Open();
+    wxTheClipboard->UsePrimarySelection();
     canPaste = wxTheClipboard->IsSupported(wxUSE_UNICODE ? wxDF_UNICODETEXT : wxDF_TEXT);
     wxTheClipboard->Close();
 
@@ -364,7 +373,7 @@ void ScintillaWX::AddToPopUp(const char *label, int cmd, bool enabled) {
     if (!label[0])
         ((wxMenu*)popup.GetID())->AppendSeparator();
     else
-        ((wxMenu*)popup.GetID())->Append(cmd, wxString(label, *wxConvCurrent));
+        ((wxMenu*)popup.GetID())->Append(cmd, stc2wx(label));
 
     if (!enabled)
         ((wxMenu*)popup.GetID())->Enable(cmd, enabled);
@@ -521,7 +530,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;
@@ -595,7 +604,7 @@ bool ScintillaWX::DoDropText(long x, long y, const wxString& data) {
     dragResult = evt.GetDragResult();
     if (dragResult == wxDragMove || dragResult == wxDragCopy) {
         DropAt(evt.GetPosition(),
-               evt.GetDragText().mb_str(wxConvUTF8),
+               wx2stc(evt.GetDragText()),
                dragResult == wxDragMove,
                FALSE); // TODO: rectangular?
         return TRUE;