comdlg32: memorize and restore the size of the file dialog between calls.
Rein Klazes
wijn at online.nl
Fri Jul 10 03:07:48 CDT 2009
Includes some fine tuning to fix a couple of todo's in the tests.
---
dlls/comdlg32/filedlg.c | 25 +++++++++++++++++--------
dlls/comdlg32/tests/filedlg.c | 19 ++++++++++---------
2 files changed, 27 insertions(+), 17 deletions(-)
diff --git a/dlls/comdlg32/filedlg.c b/dlls/comdlg32/filedlg.c
index faed51a..041d75c 100644
--- a/dlls/comdlg32/filedlg.c
+++ b/dlls/comdlg32/filedlg.c
@@ -172,6 +172,7 @@ typedef struct tagFD32_PRIVATE
const char FileOpenDlgInfosStr[] = "FileOpenDlgInfos"; /* windows property description string */
static const char LookInInfosStr[] = "LookInInfos"; /* LOOKIN combo box property */
+static SIZE MemDialogSize = { 0, 0}; /* keep size of the (resizable) dialog */
/***********************************************************************
* Prototypes
@@ -1197,13 +1198,14 @@ INT_PTR CALLBACK FileOpenDlgProc95(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM l
if( fodInfos->DlgInfos.hwndCustomDlg)
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_FOLDERCHANGE);
+ }
if (fodInfos->ofnInfos->Flags & OFN_ENABLESIZING)
{
GetWindowRect( hwnd, &rc);
- /* FIXME: should remember sizes of last invocation */
fodInfos->sizedlg.cx = rc.right - rc.left;
fodInfos->sizedlg.cy = rc.bottom - rc.top;
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,
rc.right - gripx, rc.bottom - gripy,
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)
- {
- SendCustomDlgNotificationMessage(hwnd,CDN_FOLDERCHANGE);
SendCustomDlgNotificationMessage(hwnd,CDN_SELCHANGE);
- }
+
return 0;
}
case WM_SIZE:
@@ -1242,9 +1247,13 @@ INT_PTR CALLBACK FileOpenDlgProc95(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM l
return FILEDLG95_OnWMGetIShellBrowser(hwnd);
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:
{
LPNMHDR lpnmh = (LPNMHDR)lParam;
diff --git a/dlls/comdlg32/tests/filedlg.c b/dlls/comdlg32/tests/filedlg.c
index e81d054..63375bb 100644
--- a/dlls/comdlg32/tests/filedlg.c
+++ b/dlls/comdlg32/tests/filedlg.c
@@ -273,8 +273,8 @@ static void test_create_view_template(void)
/* test cases for resizing of the file dialog */
struct {
DWORD flags;
- int resize_init; /* change in CDN_INITDONE handler */
- int resize_folderchg; /* change in CDN_FOLDERCHANGE handler */
+ int resize_folderchange; /* change in CDN_FOLDERCHANGE handler */
+ int resize_selchange; /* change in CDN_SELCHANGE handler */
int resize_timer1; /* change in first WM_TIMER handler */
int resize_check; /* expected change (in second WM_TIMER handler) */
BOOL todo; /* mark that test todo_wine */
@@ -285,10 +285,11 @@ struct {
{ OFN_ENABLESIZING , 0, 0, 0, 0,FALSE,FALSE},
{ OFN_ENABLESIZING , 0, 0,-10, 0,FALSE,FALSE},
{ 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 ,-10, 0, 0, 10, TRUE,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 */
{ 0xffffffff }
};
@@ -331,14 +332,14 @@ static LONG_PTR WINAPI resize_template_hook(HWND dlg, UINT msg, WPARAM wParam, L
}
case WM_NOTIFY:
{
- if(( (LPNMHDR)lParam)->code == CDN_INITDONE){
+ if(( (LPNMHDR)lParam)->code == CDN_FOLDERCHANGE){
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,
initrc.bottom - initrc.top + resize, TRUE);
}
- } else if(( (LPNMHDR)lParam)->code == CDN_FOLDERCHANGE){
- if( (resize = resize_testcases[index].resize_folderchg)){
+ } else if(( (LPNMHDR)lParam)->code == CDN_SELCHANGE){
+ if( (resize = resize_testcases[index].resize_selchange)){
GetWindowRect( parent, &rc);
MoveWindow( parent, rc.left,rc.top, rc.right - rc.left + resize,
rc.bottom - rc.top + resize, TRUE);
@@ -619,7 +620,7 @@ static void test_ok(void)
int i;
DWORD ret;
- if (!GetTempFileNameA(".", "tmp", 0, tmpfilename)) {
+ if (!GetTempFileNameA(".", "txt", 0, tmpfilename)) {
skip("Failed to create a temporary file name\n");
return;
}
--
1.6.3.3
More information about the wine-patches
mailing list