Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSilenio Quarti2011-08-17 22:33:08 +0000
committerSilenio Quarti2011-08-17 22:33:08 +0000
commit0af6a7dcf02fe44885063157294405c3130cd181 (patch)
treebc143d7ef7447a7e3e66531618ca19902257b5ac /bundles/org.eclipse.swt/Eclipse SWT Printing
parent956064920164af846897dbf9e7041081754b9dbf (diff)
downloadeclipse.platform.swt-0af6a7dcf02fe44885063157294405c3130cd181.tar.gz
eclipse.platform.swt-0af6a7dcf02fe44885063157294405c3130cd181.tar.xz
eclipse.platform.swt-0af6a7dcf02fe44885063157294405c3130cd181.zip
Bug 281912 - printing to non-default printer no longer works properly
Diffstat (limited to 'bundles/org.eclipse.swt/Eclipse SWT Printing')
-rw-r--r--[-rwxr-xr-x]bundles/org.eclipse.swt/Eclipse SWT Printing/win32/org/eclipse/swt/printing/Printer.java70
1 files changed, 36 insertions, 34 deletions
diff --git a/bundles/org.eclipse.swt/Eclipse SWT Printing/win32/org/eclipse/swt/printing/Printer.java b/bundles/org.eclipse.swt/Eclipse SWT Printing/win32/org/eclipse/swt/printing/Printer.java
index 9e9c64c2de..7acec23a00 100755..100644
--- a/bundles/org.eclipse.swt/Eclipse SWT Printing/win32/org/eclipse/swt/printing/Printer.java
+++ b/bundles/org.eclipse.swt/Eclipse SWT Printing/win32/org/eclipse/swt/printing/Printer.java
@@ -222,46 +222,48 @@ protected void create(DeviceData deviceData) {
lpInitData = OS.HeapAlloc(hHeap, OS.HEAP_ZERO_MEMORY, devmodeData.length);
OS.MoveMemory(lpInitData, devmodeData, devmodeData.length);
} else {
- /* Initialize DEVMODE for the default printer. */
- PRINTDLG pd = new PRINTDLG();
- pd.lStructSize = PRINTDLG.sizeof;
- pd.Flags = OS.PD_RETURNDEFAULT;
- if (!OS.PrintDlg(pd)) SWT.error(SWT.ERROR_NO_HANDLES);
- if (pd.hDevMode != 0) {
- int /*long*/ hGlobal = pd.hDevMode;
- int /*long*/ ptr = OS.GlobalLock(hGlobal);
- int size = OS.GlobalSize(hGlobal);
- lpInitData = OS.HeapAlloc(hHeap, OS.HEAP_ZERO_MEMORY, size);
- OS.MoveMemory(lpInitData, ptr, size);
- OS.GlobalUnlock(hGlobal);
- OS.GlobalFree(pd.hDevMode);
+ if (!OS.IsWinCE) {
+ int /*long*/ [] hPrinter = new int /*long*/ [1];
+ OS.OpenPrinter(device, hPrinter, 0);
+ if (hPrinter[0] != 0) {
+ int dwNeeded = OS.DocumentProperties(0, hPrinter[0], device, 0, 0, 0);
+ if (dwNeeded >= 0) {
+ lpInitData = OS.HeapAlloc(hHeap, OS.HEAP_ZERO_MEMORY, dwNeeded);
+ int rc = OS.DocumentProperties(0, hPrinter[0], device, lpInitData, 0, OS.DM_OUT_BUFFER);
+ if (rc != OS.IDOK) {
+ OS.HeapFree(hHeap, 0, lpInitData);
+ lpInitData = 0;
+ }
+ }
+ OS.ClosePrinter(hPrinter[0]);
+ }
}
- if (pd.hDevNames != 0) OS.GlobalFree(pd.hDevNames);
}
/* Initialize DEVMODE struct fields from the printerData. */
- DEVMODE devmode = OS.IsUnicode ? (DEVMODE)new DEVMODEW () : new DEVMODEA ();
- OS.MoveMemory(devmode, lpInitData, DEVMODE.sizeof);
- devmode.dmFields |= OS.DM_ORIENTATION;
- devmode.dmOrientation = data.orientation == PrinterData.LANDSCAPE ? OS.DMORIENT_LANDSCAPE : OS.DMORIENT_PORTRAIT;
- if (data.copyCount != 1) {
- devmode.dmFields |= OS.DM_COPIES;
- devmode.dmCopies = (short)data.copyCount;
- }
- if (data.collate != false) {
- devmode.dmFields |= OS.DM_COLLATE;
- devmode.dmCollate = OS.DMCOLLATE_TRUE;
- }
- if (data.duplex != SWT.DEFAULT) {
- devmode.dmFields |= OS.DM_DUPLEX;
- switch (data.duplex) {
- case PrinterData.DUPLEX_SHORT_EDGE: devmode.dmDuplex = OS.DMDUP_HORIZONTAL; break;
- case PrinterData.DUPLEX_LONG_EDGE: devmode.dmDuplex = OS.DMDUP_VERTICAL; break;
- default: devmode.dmDuplex = OS.DMDUP_SIMPLEX;
+ if (lpInitData != 0) {
+ DEVMODE devmode = OS.IsUnicode ? (DEVMODE)new DEVMODEW () : new DEVMODEA ();
+ OS.MoveMemory(devmode, lpInitData, DEVMODE.sizeof);
+ devmode.dmFields |= OS.DM_ORIENTATION;
+ devmode.dmOrientation = data.orientation == PrinterData.LANDSCAPE ? OS.DMORIENT_LANDSCAPE : OS.DMORIENT_PORTRAIT;
+ if (data.copyCount != 1) {
+ devmode.dmFields |= OS.DM_COPIES;
+ devmode.dmCopies = (short)data.copyCount;
+ }
+ if (data.collate != false) {
+ devmode.dmFields |= OS.DM_COLLATE;
+ devmode.dmCollate = OS.DMCOLLATE_TRUE;
}
+ if (data.duplex != SWT.DEFAULT) {
+ devmode.dmFields |= OS.DM_DUPLEX;
+ switch (data.duplex) {
+ case PrinterData.DUPLEX_SHORT_EDGE: devmode.dmDuplex = OS.DMDUP_HORIZONTAL; break;
+ case PrinterData.DUPLEX_LONG_EDGE: devmode.dmDuplex = OS.DMDUP_VERTICAL; break;
+ default: devmode.dmDuplex = OS.DMDUP_SIMPLEX;
+ }
+ }
+ OS.MoveMemory(lpInitData, devmode, DEVMODE.sizeof);
}
- OS.MoveMemory(lpInitData, devmode, DEVMODE.sizeof);
-
handle = OS.CreateDC(driver, device, 0, lpInitData);
if (lpInitData != 0) OS.HeapFree(hHeap, 0, lpInitData);
if (handle == 0) SWT.error(SWT.ERROR_NO_HANDLES);

Back to the top