From e89d9e5e16bf98525b26104218448bcd8e91bdc2 Mon Sep 17 00:00:00 2001 From: Timothy Pearson Date: Fri, 4 Sep 2015 03:08:22 -0500 Subject: Fix the most egregious style guide violations in the remaining kdesktop_lock source files No functional changes were made to the source --- kdesktop/lock/autologout.cc | 136 +++---- kdesktop/lock/autologout.h | 48 +-- kdesktop/lock/lockprocess.cc | 190 +++++----- kdesktop/lock/main.cc | 819 ++++++++++++++++++++++--------------------- kdesktop/lock/main.h | 27 +- 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 @@ -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("Automatic Log Out"), frame); - TQLabel *infoLabel = new TQLabel(i18n("To prevent being logged out, resume using this session by moving the mouse or pressing a key."), frame); - - mStatusLabel = new TQLabel(" ", 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("Automatic Log Out"), frame); + TQLabel *infoLabel = new TQLabel(i18n("To prevent being logged out, resume using this session by moving the mouse or pressing a key."), frame); + + mStatusLabel = new TQLabel(" ", 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("You will be automatically logged out in 1 second", - "You will be automatically logged out in %n seconds", - timeout / 25) ); - mProgressRemaining->setProgress(timeout); + mStatusLabel->setText(i18n("You will be automatically logged out in 1 second", + "You will be automatically logged out in %n seconds", + 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 // Copyright (c) 2003 Oswald Buddenhagen @@ -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; istop(); 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 - Copyright (c) 2010-2012 Timothy Pearson + Copyright (c) 2010-2015 Timothy Pearson 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 ", 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 ", 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 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 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 This library is free software; you can redistribute it and/or @@ -25,17 +25,20 @@ #include 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 -- cgit v1.2.3