PageSetupDlg

Ulrich Czekalla ulrich.czekalla at utoronto.ca
Tue Jan 10 16:16:29 CST 2006


The current code does not always use the values provided but the hDevMode member
of the PAGESETUPDLG struct. 

ChangeLog
    Ulrich Czekalla <ulrich at codeweavers.com>
    * If provided use and update hDevMode in the PAGESETUPDLG struct
    * Update the dmDefaultSourcea return value inside hDevMode
-------------- next part --------------
Subject: [PATCH] If provided, use and update hDevMode in the PAGESETUPDLG struct

---

 dlls/commdlg/printdlg.c |   77 ++++++++++++++++++++++++++++++++++-------------
 1 files changed, 55 insertions(+), 22 deletions(-)

dfea6593e5a437633afd2238356552f7a276e7ea
diff --git a/dlls/commdlg/printdlg.c b/dlls/commdlg/printdlg.c
index 30e769e..19aee4b 100644
--- a/dlls/commdlg/printdlg.c
+++ b/dlls/commdlg/printdlg.c
@@ -2480,18 +2480,29 @@ PRINTDLG_PS_UpdateDlgStructA(HWND hDlg, 
     
     dn = GlobalLock(pda->pdlg.hDevNames);
     dm = GlobalLock(pda->pdlg.hDevMode);
+
+    /* Save paper orientation into device context */
     if(pda->curdlg.ptPaperSize.x > pda->curdlg.ptPaperSize.y)
-	dm->u1.s1.dmOrientation = DMORIENT_LANDSCAPE;
+        dm->u1.s1.dmOrientation = DMORIENT_LANDSCAPE;
     else
-	dm->u1.s1.dmOrientation = DMORIENT_PORTRAIT;
-    
+        dm->u1.s1.dmOrientation = DMORIENT_PORTRAIT;
+
+    /* Save paper size into the device context */
     paperword = SendDlgItemMessageA(hDlg,cmb2,CB_GETITEMDATA,
-	SendDlgItemMessageA(hDlg, cmb2, CB_GETCURSEL, 0, 0), 0);
+        SendDlgItemMessageA(hDlg, cmb2, CB_GETCURSEL, 0, 0), 0);
     if (paperword != CB_ERR)
-	dm->u1.s1.dmPaperSize = paperword;
+        dm->u1.s1.dmPaperSize = paperword;
     else
-	FIXME("could not get dialog text for papersize cmbbox?\n");
-    
+        FIXME("could not get dialog text for papersize cmbbox?\n");
+
+    /* Save paper source into the device context */
+    paperword = SendDlgItemMessageA(hDlg,cmb1,CB_GETITEMDATA,
+        SendDlgItemMessageA(hDlg, cmb1, CB_GETCURSEL, 0, 0), 0);
+    if (paperword != CB_ERR)
+        dm->dmDefaultSource = paperword;
+    else
+        FIXME("could not get dialog text for papersize cmbbox?\n");
+
     GlobalUnlock(pda->pdlg.hDevNames);
     GlobalUnlock(pda->pdlg.hDevMode);
 
@@ -2510,7 +2521,10 @@ PRINTDLG_PS_UpdateDlgStructW(HWND hDlg, 
     dm = GlobalLock(pda->pdlg.hDevMode);
     devname	= ((WCHAR*)dn)+dn->wDeviceOffset;
     portname	= ((WCHAR*)dn)+dn->wOutputOffset;
+
+    /* Save paper size into device context */
     PRINTDLG_SetUpPaperComboBoxW(hDlg,cmb2,devname,portname,dm);
+    /* Save paper source into device context */
     PRINTDLG_SetUpPaperComboBoxW(hDlg,cmb3,devname,portname,dm);
 
     if (GetDlgItemTextW(hDlg,cmb2,papername,sizeof(papername))>0) {
@@ -3345,20 +3359,26 @@ BOOL WINAPI PageSetupDlgA(LPPAGESETUPDLG
             return FALSE;
         }
 
-    /* First get default printer data, we need it right after that. */
+    /* Initialize default printer struct. If no printer device info is specified
+       retrieve the default printer data. */
     memset(&pdlg,0,sizeof(pdlg));
     pdlg.lStructSize	= sizeof(pdlg);
-    pdlg.Flags		= PD_RETURNDEFAULT;
-    bRet = PrintDlgA(&pdlg);
-    if (!bRet){
-	if(!(setupdlg->Flags & PSD_NOWARNING)){
-	    char errstr[256];
-    	    LoadStringA(COMDLG32_hInstance, PD32_NO_DEFAULT_PRINTER, errstr, 255);
-    	    MessageBoxA(setupdlg->hwndOwner, errstr, 0, MB_OK | MB_ICONERROR);
-	}
-	return FALSE;
+    if (setupdlg->hDevMode && setupdlg->hDevNames) {
+        pdlg.hDevMode = setupdlg->hDevMode;
+        pdlg.hDevNames = setupdlg->hDevNames;
+    } else {
+        pdlg.Flags = PD_RETURNDEFAULT;
+        bRet = PrintDlgA(&pdlg);
+        if (!bRet){
+            if (!(setupdlg->Flags & PSD_NOWARNING)) {
+                char errstr[256];
+                LoadStringA(COMDLG32_hInstance, PD32_NO_DEFAULT_PRINTER, errstr, 255);
+                MessageBoxA(setupdlg->hwndOwner, errstr, 0, MB_OK | MB_ICONERROR);
+            }
+            return FALSE;
+        }
     }
-   
+
     /* short cut exit, just return default values */
     if (setupdlg->Flags & PSD_RETURNDEFAULT) {
 	DEVMODEA *dm;
@@ -3427,12 +3447,25 @@ BOOL WINAPI PageSetupDlgW(LPPAGESETUPDLG
 	      setupdlg->hInstance, setupdlg->Flags, flagstr);
     }
 
-    /* First get default printer data, we need it right after that. */
+    /* Initialize default printer struct. If no printer device info is specified
+       retrieve the default printer data. */
     memset(&pdlg,0,sizeof(pdlg));
     pdlg.lStructSize	= sizeof(pdlg);
-    pdlg.Flags		= PD_RETURNDEFAULT;
-    bRet = PrintDlgW(&pdlg);
-    if (!bRet) return FALSE;
+    if (setupdlg->hDevMode && setupdlg->hDevNames) {
+        pdlg.hDevMode = setupdlg->hDevMode;
+        pdlg.hDevNames = setupdlg->hDevNames;
+    } else {
+        pdlg.Flags = PD_RETURNDEFAULT;
+        bRet = PrintDlgW(&pdlg);
+        if (!bRet){
+            if (!(setupdlg->Flags & PSD_NOWARNING)) {
+                WCHAR errstr[256];
+                LoadStringW(COMDLG32_hInstance, PD32_NO_DEFAULT_PRINTER, errstr, 255);
+                MessageBoxW(setupdlg->hwndOwner, errstr, 0, MB_OK | MB_ICONERROR);
+            }
+            return FALSE;
+        }
+    }
 
     /* short cut exit, just return default values */
     if (setupdlg->Flags & PSD_RETURNDEFAULT) {
-- 
1.0.6


More information about the wine-patches mailing list