diff --git a/dlls/comctl32/toolbar.c b/dlls/comctl32/toolbar.c index 83cb674c9d5..695e4506fba 100644 --- a/dlls/comctl32/toolbar.c +++ b/dlls/comctl32/toolbar.c @@ -4922,7 +4922,28 @@ TOOLBAR_SetState (TOOLBAR_INFO *infoPtr, INT Id, LPARAM lParam) static LRESULT TOOLBAR_SetStyle (TOOLBAR_INFO *infoPtr, DWORD style) { + DWORD dwOldStyle = infoPtr->dwStyle; + + TRACE("new style 0x%08x\n", style); + + if (style & TBSTYLE_LIST) + infoPtr->dwDTFlags = DT_LEFT | DT_VCENTER | DT_SINGLELINE | DT_END_ELLIPSIS; + else + infoPtr->dwDTFlags = DT_CENTER | DT_END_ELLIPSIS; + infoPtr->dwStyle = style; + TOOLBAR_CheckStyle(infoPtr); + + if ((dwOldStyle ^ style) & (TBSTYLE_WRAPABLE | CCS_VERT)) + TOOLBAR_LayoutToolbar(infoPtr); + + /* only resize if one of the CCS_* styles was changed */ + if ((dwOldStyle ^ style) & COMMON_STYLES) + { + TOOLBAR_AutoSize(infoPtr); + InvalidateRect(infoPtr->hwndSelf, NULL, TRUE); + } + return 0; } @@ -6337,30 +6358,7 @@ static LRESULT TOOLBAR_StyleChanged (TOOLBAR_INFO *infoPtr, INT nType, const STYLESTRUCT *lpStyle) { if (nType == GWL_STYLE) - { - DWORD dwOldStyle = infoPtr->dwStyle; - - if (lpStyle->styleNew & TBSTYLE_LIST) - infoPtr->dwDTFlags = DT_LEFT | DT_VCENTER | DT_SINGLELINE | DT_END_ELLIPSIS; - else - infoPtr->dwDTFlags = DT_CENTER | DT_END_ELLIPSIS; - - TRACE("new style 0x%08x\n", lpStyle->styleNew); - - infoPtr->dwStyle = lpStyle->styleNew; - TOOLBAR_CheckStyle (infoPtr); - - if ((dwOldStyle ^ lpStyle->styleNew) & (TBSTYLE_WRAPABLE | CCS_VERT)) - TOOLBAR_LayoutToolbar(infoPtr); - - /* only resize if one of the CCS_* styles was changed */ - if ((dwOldStyle ^ lpStyle->styleNew) & COMMON_STYLES) - { - TOOLBAR_AutoSize (infoPtr); - - InvalidateRect(infoPtr->hwndSelf, NULL, TRUE); - } - } + return TOOLBAR_SetStyle(infoPtr, lpStyle->styleNew); return 0; }