summaryrefslogtreecommitdiffstats
path: root/kdesktop/lockeng.h
blob: d1133aae62ce44e5eb7b18cd7111667df3a87059 (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
//===========================================================================
//
// 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"

class DCOPClientTransaction;

//===========================================================================
/**
 * 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();

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

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

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

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;
    KProcess    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:
    KProcess*   mSAKProcess;
    bool        mTerminationRequested;
};

#endif