[PATCH 1/7] Use a single timer for auto month scroll with prev/next buttons

Nikolay Sivov bunglehead at gmail.com
Tue Oct 6 14:23:55 CDT 2009


---
 dlls/comctl32/monthcal.c |   43 ++++++++++++++-----------------------------
 1 files changed, 14 insertions(+), 29 deletions(-)

diff --git a/dlls/comctl32/monthcal.c b/dlls/comctl32/monthcal.c
index 42710c0..34528f6 100644
--- a/dlls/comctl32/monthcal.c
+++ b/dlls/comctl32/monthcal.c
@@ -66,8 +66,7 @@ WINE_DEFAULT_DEBUG_CHANNEL(monthcal);
 #define MC_NEXTMONTHDELAY   350	/* when continuously pressing `next */
 										/* month', wait 500 ms before going */
 										/* to the next month */
-#define MC_NEXTMONTHTIMER   1			/* Timer ID's */
-#define MC_PREVMONTHTIMER   2
+#define MC_PREVNEXTMONTHTIMER   1	/* Timer ID's */
 
 #define countof(arr) (sizeof(arr)/sizeof(arr[0]))
 
@@ -1679,14 +1678,14 @@ MONTHCAL_LButtonDown(MONTHCAL_INFO *infoPtr, LPARAM lParam)
   case MCHT_TITLEBTNNEXT:
     MONTHCAL_GoToNextMonth(infoPtr);
     infoPtr->status = MC_NEXTPRESSED;
-    SetTimer(infoPtr->hwndSelf, MC_NEXTMONTHTIMER, MC_NEXTMONTHDELAY, 0);
+    SetTimer(infoPtr->hwndSelf, MC_PREVNEXTMONTHTIMER, MC_NEXTMONTHDELAY, 0);
     InvalidateRect(infoPtr->hwndSelf, NULL, FALSE);
     return 0;
 
   case MCHT_TITLEBTNPREV:
     MONTHCAL_GoToPrevMonth(infoPtr);
     infoPtr->status = MC_PREVPRESSED;
-    SetTimer(infoPtr->hwndSelf, MC_PREVMONTHTIMER, MC_NEXTMONTHDELAY, 0);
+    SetTimer(infoPtr->hwndSelf, MC_PREVNEXTMONTHTIMER, MC_NEXTMONTHDELAY, 0);
     InvalidateRect(infoPtr->hwndSelf, NULL, FALSE);
     return 0;
 
@@ -1767,14 +1766,9 @@ MONTHCAL_LButtonUp(MONTHCAL_INFO *infoPtr, LPARAM lParam)
 
   TRACE("\n");
 
-  if(infoPtr->status & MC_NEXTPRESSED) {
-    KillTimer(infoPtr->hwndSelf, MC_NEXTMONTHTIMER);
-    infoPtr->status &= ~MC_NEXTPRESSED;
-    redraw = TRUE;
-  }
-  if(infoPtr->status & MC_PREVPRESSED) {
-    KillTimer(infoPtr->hwndSelf, MC_PREVMONTHTIMER);
-    infoPtr->status &= ~MC_PREVPRESSED;
+  if(infoPtr->status & (MC_PREVPRESSED | MC_NEXTPRESSED)) {
+    KillTimer(infoPtr->hwndSelf, MC_PREVNEXTMONTHTIMER);
+    infoPtr->status &= ~(MC_PREVPRESSED | MC_NEXTPRESSED);
     redraw = TRUE;
   }
 
@@ -1830,30 +1824,21 @@ MONTHCAL_LButtonUp(MONTHCAL_INFO *infoPtr, LPARAM lParam)
 
 
 static LRESULT
-MONTHCAL_Timer(MONTHCAL_INFO *infoPtr, WPARAM wParam)
+MONTHCAL_Timer(MONTHCAL_INFO *infoPtr, WPARAM id)
 {
-  BOOL redraw = FALSE;
-
-  TRACE("%ld\n", wParam);
+  TRACE("%ld\n", id);
 
-  switch(wParam) {
-  case MC_NEXTMONTHTIMER:
-    redraw = TRUE;
-    MONTHCAL_GoToNextMonth(infoPtr);
-    break;
-  case MC_PREVMONTHTIMER:
-    redraw = TRUE;
-    MONTHCAL_GoToPrevMonth(infoPtr);
+  switch(id) {
+  case MC_PREVNEXTMONTHTIMER:
+    if(infoPtr->status & MC_NEXTPRESSED) MONTHCAL_GoToNextMonth(infoPtr);
+    if(infoPtr->status & MC_PREVPRESSED) MONTHCAL_GoToPrevMonth(infoPtr);
+    InvalidateRect(infoPtr->hwndSelf, NULL, FALSE);
     break;
   default:
-    ERR("got unknown timer\n");
+    ERR("got unknown timer %ld\n", id);
     break;
   }
 
-  /* redraw only if necessary */
-  if(redraw)
-    InvalidateRect(infoPtr->hwndSelf, NULL, FALSE);
-
   return 0;
 }
 
-- 
1.5.6.5


--=-7ylXcFfK4uZXxM+1/edk--




More information about the wine-patches mailing list