--- kdebase-3.5.10/kdesktop/lock/lockdlg.cc~ 2008-08-25 11:40:20 +0000 +++ kdebase-3.5.10/kdesktop/lock/lockdlg.cc 2008-09-17 16:07:00 +0000 @@ -731,4 +731,20 @@ void PasswordDlg::capsLocked() updateLabel(); } +void PasswordDlg::updateLayout() +{ + DCOPRef kxkb("kxkb", "kxkb"); + if( !kxkb.isNull() ) { + kxkb.setRef("kkbswitch", "KBSwitchIntf"); + QString currentLayout = kxkb.call("getCurrentLayout"); + if( !currentLayout.isEmpty() && layoutsList.count() > 1 ) { + currLayout = layoutsList.find(currentLayout); + if (currLayout == layoutsList.end()) + setLayoutText("err"); + else + setLayoutText(*currLayout); + } + } +} + #include "lockdlg.moc" --- kdebase-3.5.10/kdesktop/lock/lockdlg.h~ 2005-07-17 20:47:07 +0000 +++ kdebase-3.5.10/kdesktop/lock/lockdlg.h 2008-09-17 16:11:24 +0000 @@ -55,6 +55,7 @@ private slots: void slotOK(); void layoutClicked(); void slotActivity(); + void updateLayout(); private: void setLayoutText( const QString &txt ); --- kdebase-3.5.10/kdesktop/lock/lockprocess.cc~ 2008-09-17 15:33:10 +0000 +++ kdebase-3.5.10/kdesktop/lock/lockprocess.cc 2008-09-17 15:38:26 +0000 @@ -910,6 +910,7 @@ bool LockProcess::checkPass() killTimer(mAutoLogoutTimerId); PasswordDlg passDlg( this, &greetPlugin); + connect(qApp, SIGNAL(xkbStateChanged()), &passDlg, SLOT(updateLayout())); int ret = execDialog( &passDlg ); --- kdebase-3.5.10/kdesktop/lock/main.cc~ 2008-09-17 15:21:55 +0000 +++ kdebase-3.5.10/kdesktop/lock/main.cc 2008-09-17 16:00:05 +0000 @@ -32,10 +32,15 @@ #include #include +#include #include bool MyApp::x11EventFilter( XEvent *ev ) { + if( ev->type == XkbStateNotify ) + { + emit xkbStateChanged(); + } else if (ev->type == XKeyPress || ev->type == ButtonPress) emit activity(); else if (ev->type == MotionNotify) { --- kdebase-3.5.10/kdesktop/lock/main.h~ 2005-10-10 15:04:07 +0000 +++ kdebase-3.5.10/kdesktop/lock/main.h 2008-09-17 15:32:56 +0000 @@ -32,6 +32,7 @@ protected: bool x11EventFilter( XEvent * ); signals: void activity(); + void xkbStateChanged(); private: time_t lastTick; };