26 #include "kdecoration_plugins_p.h"
31 #include <klibloader.h>
37 #include "kdecorationfactory.h"
39 KDecorationPlugins::KDecorationPlugins( KConfig* cfg )
45 pluginStr(
"kwin3_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 KConfigGroupSaver saver( config,
"Style" );
99 nameStr = config->readEntry(
"PluginLib", defaultPlugin );
102 if( nameStr.startsWith(
"kwin_" ))
103 nameStr =
"kwin3_" + 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 KWin plugin." ).arg( path ));
164 fact->checkRequirements(
this );
169 TQString catalogue = nameStr;
170 catalogue.replace(
"kwin3_",
"kwin_" );
171 KGlobal::locale()->insertCatalogue( catalogue );
173 KGlobal::locale()->insertCatalogue(
"kwin_lib" );
175 KGlobal::locale()->insertCatalogue(
"kwin_clients" );
177 KGlobal::locale()->insertCatalogue(
"kwin_art_clients" );
179 old_library = oldLibrary;
180 old_fact = oldFactory;
185 void KDecorationPlugins::destroyPreviousPlugin()
192 old_library->unload();
197 void KDecorationPlugins::error(
const TQString& )