• Skip to content
  • Skip to link menu
Trinity API Reference
  • Trinity API Reference
  • tdecore
 

tdecore

  • tdecore
kinstance.cpp
1/* This file is part of the KDE libraries
2 Copyright (C) 1999 Torben Weis <weis@kde.org>
3
4 This library is free software; you can redistribute it and/or
5 modify it under the terms of the GNU Library General Public
6 License version 2 as published by the Free Software Foundation.
7
8 This library is distributed in the hope that it will be useful,
9 but WITHOUT ANY WARRANTY; without even the implied warranty of
10 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
11 Library General Public License for more details.
12
13 You should have received a copy of the GNU Library General Public License
14 along with this library; see the file COPYING.LIB. If not, write to
15 the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
16 Boston, MA 02110-1301, USA.
17*/
18#include "kinstance.h"
19
20#include <stdlib.h>
21#include <unistd.h>
22
23#include "tdeconfig.h"
24#include "tdelocale.h"
25#include "kcharsets.h"
26#include "kiconloader.h"
27#ifdef __TDE_HAVE_TDEHWLIB
28#include "klibloader.h"
29#include "tdeversion.h"
30#include "tdehardwaredevices.h"
31#include "tdenetworkconnections.h"
32#endif
33#include "tdeaboutdata.h"
34#include "tdestandarddirs.h"
35#include "kdebug.h"
36#include "tdeglobal.h"
37#include "kmimesourcefactory.h"
38
39#include <tqfont.h>
40
41#include "config.h"
42#ifndef NDEBUG
43 #include <assert.h>
44 #include <tqptrdict.h>
45 static TQPtrList<TDEInstance> *allInstances = 0;
46 static TQPtrDict<TQCString> *allOldInstances = 0;
47 #define DEBUG_ADD do { if (!allInstances) { allInstances = new TQPtrList<TDEInstance>(); allOldInstances = new TQPtrDict<TQCString>(); } allInstances->append(this); allOldInstances->insert( this, new TQCString( _name)); } while (false);
48 #define DEBUG_REMOVE do { allInstances->removeRef(this); } while (false);
49 #define DEBUG_CHECK_ALIVE do { if (!allInstances->contains((TDEInstance*)this)) { TQCString *old = allOldInstances->find((TDEInstance*)this); tqWarning("ACCESSING DELETED KINSTANCE! (%s)", old ? old->data() : "<unknown>"); assert(false); } } while (false);
50#else
51 #define DEBUG_ADD
52 #define DEBUG_REMOVE
53 #define DEBUG_CHECK_ALIVE
54#endif
55
56class TDEInstancePrivate
57{
58public:
59 TDEInstancePrivate ()
60 {
61 mimeSourceFactory = 0L;
62 }
63
64 ~TDEInstancePrivate ()
65 {
66 delete mimeSourceFactory;
67 }
68
69 KMimeSourceFactory* mimeSourceFactory;
70 TQString configName;
71 bool ownAboutdata;
72 TDESharedConfig::Ptr sharedConfig;
73};
74
75TDEInstance::TDEInstance( const TQCString& name)
76 : _dirs (0L),
77 _config (0L),
78 _iconLoader (0L),
79#ifdef __TDE_HAVE_TDEHWLIB
80 _hardwaredevices (0L),
81 _networkmanager (0L),
82#endif
83 _name( name ), _aboutData( new TDEAboutData( name, "", 0 ) ), m_configReadOnly(false)
84{
85 DEBUG_ADD
86 Q_ASSERT(!name.isEmpty());
87 if (!TDEGlobal::_instance)
88 {
89 TDEGlobal::_instance = this;
90 TDEGlobal::setActiveInstance(this);
91 }
92
93 d = new TDEInstancePrivate ();
94 d->ownAboutdata = true;
95}
96
97TDEInstance::TDEInstance( const TDEAboutData * aboutData )
98 : _dirs (0L),
99 _config (0L),
100 _iconLoader (0L),
101#ifdef __TDE_HAVE_TDEHWLIB
102 _hardwaredevices (0L),
103 _networkmanager (0L),
104#endif
105 _name( aboutData->appName() ), _aboutData( aboutData ), m_configReadOnly(false)
106{
107 DEBUG_ADD
108 Q_ASSERT(!_name.isEmpty());
109
110 if (!TDEGlobal::_instance)
111 {
112 TDEGlobal::_instance = this;
113 TDEGlobal::setActiveInstance(this);
114 }
115
116 d = new TDEInstancePrivate ();
117 d->ownAboutdata = false;
118}
119
120TDEInstance::TDEInstance( TDEInstance* src )
121 : _dirs ( src->_dirs ),
122 _config ( src->_config ),
123 _iconLoader ( src->_iconLoader ),
124#ifdef __TDE_HAVE_TDEHWLIB
125 _hardwaredevices ( src->_hardwaredevices ),
126 _networkmanager ( src->_networkmanager ),
127#endif
128 _name( src->_name ), _aboutData( src->_aboutData ), m_configReadOnly(false)
129{
130 DEBUG_ADD
131 Q_ASSERT(!_name.isEmpty());
132
133 if (!TDEGlobal::_instance || TDEGlobal::_instance == src )
134 {
135 TDEGlobal::_instance = this;
136 TDEGlobal::setActiveInstance(this);
137 }
138
139 d = new TDEInstancePrivate ();
140 d->ownAboutdata = src->d->ownAboutdata;
141 d->sharedConfig = src->d->sharedConfig;
142
143 src->_dirs = 0L;
144 src->_config = 0L;
145 src->_iconLoader = 0L;
146#ifdef __TDE_HAVE_TDEHWLIB
147 src->_hardwaredevices = 0L;
148 src->_networkmanager = 0L;
149#endif
150 src->_aboutData = 0L;
151 delete src;
152}
153
154TDEInstance::~TDEInstance()
155{
156 DEBUG_CHECK_ALIVE
157
158 if (d->ownAboutdata)
159 delete _aboutData;
160 _aboutData = 0;
161
162 delete d;
163 d = 0;
164
165 delete _iconLoader;
166 _iconLoader = 0;
167
168#ifdef __TDE_HAVE_TDEHWLIB
169 delete _hardwaredevices;
170 _hardwaredevices = 0;
171
172 delete _networkmanager;
173 _networkmanager = 0;
174#endif
175
176 // delete _config; // Do not delete, stored in d->sharedConfig
177 _config = 0;
178 delete _dirs;
179 _dirs = 0;
180
181 if (TDEGlobal::_instance == this)
182 TDEGlobal::_instance = 0;
183 if (TDEGlobal::activeInstance() == this)
184 TDEGlobal::setActiveInstance(0);
185 DEBUG_REMOVE
186}
187
188
189TDEStandardDirs *TDEInstance::dirs() const
190{
191 DEBUG_CHECK_ALIVE
192 if( _dirs == 0 ) {
193 _dirs = new TDEStandardDirs( );
194 if (_config) {
195 if (_dirs->addCustomized(_config))
196 _config->reparseConfiguration();
197 } else
198 config(); // trigger adding of possible customized dirs
199 }
200
201 return _dirs;
202}
203
204extern bool kde_kiosk_exception;
205extern bool kde_kiosk_admin;
206
207void TDEInstance::setConfigReadOnly(bool ro)
208{
209 m_configReadOnly = ro;
210}
211
212TDEConfig *TDEInstance::config() const
213{
214 DEBUG_CHECK_ALIVE
215 if( _config == 0 ) {
216 if ( !d->configName.isEmpty() )
217 {
218 d->sharedConfig = TDESharedConfig::openConfig( d->configName );
219
220 // Check whether custom config files are allowed.
221 d->sharedConfig->setGroup( "KDE Action Restrictions" );
222 TQString kioskException = d->sharedConfig->readEntry("kiosk_exception");
223 if (d->sharedConfig->readBoolEntry( "custom_config", true))
224 {
225 d->sharedConfig->setGroup(TQString::null);
226 }
227 else
228 {
229 d->sharedConfig = 0;
230 }
231
232 }
233
234 if ( d->sharedConfig == 0 )
235 {
236 if ( !_name.isEmpty() ) {
237 d->sharedConfig = TDESharedConfig::openConfig( _name + "rc", m_configReadOnly );
238 }
239 else {
240 d->sharedConfig = TDESharedConfig::openConfig( TQString::null );
241 }
242 }
243
244 // Check if we are excempt from kiosk restrictions
245 if (kde_kiosk_admin && !kde_kiosk_exception && !TQCString(getenv("TDE_KIOSK_NO_RESTRICTIONS")).isEmpty())
246 {
247 kde_kiosk_exception = true;
248 d->sharedConfig = 0;
249 return config(); // Reread...
250 }
251
252 _config = d->sharedConfig;
253 if (_dirs)
254 if (_dirs->addCustomized(_config))
255 _config->reparseConfiguration();
256 }
257
258 return _config;
259}
260
261TDESharedConfig *TDEInstance::sharedConfig() const
262{
263 DEBUG_CHECK_ALIVE
264 if (_config == 0)
265 (void) config(); // Initialize config
266
267 return d->sharedConfig;
268}
269
270void TDEInstance::setConfigName(const TQString &configName)
271{
272 DEBUG_CHECK_ALIVE
273 d->configName = configName;
274}
275
276TDEIconLoader *TDEInstance::iconLoader() const
277{
278 DEBUG_CHECK_ALIVE
279 if( _iconLoader == 0 ) {
280 _iconLoader = new TDEIconLoader( _name, dirs() );
281 _iconLoader->enableDelayedIconSetLoading( true );
282 }
283
284 return _iconLoader;
285}
286
287#ifdef __TDE_HAVE_TDEHWLIB
288TDEHardwareDevices *TDEInstance::hardwareDevices() const
289{
290 DEBUG_CHECK_ALIVE
291 if (_hardwaredevices == 0)
292 {
293 TQString libName = TQString("libtdehw.so.%1").arg(TDE_VERSION_MAJOR);
294 KLibrary *lib = KLibLoader::self()->library(libName.latin1());
295 if (lib)
296 {
297 TDEHardwareDevices* (*create)() = (TDEHardwareDevices* (*)())lib->symbol("create_tdeHardwareDevices");
298 if (create)
299 {
300 _hardwaredevices = create();
301 }
302 }
303 }
304
305 return _hardwaredevices;
306}
307
308TDEGlobalNetworkManager *TDEInstance::networkManager() const
309{
310 DEBUG_CHECK_ALIVE
311 if (_networkmanager == 0)
312 {
313 TQString libName = TQString("libtdehw.so.%1").arg(TDE_VERSION_MAJOR);
314 KLibrary *lib = KLibLoader::self()->library(libName.latin1());
315 if (lib)
316 {
317 TDEGlobalNetworkManager* (*create)() = (TDEGlobalNetworkManager* (*)())lib->symbol("create_tdeGlobalNetworkManager");
318 if (create)
319 {
320 _networkmanager = create();
321 }
322 }
323 }
324
325 return _networkmanager;
326}
327#endif
328
329void TDEInstance::newIconLoader() const
330{
331 DEBUG_CHECK_ALIVE
332 TDEIconTheme::reconfigure();
333 _iconLoader->reconfigure( _name, dirs() );
334}
335
336const TDEAboutData * TDEInstance::aboutData() const
337{
338 DEBUG_CHECK_ALIVE
339 return _aboutData;
340}
341
342TQCString TDEInstance::instanceName() const
343{
344 DEBUG_CHECK_ALIVE
345 return _name;
346}
347
348KMimeSourceFactory* TDEInstance::mimeSourceFactory () const
349{
350 DEBUG_CHECK_ALIVE
351 if (!d->mimeSourceFactory)
352 {
353 d->mimeSourceFactory = new KMimeSourceFactory(_iconLoader);
354 d->mimeSourceFactory->setInstance(const_cast<TDEInstance *>(this));
355 }
356
357 return d->mimeSourceFactory;
358}
359
360void TDEInstance::virtual_hook( int, void* )
361{ /*BASE::virtual_hook( id, data );*/ }
362
KLibLoader::self
static KLibLoader * self()
Returns a pointer to the factory.
Definition: klibloader.cpp:288
KLibLoader::library
virtual KLibrary * library(const char *libname)
Loads and initializes a library.
Definition: klibloader.cpp:392
KLibrary
Represents a dynamically loaded library.
Definition: klibloader.h:51
KMimeSourceFactory
An extension to TQMimeSourceFactory that uses TDEIconLoader to find images.
Definition: kmimesourcefactory.h:41
TDEAboutData
This class is used to store information about a program.
Definition: tdeaboutdata.h:183
TDEConfig
Access KDE Configuration entries.
Definition: tdeconfig.h:44
TDEConfig::reparseConfiguration
virtual void reparseConfiguration()
Clears all internal data structures and then reread configuration information from disk.
Definition: tdeconfig.cpp:161
TDEGlobal::setActiveInstance
static void setActiveInstance(TDEInstance *d)
The instance currently active (useful in a multi-instance application, such as a KParts application).
Definition: tdeglobal.cpp:134
TDEIconLoader
Iconloader for KDE.
Definition: kiconloader.h:78
TDEIconLoader::enableDelayedIconSetLoading
void enableDelayedIconSetLoading(bool enable)
Enables on-demand icon loading for QIconSets using TQIconFactory.
Definition: kiconloader.cpp:289
TDEIconLoader::reconfigure
void reconfigure(const TQString &_appname, TDEStandardDirs *_dirs)
Called by TDEInstance::newIconLoader to reconfigure the icon loader.
Definition: kiconloader.cpp:166
TDEIconTheme::reconfigure
static void reconfigure()
Reconfigure the theme.
Definition: kicontheme.cpp:503
TDEInstance
Access to KDE global objects for use in shared libraries.
Definition: kinstance.h:48
TDEInstance::dirs
TDEStandardDirs * dirs() const
Returns the application standard dirs object.
Definition: kinstance.cpp:189
TDEInstance::instanceName
TQCString instanceName() const
Returns the name of the instance.
Definition: kinstance.cpp:342
TDEInstance::config
TDEConfig * config() const
Returns the general config object ("appnamerc").
Definition: kinstance.cpp:212
TDEInstance::mimeSourceFactory
KMimeSourceFactory * mimeSourceFactory() const
Returns the KMimeSourceFactory of the instance.
Definition: kinstance.cpp:348
TDEInstance::newIconLoader
void newIconLoader() const
Re-allocate the global iconloader.
Definition: kinstance.cpp:329
TDEInstance::aboutData
const TDEAboutData * aboutData() const
Returns the about data of this instance Warning, can be 0L.
Definition: kinstance.cpp:336
TDEInstance::iconLoader
TDEIconLoader * iconLoader() const
Returns an iconloader object.
Definition: kinstance.cpp:276
TDEInstance::setConfigName
void setConfigName(const TQString &name)
Set name of default config file.
Definition: kinstance.cpp:270
TDEInstance::~TDEInstance
virtual ~TDEInstance()
Destructor.
Definition: kinstance.cpp:154
TDEInstance::setConfigReadOnly
void setConfigReadOnly(bool ro)
Set a read-only flag on the configuration files This must be called before config() or dirs() to have...
Definition: kinstance.cpp:207
TDEInstance::TDEInstance
TDEInstance(const TQCString &instanceName)
Constructor.
Definition: kinstance.cpp:75
TDEInstance::sharedConfig
TDESharedConfig * sharedConfig() const
Returns the general config object ("appnamerc").
Definition: kinstance.cpp:261
TDESharedConfig
TDEConfig variant using shared memory.
Definition: tdeconfig.h:274
TDESharedConfig::openConfig
static TDESharedConfig::Ptr openConfig(const TQString &fileName, bool readOnly=false, bool bUseKDEGlobals=true)
Returns a ref-counted pointer to a shared read-write config object.
Definition: tdeconfig.cpp:334
TDESharedPtr< TDESharedConfig >
TDEStandardDirs
Site-independent access to standard TDE directories.
Definition: tdestandarddirs.h:126
TDEStandardDirs::addCustomized
bool addCustomized(TDEConfig *config)
Reads customized entries out of the given config object and add them via addResourceDirs().
Definition: tdestandarddirs.cpp:1537
KStdAction::create
TDEAction * create(StdAction id, const char *name, const TQObject *recvr, const char *slot, TDEActionCollection *parent)
tdelocale.h

tdecore

Skip menu "tdecore"
  • Main Page
  • Modules
  • Namespace List
  • Class Hierarchy
  • Alphabetical List
  • Class List
  • File List
  • Namespace Members
  • Class Members
  • Related Pages

tdecore

Skip menu "tdecore"
  • arts
  • dcop
  • dnssd
  • interfaces
  •   kspeech
  •     interface
  •     library
  •   tdetexteditor
  • kate
  • kded
  • kdoctools
  • kimgio
  • kjs
  • libtdemid
  • libtdescreensaver
  • tdeabc
  • tdecmshell
  • tdecore
  • tdefx
  • tdehtml
  • tdeinit
  • tdeio
  •   bookmarks
  •   httpfilter
  •   kpasswdserver
  •   kssl
  •   tdefile
  •   tdeio
  •   tdeioexec
  • tdeioslave
  •   http
  • tdemdi
  •   tdemdi
  • tdenewstuff
  • tdeparts
  • tdeprint
  • tderandr
  • tderesources
  • tdespell2
  • tdesu
  • tdeui
  • tdeunittest
  • tdeutils
  • tdewallet
Generated for tdecore by doxygen 1.9.4
This website is maintained by Timothy Pearson.