Nikolay Sivov : comctl32/monthcal: Make month popup menu respect multiple calendars.

Alexandre Julliard julliard at winehq.org
Mon Aug 16 12:24:57 CDT 2010


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

Author: Nikolay Sivov <nsivov at codeweavers.com>
Date:   Sun Aug  8 12:14:32 2010 +0400

comctl32/monthcal: Make month popup menu respect multiple calendars.

---

 dlls/comctl32/monthcal.c |   20 ++++++++++++++++----
 1 files changed, 16 insertions(+), 4 deletions(-)

diff --git a/dlls/comctl32/monthcal.c b/dlls/comctl32/monthcal.c
index 7ca5633..8425f67 100644
--- a/dlls/comctl32/monthcal.c
+++ b/dlls/comctl32/monthcal.c
@@ -2046,11 +2046,23 @@ MONTHCAL_LButtonDown(MONTHCAL_INFO *infoPtr, LPARAM lParam)
     i = TrackPopupMenu(hMenu,TPM_LEFTALIGN | TPM_NONOTIFY | TPM_RIGHTBUTTON | TPM_RETURNCMD,
 		       menupoint.x, menupoint.y, 0, infoPtr->hwndSelf, NULL);
 
-    if ((i > 0) && (i < 13) && infoPtr->minSel.wMonth != i)
+    if ((i > 0) && (i < 13) && infoPtr->calendars[ht.iOffset].month.wMonth != i)
     {
-	infoPtr->minSel.wMonth = i;
-	MONTHCAL_IsDateInValidRange(infoPtr, &infoPtr->minSel, TRUE);
-	InvalidateRect(infoPtr->hwndSelf, NULL, FALSE);
+        INT delta = i - infoPtr->calendars[ht.iOffset].month.wMonth;
+        SYSTEMTIME st;
+
+        /* check if change allowed by range set */
+        st = delta < 0 ? infoPtr->calendars[0].month :
+                         infoPtr->calendars[infoPtr->cal_num-1].month;
+        MONTHCAL_GetMonth(&st, delta);
+
+        if (MONTHCAL_IsDateInValidRange(infoPtr, &st, FALSE))
+        {
+            MONTHCAL_Scroll(infoPtr, delta);
+            MONTHCAL_NotifyDayState(infoPtr);
+            MONTHCAL_NotifySelectionChange(infoPtr);
+            InvalidateRect(infoPtr->hwndSelf, NULL, FALSE);
+        }
     }
     return 0;
   }




More information about the wine-cvs mailing list