Module: wine Branch: master Commit: f12f948849408881e2c4ea5a24b064b085c96fe0 URL: http://source.winehq.org/git/wine.git/?a=commit;h=f12f948849408881e2c4ea5a24...
Author: Nikolay Sivov bunglehead@gmail.com Date: Sun Oct 11 18:23:16 2009 +0400
comctl32/datetime: It isn't allowed to change DTS_SHOWNONE after creation.
---
dlls/comctl32/datetime.c | 20 ++++++++++++++++++++ dlls/comctl32/tests/datetime.c | 22 ++++++++++++++++++++++ 2 files changed, 42 insertions(+), 0 deletions(-)
diff --git a/dlls/comctl32/datetime.c b/dlls/comctl32/datetime.c index 65f7005..2b3d64b 100644 --- a/dlls/comctl32/datetime.c +++ b/dlls/comctl32/datetime.c @@ -1251,6 +1251,23 @@ DATETIME_Size (DATETIME_INFO *infoPtr, INT width, INT height) return 0; }
+static LRESULT +DATETIME_StyleChanging(DATETIME_INFO *infoPtr, WPARAM wStyleType, STYLESTRUCT *lpss) +{ + TRACE("(styletype=%lx, styleOld=0x%08x, styleNew=0x%08x)\n", + wStyleType, lpss->styleOld, lpss->styleNew); + + /* block DTS_SHOWNONE change */ + if ((lpss->styleNew ^ lpss->styleOld) & DTS_SHOWNONE) + { + if (lpss->styleOld & DTS_SHOWNONE) + lpss->styleNew |= DTS_SHOWNONE; + else + lpss->styleNew &= ~DTS_SHOWNONE; + } + + return 0; +}
static LRESULT DATETIME_StyleChanged(DATETIME_INFO *infoPtr, WPARAM wStyleType, const STYLESTRUCT *lpss) @@ -1449,6 +1466,9 @@ DATETIME_WindowProc (HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) case WM_COMMAND: return DATETIME_Command (infoPtr, wParam, lParam);
+ case WM_STYLECHANGING: + return DATETIME_StyleChanging(infoPtr, wParam, (LPSTYLESTRUCT)lParam); + case WM_STYLECHANGED: return DATETIME_StyleChanged(infoPtr, wParam, (LPSTYLESTRUCT)lParam);
diff --git a/dlls/comctl32/tests/datetime.c b/dlls/comctl32/tests/datetime.c index 973d411..8a3ad03 100644 --- a/dlls/comctl32/tests/datetime.c +++ b/dlls/comctl32/tests/datetime.c @@ -677,6 +677,27 @@ static void test_wm_set_get_text(void) DestroyWindow(hWnd); }
+static void test_dts_shownone(void) +{ + HWND hwnd; + DWORD style; + + /* it isn't allowed to change DTS_SHOWNONE after creation */ + hwnd = create_datetime_control(0); + style = GetWindowLong(hwnd, GWL_STYLE); + SetWindowLong(hwnd, GWL_STYLE, style | DTS_SHOWNONE); + style = GetWindowLong(hwnd, GWL_STYLE); + ok(!(style & DTS_SHOWNONE), "Expected DTS_SHOWNONE not to be set\n"); + DestroyWindow(hwnd); + + hwnd = create_datetime_control(DTS_SHOWNONE); + style = GetWindowLong(hwnd, GWL_STYLE); + SetWindowLong(hwnd, GWL_STYLE, style & ~DTS_SHOWNONE); + style = GetWindowLong(hwnd, GWL_STYLE); + ok(style & DTS_SHOWNONE, "Expected DTS_SHOWNONE to be set\n"); + DestroyWindow(hwnd); +} + START_TEST(datetime) { HMODULE hComctl32; @@ -704,4 +725,5 @@ START_TEST(datetime) test_dtm_set_range_swap_min_max(); test_dtm_set_and_get_system_time(); test_wm_set_get_text(); + test_dts_shownone(); }