]> git.saurik.com Git - wxWidgets.git/blobdiff - src/msw/textctrl.cpp
another segfault fix
[wxWidgets.git] / src / msw / textctrl.cpp
index b8b44e6c6d3a4b2c8bb006c39fac51681136386b..c64bfb06e8f1d7c37eb245124ef9614ae4a207ea 100644 (file)
     } ENLINK;
 #endif // ENLINK
 
+#ifndef SF_UNICODE
+    #define SF_UNICODE 0x0010
+#endif
+
 // ----------------------------------------------------------------------------
 // private functions
 // ----------------------------------------------------------------------------
@@ -433,6 +437,9 @@ void wxTextCtrl::SetValue(const wxString& value)
         Clear();
 
         WriteText(value);
+
+        // for compatibility, don't move the cursor when doing SetValue()
+        SetInsertionPoint(0);
     }
 }
 
@@ -461,6 +468,7 @@ extern long wxEncodingToCodepage(wxFontEncoding encoding); // from strconv.cpp
 
 bool wxTextCtrl::StreamIn(const wxString& value, wxFontEncoding encoding)
 {
+#if !wxUSE_UNICODE
     // we have to use EM_STREAMIN to force richedit control 2.0+ to show any
     // text in the non default charset - otherwise it thinks it knows better
     // than we do and always shows it in the default one
@@ -484,11 +492,15 @@ bool wxTextCtrl::StreamIn(const wxString& value, wxFontEncoding encoding)
 
     // finally, stream it in the control
     const wchar_t *wpc = wchBuf;
+#else
+    const wchar_t *wpc = value.c_str();
+#endif
 
     EDITSTREAM eds;
     wxZeroMemory(eds);
     eds.dwCookie = (DWORD)&wpc;
-    eds.pfnCallback = wxRichEditStreamIn;
+    // the cast below is needed for broken (very) old mingw32 headers
+    eds.pfnCallback = (EDITSTREAMCALLBACK)wxRichEditStreamIn;
 
     if ( !::SendMessage(GetHwnd(), EM_STREAMIN,
                         SF_TEXT | SF_UNICODE | SFF_SELECTION,