sid の kwin (というか kdebase 4:2.2.2-14) はこれで直るみたい。
--- kdebase-2.2.2/kwin/workspace.cpp 2001-11-07 15:50:31.000000000 +0900
+++ /home/morimoto/workspace.cpp 2002-07-27 16:59:06.000000000 +0900
@@ -966,6 +966,11 @@
{
Client* c = topClientOnDesktop();
Client* nc = c;
+
+ if ( !c ) {
+ return;
+ }
+
if ( !forward ){
do {
nc = previousStaticClient(nc);
ただ Alt+Tab を処理するコードはウインドウ巡回モードが KDE 準拠か CDE 準拠かによって分かれており、上のやつは CDE 準拠な場合のやつなのであれ。
それまではこんなのを cron で定期起動して怪しかったら kwin を再起動していた。
#!/usr/bin/perl
open(PS, 'ps ax|') || die;
while(<PS>){
if(/(kdeinit:)* kwin/){
($kwin_pid) = /^\s*(\d+)\s/;
warn "kwin pid: $kwin_pid\n";
last;
}
}
close(PS);
exit 0 unless $kwin_pid;
open(TOP, 'top n 1 b|') || die;
while(<TOP>){
if(/^\s*$kwin_pid\s/){
$kwin_load = scalar(substr($_, 45, 2));
warn "kwin load: $kwin_load\n";
last;
}
}
close(TOP);
exit 0 unless $kwin_load;
if($kwin_load > 95){
kill 9, $kwin_pid;
sleep 3;
system('/usr/bin/kwin -display :0 &');
}
kdebase 一式、Pentium III 600MHz で debuild に 3 時間かかる。たいへんだ。