[comp.windows.x] How to generate a global refresh within the server?

viktor@fine.princeton.edu (Viktor Dukhovni) (10/06/90)

	This is my attempt at generating  a global repaint within the server
	Is there a better way?  This seems to only generate mono refreshes.
	[ Note that HandleExposures is the one from dix/window.c ]
Message-ID: <3114@idunno.Princeton.EDU>
Date: 5 Oct 90 03:48:24 GMT
Sender: news@idunno.Princeton.EDU
Distribution: usa
Lines: 49


	...
   for( i = 0; i < screenInfo.numScreens; i++ )
        {
            ScreenPtr pScreen = screenInfo.screens[i];
            WindowPtr pWin    = WindowTable[i];
	
            /* XXX: Color windows come out mono! */
            ExposeEveryone(pWin,pScreen);
            HandleExposures(pWin);
        }
}

static
ExposeEveryone(pWin, pScreen)
WindowPtr     pWin;
ScreenPtr     pScreen;
{
    WindowPtr   pChild;
    ValidatePtr val;
    extern              MarkWindow() ;

    pChild = pWin;
    while( pChild )
        {
            if (pChild->viewable)
                {
                    MarkWindow(pChild);
                    val = pChild->valdata;

                    (pScreen->RegionInit)
                        (&val->after.exposed, NullBox, 0);
                    (pScreen->RegionInit)
                        (&val->after.borderExposed, NullBox, 0);
                    (pScreen->RegionCopy)
                        (&val->after.exposed, &pWin->clipList);
                    (pScreen->RegionCopy)
                        (&val->after.borderExposed, &pWin->borderClip);
                }
            ExposeEveryone(pChild->firstChild, pScreen);
            pChild = pChild->nextSib;
        }
}
	
--
	Viktor Dukhovni <viktor@math.princeton.edu>	: ARPA
		<...!uunet!princeton!math!viktor>	: UUCP
	Fine Hall, Washington Rd., Princeton, NJ 08544  : US-Post
		+1-(609)-258-5792		 	: VOICE

erik@westworld.esd.sgi.com (Erik Fortune) (10/06/90)

>	This is my attempt at generating  a global repaint within the server
>	Is there a better way?  This seems to only generate mono refreshes.
>	[ Note that HandleExposures is the one from dix/window.c ]

How about creating a window the size of the screen, mapping it
raised and destroying it?    Let the server do the (window tree)
walking.

If you're worried about flashing, create the window with background None.

Look at the screen saver code in window.c for examples of creating server
owned windows from inside the server.

Best of luck,
    Erik