Commit 2c691b31 authored by Ove Kaaven's avatar Ove Kaaven Committed by Alexandre Julliard

Implemented Win16 behaviour of DDL_DRIVES in DlgDirList.

parent c8ac4a27
...@@ -1661,42 +1661,47 @@ static LRESULT LISTBOX_Directory( WND *wnd, LB_DESCR *descr, UINT attrib, ...@@ -1661,42 +1661,47 @@ static LRESULT LISTBOX_Directory( WND *wnd, LB_DESCR *descr, UINT attrib,
WIN32_FIND_DATAA entry; WIN32_FIND_DATAA entry;
int pos; int pos;
if ((handle = FindFirstFileA(filespec,&entry)) == INVALID_HANDLE_VALUE) /* don't scan directory if we just want drives exclusively */
{ if (attrib != (DDL_DRIVES | DDL_EXCLUSIVE)) {
if (GetLastError() != ERROR_NO_MORE_FILES) return LB_ERR; /* scan directory */
} if ((handle = FindFirstFileA(filespec,&entry)) == INVALID_HANDLE_VALUE)
else
{
do
{ {
char buffer[270]; if (GetLastError() != ERROR_NO_MORE_FILES) return LB_ERR;
if (entry.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) }
{ else
if (!(attrib & DDL_DIRECTORY) || {
!strcmp( entry.cAlternateFileName, "." )) continue; do
if (long_names) sprintf( buffer, "[%s]", entry.cFileName );
else sprintf( buffer, "[%s]", entry.cAlternateFileName );
}
else /* not a directory */
{ {
char buffer[270];
if (entry.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
{
if (!(attrib & DDL_DIRECTORY) ||
!strcmp( entry.cAlternateFileName, "." )) continue;
if (long_names) sprintf( buffer, "[%s]", entry.cFileName );
else sprintf( buffer, "[%s]", entry.cAlternateFileName );
}
else /* not a directory */
{
#define ATTRIBS (FILE_ATTRIBUTE_READONLY | FILE_ATTRIBUTE_HIDDEN | \ #define ATTRIBS (FILE_ATTRIBUTE_READONLY | FILE_ATTRIBUTE_HIDDEN | \
FILE_ATTRIBUTE_SYSTEM | FILE_ATTRIBUTE_ARCHIVE) FILE_ATTRIBUTE_SYSTEM | FILE_ATTRIBUTE_ARCHIVE)
if ((attrib & DDL_EXCLUSIVE) && if ((attrib & DDL_EXCLUSIVE) &&
((attrib & ATTRIBS) != (entry.dwFileAttributes & ATTRIBS))) ((attrib & ATTRIBS) != (entry.dwFileAttributes & ATTRIBS)))
continue; continue;
#undef ATTRIBS #undef ATTRIBS
if (long_names) strcpy( buffer, entry.cFileName ); if (long_names) strcpy( buffer, entry.cFileName );
else strcpy( buffer, entry.cAlternateFileName ); else strcpy( buffer, entry.cAlternateFileName );
} }
if (!long_names) CharLowerA( buffer ); if (!long_names) CharLowerA( buffer );
pos = LISTBOX_FindFileStrPos( wnd, descr, buffer ); pos = LISTBOX_FindFileStrPos( wnd, descr, buffer );
if ((ret = LISTBOX_InsertString( wnd, descr, pos, buffer )) < 0) if ((ret = LISTBOX_InsertString( wnd, descr, pos, buffer )) < 0)
break; break;
} while (FindNextFileA( handle, &entry )); } while (FindNextFileA( handle, &entry ));
FindClose( handle ); FindClose( handle );
}
} }
/* scan drives */
if ((ret >= 0) && (attrib & DDL_DRIVES)) if ((ret >= 0) && (attrib & DDL_DRIVES))
{ {
char buffer[] = "[-a-]"; char buffer[] = "[-a-]";
...@@ -2689,6 +2694,9 @@ static inline LRESULT WINAPI ListBoxWndProc_locked( WND* wnd, UINT msg, ...@@ -2689,6 +2694,9 @@ static inline LRESULT WINAPI ListBoxWndProc_locked( WND* wnd, UINT msg,
return LB_OKAY; return LB_OKAY;
case LB_DIR16: case LB_DIR16:
/* according to Win16 docs, DDL_DRIVES should make DDL_EXCLUSIVE
* be set automatically (this is different in Win32) */
if (wParam & DDL_DRIVES) wParam |= DDL_EXCLUSIVE;
return LISTBOX_Directory( wnd, descr, wParam, return LISTBOX_Directory( wnd, descr, wParam,
(LPCSTR)PTR_SEG_TO_LIN(lParam), FALSE ); (LPCSTR)PTR_SEG_TO_LIN(lParam), FALSE );
......
...@@ -102,7 +102,7 @@ owner user32 ...@@ -102,7 +102,7 @@ owner user32
97 pascal16 CheckDlgButton(word word word) CheckDlgButton16 97 pascal16 CheckDlgButton(word word word) CheckDlgButton16
98 pascal16 IsDlgButtonChecked(word word) IsDlgButtonChecked16 98 pascal16 IsDlgButtonChecked(word word) IsDlgButtonChecked16
99 pascal16 DlgDirSelect(word ptr word) DlgDirSelect16 99 pascal16 DlgDirSelect(word ptr word) DlgDirSelect16
100 pascal16 DlgDirList(word ptr word word word) DlgDirList16 100 pascal16 DlgDirList(word str word word word) DlgDirList16
101 pascal SendDlgItemMessage(word word word word long) SendDlgItemMessage16 101 pascal SendDlgItemMessage(word word word word long) SendDlgItemMessage16
102 pascal16 AdjustWindowRect(ptr long word) AdjustWindowRect16 102 pascal16 AdjustWindowRect(ptr long word) AdjustWindowRect16
103 pascal16 MapDialogRect(word ptr) MapDialogRect16 103 pascal16 MapDialogRect(word ptr) MapDialogRect16
......
...@@ -155,10 +155,10 @@ debug_channels (accel caret class clipboard combo cursor dc ddeml dialog driver ...@@ -155,10 +155,10 @@ debug_channels (accel caret class clipboard combo cursor dc ddeml dialog driver
@ stdcall DialogBoxParamW(long wstr long ptr long) DialogBoxParamW @ stdcall DialogBoxParamW(long wstr long ptr long) DialogBoxParamW
@ stdcall DispatchMessageA(ptr) DispatchMessageA @ stdcall DispatchMessageA(ptr) DispatchMessageA
@ stdcall DispatchMessageW(ptr) DispatchMessageW @ stdcall DispatchMessageW(ptr) DispatchMessageW
@ stdcall DlgDirListA(long ptr long long long) DlgDirListA @ stdcall DlgDirListA(long str long long long) DlgDirListA
@ stdcall DlgDirListComboBoxA(long ptr long long long) DlgDirListComboBoxA @ stdcall DlgDirListComboBoxA(long ptr long long long) DlgDirListComboBoxA
@ stdcall DlgDirListComboBoxW(long ptr long long long) DlgDirListComboBoxW @ stdcall DlgDirListComboBoxW(long ptr long long long) DlgDirListComboBoxW
@ stdcall DlgDirListW(long ptr long long long) DlgDirListW @ stdcall DlgDirListW(long wstr long long long) DlgDirListW
@ stdcall DlgDirSelectComboBoxExA(long ptr long long) DlgDirSelectComboBoxExA @ stdcall DlgDirSelectComboBoxExA(long ptr long long) DlgDirSelectComboBoxExA
@ stdcall DlgDirSelectComboBoxExW(long ptr long long) DlgDirSelectComboBoxExW @ stdcall DlgDirSelectComboBoxExW(long ptr long long) DlgDirSelectComboBoxExW
@ stdcall DlgDirSelectExA(long ptr long long) DlgDirSelectExA @ stdcall DlgDirSelectExA(long ptr long long) DlgDirSelectExA
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment