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

Reply via email to