diff options
Diffstat (limited to 'kdesktop/lock/lockprocess.h')
-rw-r--r-- | kdesktop/lock/lockprocess.h | 256 |
1 files changed, 256 insertions, 0 deletions
diff --git a/kdesktop/lock/lockprocess.h b/kdesktop/lock/lockprocess.h new file mode 100644 index 000000000..85e9cdd31 --- /dev/null +++ b/kdesktop/lock/lockprocess.h @@ -0,0 +1,256 @@ +//=========================================================================== +// +// This file is part of the KDE project +// +// Copyright (c) 1999 Martin R. Jones <mjones@kde.org> +// Copyright (c) 2003 Oswald Buddenhagen <ossi@kde.org> +// Copyright (c) 2010-2013 Timothy Pearson <kb9vqf@pearsoncomputing.net> +// + +#ifndef __LOCKENG_H__ +#define __LOCKENG_H__ + +#include <kgreeterplugin.h> + +#include <kprocess.h> +#include <kpixmap.h> +#include <krootpixmap.h> + +#include <tqwidget.h> +#include <tqtimer.h> +#include <tqvaluestack.h> +#include <tqmessagebox.h> +#include <tqpixmap.h> +#include <tqdatetime.h> +#include <tqthread.h> + +#include <X11/Xlib.h> + +class KLibrary; +class KWinModule; +class KSMModalDialog; +class LockProcess; + +struct GreeterPluginHandle { + KLibrary *library; + kgreeterplugin_info *info; +}; + +#define FIFO_DIR "/tmp/tdesocket-global" +#define FIFO_FILE "/tmp/tdesocket-global/kdesktoplockcontrol-%d" +#define FIFO_FILE_OUT "/tmp/tdesocket-global/kdesktoplockcontrol_out-%d" + +typedef TQValueList<Window> TQXLibWindowList; + +//=========================================================================== +// +// Control pipe handler +// +class ControlPipeHandlerObject : public TQObject +{ + Q_OBJECT + + public: + ControlPipeHandlerObject(); + ~ControlPipeHandlerObject(); + + public slots: + void run(); + + signals: + void processCommand(TQString); + + public: + LockProcess* mParent; +}; + +//=========================================================================== +// +// Screen saver handling process. Handles screensaver window, +// starting screensaver hacks, and password entry. +// +class LockProcess + : public TQWidget +{ + Q_OBJECT +public: + LockProcess(); + ~LockProcess(); + + void init(bool child_saver = false, bool useBlankOnly = false); + + bool lock(); + + bool defaultSave(); + + bool dontLock(); + + bool runSecureDialog(); + + void setChildren(TQValueList<int> children) { child_sockets = children; } + void setParent(int fd) { mParent = fd; } + + void msgBox( TQMessageBox::Icon type, const TQString &txt ); + int execDialog( TQDialog* dlg ); + +public slots: + void quitSaver(); + void preparePopup(); + void cleanupPopup(); + void desktopResized(); + void doDesktopResizeFinish(); + void doFunctionKeyBroadcast(); + void slotPaintBackground(const TQPixmap &pm); + void slotForcePaintBackground(); + +protected: + virtual bool x11Event(XEvent *); + virtual void timerEvent(TQTimerEvent *); + virtual void resizeEvent(TQResizeEvent *); + +private slots: + void hackExited(TDEProcess *); + void signalPipeSignal(); + bool startLock(); + void suspend(); + void checkDPMSActive(); + void slotDeadTimePassed(); + void windowAdded( WId ); + void resumeUnforced(); + void displayLockDialogIfNeeded(); + void closeDialogAndStartHack(); + bool closeCurrentWindow(); + void repaintRootWindowIfNeeded(); + void startSecureDialog(); + void slotMouseActivity(XEvent *event); + void processInputPipeCommand(TQString command); + +private: + void configure(); + void readSaver(); + void createSaverWindow(); + void hideSaverWindow(); + void saveVRoot(); + void setVRoot(Window win, Window rw); + void removeVRoot(Window win); + void setTransparentBackgroundARGB(); + bool grabKeyboard(); + bool grabMouse(); + bool grabInput(); + void ungrabInput(); + void cantLock(const TQString &reason); + bool startSaver(bool notify_ready = false); + void stopSaver(); + bool startHack(); + void stopHack(); + void setupSignals(); + bool checkPass(); + void stayOnTop(); + void lockXF86(); + void unlockXF86(); + void showVkbd(); + void hideVkbd(); + void saverReady(); + void saverReadyIfNeeded(); + bool forwardVkbdEvent( XEvent* event ); + void sendVkbdFocusInOut( WId window, Time t ); + void windowAdded( WId window, bool managed ); + void resume( bool force ); + static TQVariant getConf(void *ctx, const char *key, const TQVariant &dflt); + void generateBackingImages(); + void fullyOnline(); + + bool mLocked; + int mLockGrace; + int mPriority; + bool mBusy; + TDEProcess mHackProc; + int mRootWidth; + int mRootHeight; + TQString mSaverExec; + TQString mSaver; + bool mOpenGLVisual; + bool child_saver; + TQValueList<int> child_sockets; + int mParent; + bool mUseBlankOnly; + bool mShowLockDateTime; + bool mSuspended; + TQTimer mSuspendTimer; + bool mVisibility; + TQTimer mCheckDPMS; + TQValueStack< TQWidget* > mDialogs; + bool mRestoreXF86Lock; + bool mForbidden; + TQStringList mPlugins, mPluginOptions; + TQString mMethod; + GreeterPluginHandle greetPlugin; + TQPixmap mSavedScreen; + int mAutoLogoutTimerId; + int mAutoLogoutTimeout; + bool mAutoLogout; + + TQTimer *resizeTimer; + unsigned int mkeyCode; + + TQTimer *hackResumeTimer; + + TDEProcess* mVkbdProcess; + KWinModule* mKWinModule; + struct VkbdWindow + { + WId id; + TQRect rect; + }; + TQValueList< VkbdWindow > mVkbdWindows; + WId mVkbdLastEventWindow; + + bool mPipeOpen; + int mPipe_fd; + bool mPipeOpen_out; + int mPipe_fd_out; + + bool mInfoMessageDisplayed; + bool mDialogControlLock; + bool mForceReject; + TQDialog *currentDialog; + + TQTimer* mEnsureScreenHiddenTimer; + TQTimer* mForceContinualLockDisplayTimer; + TQTimer* mEnsureVRootWindowSecurityTimer; + TQTimer* mHackDelayStartupTimer; + + int mHackDelayStartupTimeout; + bool mHackStartupEnabled; + bool mOverrideHackStartupEnabled; + bool mResizingDesktopLock; + bool mFullyOnlineSent; + + TQPixmap backingPixmap; + KRootPixmap *m_rootPixmap; + int mBackingStartupDelayTimer; + TQPixmap mArgbTransparentBackgroundPixmap; + + KSMModalDialog* m_startupStatusDialog; + + TQDateTime mlockDateTime; + + bool m_mouseDown; + int m_mousePrevX; + int m_mousePrevY; + int m_dialogPrevX; + int m_dialogPrevY; + + bool m_notifyReadyRequested; + + TQWidget* m_maskWidget; + Window m_saverRootWindow; + + ControlPipeHandlerObject* mControlPipeHandler; + TQEventLoopThread* mControlPipeHandlerThread; + + friend class ControlPipeHandlerObject; +}; + +#endif + |