I forgot to attach the archive. Great. Here it is ;).
# This is a shell archive. Save it in a file, remove anything before
# this line, and then unpack it by entering "sh file". Note, it may
# create directories; files and directories will be owned by you and
# have default permissions.
#
# This archive contains:
#
# patch-kwin-layers.cpp
# patch-kwin-tabbox.cpp
# patch-kwin-workspace.cpp
# patch-kwin-workspace.h
#
echo x - patch-kwin-layers.cpp
sed 's/^X//' >patch-kwin-layers.cpp << 'END-of-patch-kwin-layers.cpp'
X--- kwin/layers.cpp 2006/02/27 09:54:03 514048
X+++ kwin/layers.cpp 2006/04/11 14:10:01 528608
X@@ -100,7 +100,7 @@
X {
X if( block_stacking_updates > 0 )
X {
X- blocked_propagating_new_clients |= propagate_new_clients;
X+ blocked_propagating_new_clients = blocked_propagating_new_clients ||
propagate_new_clients;
X return;
X }
X ClientList new_stacking_order = constrainedStackingOrder();
X@@ -441,6 +441,21 @@
X }
X }
X }
X+ // the same for global_focus_chain
X+ if( c->wantsTabFocus() && global_focus_chain.contains( active_client ))
X+ {
X+ global_focus_chain.remove( c );
X+ for( ClientList::Iterator it = global_focus_chain.fromLast();
X+ it != global_focus_chain.end();
X+ --it )
X+ {
X+ if( Client::belongToSameApplication( active_client, *it ))
X+ {
X+ global_focus_chain.insert( it, c );
X+ break;
X+ }
X+ }
X+ }
X updateStackingOrder();
X }
END-of-patch-kwin-layers.cpp
echo x - patch-kwin-tabbox.cpp
sed 's/^X//' >patch-kwin-tabbox.cpp << 'END-of-patch-kwin-tabbox.cpp'
X--- kwin/tabbox.cpp 2006/02/27 09:54:03 514048
X+++ kwin/tabbox.cpp 2006/04/11 14:10:01 528608
X@@ -763,7 +763,7 @@
X return;
X if ( tab_grab || control_grab )
X return;
X- if ( options->altTabStyle == Options::CDE )
X+ if ( options->altTabStyle == Options::CDE ||
!options->focusPolicyIsReasonable())
X {
X //XUngrabKeyboard(qt_xdisplay(), qt_x_time); // need that because of
accelerator raw mode
X // CDE style raise / lower
X@@ -789,7 +789,7 @@
X return;
X if( tab_grab || control_grab )
X return;
X- if ( options->altTabStyle == Options::CDE )
X+ if ( options->altTabStyle == Options::CDE ||
!options->focusPolicyIsReasonable())
X {
X // CDE style raise / lower
X CDEWalkThroughWindows( false );
X@@ -926,7 +926,23 @@
X
X void Workspace::CDEWalkThroughWindows( bool forward )
X {
X- Client* c = activeClient();
X+ Client* c = NULL;
X+// this function find the first suitable client for unreasonable focus
X+// policies - the topmost one, with some exceptions (can't be keepabove/below,
X+// otherwise it gets stuck on them)
X+ Q_ASSERT( block_stacking_updates == 0 );
X+ for( ClientList::ConstIterator it = stacking_order.fromLast();
X+ it != stacking_order.end();
X+ --it )
X+ {
X+ if ( (*it)->isOnCurrentDesktop() && !(*it)->isSpecialWindow()
X+ && (*it)->isShown( false ) && (*it)->wantsTabFocus()
X+ && !(*it)->keepAbove() && !(*it)->keepBelow())
X+ {
X+ c = *it;
X+ break;
X+ }
X+ }
X Client* nc = c;
X bool options_traverse_all;
X {
X@@ -952,7 +968,7 @@
X }
X } while (nc && nc != c &&
X (( !options_traverse_all && !nc->isOnDesktop(currentDesktop())) ||
X- nc->isMinimized() || !nc->wantsTabFocus() ) );
X+ nc->isMinimized() || !nc->wantsTabFocus() || nc->keepAbove() ||
nc->keepBelow() ) );
X if (nc)
X {
X if (c && c != nc)
X@@ -1152,14 +1168,13 @@
X */
X Client* Workspace::nextFocusChainClient( Client* c ) const
X {
X- int desktop = c->isOnAllDesktops() ? currentDesktop() : c->desktop();
X- if ( focus_chain[desktop].isEmpty() )
X+ if ( global_focus_chain.isEmpty() )
X return 0;
X- ClientList::ConstIterator it = focus_chain[desktop].find( c );
X- if ( it == focus_chain[desktop].end() )
X- return focus_chain[desktop].last();
X- if ( it == focus_chain[desktop].begin() )
X- return focus_chain[desktop].last();
X+ ClientList::ConstIterator it = global_focus_chain.find( c );
X+ if ( it == global_focus_chain.end() )
X+ return global_focus_chain.last();
X+ if ( it == global_focus_chain.begin() )
X+ return global_focus_chain.last();
X --it;
X return *it;
X }
X@@ -1170,15 +1185,14 @@
X */
X Client* Workspace::previousFocusChainClient( Client* c ) const
X {
X- int desktop = c->isOnAllDesktops() ? currentDesktop() : c->desktop();
X- if ( focus_chain[desktop].isEmpty() )
X+ if ( global_focus_chain.isEmpty() )
X return 0;
X- ClientList::ConstIterator it = focus_chain[desktop].find( c );
X- if ( it == focus_chain[desktop].end() )
X- return focus_chain[desktop].first();
X+ ClientList::ConstIterator it = global_focus_chain.find( c );
X+ if ( it == global_focus_chain.end() )
X+ return global_focus_chain.first();
X ++it;
X- if ( it == focus_chain[desktop].end() )
X- return focus_chain[desktop].first();
X+ if ( it == global_focus_chain.end() )
X+ return global_focus_chain.first();
X return *it;
X }
X
END-of-patch-kwin-tabbox.cpp
echo x - patch-kwin-workspace.cpp
sed 's/^X//' >patch-kwin-workspace.cpp << 'END-of-patch-kwin-workspace.cpp'
X--- kwin/workspace.cpp 2006/04/04 22:03:51 526556
X+++ kwin/workspace.cpp 2006/04/11 14:10:01 528608
X@@ -564,6 +564,7 @@
X i <= numberOfDesktops();
X ++i )
X focus_chain[ i ].remove( c );
X+ global_focus_chain.remove( c );
X attention_chain.remove( c );
X if( c->isTopMenu())
X removeTopMenu( c );
X@@ -598,6 +599,7 @@
X i<= numberOfDesktops();
X ++i )
X focus_chain[i].remove(c);
X+ global_focus_chain.remove( c );
X return;
X }
X if(c->desktop() == NET::OnAllDesktops)
X@@ -631,6 +633,13 @@
X focus_chain[ i ].remove( c );
X }
X }
X+ if( make_first )
X+ {
X+ global_focus_chain.remove( c );
X+ global_focus_chain.append( c );
X+ }
X+ else if( !global_focus_chain.contains( c ))
X+ global_focus_chain.prepend( c );
X }
X
X void Workspace::updateCurrentTopMenu()
END-of-patch-kwin-workspace.cpp
echo x - patch-kwin-workspace.h
sed 's/^X//' >patch-kwin-workspace.h << 'END-of-patch-kwin-workspace.h'
X--- kwin/workspace.h 2006/02/27 09:54:03 514048
X+++ kwin/workspace.h 2006/04/11 14:10:01 528608
X@@ -510,6 +510,7 @@
X ClientList unconstrained_stacking_order;
X ClientList stacking_order;
X QValueVector< ClientList > focus_chain;
X+ ClientList global_focus_chain; // this one is only for things like
tabbox's MRU
X ClientList should_get_focus; // last is most recent
X ClientList attention_chain;
X
END-of-patch-kwin-workspace.h
exit
_______________________________________________
kde-freebsd mailing list
[email protected]
http://freebsd.kde.org/mailman/listinfo/kde-freebsd