diff --git a/kdebase-workspace-4.0.5-kwin-stacking.patch b/kdebase-workspace-4.0.5-kwin-stacking.patch new file mode 100644 index 0000000..0cc9cee --- /dev/null +++ b/kdebase-workspace-4.0.5-kwin-stacking.patch @@ -0,0 +1,92 @@ +--- kwin/layers.cpp 2008/07/01 14:09:41 826818 ++++ kwin/layers.cpp 2008/07/01 14:10:07 826819 +@@ -611,7 +611,7 @@ + { + if( stacking[ i2 ] == stacking[ i ] ) + { +- i2 = -1; // don't reorder ++ i2 = -1; // don't reorder, already the topmost in the group + break; + } + if( stacking[ i2 ]->hasTransient( stacking[ i ], true ) +@@ -628,7 +628,7 @@ + { + if( stacking[ i2 ] == stacking[ i ] ) + { +- i2 = -1; // don't reorder ++ i2 = -1; // don't reorder, already on top of its mainwindow + break; + } + if( stacking[ i2 ] == stacking[ i ]->transientFor() +@@ -636,7 +636,6 @@ + break; + } + } +-// kDebug() << "STACK:" << stacking[ i ] << ":" << ( i2 == -1 ? ((Client*)0) : stacking[ i2 ] ); + if( i2 == -1 ) + { + --i; +@@ -644,10 +643,11 @@ + } + Client* current = stacking[ i ]; + stacking.removeAt( i ); +- --i; ++ --i; // move onto the next item (for next for() iteration) ++ --i2; // adjust index of the mainwindow after the remove above + if( !current->transients().isEmpty()) // this one now can be possibly above its transients, + i = i2; // so go again higher in the stack order and possibly move those transients again +- ++i2; // insert after the mainwindow, it's ok if it2 is now stacking.end() ++ ++i2; // insert after (on top of) the mainwindow, it's ok if it2 is now stacking.end() + stacking.insert( i2, current ); + } + #if 0 +--- kwin/composite.cpp 2008/07/04 14:06:23 828060 ++++ kwin/composite.cpp 2008/07/04 14:07:32 828061 +@@ -295,7 +295,7 @@ + return; + } + // create a list of all windows in the stacking order +- ToplevelList windows = rootStackingOrder(); ++ ToplevelList windows = compositingStackingOrder(); + foreach( EffectWindow* c, static_cast< EffectsHandlerImpl* >( effects )->elevatedWindows()) + { + Toplevel* t = static_cast< EffectWindowImpl* >( c )->window(); +--- kwin/layers.cpp 2008/07/04 14:06:23 828060 ++++ kwin/layers.cpp 2008/07/04 14:07:32 828061 +@@ -718,20 +718,21 @@ + + // Returns all windows in their stacking order on the root window, used only by compositing. + // TODO This possibly should be optimized to avoid the X roundtrip and building it every pass. +-ToplevelList Workspace::rootStackingOrder() const ++ToplevelList Workspace::compositingStackingOrder() const + { + Window dummy; + Window* windows = NULL; + unsigned int count = 0; + XQueryTree( display(), rootWindow(), &dummy, &dummy, &windows, &count ); + ToplevelList ret; ++ // use our own stacking order, not the X one, as they may differ ++ foreach( Client* c, stacking_order ) ++ ret.append( c ); + for( unsigned int i = 0; + i < count; + ++i ) + { +- if( Client* c = findClient( FrameIdMatchPredicate( windows[ i ] ))) +- ret.append( c ); +- else if( Unmanaged* c = findUnmanaged( WindowMatchPredicate( windows[ i ] ))) ++ if( Unmanaged* c = findUnmanaged( WindowMatchPredicate( windows[ i ] ))) + ret.append( c ); + } + foreach( Deleted* c, deleted ) +--- kwin/workspace.h 2008/07/04 14:06:23 828060 ++++ kwin/workspace.h 2008/07/04 14:07:32 828061 +@@ -507,7 +507,7 @@ + void removeTabBoxGrab(); + + void updateStackingOrder( bool propagate_new_clients = false ); +- ToplevelList rootStackingOrder() const; ++ ToplevelList compositingStackingOrder() const; + void propagateClients( bool propagate_new_clients ); // called only from updateStackingOrder + ClientList constrainedStackingOrder(); + void raiseClientWithinApplication( Client* c ); diff --git a/kdebase-workspace.spec b/kdebase-workspace.spec index 20c5708..7446419 100644 --- a/kdebase-workspace.spec +++ b/kdebase-workspace.spec @@ -6,7 +6,7 @@ Summary: K Desktop Environment - Workspace Name: kdebase-workspace Version: 4.0.5 -Release: 3%{?dist} +Release: 4%{?dist} Source0: ftp://ftp.kde.org/pub/kde/stable/%{version}/src/kdebase-workspace-%{version}.tar.bz2 License: GPLv2 Group: User Interface/Desktops @@ -33,6 +33,9 @@ Patch13: kdebase-workspace-4.0.5-kwin-shortcuts.patch # http://websvn.kde.org/?view=rev&revision=822345 # fix screensaver idle detection Patch14: kdebase-workspace-4.0.5-screensaver-xautolock.patch +# http://websvn.kde.org/?view=rev&revision=828061 +# kdebug:161436 other desktops' windows not drawn with effects like desktop grid and present windows +Patch15: kdebase-workspace-4.0.5-kwin-stacking.patch # upstream patches: # http://bugs.kde.org/155362 (show Name in addition to GenericName in simple menu) @@ -172,6 +175,7 @@ Group: System Environment/Daemons %patch12 -p0 -b .kwin-compositing %patch13 -p0 -b .kwin-shortcuts %patch14 -p0 -b .screensaver-xautolock +%patch15 -p0 -b .kwin-stacking # upstream patches %patch101 -p1 -b .menu-switch @@ -305,6 +309,10 @@ xdg-desktop-menu forceupdate 2> /dev/null || : %changelog +* Wed Jul 9 2008 Lukáš Tinkl - 4.0.5-4 +- fix windows not being drawn on other desktops with effects like desktop + grid or present windows (kdebug:161436) + * Fri Jun 20 2008 Lukáš Tinkl - 4.0.5-3 - fix screensaver idle detection (#448183, kdebug:163006)