Huw Davies : comdlg32: Initialize the paper comboboxes using unicode.

Alexandre Julliard julliard at winehq.org
Wed Jan 21 06:39:51 CST 2009


Module: wine
Branch: master
Commit: 75829a9509e3495869f13b793248f9d9431373f9
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=75829a9509e3495869f13b793248f9d9431373f9

Author: Huw Davies <huw at codeweavers.com>
Date:   Wed Jan 21 10:30:26 2009 +0000

comdlg32: Initialize the paper comboboxes using unicode.

---

 dlls/comdlg32/printdlg.c |   68 +++++++++++++++++++++++++++++++++++----------
 1 files changed, 53 insertions(+), 15 deletions(-)

diff --git a/dlls/comdlg32/printdlg.c b/dlls/comdlg32/printdlg.c
index 168b9b6..25bea64 100644
--- a/dlls/comdlg32/printdlg.c
+++ b/dlls/comdlg32/printdlg.c
@@ -2611,6 +2611,46 @@ static WCHAR *pagesetup_get_devname(const PageSetupDataA *pda)
     return name;
 }
 
+static void pagesetup_release_devname(const PageSetupDataA *pda, WCHAR *name)
+{
+    HeapFree(GetProcessHeap(), 0, name);
+}
+
+static WCHAR *pagesetup_get_portname(const PageSetupDataA *pda)
+{
+    DEVNAMES *dn;
+    int len;
+    WCHAR *name;
+
+    dn = GlobalLock(pda->dlga->hDevNames);
+    len = MultiByteToWideChar(CP_ACP, 0, (char*)dn + dn->wOutputOffset, -1, NULL, 0);
+    name = HeapAlloc(GetProcessHeap(), 0, len * sizeof(WCHAR));
+    MultiByteToWideChar(CP_ACP, 0, (char*)dn + dn->wOutputOffset, -1, name, len);
+    GlobalUnlock(pda->dlga->hDevNames);
+    return name;
+}
+
+static void pagesetup_release_portname(const PageSetupDataA *pda, WCHAR *name)
+{
+    HeapFree(GetProcessHeap(), 0, name);
+}
+
+static DEVMODEW *pagesetup_get_devmode(const PageSetupDataA *pda)
+{
+    DEVMODEA *dm;
+    DEVMODEW *dmW;
+
+    dm = GlobalLock(pda->dlga->hDevMode);
+    dmW = GdiConvertToDevmodeW(dm);
+    GlobalUnlock(pda->dlga->hDevMode);
+    return dmW;
+}
+
+static void pagesetup_release_devmode(const PageSetupDataA *pda, DEVMODEW *dm)
+{
+    HeapFree(GetProcessHeap(), 0, dm);
+}
+
 static BOOL pagesetup_update_papersize(PageSetupDataA *pda)
 {
     DEVNAMES *dn;
@@ -2804,22 +2844,20 @@ PRINTDLG_PS_ChangeActivePrinterA(LPSTR name, PageSetupDataA *pda){
  */
 static void pagesetup_init_combos(HWND hDlg, PageSetupDataA *pda)
 {
-    DEVNAMES	*dn;
-    DEVMODEA	*dm;
-    LPSTR	devname,portname;
-    LPWSTR devnameW;
+    DEVMODEW *dm;
+    LPWSTR devname, portname;
 
-    dn = GlobalLock(pda->dlga->hDevNames);
-    dm = GlobalLock(pda->dlga->hDevMode);
-    devnameW = pagesetup_get_devname(pda);
-    devname  = ((char*)dn)+dn->wDeviceOffset;
-    portname = ((char*)dn)+dn->wOutputOffset;
-    PRINTDLG_SetUpPrinterListComboW(hDlg, cmb1, devnameW);
-    PRINTDLG_SetUpPaperComboBoxA(hDlg,cmb2,devname,portname,dm);
-    PRINTDLG_SetUpPaperComboBoxA(hDlg,cmb3,devname,portname,dm);
-    HeapFree(GetProcessHeap(), 0, devnameW);
-    GlobalUnlock(pda->dlga->hDevNames);
-    GlobalUnlock(pda->dlga->hDevMode);
+    dm       = pagesetup_get_devmode(pda);
+    devname  = pagesetup_get_devname(pda);
+    portname = pagesetup_get_portname(pda);
+
+    PRINTDLG_SetUpPrinterListComboW(hDlg, cmb1, devname);
+    PRINTDLG_SetUpPaperComboBoxW(hDlg, cmb2, devname, portname, dm);
+    PRINTDLG_SetUpPaperComboBoxW(hDlg, cmb3, devname, portname, dm);
+
+    pagesetup_release_portname(pda, portname);
+    pagesetup_release_devname(pda, devname);
+    pagesetup_release_devmode(pda, dm);
 }
 
 static void PRINTDLG_PS_SetOrientationW(HWND hDlg, PageSetupDataW* pdw)




More information about the wine-cvs mailing list