]> git.saurik.com Git - wxWidgets.git/blobdiff - src/msw/textctrl.cpp
fix compilation without wxUSE_STREAMS (closes #10900)
[wxWidgets.git] / src / msw / textctrl.cpp
index 5b2730bc62f4a63c53a614c5870883c2881b9772..e6a2500f0579cff2b710fb44df750285f365dc29 100644 (file)
@@ -82,7 +82,7 @@
 // dummy value used for m_dropTarget, different from any valid pointer value
 // (which are all even under Windows) and NULL
 static wxDropTarget *
-    wxRICHTEXT_DEFAULT_DROPTARGET = wx_reinterpret_cast(wxDropTarget *, 1);
+    wxRICHTEXT_DEFAULT_DROPTARGET = reinterpret_cast<wxDropTarget *>(1);
 
 #endif // wxUSE_DRAG_AND_DROP && wxUSE_RICHEDIT
 
@@ -169,7 +169,7 @@ public:
 private:
     int& m_count;
 
-    DECLARE_NO_COPY_CLASS(UpdatesCountFilter)
+    wxDECLARE_NO_COPY_CLASS(UpdatesCountFilter);
 };
 
 // ----------------------------------------------------------------------------
@@ -424,7 +424,9 @@ bool wxTextCtrl::MSWCreateText(const wxString& value,
         }
 #endif
 
+#if wxUSE_INKEDIT
         if (!IsInkEdit())
+#endif // wxUSE_INKEDIT
         {
             if ( m_verRichEdit == 2 )
             {
@@ -858,8 +860,9 @@ wxString wxTextCtrl::GetRange(long from, long to) const
     else
 #endif // wxUSE_RICHEDIT
     {
-        // retrieve all text
-        str = wxGetWindowText(GetHWND());
+        // retrieve all text: wxTextEntry method works even for multiline
+        // controls and must be used for single line ones to account for hints
+        str = wxTextEntry::GetValue();
 
         // need only a range?
         if ( from < to )
@@ -882,7 +885,7 @@ void wxTextCtrl::DoSetValue(const wxString& value, int flags)
     // comparing it with the old one (chances are that it will be different
     // anyhow, this comparison is there to avoid flicker for small single-line
     // edit controls mostly)
-    if ( (value.length() > 0x400) || (value != GetValue()) )
+    if ( (value.length() > 0x400) || (value != DoGetValue()) )
     {
         DoWriteText(value, flags /* doesn't include SelectionOnly here */);
 
@@ -912,7 +915,7 @@ void wxTextCtrl::DoSetValue(const wxString& value, int flags)
 // TODO: using memcpy() would improve performance a lot for big amounts of text
 
 DWORD CALLBACK
-wxRichEditStreamIn(DWORD dwCookie, BYTE *buf, LONG cb, LONG *pcb)
+wxRichEditStreamIn(DWORD_PTR dwCookie, BYTE *buf, LONG cb, LONG *pcb)
 {
     *pcb = 0;
 
@@ -990,21 +993,16 @@ wxTextCtrl::StreamIn(const wxString& value,
     if (len == wxCONV_FAILED)
         return false;
 
-#if wxUSE_WCHAR_T
-    wxWCharBuffer wchBuf(len);
+    wxWCharBuffer wchBuf(len); // allocates one extra character
     wchar_t *wpc = wchBuf.data();
-#else
-    wchar_t *wchBuf = (wchar_t *)malloc((len + 1)*sizeof(wchar_t));
-    wchar_t *wpc = wchBuf;
-#endif
 
-    conv.MB2WC(wpc, value.mb_str(), value.length());
+    conv.MB2WC(wpc, value.mb_str(), len + 1);
 #endif // wxUSE_UNICODE_MSLU
 
     // finally, stream it in the control
     EDITSTREAM eds;
     wxZeroMemory(eds);
-    eds.dwCookie = (DWORD)&wpc;
+    eds.dwCookie = (DWORD_PTR)&wpc;
     // the cast below is needed for broken (very) old mingw32 headers
     eds.pfnCallback = (EDITSTREAMCALLBACK)wxRichEditStreamIn;
 
@@ -2452,7 +2450,7 @@ bool wxTextCtrl::SetStyle(long start, long end, const wxTextAttr& style)
         cf.yHeight = 20*font.GetPointSize(); // 1 pt = 20 twips
         cf.bCharSet = lf.lfCharSet;
         cf.bPitchAndFamily = lf.lfPitchAndFamily;
-        wxStrncpy( cf.szFaceName, lf.lfFaceName, WXSIZEOF(cf.szFaceName) );
+        wxStrlcpy(cf.szFaceName, lf.lfFaceName, WXSIZEOF(cf.szFaceName));
 
         // also deal with underline/italic/bold attributes: note that we must
         // always set CFM_ITALIC &c bits in dwMask, even if we don't set the
@@ -2824,10 +2822,8 @@ bool wxRichEditModule::Load(Version version)
 // load the InkEdit library
 bool wxRichEditModule::LoadInkEdit()
 {
-    static wxDynamicLibrary ms_inkEditLib;
-    static bool             ms_inkEditLibLoadAttemped;
     if (ms_inkEditLibLoadAttemped)
-        ms_inkEditLib.IsLoaded();
+        return ms_inkEditLib.IsLoaded();
 
     ms_inkEditLibLoadAttemped = true;