Alle Pastes #677036 Raw Bearbeiten

Meins

öffentlich text v1 · unveränderlich
#677036 ·veröffentlicht 2007-08-31 16:42 UTC
gerenderter Paste-Inhalt
diff --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;