mirror of
https://github.com/reactos/reactos.git
synced 2024-09-30 06:27:38 +00:00
[0.4.13] Anti-flicker backport winpos.c
This effective one-liner-backport fixes flickering in some apps like: - CORE-7652 Hyperlink Blinking text while installing vc2008 redist package and many duplicate-tickets of that same symptom, like: - CORE-18553 CPUID CPU-Z 1.84 "about" flickers - CORE-7753 Caesar 3: Autorun.exe flickers endlessly - CORE-10741 API monitor high CPU usage - CORE-15300 Worksoft Navigator 0.985 installer is locked in an endless redrawing loop - CORE-16325 Some of MWSnap's installation windows fail to display content - CORE-17925 MS Visual C++ 2008 Redistributable Setup takes long time - CORE-18153 BitComet 1.86 forces the shell to a endless redrawing - CORE-18434 Ubisoft installers (SetupUbi) - continously refresh of window - CORE-15546 Shed 1.0 from rapps - setup does not draw some dlgs initially, but redraw can be enforced - CORE-18582 Emule 0.50a - Interface frozen / flickering until window is moved And since I do also port back the follow-up-commit of that, we can achieve that without introducing the following regressions which the initial fixes caused: - CORE-18817 [NTUSER] Winpos.c modification generates bad first drawing of some elements - CORE-18830 Explorer Drawing glitch: Missing "X" on "Folder" pane when Right Click > Explore from Desktop icons Those 2 things did not happen in the older releases beforehand. In sum this is a squashed backport of: 0.4.15-dev-6507-g49dbc8fbbb
[NTUSER] Whitespace-fixes winpos.c 0.4.15-dev-5684-g57eb2a6bf4
[NTUSER] Missing "X" on "Folder" pane when Right Click > Explore from Desktop icons & Rapps toolbar errors (#5068) CORE-18830, CORE-18817 the superseded 0.4.15-dev-5618-g8866b9d7b0
Update win32ss/user/ntuser/winpos.c the superseded 0.4.15-dev-5617-g7866eb2886
[NTUSER] Fix winpos bug hyperlink&images loop redrawing CORE-7652 (#4995) To prevent increased binary size for the added conditions in the code in older branches, strip a single good-path-TRACE() which had no trailing \n in the older branches, but where that \n was added in master head meanwhile. So that TRACE was a diff to older branches anyway.
This commit is contained in:
parent
e39a612688
commit
29ffdb8715
|
@ -1,9 +1,8 @@
|
||||||
/*
|
/*
|
||||||
* COPYRIGHT: See COPYING in the top level directory
|
* COPYRIGHT: See COPYING in the top level directory
|
||||||
* PROJECT: ReactOS kernel
|
* PROJECT: ReactOS kernel
|
||||||
* PURPOSE: Windows
|
* PURPOSE: Windows
|
||||||
* FILE: win32ss/user/ntuser/winpos.c
|
* PROGRAMER: Casper S. Hornstrup (chorns@users.sourceforge.net)
|
||||||
* PROGRAMER: Casper S. Hornstrup (chorns@users.sourceforge.net)
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <win32k.h>
|
#include <win32k.h>
|
||||||
|
@ -437,7 +436,7 @@ co_WinPosActivateOtherWindow(PWND Wnd)
|
||||||
// Find any window to bring to top. Works Okay for wine since it does not see X11 windows.
|
// Find any window to bring to top. Works Okay for wine since it does not see X11 windows.
|
||||||
WndTo = UserGetDesktopWindow();
|
WndTo = UserGetDesktopWindow();
|
||||||
WndTo = WndTo->spwndChild;
|
WndTo = WndTo->spwndChild;
|
||||||
if ( WndTo == NULL )
|
if (WndTo == NULL)
|
||||||
{
|
{
|
||||||
//ERR("WinPosActivateOtherWindow No window!\n");
|
//ERR("WinPosActivateOtherWindow No window!\n");
|
||||||
return;
|
return;
|
||||||
|
@ -1747,8 +1746,6 @@ co_WinPosSetWindowPos(
|
||||||
|
|
||||||
ASSERT_REFS_CO(Window);
|
ASSERT_REFS_CO(Window);
|
||||||
|
|
||||||
TRACE("pwnd %p, after %p, %d,%d (%dx%d), flags 0x%x",
|
|
||||||
Window, WndInsertAfter, x, y, cx, cy, flags);
|
|
||||||
#if DBG
|
#if DBG
|
||||||
dump_winpos_flags(flags);
|
dump_winpos_flags(flags);
|
||||||
#endif
|
#endif
|
||||||
|
@ -1948,7 +1945,7 @@ co_WinPosSetWindowPos(
|
||||||
Window->state |= WNDS_SENDNCPAINT;
|
Window->state |= WNDS_SENDNCPAINT;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!(WinPos.flags & SWP_NOREDRAW))
|
if (!(WinPos.flags & SWP_NOREDRAW) && ((WinPos.flags & SWP_AGG_STATUSFLAGS) != SWP_AGG_NOPOSCHANGE))
|
||||||
{
|
{
|
||||||
/* Determine the new visible region */
|
/* Determine the new visible region */
|
||||||
VisAfter = VIS_ComputeVisibleRegion(Window, FALSE, FALSE,
|
VisAfter = VIS_ComputeVisibleRegion(Window, FALSE, FALSE,
|
||||||
|
@ -2105,7 +2102,7 @@ co_WinPosSetWindowPos(
|
||||||
}
|
}
|
||||||
IntInvalidateWindows(Window, DirtyRgn, RDW_ERASE | RDW_FRAME | RDW_INVALIDATE | RDW_ALLCHILDREN);
|
IntInvalidateWindows(Window, DirtyRgn, RDW_ERASE | RDW_FRAME | RDW_INVALIDATE | RDW_ALLCHILDREN);
|
||||||
}
|
}
|
||||||
else if ( RgnType != ERROR && RgnType == NULLREGION ) // Must be the same. See CORE-7166 & CORE-15934, NC HACK fix.
|
else if (RgnType != ERROR && RgnType == NULLREGION) // Must be the same. See CORE-7166 & CORE-15934, NC HACK fix.
|
||||||
{
|
{
|
||||||
if ( !PosChanged &&
|
if ( !PosChanged &&
|
||||||
!(WinPos.flags & SWP_DEFERERASE) &&
|
!(WinPos.flags & SWP_DEFERERASE) &&
|
||||||
|
@ -2154,7 +2151,7 @@ co_WinPosSetWindowPos(
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Expose what was covered before but not covered anymore */
|
/* Expose what was covered before but not covered anymore */
|
||||||
if ( VisBefore != NULL )
|
if (VisBefore != NULL)
|
||||||
{
|
{
|
||||||
PREGION ExposedRgn = IntSysCreateRectpRgn(0, 0, 0, 0);
|
PREGION ExposedRgn = IntSysCreateRectpRgn(0, 0, 0, 0);
|
||||||
if (ExposedRgn)
|
if (ExposedRgn)
|
||||||
|
@ -2164,7 +2161,7 @@ co_WinPosSetWindowPos(
|
||||||
OldWindowRect.left - NewWindowRect.left,
|
OldWindowRect.left - NewWindowRect.left,
|
||||||
OldWindowRect.top - NewWindowRect.top);
|
OldWindowRect.top - NewWindowRect.top);
|
||||||
|
|
||||||
if ( VisAfter != NULL )
|
if (VisAfter != NULL)
|
||||||
RgnType = IntGdiCombineRgn(ExposedRgn, ExposedRgn, VisAfter, RGN_DIFF);
|
RgnType = IntGdiCombineRgn(ExposedRgn, ExposedRgn, VisAfter, RGN_DIFF);
|
||||||
|
|
||||||
if (RgnType != ERROR && RgnType != NULLREGION)
|
if (RgnType != ERROR && RgnType != NULLREGION)
|
||||||
|
@ -2212,7 +2209,7 @@ co_WinPosSetWindowPos(
|
||||||
if ( !(Window->style & WS_CHILD) && (Parent) && (Parent->style & WS_CLIPCHILDREN))
|
if ( !(Window->style & WS_CHILD) && (Parent) && (Parent->style & WS_CLIPCHILDREN))
|
||||||
{
|
{
|
||||||
TRACE("SWP_FRAMECHANGED Parent %p WS_CLIPCHILDREN %p\n",Parent,Window);
|
TRACE("SWP_FRAMECHANGED Parent %p WS_CLIPCHILDREN %p\n",Parent,Window);
|
||||||
UserSyncAndPaintWindows( Parent, RDW_CLIPCHILDREN); // NC should redraw here, see NC HACK fix.
|
UserSyncAndPaintWindows(Parent, RDW_CLIPCHILDREN); // NC should redraw here, see NC HACK fix.
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -3068,7 +3065,7 @@ END:
|
||||||
return retvalue;
|
return retvalue;
|
||||||
}
|
}
|
||||||
|
|
||||||
BOOL FASTCALL IntEndDeferWindowPosEx( HDWP hdwp, BOOL sAsync )
|
BOOL FASTCALL IntEndDeferWindowPosEx(HDWP hdwp, BOOL sAsync)
|
||||||
{
|
{
|
||||||
PSMWP pDWP;
|
PSMWP pDWP;
|
||||||
PCVR winpos;
|
PCVR winpos;
|
||||||
|
@ -3098,7 +3095,7 @@ BOOL FASTCALL IntEndDeferWindowPosEx( HDWP hdwp, BOOL sAsync )
|
||||||
|
|
||||||
UserRefObjectCo(pwnd, &Ref);
|
UserRefObjectCo(pwnd, &Ref);
|
||||||
|
|
||||||
if ( sAsync )
|
if (sAsync)
|
||||||
{
|
{
|
||||||
LRESULT lRes;
|
LRESULT lRes;
|
||||||
PWINDOWPOS ppos = ExAllocatePoolWithTag(PagedPool, sizeof(WINDOWPOS), USERTAG_SWP);
|
PWINDOWPOS ppos = ExAllocatePoolWithTag(PagedPool, sizeof(WINDOWPOS), USERTAG_SWP);
|
||||||
|
|
Loading…
Reference in a new issue