]> git.saurik.com Git - wxWidgets.git/commitdiff
more MSLU fixes
authorVáclav Slavík <vslavik@fastmail.fm>
Fri, 15 Feb 2002 19:42:01 +0000 (19:42 +0000)
committerVáclav Slavík <vslavik@fastmail.fm>
Fri, 15 Feb 2002 19:42:01 +0000 (19:42 +0000)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@14239 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

src/common/filefn.cpp
src/msw/ownerdrw.cpp

index 786381d64bf8045f451b6a304ef3d39d79acb502..319f1a6d66157fc934a72f9964370ae6bc84b8af 100644 (file)
@@ -1386,21 +1386,35 @@ wxChar *wxGetWorkingDirectory(wxChar *buf, int sz)
         buf = new wxChar[sz + 1];
     }
 
-    bool ok;
+    bool ok = FALSE;
 
     // for the compilers which have Unicode version of _getcwd(), call it
     // directly, for the others call the ANSI version and do the translation
-#if wxUSE_UNICODE
+#if !wxUSE_UNICODE
+       #define cbuf buf
+#else // wxUSE_UNICODE
+       bool needsANSI = TRUE;
+
+       #if !defined(HAVE_WGETCWD) || wxUSE_UNICODE_MSLU
+        wxCharBuffer c_buffer(sz);
+               char *cbuf = (char*)(const char*)c_buffer;
+       #endif
+
     #ifdef HAVE_WGETCWD
-        ok = _wgetcwd(buf, sz) != NULL;
-    #else // !HAVE_WGETCWD
-        wxCharBuffer cbuf(sz);
+               #if     wxUSE_UNICODE_MSLU
+                       if ( wxGetOsVersion() != wxWIN95 )
+               #endif
+                       {
+                               ok = _wgetcwd(buf, sz) != NULL;
+                               needsANSI = FALSE;
+                       }
     #endif
-#endif //
 
-#if !wxUSE_UNICODE || !defined(HAVE_WGETCWD)
+       if ( needsANSI )
+#endif // wxUSE_UNICODE
+       {
     #ifdef _MSC_VER
-        ok = _getcwd(buf, sz) != NULL;
+        ok = _getcwd(cbuf, sz) != NULL;
     #elif defined(__WXMAC__) && !defined(__DARWIN__)
         FSSpec cwdSpec ;
         FCBPBRec pb;
@@ -1418,8 +1432,8 @@ wxChar *wxGetWorkingDirectory(wxChar *buf, int sz)
             cwdSpec.name[0] = 0 ;
             wxString res = wxMacFSSpec2MacFilename( &cwdSpec ) ;
 
-            strcpy( buf , res ) ;
-            buf[res.length()]=0 ;
+            strcpy( cbuf , res ) ;
+            cbuf[res.length()]=0 ;
 
             ok = TRUE;
         }
@@ -1430,14 +1444,14 @@ wxChar *wxGetWorkingDirectory(wxChar *buf, int sz)
     #elif defined(__VISAGECPP__) || (defined (__OS2__) && defined (__WATCOMC__))
         APIRET rc;
         rc = ::DosQueryCurrentDir( 0 // current drive
-                                  ,buf
+                                  ,cbuf
                                   ,(PULONG)&sz
                                  );
         ok = rc != 0;
     #else // !Win32/VC++ !Mac !OS2
-        ok = getcwd(buf, sz) != NULL;
+        ok = getcwd(cbuf, sz) != NULL;
     #endif // platform
-#endif // !wxUSE_UNICODE || !HAVE_WGETCWD
+       }
 
     if ( !ok )
     {
@@ -1468,12 +1482,16 @@ wxChar *wxGetWorkingDirectory(wxChar *buf, int sz)
 #endif // __CYGWIN__
 
         // finally convert the result to Unicode if needed
-#if wxUSE_UNICODE && !defined(HAVE_WGETCWD)
+#if wxUSE_UNICODE
         wxConvFile.MB2WC(buf, cbuf, sz);
 #endif // wxUSE_UNICODE
     }
 
     return buf;
+
+#if !wxUSE_UNICODE
+       #undef cbuf
+#endif
 }
 
 wxString wxGetCwd()
index 364d175a89368eac751ee757a602345e760e4c8f..37ea1f8b81a7a34c9b1f5a191961ccdb1a771a18 100644 (file)
@@ -190,12 +190,30 @@ bool wxOwnerDrawn::OnDrawItem(wxDC& dc,
     }
 
     HFONT hPrevFont = (HFONT) ::SelectObject(hdc, hfont);
-    DrawState(hdc, NULL, NULL,
+   
+
+#if wxUSE_UNICODE_MSLU
+       if ( wxGetOsVersion() == wxWIN95 /* using unicows.dll */ )
+       {
+               // VS: There's yet another bug in MSLU: DrawStateW behaves
+               //     like if it was expecting char*, not wchar_t* input.
+               //     We have to use DrawStateA explicitly.
+               DrawStateA(hdc, NULL, NULL,
+                                  (LPARAM)(const char*)m_strName.mb_str(wxConvLocal),
+                                  m_strName.length(),
+                   x, rc.y, rc.GetWidth(), rc.GetHeight(),
+                   DST_PREFIXTEXT | 
+                                          (st & wxODDisabled ? DSS_DISABLED : 0));
+       }
+       else
+#else
+       DrawState(hdc, NULL, NULL,
               (LPARAM)m_strName.c_str(), m_strName.length(),
               x, rc.y, rc.GetWidth(), rc.GetHeight(),
               DST_PREFIXTEXT | (st & wxODDisabled ? DSS_DISABLED : 0));
+#endif
 
-    if ( !m_strAccel.empty() )
+        if ( !m_strAccel.empty() )
     {
         RECT r;
         r.top = rc.GetTop();