~ubuntu-branches/ubuntu/jaunty/psi/jaunty

« back to all changes in this revision

Viewing changes to cutestuff/util/safedelete.cpp

  • Committer: Bazaar Package Importer
  • Author(s): Jan Niehusmann
  • Date: 2005-01-10 17:41:43 UTC
  • mfrom: (1.2.1 upstream) (2.1.2 hoary)
  • Revision ID: james.westby@ubuntu.com-20050110174143-ltocv5zapl6blf5d
Tags: 0.9.3-1
* New upstream release
* Cleaned up debian/rules (some things are done by upstream Makefiles now)
* Fixed some lintian warnings:
  - removed executable bit from some .png files
  - moved psi.desktop to /usr/share/applications
* Updated menu files

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
#include"safedelete.h"
 
2
 
 
3
#include<qtimer.h>
 
4
 
 
5
//----------------------------------------------------------------------------
 
6
// SafeDelete
 
7
//----------------------------------------------------------------------------
 
8
SafeDelete::SafeDelete()
 
9
{
 
10
        lock = 0;
 
11
}
 
12
 
 
13
SafeDelete::~SafeDelete()
 
14
{
 
15
        if(lock)
 
16
                lock->dying();
 
17
}
 
18
 
 
19
void SafeDelete::deleteLater(QObject *o)
 
20
{
 
21
        if(!lock)
 
22
                deleteSingle(o);
 
23
        else
 
24
                list.append(o);
 
25
}
 
26
 
 
27
void SafeDelete::unlock()
 
28
{
 
29
        lock = 0;
 
30
        deleteAll();
 
31
}
 
32
 
 
33
void SafeDelete::deleteAll()
 
34
{
 
35
        if(list.isEmpty())
 
36
                return;
 
37
 
 
38
        QObjectListIt it(list);
 
39
        for(QObject *o; (o = it.current()); ++it)
 
40
                deleteSingle(o);
 
41
        list.clear();
 
42
}
 
43
 
 
44
void SafeDelete::deleteSingle(QObject *o)
 
45
{
 
46
#if QT_VERSION < 0x030000
 
47
        // roll our own QObject::deleteLater()
 
48
        SafeDeleteLater *sdl = SafeDeleteLater::ensureExists();
 
49
        sdl->deleteItLater(o);
 
50
#else
 
51
        o->deleteLater();
 
52
#endif
 
53
}
 
54
 
 
55
//----------------------------------------------------------------------------
 
56
// SafeDeleteLock
 
57
//----------------------------------------------------------------------------
 
58
SafeDeleteLock::SafeDeleteLock(SafeDelete *sd)
 
59
{
 
60
        own = false;
 
61
        if(!sd->lock) {
 
62
                _sd = sd;
 
63
                _sd->lock = this;
 
64
        }
 
65
        else
 
66
                _sd = 0;
 
67
}
 
68
 
 
69
SafeDeleteLock::~SafeDeleteLock()
 
70
{
 
71
        if(_sd) {
 
72
                _sd->unlock();
 
73
                if(own)
 
74
                        delete _sd;
 
75
        }
 
76
}
 
77
 
 
78
void SafeDeleteLock::dying()
 
79
{
 
80
        _sd = new SafeDelete(*_sd);
 
81
        own = true;
 
82
}
 
83
 
 
84
//----------------------------------------------------------------------------
 
85
// SafeDeleteLater
 
86
//----------------------------------------------------------------------------
 
87
SafeDeleteLater *SafeDeleteLater::self = 0;
 
88
 
 
89
SafeDeleteLater *SafeDeleteLater::ensureExists()
 
90
{
 
91
        if(!self)
 
92
                new SafeDeleteLater();
 
93
        return self;
 
94
}
 
95
 
 
96
SafeDeleteLater::SafeDeleteLater()
 
97
{
 
98
        list.setAutoDelete(true);
 
99
        self = this;
 
100
        QTimer::singleShot(0, this, SLOT(explode()));
 
101
}
 
102
 
 
103
SafeDeleteLater::~SafeDeleteLater()
 
104
{
 
105
        list.clear();
 
106
        self = 0;
 
107
}
 
108
 
 
109
void SafeDeleteLater::deleteItLater(QObject *o)
 
110
{
 
111
        list.append(o);
 
112
}
 
113
 
 
114
void SafeDeleteLater::explode()
 
115
{
 
116
        delete this;
 
117
}