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 時間かかる。たいへんだ。