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