comparison win/dw.c @ 1704:873304f581be

Fix Unicode issues with the directory browser on Windows. Fix a hang with the directory browser on Mac when passing an empty string.
author bsmith@81767d24-ef19-dc11-ae90-00e081727c95
date Sat, 05 May 2012 06:48:40 +0000
parents 31f16da1052a
children 8228b3cf8f37
comparison
equal deleted inserted replaced
1703:043db6b221c2 1704:873304f581be
11488 if (SUCCEEDED(SHGetMalloc(&pMalloc))) 11488 if (SUCCEEDED(SHGetMalloc(&pMalloc)))
11489 { 11489 {
11490 bi.hwndOwner = NULL; 11490 bi.hwndOwner = NULL;
11491 bi.pszDisplayName = 0; 11491 bi.pszDisplayName = 0;
11492 bi.pidlRoot = 0; 11492 bi.pidlRoot = 0;
11493 bi.lpszTitle = title; 11493 bi.lpszTitle = UTF8toWide(title);
11494 bi.ulFlags = BIF_RETURNONLYFSDIRS | BIF_STATUSTEXT; 11494 bi.ulFlags = BIF_RETURNONLYFSDIRS | BIF_STATUSTEXT;
11495 bi.lpfn = NULL; /*BrowseCallbackProc*/ 11495 bi.lpfn = NULL; /*BrowseCallbackProc*/
11496 11496
11497 pidl = SHBrowseForFolder(&bi); 11497 pidl = SHBrowseForFolder(&bi);
11498 if (pidl) 11498 if (pidl)
11499 { 11499 {
11500 if (SHGetPathFromIDList(pidl,szDir)) 11500 if (SHGetPathFromIDList(pidl,szDir))
11501 { 11501 {
11502 strncpy(filenamebuf,szDir,1000); 11502 _tcsncpy(filenamebuf,szDir,1000);
11503 } 11503 }
11504 11504
11505 /* In C++: pMalloc->Free(pidl); pMalloc->Release(); */ 11505 /* In C++: pMalloc->Free(pidl); pMalloc->Release(); */
11506 pMalloc->lpVtbl->Free(pMalloc,pidl); 11506 pMalloc->lpVtbl->Free(pMalloc,pidl);
11507 pMalloc->lpVtbl->Release(pMalloc); 11507 pMalloc->lpVtbl->Release(pMalloc);
11508 return _strdup(filenamebuf); 11508 return _strdup(WideToUTF8(filenamebuf));
11509 } 11509 }
11510 } 11510 }
11511 #else 11511 #else
11512 if ( XBrowseForFolder( NULL, 11512 if ( XBrowseForFolder( NULL,
11513 (LPCTSTR)defpath, 11513 (LPCTSTR)dpath,
11514 -1, 11514 -1,
11515 (LPCTSTR)title, 11515 (LPCTSTR)UTF8toWide(title),
11516 (LPTSTR)filenamebuf, 11516 (LPTSTR)filenamebuf,
11517 1000, 11517 1000,
11518 FALSE ) ) 11518 FALSE ) )
11519 { 11519 {
11520 return _strdup( WideToUTF8(fbuf) ); 11520 return _strdup( WideToUTF8(fbuf) );