summaryrefslogtreecommitdiffstats
path: root/kdesktop
diff options
context:
space:
mode:
Diffstat (limited to 'kdesktop')
-rw-r--r--kdesktop/lock/autologout.cc136
-rw-r--r--kdesktop/lock/autologout.h48
-rw-r--r--kdesktop/lock/lockprocess.cc190
-rw-r--r--kdesktop/lock/main.cc819
-rw-r--r--kdesktop/lock/main.h27
5 files changed, 612 insertions, 608 deletions
diff --git a/kdesktop/lock/autologout.cc b/kdesktop/lock/autologout.cc
index 7d6bf6ff1..6e05c439d 100644
--- a/kdesktop/lock/autologout.cc
+++ b/kdesktop/lock/autologout.cc
@@ -1,6 +1,6 @@
//===========================================================================
//
-// This file is part of the KDE project
+// This file is part of the TDE project
//
// Copyright (c) 2004 Chris Howells <[email protected]>
@@ -33,88 +33,88 @@ extern bool trinity_desktop_lock_use_system_modal_dialogs;
AutoLogout::AutoLogout(LockProcess *parent) : TQDialog(parent, "password dialog", true, (trinity_desktop_lock_use_system_modal_dialogs?((WFlags)WStyle_StaysOnTop):((WFlags)WX11BypassWM)))
{
- if (trinity_desktop_lock_use_system_modal_dialogs) {
- // Signal that we do not want any window controls to be shown at all
- Atom kde_wm_system_modal_notification;
- kde_wm_system_modal_notification = XInternAtom(tqt_xdisplay(), "_TDE_WM_MODAL_SYS_NOTIFICATION", False);
- XChangeProperty(tqt_xdisplay(), winId(), kde_wm_system_modal_notification, XA_INTEGER, 32, PropModeReplace, (unsigned char *) "TRUE", 1L);
- }
- setCaption(i18n("Automatic Logout Notification"));
-
- frame = new TQFrame(this);
- if (trinity_desktop_lock_use_system_modal_dialogs)
- frame->setFrameStyle( TQFrame::NoFrame );
- else
- frame->setFrameStyle(TQFrame::Panel | TQFrame::Raised);
- frame->setLineWidth(2);
-
- TQLabel *pixLabel = new TQLabel( frame, "pixlabel" );
- pixLabel->setPixmap(DesktopIcon("system-log-out"));
-
- TQLabel *greetLabel = new TQLabel(i18n("<nobr><qt><b>Automatic Log Out</b></qt><nobr>"), frame);
- TQLabel *infoLabel = new TQLabel(i18n("<qt>To prevent being logged out, resume using this session by moving the mouse or pressing a key.</qt>"), frame);
-
- mStatusLabel = new TQLabel("<b> </b>", frame);
- mStatusLabel->setAlignment(TQLabel::AlignCenter);
-
- TQLabel *mProgressLabel = new TQLabel("Time Remaining:", frame);
- mProgressRemaining = new TQProgressBar(frame);
- mProgressRemaining->setPercentageVisible(false);
-
- TQVBoxLayout *unlockDialogLayout = new TQVBoxLayout( this );
- unlockDialogLayout->addWidget( frame );
-
- frameLayout = new TQGridLayout(frame, 1, 1, KDialog::marginHint(), KDialog::spacingHint());
- frameLayout->addMultiCellWidget(pixLabel, 0, 2, 0, 0, Qt::AlignCenter | Qt::AlignTop);
- frameLayout->addWidget(greetLabel, 0, 1);
- frameLayout->addWidget(mStatusLabel, 1, 1);
- frameLayout->addWidget(infoLabel, 2, 1);
- frameLayout->addWidget(mProgressLabel, 3, 1);
- frameLayout->addWidget(mProgressRemaining, 4, 1);
-
- // get the time remaining in seconds for the status label
- mRemaining = COUNTDOWN * 25;
-
- mProgressRemaining->setTotalSteps(COUNTDOWN * 25);
-
- updateInfo(mRemaining);
-
- mCountdownTimerId = startTimer(1000/25);
-
- connect(tqApp, TQT_SIGNAL(activity()), TQT_SLOT(slotActivity()));
-
- setFixedSize( sizeHint() );
+ if (trinity_desktop_lock_use_system_modal_dialogs) {
+ // Signal that we do not want any window controls to be shown at all
+ Atom kde_wm_system_modal_notification;
+ kde_wm_system_modal_notification = XInternAtom(tqt_xdisplay(), "_TDE_WM_MODAL_SYS_NOTIFICATION", False);
+ XChangeProperty(tqt_xdisplay(), winId(), kde_wm_system_modal_notification, XA_INTEGER, 32, PropModeReplace, (unsigned char *) "TRUE", 1L);
+ }
+ setCaption(i18n("Automatic Logout Notification"));
+
+ frame = new TQFrame(this);
+ if (trinity_desktop_lock_use_system_modal_dialogs) {
+ frame->setFrameStyle( TQFrame::NoFrame );
+ }
+ else {
+ frame->setFrameStyle(TQFrame::Panel | TQFrame::Raised);
+ }
+ frame->setLineWidth(2);
+
+ TQLabel *pixLabel = new TQLabel( frame, "pixlabel" );
+ pixLabel->setPixmap(DesktopIcon("system-log-out"));
+
+ TQLabel *greetLabel = new TQLabel(i18n("<nobr><qt><b>Automatic Log Out</b></qt><nobr>"), frame);
+ TQLabel *infoLabel = new TQLabel(i18n("<qt>To prevent being logged out, resume using this session by moving the mouse or pressing a key.</qt>"), frame);
+
+ mStatusLabel = new TQLabel("<b> </b>", frame);
+ mStatusLabel->setAlignment(TQLabel::AlignCenter);
+
+ TQLabel *mProgressLabel = new TQLabel("Time Remaining:", frame);
+ mProgressRemaining = new TQProgressBar(frame);
+ mProgressRemaining->setPercentageVisible(false);
+
+ TQVBoxLayout *unlockDialogLayout = new TQVBoxLayout( this );
+ unlockDialogLayout->addWidget( frame );
+
+ frameLayout = new TQGridLayout(frame, 1, 1, KDialog::marginHint(), KDialog::spacingHint());
+ frameLayout->addMultiCellWidget(pixLabel, 0, 2, 0, 0, Qt::AlignCenter | Qt::AlignTop);
+ frameLayout->addWidget(greetLabel, 0, 1);
+ frameLayout->addWidget(mStatusLabel, 1, 1);
+ frameLayout->addWidget(infoLabel, 2, 1);
+ frameLayout->addWidget(mProgressLabel, 3, 1);
+ frameLayout->addWidget(mProgressRemaining, 4, 1);
+
+ // get the time remaining in seconds for the status label
+ mRemaining = COUNTDOWN * 25;
+
+ mProgressRemaining->setTotalSteps(COUNTDOWN * 25);
+
+ updateInfo(mRemaining);
+
+ mCountdownTimerId = startTimer(1000/25);
+
+ connect(tqApp, TQT_SIGNAL(activity()), TQT_SLOT(slotActivity()));
+
+ setFixedSize( sizeHint() );
}
AutoLogout::~AutoLogout()
{
- hide();
+ hide();
}
void AutoLogout::updateInfo(int timeout)
{
- mStatusLabel->setText(i18n("<nobr><qt>You will be automatically logged out in 1 second</qt></nobr>",
- "<nobr><qt>You will be automatically logged out in %n seconds</qt></nobr>",
- timeout / 25) );
- mProgressRemaining->setProgress(timeout);
+ mStatusLabel->setText(i18n("<nobr><qt>You will be automatically logged out in 1 second</qt></nobr>",
+ "<nobr><qt>You will be automatically logged out in %n seconds</qt></nobr>",
+ timeout / 25) );
+ mProgressRemaining->setProgress(timeout);
}
void AutoLogout::timerEvent(TQTimerEvent *ev)
{
- if (ev->timerId() == mCountdownTimerId)
- {
- updateInfo(mRemaining);
- --mRemaining;
- if (mRemaining < 0)
- {
- logout();
+ if (ev->timerId() == mCountdownTimerId) {
+ updateInfo(mRemaining);
+ --mRemaining;
+ if (mRemaining < 0) {
+ logout();
+ }
}
- }
}
void AutoLogout::slotActivity()
{
- accept();
+ accept();
}
void AutoLogout::logout()
@@ -125,8 +125,8 @@ void AutoLogout::logout()
void AutoLogout::show()
{
- TQDialog::show();
- TQApplication::flushX();
+ TQDialog::show();
+ TQApplication::flushX();
}
#include "autologout.moc"
diff --git a/kdesktop/lock/autologout.h b/kdesktop/lock/autologout.h
index c15a47f07..89cbb880e 100644
--- a/kdesktop/lock/autologout.h
+++ b/kdesktop/lock/autologout.h
@@ -1,6 +1,6 @@
//===========================================================================
//
-// This file is part of the KDE project
+// This file is part of the TDE project
//
// Copyright (c) 1999 Martin R. Jones <[email protected]>
// Copyright (c) 2003 Oswald Buddenhagen <[email protected]>
@@ -22,29 +22,29 @@ class TQProgressBar;
class AutoLogout : public TQDialog
{
- Q_OBJECT
-
-public:
- AutoLogout(LockProcess *parent);
- ~AutoLogout();
- virtual void show();
-
-protected:
- virtual void timerEvent(TQTimerEvent *);
-
-private slots:
- void slotActivity();
-
-private:
- void updateInfo(int);
- TQFrame *frame;
- TQGridLayout *frameLayout;
- TQLabel *mStatusLabel;
- int mCountdownTimerId;
- int mRemaining;
- TQTimer countDownTimer;
- TQProgressBar *mProgressRemaining;
- void logout();
+ Q_OBJECT
+
+ public:
+ AutoLogout(LockProcess *parent);
+ ~AutoLogout();
+ virtual void show();
+
+ protected:
+ virtual void timerEvent(TQTimerEvent *);
+
+ private slots:
+ void slotActivity();
+
+ private:
+ void updateInfo(int);
+ TQFrame *frame;
+ TQGridLayout *frameLayout;
+ TQLabel *mStatusLabel;
+ int mCountdownTimerId;
+ int mRemaining;
+ TQTimer countDownTimer;
+ TQProgressBar *mProgressRemaining;
+ void logout();
};
#endif
diff --git a/kdesktop/lock/lockprocess.cc b/kdesktop/lock/lockprocess.cc
index 1b56495e1..aa9514312 100644
--- a/kdesktop/lock/lockprocess.cc
+++ b/kdesktop/lock/lockprocess.cc
@@ -233,18 +233,18 @@ LockProcess::LockProcess()
#endif
setupSignals();
-
+
// Set up atoms
kde_wm_system_modal_notification = XInternAtom(tqt_xdisplay(), "_TDE_WM_MODAL_SYS_NOTIFICATION", False);
kde_wm_transparent_to_desktop = XInternAtom(tqt_xdisplay(), "_TDE_TRANSPARENT_TO_DESKTOP", False);
kde_wm_transparent_to_black = XInternAtom(tqt_xdisplay(), "_TDE_TRANSPARENT_TO_BLACK", False);
-
+
kapp->installX11EventFilter(this);
-
+
mForceContinualLockDisplayTimer = new TQTimer( this );
mHackDelayStartupTimer = new TQTimer( this );
mEnsureVRootWindowSecurityTimer = new TQTimer( this );
-
+
if (!argb_visual) {
// Try to get the root pixmap
if (!m_rootPixmap) m_rootPixmap = new KRootPixmap(this);
@@ -252,7 +252,7 @@ LockProcess::LockProcess()
m_rootPixmap->setCustomPainting(true);
m_rootPixmap->start();
}
-
+
// Get root window attributes
XWindowAttributes rootAttr;
XGetWindowAttributes(tqt_xdisplay(), RootWindow(tqt_xdisplay(), tqt_xscreen()), &rootAttr);
@@ -261,12 +261,12 @@ LockProcess::LockProcess()
TQToolTip::add( &w, "foo" );
}
XSelectInput( tqt_xdisplay(), tqt_xrootwin(), SubstructureNotifyMask | rootAttr.your_event_mask );
-
+
// Add non-TDE path
TDEGlobal::dirs()->addResourceType("scrsav",
TDEGlobal::dirs()->kde_default("apps") +
"System/ScreenSavers/");
-
+
// Add KDE specific screensaver path
TQString relPath="System/ScreenSavers/";
KServiceGroup::Ptr servGroup = KServiceGroup::baseGroup( "screensavers");
@@ -277,11 +277,11 @@ LockProcess::LockProcess()
TDEGlobal::dirs()->addResourceType("scrsav",
TDEGlobal::dirs()->kde_default("apps") +
relPath);
-
+
// virtual root property
gXA_VROOT = XInternAtom (tqt_xdisplay(), "__SWM_VROOT", False);
gXA_SCREENSAVER_VERSION = XInternAtom (tqt_xdisplay(), "_SCREENSAVER_VERSION", False);
-
+
TQStringList dmopt = TQStringList::split(TQChar(','),
TQString::fromLatin1( ::getenv( "XDM_MANAGED" )));
for (TQStringList::ConstIterator it = dmopt.begin(); it != dmopt.end(); ++it) {
@@ -295,7 +295,7 @@ LockProcess::LockProcess()
#endif
greetPlugin.library = 0;
-
+
TDECrash::setCrashHandler(segv_handler);
}
@@ -334,18 +334,18 @@ LockProcess::~LockProcess()
mEnsureVRootWindowSecurityTimer->stop();
delete mEnsureVRootWindowSecurityTimer;
}
-
+
if (greetPlugin.library) {
if (greetPlugin.info->done)
greetPlugin.info->done();
greetPlugin.library->unload();
}
-
+
if (m_rootPixmap) {
m_rootPixmap->stop();
delete m_rootPixmap;
}
-
+
mPipeOpen = false;
mPipeOpen_out = false;
}
@@ -363,7 +363,7 @@ void LockProcess::init(bool child, bool useBlankOnly)
mRootWidth = rootAttr.width;
mRootHeight = rootAttr.height;
generateBackingImages();
-
+
// Connect all signals
connect( mForceContinualLockDisplayTimer, TQT_SIGNAL(timeout()), this, TQT_SLOT(displayLockDialogIfNeeded()) );
connect( mHackDelayStartupTimer, TQT_SIGNAL(timeout()), this, TQT_SLOT(closeDialogAndStartHack()) );
@@ -399,15 +399,15 @@ void LockProcess::init(bool child, bool useBlankOnly)
child_saver = child;
mUseBlankOnly = useBlankOnly;
-
+
mShowLockDateTime = KDesktopSettings::showLockDateTime();
mlockDateTime = TQDateTime::currentDateTime();
-
+
mHackDelayStartupTimeout = trinity_desktop_lock_delay_screensaver_start?KDesktopSettings::timeout()*1000:10*1000;
mHackStartupEnabled = trinity_desktop_lock_use_system_modal_dialogs?KDesktopSettings::screenSaverEnabled():true;
-
+
configure();
-
+
mControlPipeHandlerThread = new TQEventLoopThread();
mControlPipeHandler = new ControlPipeHandlerObject();
mControlPipeHandler->mParent = this;
@@ -453,7 +453,7 @@ bool LockProcess::closeCurrentWindow()
currentDialog->close();
}
}
-
+
if( mDialogs.isEmpty() ) {
mClosingWindows = FALSE;
mForceReject = false;
@@ -506,7 +506,7 @@ void LockProcess::setupSignals()
sigaddset(&(act.sa_mask), SIGHUP);
act.sa_flags = 0;
sigaction(SIGHUP, &act, 0L);
-
+
if (pipe(signal_pipe) == -1) {
// Error handler to shut up gcc warnings
}
@@ -733,17 +733,17 @@ void LockProcess::configure()
}
else
mLockGrace = -1;
-
+
if ( KDesktopSettings::autoLogout() ) {
mAutoLogout = true;
mAutoLogoutTimeout = KDesktopSettings::autoLogoutTimeout();
mAutoLogoutTimerId = startTimer(mAutoLogoutTimeout * 1000); // in milliseconds
}
-
+
mPriority = KDesktopSettings::priority();
if (mPriority < 0) mPriority = 0;
if (mPriority > 19) mPriority = 19;
-
+
mSaver = KDesktopSettings::saver();
if (mSaver.isEmpty() || mUseBlankOnly) {
mSaver = "KBlankscreen.desktop";
@@ -754,9 +754,9 @@ void LockProcess::configure()
mSaverExec = "";
}
}
-
+
readSaver();
-
+
mPlugins = KDesktopSettings::pluginsUnlock();
if (mPlugins.isEmpty()) {
mPlugins = TQStringList("classic");
@@ -772,7 +772,7 @@ void LockProcess::readSaver()
{
if (!mSaver.isEmpty()) {
TQString file = locate("scrsav", mSaver);
-
+
bool opengl = kapp->authorize("opengl_screensavers");
bool manipulatescreen = kapp->authorize("manipulatescreen_screensavers");
KDesktopFile config(file, true);
@@ -793,9 +793,9 @@ void LockProcess::readSaver()
}
}
}
-
+
kdDebug(1204) << "mForbidden: " << (mForbidden ? "true" : "false") << endl;
-
+
if (trinity_desktop_lock_use_system_modal_dialogs) {
if (config.hasActionGroup("InWindow")) {
config.setActionGroup("InWindow");
@@ -882,7 +882,7 @@ void LockProcess::createSaverWindow()
attrs.override_redirect = 1;
hide();
-
+
if (argb_visual) {
// The GL visual selection can return a visual with invalid depth
// Check for this and use a fallback visual if needed
@@ -892,7 +892,7 @@ void LockProcess::createSaverWindow()
info = NULL;
flags &= ~CWColormap;
}
-
+
attrs.background_pixel = 0;
attrs.border_pixel = 0;
flags |= CWBackPixel;
@@ -916,33 +916,33 @@ void LockProcess::createSaverWindow()
if (info) {
XFree( info );
}
-
+
m_saverRootWindow = XCreateWindow( x11Display(), RootWindow( x11Display(), x11Screen()), x(), y(), width(), height(), 0, x11Depth(), InputOutput, visual, flags, &attrs );
create( m_saverRootWindow );
-
+
// Some xscreensaver hacks check for this property
const char *version = "KDE 2.0";
XChangeProperty (tqt_xdisplay(), winId(),
gXA_SCREENSAVER_VERSION, XA_STRING, 8, PropModeReplace,
(unsigned char *) version, strlen(version));
-
+
XSetWindowAttributes attr;
attr.event_mask = KeyPressMask | ButtonPressMask | PointerMotionMask | VisibilityChangeMask | ExposureMask;
XChangeWindowAttributes(tqt_xdisplay(), winId(), CWEventMask, &attr);
-
+
// Signal that we want to be transparent to the desktop, not to windows behind us...
XChangeProperty(tqt_xdisplay(), m_saverRootWindow, kde_wm_transparent_to_desktop, XA_INTEGER, 32, PropModeReplace, (unsigned char *) "TRUE", 1L);
-
+
// erase();
-
+
// set NoBackground so that the saver can capture the current
// screen state if necessary
// this is a security risk and has been deactivated--welcome to the 21st century folks!
// setBackgroundMode(TQWidget::NoBackground);
-
+
setGeometry(0, 0, mRootWidth, mRootHeight);
saverReadyIfNeeded();
-
+
// HACK
// Hide all tooltips and notification windows
{
@@ -952,7 +952,7 @@ void LockProcess::createSaverWindow()
unsigned int noOfChildren = 0;
XWindowAttributes childAttr;
Window childTransient;
-
+
if (XQueryTree(x11Display(), rootWindow, &rootWindow, &parent, &children, &noOfChildren) && noOfChildren>0 ) {
for (unsigned int i=0; i<noOfChildren; i++) {
if (XGetWindowAttributes(x11Display(), children[i], &childAttr) && XGetTransientForHint(x11Display(), children[i], &childTransient)) {
@@ -967,7 +967,7 @@ void LockProcess::createSaverWindow()
}
}
}
-
+
kdDebug(1204) << "Saver window Id: " << winId() << endl;
}
@@ -982,15 +982,15 @@ void LockProcess::desktopResized()
mRootWidth = rootAttr.width;
mRootHeight = rootAttr.height;
generateBackingImages();
-
+
mBusy = true;
mHackDelayStartupTimer->stop();
stopHack();
DISABLE_CONTINUOUS_LOCKDLG_DISPLAY
mResizingDesktopLock = true;
-
+
backingPixmap = TQPixmap();
-
+
if (trinity_desktop_lock_use_system_modal_dialogs) {
// Temporarily hide the entire screen with a new override redirect window
if (m_maskWidget) {
@@ -1005,7 +1005,7 @@ void LockProcess::desktopResized()
}
XSync(tqt_xdisplay(), False);
saverReadyIfNeeded();
-
+
if (mEnsureScreenHiddenTimer) {
mEnsureScreenHiddenTimer->stop();
}
@@ -1015,12 +1015,12 @@ void LockProcess::desktopResized()
}
mEnsureScreenHiddenTimer->start(DESKTOP_WALLPAPER_OBTAIN_TIMEOUT_MS, true);
}
-
+
// Resize the background widget
setGeometry(0, 0, mRootWidth, mRootHeight);
XSync(tqt_xdisplay(), False);
saverReadyIfNeeded();
-
+
// Black out the background widget to hide ugly resize tiling artifacts
if (argb_visual) {
setTransparentBackgroundARGB();
@@ -1029,7 +1029,7 @@ void LockProcess::desktopResized()
setBackgroundColor(black);
}
erase();
-
+
// This slot needs to be able to execute very rapidly so as to prevent the user's desktop from ever
// being displayed, so we finish the hack restarting/display prettying operations in a separate timed slot
if (resizeTimer == NULL) {
@@ -1110,20 +1110,20 @@ void LockProcess::saveVRoot()
Window rootReturn, parentReturn, *children;
unsigned int numChildren;
Window root = RootWindowOfScreen(ScreenOfDisplay(tqt_xdisplay(), tqt_xscreen()));
-
+
gVRoot = 0;
gVRootData = 0;
-
+
int (*oldHandler)(Display *, XErrorEvent *);
oldHandler = XSetErrorHandler(ignoreXError);
-
+
if (XQueryTree(tqt_xdisplay(), root, &rootReturn, &parentReturn, &children, &numChildren)) {
for (unsigned int i = 0; i < numChildren; i++) {
Atom actual_type;
int actual_format;
unsigned long nitems, bytesafter;
unsigned char *newRoot = 0;
-
+
if ((XGetWindowProperty(tqt_xdisplay(), children[i], gXA_VROOT, 0, 1,
False, XA_WINDOW, &actual_type, &actual_format, &nitems, &bytesafter,
&newRoot) == Success) && newRoot) {
@@ -1138,7 +1138,7 @@ void LockProcess::saveVRoot()
XFree((char *)children);
}
}
-
+
XSetErrorHandler(oldHandler);
}
@@ -1151,10 +1151,10 @@ void LockProcess::setVRoot(Window win, Window vr)
if (gVRoot) {
removeVRoot(gVRoot);
}
-
+
unsigned long rw = RootWindowOfScreen(ScreenOfDisplay(tqt_xdisplay(), tqt_xscreen()));
unsigned long vroot_data[1] = { vr };
-
+
Window rootReturn;
Window parentReturn;
Window *children = NULL;
@@ -1175,7 +1175,7 @@ void LockProcess::setVRoot(Window win, Window vr)
top = parentReturn;
}
}
-
+
XChangeProperty(tqt_xdisplay(), top, gXA_VROOT, XA_WINDOW, 32, PropModeReplace, (unsigned char *)vroot_data, 1);
}
@@ -1196,7 +1196,7 @@ bool LockProcess::grabKeyboard()
{
int rv = XGrabKeyboard( tqt_xdisplay(), TQApplication::desktop()->winId(),
True, GrabModeAsync, GrabModeAsync, CurrentTime );
-
+
return (rv == GrabSuccess);
}
@@ -1219,7 +1219,7 @@ bool LockProcess::grabMouse()
int rv = XGrabPointer( tqt_xdisplay(), TQApplication::desktop()->winId(),
True, GRABEVENTS, GrabModeAsync, GrabModeAsync, None,
cursorHandle, CurrentTime );
-
+
return (rv == GrabSuccess);
}
@@ -1230,14 +1230,14 @@ bool LockProcess::grabMouse()
bool LockProcess::grabInput()
{
XSync(tqt_xdisplay(), False);
-
+
if (!grabKeyboard()) {
usleep(100000);
if (!grabKeyboard()) {
return false;
}
}
-
+
#ifndef KEEP_MOUSE_UNGRABBED
if (!grabMouse()) {
usleep(100000);
@@ -1247,9 +1247,9 @@ bool LockProcess::grabInput()
}
}
#endif
-
+
lockXF86();
-
+
return true;
}
@@ -1543,11 +1543,11 @@ void LockProcess::repaintRootWindowIfNeeded()
bool LockProcess::startHack()
{
mHackActive = TRUE;
-
+
if ((mEnsureVRootWindowSecurityTimer) && (!mEnsureVRootWindowSecurityTimer->isActive())) {
mEnsureVRootWindowSecurityTimer->start(250, FALSE);
}
-
+
if (currentDialog || (!mDialogs.isEmpty())) {
// no resuming with dialog visible or when not visible
if (argb_visual) {
@@ -1566,30 +1566,30 @@ bool LockProcess::startHack()
saverReadyIfNeeded();
return false;
}
-
+
setCursor( tqblankCursor );
XChangeActivePointerGrab( tqt_xdisplay(), GRABEVENTS, TQCursor(tqblankCursor).handle(), CurrentTime);
-
+
if (mSaverExec.isEmpty()) {
return false;
}
-
+
if (mHackProc.isRunning()) {
stopHack();
}
-
+
mHackProc.clearArguments();
-
+
TQTextStream ts(&mSaverExec, IO_ReadOnly);
TQString word;
ts >> word;
TQString path = TDEStandardDirs::findExe(word);
-
+
if (!path.isEmpty()) {
mHackProc << path;
-
+
kdDebug(1204) << "Starting hack: " << path << endl;
-
+
while (!ts.atEnd()) {
ts >> word;
if (word == "%w")
@@ -1623,7 +1623,7 @@ bool LockProcess::startHack()
saverReadyIfNeeded();
mSuspended = false;
}
-
+
XChangeActivePointerGrab( tqt_xdisplay(), GRABEVENTS, TQCursor(tqblankCursor).handle(), CurrentTime);
if (mHackProc.start() == true) {
#ifdef HAVE_SETPRIORITY
@@ -1699,7 +1699,7 @@ void LockProcess::stopHack()
}
}
setCursor( tqarrowCursor );
-
+
mHackActive = FALSE;
}
@@ -1868,13 +1868,13 @@ bool LockProcess::checkPass()
if (mAutoLogout) {
killTimer(mAutoLogoutTimerId);
}
-
+
// Make sure we never launch the SAK or login dialog if windows are being closed down
// Otherwise we can get stuck in an irrecoverable state where any attempt to show the login screen is instantly aborted
if (mClosingWindows) {
return 0;
}
-
+
if (trinity_desktop_lock_use_sak) {
// Verify SAK operational status
TDEProcess* checkSAKProcess = new TDEProcess;
@@ -1886,7 +1886,7 @@ bool LockProcess::checkPass()
trinity_desktop_lock_use_sak = false;
}
}
-
+
if (trinity_desktop_lock_use_sak) {
// Wait for SAK press before continuing...
SAKDlg inDlg( this );
@@ -1895,17 +1895,17 @@ bool LockProcess::checkPass()
return 0;
}
}
-
+
showVkbd();
PasswordDlg passDlg( this, &greetPlugin, (mShowLockDateTime)?mlockDateTime:TQDateTime());
int ret = execDialog( &passDlg );
hideVkbd();
-
+
if (mForceReject == true) {
ret = TQDialog::Rejected;
}
mForceReject = false;
-
+
XWindowAttributes rootAttr;
XGetWindowAttributes(tqt_xdisplay(), RootWindow(tqt_xdisplay(),
tqt_xscreen()), &rootAttr);
@@ -1914,7 +1914,7 @@ bool LockProcess::checkPass()
XSelectInput( tqt_xdisplay(), tqt_xrootwin(),
SubstructureNotifyMask | rootAttr.your_event_mask );
}
-
+
return ret == TQDialog::Accepted;
}
else {
@@ -1947,11 +1947,11 @@ int LockProcess::execDialog( TQDialog *dlg )
{
currentDialog=dlg;
dlg->adjustSize();
-
+
TQRect rect = dlg->geometry();
rect.moveCenter(TDEGlobalSettings::desktopGeometry(TQCursor::pos()).center());
dlg->move( rect.topLeft() );
-
+
if (mDialogs.isEmpty()) {
suspend();
XChangeActivePointerGrab( tqt_xdisplay(), GRABEVENTS, TQCursor(tqarrowCursor).handle(), CurrentTime);
@@ -2102,7 +2102,7 @@ void LockProcess::doFunctionKeyBroadcast() {
mDialogControlLock = false;
}
}
-
+
DCOPRef ref( "*", "MainApplication-Interface");
ref.send("sendFakeKey", DCOPArg(mkeyCode , "unsigned int"));
}
@@ -2123,7 +2123,7 @@ bool LockProcess::x11Event(XEvent *event)
// XF86XK_Sleep Ditto
// XF86XK_Suspend Ditto
// XF86XK_Hibernate Ditto
-
+
//if ((event->type == KeyPress) || (event->type == KeyRelease)) {
if (event->type == KeyPress) {
// Multimedia keys
@@ -2145,7 +2145,7 @@ bool LockProcess::x11Event(XEvent *event)
return true;
}
}
-
+
switch (event->type)
{
case ButtonPress:
@@ -2194,7 +2194,7 @@ bool LockProcess::x11Event(XEvent *event)
}
mBusy = false;
return true;
-
+
case VisibilityNotify:
if( event->xvisibility.window == winId()) {
// mVisibility == false means the screensaver is not visible at all
@@ -2230,7 +2230,7 @@ bool LockProcess::x11Event(XEvent *event)
}
}
break;
-
+
case ConfigureNotify: // from SubstructureNotifyMask on the root window
if(event->xconfigure.event == tqt_xrootwin()) {
stayOnTop();
@@ -2260,7 +2260,7 @@ bool LockProcess::x11Event(XEvent *event)
}
break;
}
-
+
// We have grab with the grab window being the root window.
// This results in key events being sent to the root window,
// but they should be sent to the dialog if it's visible.
@@ -2276,7 +2276,7 @@ bool LockProcess::x11Event(XEvent *event)
tqApp->x11ProcessEvent( &ev2 );
return true;
}
-
+
return false;
}
@@ -2408,14 +2408,14 @@ void LockProcess::msgBox( TQMessageBox::Icon type, const TQString &txt )
button->setDefault( true );
button->setSizePolicy( TQSizePolicy( TQSizePolicy::Preferred, TQSizePolicy::Preferred ) );
connect( button, TQT_SIGNAL( clicked() ), &box, TQT_SLOT( accept() ) );
-
+
TQVBoxLayout *vbox = new TQVBoxLayout( &box );
vbox->addWidget( winFrame );
TQGridLayout *grid = new TQGridLayout( winFrame, 2, 2, 10 );
grid->addWidget( label1, 0, 0, Qt::AlignCenter );
grid->addWidget( label2, 0, 1, Qt::AlignCenter );
grid->addMultiCellWidget( button, 1,1, 0,1, Qt::AlignCenter );
-
+
execDialog( &box );
}
@@ -2466,7 +2466,7 @@ void LockProcess::windowAdded( WId w, bool managed )
oldHandler = XSetErrorHandler(ignoreXError);
KWin::WindowInfo info = KWin::windowInfo( w, 0, NET::WM2WindowClass );
XSetErrorHandler(oldHandler);
-
+
if( info.windowClassClass().lower() != "xvkbd" ) {
return;
}
@@ -2860,15 +2860,15 @@ void ControlPipeHandlerObject::run(void) {
mkdir(FIFO_DIR,0644);
mknod(fifo_file, S_IFIFO|0644, 0);
chmod(fifo_file, 0644);
-
+
mParent->mPipe_fd = open(fifo_file, O_RDONLY | O_NONBLOCK);
if (mParent->mPipe_fd > -1) {
mParent->mPipeOpen = true;
}
-
+
mknod(fifo_file_out, S_IFIFO|0600, 0);
chmod(fifo_file_out, 0600);
-
+
mParent->mPipe_fd_out = open(fifo_file_out, O_RDWR | O_NONBLOCK);
if (mParent->mPipe_fd_out > -1) {
mParent->mPipeOpen_out = true;
diff --git a/kdesktop/lock/main.cc b/kdesktop/lock/main.cc
index c1b1da2f0..e82650928 100644
--- a/kdesktop/lock/main.cc
+++ b/kdesktop/lock/main.cc
@@ -1,7 +1,7 @@
-/* This file is part of the KDE project
+/* This file is part of the TDE project
Copyright (C) 1999 David Faure
Copyright (c) 2003 Oswald Buddenhagen <[email protected]>
- Copyright (c) 2010-2012 Timothy Pearson <[email protected]>
+ Copyright (c) 2010-2015 Timothy Pearson <[email protected]>
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Library General Public
@@ -88,462 +88,463 @@ bool trinity_desktop_lock_settings_initialized = FALSE;
static void sigusr1_handler(int)
{
- signalled_forcelock = TRUE;
+ signalled_forcelock = TRUE;
}
static void sigusr2_handler(int)
{
- signalled_dontlock = TRUE;
+ signalled_dontlock = TRUE;
}
static void sigusr3_handler(int)
{
- signalled_securedialog = TRUE;
+ signalled_securedialog = TRUE;
}
static void sigusr4_handler(int)
{
- signalled_blank = TRUE;
+ signalled_blank = TRUE;
}
static void sigusr5_handler(int)
{
- signalled_run = TRUE;
+ signalled_run = TRUE;
}
static int trapXErrors(Display *, XErrorEvent *)
{
- return 0;
+ return 0;
}
bool MyApp::x11EventFilter( XEvent *ev )
{
- if (ev->type == ButtonPress || ev->type == ButtonRelease || ev->type == MotionNotify) {
- emit mouseInteraction(ev);
- }
- if (ev->type == XKeyPress || ev->type == ButtonPress) {
- emit activity();
- }
- else if (ev->type == MotionNotify) {
- time_t tick = time( 0 );
- if (tick != lastTick) {
- lastTick = tick;
- emit activity();
- }
- }
- else if (ev->type == MapNotify) {
- // HACK
- // Hide all tooltips and notification windows
- XMapEvent map_event = ev->xmap;
- XWindowAttributes childAttr;
- Window childTransient;
- if (XGetWindowAttributes(map_event.display, map_event.window, &childAttr) && XGetTransientForHint(map_event.display, map_event.window, &childTransient)) {
- if((childAttr.map_state == IsViewable) && (childAttr.override_redirect) && (childTransient)) {
- if (!trinity_desktop_lock_hidden_window_list.contains(map_event.window)) {
- trinity_desktop_lock_hidden_window_list.append(map_event.window);
- }
- XLowerWindow(map_event.display, map_event.window);
- XFlush(map_event.display);
- }
- }
- }
- else if (ev->type == VisibilityNotify) {
- // HACK
- // Hide all tooltips and notification windows
- XVisibilityEvent visibility_event = ev->xvisibility;
- XWindowAttributes childAttr;
- Window childTransient;
- if ((visibility_event.state == VisibilityUnobscured) || (visibility_event.state == VisibilityPartiallyObscured)) {
- if (XGetWindowAttributes(visibility_event.display, visibility_event.window, &childAttr) && XGetTransientForHint(visibility_event.display, visibility_event.window, &childTransient)) {
- if((childAttr.map_state == IsViewable) && (childAttr.override_redirect) && (childTransient)) {
- if (!trinity_desktop_lock_hidden_window_list.contains(visibility_event.window)) {
- trinity_desktop_lock_hidden_window_list.append(visibility_event.window);
- }
- XLowerWindow(visibility_event.display, visibility_event.window);
- XFlush(visibility_event.display);
- }
- }
- }
- }
- else if (ev->type == CreateNotify) {
- // HACK
- // Close all tooltips and notification windows
- XCreateWindowEvent create_event = ev->xcreatewindow;
- XWindowAttributes childAttr;
- Window childTransient;
-
- // XGetWindowAttributes may generate BadWindow errors, so make sure they are silently ignored
- int (*oldHandler)(Display *, XErrorEvent *);
- oldHandler = XSetErrorHandler(trapXErrors);
- if (XGetWindowAttributes(create_event.display, create_event.window, &childAttr) && XGetTransientForHint(create_event.display, create_event.window, &childTransient)) {
- if ((childAttr.override_redirect) && (childTransient)) {
- if (!trinity_desktop_lock_hidden_window_list.contains(create_event.window)) {
- trinity_desktop_lock_hidden_window_list.append(create_event.window);
- }
- XLowerWindow(create_event.display, create_event.window);
- XFlush(create_event.display);
- }
- }
- XSetErrorHandler(oldHandler);
- }
- else if (ev->type == DestroyNotify) {
- XDestroyWindowEvent destroy_event = ev->xdestroywindow;
- if (trinity_desktop_lock_hidden_window_list.contains(destroy_event.window)) {
- trinity_desktop_lock_hidden_window_list.remove(destroy_event.window);
- }
- }
+ if (ev->type == ButtonPress || ev->type == ButtonRelease || ev->type == MotionNotify) {
+ emit mouseInteraction(ev);
+ }
+ if (ev->type == XKeyPress || ev->type == ButtonPress) {
+ emit activity();
+ }
+ else if (ev->type == MotionNotify) {
+ time_t tick = time( 0 );
+ if (tick != lastTick) {
+ lastTick = tick;
+ emit activity();
+ }
+ }
+ else if (ev->type == MapNotify) {
+ // HACK
+ // Hide all tooltips and notification windows
+ XMapEvent map_event = ev->xmap;
+ XWindowAttributes childAttr;
+ Window childTransient;
+ if (XGetWindowAttributes(map_event.display, map_event.window, &childAttr) && XGetTransientForHint(map_event.display, map_event.window, &childTransient)) {
+ if((childAttr.map_state == IsViewable) && (childAttr.override_redirect) && (childTransient)) {
+ if (!trinity_desktop_lock_hidden_window_list.contains(map_event.window)) {
+ trinity_desktop_lock_hidden_window_list.append(map_event.window);
+ }
+ XLowerWindow(map_event.display, map_event.window);
+ XFlush(map_event.display);
+ }
+ }
+ }
+ else if (ev->type == VisibilityNotify) {
+ // HACK
+ // Hide all tooltips and notification windows
+ XVisibilityEvent visibility_event = ev->xvisibility;
+ XWindowAttributes childAttr;
+ Window childTransient;
+ if ((visibility_event.state == VisibilityUnobscured) || (visibility_event.state == VisibilityPartiallyObscured)) {
+ if (XGetWindowAttributes(visibility_event.display, visibility_event.window, &childAttr) && XGetTransientForHint(visibility_event.display, visibility_event.window, &childTransient)) {
+ if((childAttr.map_state == IsViewable) && (childAttr.override_redirect) && (childTransient)) {
+ if (!trinity_desktop_lock_hidden_window_list.contains(visibility_event.window)) {
+ trinity_desktop_lock_hidden_window_list.append(visibility_event.window);
+ }
+ XLowerWindow(visibility_event.display, visibility_event.window);
+ XFlush(visibility_event.display);
+ }
+ }
+ }
+ }
+ else if (ev->type == CreateNotify) {
+ // HACK
+ // Close all tooltips and notification windows
+ XCreateWindowEvent create_event = ev->xcreatewindow;
+ XWindowAttributes childAttr;
+ Window childTransient;
+
+ // XGetWindowAttributes may generate BadWindow errors, so make sure they are silently ignored
+ int (*oldHandler)(Display *, XErrorEvent *);
+ oldHandler = XSetErrorHandler(trapXErrors);
+ if (XGetWindowAttributes(create_event.display, create_event.window, &childAttr) && XGetTransientForHint(create_event.display, create_event.window, &childTransient)) {
+ if ((childAttr.override_redirect) && (childTransient)) {
+ if (!trinity_desktop_lock_hidden_window_list.contains(create_event.window)) {
+ trinity_desktop_lock_hidden_window_list.append(create_event.window);
+ }
+ XLowerWindow(create_event.display, create_event.window);
+ XFlush(create_event.display);
+ }
+ }
+ XSetErrorHandler(oldHandler);
+ }
+ else if (ev->type == DestroyNotify) {
+ XDestroyWindowEvent destroy_event = ev->xdestroywindow;
+ if (trinity_desktop_lock_hidden_window_list.contains(destroy_event.window)) {
+ trinity_desktop_lock_hidden_window_list.remove(destroy_event.window);
+ }
+ }
#if 0
- else if (ev->type == CreateNotify) {
- // HACK
- // Close all tooltips and notification windows
- XCreateWindowEvent create_event = ev->xcreatewindow;
- XWindowAttributes childAttr;
- Window childTransient;
- if (XGetWindowAttributes(create_event.display, create_event.window, &childAttr) && XGetTransientForHint(create_event.display, create_event.window, &childTransient)) {
- if ((childAttr.override_redirect) && (childTransient)) {
- XDestroyWindow(create_event.display, create_event.window);
- }
- }
- }
+ else if (ev->type == CreateNotify) {
+ // HACK
+ // Close all tooltips and notification windows
+ XCreateWindowEvent create_event = ev->xcreatewindow;
+ XWindowAttributes childAttr;
+ Window childTransient;
+ if (XGetWindowAttributes(create_event.display, create_event.window, &childAttr) && XGetTransientForHint(create_event.display, create_event.window, &childTransient)) {
+ if ((childAttr.override_redirect) && (childTransient)) {
+ XDestroyWindow(create_event.display, create_event.window);
+ }
+ }
+ }
#endif
- return TDEApplication::x11EventFilter( ev );
+ return TDEApplication::x11EventFilter( ev );
}
static TDECmdLineOptions options[] =
{
- { "forcelock", I18N_NOOP("Force session locking"), 0 },
- { "dontlock", I18N_NOOP("Only start screensaver"), 0 },
- { "securedialog", I18N_NOOP("Launch the secure dialog"), 0 },
- { "blank", I18N_NOOP("Only use the blank screensaver"), 0 },
- { "internal <pid>", I18N_NOOP("TDE internal command for background process loading"), 0 },
- TDECmdLineLastOption
+ { "forcelock", I18N_NOOP("Force session locking"), 0 },
+ { "dontlock", I18N_NOOP("Only start screensaver"), 0 },
+ { "securedialog", I18N_NOOP("Launch the secure dialog"), 0 },
+ { "blank", I18N_NOOP("Only use the blank screensaver"), 0 },
+ { "internal <pid>", I18N_NOOP("TDE internal command for background process loading"), 0 },
+ TDECmdLineLastOption
};
void restore_hidden_override_redirect_windows() {
- TQXLibWindowList::iterator it;
- for (it = trinity_desktop_lock_hidden_window_list.begin(); it != trinity_desktop_lock_hidden_window_list.end(); ++it) {
- Window win = *it;
- XRaiseWindow(tqt_xdisplay(), win);
- }
+ TQXLibWindowList::iterator it;
+ for (it = trinity_desktop_lock_hidden_window_list.begin(); it != trinity_desktop_lock_hidden_window_list.end(); ++it) {
+ Window win = *it;
+ XRaiseWindow(tqt_xdisplay(), win);
+ }
}
// -----------------------------------------------------------------------------
int main( int argc, char **argv )
{
- TDELocale::setMainCatalogue("kdesktop");
-
- TDECmdLineArgs::init( argc, argv, "kdesktop_lock", I18N_NOOP("KDesktop Locker"), I18N_NOOP("Session Locker for KDesktop"), "2.1" );
- TDECmdLineArgs::addCmdLineOptions( options );
- TDECmdLineArgs *args = TDECmdLineArgs::parsedArgs();
-
- putenv(strdup("SESSION_MANAGER="));
-
- TDEApplication::disableAutoDcopRegistration(); // not needed
-
- XSetErrorHandler(trapXErrors);
-
- MyApp* app = NULL;
-
- while (1 == 1) {
- signalled_forcelock = FALSE;
- signalled_dontlock = FALSE;
- signalled_securedialog = FALSE;
- signalled_blank = FALSE;
- signalled_run = FALSE;
-
- int kdesktop_screen_number = 0;
- int starting_screen = 0;
-
- bool child = false;
- int parent_connection = 0; // socket to the parent saver
- TQValueList<int> child_sockets;
-
- if (TDEGlobalSettings::isMultiHead())
- {
- Display *dpy = XOpenDisplay(NULL);
- if (! dpy) {
- fprintf(stderr,
- "%s: FATAL ERROR: couldn't open display '%s'\n",
- argv[0], XDisplayName(NULL));
- exit(1);
- }
-
- int number_of_screens = ScreenCount(dpy);
- starting_screen = kdesktop_screen_number = DefaultScreen(dpy);
- int pos;
- TQCString display_name = XDisplayString(dpy);
- XCloseDisplay(dpy);
- kdDebug() << "screen " << number_of_screens << " " << kdesktop_screen_number << " " << display_name << " " << starting_screen << endl;
- dpy = 0;
-
- if ((pos = display_name.findRev('.')) != -1)
- display_name.remove(pos, 10);
-
- TQCString env;
- if (number_of_screens != 1) {
- for (int i = 0; i < number_of_screens; i++) {
- if (i != starting_screen) {
- int fd[2];
- if (pipe(fd)) {
- perror("pipe");
- break;
- }
- if (fork() == 0) {
- child = true;
- kdesktop_screen_number = i;
- parent_connection = fd[0];
- // break here because we are the child process, we don't
- // want to fork() anymore
- break;
- } else {
- child_sockets.append(fd[1]);
- }
- }
- }
-
- env.sprintf("DISPLAY=%s.%d", display_name.data(),
- kdesktop_screen_number);
- kdDebug() << "env " << env << endl;
-
- if (putenv(strdup(env.data()))) {
- fprintf(stderr,
- "%s: WARNING: unable to set DISPLAY environment variable\n",
- argv[0]);
- perror("putenv()");
- }
- }
- }
-
- if (!app) {
+ TDELocale::setMainCatalogue("kdesktop");
+
+ TDECmdLineArgs::init( argc, argv, "kdesktop_lock", I18N_NOOP("KDesktop Locker"), I18N_NOOP("Session Locker for KDesktop"), "2.1" );
+ TDECmdLineArgs::addCmdLineOptions( options );
+ TDECmdLineArgs *args = TDECmdLineArgs::parsedArgs();
+
+ putenv(strdup("SESSION_MANAGER="));
+
+ TDEApplication::disableAutoDcopRegistration(); // not needed
+
+ XSetErrorHandler(trapXErrors);
+
+ MyApp* app = NULL;
+
+ while (1 == 1) {
+ signalled_forcelock = FALSE;
+ signalled_dontlock = FALSE;
+ signalled_securedialog = FALSE;
+ signalled_blank = FALSE;
+ signalled_run = FALSE;
+
+ int kdesktop_screen_number = 0;
+ int starting_screen = 0;
+
+ bool child = false;
+ int parent_connection = 0; // socket to the parent saver
+ TQValueList<int> child_sockets;
+
+ if (TDEGlobalSettings::isMultiHead()) {
+ Display *dpy = XOpenDisplay(NULL);
+ if (! dpy) {
+ fprintf(stderr,
+ "%s: FATAL ERROR: couldn't open display '%s'\n",
+ argv[0], XDisplayName(NULL));
+ exit(1);
+ }
+
+ int number_of_screens = ScreenCount(dpy);
+ starting_screen = kdesktop_screen_number = DefaultScreen(dpy);
+ int pos;
+ TQCString display_name = XDisplayString(dpy);
+ XCloseDisplay(dpy);
+ kdDebug() << "screen " << number_of_screens << " " << kdesktop_screen_number << " " << display_name << " " << starting_screen << endl;
+ dpy = 0;
+
+ if ((pos = display_name.findRev('.')) != -1) {
+ display_name.remove(pos, 10);
+ }
+
+ TQCString env;
+ if (number_of_screens != 1) {
+ for (int i = 0; i < number_of_screens; i++) {
+ if (i != starting_screen) {
+ int fd[2];
+ if (pipe(fd)) {
+ perror("pipe");
+ break;
+ }
+ if (fork() == 0) {
+ child = true;
+ kdesktop_screen_number = i;
+ parent_connection = fd[0];
+ // break here because we are the child process, we don't
+ // want to fork() anymore
+ break;
+ }
+ else {
+ child_sockets.append(fd[1]);
+ }
+ }
+ }
+
+ env.sprintf("DISPLAY=%s.%d", display_name.data(),
+ kdesktop_screen_number);
+ kdDebug() << "env " << env << endl;
+
+ if (putenv(strdup(env.data()))) {
+ fprintf(stderr,
+ "%s: WARNING: unable to set DISPLAY environment variable\n",
+ argv[0]);
+ perror("putenv()");
+ }
+ }
+ }
+
+ if (!app) {
#ifdef COMPOSITE
- app = new MyApp(TDEApplication::openX11RGBADisplay());
- argb_visual = app->isX11CompositionAvailable();
+ app = new MyApp(TDEApplication::openX11RGBADisplay());
+ argb_visual = app->isX11CompositionAvailable();
#else
- app = new MyApp;
+ app = new MyApp;
#endif
- }
-
- TDELockFile lock(locateLocal("tmp", "kdesktop_lock_lockfile"));
- lock.setStaleTime(0);
- TDELockFile::LockResult lockRet = lock.lock();
- if (lockRet != TDELockFile::LockOK) {
- // Terminate existing (stale) process if needed
- int pid;
- TQString hostName;
- TQString appName;
- if (lock.getLockInfo(pid, hostName, appName)) {
- // Verify that the pid in question is an instance of kdesktop_lock
- int len;
- char procpath[PATH_MAX];
- char fullpath[PATH_MAX];
- snprintf(procpath, sizeof(procpath), "/proc/%d/exe", pid);
- len = readlink( procpath, fullpath, sizeof(fullpath) );
- if (len >= 0) {
- fullpath[len] = 0;
- TQFileInfo fileInfo(fullpath);
- if (fileInfo.baseName() == "kdesktop_lock") {
- // Verify that pid in question is owned by current user before killing it
- uid_t current_uid = geteuid();
-
- struct stat info;
- if (lstat(procpath, &info) == 0) {
- if (info.st_uid == current_uid) {
- kill(pid, SIGKILL);
- }
- }
- }
- }
- }
- }
-
- // Force a relock as a stale lockfile or process may have been dealt with above
- if (!lock.isLocked()) {
- lockRet = lock.lock(TDELockFile::LockNoBlock | TDELockFile::LockForce);
- }
-
- kdDebug() << "app " << kdesktop_screen_number << " " << starting_screen << " " << child << " " << child_sockets.count() << " " << parent_connection << endl;
- app->disableSessionManagement();
- TDEGlobal::locale()->insertCatalogue("libdmctl");
-
- struct stat st;
- KSimpleConfig* tdmconfig;
- OPEN_TDMCONFIG_AND_SET_GROUP
-
- trinity_desktop_lock_process = new LockProcess;
-
- // Start loading core functions, such as the desktop wallpaper interface
- app->processEvents();
-
- if (args->isSet( "internal" )) {
- kdesktop_pid = atoi(args->getOption( "internal" ));
- sigset_t new_mask;
- sigset_t orig_mask;
- struct sigaction act;
-
- in_internal_mode = TRUE;
-
- // handle SIGUSR1
- act.sa_handler= sigusr1_handler;
- sigemptyset(&(act.sa_mask));
- sigaddset(&(act.sa_mask), SIGUSR1);
- act.sa_flags = 0;
- sigaction(SIGUSR1, &act, 0L);
- // handle SIGUSR2
- act.sa_handler= sigusr2_handler;
- sigemptyset(&(act.sa_mask));
- sigaddset(&(act.sa_mask), SIGUSR2);
- act.sa_flags = 0;
- sigaction(SIGUSR2, &act, 0L);
- // handle SIGWINCH (an ersatz SIGUSR3)
- act.sa_handler= sigusr3_handler;
- sigemptyset(&(act.sa_mask));
- sigaddset(&(act.sa_mask), SIGWINCH);
- act.sa_flags = 0;
- sigaction(SIGWINCH, &act, 0L);
- // handle SIGTTIN (an ersatz SIGUSR4)
- act.sa_handler= sigusr4_handler;
- sigemptyset(&(act.sa_mask));
- sigaddset(&(act.sa_mask), SIGTTIN);
- act.sa_flags = 0;
- sigaction(SIGTTIN, &act, 0L);
- // handle SIGTTOU (an ersatz SIGUSR5)
- act.sa_handler= sigusr5_handler;
- sigemptyset(&(act.sa_mask));
- sigaddset(&(act.sa_mask), SIGTTOU);
- act.sa_flags = 0;
- sigaction(SIGTTOU, &act, 0L);
-
- // initialize the signal masks
- sigemptyset(&new_mask);
- sigaddset(&new_mask,SIGUSR1);
- sigaddset(&new_mask,SIGUSR2);
- sigaddset(&new_mask,SIGWINCH);
- sigaddset(&new_mask,SIGTTIN);
- sigaddset(&new_mask,SIGTTOU);
-
- while (signalled_run == FALSE) {
- // let kdesktop know the saver process is ready
- if (kill(kdesktop_pid, SIGTTIN) < 0) {
- // The controlling kdesktop process probably died. Commit suicide...
- return 12;
- }
-
- // Get root window attributes
- XWindowAttributes rootAttr;
- XGetWindowAttributes(tqt_xdisplay(), RootWindow(tqt_xdisplay(), tqt_xscreen()), &rootAttr);
-
- // Disable reception of all X11 events on the root window
- XSelectInput( tqt_xdisplay(), tqt_xrootwin(), 0 );
+ }
+
+ TDELockFile lock(locateLocal("tmp", "kdesktop_lock_lockfile"));
+ lock.setStaleTime(0);
+ TDELockFile::LockResult lockRet = lock.lock();
+ if (lockRet != TDELockFile::LockOK) {
+ // Terminate existing (stale) process if needed
+ int pid;
+ TQString hostName;
+ TQString appName;
+ if (lock.getLockInfo(pid, hostName, appName)) {
+ // Verify that the pid in question is an instance of kdesktop_lock
+ int len;
+ char procpath[PATH_MAX];
+ char fullpath[PATH_MAX];
+ snprintf(procpath, sizeof(procpath), "/proc/%d/exe", pid);
+ len = readlink( procpath, fullpath, sizeof(fullpath) );
+ if (len >= 0) {
+ fullpath[len] = 0;
+ TQFileInfo fileInfo(fullpath);
+ if (fileInfo.baseName() == "kdesktop_lock") {
+ // Verify that pid in question is owned by current user before killing it
+ uid_t current_uid = geteuid();
+
+ struct stat info;
+ if (lstat(procpath, &info) == 0) {
+ if (info.st_uid == current_uid) {
+ kill(pid, SIGKILL);
+ }
+ }
+ }
+ }
+ }
+ }
+
+ // Force a relock as a stale lockfile or process may have been dealt with above
+ if (!lock.isLocked()) {
+ lockRet = lock.lock(TDELockFile::LockNoBlock | TDELockFile::LockForce);
+ }
+
+ kdDebug() << "app " << kdesktop_screen_number << " " << starting_screen << " " << child << " " << child_sockets.count() << " " << parent_connection << endl;
+ app->disableSessionManagement();
+ TDEGlobal::locale()->insertCatalogue("libdmctl");
+
+ struct stat st;
+ KSimpleConfig* tdmconfig;
+ OPEN_TDMCONFIG_AND_SET_GROUP
+
+ trinity_desktop_lock_process = new LockProcess;
+
+ // Start loading core functions, such as the desktop wallpaper interface
app->processEvents();
- // wait for SIGUSR1, SIGUSR2, SIGWINCH, SIGTTIN, or SIGTTOU
- sigprocmask(SIG_BLOCK, &new_mask, &orig_mask);
- if (signalled_run != TRUE) {
- sigsuspend(&orig_mask);
+ if (args->isSet( "internal" )) {
+ kdesktop_pid = atoi(args->getOption( "internal" ));
+ sigset_t new_mask;
+ sigset_t orig_mask;
+ struct sigaction act;
+
+ in_internal_mode = TRUE;
+
+ // handle SIGUSR1
+ act.sa_handler= sigusr1_handler;
+ sigemptyset(&(act.sa_mask));
+ sigaddset(&(act.sa_mask), SIGUSR1);
+ act.sa_flags = 0;
+ sigaction(SIGUSR1, &act, 0L);
+ // handle SIGUSR2
+ act.sa_handler= sigusr2_handler;
+ sigemptyset(&(act.sa_mask));
+ sigaddset(&(act.sa_mask), SIGUSR2);
+ act.sa_flags = 0;
+ sigaction(SIGUSR2, &act, 0L);
+ // handle SIGWINCH (an ersatz SIGUSR3)
+ act.sa_handler= sigusr3_handler;
+ sigemptyset(&(act.sa_mask));
+ sigaddset(&(act.sa_mask), SIGWINCH);
+ act.sa_flags = 0;
+ sigaction(SIGWINCH, &act, 0L);
+ // handle SIGTTIN (an ersatz SIGUSR4)
+ act.sa_handler= sigusr4_handler;
+ sigemptyset(&(act.sa_mask));
+ sigaddset(&(act.sa_mask), SIGTTIN);
+ act.sa_flags = 0;
+ sigaction(SIGTTIN, &act, 0L);
+ // handle SIGTTOU (an ersatz SIGUSR5)
+ act.sa_handler= sigusr5_handler;
+ sigemptyset(&(act.sa_mask));
+ sigaddset(&(act.sa_mask), SIGTTOU);
+ act.sa_flags = 0;
+ sigaction(SIGTTOU, &act, 0L);
+
+ // initialize the signal masks
+ sigemptyset(&new_mask);
+ sigaddset(&new_mask,SIGUSR1);
+ sigaddset(&new_mask,SIGUSR2);
+ sigaddset(&new_mask,SIGWINCH);
+ sigaddset(&new_mask,SIGTTIN);
+ sigaddset(&new_mask,SIGTTOU);
+
+ while (signalled_run == FALSE) {
+ // let kdesktop know the saver process is ready
+ if (kill(kdesktop_pid, SIGTTIN) < 0) {
+ // The controlling kdesktop process probably died. Commit suicide...
+ return 12;
+ }
+
+ // Get root window attributes
+ XWindowAttributes rootAttr;
+ XGetWindowAttributes(tqt_xdisplay(), RootWindow(tqt_xdisplay(), tqt_xscreen()), &rootAttr);
+
+ // Disable reception of all X11 events on the root window
+ XSelectInput( tqt_xdisplay(), tqt_xrootwin(), 0 );
+ app->processEvents();
+
+ // wait for SIGUSR1, SIGUSR2, SIGWINCH, SIGTTIN, or SIGTTOU
+ sigprocmask(SIG_BLOCK, &new_mask, &orig_mask);
+ if (signalled_run != TRUE) {
+ sigsuspend(&orig_mask);
+ }
+ sigprocmask(SIG_UNBLOCK, &new_mask, NULL);
+
+ // Reenable reception of X11 events on the root window
+ XSelectInput( tqt_xdisplay(), tqt_xrootwin(), rootAttr.your_event_mask );
+ }
+
+ // Block reception of all signals in this thread
+ sigprocmask(SIG_BLOCK, &new_mask, NULL);
+ }
+
+ // (re)load settings here so that they actually reflect reality
+ // we need to read from the right rc file - possibly taking screen number in account
+ if (!trinity_desktop_lock_settings_initialized) {
+ KDesktopSettings::instance("kdesktoprc");
+ trinity_desktop_lock_settings_initialized = true;
}
- sigprocmask(SIG_UNBLOCK, &new_mask, NULL);
-
- // Reenable reception of X11 events on the root window
- XSelectInput( tqt_xdisplay(), tqt_xrootwin(), rootAttr.your_event_mask );
- }
-
- // Block reception of all signals in this thread
- sigprocmask(SIG_BLOCK, &new_mask, NULL);
- }
-
- // (re)load settings here so that they actually reflect reality
- // we need to read from the right rc file - possibly taking screen number in account
- if (!trinity_desktop_lock_settings_initialized) {
- KDesktopSettings::instance("kdesktoprc");
- trinity_desktop_lock_settings_initialized = true;
- }
- else {
- KDesktopSettings::self()->readConfig();
- }
- trinity_desktop_lock_use_system_modal_dialogs = !KDesktopSettings::useUnmanagedLockWindows();
- trinity_desktop_lock_delay_screensaver_start = KDesktopSettings::delaySaverStart();
- if (trinity_desktop_lock_use_system_modal_dialogs) {
+ else {
+ KDesktopSettings::self()->readConfig();
+ }
+ trinity_desktop_lock_use_system_modal_dialogs = !KDesktopSettings::useUnmanagedLockWindows();
+ trinity_desktop_lock_delay_screensaver_start = KDesktopSettings::delaySaverStart();
+ if (trinity_desktop_lock_use_system_modal_dialogs) {
#ifdef BUILD_TSAK
- trinity_desktop_lock_use_sak = tdmconfig->readBoolEntry("UseSAK", false) && KDesktopSettings::useTDESAK();
+ trinity_desktop_lock_use_sak = tdmconfig->readBoolEntry("UseSAK", false) && KDesktopSettings::useTDESAK();
#else
- trinity_desktop_lock_use_sak = false;
+ trinity_desktop_lock_use_sak = false;
#endif
- }
- else {
- trinity_desktop_lock_use_sak = false; // If SAK is enabled with unmanaged windows, the SAK dialog will never close and will "burn in" the screen
- trinity_desktop_lock_delay_screensaver_start = false; // If trinity_desktop_lock_delay_screensaver_start is true with unmanaged windows, the lock dialog may never appear
- }
- trinity_desktop_lock_hide_active_windows = KDesktopSettings::hideActiveWindowsFromSaver();
- trinity_desktop_lock_hide_cancel_button = KDesktopSettings::hideCancelButton();
-
- delete tdmconfig;
-
- if (args->isSet( "forcelock" ) || (signalled_forcelock == TRUE)) {
- trinity_desktop_lock_forced = TRUE;
- }
-
- trinity_desktop_lock_process->init(child, (args->isSet( "blank" ) || (signalled_blank == TRUE)));
- if (!child) {
- trinity_desktop_lock_process->setChildren(child_sockets);
- }
- else {
- trinity_desktop_lock_process->setParent(parent_connection);
- }
-
- bool rt;
- if( (((!child) && (args->isSet( "forcelock" ))) || (signalled_forcelock == TRUE))) {
- rt = trinity_desktop_lock_process->lock();
- }
- else if( child || (args->isSet( "dontlock" ) || (signalled_dontlock == TRUE))) {
- rt = trinity_desktop_lock_process->dontLock();
- }
- else if( child || (args->isSet( "securedialog" ) || (signalled_securedialog == TRUE))) {
- int retcode = tde_sak_verify_calling_process();
- if (retcode == 0) {
- rt = trinity_desktop_lock_process->runSecureDialog();
- }
- else {
- return 1;
- }
- }
- else {
- rt = trinity_desktop_lock_process->defaultSave();
- }
- if (!rt) {
- return 0;
- }
-
- if (in_internal_mode == FALSE) {
- trinity_desktop_lock_hidden_window_list.clear();
- int ret = app->exec();
- restore_hidden_override_redirect_windows();
- return ret;
- }
- else {
- if (kill(kdesktop_pid, 0) < 0) {
- // The controlling kdesktop process probably died. Commit suicide...
- return 12;
- }
- trinity_desktop_lock_hidden_window_list.clear();
- app->exec();
- restore_hidden_override_redirect_windows();
- if (kill(kdesktop_pid, SIGUSR1) < 0) {
- // The controlling kdesktop process probably died. Commit suicide...
- return 12;
- }
-
- delete trinity_desktop_lock_process;
- trinity_desktop_lock_process = NULL;
-
- // FIXME
- // We should not have to return (restart) at all,
- // but it seems that some X11 connections are left active,
- // preventing the lock process from restarting properly in the while() loop above.
- return 0;
- }
- }
+ }
+ else {
+ trinity_desktop_lock_use_sak = false; // If SAK is enabled with unmanaged windows, the SAK dialog will never close and will "burn in" the screen
+ trinity_desktop_lock_delay_screensaver_start = false; // If trinity_desktop_lock_delay_screensaver_start is true with unmanaged windows, the lock dialog may never appear
+ }
+ trinity_desktop_lock_hide_active_windows = KDesktopSettings::hideActiveWindowsFromSaver();
+ trinity_desktop_lock_hide_cancel_button = KDesktopSettings::hideCancelButton();
+
+ delete tdmconfig;
+
+ if (args->isSet( "forcelock" ) || (signalled_forcelock == TRUE)) {
+ trinity_desktop_lock_forced = TRUE;
+ }
+
+ trinity_desktop_lock_process->init(child, (args->isSet( "blank" ) || (signalled_blank == TRUE)));
+ if (!child) {
+ trinity_desktop_lock_process->setChildren(child_sockets);
+ }
+ else {
+ trinity_desktop_lock_process->setParent(parent_connection);
+ }
+
+ bool rt;
+ if( (((!child) && (args->isSet( "forcelock" ))) || (signalled_forcelock == TRUE))) {
+ rt = trinity_desktop_lock_process->lock();
+ }
+ else if( child || (args->isSet( "dontlock" ) || (signalled_dontlock == TRUE))) {
+ rt = trinity_desktop_lock_process->dontLock();
+ }
+ else if( child || (args->isSet( "securedialog" ) || (signalled_securedialog == TRUE))) {
+ int retcode = tde_sak_verify_calling_process();
+ if (retcode == 0) {
+ rt = trinity_desktop_lock_process->runSecureDialog();
+ }
+ else {
+ return 1;
+ }
+ }
+ else {
+ rt = trinity_desktop_lock_process->defaultSave();
+ }
+ if (!rt) {
+ return 0;
+ }
+
+ if (in_internal_mode == FALSE) {
+ trinity_desktop_lock_hidden_window_list.clear();
+ int ret = app->exec();
+ restore_hidden_override_redirect_windows();
+ return ret;
+ }
+ else {
+ if (kill(kdesktop_pid, 0) < 0) {
+ // The controlling kdesktop process probably died. Commit suicide...
+ return 12;
+ }
+ trinity_desktop_lock_hidden_window_list.clear();
+ app->exec();
+ restore_hidden_override_redirect_windows();
+ if (kill(kdesktop_pid, SIGUSR1) < 0) {
+ // The controlling kdesktop process probably died. Commit suicide...
+ return 12;
+ }
+
+ delete trinity_desktop_lock_process;
+ trinity_desktop_lock_process = NULL;
+
+ // FIXME
+ // We should not have to return (restart) at all,
+ // but it seems that some X11 connections are left active,
+ // preventing the lock process from restarting properly in the while() loop above.
+ return 0;
+ }
+ }
}
#include "main.moc"
diff --git a/kdesktop/lock/main.h b/kdesktop/lock/main.h
index da3accda2..fd19c6183 100644
--- a/kdesktop/lock/main.h
+++ b/kdesktop/lock/main.h
@@ -1,4 +1,4 @@
-/* This file is part of the KDE project
+/* This file is part of the TDE project
Copyright (c) 2003 Oswald Buddenhagen <[email protected]>
This library is free software; you can redistribute it and/or
@@ -25,17 +25,20 @@
#include <time.h>
class MyApp : public TDEApplication {
- Q_OBJECT
-public:
- MyApp() : TDEApplication(), lastTick( 0 ) {}
- MyApp(Display *display, Qt::HANDLE visual = 0, Qt::HANDLE colormap = 0, bool allowStyles=true) : TDEApplication(display, visual, colormap, allowStyles), lastTick( 0 ) {}
-protected:
- bool x11EventFilter( XEvent * );
-signals:
- void activity();
- void mouseInteraction(XEvent *event);
-private:
- time_t lastTick;
+ Q_OBJECT
+ public:
+ MyApp() : TDEApplication(), lastTick( 0 ) {}
+ MyApp(Display *display, Qt::HANDLE visual = 0, Qt::HANDLE colormap = 0, bool allowStyles=true) : TDEApplication(display, visual, colormap, allowStyles), lastTick( 0 ) {}
+
+ protected:
+ bool x11EventFilter( XEvent * );
+
+ signals:
+ void activity();
+ void mouseInteraction(XEvent *event);
+
+ private:
+ time_t lastTick;
};
#endif