Author: hbelusca Date: Fri Feb 12 17:31:19 2016 New Revision: 70715
URL: http://svn.reactos.org/svn/reactos?rev=70715&view=rev Log: [WIN32K]: Fix display of window title icon for dialogs having the WS_EX_DLGMODALFRAME style. CORE-10850 #resolve CORE-10437 #comment The real fix was committed in r70715.
Modified: trunk/reactos/win32ss/user/ntuser/nonclient.c trunk/reactos/win32ss/user/ntuser/painting.c
Modified: trunk/reactos/win32ss/user/ntuser/nonclient.c URL: http://svn.reactos.org/svn/reactos/trunk/reactos/win32ss/user/ntuser/nonclie... ============================================================================== --- trunk/reactos/win32ss/user/ntuser/nonclient.c [iso-8859-1] (original) +++ trunk/reactos/win32ss/user/ntuser/nonclient.c [iso-8859-1] Fri Feb 12 17:31:19 2016 @@ -356,7 +356,9 @@ hdc = UserGetDCEx( pWndParent, 0, DCX_CACHE ); if (iconic) { + // DragCursor = pwnd->pcls->spcur; DragCursor = pwnd->pcls->spicn; + ERR("pwnd->pcls->spicn = 0x%p ; pwnd->pcls->spcur = 0x%p\n", pwnd->pcls->spicn, pwnd->pcls->spcur); if (DragCursor) { UserReferenceObject(DragCursor); @@ -630,7 +632,10 @@ if (!hIcon && pWnd->pcls->spicn) return pWnd->pcls->spicn;
- if (!hIcon && (pWnd->style & DS_MODALFRAME)) + // WARNING: Wine code has this test completely wrong. The following is how + // Windows behaves for windows having the WS_EX_DLGMODALFRAME style set: + // it does not use the default icon! And it does not check for DS_MODALFRAME. + if (!hIcon && !(pWnd->ExStyle & WS_EX_DLGMODALFRAME)) { if (!hIcon) hIcon = gpsi->hIconSmWindows; // Both are IDI_WINLOGO Small if (!hIcon) hIcon = gpsi->hIconWindows; // Reg size. @@ -656,13 +661,13 @@ { UserReferenceObject(WindowIcon);
- Ret = UserDrawIconEx( hDC, - Rect->left + 2, - Rect->top + 2, - WindowIcon, - UserGetSystemMetrics(SM_CXSMICON), - UserGetSystemMetrics(SM_CYSMICON), - 0, NULL, DI_NORMAL); + Ret = UserDrawIconEx(hDC, + Rect->left + 2, + Rect->top + 2, + WindowIcon, + UserGetSystemMetrics(SM_CXSMICON), + UserGetSystemMetrics(SM_CYSMICON), + 0, NULL, DI_NORMAL);
UserDereferenceObject(WindowIcon); } @@ -966,9 +971,8 @@ }
if (!(Flags & DC_ICON) && + !(Flags & DC_SMALLCAP) && (Style & WS_SYSMENU) && - !(Flags & DC_SMALLCAP) && - !(ExStyle & WS_EX_DLGMODALFRAME) && !(ExStyle & WS_EX_TOOLWINDOW) ) { pIcon = NC_IconForWindow(pWnd); // Force redraw of caption with icon if DC_ICON not flaged.... @@ -1435,7 +1439,7 @@ wParam = DC_CAPTION; }
- if (Wnd->state & WNDS_NONCPAINT || !(Wnd->style & WS_VISIBLE)) + if ((Wnd->state & WNDS_NONCPAINT) || !(Wnd->style & WS_VISIBLE)) return 0;
/* This isn't documented but is reproducible in at least XP SP2 and
Modified: trunk/reactos/win32ss/user/ntuser/painting.c URL: http://svn.reactos.org/svn/reactos/trunk/reactos/win32ss/user/ntuser/paintin... ============================================================================== --- trunk/reactos/win32ss/user/ntuser/painting.c [iso-8859-1] (original) +++ trunk/reactos/win32ss/user/ntuser/painting.c [iso-8859-1] Fri Feb 12 17:31:19 2016 @@ -573,7 +573,7 @@ if (Next) continue; }
- if ( Child->style & WS_VISIBLE) + if (Child->style & WS_VISIBLE) { USER_REFERENCE_ENTRY Ref; UserRefObjectCo(Child, &Ref); @@ -2101,14 +2101,14 @@
RECTL_vMakeWellOrdered(lpRc);
+ /* Determine whether the icon needs to be displayed */ if (!hIcon && pWnd != NULL) { - HasIcon = (uFlags & DC_ICON) && (pWnd->style & WS_SYSMENU) - && !(uFlags & DC_SMALLCAP) && !(pWnd->ExStyle & WS_EX_DLGMODALFRAME) - && !(pWnd->ExStyle & WS_EX_TOOLWINDOW); + HasIcon = (uFlags & DC_ICON) && !(uFlags & DC_SMALLCAP) && + (pWnd->style & WS_SYSMENU) && !(pWnd->ExStyle & WS_EX_TOOLWINDOW); } else - HasIcon = (hIcon != 0); + HasIcon = (hIcon != NULL);
// Draw the caption background if((uFlags & DC_GRADIENT) && !(uFlags & DC_INBUTTON)) @@ -2192,7 +2192,7 @@ LONG cx = UserGetSystemMetrics(SM_CXSMICON); LONG cy = UserGetSystemMetrics(SM_CYSMICON); LONG x = Rect.left - cx/2 + 1 + (Rect.bottom - Rect.top)/2; // this is really what Window does - LONG y = (Rect.top + Rect.bottom)/2 - cy/2; // center + LONG y = (Rect.top + Rect.bottom - cy)/2; // center UserDrawIconEx(hDc, x, y, pIcon, cx, cy, 0, NULL, DI_NORMAL); UserDereferenceObject(pIcon); }