diff options
-rwxr-xr-x | bundles/org.eclipse.swt/Eclipse SWT Printing/win32/org/eclipse/swt/printing/PrintDialog.java | 21 |
1 files changed, 14 insertions, 7 deletions
diff --git a/bundles/org.eclipse.swt/Eclipse SWT Printing/win32/org/eclipse/swt/printing/PrintDialog.java b/bundles/org.eclipse.swt/Eclipse SWT Printing/win32/org/eclipse/swt/printing/PrintDialog.java index 500df29611..f38df7942f 100755 --- a/bundles/org.eclipse.swt/Eclipse SWT Printing/win32/org/eclipse/swt/printing/PrintDialog.java +++ b/bundles/org.eclipse.swt/Eclipse SWT Printing/win32/org/eclipse/swt/printing/PrintDialog.java @@ -327,16 +327,18 @@ public PrinterData open() { /* Initialize PRINTDLG fields, including DEVMODE. */ pd.Flags = OS.PD_RETURNDEFAULT; if (OS.PrintDlg(pd)) { - + if (pd.hDevNames != 0) { + OS.GlobalFree(pd.hDevNames); + pd.hDevNames = 0; + } + /* * If user setup info from a previous print dialog was specified, * then restore the previous DEVMODE struct. */ - int /*long*/ lpInitData = 0; - int /*long*/ hHeap = OS.GetProcessHeap(); byte devmodeData [] = printerData.otherData; if (devmodeData != null && devmodeData.length != 0) { - lpInitData = OS.HeapAlloc(hHeap, OS.HEAP_ZERO_MEMORY, devmodeData.length); + int /*long*/ lpInitData = OS.GlobalAlloc(OS.GMEM_FIXED | OS.GMEM_ZEROINIT, devmodeData.length); OS.MoveMemory(lpInitData, devmodeData, devmodeData.length); if (pd.hDevMode != 0) OS.GlobalFree(pd.hDevMode); pd.hDevMode = lpInitData; @@ -407,7 +409,6 @@ public PrinterData open() { TCHAR buffer = new TCHAR(0, size); OS.MoveMemory(buffer, ptr, size); OS.GlobalUnlock(hMem); - if (pd.hDevNames != 0) OS.GlobalFree(pd.hDevNames); int driverOffset = offsets[0]; int i = 0; @@ -460,11 +461,17 @@ public PrinterData open() { data.orientation = dmOrientation == OS.DMORIENT_LANDSCAPE ? PrinterData.LANDSCAPE : PrinterData.PORTRAIT; } OS.GlobalUnlock(hMem); - if (pd.hDevMode != 0) OS.GlobalFree(pd.hDevMode); - if (lpInitData != 0) OS.HeapFree(hHeap, 0, lpInitData); printerData = data; } } + if (pd.hDevNames != 0) { + OS.GlobalFree(pd.hDevNames); + pd.hDevNames = 0; + } + if (pd.hDevMode != 0) { + OS.GlobalFree(pd.hDevMode); + pd.hDevMode = 0; + } /* Destroy the BIDI orientation window */ if (hwndParent != hwndOwner) { if (enabled) OS.EnableWindow (hwndParent, true); |