void PanelPluginsModel::removePlugin(pluginslist_t::iterator plugin) { if (mPlugins.end() != plugin) { mPanel->settings()->remove(plugin->first); Plugin * p = plugin->second.data(); const int row = plugin - mPlugins.begin(); beginRemoveRows(QModelIndex(), row, row); mPlugins.erase(plugin); endRemoveRows(); mActive = mPlugins.isEmpty() ? QModelIndex() : createIndex(mPlugins.size() > row ? row : row - 1, 0); emit pluginRemoved(p); // p can be nullptr mPanel->settings()->setValue(mNamesKey, pluginNames()); if (nullptr != p) p->deleteLater(); } }
void PluginManager::slotPluginReadyForUnload() { // Using QObject::sender() is on purpose here, because otherwise all // plugins would have to pass 'this' as parameter, which makes the API // less clean for plugin authors // FIXME: I don't buy the above argument. Add a Kopete::Plugin::emitReadyForUnload(void), // and make readyForUnload be passed a plugin. - Richard Plugin *plugin = dynamic_cast<Plugin *>( const_cast<QObject *>( sender() ) ); if ( !plugin ) { kWarning( 14010 ) << "Calling object is not a plugin!"; return; } kDebug( 14010 ) << plugin->pluginId() << "ready for unload"; plugin->deleteLater(); }