For the topmost Windows window, explicitly raise its X counterpart to the

top in Z order to keep correct stacking when there is a minimized
    window which formerly obscured it.
This commit is contained in:
Takuma Murakami 2004-02-25 06:23:39 +00:00
parent 6557c4b546
commit 1064c98fec
3 changed files with 68 additions and 16 deletions

View file

@ -0,0 +1,57 @@
/* $XFree86: xc/programs/Xserver/hw/xfree86/os-support/misc/PortIO.S,v 1.1 2004/02/02 03:55:32 dawes Exp $ */
/* Port I/O functions for platforms with no inlining. */
#include "assyntax.h"
FILE("PortIO.s")
AS_BEGIN
GLOBL GLNAME(outb)
GLOBL GLNAME(outw)
GLOBL GLNAME(outl)
GLOBL GLNAME(inb)
GLOBL GLNAME(inw)
GLOBL GLNAME(inl)
SEG_TEXT
ALIGNTEXT4
GLNAME(outb):
MOV_L (REGOFF(4,ESP), EDX)
MOV_L (REGOFF(8,ESP), EAX)
OUT_B
RET
ALIGNTEXT4
GLNAME(outw):
MOV_L (REGOFF(4,ESP), EDX)
MOV_L (REGOFF(8,ESP), EAX)
OUT_W
RET
ALIGNTEXT4
GLNAME(outl):
MOV_L (REGOFF(4,ESP), EDX)
MOV_L (REGOFF(8,ESP), EAX)
OUT_L
RET
ALIGNTEXT4
GLNAME(inb):
MOV_L (REGOFF(4,ESP), EDX)
IN_B
RET
ALIGNTEXT4
GLNAME(inw):
MOV_L (REGOFF(4,ESP), EDX)
IN_L
RET
ALIGNTEXT4
GLNAME(inl):
MOV_L (REGOFF(4,ESP), EDX)
IN_L
RET

View file

@ -761,6 +761,7 @@ winReorderWindowsMultiWindow (ScreenPtr pScreen)
WindowPtr pWinSib = NULL;
DWORD dwCurrentProcessID = GetCurrentProcessId ();
DWORD dwWindowProcessID = 0;
XID vlist[2];
#if CYGMULTIWINDOW_DEBUG
ErrorF ("winReorderWindowsMultiWindow\n");
@ -771,7 +772,7 @@ winReorderWindowsMultiWindow (ScreenPtr pScreen)
if (pScreenPriv->fWindowOrderChanged)
{
#if CYGMULTIWINDOW_DEBUG
ErrorF ("winOrderWindowsMultiWindow - Need to restack\n");
ErrorF ("winReorderWindowsMultiWindow - Need to restack\n");
#endif
hwnd = GetTopWindow (NULL);
@ -786,24 +787,19 @@ winReorderWindowsMultiWindow (ScreenPtr pScreen)
pWinSib = pWin;
pWin = GetProp (hwnd, WIN_WINDOW_PROP);
if (pWinSib)
{
XID *vlist = malloc (sizeof(long) * 2);
if (!pWinSib)
{ /* 1st window - raise to the top */
vlist[0] = Above;
if (vlist == NULL)
{
ErrorF ("winOrderWindowsMultiWindow - malloc () "
"failed\n");
return;
}
((long*)vlist)[0] = winGetWindowID (pWinSib);
((long*)vlist)[1] = Below;
ConfigureWindow (pWin, CWStackMode, vlist, wClient(pWin));
}
else
{ /* 2nd or deeper windows - just below the previous one */
vlist[0] = winGetWindowID (pWinSib);
vlist[1] = Below;
ConfigureWindow (pWin, CWSibling | CWStackMode,
vlist, wClient(pWin));
free (vlist);
}
}
hwnd = GetNextWindow (hwnd, GW_HWNDNEXT);

View file

@ -207,7 +207,6 @@ ValidateSizing (HWND hwnd, WindowPtr pWin,
WinXSizeHints sizeHints;
RECT *rect;
int iWidth, iHeight;
POINT pt;
/* Invalid input checking */
if (pWin==NULL || lParam==0)