Rein Klazes : comdlg32: Delay setting the initial size of resizable file dialog until the CDN_INITDONE notification has been processed .
Alexandre Julliard
julliard at winehq.org
Tue Jun 16 09:09:35 CDT 2009
Module: wine
Branch: master
Commit: b498fe7544702e97e5ab2fb9dbe11e7c3c2813f7
URL: http://source.winehq.org/git/wine.git/?a=commit;h=b498fe7544702e97e5ab2fb9dbe11e7c3c2813f7
Author: Rein Klazes <wijn at online.nl>
Date: Tue Jun 16 08:17:09 2009 +0200
comdlg32: Delay setting the initial size of resizable file dialog until the CDN_INITDONE notification has been processed.
---
dlls/comdlg32/filedlg.c | 6 +-
dlls/comdlg32/tests/filedlg.c | 126 +++++++++++++++++++++++++++++++++++++++++
2 files changed, 130 insertions(+), 2 deletions(-)
diff --git a/dlls/comdlg32/filedlg.c b/dlls/comdlg32/filedlg.c
index b820624..6e7f985 100644
--- a/dlls/comdlg32/filedlg.c
+++ b/dlls/comdlg32/filedlg.c
@@ -1111,7 +1111,7 @@ static LRESULT FILEDLG95_OnWMSize(HWND hwnd, WPARAM wParam, LPARAM lParam)
INT_PTR CALLBACK FileOpenDlgProc95(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
#if 0
- TRACE("0x%04x 0x%04x\n", hwnd, uMsg);
+ TRACE("%p 0x%04x\n", hwnd, uMsg);
#endif
switch(uMsg)
@@ -1146,6 +1146,9 @@ INT_PTR CALLBACK FileOpenDlgProc95(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM l
FILEDLG95_ResizeControls(hwnd, wParam, lParam);
FILEDLG95_FillControls(hwnd, wParam, lParam);
+ if(fodInfos->ofnInfos->Flags & OFN_EXPLORER)
+ SendCustomDlgNotificationMessage(hwnd,CDN_INITDONE);
+
if (fodInfos->ofnInfos->Flags & OFN_ENABLESIZING)
{
GetWindowRect( hwnd, &rc);
@@ -1162,7 +1165,6 @@ INT_PTR CALLBACK FileOpenDlgProc95(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM l
if(fodInfos->ofnInfos->Flags & OFN_EXPLORER)
{
- SendCustomDlgNotificationMessage(hwnd,CDN_INITDONE);
SendCustomDlgNotificationMessage(hwnd,CDN_FOLDERCHANGE);
SendCustomDlgNotificationMessage(hwnd,CDN_SELCHANGE);
}
diff --git a/dlls/comdlg32/tests/filedlg.c b/dlls/comdlg32/tests/filedlg.c
index 9714dda..8b8d6e7 100644
--- a/dlls/comdlg32/tests/filedlg.c
+++ b/dlls/comdlg32/tests/filedlg.c
@@ -270,9 +270,135 @@ static void test_create_view_template(void)
ok(!ret, "CommDlgExtendedError returned %#x\n", ret);
}
+/* 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_timer1; /* change in first WM_TIMER handler */
+ int resize_check; /* expected change (in second WM_TIMER handler) */
+ BOOL todo; /* mark that test todo_wine */
+} resize_testcases[] = {
+ { 0 , 10, 10, 10, 30,FALSE}, /* 0 */
+ { 0 ,-10,-10,-10,-30,FALSE},
+ { OFN_ENABLESIZING , 0, 0, 0, 0,FALSE},
+ { OFN_ENABLESIZING , 0, 0,-10, 0,FALSE},
+ { OFN_ENABLESIZING , 0, 0, 10, 10,FALSE},
+ { OFN_ENABLESIZING , 0,-10, 0, 10, TRUE}, /* 5 */
+ { OFN_ENABLESIZING , 0, 10, 0, 10,FALSE},
+ { OFN_ENABLESIZING ,-10, 0, 0, 10, TRUE},
+ { OFN_ENABLESIZING , 10, 0, 0, 10,FALSE},
+ /* mark the end */
+ { 0xffffffff }
+};
+
+static LONG_PTR WINAPI resize_template_hook(HWND dlg, UINT msg, WPARAM wParam, LPARAM lParam)
+{
+ static RECT initrc, rc;
+ static int index, count;
+ HWND parent = GetParent( dlg);
+ int resize;
+ switch( msg)
+ {
+ case WM_INITDIALOG:
+ {
+ DWORD style;
+
+ index = ((OPENFILENAME*)lParam)->lCustData;
+ count = 0;
+ /* test style */
+ style = GetWindowLong( parent, GWL_STYLE);
+ if( resize_testcases[index].flags & OFN_ENABLESIZING)
+ ok( style & WS_SIZEBOX,
+ "testid %d: dialog should have a WS_SIZEBOX style.\n", index);
+ else
+ ok( !(style & WS_SIZEBOX),
+ "testid %d: dialog should not have a WS_SIZEBOX style.\n", index);
+ break;
+ }
+ case WM_NOTIFY:
+ {
+ if(( (LPNMHDR)lParam)->code == CDN_INITDONE){
+ GetWindowRect( parent, &initrc);
+ if( (resize = resize_testcases[index].resize_init)){
+ 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)){
+ GetWindowRect( parent, &rc);
+ MoveWindow( parent, rc.left,rc.top, rc.right - rc.left + resize,
+ rc.bottom - rc.top + resize, TRUE);
+ }
+ SetTimer( dlg, 0, 100, 0);
+ }
+ break;
+ }
+ case WM_TIMER:
+ {
+ if( count == 0){
+ if( (resize = resize_testcases[index].resize_timer1)){
+ GetWindowRect( parent, &rc);
+ MoveWindow( parent, rc.left,rc.top, rc.right - rc.left + resize,
+ rc.bottom - rc.top + resize, TRUE);
+ }
+ } else if( count == 1){
+ resize = resize_testcases[index].resize_check;
+ GetWindowRect( parent, &rc);
+ if( resize_testcases[index].todo){
+ todo_wine {
+ ok( resize == rc.right - rc.left - initrc.right + initrc.left,
+ "testid %d size-x change %d expected %d\n", index,
+ rc.right - rc.left - initrc.right + initrc.left, resize);
+ ok( resize == rc.bottom - rc.top - initrc.bottom + initrc.top,
+ "testid %d size-y change %d expected %d\n", index,
+ rc.bottom - rc.top - initrc.bottom + initrc.top, resize);
+ }
+ }else{
+ ok( resize == rc.right - rc.left - initrc.right + initrc.left,
+ "testid %d size-x change %d expected %d\n", index,
+ rc.right - rc.left - initrc.right + initrc.left, resize);
+ ok( resize == rc.bottom - rc.top - initrc.bottom + initrc.top,
+ "testid %d size-y change %d expected %d\n", index,
+ rc.bottom - rc.top - initrc.bottom + initrc.top, resize);
+ }
+ KillTimer( dlg, 0);
+ PostMessage( parent, WM_COMMAND, IDCANCEL, 0);
+ }
+ count++;
+ }
+ break;
+ }
+ return 0;
+}
+
+static void test_resize(void)
+{
+ OPENFILENAME ofn = { sizeof(OPENFILENAME)};
+ char filename[1024] = {0};
+ DWORD ret;
+ int i;
+
+ ofn.lpstrFile = filename;
+ ofn.nMaxFile = 1042;
+ ofn.lpfnHook = (LPOFNHOOKPROC) resize_template_hook;
+ ofn.hInstance = GetModuleHandle(NULL);
+ ofn.lpTemplateName = "template1";
+ for( i = 0; resize_testcases[i].flags != 0xffffffff; i++) {
+ ofn.lCustData = i;
+ ofn.Flags = resize_testcases[i].flags |
+ OFN_ENABLEHOOK | OFN_EXPLORER| OFN_ENABLETEMPLATE ;
+ ret = GetOpenFileName(&ofn);
+ ok(!ret, "GetOpenFileName returned %#x\n", ret);
+ ret = CommDlgExtendedError();
+ ok(!ret, "CommDlgExtendedError returned %#x\n", ret);
+ }
+}
+
START_TEST(filedlg)
{
test_DialogCancel();
test_create_view_window2();
test_create_view_template();
+ test_resize();
}
More information about the wine-cvs
mailing list