summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCarsten Lohrke <carlo@gentoo.org>2006-04-17 18:52:27 +0000
committerCarsten Lohrke <carlo@gentoo.org>2006-04-17 18:52:27 +0000
commit2a95a405b657905ececf325ffef04bbe953a7169 (patch)
tree25f2087b2bb538ddb201e16cfcf08915d00e9d0d /kde-base
parentReplace -O2 and -O3 with -O1 to avoid miscompilation, thanks to kenzelma in b... (diff)
downloadhistorical-2a95a405b657905ececf325ffef04bbe953a7169.tar.gz
historical-2a95a405b657905ececf325ffef04bbe953a7169.tar.bz2
historical-2a95a405b657905ececf325ffef04bbe953a7169.zip
Updated patch to fix bug #127980 and #128379.
Package-Manager: portage-2.0.54
Diffstat (limited to 'kde-base')
-rw-r--r--kde-base/kwin/ChangeLog8
-rw-r--r--kde-base/kwin/Manifest37
-rw-r--r--kde-base/kwin/files/digest-kwin-3.5.2-r21
-rw-r--r--kde-base/kwin/files/kwin-3.5.2-alt_tab_and_focus_chain_fix.diff391
-rw-r--r--kde-base/kwin/kwin-3.5.2-r2.ebuild30
5 files changed, 433 insertions, 34 deletions
diff --git a/kde-base/kwin/ChangeLog b/kde-base/kwin/ChangeLog
index 20917108d4ec..0002014fa7e3 100644
--- a/kde-base/kwin/ChangeLog
+++ b/kde-base/kwin/ChangeLog
@@ -1,6 +1,12 @@
# ChangeLog for kde-base/kwin
# Copyright 1999-2006 Gentoo Foundation; Distributed under the GPL v2
-# $Header: /var/cvsroot/gentoo-x86/kde-base/kwin/ChangeLog,v 1.49 2006/04/06 03:06:59 flameeyes Exp $
+# $Header: /var/cvsroot/gentoo-x86/kde-base/kwin/ChangeLog,v 1.50 2006/04/17 18:52:27 carlo Exp $
+
+*kwin-3.5.2-r2 (17 Apr 2006)
+
+ 17 Apr 2006; Carsten Lohrke <carlo@gentoo.org>
+ +files/kwin-3.5.2-alt_tab_and_focus_chain_fix.diff, +kwin-3.5.2-r2.ebuild:
+ Updated patch to fix bug #127980 and #128379.
06 Apr 2006; Diego Pettenò <flameeyes@gentoo.org>
-files/kwin-3.5.1-systray.patch, -kwin-3.5.0.ebuild, -kwin-3.5.1.ebuild,
diff --git a/kde-base/kwin/Manifest b/kde-base/kwin/Manifest
index b1d3e4f56bd5..1e88ba45af16 100644
--- a/kde-base/kwin/Manifest
+++ b/kde-base/kwin/Manifest
@@ -1,43 +1,14 @@
------BEGIN PGP SIGNED MESSAGE-----
-Hash: SHA1
-
-MD5 d57fd57240e1a8ad63413d4253ee4c5a ChangeLog 6077
-RMD160 6c2651e5fdc40b860914e99c35e45ce0e1933219 ChangeLog 6077
-SHA256 291391ddd0d7ddb5afdf3a93f62c4d1cfa590a7a3822bf6c3012ea7b5c0e5a58 ChangeLog 6077
+MD5 58b2a13d6c3c8eeec5335cfa05269610 ChangeLog 6278
MD5 b22a687fe2e8cf06cd5147f1ec68efb7 files/digest-kwin-3.4.1 212
-RMD160 507b5780112807385327a808ffffb5c897cbf1f4 files/digest-kwin-3.4.1 212
-SHA256 a64c99717e47d1f6143f531b9767e3e022d6c789e8d5a14aaf174814cb51a21d files/digest-kwin-3.4.1 212
MD5 7deca5e51240260b2976fbbe9326ed6d files/digest-kwin-3.4.2 287
-RMD160 db88376c4259165535f83f3529f0834fb2209612 files/digest-kwin-3.4.2 287
-SHA256 3f1b77c90587a110ffb3a1402c6f10a87ef93bfdbc1345bb2138188a52c9cb8b files/digest-kwin-3.4.2 287
MD5 b334b621242eaf5a23035e870f09dea6 files/digest-kwin-3.4.3 68
-RMD160 fe4b253b0a7c2e30a2aa1d0d796dfcb11e30590a files/digest-kwin-3.4.3 68
-SHA256 2c163305cf238b4283a2263d089f3a5cdacfe053018c1fa5d8a5879593baf1a8 files/digest-kwin-3.4.3 68
MD5 5efe75301bc0d47d1f2af0ce2feb2603 files/digest-kwin-3.5.2-r1 68
-RMD160 e75b5aeaf92e72ffb4e94df99d0f81490f287b93 files/digest-kwin-3.5.2-r1 68
-SHA256 19fc0b34e2f9464359bac8b07b2aec31b9b080ecc053164cc9bf8ee952e564a1 files/digest-kwin-3.5.2-r1 68
+MD5 5efe75301bc0d47d1f2af0ce2feb2603 files/digest-kwin-3.5.2-r2 68
+MD5 37dffebcd3f6d1641ccc80e50852fa46 files/kwin-3.5.2-alt_tab_and_focus_chain_fix.diff 15189
MD5 1ea48b1904f323b5937b4168048a5561 files/kwin-3.5.2-alt_tab_crash.diff 642
-RMD160 1872cd6d0b0c8fa3e54ff0abad7d2a17ae0dcef8 files/kwin-3.5.2-alt_tab_crash.diff 642
-SHA256 f9af5896d7c16739882eeb330d821f8b0a292fd46c2772949537bb8cc20fb21f files/kwin-3.5.2-alt_tab_crash.diff 642
MD5 2809511699650a8a076be8791e4d1567 kwin-3.4.1.ebuild 384
-RMD160 9a05f5adc449a45161e31c56572035a16fbe3242 kwin-3.4.1.ebuild 384
-SHA256 2df5424cc7c9de3f78cf0970a1ec4a5d7ae9a4b0101c8227d60aa542bc014f3d kwin-3.4.1.ebuild 384
MD5 83701c6ee016cca9476c28a71b8b6f8d kwin-3.4.2.ebuild 388
-RMD160 7ce7c0b74db6fa7a3c76018c309cd3398da9d9f5 kwin-3.4.2.ebuild 388
-SHA256 aafcc1381c3fe9bf479f3f01ecabd448c97e42cd7dac30009826c0edb44a25a7 kwin-3.4.2.ebuild 388
MD5 695a5f6ea3a7c5784b476831098018d8 kwin-3.4.3.ebuild 389
-RMD160 7928293c7f4ff1d108deb42785c31ccb4f0b2952 kwin-3.4.3.ebuild 389
-SHA256 ec86ae544ffc1b7330b1fb5de0331fe2a7620df50e9beeb9c4087f805d49c9f3 kwin-3.4.3.ebuild 389
MD5 aae40c7a7e69745391f451e8f1adf61c kwin-3.5.2-r1.ebuild 809
-RMD160 e0dbbc008dc89abcdf81fe5071db1eaf06ee4c49 kwin-3.5.2-r1.ebuild 809
-SHA256 9ad09b416ec14f60335d670d6aebaf1bb10f56ac197cfb4e4dfd0fbb02bb62c2 kwin-3.5.2-r1.ebuild 809
+MD5 f6dd03936bb305a77e5a19c69a887a92 kwin-3.5.2-r2.ebuild 809
MD5 acc03a4b12bb0433a57e95bd253b9501 metadata.xml 156
-RMD160 ecce3b981f150c45ae1e84e2d208e678d6124259 metadata.xml 156
-SHA256 2f4da28506b9d4185f320f67a6191d30c7a921217ed4447ed46ea0bc4aefc79a metadata.xml 156
------BEGIN PGP SIGNATURE-----
-Version: GnuPG v1.4.2.2 (GNU/Linux)
-
-iD8DBQFENIV4AiZjviIA2XgRAma0AJ0fz+qlyk5uzELyfsWrm2EqU51QbQCgg/hx
-NyUBnmUs6YlcTFUWxBKqF3I=
-=tOG3
------END PGP SIGNATURE-----
diff --git a/kde-base/kwin/files/digest-kwin-3.5.2-r2 b/kde-base/kwin/files/digest-kwin-3.5.2-r2
new file mode 100644
index 000000000000..9c5d5e23a110
--- /dev/null
+++ b/kde-base/kwin/files/digest-kwin-3.5.2-r2
@@ -0,0 +1 @@
+MD5 c5685e1be34e033286aa1f37002a0552 kdebase-3.5.2.tar.bz2 23590820
diff --git a/kde-base/kwin/files/kwin-3.5.2-alt_tab_and_focus_chain_fix.diff b/kde-base/kwin/files/kwin-3.5.2-alt_tab_and_focus_chain_fix.diff
new file mode 100644
index 000000000000..e21e408846ca
--- /dev/null
+++ b/kde-base/kwin/files/kwin-3.5.2-alt_tab_and_focus_chain_fix.diff
@@ -0,0 +1,391 @@
+diff -ur kwin.orig/activation.cpp kwin/activation.cpp
+--- kdebase/kwin.orig/activation.cpp 2006-04-16 14:50:58.000000000 +0200
++++ kdebase/kwin/activation.cpp 2006-04-16 15:17:55.000000000 +0200
+@@ -231,7 +231,7 @@
+ last_active_client = active_client;
+ if ( active_client )
+ {
+- updateFocusChains( active_client, true ); // make it first in focus chain
++ updateFocusChains( active_client, FocusChainMakeFirst );
+ active_client->demandAttention( false );
+ }
+ pending_take_activity = NULL;
+diff -ur kwin.orig/client.cpp kwin/client.cpp
+--- kdebase/kwin.orig/client.cpp 2006-04-16 14:50:58.000000000 +0200
++++ kdebase/kwin/client.cpp 2006-04-16 15:18:17.000000000 +0200
+@@ -578,7 +578,7 @@
+ updateAllowedActions();
+ workspace()->updateMinimizedOfTransients( this );
+ updateWindowRules();
+- workspace()->updateFocusChains( this, false ); // make it last in the focus chain
++ workspace()->updateFocusChains( this, Workspace::FocusChainMakeLast );
+ }
+
+ void Client::unminimize( bool avoid_animation )
+@@ -895,7 +895,16 @@
+ }
+ if( show )
+ {
+- if( workspace()->showingDesktop())
++ bool belongs_to_desktop = false;
++ for( ClientList::ConstIterator it = group()->members().begin();
++ it != group()->members().end();
++ ++it )
++ if( (*it)->isDesktop())
++ {
++ belongs_to_desktop = true;
++ break;
++ }
++ if( !belongs_to_desktop && workspace()->showingDesktop())
+ workspace()->resetShowingDesktop( true );
+ if( isShade())
+ setMappingState( IconicState );
+@@ -1149,7 +1158,8 @@
+ info->setState( b?NET::SkipTaskbar:0, NET::SkipTaskbar );
+ updateWindowRules();
+ if( was_wants_tab_focus != wantsTabFocus())
+- workspace()->updateFocusChains( this, isActive());
++ workspace()->updateFocusChains( this,
++ isActive() ? Workspace::FocusChainMakeFirst : Workspace::FocusChainUpdate );
+ }
+
+ void Client::setSkipPager( bool b )
+@@ -1191,7 +1201,7 @@
+ }
+ if( decoration != NULL )
+ decoration->desktopChange();
+- workspace()->updateFocusChains( this, true );
++ workspace()->updateFocusChains( this, Workspace::FocusChainMakeFirst );
+ updateVisibility();
+ updateWindowRules();
+ }
+diff -ur kwin.orig/events.cpp kwin/events.cpp
+--- kdebase/kwin.orig/events.cpp 2006-04-16 14:50:58.000000000 +0200
++++ kdebase/kwin/events.cpp 2006-04-16 15:18:35.000000000 +0200
+@@ -370,7 +370,7 @@
+ if( c )
+ {
+ c->windowEvent( e );
+- updateFocusChains( c, true );
++ updateFocusChains( c, FocusChainUpdate );
+ return true;
+ }
+ break;
+@@ -402,15 +402,15 @@
+ if ( e->xconfigurerequest.parent == root )
+ {
+ XWindowChanges wc;
+- unsigned int value_mask = 0;
+- wc.border_width = 0;
++ wc.border_width = e->xconfigurerequest.border_width;
+ wc.x = e->xconfigurerequest.x;
+ wc.y = e->xconfigurerequest.y;
+ wc.width = e->xconfigurerequest.width;
+ wc.height = e->xconfigurerequest.height;
+ wc.sibling = None;
+ wc.stack_mode = Above;
+- value_mask = e->xconfigurerequest.value_mask | CWBorderWidth;
++ unsigned int value_mask = e->xconfigurerequest.value_mask
++ & ( CWX | CWY | CWWidth | CWHeight | CWBorderWidth );
+ XConfigureWindow( qt_xdisplay(), e->xconfigurerequest.window, value_mask, &wc );
+ return true;
+ }
+diff -ur kwin.orig/geometry.cpp kwin/geometry.cpp
+--- kdebase/kwin.orig/geometry.cpp 2006-04-16 14:50:58.000000000 +0200
++++ kdebase/kwin/geometry.cpp 2006-04-16 15:18:58.000000000 +0200
+@@ -1281,7 +1281,21 @@
+ { // update to match restrictions
+ QSize new_size = adjustedSize();
+ if( new_size != size() && !isFullScreen())
++ {
++ QRect orig_geometry = geometry();
+ resizeWithChecks( new_size );
++ if( ( !isSpecialWindow() || isToolbar()) && !isFullScreen())
++ {
++ // try to keep the window in its xinerama screen if possible,
++ // if that fails at least keep it visible somewhere
++ QRect area = workspace()->clientArea( MovementArea, this );
++ if( area.contains( orig_geometry ))
++ keepInArea( area );
++ area = workspace()->clientArea( WorkArea, this );
++ if( area.contains( orig_geometry ))
++ keepInArea( area );
++ }
++ }
+ }
+ updateAllowedActions(); // affects isResizeable()
+ }
+@@ -1840,7 +1854,7 @@
+
+ // maximing one way and unmaximizing the other way shouldn't happen
+ Q_ASSERT( !( vertical && horizontal )
+- || (( max_mode & MaximizeVertical != 0 ) == ( max_mode & MaximizeHorizontal != 0 )));
++ || ((( max_mode & MaximizeVertical ) != 0 ) == (( max_mode & MaximizeHorizontal ) != 0 )));
+
+ QRect clientArea = workspace()->clientArea( MaximizeArea, this );
+
+diff -ur kwin.orig/layers.cpp kwin/layers.cpp
+--- kdebase/kwin.orig/layers.cpp 2006-04-16 14:50:58.000000000 +0200
++++ kdebase/kwin/layers.cpp 2006-04-16 15:19:23.000000000 +0200
+@@ -100,7 +100,7 @@
+ {
+ if( block_stacking_updates > 0 )
+ {
+- blocked_propagating_new_clients |= propagate_new_clients;
++ blocked_propagating_new_clients = blocked_propagating_new_clients || propagate_new_clients;
+ return;
+ }
+ ClientList new_stacking_order = constrainedStackingOrder();
+@@ -441,6 +441,21 @@
+ }
+ }
+ }
++ // the same for global_focus_chain
++ if( c->wantsTabFocus() && global_focus_chain.contains( active_client ))
++ {
++ global_focus_chain.remove( c );
++ for( ClientList::Iterator it = global_focus_chain.fromLast();
++ it != global_focus_chain.end();
++ --it )
++ {
++ if( Client::belongToSameApplication( active_client, *it ))
++ {
++ global_focus_chain.insert( it, c );
++ break;
++ }
++ }
++ }
+ updateStackingOrder();
+ }
+
+diff -ur kwin.orig/tabbox.cpp kwin/tabbox.cpp
+--- kdebase/kwin.orig/tabbox.cpp 2006-04-16 14:50:58.000000000 +0200
++++ kdebase/kwin/tabbox.cpp 2006-04-16 15:19:43.000000000 +0200
+@@ -763,7 +763,7 @@
+ return;
+ if ( tab_grab || control_grab )
+ return;
+- if ( options->altTabStyle == Options::CDE )
++ if ( options->altTabStyle == Options::CDE || !options->focusPolicyIsReasonable())
+ {
+ //XUngrabKeyboard(qt_xdisplay(), qt_x_time); // need that because of accelerator raw mode
+ // CDE style raise / lower
+@@ -789,7 +789,7 @@
+ return;
+ if( tab_grab || control_grab )
+ return;
+- if ( options->altTabStyle == Options::CDE )
++ if ( options->altTabStyle == Options::CDE || !options->focusPolicyIsReasonable())
+ {
+ // CDE style raise / lower
+ CDEWalkThroughWindows( false );
+@@ -926,7 +926,23 @@
+
+ void Workspace::CDEWalkThroughWindows( bool forward )
+ {
+- Client* c = activeClient();
++ Client* c = NULL;
++// this function find the first suitable client for unreasonable focus
++// policies - the topmost one, with some exceptions (can't be keepabove/below,
++// otherwise it gets stuck on them)
++ Q_ASSERT( block_stacking_updates == 0 );
++ for( ClientList::ConstIterator it = stacking_order.fromLast();
++ it != stacking_order.end();
++ --it )
++ {
++ if ( (*it)->isOnCurrentDesktop() && !(*it)->isSpecialWindow()
++ && (*it)->isShown( false ) && (*it)->wantsTabFocus()
++ && !(*it)->keepAbove() && !(*it)->keepBelow())
++ {
++ c = *it;
++ break;
++ }
++ }
+ Client* nc = c;
+ bool options_traverse_all;
+ {
+@@ -952,7 +968,7 @@
+ }
+ } while (nc && nc != c &&
+ (( !options_traverse_all && !nc->isOnDesktop(currentDesktop())) ||
+- nc->isMinimized() || !nc->wantsTabFocus() ) );
++ nc->isMinimized() || !nc->wantsTabFocus() || nc->keepAbove() || nc->keepBelow() ) );
+ if (nc)
+ {
+ if (c && c != nc)
+@@ -1152,14 +1168,13 @@
+ */
+ Client* Workspace::nextFocusChainClient( Client* c ) const
+ {
+- int desktop = c->isOnAllDesktops() ? currentDesktop() : c->desktop();
+- if ( focus_chain[desktop].isEmpty() )
++ if ( global_focus_chain.isEmpty() )
+ return 0;
+- ClientList::ConstIterator it = focus_chain[desktop].find( c );
+- if ( it == focus_chain[desktop].end() )
+- return focus_chain[desktop].last();
+- if ( it == focus_chain[desktop].begin() )
+- return focus_chain[desktop].last();
++ ClientList::ConstIterator it = global_focus_chain.find( c );
++ if ( it == global_focus_chain.end() )
++ return global_focus_chain.last();
++ if ( it == global_focus_chain.begin() )
++ return global_focus_chain.last();
+ --it;
+ return *it;
+ }
+@@ -1170,15 +1185,14 @@
+ */
+ Client* Workspace::previousFocusChainClient( Client* c ) const
+ {
+- int desktop = c->isOnAllDesktops() ? currentDesktop() : c->desktop();
+- if ( focus_chain[desktop].isEmpty() )
++ if ( global_focus_chain.isEmpty() )
+ return 0;
+- ClientList::ConstIterator it = focus_chain[desktop].find( c );
+- if ( it == focus_chain[desktop].end() )
+- return focus_chain[desktop].first();
++ ClientList::ConstIterator it = global_focus_chain.find( c );
++ if ( it == global_focus_chain.end() )
++ return global_focus_chain.first();
+ ++it;
+- if ( it == focus_chain[desktop].end() )
+- return focus_chain[desktop].first();
++ if ( it == global_focus_chain.end() )
++ return global_focus_chain.first();
+ return *it;
+ }
+
+diff -ur kwin.orig/workspace.cpp kwin/workspace.cpp
+--- kdebase/kwin.orig/workspace.cpp 2006-04-16 14:50:58.000000000 +0200
++++ kdebase/kwin/workspace.cpp 2006-04-16 15:20:05.000000000 +0200
+@@ -512,7 +512,7 @@
+ }
+ else
+ {
+- updateFocusChains( c, true );
++ updateFocusChains( c, FocusChainUpdate ); // add to focus chain if not already there
+ clients.append( c );
+ }
+ if( !unconstrained_stacking_order.contains( c ))
+@@ -564,6 +564,7 @@
+ i <= numberOfDesktops();
+ ++i )
+ focus_chain[ i ].remove( c );
++ global_focus_chain.remove( c );
+ attention_chain.remove( c );
+ if( c->isTopMenu())
+ removeTopMenu( c );
+@@ -590,7 +591,7 @@
+ updateClientArea();
+ }
+
+-void Workspace::updateFocusChains( Client* c, bool make_first )
++void Workspace::updateFocusChains( Client* c, FocusChainChange change )
+ {
+ if( !c->wantsTabFocus()) // doesn't want tab focus, remove
+ {
+@@ -598,16 +599,21 @@
+ i<= numberOfDesktops();
+ ++i )
+ focus_chain[i].remove(c);
++ global_focus_chain.remove( c );
+ return;
+ }
+ if(c->desktop() == NET::OnAllDesktops)
+ { //now on all desktops, add it to focus_chains it is not already in
+ for( int i=1; i<= numberOfDesktops(); i++)
+- { // make_first works only on current desktop, don't affect all desktops
+- if( make_first && i == currentDesktop())
++ { // making first/last works only on current desktop, don't affect all desktops
++ if( i == currentDesktop()
++ && ( change == FocusChainMakeFirst || change == FocusChainMakeLast ))
+ {
+ focus_chain[ i ].remove( c );
+- focus_chain[ i ].append( c );
++ if( change == FocusChainMakeFirst )
++ focus_chain[ i ].append( c );
++ else
++ focus_chain[ i ].prepend( c );
+ }
+ else if( !focus_chain[ i ].contains( c ))
+ focus_chain[ i ].prepend( c ); // otherwise add as the last one
+@@ -619,11 +625,16 @@
+ {
+ if( i == c->desktop())
+ {
+- if( make_first )
++ if( change == FocusChainMakeFirst )
+ {
+ focus_chain[ i ].remove( c );
+ focus_chain[ i ].append( c );
+ }
++ else if( change == FocusChainMakeLast )
++ {
++ focus_chain[ i ].remove( c );
++ focus_chain[ i ].prepend( c );
++ }
+ else if( !focus_chain[ i ].contains( c ))
+ focus_chain[ i ].prepend( c );
+ }
+@@ -631,6 +642,18 @@
+ focus_chain[ i ].remove( c );
+ }
+ }
++ if( change == FocusChainMakeFirst )
++ {
++ global_focus_chain.remove( c );
++ global_focus_chain.append( c );
++ }
++ else if( change == FocusChainMakeLast )
++ {
++ global_focus_chain.remove( c );
++ global_focus_chain.prepend( c );
++ }
++ else if( !global_focus_chain.contains( c ))
++ global_focus_chain.prepend( c );
+ }
+
+ void Workspace::updateCurrentTopMenu()
+diff -ur kwin.orig/workspace.h kwin/workspace.h
+--- kdebase/kwin.orig/workspace.h 2006-04-16 14:50:58.000000000 +0200
++++ kdebase/kwin/workspace.h 2006-04-16 15:20:32.000000000 +0200
+@@ -251,7 +251,8 @@
+ bool checkStartupNotification( Window w, KStartupInfoId& id, KStartupInfoData& data );
+
+ void focusToNull(); // SELI public?
+- void updateFocusChains( Client* c, bool make_first );
++ enum FocusChainChange { FocusChainMakeFirst, FocusChainMakeLast, FocusChainUpdate };
++ void updateFocusChains( Client* c, FocusChainChange change );
+
+ bool forcedGlobalMouseGrab() const;
+ void clientShortcutUpdated( Client* c );
+@@ -510,6 +511,7 @@
+ ClientList unconstrained_stacking_order;
+ ClientList stacking_order;
+ QValueVector< ClientList > focus_chain;
++ ClientList global_focus_chain; // this one is only for things like tabbox's MRU
+ ClientList should_get_focus; // last is most recent
+ ClientList attention_chain;
+
+--- kdebase/kwin/utils.h 2006/02/28 13:01:47 514432
++++ kdebase/kwin/utils.h 2006/04/11 12:49:12 528574
+@@ -232,15 +232,13 @@
+ inline
+ int timestampCompare( Time time1, Time time2 ) // like strcmp()
+ {
+- if( time1 == time2 )
+- return 0;
+- return ( time1 - time2 ) < 1000000000 ? 1 : -1; // time1 > time2 -> 1, handle wrapping
++ return NET::timestampCompare( time1, time2 );
+ }
+
+ inline
+ Time timestampDiff( Time time1, Time time2 ) // returns time2 - time1
+- { // no need to handle wrapping?
+- return time2 - time1;
++ {
++ return NET::timestampDiff( time1, time2 );
+ }
+
+ bool isLocalMachine( const QCString& host );
diff --git a/kde-base/kwin/kwin-3.5.2-r2.ebuild b/kde-base/kwin/kwin-3.5.2-r2.ebuild
new file mode 100644
index 000000000000..c5781bc85902
--- /dev/null
+++ b/kde-base/kwin/kwin-3.5.2-r2.ebuild
@@ -0,0 +1,30 @@
+# Copyright 1999-2006 Gentoo Foundation
+# Distributed under the terms of the GNU General Public License v2
+# $Header: /var/cvsroot/gentoo-x86/kde-base/kwin/kwin-3.5.2-r2.ebuild,v 1.1 2006/04/17 18:52:27 carlo Exp $
+
+KMNAME=kdebase
+MAXKDEVER=$PV
+KM_DEPRANGE="$PV $MAXKDEVER"
+inherit kde-meta eutils
+
+DESCRIPTION="KDE window manager"
+KEYWORDS="~alpha ~amd64 ~ia64 ~ppc ~ppc64 ~sparc ~x86"
+IUSE="xcomposite"
+RDEPEND="xcomposite? ( || ( (
+ x11-libs/libXcomposite
+ x11-libs/libXdamage
+ ) <=x11-base/xorg-x11-6.9 )
+ )"
+DEPEND="${RDEPEND}
+ xcomposite? ( || ( (
+ x11-proto/compositeproto
+ x11-proto/damageproto
+ ) <=x11-base/xorg-x11-6.9 )
+ )"
+
+PATCHES="${FILESDIR}/kwin-3.5.2-alt_tab_and_focus_chain_fix.diff"
+
+src_compile() {
+ myconf="$myconf $(use_with xcomposite composite)"
+ kde-meta_src_compile
+}