From e9407475283fe838b91d32bb43c9b0fc9dbe7fa9 Mon Sep 17 00:00:00 2001 From: Ori Bernstein Date: Thu, 15 Jun 2006 18:34:23 -0500 Subject: [PATCH] Fixed segfault, got a single xterm window to show up. - Can't interact with xterm - Default background is wrong color - Extremely extremely slow opening windows. Why? --- hw/xnest/Color.c | 6 +++++- hw/xnest/Events.c | 2 +- hw/xnest/Screen.c | 5 +++-- hw/xnest/Visual.c | 2 +- hw/xnest/Window.c | 27 ++++++++++++++------------- 5 files changed, 24 insertions(+), 18 deletions(-) diff --git a/hw/xnest/Color.c b/hw/xnest/Color.c index 2530bafc4..8af75d263 100644 --- a/hw/xnest/Color.c +++ b/hw/xnest/Color.c @@ -43,6 +43,8 @@ static ColormapPtr InstalledMaps[MAXSCREENS]; Bool xnestCreateColormap(ColormapPtr pCmap) { VisualPtr pVisual; + XCBVISUALID vid; + XCBSCREEN *screen; XCBGenericError *e; XCBRGB *colors; int i, ncolors; @@ -56,13 +58,15 @@ Bool xnestCreateColormap(ColormapPtr pCmap) ncolors = pVisual->ColormapEntries; pCmap->devPriv = (pointer)xalloc(sizeof(xnestPrivColormap)); + screen = XCBSetupRootsIter (XCBGetSetup (xnestConnection)).data; xnestColormapPriv(pCmap)->colormap = XCBCOLORMAPNew(xnestConnection); + vid = screen->root_visual;//pCmap->pScreen->rootVisual.id; XCBCreateColormap(xnestConnection, (pVisual->class & DynamicClass) ? AllocAll : AllocNone, xnestColormapPriv(pCmap)->colormap, xnestDefaultWindows[pCmap->pScreen->myNum], - xnestVisual(pVisual)->visual_id); + vid); switch (pVisual->class) { diff --git a/hw/xnest/Events.c b/hw/xnest/Events.c index c6a3cf6dd..62d668295 100644 --- a/hw/xnest/Events.c +++ b/hw/xnest/Events.c @@ -257,7 +257,7 @@ void xnestCollectEvents() while ((e = XCBPollForEvent(xnestConnection, NULL)) != NULL) { if (!e->response_type) { err = (XCBGenericError *)e; - ErrorF("File: %s Error: %d\n", __FILE__, err->error_code); + ErrorF("File: %s Error: %d, Sequence %d\n", __FILE__, err->error_code, err->sequence); switch(err->error_code){ case XCBMatch: re = (XCBRequestError *)err; diff --git a/hw/xnest/Screen.c b/hw/xnest/Screen.c index e33e66679..56af6d94c 100644 --- a/hw/xnest/Screen.c +++ b/hw/xnest/Screen.c @@ -389,10 +389,11 @@ Bool xnestOpenScreen(int index, ScreenPtr pScreen, int argc, char *argv[]) XCBCWEventMask, &xnestEventMask); } else { - vid.id = pScreen->rootVisual; + //vid.id = pScreen->rootVisual; + vid = screen->root_visual; xnestDefaultWindows[pScreen->myNum] = XCBWINDOWNew(xnestConnection); XCBAuxCreateWindow(xnestConnection, - pScreen->rootDepth, + xnestDefaultDepth, xnestDefaultWindows[pScreen->myNum], screen->root, xnestX + POSITION_OFFSET, diff --git a/hw/xnest/Visual.c b/hw/xnest/Visual.c index 6bdd84342..eca3fa68e 100644 --- a/hw/xnest/Visual.c +++ b/hw/xnest/Visual.c @@ -38,7 +38,7 @@ XCBVISUALTYPE *xnestVisual(VisualPtr pVisual) if (pVisual->class == xnestVisuals[i]->_class && pVisual->bitsPerRGBValue == xnestVisuals[i]->bits_per_rgb_value && pVisual->ColormapEntries == xnestVisuals[i]->colormap_entries && - /*pVisual->nplanes == xnestVisuals[i]->depth && er. help*/ + pVisual->nplanes == xnestDepths[i] && pVisual->redMask == xnestVisuals[i]->red_mask && pVisual->greenMask == xnestVisuals[i]->green_mask && pVisual->blueMask == xnestVisuals[i]->blue_mask) diff --git a/hw/xnest/Window.c b/hw/xnest/Window.c index bd0f31c43..6a5e6ecb1 100644 --- a/hw/xnest/Window.c +++ b/hw/xnest/Window.c @@ -107,28 +107,29 @@ Bool xnestCreateWindow(WindowPtr pWin) vid.id = XCBCopyFromParent; } else { /* root windows have their own colormaps at creation time */ - vid.id = wVisual(pWin); + vid.id = wVisual(pWin); visual = xnestVisualFromID(pWin->drawable.pScreen, vid); pCmap = (ColormapPtr)LookupIDByType(wColormap(pWin), RT_COLORMAP); mask |= CWColormap; param.colormap = xnestColormap(pCmap).xid; + vid = visual->visual_id; } } xnestWindowPriv(pWin)->window = XCBWINDOWNew(xnestConnection); XCBAuxCreateWindow(xnestConnection, - pWin->drawable.depth, - xnestWindowPriv(pWin)->window, - xnestWindowParent(pWin), - pWin->origin.x - wBorderWidth(pWin), - pWin->origin.y - wBorderWidth(pWin), - pWin->drawable.width, - pWin->drawable.height, - pWin->borderWidth, - pWin->drawable.class, - vid, - mask, - ¶m); + pWin->drawable.depth, + xnestWindowPriv(pWin)->window, + xnestWindowParent(pWin), + pWin->origin.x - wBorderWidth(pWin), + pWin->origin.y - wBorderWidth(pWin), + pWin->drawable.width, + pWin->drawable.height, + pWin->borderWidth, + pWin->drawable.class, + vid, + mask, + ¶m); xnestWindowPriv(pWin)->parent = xnestWindowParent(pWin); xnestWindowPriv(pWin)->x = pWin->origin.x - wBorderWidth(pWin); xnestWindowPriv(pWin)->y = pWin->origin.y - wBorderWidth(pWin);