ModuleInitializer() { std::string location = ModuleUtils::GetLibraryPath(moduleInfo()->libName, reinterpret_cast<void*>(moduleInfo)); std::string activator_func = "_us_module_activator_instance_"; activator_func.append(moduleInfo()->name); moduleInfo()->location = location; if (moduleInfo()->libName.empty()) { // make sure we retrieve symbols from the executable, if "libName" is empty location.clear(); } moduleInfo()->activatorHook = reinterpret_cast<ModuleInfo::ModuleActivatorHook>(ModuleUtils::GetSymbol(location, activator_func.c_str())); Register(); }
~ModuleInitializer() { ModuleRegistry::UnRegister(moduleInfo()); }
static void Register() { ModuleRegistry::Register(moduleInfo()); }
KCModule * KCModuleProxy::realModule() const { /* * Note, don't call any function that calls realModule() since * that leads to an infinite loop. */ kdDebug(711) << k_funcinfo << endl; /* Already loaded */ if( d->kcm ) return d->kcm; /* /We/ have no kcm, but kcmshell running with root prevs does.. */ if( d->rootMode ) return 0; QApplication::setOverrideCursor( Qt::WaitCursor ); KCModuleProxy * that = const_cast<KCModuleProxy*>( this ); if( !d->isInitialized ) { d->dcopName = moduleInfo().handle().prepend("KCModuleProxy-").utf8(); d->topLayout = new QVBoxLayout( that, 0, 0, "topLayout" ); d->isInitialized = true; } if( !d->dcopClient ) d->dcopClient = new DCOPClient(); if( !d->dcopClient->isRegistered() ) d->dcopClient->registerAs( d->dcopName, false ); d->dcopClient->setAcceptCalls( true ); if( d->dcopClient->appId() == d->dcopName || d->bogusOccupier ) { /* We got the name we requested, because no one was before us, * or, it was an random application which had picked that name */ kdDebug(711) << "Module not already loaded, loading module" << endl; d->dcopObject = new KCModuleProxyIfaceImpl( d->dcopName, that ); d->kcm = KCModuleLoader::loadModule( moduleInfo(), KCModuleLoader::Inline, d->withFallback, that, name(), d->args ); connect( d->kcm, SIGNAL( changed( bool ) ), SLOT(moduleChanged(bool)) ); connect( d->kcm, SIGNAL( destroyed() ), SLOT( moduleDestroyed() ) ); connect( d->kcm, SIGNAL(quickHelpChanged()), SIGNAL(quickHelpChanged())); QWhatsThis::add( that, d->kcm->quickHelp() ); d->topLayout->addWidget( d->kcm ); if ( !d->rootInfo && /* If it's already done */ moduleInfo().needsRootPrivileges() /* root, anyone? */ && !KUser().isSuperUser() ) /* Not necessary if we're root */ { d->rootInfo = new QLabel( that, "rootInfo" ); d->topLayout->insertWidget( 0, d->rootInfo ); d->rootInfo->setFrameShape(QFrame::Box); d->rootInfo->setFrameShadow(QFrame::Raised); const QString msg = d->kcm->rootOnlyMsg(); if( msg.isEmpty() ) d->rootInfo->setText(i18n( "<b>Changes in this section requires root access.</b><br />" "Click the \"Administrator Mode\" button to " "allow modifications.")); else d->rootInfo->setText(msg); QWhatsThis::add( d->rootInfo, i18n( "This section requires special permissions, probably " "for system-wide changes; therefore, it is " "required that you provide the root password to be " "able to change the module's properties. If " "you do not provide the password, the module will be " "disabled.")); } }
void BehaviorConfig_Shorten::slotConfigureClicked() { qCDebug(CHOQOK); KPluginInfo pluginInfo = availablePlugins.value(shortenPlugins->itemData(shortenPlugins->currentIndex()).toString()); qCDebug(CHOQOK) << pluginInfo.name() << pluginInfo.kcmServices().count(); QPointer<QDialog> configDialog = new QDialog(this); configDialog->setWindowTitle(pluginInfo.name()); // The number of KCModuleProxies in use determines whether to use a tabwidget QTabWidget *newTabWidget = 0; // Widget to use for the setting dialog's main widget, // either a QTabWidget or a KCModuleProxy QWidget *mainWidget = 0; // Widget to use as the KCModuleProxy's parent. // The first proxy is owned by the dialog itself QWidget *moduleProxyParentWidget = configDialog; for (const KService::Ptr &servicePtr: pluginInfo.kcmServices()) { if (!servicePtr->noDisplay()) { KCModuleInfo moduleInfo(servicePtr); KCModuleProxy *currentModuleProxy = new KCModuleProxy(moduleInfo, moduleProxyParentWidget); if (currentModuleProxy->realModule()) { moduleProxyList << currentModuleProxy; if (mainWidget && !newTabWidget) { // we already created one KCModuleProxy, so we need a tab widget. // Move the first proxy into the tab widget and ensure this and subsequent // proxies are in the tab widget newTabWidget = new QTabWidget(configDialog); moduleProxyParentWidget = newTabWidget; mainWidget->setParent(newTabWidget); KCModuleProxy *moduleProxy = qobject_cast<KCModuleProxy *>(mainWidget); if (moduleProxy) { newTabWidget->addTab(mainWidget, moduleProxy->moduleInfo().moduleName()); mainWidget = newTabWidget; } else { delete newTabWidget; newTabWidget = 0; moduleProxyParentWidget = configDialog; mainWidget->setParent(0); } } if (newTabWidget) { newTabWidget->addTab(currentModuleProxy, servicePtr->name()); } else { mainWidget = currentModuleProxy; } } else { delete currentModuleProxy; } } } // it could happen that we had services to show, but none of them were real modules. if (moduleProxyList.count()) { QWidget *showWidget = new QWidget(configDialog); QVBoxLayout *layout = new QVBoxLayout; showWidget->setLayout(layout); layout->addWidget(mainWidget); layout->insertSpacing(-1, QApplication::style()->pixelMetric(QStyle::PM_DialogButtonsSeparator)); QDialogButtonBox *buttonBox = new QDialogButtonBox(QDialogButtonBox::Ok | QDialogButtonBox::Cancel); QPushButton *okButton = buttonBox->button(QDialogButtonBox::Ok); okButton->setDefault(true); okButton->setShortcut(Qt::CTRL | Qt::Key_Return); connect(buttonBox, &QDialogButtonBox::accepted, configDialog.data(), &QDialog::accept); connect(buttonBox, &QDialogButtonBox::rejected, configDialog.data(), &QDialog::reject); layout->addWidget(buttonBox); showWidget->adjustSize(); // connect(&configDialog, SIGNAL(defaultClicked()), this, SLOT(slotDefaultClicked())); if (configDialog->exec() == QDialog::Accepted) { for (KCModuleProxy *moduleProxy: moduleProxyList) { QStringList parentComponents = moduleProxy->moduleInfo().service()->property(QLatin1String("X-KDE-ParentComponents")).toStringList(); moduleProxy->save(); } } else { for (KCModuleProxy *moduleProxy: moduleProxyList) { moduleProxy->load(); } } qDeleteAll(moduleProxyList); moduleProxyList.clear(); } }