comctl32: toolbar: Merge TOOLBAR_InsertButtonA and TOOLBAR_InsertButtonW.

This commit is contained in:
Mikołaj Zalewski 2006-10-11 20:50:11 +02:00 committed by Alexandre Julliard
parent c95aa8228a
commit 79433e1bda
1 changed files with 13 additions and 98 deletions

View File

@ -3808,12 +3808,11 @@ TOOLBAR_Indeterminate (HWND hwnd, WPARAM wParam, LPARAM lParam)
static LRESULT static LRESULT
TOOLBAR_InsertButtonA (HWND hwnd, WPARAM wParam, LPARAM lParam) TOOLBAR_InsertButtonT(HWND hwnd, WPARAM wParam, LPARAM lParam, BOOL fUnicode)
{ {
TOOLBAR_INFO *infoPtr = TOOLBAR_GetInfoPtr (hwnd); TOOLBAR_INFO *infoPtr = TOOLBAR_GetInfoPtr (hwnd);
LPTBBUTTON lpTbb = (LPTBBUTTON)lParam; LPTBBUTTON lpTbb = (LPTBBUTTON)lParam;
INT nIndex = (INT)wParam; INT nIndex = (INT)wParam;
TBUTTON_INFO *oldButtons;
if (lpTbb == NULL) if (lpTbb == NULL)
return FALSE; return FALSE;
@ -3823,7 +3822,6 @@ TOOLBAR_InsertButtonA (HWND hwnd, WPARAM wParam, LPARAM lParam)
if (nIndex == -1) { if (nIndex == -1) {
/* EPP: this seems to be an undocumented call (from my IE4) /* EPP: this seems to be an undocumented call (from my IE4)
* I assume in that case that: * I assume in that case that:
* - lpTbb->iString is a string pointer (not a string index in strings[] table
* - index of insertion is at the end of existing buttons * - index of insertion is at the end of existing buttons
* I only see this happen with nIndex == -1, but it could have a special * I only see this happen with nIndex == -1, but it could have a special
* meaning (like -nIndex (or ~nIndex) to get the real position of insertion). * meaning (like -nIndex (or ~nIndex) to get the real position of insertion).
@ -3839,14 +3837,10 @@ TOOLBAR_InsertButtonA (HWND hwnd, WPARAM wParam, LPARAM lParam)
TRACE("adjust index=%d\n", nIndex); TRACE("adjust index=%d\n", nIndex);
} }
oldButtons = infoPtr->buttons;
infoPtr->nNumButtons++; infoPtr->nNumButtons++;
infoPtr->buttons = Alloc (sizeof (TBUTTON_INFO) * infoPtr->nNumButtons); infoPtr->buttons = ReAlloc(infoPtr->buttons, sizeof(TBUTTON_INFO) * infoPtr->nNumButtons);
/* pre insert copy */ memmove(&infoPtr->buttons[nIndex+1], &infoPtr->buttons[nIndex],
if (nIndex > 0) { (infoPtr->nNumButtons - nIndex - 1) * sizeof(TBUTTON_INFO));
memcpy (&infoPtr->buttons[0], &oldButtons[0],
nIndex * sizeof(TBUTTON_INFO));
}
/* insert new button */ /* insert new button */
infoPtr->buttons[nIndex].iBitmap = lpTbb->iBitmap; infoPtr->buttons[nIndex].iBitmap = lpTbb->iBitmap;
@ -3856,21 +3850,16 @@ TOOLBAR_InsertButtonA (HWND hwnd, WPARAM wParam, LPARAM lParam)
infoPtr->buttons[nIndex].dwData = lpTbb->dwData; infoPtr->buttons[nIndex].dwData = lpTbb->dwData;
/* if passed string and not index, then add string */ /* if passed string and not index, then add string */
if(HIWORD(lpTbb->iString) && lpTbb->iString!=-1) { if(HIWORD(lpTbb->iString) && lpTbb->iString!=-1) {
Str_SetPtrAtoW ((LPWSTR *)&infoPtr->buttons[nIndex].iString, (LPCSTR )lpTbb->iString); if (fUnicode)
Str_SetPtrW((LPWSTR *)&infoPtr->buttons[nIndex].iString, (LPWSTR)lpTbb->iString);
else
Str_SetPtrAtoW((LPWSTR *)&infoPtr->buttons[nIndex].iString, (LPCSTR )lpTbb->iString);
} }
else else
infoPtr->buttons[nIndex].iString = lpTbb->iString; infoPtr->buttons[nIndex].iString = lpTbb->iString;
TOOLBAR_TooltipAddTool(infoPtr, &infoPtr->buttons[nIndex]); TOOLBAR_TooltipAddTool(infoPtr, &infoPtr->buttons[nIndex]);
/* post insert copy */
if (nIndex < infoPtr->nNumButtons - 1) {
memcpy (&infoPtr->buttons[nIndex+1], &oldButtons[nIndex],
(infoPtr->nNumButtons - nIndex - 1) * sizeof(TBUTTON_INFO));
}
Free (oldButtons);
TOOLBAR_CalcToolbar (hwnd); TOOLBAR_CalcToolbar (hwnd);
TOOLBAR_AutoSize (hwnd); TOOLBAR_AutoSize (hwnd);
@ -3879,80 +3868,6 @@ TOOLBAR_InsertButtonA (HWND hwnd, WPARAM wParam, LPARAM lParam)
return TRUE; return TRUE;
} }
static LRESULT
TOOLBAR_InsertButtonW (HWND hwnd, WPARAM wParam, LPARAM lParam)
{
TOOLBAR_INFO *infoPtr = TOOLBAR_GetInfoPtr (hwnd);
LPTBBUTTON lpTbb = (LPTBBUTTON)lParam;
INT nIndex = (INT)wParam;
TBUTTON_INFO *oldButtons;
if (lpTbb == NULL)
return FALSE;
TOOLBAR_DumpButton(infoPtr, (TBUTTON_INFO *)lpTbb, nIndex, FALSE);
if (nIndex == -1) {
/* EPP: this seems to be an undocumented call (from my IE4)
* I assume in that case that:
* - lpTbb->iString is a string pointer (not a string index in strings[] table
* - index of insertion is at the end of existing buttons
* I only see this happen with nIndex == -1, but it could have a special
* meaning (like -nIndex (or ~nIndex) to get the real position of insertion).
*/
nIndex = infoPtr->nNumButtons;
} else if (nIndex < 0)
return FALSE;
TRACE("inserting button index=%d\n", nIndex);
if (nIndex > infoPtr->nNumButtons) {
nIndex = infoPtr->nNumButtons;
TRACE("adjust index=%d\n", nIndex);
}
oldButtons = infoPtr->buttons;
infoPtr->nNumButtons++;
infoPtr->buttons = Alloc (sizeof (TBUTTON_INFO) * infoPtr->nNumButtons);
/* pre insert copy */
if (nIndex > 0) {
memcpy (&infoPtr->buttons[0], &oldButtons[0],
nIndex * sizeof(TBUTTON_INFO));
}
/* insert new button */
infoPtr->buttons[nIndex].iBitmap = lpTbb->iBitmap;
infoPtr->buttons[nIndex].idCommand = lpTbb->idCommand;
infoPtr->buttons[nIndex].fsState = lpTbb->fsState;
infoPtr->buttons[nIndex].fsStyle = lpTbb->fsStyle;
infoPtr->buttons[nIndex].dwData = lpTbb->dwData;
/* if passed string and not index, then add string */
if(HIWORD(lpTbb->iString) && lpTbb->iString!=-1) {
Str_SetPtrW ((LPWSTR *)&infoPtr->buttons[nIndex].iString, (LPWSTR)lpTbb->iString);
}
else
infoPtr->buttons[nIndex].iString = lpTbb->iString;
TOOLBAR_TooltipAddTool(infoPtr, &infoPtr->buttons[nIndex]);
/* post insert copy */
if (nIndex < infoPtr->nNumButtons - 1) {
memcpy (&infoPtr->buttons[nIndex+1], &oldButtons[nIndex],
(infoPtr->nNumButtons - nIndex - 1) * sizeof(TBUTTON_INFO));
}
Free (oldButtons);
TOOLBAR_CalcToolbar (hwnd);
TOOLBAR_AutoSize (hwnd);
InvalidateRect (hwnd, NULL, TRUE);
return TRUE;
}
/* << TOOLBAR_InsertMarkHitTest >> */ /* << TOOLBAR_InsertMarkHitTest >> */
@ -4441,8 +4356,8 @@ TOOLBAR_Restore(TOOLBAR_INFO *infoPtr, LPTBSAVEPARAMSW lpSave)
if (HIWORD(nmtbr.tbButton.iString)) if (HIWORD(nmtbr.tbButton.iString))
nmtbr.tbButton.iString = 0; nmtbr.tbButton.iString = 0;
TOOLBAR_InsertButtonW(infoPtr->hwndSelf, -1, TOOLBAR_InsertButtonT(infoPtr->hwndSelf, -1,
(LPARAM)&nmtbr.tbButton); (LPARAM)&nmtbr.tbButton, TRUE);
} }
/* do legacy notifications */ /* do legacy notifications */
@ -5885,7 +5800,7 @@ TOOLBAR_LButtonUp (HWND hwnd, WPARAM wParam, LPARAM lParam)
memset(&tbb, 0, sizeof(tbb)); memset(&tbb, 0, sizeof(tbb));
tbb.fsStyle = BTNS_SEP; tbb.fsStyle = BTNS_SEP;
tbb.iString = -1; tbb.iString = -1;
TOOLBAR_InsertButtonW(hwnd, nButton, (LPARAM)&tbb); TOOLBAR_InsertButtonT(hwnd, nButton, (LPARAM)&tbb, TRUE);
} }
} }
else else
@ -6824,10 +6739,10 @@ ToolbarWindowProc (HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
return TOOLBAR_Indeterminate (hwnd, wParam, lParam); return TOOLBAR_Indeterminate (hwnd, wParam, lParam);
case TB_INSERTBUTTONA: case TB_INSERTBUTTONA:
return TOOLBAR_InsertButtonA (hwnd, wParam, lParam); return TOOLBAR_InsertButtonT(hwnd, wParam, lParam, FALSE);
case TB_INSERTBUTTONW: case TB_INSERTBUTTONW:
return TOOLBAR_InsertButtonW (hwnd, wParam, lParam); return TOOLBAR_InsertButtonT(hwnd, wParam, lParam, TRUE);
/* case TB_INSERTMARKHITTEST: */ /* 4.71 */ /* case TB_INSERTMARKHITTEST: */ /* 4.71 */