Huw Davies : comdlg32: Fix parsing of the margin edit controls.

Alexandre Julliard julliard at winehq.org
Tue Jan 20 08:27:45 CST 2009


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

Author: Huw Davies <huw at codeweavers.com>
Date:   Mon Jan 19 14:11:20 2009 +0000

comdlg32: Fix parsing of the margin edit controls.

---

 dlls/comdlg32/printdlg.c |   66 ++++++++++++++++++++++++++++++++-------------
 1 files changed, 47 insertions(+), 19 deletions(-)

diff --git a/dlls/comdlg32/printdlg.c b/dlls/comdlg32/printdlg.c
index 41ead34..54de61e 100644
--- a/dlls/comdlg32/printdlg.c
+++ b/dlls/comdlg32/printdlg.c
@@ -2856,14 +2856,6 @@ PRINTDLG_PS_ChangePaperPrev(const PageSetupDataA *pda)
     return TRUE;
 }
 
-#define GETVAL(idc,val) \
-if(msg == EN_CHANGE){ \
-    if (GetDlgItemTextA(hDlg,idc,buf,sizeof(buf)) > 0)\
-        val = _c_str2sizeA(pda->dlga,buf); \
-    else\
-	FIXME("could not get dlgitemtexta for %x\n",id);  \
-}
-
 static inline LONG *element_from_margin_id(RECT *rc, WORD id)
 {
     switch(id)
@@ -2891,6 +2883,50 @@ static void update_margin_edits(HWND hDlg, const PageSetupDataA *pda, WORD id)
     }
 }
 
+static void margin_edit_notification(HWND hDlg, PageSetupDataA *pda, WORD msg, WORD id)
+{
+    switch (msg)
+    {
+    case EN_CHANGE:
+      {
+        WCHAR buf[10];
+        LONG val = 0;
+        LONG *value = element_from_margin_id(&pda->dlga->rtMargin, id);
+
+        if (GetDlgItemTextW(hDlg, id, buf, sizeof(buf) / sizeof(buf[0])) != 0)
+        {
+            WCHAR *end;
+            WCHAR decimal = '.';
+
+            val = strtolW(buf, &end, 10);
+            if(end != buf || *end == decimal)
+            {
+                int mult = is_metric(pda) ? 100 : 1000;
+                val *= mult;
+                if(*end == decimal)
+                {
+                    while(mult > 1)
+                    {
+                        end++;
+                        mult /= 10;
+                        if(isdigitW(*end))
+                            val += (*end - '0') * mult;
+                        else
+                            break;
+                    }
+                }
+            }
+        }
+        *value = val;
+        return;
+      }
+
+    case EN_KILLFOCUS:
+        update_margin_edits(hDlg, pda, id);
+        return;
+    }
+}
+
 static void set_margin_groupbox_title(HWND hDlg, const PageSetupDataA *pda)
 {
     WCHAR title[256];
@@ -2917,8 +2953,7 @@ PRINTDLG_PS_WMCommandA(
 ) {
     WORD msg = HIWORD(wParam);
     WORD id  = LOWORD(wParam);
-    char buf[200];
-	
+
     TRACE("loword (lparam) %d, wparam 0x%lx, lparam %08lx\n",
 	    LOWORD(lParam),wParam,lParam);
     switch (id)  {
@@ -3047,22 +3082,15 @@ PRINTDLG_PS_WMCommandA(
 	    break;
 	}       
     case edt4:
-        GETVAL(id, pda->dlga->rtMargin.left);
-	break;
     case edt5:
-        GETVAL(id, pda->dlga->rtMargin.top);
-	break;
     case edt6:
-        GETVAL(id, pda->dlga->rtMargin.right);
-	break;
     case edt7:
-        GETVAL(id, pda->dlga->rtMargin.bottom);
-	break;
+        margin_edit_notification(hDlg, pda, msg, id);
+        break;
     }
     InvalidateRect(GetDlgItem(hDlg, rct1), NULL, TRUE);
     return FALSE;
 }
-#undef GETVAL			   
 
 static BOOL
 PRINTDLG_PS_WMCommandW(




More information about the wine-cvs mailing list