Nikolay Sivov : comctl32/updown: Allow ranges with max < min for Up/ Down control.
Alexandre Julliard
julliard at winehq.org
Fri Apr 10 08:10:16 CDT 2009
Module: wine
Branch: master
Commit: b2917cf59894cb2f92ad8e69c1e6bc2038bc5e87
URL: http://source.winehq.org/git/wine.git/?a=commit;h=b2917cf59894cb2f92ad8e69c1e6bc2038bc5e87
Author: Nikolay Sivov <bunglehead at gmail.com>
Date: Fri Apr 10 04:52:27 2009 -0400
comctl32/updown: Allow ranges with max < min for Up/Down control.
---
dlls/comctl32/updown.c | 39 +++++++++++++++++++++++++++------------
1 files changed, 27 insertions(+), 12 deletions(-)
diff --git a/dlls/comctl32/updown.c b/dlls/comctl32/updown.c
index d0bc27c..a4b9271 100644
--- a/dlls/comctl32/updown.c
+++ b/dlls/comctl32/updown.c
@@ -470,6 +470,27 @@ static LRESULT UPDOWN_KeyPressed(UPDOWN_INFO *infoPtr, int key)
}
/***********************************************************************
+ * UPDOWN_SetRange
+ *
+ * Handle UDM_SETRANGE, UDM_SETRANGE32
+ *
+ * FIXME: handle Max == Min properly:
+ * - arrows should be disabled (without WS_DISABLED set),
+ * visually they can't be pressed and don't respond;
+ * - all input messages should still pass in.
+ */
+static LRESULT UPDOWN_SetRange(UPDOWN_INFO *infoPtr, INT Max, INT Min)
+{
+ infoPtr->MaxVal = Max;
+ infoPtr->MinVal = Min;
+
+ TRACE("UpDown Ctrl new range(%d to %d), hwnd=%p\n",
+ infoPtr->MinVal, infoPtr->MaxVal, infoPtr->Self);
+
+ return 0;
+}
+
+/***********************************************************************
* UPDOWN_MouseWheel
*
* Handle mouse wheel scrolling
@@ -1045,12 +1066,11 @@ static LRESULT WINAPI UpDownWindowProc(HWND hwnd, UINT message, WPARAM wParam, L
return MAKELONG(infoPtr->MaxVal, infoPtr->MinVal);
case UDM_SETRANGE:
- /* we must have: */
- infoPtr->MaxVal = (short)(lParam); /* UD_MINVAL <= Max <= UD_MAXVAL */
- infoPtr->MinVal = (short)HIWORD(lParam); /* UD_MINVAL <= Min <= UD_MAXVAL */
- /* |Max-Min| <= UD_MAXVAL */
- TRACE("UpDown Ctrl new range(%d to %d), hwnd=%p\n",
- infoPtr->MinVal, infoPtr->MaxVal, hwnd);
+ /* we must have:
+ UD_MINVAL <= Max <= UD_MAXVAL
+ UD_MINVAL <= Min <= UD_MAXVAL
+ |Max-Min| <= UD_MAXVAL */
+ UPDOWN_SetRange(infoPtr, (short)lParam, (short)HIWORD(lParam));
break;
case UDM_GETRANGE32:
@@ -1059,12 +1079,7 @@ static LRESULT WINAPI UpDownWindowProc(HWND hwnd, UINT message, WPARAM wParam, L
break;
case UDM_SETRANGE32:
- infoPtr->MinVal = (INT)wParam;
- infoPtr->MaxVal = (INT)lParam;
- if (infoPtr->MaxVal <= infoPtr->MinVal)
- infoPtr->MaxVal = infoPtr->MinVal + 1;
- TRACE("UpDown Ctrl new range(%d to %d), hwnd=%p\n",
- infoPtr->MinVal, infoPtr->MaxVal, hwnd);
+ UPDOWN_SetRange(infoPtr, (INT)lParam, (INT)wParam);
break;
case UDM_GETPOS32:
More information about the wine-cvs
mailing list