gerenderter Paste-Inhaltdiff --git a/kde/window-decorator/decorator.cpp b/kde/window-decorator/decorator.cpp
index 937038e..51238f0 100644
--- a/kde/window-decorator/decorator.cpp
+++ b/kde/window-decorator/decorator.cpp
@@ -978,6 +978,7 @@ KWD::Decorator::handleWindowRemoved (WId id)
mWindows.remove (window->winId ());
mFrames.remove (window->frameId ());
+ window->destroyDecoration ();
delete window;
}
}
diff --git a/kde/window-decorator/window.cpp b/kde/window-decorator/window.cpp
index 7e07eab..e8ac25c 100644
--- a/kde/window-decorator/window.cpp
+++ b/kde/window-decorator/window.cpp
@@ -146,9 +146,6 @@ KWD::Window::~Window (void)
if (mDecorationPicture)
XRenderFreePicture (qt_xdisplay (), mDecorationPicture);
- if (mDecor)
- delete mDecor;
-
if (mPopup)
delete mPopup;
@@ -900,6 +897,7 @@ KWD::Window::updateShadow (void)
Screen *xscreen = ScreenOfDisplay (xdisplay, qt_xscreen ());
XRenderPictFormat *xformat;
int leftCorner, rightCorner, topCorner, bottomCorner;
+ bool canUseDefaultShadow;
if (mShadow)
{
@@ -929,8 +927,13 @@ KWD::Window::updateShadow (void)
bottomCorner = mBorder.bottom;
}
- /* use default shadow if such exist */
- if (!mUniqueHorzShape && !mUniqueVertShape)
+ /* use default shadow if such exist - don't use it for maximized
+ windows as the default shadow uses decoration extents for
+ non-maximized windows */
+ canUseDefaultShadow = !mUniqueHorzShape && !mUniqueVertShape &&
+ (mState & (NET::MaxVert | NET::MaxHoriz)) == 0;
+
+ if (canUseDefaultShadow)
{
mShadow = Decorator::defaultWindowShadow (&mContext);
if (mShadow)
diff --git a/kde/window-decorator/window.h b/kde/window-decorator/window.h
index ef7b79f..0038c93 100644
--- a/kde/window-decorator/window.h
+++ b/kde/window-decorator/window.h
@@ -117,6 +117,14 @@ class Window:public QWidget, public KDecorationBridge {
{
return mDecor;
}
+ void destroyDecoration (void)
+ {
+ if (mDecor)
+ {
+ delete mDecor;
+ mDecor = NULL;
+ }
+ }
QWidget *activeChild (void) const
{
return mActiveChild;