26 #include "kdecoration_plugins_p.h"
28 #include <tdeconfig.h>
30 #include <tdelocale.h>
31 #include <klibloader.h>
37 #include "kdecorationfactory.h"
39 KDecorationPlugins::KDecorationPlugins( TDEConfig* cfg )
45 pluginStr(
"twin3_undefined " ),
50 KDecorationPlugins::~KDecorationPlugins()
54 assert( fact != NULL );
60 assert( old_fact != NULL );
62 old_library->unload();
66 bool KDecorationPlugins::reset(
unsigned long changed )
68 TQString oldPlugin = pluginStr;
69 config->reparseConfiguration();
71 if(( !loadPlugin(
"" ) && library )
72 || oldPlugin == pluginStr )
74 assert( fact != NULL );
75 ret = fact->reset( changed );
77 return ret || oldPlugin != pluginStr;
80 KDecorationFactory* KDecorationPlugins::factory()
86 KDecoration* KDecorationPlugins::createDecoration( KDecorationBridge* bridge )
89 return fact->createDecoration( bridge );
94 bool KDecorationPlugins::loadPlugin( TQString nameStr )
96 if( nameStr.isEmpty())
98 TDEConfigGroupSaver saver( config,
"Style" );
99 nameStr = config->readEntry(
"PluginLib", defaultPlugin );
102 if( nameStr.startsWith(
"twin_" ))
103 nameStr =
"twin3_" + nameStr.mid( 5 );
105 KLibrary *oldLibrary = library;
106 KDecorationFactory* oldFactory = fact;
108 TQString path = KLibLoader::findLibrary(TQFile::encodeName(nameStr));
113 nameStr = defaultPlugin;
114 path = KLibLoader::findLibrary(TQFile::encodeName(nameStr));
120 error( i18n(
"No window decoration plugin library was found." ));
125 if(pluginStr == nameStr)
129 library = KLibLoader::self()->library(TQFile::encodeName(path));
134 kdDebug() <<
" could not load library, try default plugin again" << endl;
135 nameStr = defaultPlugin;
136 if ( pluginStr == nameStr )
138 path = KLibLoader::findLibrary(TQFile::encodeName(nameStr));
140 library = KLibLoader::self()->library(TQFile::encodeName(path));
145 error( i18n(
"The default decoration plugin is corrupt "
146 "and could not be loaded." ));
151 if( library->hasSymbol(
"create_factory"))
153 void* create_func = library->symbol(
"create_factory");
155 create_ptr = (KDecorationFactory* (*)())create_func;
159 error( i18n(
"The library %1 is not a TWin plugin." ).arg( path ));
164 fact->checkRequirements(
this );
169 TQString catalogue = nameStr;
170 catalogue.replace(
"twin3_",
"twin_" );
171 TDEGlobal::locale()->insertCatalogue( catalogue );
173 TDEGlobal::locale()->insertCatalogue(
"twin_lib" );
175 TDEGlobal::locale()->insertCatalogue(
"twin_clients" );
177 TDEGlobal::locale()->insertCatalogue(
"twin_art_clients" );
179 old_library = oldLibrary;
180 old_fact = oldFactory;
185 void KDecorationPlugins::destroyPreviousPlugin()
192 old_library->unload();
197 void KDecorationPlugins::error(
const TQString& )
This is the base class for a decoration object.