comdlg32: Memorize and restore the size of the file dialog between calls.
Includes some fine tuning to fix a couple of todo's in the tests.
This commit is contained in:
parent
223c07738f
commit
1b41bafa07
|
@ -172,6 +172,7 @@ typedef struct tagFD32_PRIVATE
|
||||||
|
|
||||||
const char FileOpenDlgInfosStr[] = "FileOpenDlgInfos"; /* windows property description string */
|
const char FileOpenDlgInfosStr[] = "FileOpenDlgInfos"; /* windows property description string */
|
||||||
static const char LookInInfosStr[] = "LookInInfos"; /* LOOKIN combo box property */
|
static const char LookInInfosStr[] = "LookInInfos"; /* LOOKIN combo box property */
|
||||||
|
static SIZE MemDialogSize = { 0, 0}; /* keep size of the (resizable) dialog */
|
||||||
|
|
||||||
/***********************************************************************
|
/***********************************************************************
|
||||||
* Prototypes
|
* Prototypes
|
||||||
|
@ -1197,13 +1198,14 @@ INT_PTR CALLBACK FileOpenDlgProc95(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM l
|
||||||
if( fodInfos->DlgInfos.hwndCustomDlg)
|
if( fodInfos->DlgInfos.hwndCustomDlg)
|
||||||
ShowWindow( fodInfos->DlgInfos.hwndCustomDlg, SW_SHOW);
|
ShowWindow( fodInfos->DlgInfos.hwndCustomDlg, SW_SHOW);
|
||||||
|
|
||||||
if(fodInfos->ofnInfos->Flags & OFN_EXPLORER)
|
if(fodInfos->ofnInfos->Flags & OFN_EXPLORER) {
|
||||||
SendCustomDlgNotificationMessage(hwnd,CDN_INITDONE);
|
SendCustomDlgNotificationMessage(hwnd,CDN_INITDONE);
|
||||||
|
SendCustomDlgNotificationMessage(hwnd,CDN_FOLDERCHANGE);
|
||||||
|
}
|
||||||
|
|
||||||
if (fodInfos->ofnInfos->Flags & OFN_ENABLESIZING)
|
if (fodInfos->ofnInfos->Flags & OFN_ENABLESIZING)
|
||||||
{
|
{
|
||||||
GetWindowRect( hwnd, &rc);
|
GetWindowRect( hwnd, &rc);
|
||||||
/* FIXME: should remember sizes of last invocation */
|
|
||||||
fodInfos->sizedlg.cx = rc.right - rc.left;
|
fodInfos->sizedlg.cx = rc.right - rc.left;
|
||||||
fodInfos->sizedlg.cy = rc.bottom - rc.top;
|
fodInfos->sizedlg.cy = rc.bottom - rc.top;
|
||||||
fodInfos->initial_size.x = fodInfos->sizedlg.cx;
|
fodInfos->initial_size.x = fodInfos->sizedlg.cx;
|
||||||
|
@ -1212,13 +1214,16 @@ INT_PTR CALLBACK FileOpenDlgProc95(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM l
|
||||||
SetWindowPos( fodInfos->DlgInfos.hwndGrip, NULL,
|
SetWindowPos( fodInfos->DlgInfos.hwndGrip, NULL,
|
||||||
rc.right - gripx, rc.bottom - gripy,
|
rc.right - gripx, rc.bottom - gripy,
|
||||||
0, 0, SWP_NOSIZE | SWP_NOACTIVATE | SWP_NOZORDER);
|
0, 0, SWP_NOSIZE | SWP_NOACTIVATE | SWP_NOZORDER);
|
||||||
|
/* resize the dialog to the previous invocation */
|
||||||
|
if( MemDialogSize.cx && MemDialogSize.cy)
|
||||||
|
SetWindowPos( hwnd, NULL,
|
||||||
|
0, 0, MemDialogSize.cx, MemDialogSize.cy,
|
||||||
|
SWP_NOMOVE | SWP_NOACTIVATE | SWP_NOZORDER);
|
||||||
}
|
}
|
||||||
|
|
||||||
if(fodInfos->ofnInfos->Flags & OFN_EXPLORER)
|
if(fodInfos->ofnInfos->Flags & OFN_EXPLORER)
|
||||||
{
|
|
||||||
SendCustomDlgNotificationMessage(hwnd,CDN_FOLDERCHANGE);
|
|
||||||
SendCustomDlgNotificationMessage(hwnd,CDN_SELCHANGE);
|
SendCustomDlgNotificationMessage(hwnd,CDN_SELCHANGE);
|
||||||
}
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
case WM_SIZE:
|
case WM_SIZE:
|
||||||
|
@ -1242,9 +1247,13 @@ INT_PTR CALLBACK FileOpenDlgProc95(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM l
|
||||||
return FILEDLG95_OnWMGetIShellBrowser(hwnd);
|
return FILEDLG95_OnWMGetIShellBrowser(hwnd);
|
||||||
|
|
||||||
case WM_DESTROY:
|
case WM_DESTROY:
|
||||||
RemovePropA(hwnd, FileOpenDlgInfosStr);
|
{
|
||||||
return FALSE;
|
FileOpenDlgInfos * fodInfos = GetPropA(hwnd,FileOpenDlgInfosStr);
|
||||||
|
if (fodInfos && fodInfos->ofnInfos->Flags & OFN_ENABLESIZING)
|
||||||
|
MemDialogSize = fodInfos->sizedlg;
|
||||||
|
RemovePropA(hwnd, FileOpenDlgInfosStr);
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
case WM_NOTIFY:
|
case WM_NOTIFY:
|
||||||
{
|
{
|
||||||
LPNMHDR lpnmh = (LPNMHDR)lParam;
|
LPNMHDR lpnmh = (LPNMHDR)lParam;
|
||||||
|
|
|
@ -273,8 +273,8 @@ static void test_create_view_template(void)
|
||||||
/* test cases for resizing of the file dialog */
|
/* test cases for resizing of the file dialog */
|
||||||
struct {
|
struct {
|
||||||
DWORD flags;
|
DWORD flags;
|
||||||
int resize_init; /* change in CDN_INITDONE handler */
|
int resize_folderchange; /* change in CDN_FOLDERCHANGE handler */
|
||||||
int resize_folderchg; /* change in CDN_FOLDERCHANGE handler */
|
int resize_selchange; /* change in CDN_SELCHANGE handler */
|
||||||
int resize_timer1; /* change in first WM_TIMER handler */
|
int resize_timer1; /* change in first WM_TIMER handler */
|
||||||
int resize_check; /* expected change (in second WM_TIMER handler) */
|
int resize_check; /* expected change (in second WM_TIMER handler) */
|
||||||
BOOL todo; /* mark that test todo_wine */
|
BOOL todo; /* mark that test todo_wine */
|
||||||
|
@ -285,10 +285,11 @@ struct {
|
||||||
{ OFN_ENABLESIZING , 0, 0, 0, 0,FALSE,FALSE},
|
{ OFN_ENABLESIZING , 0, 0, 0, 0,FALSE,FALSE},
|
||||||
{ OFN_ENABLESIZING , 0, 0,-10, 0,FALSE,FALSE},
|
{ OFN_ENABLESIZING , 0, 0,-10, 0,FALSE,FALSE},
|
||||||
{ OFN_ENABLESIZING , 0, 0, 10, 10,FALSE, TRUE},
|
{ OFN_ENABLESIZING , 0, 0, 10, 10,FALSE, TRUE},
|
||||||
{ OFN_ENABLESIZING , 0,-10, 0, 10, TRUE,FALSE}, /* 5 */
|
{ OFN_ENABLESIZING , 0,-10, 0, 0,FALSE,FALSE}, /* 5 */
|
||||||
{ OFN_ENABLESIZING , 0, 10, 0, 10,FALSE,FALSE},
|
{ OFN_ENABLESIZING , 0, 10, 0, 10,FALSE,FALSE},
|
||||||
{ OFN_ENABLESIZING ,-10, 0, 0, 10, TRUE,FALSE},
|
{ OFN_ENABLESIZING ,-10, 0, 0, 10,FALSE,FALSE},
|
||||||
{ OFN_ENABLESIZING , 10, 0, 0, 10,FALSE,FALSE},
|
{ OFN_ENABLESIZING , 10, 0, 0, 10,FALSE,FALSE},
|
||||||
|
{ OFN_ENABLESIZING , 0, 0, 10, 20,FALSE,FALSE},
|
||||||
/* mark the end */
|
/* mark the end */
|
||||||
{ 0xffffffff }
|
{ 0xffffffff }
|
||||||
};
|
};
|
||||||
|
@ -331,14 +332,14 @@ static LONG_PTR WINAPI resize_template_hook(HWND dlg, UINT msg, WPARAM wParam, L
|
||||||
}
|
}
|
||||||
case WM_NOTIFY:
|
case WM_NOTIFY:
|
||||||
{
|
{
|
||||||
if(( (LPNMHDR)lParam)->code == CDN_INITDONE){
|
if(( (LPNMHDR)lParam)->code == CDN_FOLDERCHANGE){
|
||||||
GetWindowRect( parent, &initrc);
|
GetWindowRect( parent, &initrc);
|
||||||
if( (resize = resize_testcases[index].resize_init)){
|
if( (resize = resize_testcases[index].resize_folderchange)){
|
||||||
MoveWindow( parent, initrc.left,initrc.top, initrc.right - initrc.left + resize,
|
MoveWindow( parent, initrc.left,initrc.top, initrc.right - initrc.left + resize,
|
||||||
initrc.bottom - initrc.top + resize, TRUE);
|
initrc.bottom - initrc.top + resize, TRUE);
|
||||||
}
|
}
|
||||||
} else if(( (LPNMHDR)lParam)->code == CDN_FOLDERCHANGE){
|
} else if(( (LPNMHDR)lParam)->code == CDN_SELCHANGE){
|
||||||
if( (resize = resize_testcases[index].resize_folderchg)){
|
if( (resize = resize_testcases[index].resize_selchange)){
|
||||||
GetWindowRect( parent, &rc);
|
GetWindowRect( parent, &rc);
|
||||||
MoveWindow( parent, rc.left,rc.top, rc.right - rc.left + resize,
|
MoveWindow( parent, rc.left,rc.top, rc.right - rc.left + resize,
|
||||||
rc.bottom - rc.top + resize, TRUE);
|
rc.bottom - rc.top + resize, TRUE);
|
||||||
|
@ -619,7 +620,7 @@ static void test_ok(void)
|
||||||
int i;
|
int i;
|
||||||
DWORD ret;
|
DWORD ret;
|
||||||
|
|
||||||
if (!GetTempFileNameA(".", "tmp", 0, tmpfilename)) {
|
if (!GetTempFileNameA(".", "txt", 0, tmpfilename)) {
|
||||||
skip("Failed to create a temporary file name\n");
|
skip("Failed to create a temporary file name\n");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue