• Skip to content
  • Skip to link menu
KDE 3.5 API Reference
  • KDE API Reference
  • API Reference
  • Sitemap
  • Contact Us
 

KDECore

kinstance.cpp

Go to the documentation of this file.
00001 /* This file is part of the KDE libraries
00002    Copyright (C) 1999 Torben Weis <weis@kde.org>
00003 
00004    This library is free software; you can redistribute it and/or
00005    modify it under the terms of the GNU Library General Public
00006    License version 2 as published by the Free Software Foundation.
00007 
00008    This library is distributed in the hope that it will be useful,
00009    but WITHOUT ANY WARRANTY; without even the implied warranty of
00010    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
00011    Library General Public License for more details.
00012 
00013    You should have received a copy of the GNU Library General Public License
00014    along with this library; see the file COPYING.LIB.  If not, write to
00015    the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
00016    Boston, MA 02110-1301, USA.
00017 */
00018 #include "kinstance.h"
00019 
00020 #include <stdlib.h>
00021 #include <unistd.h>
00022 
00023 #include "kconfig.h"
00024 #include "klocale.h"
00025 #include "kcharsets.h"
00026 #include "kiconloader.h"
00027 #include "kaboutdata.h"
00028 #include "kstandarddirs.h"
00029 #include "kdebug.h"
00030 #include "kglobal.h"
00031 #include "kmimesourcefactory.h"
00032 
00033 #include <qfont.h>
00034 
00035 #include "config.h"
00036 #ifndef NDEBUG
00037   #include <assert.h>
00038   #include <qptrdict.h>
00039   static QPtrList<KInstance> *allInstances = 0;
00040   static QPtrDict<QCString> *allOldInstances = 0;
00041   #define DEBUG_ADD do { if (!allInstances) { allInstances = new QPtrList<KInstance>(); allOldInstances = new QPtrDict<QCString>(); } allInstances->append(this); allOldInstances->insert( this, new QCString( _name)); } while (false);
00042   #define DEBUG_REMOVE do { allInstances->removeRef(this); } while (false);
00043   #define DEBUG_CHECK_ALIVE do { if (!allInstances->contains((KInstance*)this)) { QCString *old = allOldInstances->find((KInstance*)this); qWarning("ACCESSING DELETED KINSTANCE! (%s)", old ? old->data() : "<unknown>"); assert(false); } } while (false);
00044 #else
00045   #define DEBUG_ADD
00046   #define DEBUG_REMOVE
00047   #define DEBUG_CHECK_ALIVE
00048 #endif
00049 
00050 class KInstancePrivate
00051 {
00052 public:
00053     KInstancePrivate ()
00054     {
00055         mimeSourceFactory = 0L;
00056     }
00057 
00058     ~KInstancePrivate ()
00059     {
00060         delete mimeSourceFactory;
00061     }
00062 
00063     KMimeSourceFactory* mimeSourceFactory;
00064     QString configName;
00065     bool ownAboutdata;
00066     KSharedConfig::Ptr sharedConfig;
00067 };
00068 
00069 KInstance::KInstance( const QCString& name)
00070   : _dirs (0L),
00071     _config (0L),
00072     _iconLoader (0L),
00073     _name( name ), _aboutData( new KAboutData( name, "", 0 ) )
00074 {
00075     DEBUG_ADD
00076     Q_ASSERT(!name.isEmpty());
00077     if (!KGlobal::_instance)
00078     {
00079       KGlobal::_instance = this;
00080       KGlobal::setActiveInstance(this);
00081     }
00082 
00083     d = new KInstancePrivate ();
00084     d->ownAboutdata = true;
00085 }
00086 
00087 KInstance::KInstance( const KAboutData * aboutData )
00088   : _dirs (0L),
00089     _config (0L),
00090     _iconLoader (0L),
00091     _name( aboutData->appName() ), _aboutData( aboutData )
00092 {
00093     DEBUG_ADD
00094     Q_ASSERT(!_name.isEmpty());
00095 
00096     if (!KGlobal::_instance)
00097     {
00098       KGlobal::_instance = this;
00099       KGlobal::setActiveInstance(this);
00100     }
00101 
00102     d = new KInstancePrivate ();
00103     d->ownAboutdata = false;
00104 }
00105 
00106 KInstance::KInstance( KInstance* src )
00107   : _dirs ( src->_dirs ),
00108     _config ( src->_config ),
00109     _iconLoader ( src->_iconLoader ),
00110     _name( src->_name ), _aboutData( src->_aboutData )
00111 {
00112     DEBUG_ADD
00113     Q_ASSERT(!_name.isEmpty());
00114 
00115     if (!KGlobal::_instance || KGlobal::_instance == src )
00116     {
00117       KGlobal::_instance = this;
00118       KGlobal::setActiveInstance(this);
00119     }
00120 
00121     d = new KInstancePrivate ();
00122     d->ownAboutdata = src->d->ownAboutdata;
00123     d->sharedConfig = src->d->sharedConfig;
00124 
00125     src->_dirs = 0L;
00126     src->_config = 0L;
00127     src->_iconLoader = 0L;
00128     src->_aboutData = 0L;
00129     delete src;
00130 }
00131 
00132 KInstance::~KInstance()
00133 {
00134     DEBUG_CHECK_ALIVE
00135 
00136     if (d->ownAboutdata)
00137         delete _aboutData;
00138     _aboutData = 0;
00139 
00140     delete d;
00141     d = 0;
00142 
00143     delete _iconLoader;
00144     _iconLoader = 0;
00145 
00146     // delete _config; // Do not delete, stored in d->sharedConfig
00147     _config = 0;
00148     delete _dirs;
00149     _dirs = 0;
00150 
00151     if (KGlobal::_instance == this)
00152         KGlobal::_instance = 0;
00153     if (KGlobal::activeInstance() == this)
00154         KGlobal::setActiveInstance(0);
00155     DEBUG_REMOVE
00156 }
00157 
00158 
00159 KStandardDirs *KInstance::dirs() const
00160 {
00161     DEBUG_CHECK_ALIVE
00162     if( _dirs == 0 ) {
00163     _dirs = new KStandardDirs( );
00164         if (_config) {
00165             if (_dirs->addCustomized(_config))
00166                 _config->reparseConfiguration();
00167     } else
00168             config(); // trigger adding of possible customized dirs
00169     }
00170 
00171     return _dirs;
00172 }
00173 
00174 extern bool kde_kiosk_exception;
00175 extern bool kde_kiosk_admin;
00176 
00177 KConfig *KInstance::config() const
00178 {
00179     DEBUG_CHECK_ALIVE
00180     if( _config == 0 ) {
00181         if ( !d->configName.isEmpty() )
00182         {
00183             d->sharedConfig = KSharedConfig::openConfig( d->configName );
00184 
00185             // Check whether custom config files are allowed.
00186             d->sharedConfig->setGroup( "KDE Action Restrictions" );
00187             QString kioskException = d->sharedConfig->readEntry("kiosk_exception");
00188             if (d->sharedConfig->readBoolEntry( "custom_config", true))
00189             {
00190                d->sharedConfig->setGroup(QString::null);
00191             }
00192             else
00193             {
00194                d->sharedConfig = 0;
00195             }
00196 
00197         }
00198 
00199         if ( d->sharedConfig == 0 )
00200         {
00201         if ( !_name.isEmpty() )
00202             d->sharedConfig = KSharedConfig::openConfig( _name + "rc");
00203         else
00204             d->sharedConfig = KSharedConfig::openConfig( QString::null );
00205     }
00206     
00207     // Check if we are excempt from kiosk restrictions
00208     if (kde_kiosk_admin && !kde_kiosk_exception && !QCString(getenv("KDE_KIOSK_NO_RESTRICTIONS")).isEmpty())
00209     {
00210             kde_kiosk_exception = true;
00211             d->sharedConfig = 0;
00212             return config(); // Reread...
00213         }
00214     
00215     _config = d->sharedConfig;
00216         if (_dirs)
00217             if (_dirs->addCustomized(_config))
00218                 _config->reparseConfiguration();
00219     }
00220 
00221     return _config;
00222 }
00223 
00224 KSharedConfig *KInstance::sharedConfig() const
00225 {
00226     DEBUG_CHECK_ALIVE
00227     if (_config == 0)
00228        (void) config(); // Initialize config
00229 
00230     return d->sharedConfig;
00231 }
00232 
00233 void KInstance::setConfigName(const QString &configName)
00234 {
00235     DEBUG_CHECK_ALIVE
00236     d->configName = configName;
00237 }
00238 
00239 KIconLoader *KInstance::iconLoader() const
00240 {
00241     DEBUG_CHECK_ALIVE
00242     if( _iconLoader == 0 ) {
00243     _iconLoader = new KIconLoader( _name, dirs() );
00244         _iconLoader->enableDelayedIconSetLoading( true );
00245     }
00246 
00247     return _iconLoader;
00248 }
00249 
00250 void KInstance::newIconLoader() const
00251 {
00252     DEBUG_CHECK_ALIVE
00253     KIconTheme::reconfigure();
00254     _iconLoader->reconfigure( _name, dirs() );
00255 }
00256 
00257 const KAboutData * KInstance::aboutData() const
00258 {
00259     DEBUG_CHECK_ALIVE
00260     return _aboutData;
00261 }
00262 
00263 QCString KInstance::instanceName() const
00264 {
00265     DEBUG_CHECK_ALIVE
00266     return _name;
00267 }
00268 
00269 KMimeSourceFactory* KInstance::mimeSourceFactory () const
00270 {
00271   DEBUG_CHECK_ALIVE
00272   if (!d->mimeSourceFactory)
00273   {
00274     d->mimeSourceFactory = new KMimeSourceFactory(_iconLoader);
00275     d->mimeSourceFactory->setInstance(const_cast<KInstance *>(this));
00276   }
00277 
00278   return d->mimeSourceFactory;
00279 }
00280 
00281 void KInstance::virtual_hook( int, void* )
00282 { /*BASE::virtual_hook( id, data );*/ }
00283 

KDECore

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

API Reference

Skip menu "API Reference"
  • dcop
  • DNSSD
  • interfaces
  • Kate
  • kconf_update
  • KDECore
  • KDED
  • kdefx
  • KDEsu
  • kdeui
  • KDocTools
  • KHTML
  • KImgIO
  • KInit
  • kio
  • kioslave
  • KJS
  • KNewStuff
  • KParts
  • KUtils
Generated for API Reference by doxygen 1.5.9
This website is maintained by Adriaan de Groot and Allen Winter.
KDE® and the K Desktop Environment® logo are registered trademarks of KDE e.V. | Legal