diff --git a/src/common/filefn.cpp b/src/common/filefn.cpp index 786381d64b..319f1a6d66 100644 --- a/src/common/filefn.cpp +++ b/src/common/filefn.cpp @@ -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 - #ifdef HAVE_WGETCWD - ok = _wgetcwd(buf, sz) != NULL; - #else // !HAVE_WGETCWD - wxCharBuffer cbuf(sz); - #endif -#endif // +#if !wxUSE_UNICODE + #define cbuf buf +#else // wxUSE_UNICODE + bool needsANSI = TRUE; -#if !wxUSE_UNICODE || !defined(HAVE_WGETCWD) + #if !defined(HAVE_WGETCWD) || wxUSE_UNICODE_MSLU + wxCharBuffer c_buffer(sz); + char *cbuf = (char*)(const char*)c_buffer; + #endif + + #ifdef HAVE_WGETCWD + #if wxUSE_UNICODE_MSLU + if ( wxGetOsVersion() != wxWIN95 ) + #endif + { + ok = _wgetcwd(buf, sz) != NULL; + needsANSI = FALSE; + } + #endif + + 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() diff --git a/src/msw/ownerdrw.cpp b/src/msw/ownerdrw.cpp index 364d175a89..37ea1f8b81 100644 --- a/src/msw/ownerdrw.cpp +++ b/src/msw/ownerdrw.cpp @@ -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();