Use krootpixmap instead of the external krootbacking executable in kdesktop_lock

git-svn-id: svn://anonsvn.kde.org/home/kde/branches/trinity/kdebase@1254228 283d02a7-25f6-0310-bc7c-ecb5cbfe19da
v3.5.13-sru
tpearson 14 years ago
parent 2372baf4c6
commit 3df918cc40

@ -162,21 +162,23 @@ LockProcess::LockProcess(bool child, bool useBlankOnly)
mRestoreXF86Lock(false), mRestoreXF86Lock(false),
mForbidden(false), mForbidden(false),
mAutoLogout(false), mAutoLogout(false),
resizeTimer(NULL),
hackResumeTimer(NULL),
mVkbdProcess(NULL), mVkbdProcess(NULL),
mKWinModule(NULL), mKWinModule(NULL),
mPipeOpen(false), mPipeOpen(false),
mPipeOpen_out(false), mPipeOpen_out(false),
mInfoMessageDisplayed(false), mInfoMessageDisplayed(false),
mForceReject(false),
mDialogControlLock(false), mDialogControlLock(false),
mForceReject(false),
currentDialog(NULL), currentDialog(NULL),
resizeTimer(NULL),
hackResumeTimer(NULL),
mForceContinualLockDisplayTimer(NULL), mForceContinualLockDisplayTimer(NULL),
mEnsureVRootWindowSecurityTimer(NULL), mEnsureVRootWindowSecurityTimer(NULL),
mHackDelayStartupTimer(NULL), mHackDelayStartupTimer(NULL),
mHackDelayStartupTimeout(0), mHackDelayStartupTimeout(0),
mHackStartupEnabled(true), mHackStartupEnabled(true),
m_rootPixmap(NULL),
mBackingStartupDelayTimer(0),
m_startupStatusDialog(NULL) m_startupStatusDialog(NULL)
{ {
setupSignals(); setupSignals();
@ -301,6 +303,11 @@ LockProcess::~LockProcess()
greetPlugin.library->unload(); greetPlugin.library->unload();
} }
if (m_rootPixmap) {
m_rootPixmap->stop();
delete m_rootPixmap;
}
mPipeOpen = false; mPipeOpen = false;
mPipeOpen_out = false; mPipeOpen_out = false;
} }
@ -310,13 +317,17 @@ static int signal_pipe[2];
static void sigterm_handler(int) static void sigterm_handler(int)
{ {
char tmp = 'T'; char tmp = 'T';
::write( signal_pipe[1], &tmp, 1); if (::write( signal_pipe[1], &tmp, 1) == -1) {
// Error handler to shut up gcc warnings
}
} }
static void sighup_handler(int) static void sighup_handler(int)
{ {
char tmp = 'H'; char tmp = 'H';
::write( signal_pipe[1], &tmp, 1); if (::write( signal_pipe[1], &tmp, 1) == -1) {
// Error handler to shut up gcc warnings
}
} }
bool LockProcess::closeCurrentWindow() bool LockProcess::closeCurrentWindow()
@ -418,7 +429,7 @@ void LockProcess::checkPipe()
InfoDlg inDlg( this ); InfoDlg inDlg( this );
inDlg.updateLabel(to_display); inDlg.updateLabel(to_display);
inDlg.setUnlockIcon(); inDlg.setUnlockIcon();
int ret = execDialog( &inDlg ); execDialog( &inDlg );
mForceReject = false; mForceReject = false;
return; return;
} }
@ -442,7 +453,7 @@ void LockProcess::checkPipe()
if (readbuf[0] == 'I') inDlg.setInfoIcon(); if (readbuf[0] == 'I') inDlg.setInfoIcon();
if (readbuf[0] == 'W') inDlg.setWarningIcon(); if (readbuf[0] == 'W') inDlg.setWarningIcon();
if (readbuf[0] == 'E') inDlg.setErrorIcon(); if (readbuf[0] == 'E') inDlg.setErrorIcon();
int ret = execDialog( &inDlg ); execDialog( &inDlg );
mForceReject = false; mForceReject = false;
return; return;
} }
@ -464,13 +475,17 @@ void LockProcess::checkPipe()
qryDlg.updateLabel(to_display); qryDlg.updateLabel(to_display);
qryDlg.setUnlockIcon(); qryDlg.setUnlockIcon();
mForceReject = false; mForceReject = false;
int ret = execDialog( &qryDlg ); execDialog( &qryDlg );
if (mForceReject == false) { if (mForceReject == false) {
pin_entry = qryDlg.getEntry(); pin_entry = qryDlg.getEntry();
mInfoMessageDisplayed=false; mInfoMessageDisplayed=false;
if (mPipeOpen_out == true) { if (mPipeOpen_out == true) {
write(mPipe_fd_out, pin_entry, strlen(pin_entry)+1); if (write(mPipe_fd_out, pin_entry, strlen(pin_entry)+1) == -1) {
write(mPipe_fd_out, "\n\r", 3); // Error handler to shut up gcc warnings
}
if (write(mPipe_fd_out, "\n\r", 3) == -1) {
// Error handler to shut up gcc warnings
}
} }
} }
mForceReject = false; mForceReject = false;
@ -509,7 +524,9 @@ void LockProcess::setupSignals()
act.sa_flags = 0; act.sa_flags = 0;
sigaction(SIGHUP, &act, 0L); sigaction(SIGHUP, &act, 0L);
pipe(signal_pipe); if (pipe(signal_pipe) == -1) {
// Error handler to shut up gcc warnings
}
TQSocketNotifier* notif = new TQSocketNotifier(signal_pipe[0], TQSocketNotifier* notif = new TQSocketNotifier(signal_pipe[0],
TQSocketNotifier::Read, TQT_TQOBJECT(this) ); TQSocketNotifier::Read, TQT_TQOBJECT(this) );
connect( notif, TQT_SIGNAL(activated(int)), TQT_SLOT(signalPipeSignal())); connect( notif, TQT_SIGNAL(activated(int)), TQT_SLOT(signalPipeSignal()));
@ -519,7 +536,9 @@ void LockProcess::setupSignals()
void LockProcess::signalPipeSignal() void LockProcess::signalPipeSignal()
{ {
char tmp; char tmp;
::read( signal_pipe[0], &tmp, 1); if (::read( signal_pipe[0], &tmp, 1) == -1) {
// Error handler to shut up gcc warnings
}
if( tmp == 'T' ) if( tmp == 'T' )
quitSaver(); quitSaver();
else if( tmp == 'H' ) { else if( tmp == 'H' ) {
@ -531,11 +550,13 @@ void LockProcess::signalPipeSignal()
//--------------------------------------------------------------------------- //---------------------------------------------------------------------------
bool LockProcess::lock() bool LockProcess::lock()
{ {
#ifdef USE_SECURING_DESKTOP_NOTIFICATION
m_startupStatusDialog = new KSMModalDialog(this); m_startupStatusDialog = new KSMModalDialog(this);
m_startupStatusDialog->setStatusMessage(i18n("Securing desktop session").append("...")); m_startupStatusDialog->setStatusMessage(i18n("Securing desktop session").append("..."));
m_startupStatusDialog->show(); m_startupStatusDialog->show();
m_startupStatusDialog->setActiveWindow(); m_startupStatusDialog->setActiveWindow();
tqApp->processEvents(); tqApp->processEvents();
#endif
if (startSaver()) { if (startSaver()) {
// In case of a forced lock we don't react to events during // In case of a forced lock we don't react to events during
@ -589,6 +610,12 @@ void LockProcess::quitSaver()
//--------------------------------------------------------------------------- //---------------------------------------------------------------------------
void LockProcess::startSecureDialog() void LockProcess::startSecureDialog()
{ {
if ((backingPixmap.isNull()) && (mBackingStartupDelayTimer < 100)) {
TQTimer::singleShot(10, this, TQT_SLOT(startSecureDialog()));
mBackingStartupDelayTimer++;
return;
}
int ret; int ret;
SecureDlg inDlg( this ); SecureDlg inDlg( this );
inDlg.setRetInt(&ret); inDlg.setRetInt(&ret);
@ -620,7 +647,9 @@ void LockProcess::startSecureDialog()
mBusy = false; mBusy = false;
} }
if (ret == 2) { if (ret == 2) {
system("ksysguard &"); if (system("ksysguard &") == -1) {
// Error handler to shut up gcc warnings
}
kapp->quit(); kapp->quit();
} }
// FIXME // FIXME
@ -630,14 +659,17 @@ void LockProcess::startSecureDialog()
bool LockProcess::runSecureDialog() bool LockProcess::runSecureDialog()
{ {
#ifdef USE_SECURING_DESKTOP_NOTIFICATION
m_startupStatusDialog = new KSMModalDialog(this); m_startupStatusDialog = new KSMModalDialog(this);
m_startupStatusDialog->setStatusMessage(i18n("Securing desktop session").append("...")); m_startupStatusDialog->setStatusMessage(i18n("Securing desktop session").append("..."));
m_startupStatusDialog->show(); m_startupStatusDialog->show();
m_startupStatusDialog->setActiveWindow(); m_startupStatusDialog->setActiveWindow();
tqApp->processEvents(); tqApp->processEvents();
#endif
trinity_desktop_lock_in_sec_dlg = true; trinity_desktop_lock_in_sec_dlg = true;
if (startSaver()) { if (startSaver()) {
mBackingStartupDelayTimer = 0;
TQTimer::singleShot(0, this, TQT_SLOT(startSecureDialog())); TQTimer::singleShot(0, this, TQT_SLOT(startSecureDialog()));
return true; return true;
} }
@ -1105,12 +1137,10 @@ bool LockProcess::startSaver()
} }
if (trinity_desktop_lock_use_system_modal_dialogs) { if (trinity_desktop_lock_use_system_modal_dialogs) {
// Try to get the root pixmap // Try to get the root pixmap
TQString filename = getenv("USER"); m_rootPixmap = new KRootPixmap(this);
filename.prepend("/tmp/kde-"); m_rootPixmap->setCustomPainting(true);
filename.append("/krootbacking.png"); connect(m_rootPixmap, TQT_SIGNAL(backgroundUpdated(const TQPixmap &)), this, TQT_SLOT(slotPaintBackground(const TQPixmap &)));
remove(filename.ascii()); m_rootPixmap->start();
system("krootbacking &");
TQTimer::singleShot( 0, this, SLOT(slotPaintBackground()) );
} }
if (trinity_desktop_lock_in_sec_dlg == FALSE) { if (trinity_desktop_lock_in_sec_dlg == FALSE) {
@ -1143,7 +1173,9 @@ void LockProcess::stopSaver()
ungrabInput(); ungrabInput();
const char *out = "GOAWAY!"; const char *out = "GOAWAY!";
for (TQValueList<int>::ConstIterator it = child_sockets.begin(); it != child_sockets.end(); ++it) for (TQValueList<int>::ConstIterator it = child_sockets.begin(); it != child_sockets.end(); ++it)
write(*it, out, sizeof(out)); if (write(*it, out, sizeof(out)) == -1) {
// Error handler to shut up gcc warnings
}
} }
} }
@ -1479,7 +1511,7 @@ bool LockProcess::checkPass()
if (trinity_desktop_lock_use_sak) { if (trinity_desktop_lock_use_sak) {
// Wait for SAK press before continuing... // Wait for SAK press before continuing...
SAKDlg inDlg( this ); SAKDlg inDlg( this );
int ret = execDialog( &inDlg ); execDialog( &inDlg );
if (trinity_desktop_lock_closing_windows) if (trinity_desktop_lock_closing_windows)
return 0; return 0;
} }
@ -1576,21 +1608,9 @@ int LockProcess::execDialog( TQDialog *dlg )
return rt; return rt;
} }
void LockProcess::slotPaintBackground() void LockProcess::slotPaintBackground(const TQPixmap &rpm)
{ {
TQPixmap pm; TQPixmap pm = rpm;
TQString filename = getenv("USER");
filename.prepend("/tmp/kde-");
filename.append("/krootbacking.png");
bool success = pm.load(filename, "PNG");
if (!success) {
sleep(1);
success = pm.load(filename, "PNG");
if (!success) {
pm = TQPixmap(kapp->desktop()->width(), kapp->desktop()->height());
pm.fill(Qt::black);
}
}
if (TQPaintDevice::x11AppDepth() == 32) { if (TQPaintDevice::x11AppDepth() == 32) {
// Remove the alpha components from the image // Remove the alpha components from the image
@ -1695,7 +1715,7 @@ bool LockProcess::x11Event(XEvent *event)
ENABLE_CONTINUOUS_LOCKDLG_DISPLAY ENABLE_CONTINUOUS_LOCKDLG_DISPLAY
if (mHackStartupEnabled) mHackDelayStartupTimer->start(mHackDelayStartupTimeout, TRUE); if (mHackStartupEnabled) mHackDelayStartupTimer->start(mHackDelayStartupTimeout, TRUE);
} }
if (!mLocked) if ((!mLocked) && (!trinity_desktop_lock_in_sec_dlg))
{ {
stopSaver(); stopSaver();
kapp->quit(); kapp->quit();

@ -13,6 +13,7 @@
#include <kprocess.h> #include <kprocess.h>
#include <kpixmap.h> #include <kpixmap.h>
#include <krootpixmap.h>
#include <tqwidget.h> #include <tqwidget.h>
#include <tqtimer.h> #include <tqtimer.h>
@ -71,7 +72,7 @@ public slots:
void desktopResized(); void desktopResized();
void doDesktopResizeFinish(); void doDesktopResizeFinish();
void doFunctionKeyBroadcast(); void doFunctionKeyBroadcast();
void slotPaintBackground(); void slotPaintBackground(const TQPixmap &pm);
protected: protected:
virtual bool x11Event(XEvent *); virtual bool x11Event(XEvent *);
@ -186,6 +187,8 @@ private:
bool mHackStartupEnabled; bool mHackStartupEnabled;
TQPixmap backingPixmap; TQPixmap backingPixmap;
KRootPixmap *m_rootPixmap;
int mBackingStartupDelayTimer;
KSMModalDialog* m_startupStatusDialog; KSMModalDialog* m_startupStatusDialog;
}; };

@ -104,28 +104,34 @@ SecureDlg::SecureDlg(LockProcess *parent)
mShutdownButton->setText(i18n("Logoff Menu")); mShutdownButton->setText(i18n("Logoff Menu"));
mShutdownButton->setEnabled(false); // FIXME mShutdownButton->setEnabled(false); // FIXME
mSwitchButton = new TQPushButton( frame );
mSwitchButton->setText(i18n("Switch User"));
mSwitchButton->setEnabled(false); // FIXME
TQVBoxLayout *unlockDialogLayout = new TQVBoxLayout( this ); TQVBoxLayout *unlockDialogLayout = new TQVBoxLayout( this );
unlockDialogLayout->addWidget( frame ); unlockDialogLayout->addWidget( frame );
TQHBoxLayout *layStatus = new TQHBoxLayout( 0, 0, KDialog::spacingHint()); TQHBoxLayout *layStatus = new TQHBoxLayout( 0, 0, KDialog::spacingHint());
layStatus->addWidget( mLogonStatus ); layStatus->addWidget( mLogonStatus );
TQHBoxLayout *layPBRow1 = new TQHBoxLayout( 0, 0, KDialog::spacingHint()); TQGridLayout *layPBGrid = new TQGridLayout( 0, 0, KDialog::spacingHint());
layPBRow1->addWidget( mLockButton ); layPBGrid->addWidget( mLockButton, 0, 0 );
layPBRow1->addWidget( mTaskButton ); layPBGrid->addWidget( mTaskButton, 0, 1 );
layPBRow1->addWidget( mShutdownButton ); layPBGrid->addWidget( mShutdownButton, 0, 2 );
layPBRow1->addWidget( mCancelButton ); layPBGrid->addWidget( mCancelButton, 0, 3 );
layPBGrid->addWidget( mSwitchButton, 1, 0 );
frameLayout = new TQGridLayout( frame, 1, 1, KDialog::marginHint(), KDialog::spacingHint() ); frameLayout = new TQGridLayout( frame, 1, 1, KDialog::marginHint(), KDialog::spacingHint() );
frameLayout->addMultiCellWidget( theader, 0, 0, 0, 1, AlignTop | AlignLeft ); frameLayout->addMultiCellWidget( theader, 0, 0, 0, 1, AlignTop | AlignLeft );
frameLayout->addMultiCellLayout( layStatus, 1, 1, 0, 1, AlignLeft | AlignVCenter); frameLayout->addMultiCellLayout( layStatus, 1, 1, 0, 1, AlignLeft | AlignVCenter);
frameLayout->addMultiCellWidget( sep, 2, 2, 0, 1 ); frameLayout->addMultiCellWidget( sep, 2, 2, 0, 1 );
frameLayout->addMultiCellLayout( layPBRow1, 3, 3, 0, 1, AlignLeft | AlignVCenter); frameLayout->addMultiCellLayout( layPBGrid, 3, 3, 0, 1, AlignLeft | AlignVCenter);
connect(mCancelButton, TQT_SIGNAL(clicked()), this, TQT_SLOT(slotBtnCancel())); connect(mCancelButton, TQT_SIGNAL(clicked()), this, TQT_SLOT(slotBtnCancel()));
connect(mLockButton, TQT_SIGNAL(clicked()), this, TQT_SLOT(slotBtnLock())); connect(mLockButton, TQT_SIGNAL(clicked()), this, TQT_SLOT(slotBtnLock()));
connect(mTaskButton, TQT_SIGNAL(clicked()), this, TQT_SLOT(slotBtnTask())); connect(mTaskButton, TQT_SIGNAL(clicked()), this, TQT_SLOT(slotBtnTask()));
connect(mShutdownButton, TQT_SIGNAL(clicked()), this, TQT_SLOT(slotBtnShutdown())); connect(mShutdownButton, TQT_SIGNAL(clicked()), this, TQT_SLOT(slotBtnShutdown()));
connect(mSwitchButton, TQT_SIGNAL(clicked()), this, TQT_SLOT(slotBtnSwitchUser()));
TQSize dlgSz = sizeHint(); TQSize dlgSz = sizeHint();
int btnSize = dlgSz.width(); int btnSize = dlgSz.width();
@ -135,6 +141,7 @@ SecureDlg::SecureDlg(LockProcess *parent)
mTaskButton->setFixedWidth(btnSize); mTaskButton->setFixedWidth(btnSize);
mCancelButton->setFixedWidth(btnSize); mCancelButton->setFixedWidth(btnSize);
mShutdownButton->setFixedWidth(btnSize); mShutdownButton->setFixedWidth(btnSize);
mSwitchButton->setFixedWidth(btnSize);
installEventFilter(this); installEventFilter(this);
} }
@ -168,6 +175,12 @@ void SecureDlg::slotBtnShutdown()
hide(); hide();
} }
void SecureDlg::slotBtnSwitchUser()
{
if (retInt) *retInt = 4;
hide();
}
void SecureDlg::setRetInt(int *i) void SecureDlg::setRetInt(int *i)
{ {
retInt = i; retInt = i;

@ -42,6 +42,7 @@ private slots:
void slotBtnLock(); void slotBtnLock();
void slotBtnTask(); void slotBtnTask();
void slotBtnShutdown(); void slotBtnShutdown();
void slotBtnSwitchUser();
protected slots: protected slots:
virtual void reject(); virtual void reject();
@ -54,6 +55,7 @@ private:
TQButton *mLockButton; TQButton *mLockButton;
TQButton *mTaskButton; TQButton *mTaskButton;
TQButton *mShutdownButton; TQButton *mShutdownButton;
TQButton *mSwitchButton;
int mCapsLocked; int mCapsLocked;
bool mUnlockingFailed; bool mUnlockingFailed;
TQStringList layoutsList; TQStringList layoutsList;

Loading…
Cancel
Save