summaryrefslogtreecommitdiffstats
path: root/kdesktop/lockeng.h
blob: 70bde328180ad0b52fddf97a6fcd60a0faa7522e (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
//===========================================================================
//
// This file is part of the KDE project
//
// Copyright (c) 1999 Martin R. Jones <mjones@kde.org>
//

#ifndef __LOCKENG_H__
#define __LOCKENG_H__

#include <tqwidget.h>
#include <kprocess.h>
#include <tqvaluevector.h>
#include "KScreensaverIface.h"
#include "xautolock.h"
#include "xautolock_c.h"

#include <tqdbusconnection.h>

class DCOPClientTransaction;
class TQT_DBusMessage;
class TQT_DBusProxy;

//===========================================================================
/**
 * Screen saver engine.  Handles screensaver window, starting screensaver
 * hacks, and password entry.
 */
class SaverEngine
    : public TQWidget,
      public KScreensaverIface
{
    Q_OBJECT
public:
    SaverEngine();
    ~SaverEngine();

    /**
     * Lock the screen
     */
    virtual void lock();

    /**
     * Save the screen
     */
    virtual void save();

    /**
     * Quit the screensaver if running
     */
    virtual void quit();

    /**
     * return true if the screensaver is enabled
     */
    virtual bool isEnabled();

    /**
     * enable/disable the screensaver
     */
    virtual bool enable( bool e );

    /**
     * return true if the screen is currently blanked
     */
    virtual bool isBlanked();

    /**
     * Read and apply configuration.
     */
    virtual void configure();

    /**
     * Enable or disable "blank only" mode.  This is useful for
     * laptops where one might not want a cpu thirsty screensaver
     * draining the battery.
     */
    virtual void setBlankOnly( bool blankOnly );

    /**
     * Called by kdesktop_lock when locking is in effect.
     */
    virtual void saverLockReady();

public slots:
    void slotLockProcessWaiting();
    void slotLockProcessFullyActivated();
    void slotLockProcessReady();
    void handleDBusSignal(const TQT_DBusMessage&);

protected slots:
    void idleTimeout();
    void lockProcessExited();
    void lockProcessWaiting();

private slots:
    void handleSecureDialog();
    void slotSAKProcessExited();

    /**
     * Enable wallpaper exports
     */
    void enableExports();
    void recoverFromHackingAttempt();

    bool dBusReconnect();

private:
    bool restartDesktopLockProcess();
    void dBusClose();
    bool dBusConnect();
    void onDBusServiceRegistered(const TQString&);
    void onDBusServiceUnregistered(const TQString&);

protected:
    enum LockType { DontLock, DefaultLock, ForceLock, SecureDialog };
    bool startLockProcess( LockType lock_type );
    void stopLockProcess();
    bool handleKeyPress(XKeyEvent *xke);
    void processLockTransactions();
    xautolock_corner_t applyManualSettings(int);

protected:
    enum State { Waiting, Preparing, Saving };
    bool        mEnabled;

    State       mState;
    XAutoLock   *mXAutoLock;
    TDEProcess    mLockProcess;
    int		mTimeout;

    // the original X screensaver parameters
    int         mXTimeout;
    int         mXInterval;
    int         mXBlanking;
    int         mXExposures;

    bool	mBlankOnly;  // only use the blanker, not the defined saver
    TQValueVector< DCOPClientTransaction* > mLockTransactions;

private:
    TDEProcess*   mSAKProcess;
    bool        mTerminationRequested;
    bool        mSaverProcessReady;
    TQT_DBusConnection	dBusConn;
    TQT_DBusProxy*	dBusLocal;
    TQT_DBusProxy*	dBusWatch;
    TQT_DBusProxy*	systemdSession;
};

#endif