diff --git a/kde/window-decorator/decorator.cpp b/kde/window-decorator/decorator.cpp diff --git a/kde/window-decorator/window.cpp b/kde/window-decorator/window.cpp index 5165995..ab361fb 100644 --- a/kde/window-decorator/window.cpp +++ b/kde/window-decorator/window.cpp @@ -1038,7 +1038,7 @@ KWD::Window::setMask (const QRegion ®, int) KWD::trapXError (); XShapeCombineRegion (qt_xdisplay (), mFrame, - ShapeInput, + ShapeBounding, 0, 0, r.handle (), @@ -1157,6 +1157,8 @@ KWD::Window::resizeDecoration (bool force) mPendingMap = 1; XReparentWindow (qt_xdisplay (), winId (), mParentId, 0, 0); + if (mFrame) + XReparentWindow (qt_xdisplay (), mDecor->widget()->winId (), mFrame, 0, 0); show (); @@ -1451,6 +1453,16 @@ KWD::Window::handleActiveChange (void) void KWD::Window::updateFrame (WId frame) { + + if (frame && mFrame != frame && mDecor) + { + XReparentWindow (qt_xdisplay (), mDecor->widget()->winId (), frame, 0, 0); + mDecor->widget ()->show (); + mDecor->widget ()->repaint (); + } + if (mDecor) + resizeDecoration(); + mFrame = frame; KWD::trapXError (); diff --git a/plugins/decoration.c b/plugins/decoration.c index f7c0ca1..289d4b3 100644 --- a/plugins/decoration.c +++ b/plugins/decoration.c @@ -287,7 +287,7 @@ decorReleaseTexture (CompScreen *screen, DecorTexture *texture) { DECOR_DISPLAY (screen->display); - +return; texture->refCount--; if (texture->refCount) return; @@ -459,7 +459,7 @@ decorCreateDecoration (CompScreen *screen, free (quad); return NULL; } - +#if 0 decoration->texture = decorGetTexture (screen, pixmap); if (!decoration->texture) { @@ -467,7 +467,7 @@ decorCreateDecoration (CompScreen *screen, free (quad); return NULL; } - +#endif decoration->minWidth = minWidth; decoration->minHeight = minHeight; decoration->quad = quad; @@ -519,12 +519,14 @@ static void decorReleaseDecoration (CompScreen *screen, Decoration *decoration) { + if (!decoration) + return; decoration->refCount--; if (decoration->refCount) return; decorReleaseTexture (screen, decoration->texture); - +if (decoration->quad) free (decoration->quad); free (decoration); } @@ -568,6 +570,8 @@ static void destroyWindowDecoration (CompScreen *screen, WindowDecoration *wd) { +if (!wd) + return; decorReleaseDecoration (screen, wd->decor); free (wd); } @@ -587,7 +591,7 @@ setDecorationMatrices (CompWindow *w) wd = dw->wd; if (!wd) return; - +return; for (i = 0; i < wd->nQuad; i++) { wd->quad[i].matrix = wd->decor->texture->texture.matrix; diff --git a/src/display.c b/src/display.c index 0bbaceb..6f1b4c3 100644 --- a/src/display.c +++ b/src/display.c @@ -1638,7 +1638,7 @@ eventLoop (void) timeToNextRedraw = s->timeLeft; } } - +#if 0 if (damageMask) { time = timeToNextRedraw; @@ -1827,6 +1827,7 @@ eventLoop (void) } } else +#endif { if (core.timeouts) { @@ -2239,7 +2240,7 @@ addDisplay (const char *name) return FALSE; d->lastPing = 1; - +#if 0 if (!XQueryExtension (dpy, COMPOSITE_NAME, &d->compositeOpcode, @@ -2265,7 +2266,7 @@ addDisplay (const char *name) "No damage extension"); return FALSE; } - +#endif if (!XSyncQueryExtension (dpy, &d->syncEvent, &d->syncError)) { compLogMessage (d, "core", CompLogLevelFatal, @@ -2383,7 +2384,7 @@ addDisplay (const char *name) XSelectInput (dpy, currentWmSnOwner, StructureNotifyMask); } - +#if 0 sprintf (buf, "_NET_WM_CM_S%d", i); cmSnAtom = XInternAtom (dpy, buf, 0); @@ -2403,7 +2404,7 @@ addDisplay (const char *name) continue; } } - +#endif attr.override_redirect = TRUE; attr.event_mask = PropertyChangeMask; @@ -2468,7 +2469,7 @@ addDisplay (const char *name) } compCheckForError (dpy); - +#if 0 XCompositeRedirectSubwindows (dpy, XRootWindow (dpy, i), CompositeRedirectManual); @@ -2492,7 +2493,7 @@ addDisplay (const char *name) continue; } - +#endif XGrabServer (dpy); XSelectInput (dpy, XRootWindow (dpy, i), diff --git a/src/screen.c b/src/screen.c index 1a066ef..13d0628 100644 --- a/src/screen.c +++ b/src/screen.c @@ -1737,7 +1737,7 @@ addScreen (CompDisplay *display, s->workArea.height = s->attrib.height; s->grabWindow = None; - +#if 0 makeOutputWindow (s); templ.visualid = XVisualIDFromVisual (s->attrib.visual); @@ -2178,7 +2178,7 @@ addScreen (CompDisplay *display, if (s->textureEnvCrossbar && s->maxTextureUnits >= 4) s->canDoSlightlySaturated = TRUE; } - +#endif s->redrawTime = 1000 / defaultRefreshRate; s->optimalRedrawTime = s->redrawTime; @@ -2187,7 +2187,7 @@ addScreen (CompDisplay *display, detectRefreshRateOfScreen (s); detectOutputDevices (s); updateOutputDevices (s); - +#if 0 glLightModelfv (GL_LIGHT_MODEL_AMBIENT, globalAmbient); glEnable (GL_LIGHT0); @@ -2198,7 +2198,7 @@ addScreen (CompDisplay *display, glColorMaterial (GL_FRONT, GL_AMBIENT_AND_DIFFUSE); glNormal3f (0.0f, 0.0f, -1.0f); - +#endif s->lighting = FALSE; s->slowAnimations = FALSE; @@ -2452,7 +2452,7 @@ findTopLevelWindowAtScreen (CompScreen *s, if (w->attrib.override_redirect) { /* likely a frame window */ - if (w->attrib.class == InputOnly) +// if (w->attrib.class == InputOnly) { for (w = s->windows; w; w = w->next) if (w->frame == id) diff --git a/src/window.c b/src/window.c index 98ad9c8..72ef304 100644 --- a/src/window.c +++ b/src/window.c @@ -183,6 +183,7 @@ recalcNormalHints (CompWindow *window) int maxSize; maxSize = window->screen->maxTextureSize; + maxSize = 65535; maxSize -= window->serverBorderWidth * 2; window->sizeHints.x = window->serverX; @@ -1173,7 +1174,7 @@ updateFrameWindow (CompWindow *w) w->frame = XCreateWindow (d->display, w->screen->root, x, y, width, height, 0, CopyFromParent, - InputOnly, + InputOutput, CopyFromParent, CWOverrideRedirect | CWEventMask, &attr); @@ -2525,7 +2526,7 @@ resizeWindow (CompWindow *w, pw = width + borderWidth * 2; ph = height + borderWidth * 2; - +#if 0 if (w->mapNum && w->redirected) { pixmap = XCompositeNameWindowPixmap (w->screen->display->display, @@ -2545,7 +2546,7 @@ resizeWindow (CompWindow *w, { ph = 0; } - +#endif addWindowDamage (w); dx = x - w->attrib.x; @@ -2575,7 +2576,7 @@ resizeWindow (CompWindow *w, w->invisible = WINDOW_INVISIBLE (w); - updateFrameWindow (w); +// updateFrameWindow (w); } else if (w->attrib.x != x || w->attrib.y != y) { @@ -2586,10 +2587,12 @@ resizeWindow (CompWindow *w, moveWindow (w, dx, dy, TRUE, TRUE); +/* if (w->frame) XMoveWindow (w->screen->display->display, w->frame, - w->attrib.x - w->input.left, - w->attrib.y - w->input.top); + w->serverX - w->input.left, + w->serverY - w->input.top); +*/ } return TRUE; @@ -3360,6 +3363,9 @@ configureXWindow (CompWindow *w, XConfigureWindow (w->screen->display->display, w->id, valueMask, xwc); + if (w->frame) + updateFrameWindow(w); + if (w->frame && (valueMask & (CWSibling | CWStackMode))) XConfigureWindow (w->screen->display->display, w->frame, valueMask & (CWSibling | CWStackMode), xwc);