kcminit: fix initialization of multiple modules provided by a single library. This resolves issue #554.

The problem was that libinput was serving multiple modules and after initializing the first one, the others would be ignored because of a check on whether the library itself had already been initialized.
The solution is rather simple and checks not only the library name but also the module factory name. This ensures each library/factory module is correctly initialized.

Signed-off-by: Michele Calgaro <michele.calgaro@yahoo.it>
pull/565/head
Michele Calgaro 3 months ago
parent 1c05f36ad1
commit d0a2cfa94f
Signed by: MicheleC
GPG Key ID: 2A75B7CA8ADED5CF

@ -112,16 +112,25 @@ void KCMInit::runModules( int phase )
TQString libName = TQString("kcm_%1").arg(library);
TQString factoryName = service->property("X-TDE-FactoryName", TQVariant::String).toString();
if (!factoryName.isEmpty())
{
factoryName = ":" + factoryName;
}
TQString libFactoryName = libName + factoryName;
// try to load the library
if (! alreadyInitialized.contains( libName.ascii() )) {
if (!alreadyInitialized.contains( libFactoryName.ascii() )) {
if (!runModule(libName, service)) {
libName = TQString("libkcm_%1").arg(library);
if (! alreadyInitialized.contains( libName.ascii() )) {
libFactoryName = libName + factoryName;
if (!alreadyInitialized.contains( libFactoryName.ascii() )) {
runModule(libName, service);
alreadyInitialized.append( libName.ascii() );
alreadyInitialized.append( libFactoryName.ascii() );
}
} else {
alreadyInitialized.append( libFactoryName.ascii() );
}
} else
alreadyInitialized.append( libName.ascii() );
}
}
}

Loading…
Cancel
Save