summaryrefslogtreecommitdiffstats
path: root/tdecore/tdeinstance.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'tdecore/tdeinstance.cpp')
-rw-r--r--tdecore/tdeinstance.cpp362
1 files changed, 362 insertions, 0 deletions
diff --git a/tdecore/tdeinstance.cpp b/tdecore/tdeinstance.cpp
new file mode 100644
index 000000000..c8235e45e
--- /dev/null
+++ b/tdecore/tdeinstance.cpp
@@ -0,0 +1,362 @@
+/* This file is part of the KDE libraries
+ Copyright (C) 1999 Torben Weis <weis@kde.org>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public
+ License version 2 as published by the Free Software Foundation.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public License
+ along with this library; see the file COPYING.LIB. If not, write to
+ the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ Boston, MA 02110-1301, USA.
+*/
+#include "tdeinstance.h"
+
+#include <stdlib.h>
+#include <unistd.h>
+
+#include "tdeconfig.h"
+#include "tdelocale.h"
+#include "kcharsets.h"
+#include "kiconloader.h"
+#ifdef __TDE_HAVE_TDEHWLIB
+#include "klibloader.h"
+#include "tdeversion.h"
+#include "tdehardwaredevices.h"
+#include "tdenetworkconnections.h"
+#endif
+#include "tdeaboutdata.h"
+#include "tdestandarddirs.h"
+#include "kdebug.h"
+#include "tdeglobal.h"
+#include "kmimesourcefactory.h"
+
+#include <tqfont.h>
+
+#include "config.h"
+#ifndef NDEBUG
+ #include <assert.h>
+ #include <tqptrdict.h>
+ static TQPtrList<TDEInstance> *allInstances = 0;
+ static TQPtrDict<TQCString> *allOldInstances = 0;
+ #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);
+ #define DEBUG_REMOVE do { allInstances->removeRef(this); } while (false);
+ #define DEBUG_CHECK_ALIVE do { if (!allInstances->contains((TDEInstance*)this)) { TQCString *old = allOldInstances->find((TDEInstance*)this); tqWarning("ACCESSING DELETED TDEINSTANCE! (%s)", old ? old->data() : "<unknown>"); assert(false); } } while (false);
+#else
+ #define DEBUG_ADD
+ #define DEBUG_REMOVE
+ #define DEBUG_CHECK_ALIVE
+#endif
+
+class TDEInstancePrivate
+{
+public:
+ TDEInstancePrivate ()
+ {
+ mimeSourceFactory = 0L;
+ }
+
+ ~TDEInstancePrivate ()
+ {
+ delete mimeSourceFactory;
+ }
+
+ KMimeSourceFactory* mimeSourceFactory;
+ TQString configName;
+ bool ownAboutdata;
+ TDESharedConfig::Ptr sharedConfig;
+};
+
+TDEInstance::TDEInstance( const TQCString& name)
+ : _dirs (0L),
+ _config (0L),
+ _iconLoader (0L),
+#ifdef __TDE_HAVE_TDEHWLIB
+ _hardwaredevices (0L),
+ _networkmanager (0L),
+#endif
+ _name( name ), _aboutData( new TDEAboutData( name, "", 0 ) ), m_configReadOnly(false)
+{
+ DEBUG_ADD
+ Q_ASSERT(!name.isEmpty());
+ if (!TDEGlobal::_instance)
+ {
+ TDEGlobal::_instance = this;
+ TDEGlobal::setActiveInstance(this);
+ }
+
+ d = new TDEInstancePrivate ();
+ d->ownAboutdata = true;
+}
+
+TDEInstance::TDEInstance( const TDEAboutData * aboutData )
+ : _dirs (0L),
+ _config (0L),
+ _iconLoader (0L),
+#ifdef __TDE_HAVE_TDEHWLIB
+ _hardwaredevices (0L),
+ _networkmanager (0L),
+#endif
+ _name( aboutData->appName() ), _aboutData( aboutData ), m_configReadOnly(false)
+{
+ DEBUG_ADD
+ Q_ASSERT(!_name.isEmpty());
+
+ if (!TDEGlobal::_instance)
+ {
+ TDEGlobal::_instance = this;
+ TDEGlobal::setActiveInstance(this);
+ }
+
+ d = new TDEInstancePrivate ();
+ d->ownAboutdata = false;
+}
+
+TDEInstance::TDEInstance( TDEInstance* src )
+ : _dirs ( src->_dirs ),
+ _config ( src->_config ),
+ _iconLoader ( src->_iconLoader ),
+#ifdef __TDE_HAVE_TDEHWLIB
+ _hardwaredevices ( src->_hardwaredevices ),
+ _networkmanager ( src->_networkmanager ),
+#endif
+ _name( src->_name ), _aboutData( src->_aboutData ), m_configReadOnly(false)
+{
+ DEBUG_ADD
+ Q_ASSERT(!_name.isEmpty());
+
+ if (!TDEGlobal::_instance || TDEGlobal::_instance == src )
+ {
+ TDEGlobal::_instance = this;
+ TDEGlobal::setActiveInstance(this);
+ }
+
+ d = new TDEInstancePrivate ();
+ d->ownAboutdata = src->d->ownAboutdata;
+ d->sharedConfig = src->d->sharedConfig;
+
+ src->_dirs = 0L;
+ src->_config = 0L;
+ src->_iconLoader = 0L;
+#ifdef __TDE_HAVE_TDEHWLIB
+ src->_hardwaredevices = 0L;
+ src->_networkmanager = 0L;
+#endif
+ src->_aboutData = 0L;
+ delete src;
+}
+
+TDEInstance::~TDEInstance()
+{
+ DEBUG_CHECK_ALIVE
+
+ if (d->ownAboutdata)
+ delete _aboutData;
+ _aboutData = 0;
+
+ delete d;
+ d = 0;
+
+ delete _iconLoader;
+ _iconLoader = 0;
+
+#ifdef __TDE_HAVE_TDEHWLIB
+ delete _hardwaredevices;
+ _hardwaredevices = 0;
+
+ delete _networkmanager;
+ _networkmanager = 0;
+#endif
+
+ // delete _config; // Do not delete, stored in d->sharedConfig
+ _config = 0;
+ delete _dirs;
+ _dirs = 0;
+
+ if (TDEGlobal::_instance == this)
+ TDEGlobal::_instance = 0;
+ if (TDEGlobal::activeInstance() == this)
+ TDEGlobal::setActiveInstance(0);
+ DEBUG_REMOVE
+}
+
+
+TDEStandardDirs *TDEInstance::dirs() const
+{
+ DEBUG_CHECK_ALIVE
+ if( _dirs == 0 ) {
+ _dirs = new TDEStandardDirs( );
+ if (_config) {
+ if (_dirs->addCustomized(_config))
+ _config->reparseConfiguration();
+ } else
+ config(); // trigger adding of possible customized dirs
+ }
+
+ return _dirs;
+}
+
+extern bool kde_kiosk_exception;
+extern bool kde_kiosk_admin;
+
+void TDEInstance::setConfigReadOnly(bool ro)
+{
+ m_configReadOnly = ro;
+}
+
+TDEConfig *TDEInstance::config() const
+{
+ DEBUG_CHECK_ALIVE
+ if( _config == 0 ) {
+ if ( !d->configName.isEmpty() )
+ {
+ d->sharedConfig = TDESharedConfig::openConfig( d->configName );
+
+ // Check whether custom config files are allowed.
+ d->sharedConfig->setGroup( "KDE Action Restrictions" );
+ TQString kioskException = d->sharedConfig->readEntry("kiosk_exception");
+ if (d->sharedConfig->readBoolEntry( "custom_config", true))
+ {
+ d->sharedConfig->setGroup(TQString::null);
+ }
+ else
+ {
+ d->sharedConfig = 0;
+ }
+
+ }
+
+ if ( d->sharedConfig == 0 )
+ {
+ if ( !_name.isEmpty() ) {
+ d->sharedConfig = TDESharedConfig::openConfig( _name + "rc", m_configReadOnly );
+ }
+ else {
+ d->sharedConfig = TDESharedConfig::openConfig( TQString::null );
+ }
+ }
+
+ // Check if we are excempt from kiosk restrictions
+ if (kde_kiosk_admin && !kde_kiosk_exception && !TQCString(getenv("TDE_KIOSK_NO_RESTRICTIONS")).isEmpty())
+ {
+ kde_kiosk_exception = true;
+ d->sharedConfig = 0;
+ return config(); // Reread...
+ }
+
+ _config = d->sharedConfig;
+ if (_dirs)
+ if (_dirs->addCustomized(_config))
+ _config->reparseConfiguration();
+ }
+
+ return _config;
+}
+
+TDESharedConfig *TDEInstance::sharedConfig() const
+{
+ DEBUG_CHECK_ALIVE
+ if (_config == 0)
+ (void) config(); // Initialize config
+
+ return d->sharedConfig;
+}
+
+void TDEInstance::setConfigName(const TQString &configName)
+{
+ DEBUG_CHECK_ALIVE
+ d->configName = configName;
+}
+
+TDEIconLoader *TDEInstance::iconLoader() const
+{
+ DEBUG_CHECK_ALIVE
+ if( _iconLoader == 0 ) {
+ _iconLoader = new TDEIconLoader( _name, dirs() );
+ _iconLoader->enableDelayedIconSetLoading( true );
+ }
+
+ return _iconLoader;
+}
+
+#ifdef __TDE_HAVE_TDEHWLIB
+TDEHardwareDevices *TDEInstance::hardwareDevices() const
+{
+ DEBUG_CHECK_ALIVE
+ if (_hardwaredevices == 0)
+ {
+ TQString libName = TQString("libtdehw.so.%1").arg(TDE_VERSION_MAJOR);
+ KLibrary *lib = KLibLoader::self()->library(libName.latin1());
+ if (lib)
+ {
+ TDEHardwareDevices* (*create)() = (TDEHardwareDevices* (*)())lib->symbol("create_tdeHardwareDevices");
+ if (create)
+ {
+ _hardwaredevices = create();
+ }
+ }
+ }
+
+ return _hardwaredevices;
+}
+
+TDEGlobalNetworkManager *TDEInstance::networkManager() const
+{
+ DEBUG_CHECK_ALIVE
+ if (_networkmanager == 0)
+ {
+ TQString libName = TQString("libtdehw.so.%1").arg(TDE_VERSION_MAJOR);
+ KLibrary *lib = KLibLoader::self()->library(libName.latin1());
+ if (lib)
+ {
+ TDEGlobalNetworkManager* (*create)() = (TDEGlobalNetworkManager* (*)())lib->symbol("create_tdeGlobalNetworkManager");
+ if (create)
+ {
+ _networkmanager = create();
+ }
+ }
+ }
+
+ return _networkmanager;
+}
+#endif
+
+void TDEInstance::newIconLoader() const
+{
+ DEBUG_CHECK_ALIVE
+ TDEIconTheme::reconfigure();
+ _iconLoader->reconfigure( _name, dirs() );
+}
+
+const TDEAboutData * TDEInstance::aboutData() const
+{
+ DEBUG_CHECK_ALIVE
+ return _aboutData;
+}
+
+TQCString TDEInstance::instanceName() const
+{
+ DEBUG_CHECK_ALIVE
+ return _name;
+}
+
+KMimeSourceFactory* TDEInstance::mimeSourceFactory () const
+{
+ DEBUG_CHECK_ALIVE
+ if (!d->mimeSourceFactory)
+ {
+ d->mimeSourceFactory = new KMimeSourceFactory(_iconLoader);
+ d->mimeSourceFactory->setInstance(const_cast<TDEInstance *>(this));
+ }
+
+ return d->mimeSourceFactory;
+}
+
+void TDEInstance::virtual_hook( int, void* )
+{ /*BASE::virtual_hook( id, data );*/ }
+