Author: fireball
Date: Sat Jan 15 22:00:23 2011
New Revision: 50395
URL: http://svn.reactos.org/svn/reactos?rev=50395&view=rev
Log:
- It's a really bad idea to use freed data, so fix that.
Modified:
branches/arwinss/reactos/dll/win32/winent.drv/window.c
Modified: branches/arwinss/reactos/dll/win32/winent.drv/window.c
URL: http://svn.reactos.org/svn/reactos/branches/arwinss/reactos/dll/win32/winen…
==============================================================================
--- branches/arwinss/reactos/dll/win32/winent.drv/window.c [iso-8859-1] (original)
+++ branches/arwinss/reactos/dll/win32/winent.drv/window.c [iso-8859-1] Sat Jan 15 22:00:23 2011
@@ -274,9 +274,8 @@
if (!data) return;
/* Remove property and free its data */
+ destroy_whole_window( data, FALSE );
associate_destroy( data );
-
- destroy_whole_window( data, FALSE );
}
/***********************************************************************
Author: fireball
Date: Sat Jan 15 21:33:09 2011
New Revision: 50394
URL: http://svn.reactos.org/svn/reactos?rev=50394&view=rev
Log:
- Solve one of the most visible and historical drawing problem of arwinss: improper clipping. E.g. child windows borders being "visible" in an explorer window is an example, FAP drawing issues an another. All redrawing bugs should be retested to see what's fixed.
- Add a "clipchildren" property to the DC. This property affects only those DCs which have a root window (screen) selected. A better name for this variable would be welcome.
- Important! The change in behaviour introduced by ClipChildren is currently commented out until some issues it brings are solved.
Modified:
branches/arwinss/reactos/subsystems/win32/win32k/gdi/dc.c
branches/arwinss/reactos/subsystems/win32/win32k/include/dc.h
Modified: branches/arwinss/reactos/subsystems/win32/win32k/gdi/dc.c
URL: http://svn.reactos.org/svn/reactos/branches/arwinss/reactos/subsystems/win3…
==============================================================================
--- branches/arwinss/reactos/subsystems/win32/win32k/gdi/dc.c [iso-8859-1] (original)
+++ branches/arwinss/reactos/subsystems/win32/win32k/gdi/dc.c [iso-8859-1] Sat Jan 15 21:33:09 2011
@@ -169,6 +169,7 @@
/* Create an empty combined clipping region */
pNewDC->CombinedClip = EngCreateClip();
pNewDC->Clipping = NULL;
+ pNewDC->ClipChildren = FALSE;
/* Set default palette */
pNewDC->dclevel.hpal = StockObjects[DEFAULT_PALETTE];
@@ -487,6 +488,12 @@
return;
}
+ /* Root window's visibility may be ignored */
+ if ((pDC->pWindow == &SwmRoot) && !pDC->ClipChildren)
+ {
+ //IgnoreVisibility = TRUE;
+ }
+
/* window visibility X user clipping (if any) X underlying surface */
/* Acquire SWM lock */
@@ -598,6 +605,10 @@
/* Set the clipping object */
pDC->Clipping = create_region_from_rects(pSafeRects, count);
}
+ else
+ {
+ pDC->Clipping = create_empty_region();
+ }
DPRINT("RosGdiSetDeviceClipping() for DC %x, bounding rect (%d,%d)-(%d, %d)\n",
physDev, rcSafeBounds.left, rcSafeBounds.top, rcSafeBounds.right, rcSafeBounds.bottom);
@@ -693,6 +704,10 @@
pDC->pWindow = NULL;
DPRINT("hdc %x, restricting any drawing\n", physDev);
}
+
+ pDC->ClipChildren = clipChildren;
+
+ RosGdiUpdateClipping(pDC, FALSE);
/* Release the object */
DC_UnlockDc(pDC);
Modified: branches/arwinss/reactos/subsystems/win32/win32k/include/dc.h
URL: http://svn.reactos.org/svn/reactos/branches/arwinss/reactos/subsystems/win3…
==============================================================================
--- branches/arwinss/reactos/subsystems/win32/win32k/include/dc.h [iso-8859-1] (original)
+++ branches/arwinss/reactos/subsystems/win32/win32k/include/dc.h [iso-8859-1] Sat Jan 15 21:33:09 2011
@@ -38,6 +38,7 @@
struct region *Clipping;
CLIPOBJ *CombinedClip;
PSWM_WINDOW pWindow;
+ BOOLEAN ClipChildren;
} DC, *PDC;
#define DC_LockDc(hDC) \