• 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 "kstandarddirs.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 
56 class TDEInstancePrivate
57 {
58 public:
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 
75 TDEInstance::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 
97 TDEInstance::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 
120 TDEInstance::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 
154 TDEInstance::~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 
189 TDEStandardDirs *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 
204 extern bool kde_kiosk_exception;
205 extern bool kde_kiosk_admin;
206 
207 void TDEInstance::setConfigReadOnly(bool ro)
208 {
209  m_configReadOnly = ro;
210 }
211 
212 TDEConfig *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 
261 TDESharedConfig *TDEInstance::sharedConfig() const
262 {
263  DEBUG_CHECK_ALIVE
264  if (_config == 0)
265  (void) config(); // Initialize config
266 
267  return d->sharedConfig;
268 }
269 
270 void TDEInstance::setConfigName(const TQString &configName)
271 {
272  DEBUG_CHECK_ALIVE
273  d->configName = configName;
274 }
275 
276 TDEIconLoader *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
288 TDEHardwareDevices *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 
308 TDEGlobalNetworkManager *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 
329 void TDEInstance::newIconLoader() const
330 {
331  DEBUG_CHECK_ALIVE
332  TDEIconTheme::reconfigure();
333  _iconLoader->reconfigure( _name, dirs() );
334 }
335 
336 const TDEAboutData * TDEInstance::aboutData() const
337 {
338  DEBUG_CHECK_ALIVE
339  return _aboutData;
340 }
341 
342 TQCString TDEInstance::instanceName() const
343 {
344  DEBUG_CHECK_ALIVE
345  return _name;
346 }
347 
348 KMimeSourceFactory* 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 
360 void 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 KDE directories.
Definition: kstandarddirs.h:126
TDEStandardDirs::addCustomized
bool addCustomized(TDEConfig *config)
Reads customized entries out of the given config object and add them via addResourceDirs().
Definition: kstandarddirs.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.1
This website is maintained by Timothy Pearson.