Sync with Wine-20040121

svn path=/trunk/; revision=7825
This commit is contained in:
Gé van Geldorp
2004-01-22 18:45:19 +00:00
parent bcf21623ed
commit 3b897823aa
5 changed files with 129 additions and 46 deletions
+9 -4
View File
@@ -899,10 +899,15 @@ static LRESULT WINAPI ANIMATE_WindowProc(HWND hWnd, UINT uMsg, WPARAM wParam, LP
{
ANIMATE_INFO* infoPtr = ANIMATE_GetInfoPtr(hWnd);
/* the animation isn't playing, don't paint */
if(!infoPtr->uTimer && !infoPtr->hThread)
/* default paint handling */
return DefWindowProcA(hWnd, uMsg, wParam, lParam);
/* the animation isn't playing, or has not decompressed
* (and displayed) the first frame yet, don't paint
*/
if ((!infoPtr->uTimer && !infoPtr->hThread) ||
!infoPtr->hbmPrevFrame)
{
/* default paint handling */
return DefWindowProcA(hWnd, uMsg, wParam, lParam);
}
if (GetWindowLongA(hWnd, GWL_STYLE) & ACS_TRANSPARENT)
infoPtr->hbrushBG = (HBRUSH)SendMessageA(infoPtr->hwndNotify,
+1 -1
View File
@@ -1652,7 +1652,7 @@ ImageList_LoadImageW (HINSTANCE hi, LPCWSTR lpbmp, INT cx, INT cGrow,
if (uType == IMAGE_BITMAP) {
BITMAP bmp;
GetObjectA (handle, sizeof(BITMAP), &bmp);
GetObjectW (handle, sizeof(BITMAP), &bmp);
/* To match windows behavior, if cx is set to zero and
the flag DI_DEFAULTSIZE is specified, cx becomes the
+111 -33
View File
@@ -2090,25 +2090,42 @@ REBAR_ValidateBand (REBAR_INFO *infoPtr, REBAR_BAND *lpBand)
}
static void
static BOOL
REBAR_CommonSetupBand (HWND hwnd, LPREBARBANDINFOA lprbbi, REBAR_BAND *lpBand)
/* Function: This routine copies the supplied values from */
/* user input (lprbbi) to the internal band structure. */
/* It returns true if something changed and false if not. */
{
BOOL bChanged = FALSE;
lpBand->fMask |= lprbbi->fMask;
if (lprbbi->fMask & RBBIM_STYLE)
if( (lprbbi->fMask & RBBIM_STYLE) &&
(lpBand->fStyle != lprbbi->fStyle ) )
{
lpBand->fStyle = lprbbi->fStyle;
if (lprbbi->fMask & RBBIM_COLORS) {
lpBand->clrFore = lprbbi->clrFore;
lpBand->clrBack = lprbbi->clrBack;
bChanged = TRUE;
}
if (lprbbi->fMask & RBBIM_IMAGE)
lpBand->iImage = lprbbi->iImage;
if( (lprbbi->fMask & RBBIM_COLORS) &&
( ( lpBand->clrFore != lprbbi->clrFore ) ||
( lpBand->clrBack != lprbbi->clrBack ) ) )
{
lpBand->clrFore = lprbbi->clrFore;
lpBand->clrBack = lprbbi->clrBack;
bChanged = TRUE;
}
if (lprbbi->fMask & RBBIM_CHILD) {
if( (lprbbi->fMask & RBBIM_IMAGE) &&
( lpBand->iImage != lprbbi->iImage ) )
{
lpBand->iImage = lprbbi->iImage;
bChanged = TRUE;
}
if( (lprbbi->fMask & RBBIM_CHILD) &&
(lprbbi->hwndChild != lpBand->hwndChild ) )
{
if (lprbbi->hwndChild) {
lpBand->hwndChild = lprbbi->hwndChild;
lpBand->hwndPrevParent =
@@ -2123,9 +2140,21 @@ REBAR_CommonSetupBand (HWND hwnd, LPREBARBANDINFOA lprbbi, REBAR_BAND *lpBand)
lpBand->hwndChild = 0;
lpBand->hwndPrevParent = 0;
}
bChanged = TRUE;
}
if (lprbbi->fMask & RBBIM_CHILDSIZE) {
if( (lprbbi->fMask & RBBIM_CHILDSIZE) &&
( (lpBand->cxMinChild != lprbbi->cxMinChild) ||
(lpBand->cyMinChild != lprbbi->cyMinChild ) ||
( (lprbbi->cbSize >= sizeof (REBARBANDINFOA)) &&
( (lpBand->cyChild != lprbbi->cyChild ) ||
(lpBand->cyMaxChild != lprbbi->cyMaxChild ) ||
(lpBand->cyIntegral != lprbbi->cyIntegral ) ) ) ||
( (lprbbi->cbSize < sizeof (REBARBANDINFOA)) &&
( (lpBand->cyChild ||
lpBand->cyMaxChild ||
lpBand->cyIntegral ) ) ) ) )
{
lpBand->cxMinChild = lprbbi->cxMinChild;
lpBand->cyMinChild = lprbbi->cyMinChild;
if (lprbbi->cbSize >= sizeof (REBARBANDINFOA)) {
@@ -2139,28 +2168,55 @@ REBAR_CommonSetupBand (HWND hwnd, LPREBARBANDINFOA lprbbi, REBAR_BAND *lpBand)
lpBand->cyMaxChild = 0;
lpBand->cyIntegral = 0;
}
bChanged = TRUE;
}
if (lprbbi->fMask & RBBIM_SIZE)
if( (lprbbi->fMask & RBBIM_SIZE) &&
(lpBand->cx != lprbbi->cx ) )
{
lpBand->cx = lprbbi->cx;
bChanged = TRUE;
}
if (lprbbi->fMask & RBBIM_BACKGROUND)
if( (lprbbi->fMask & RBBIM_BACKGROUND) &&
( lpBand->hbmBack != lprbbi->hbmBack ) )
{
lpBand->hbmBack = lprbbi->hbmBack;
bChanged = TRUE;
}
if (lprbbi->fMask & RBBIM_ID)
if( (lprbbi->fMask & RBBIM_ID) &&
(lpBand->wID != lprbbi->wID ) )
{
lpBand->wID = lprbbi->wID;
bChanged = TRUE;
}
/* check for additional data */
if (lprbbi->cbSize >= sizeof (REBARBANDINFOA)) {
if (lprbbi->fMask & RBBIM_IDEALSIZE)
if( (lprbbi->fMask & RBBIM_IDEALSIZE) &&
( lpBand->cxIdeal != lprbbi->cxIdeal ) )
{
lpBand->cxIdeal = lprbbi->cxIdeal;
bChanged = TRUE;
}
if (lprbbi->fMask & RBBIM_LPARAM)
if( (lprbbi->fMask & RBBIM_LPARAM) &&
(lpBand->lParam != lprbbi->lParam ) )
{
lpBand->lParam = lprbbi->lParam;
bChanged = TRUE;
}
if (lprbbi->fMask & RBBIM_HEADERSIZE)
if( (lprbbi->fMask & RBBIM_HEADERSIZE) &&
(lpBand->cxHeader != lprbbi->cxHeader ) )
{
lpBand->cxHeader = lprbbi->cxHeader;
bChanged = TRUE;
}
}
return bChanged;
}
static LRESULT
@@ -3430,11 +3486,19 @@ REBAR_MoveBand (REBAR_INFO *infoPtr, WPARAM wParam, LPARAM lParam)
}
/* return TRUE if two strings are different */
static BOOL
REBAR_strdifW( LPCWSTR a, LPCWSTR b )
{
return ( (a && !b) || (b && !a) || (a && b && lstrcmpW(a, b) ) );
}
static LRESULT
REBAR_SetBandInfoA (REBAR_INFO *infoPtr, WPARAM wParam, LPARAM lParam)
{
LPREBARBANDINFOA lprbbi = (LPREBARBANDINFOA)lParam;
REBAR_BAND *lpBand;
BOOL bChanged;
if (lprbbi == NULL)
return FALSE;
@@ -3449,27 +3513,39 @@ REBAR_SetBandInfoA (REBAR_INFO *infoPtr, WPARAM wParam, LPARAM lParam)
/* set band information */
lpBand = &infoPtr->bands[(UINT)wParam];
REBAR_CommonSetupBand (infoPtr->hwndSelf, lprbbi, lpBand);
bChanged = REBAR_CommonSetupBand (infoPtr->hwndSelf, lprbbi, lpBand);
if (lprbbi->fMask & RBBIM_TEXT) {
if (lpBand->lpText) {
Free (lpBand->lpText);
lpBand->lpText = NULL;
}
if (lprbbi->lpText) {
INT len = MultiByteToWideChar( CP_ACP, 0, lprbbi->lpText, -1, NULL, 0 );
LPWSTR wstr = NULL;
if (lprbbi->lpText)
{
INT len;
len = MultiByteToWideChar( CP_ACP, 0, lprbbi->lpText, -1, NULL, 0 );
if (len > 1)
{
lpBand->lpText = (LPWSTR)Alloc (len*sizeof(WCHAR));
MultiByteToWideChar( CP_ACP, 0, lprbbi->lpText, -1, lpBand->lpText, len );
}
}
wstr = (LPWSTR)Alloc (len*sizeof(WCHAR));
if (wstr)
MultiByteToWideChar( CP_ACP, 0, lprbbi->lpText, -1, wstr, len );
}
if (REBAR_strdifW(lpBand->lpText, wstr)) {
if (lpBand->lpText) {
Free (lpBand->lpText);
lpBand->lpText = NULL;
}
if (wstr) {
lpBand->lpText = wstr;
wstr = NULL;
}
bChanged = TRUE;
}
if (wstr)
Free (wstr);
}
REBAR_ValidateBand (infoPtr, lpBand);
REBAR_DumpBand (infoPtr);
if (lprbbi->fMask & (RBBIM_CHILDSIZE | RBBIM_SIZE)) {
if (bChanged && (lprbbi->fMask & (RBBIM_CHILDSIZE | RBBIM_SIZE))) {
REBAR_Layout (infoPtr, NULL, TRUE, FALSE);
InvalidateRect(infoPtr->hwndSelf, 0, 1);
}
@@ -3477,12 +3553,12 @@ REBAR_SetBandInfoA (REBAR_INFO *infoPtr, WPARAM wParam, LPARAM lParam)
return TRUE;
}
static LRESULT
REBAR_SetBandInfoW (REBAR_INFO *infoPtr, WPARAM wParam, LPARAM lParam)
{
LPREBARBANDINFOW lprbbi = (LPREBARBANDINFOW)lParam;
REBAR_BAND *lpBand;
BOOL bChanged;
if (lprbbi == NULL)
return FALSE;
@@ -3497,8 +3573,9 @@ REBAR_SetBandInfoW (REBAR_INFO *infoPtr, WPARAM wParam, LPARAM lParam)
/* set band information */
lpBand = &infoPtr->bands[(UINT)wParam];
REBAR_CommonSetupBand (infoPtr->hwndSelf, (LPREBARBANDINFOA)lprbbi, lpBand);
if (lprbbi->fMask & RBBIM_TEXT) {
bChanged = REBAR_CommonSetupBand (infoPtr->hwndSelf, (LPREBARBANDINFOA)lprbbi, lpBand);
if( (lprbbi->fMask & RBBIM_TEXT) &&
REBAR_strdifW( lpBand->lpText, lprbbi->lpText ) ) {
if (lpBand->lpText) {
Free (lpBand->lpText);
lpBand->lpText = NULL;
@@ -3511,13 +3588,14 @@ REBAR_SetBandInfoW (REBAR_INFO *infoPtr, WPARAM wParam, LPARAM lParam)
strcpyW (lpBand->lpText, lprbbi->lpText);
}
}
bChanged = TRUE;
}
REBAR_ValidateBand (infoPtr, lpBand);
REBAR_DumpBand (infoPtr);
if (lprbbi->fMask & (RBBIM_CHILDSIZE | RBBIM_SIZE)) {
if ( bChanged && (lprbbi->fMask & (RBBIM_CHILDSIZE | RBBIM_SIZE)) ) {
REBAR_Layout (infoPtr, NULL, TRUE, FALSE);
InvalidateRect(infoPtr->hwndSelf, 0, 1);
}
+1 -1
View File
@@ -1060,7 +1060,7 @@ static void TAB_SetupScrolling(
* list and ignores scrolling and selection.
* It also uses the current font to determine the height of the tab row and
* it checks if all the tabs fit in the client area of the window. If they
* dont, a scrolling control is added.
* don't, a scrolling control is added.
*/
static void TAB_SetItemBounds (HWND hwnd)
{
+7 -7
View File
@@ -1161,7 +1161,7 @@ TREEVIEW_DoSetItemT(TREEVIEW_INFO *infoPtr, TREEVIEW_ITEM *wineItem,
static LRESULT
TREEVIEW_InsertItemT(TREEVIEW_INFO *infoPtr, const TVINSERTSTRUCTW *ptdi, BOOL isW)
{
const TVITEMEXW *tvItem = &ptdi->DUMMYUNIONNAME.itemex;
const TVITEMEXW *tvItem = &ptdi->u.itemex;
HTREEITEM insertAfter;
TREEVIEW_ITEM *newItem, *parentItem;
BOOL bTextUpdated = FALSE;
@@ -1440,8 +1440,7 @@ TREEVIEW_RemoveTree(TREEVIEW_INFO *infoPtr)
static LRESULT
TREEVIEW_DeleteItem(TREEVIEW_INFO *infoPtr, HTREEITEM wineItem)
{
TREEVIEW_ITEM *oldSelection = infoPtr->selectedItem;
TREEVIEW_ITEM *newSelection = oldSelection;
TREEVIEW_ITEM *newSelection = NULL;
TREEVIEW_ITEM *newFirstVisible = NULL;
TREEVIEW_ITEM *parent, *prev = NULL;
BOOL visible = FALSE;
@@ -1476,6 +1475,9 @@ TREEVIEW_DeleteItem(TREEVIEW_INFO *infoPtr, HTREEITEM wineItem)
newSelection = wineItem->nextSibling;
else if (wineItem->parent != infoPtr->root)
newSelection = wineItem->parent;
else
newSelection = wineItem->prevSibling;
TRACE("newSelection = %p\n", newSelection);
}
if (infoPtr->firstVisible == wineItem)
@@ -1494,13 +1496,11 @@ TREEVIEW_DeleteItem(TREEVIEW_INFO *infoPtr, HTREEITEM wineItem)
TREEVIEW_RemoveItem(infoPtr, wineItem);
}
/* Don't change if somebody else already has. */
if (oldSelection == infoPtr->selectedItem)
/* Don't change if somebody else already has (infoPtr->selectedItem is cleared by FreeItem). */
if (!infoPtr->selectedItem && newSelection)
{
if (TREEVIEW_ValidItem(infoPtr, newSelection))
TREEVIEW_DoSelectItem(infoPtr, TVGN_CARET, newSelection, TVC_UNKNOWN);
else
infoPtr->selectedItem = 0;
}
/* Validate insertMark dropItem.