Module: wine Branch: master Commit: b2917cf59894cb2f92ad8e69c1e6bc2038bc5e87 URL: http://source.winehq.org/git/wine.git/?a=commit;h=b2917cf59894cb2f92ad8e69c1...
Author: Nikolay Sivov bunglehead@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: