xserver: Branch 'xorg-server-1.5-apple' - 2 commits
Jeremy Huddleston
jeremyhu at kemper.freedesktop.org
Thu Apr 24 23:50:27 PDT 2008
hw/xquartz/darwin.c | 14 ++++++++------
hw/xquartz/xpr/xprScreen.c | 44 +++++++++++++++++++++++++++++---------------
2 files changed, 37 insertions(+), 21 deletions(-)
New commits:
commit 40514b3cc74001059802c58554d8076045087998
Author: Jeremy Huddleston <jeremyhu at freedesktop.org>
Date: Thu Apr 24 23:48:11 2008 -0700
XQuartz: More multi-monitor work... reverted Ben's workaround (worked for side-by-side only) and added more debugging.
(cherry picked from commit 515b8b855ac5d2d5aef881053f73b2ad07a6dd2e)
diff --git a/hw/xquartz/darwin.c b/hw/xquartz/darwin.c
index aad55fc..c18b575 100644
--- a/hw/xquartz/darwin.c
+++ b/hw/xquartz/darwin.c
@@ -535,8 +535,7 @@ DarwinAdjustScreenOrigins(ScreenInfo *pScreenInfo)
/* Find leftmost screen. If there's a tie, take the topmost of the two. */
for (i = 1; i < pScreenInfo->numScreens; i++) {
if (dixScreenOrigins[i].x < left ||
- (dixScreenOrigins[i].x == left &&
- dixScreenOrigins[i].y < top))
+ (dixScreenOrigins[i].x == left && dixScreenOrigins[i].y < top))
{
left = dixScreenOrigins[i].x;
top = dixScreenOrigins[i].y;
@@ -545,17 +544,20 @@ DarwinAdjustScreenOrigins(ScreenInfo *pScreenInfo)
darwinMainScreenX = left;
darwinMainScreenY = top;
+
+ DEBUG_LOG("top = %d, left=%d\n", top, left);
/* Shift all screens so that there is a screen whose top left
- is at X11 (0,0) and at global screen coordinate
- (darwinMainScreenX, darwinMainScreenY). */
+ * is at X11 (0,0) and at global screen coordinate
+ * (darwinMainScreenX, darwinMainScreenY).
+ */
if (darwinMainScreenX != 0 || darwinMainScreenY != 0) {
for (i = 0; i < pScreenInfo->numScreens; i++) {
dixScreenOrigins[i].x -= darwinMainScreenX;
dixScreenOrigins[i].y -= darwinMainScreenY;
- /* ErrorF("Screen %d placed at X11 coordinate (%d,%d).\n",
- i, dixScreenOrigins[i].x, dixScreenOrigins[i].y); */
+ DEBUG_LOG("Screen %d placed at X11 coordinate (%d,%d).\n",
+ i, dixScreenOrigins[i].x, dixScreenOrigins[i].y);
}
}
}
diff --git a/hw/xquartz/xpr/xprScreen.c b/hw/xquartz/xpr/xprScreen.c
index 583d7ef..7312226 100644
--- a/hw/xquartz/xpr/xprScreen.c
+++ b/hw/xquartz/xpr/xprScreen.c
@@ -153,7 +153,8 @@ displayScreenBounds(CGDirectDisplayID id, Bool remove_menubar)
(int)frame.origin.x, (int)frame.origin.y);
/* Remove menubar to help standard X11 window managers. */
- if (remove_menubar && !quartzHasRoot && id == 0) {
+ if (remove_menubar && !quartzHasRoot &&
+ frame.origin.x == 0 && frame.origin.y == 0) {
frame.origin.y += aquaMenuBarHeight;
frame.size.height -= aquaMenuBarHeight;
}
@@ -201,6 +202,9 @@ xprAddPseudoramiXScreens(int *x, int *y, int *width, int *height)
*width = unionRect.size.width;
*height = unionRect.size.height;
+ DEBUG_LOG(" screen union origin: (%d,%d) size: (%d,%d).\n",
+ *x, *y, *width, *height);
+
/* Tell PseudoramiX about the real screens. */
for (i = 0; i < displayCount; i++)
{
@@ -229,7 +233,7 @@ xprDisplayInit(void)
{
CGDisplayCount displayCount;
- // ErrorF("Display mode: Rootless Quartz -- Xplugin implementation\n");
+ DEBUG_LOG("");
CGGetActiveDisplayList(0, NULL, &displayCount);
@@ -265,6 +269,8 @@ xprAddScreen(int index, ScreenPtr pScreen)
{
DarwinFramebufferPtr dfb = SCREEN_PRIV(pScreen);
int depth = darwinDesiredDepth;
+
+ DEBUG_LOG("index=%d depth=%d\n", index, depth);
if(depth == -1) {
depth = CGDisplaySamplesPerPixel(kCGDirectMainDisplay) * CGDisplayBitsPerSample(kCGDirectMainDisplay);
commit 730e2a5ac37757346dbd43ae6acb7ff0718726ab
Author: Jeremy Huddleston <jeremyhu at freedesktop.org>
Date: Thu Apr 24 21:14:04 2008 -0700
XQuartz: Cleaned up multi-monitor support.
(cherry picked from commit c05abf0a19b0ef0fc4ace9400a095ce2521456bc)
(cherry picked from commit 9112f290434c246d3e797551aaaf3a89d2006b23)
diff --git a/hw/xquartz/xpr/xprScreen.c b/hw/xquartz/xpr/xprScreen.c
index 6f7598f..583d7ef 100644
--- a/hw/xquartz/xpr/xprScreen.c
+++ b/hw/xquartz/xpr/xprScreen.c
@@ -142,20 +142,26 @@ displayAtIndex(int index)
* Return the bounds of a particular display.
*/
static CGRect
-displayScreenBounds(CGDirectDisplayID id)
+displayScreenBounds(CGDirectDisplayID id, Bool remove_menubar)
{
CGRect frame;
frame = CGDisplayBounds(id);
+ DEBUG_LOG(" %dx%d @ (%d,%d).\n",
+ (int)frame.size.width, (int)frame.size.height,
+ (int)frame.origin.x, (int)frame.origin.y);
+
/* Remove menubar to help standard X11 window managers. */
-
- if (frame.origin.y == 0)
- {
+ if (remove_menubar && !quartzHasRoot && id == 0) {
frame.origin.y += aquaMenuBarHeight;
frame.size.height -= aquaMenuBarHeight;
}
+ DEBUG_LOG(" %dx%d @ (%d,%d).\n",
+ (int)frame.size.width, (int)frame.size.height,
+ (int)frame.origin.x, (int)frame.origin.y);
+
return frame;
}
@@ -179,8 +185,13 @@ xprAddPseudoramiXScreens(int *x, int *y, int *width, int *height)
/* Get the union of all screens */
for (i = 0; i < displayCount; i++)
{
+
+ /* we can't remove the menubar from the screen - doing so
+ * would constrain the pointer to the screen, not allowing it
+ * to reach the menubar..
+ */
CGDirectDisplayID dpy = displayList[i];
- frame = displayScreenBounds(dpy);
+ frame = displayScreenBounds(dpy, FALSE);
unionRect = CGRectUnion(unionRect, frame);
}
@@ -195,17 +206,12 @@ xprAddPseudoramiXScreens(int *x, int *y, int *width, int *height)
{
CGDirectDisplayID dpy = displayList[i];
- frame = displayScreenBounds(dpy);
-
- /* ErrorF("PseudoramiX screen %d added: %dx%d @ (%d,%d).\n", i,
- (int)frame.size.width, (int)frame.size.height,
- (int)frame.origin.x, (int)frame.origin.y); */
-
+ frame = displayScreenBounds(dpy, TRUE);
frame.origin.x -= unionRect.origin.x;
frame.origin.y -= unionRect.origin.y;
- /* ErrorF("PseudoramiX screen %d placed at X11 coordinate (%d,%d).\n",
- i, (int)frame.origin.x, (int)frame.origin.y); */
+ DEBUG_LOG(" placed at X11 coordinate (%d,%d).\n",
+ (int)frame.origin.x, (int)frame.origin.y);
PseudoramiXAddScreen(frame.origin.x, frame.origin.y,
frame.size.width, frame.size.height);
@@ -315,12 +321,14 @@ xprAddScreen(int index, ScreenPtr pScreen)
if (noPseudoramiXExtension)
{
+ ErrorF("Warning: noPseudoramiXExtension!\n");
+
CGDirectDisplayID dpy;
CGRect frame;
dpy = displayAtIndex(index);
- frame = displayScreenBounds(dpy);
+ frame = displayScreenBounds(dpy, TRUE);
dfb->x = frame.origin.x;
dfb->y = frame.origin.y;
More information about the xorg-commit
mailing list