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,
WIN32_FIND_DATAA entry;
int pos;
if ((handle = FindFirstFileA(filespec,&entry)) == INVALID_HANDLE_VALUE)
{
if (GetLastError() != ERROR_NO_MORE_FILES) return LB_ERR;
}
else
{
do
/* don't scan directory if we just want drives exclusively */
if (attrib != (DDL_DRIVES | DDL_EXCLUSIVE)) {
/* scan directory */
if ((handle = FindFirstFileA(filespec,&entry)) == INVALID_HANDLE_VALUE)
{
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 */
if (GetLastError() != ERROR_NO_MORE_FILES) return LB_ERR;
}
else
{
do
{
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 | \
FILE_ATTRIBUTE_SYSTEM | FILE_ATTRIBUTE_ARCHIVE)
if ((attrib & DDL_EXCLUSIVE) &&
((attrib & ATTRIBS) != (entry.dwFileAttributes & ATTRIBS)))
continue;
if ((attrib & DDL_EXCLUSIVE) &&
((attrib & ATTRIBS) != (entry.dwFileAttributes & ATTRIBS)))
continue;
#undef ATTRIBS
if (long_names) strcpy( buffer, entry.cFileName );
else strcpy( buffer, entry.cAlternateFileName );
}
if (!long_names) CharLowerA( buffer );
pos = LISTBOX_FindFileStrPos( wnd, descr, buffer );
if ((ret = LISTBOX_InsertString( wnd, descr, pos, buffer )) < 0)
break;
} while (FindNextFileA( handle, &entry ));
FindClose( handle );
if (long_names) strcpy( buffer, entry.cFileName );
else strcpy( buffer, entry.cAlternateFileName );
}
if (!long_names) CharLowerA( buffer );
pos = LISTBOX_FindFileStrPos( wnd, descr, buffer );
if ((ret = LISTBOX_InsertString( wnd, descr, pos, buffer )) < 0)
break;
} while (FindNextFileA( handle, &entry ));
FindClose( handle );
}
}
/* scan drives */
if ((ret >= 0) && (attrib & DDL_DRIVES))
{
char buffer[] = "[-a-]";
......@@ -2689,6 +2694,9 @@ static inline LRESULT WINAPI ListBoxWndProc_locked( WND* wnd, UINT msg,
return LB_OKAY;
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,
(LPCSTR)PTR_SEG_TO_LIN(lParam), FALSE );
......
......@@ -102,7 +102,7 @@ owner user32
97 pascal16 CheckDlgButton(word word word) CheckDlgButton16
98 pascal16 IsDlgButtonChecked(word word) IsDlgButtonChecked16
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
102 pascal16 AdjustWindowRect(ptr long word) AdjustWindowRect16
103 pascal16 MapDialogRect(word ptr) MapDialogRect16
......
......@@ -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 DispatchMessageA(ptr) DispatchMessageA
@ 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 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 DlgDirSelectComboBoxExW(long ptr long long) DlgDirSelectComboBoxExW
@ 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