XQuartz: Update window levels when changing rootless state

(cherry picked from commit 1359ded5bf)
This commit is contained in:
Jeremy Huddleston 2009-04-09 18:51:22 -07:00
parent d5ef88d754
commit dfb0d7aefb
3 changed files with 24 additions and 12 deletions

View File

@ -162,10 +162,12 @@ xprCreateFrame(RootlessWindowPtr pFrame, ScreenPtr pScreen,
mask |= XP_SHAPE; mask |= XP_SHAPE;
} }
pFrame->level = !IsRoot (pWin) ? AppleWMWindowLevelNormal : AppleWMNumWindowLevels;
if(quartzEnableRootless) if(quartzEnableRootless)
wc.window_level = normal_window_levels[!IsRoot (pWin) ? AppleWMWindowLevelNormal : AppleWMNumWindowLevels]; wc.window_level = normal_window_levels[pFrame->level];
else else
wc.window_level = rooted_window_levels[!IsRoot (pWin) ? AppleWMWindowLevelNormal : AppleWMNumWindowLevels]; wc.window_level = rooted_window_levels[pFrame->level];
mask |= XP_WINDOW_LEVEL; mask |= XP_WINDOW_LEVEL;
err = xp_create_window(mask, &wc, (xp_window_id *) &pFrame->wid); err = xp_create_window(mask, &wc, (xp_window_id *) &pFrame->wid);
@ -252,28 +254,36 @@ xprResizeFrame(RootlessFrameID wid, ScreenPtr pScreen,
/* /*
* Change frame stacking. * Change frame stacking.
*/ */
static void static void xprRestackFrame(RootlessFrameID wid, RootlessFrameID nextWid) {
xprRestackFrame(RootlessFrameID wid, RootlessFrameID nextWid)
{
xp_window_changes wc; xp_window_changes wc;
unsigned int mask = XP_STACKING;
TA_SERVER(); TA_SERVER();
/* Stack frame below nextWid it if it exists, or raise /* Stack frame below nextWid it if it exists, or raise
frame above everything otherwise. */ frame above everything otherwise. */
if (nextWid == NULL) if(nextWid == NULL) {
{
wc.stack_mode = XP_MAPPED_ABOVE; wc.stack_mode = XP_MAPPED_ABOVE;
wc.sibling = 0; wc.sibling = 0;
} } else {
else
{
wc.stack_mode = XP_MAPPED_BELOW; wc.stack_mode = XP_MAPPED_BELOW;
wc.sibling = x_cvt_vptr_to_uint(nextWid); wc.sibling = x_cvt_vptr_to_uint(nextWid);
} }
xprConfigureWindow(x_cvt_vptr_to_uint(wid), XP_STACKING, &wc); if(window_hash) {
RootlessWindowRec *winRec = x_hash_table_lookup(window_hash, x_cvt_uint_to_vptr((xp_window_id)wid), NULL);
if(winRec) {
if(quartzEnableRootless)
wc.window_level = normal_window_levels[winRec->level];
else
wc.window_level = rooted_window_levels[winRec->level];
mask |= XP_WINDOW_LEVEL;
}
}
xprConfigureWindow(x_cvt_vptr_to_uint(wid), mask, &wc);
} }

View File

@ -57,6 +57,7 @@ typedef struct _RootlessWindowRec {
int x, y; int x, y;
unsigned int width, height; unsigned int width, height;
unsigned int borderWidth; unsigned int borderWidth;
int level;
RootlessFrameID wid; // implementation specific frame id RootlessFrameID wid; // implementation specific frame id
WindowPtr win; // underlying X window WindowPtr win; // underlying X window

View File

@ -478,6 +478,7 @@ RootlessEnsureFrame(WindowPtr pWin)
winRec->is_reorder_pending = FALSE; winRec->is_reorder_pending = FALSE;
winRec->pixmap = NULL; winRec->pixmap = NULL;
winRec->wid = NULL; winRec->wid = NULL;
winRec->level = 0;
SETWINREC(pWin, winRec); SETWINREC(pWin, winRec);