xserver: Branch 'xorg-server-1.4-apple' - 3 commits
Jeremy Huddleston
jeremyhu at kemper.freedesktop.org
Thu Apr 9 19:11:02 PDT 2009
configure.ac | 2 +-
hw/xquartz/xpr/xpr.h | 8 +++++---
hw/xquartz/xpr/xprFrame.c | 34 ++++++++++++++++++++++------------
miext/rootless/rootless.h | 1 +
miext/rootless/rootlessWindow.c | 1 +
5 files changed, 30 insertions(+), 16 deletions(-)
New commits:
commit 9af123fc72773c560b36b64f210ee83978dcb5b6
Author: Jeremy Huddleston <jeremyhu at freedesktop.org>
Date: Thu Apr 9 19:10:51 2009 -0700
1.4.2-apple41
diff --git a/configure.ac b/configure.ac
index 56ca891..e7b9d59 100644
--- a/configure.ac
+++ b/configure.ac
@@ -26,7 +26,7 @@ dnl
dnl Process this file with autoconf to create configure.
AC_PREREQ(2.57)
-AC_INIT([xorg-server], 1.4.2-apple40, [https://bugs.freedesktop.org/enter_bug.cgi?product=xorg], xorg-server)
+AC_INIT([xorg-server], 1.4.2-apple41, [https://bugs.freedesktop.org/enter_bug.cgi?product=xorg], xorg-server)
AC_CONFIG_SRCDIR([Makefile.am])
AM_INIT_AUTOMAKE([dist-bzip2 foreign])
AM_MAINTAINER_MODE
commit 1359ded5bfc14a80fb998b01a54ecacb96c4ff88
Author: Jeremy Huddleston <jeremyhu at freedesktop.org>
Date: Thu Apr 9 18:51:22 2009 -0700
XQuartz: Update window levels when changing rootless state
diff --git a/hw/xquartz/xpr/xprFrame.c b/hw/xquartz/xpr/xprFrame.c
index ac982b3..1f1b97d 100644
--- a/hw/xquartz/xpr/xprFrame.c
+++ b/hw/xquartz/xpr/xprFrame.c
@@ -162,10 +162,12 @@ xprCreateFrame(RootlessWindowPtr pFrame, ScreenPtr pScreen,
mask |= XP_SHAPE;
}
+ pFrame->level = !IsRoot (pWin) ? AppleWMWindowLevelNormal : AppleWMNumWindowLevels;
+
if(quartzEnableRootless)
- wc.window_level = normal_window_levels[!IsRoot (pWin) ? AppleWMWindowLevelNormal : AppleWMNumWindowLevels];
+ wc.window_level = normal_window_levels[pFrame->level];
else
- wc.window_level = rooted_window_levels[!IsRoot (pWin) ? AppleWMWindowLevelNormal : AppleWMNumWindowLevels];
+ wc.window_level = rooted_window_levels[pFrame->level];
mask |= XP_WINDOW_LEVEL;
err = xp_create_window(mask, &wc, (xp_window_id *) &pFrame->wid);
@@ -252,28 +254,36 @@ xprResizeFrame(RootlessFrameID wid, ScreenPtr pScreen,
/*
* Change frame stacking.
*/
-static void
-xprRestackFrame(RootlessFrameID wid, RootlessFrameID nextWid)
-{
+static void xprRestackFrame(RootlessFrameID wid, RootlessFrameID nextWid) {
xp_window_changes wc;
+ unsigned int mask = XP_STACKING;
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. */
- if (nextWid == NULL)
- {
+ if(nextWid == NULL) {
wc.stack_mode = XP_MAPPED_ABOVE;
wc.sibling = 0;
- }
- else
- {
+ } else {
wc.stack_mode = XP_MAPPED_BELOW;
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);
}
diff --git a/miext/rootless/rootless.h b/miext/rootless/rootless.h
index 5224dca..bde4cff 100644
--- a/miext/rootless/rootless.h
+++ b/miext/rootless/rootless.h
@@ -57,6 +57,7 @@ typedef struct _RootlessWindowRec {
int x, y;
unsigned int width, height;
unsigned int borderWidth;
+ int level;
RootlessFrameID wid; // implementation specific frame id
WindowPtr win; // underlying X window
diff --git a/miext/rootless/rootlessWindow.c b/miext/rootless/rootlessWindow.c
index 7d2ced5..7a9d9bf 100644
--- a/miext/rootless/rootlessWindow.c
+++ b/miext/rootless/rootlessWindow.c
@@ -478,6 +478,7 @@ RootlessEnsureFrame(WindowPtr pWin)
winRec->is_reorder_pending = FALSE;
winRec->pixmap = NULL;
winRec->wid = NULL;
+ winRec->level = 0;
WINREC(pWin) = winRec;
commit 80759a4186bf0335edc85aecea2faf11fe09f491
Author: Jeremy Huddleston <jeremyhu at freedesktop.org>
Date: Thu Apr 9 18:27:22 2009 -0700
XQuartz: Fix window levels for rooted mode to allow showing the menu bar.
diff --git a/hw/xquartz/xpr/xpr.h b/hw/xquartz/xpr/xpr.h
index a93b837..b329ca1 100644
--- a/hw/xquartz/xpr/xpr.h
+++ b/hw/xquartz/xpr/xpr.h
@@ -47,8 +47,10 @@ Bool QuartzInitCursor(ScreenPtr pScreen);
void QuartzSuspendXCursor(ScreenPtr pScreen);
void QuartzResumeXCursor(ScreenPtr pScreen, int x, int y);
-/* This lookup table came straight from the Tiger X11 source. I tried to figure
- * it out based on CGWindowLevel.h, but I dunno... -JH
+/* If we are rooted, we need the root window and desktop levels to be below
+ * the menubar (24) but above native windows. Normal window level is 0.
+ * Floating window level is 3. The rest are filled in as appropriate.
+ * See CGWindowLevel.h
*/
#define _APPLEWM_SERVER_
@@ -57,7 +59,7 @@ static const int normal_window_levels[AppleWMNumWindowLevels+1] = {
0, 3, 4, 5, INT_MIN + 30, INT_MIN + 29,
};
static const int rooted_window_levels[AppleWMNumWindowLevels+1] = {
-202, 203, 204, 205, 201, 200
+20, 21, 22, 23, 19, 18,
};
#endif /* XPR_H */
More information about the xorg-commit
mailing list