114 const auto plugins = KPluginMetaData::findPlugins(s_pluginName);
115 for (
const auto &info : plugins) {
116 std::unique_ptr<KDecoration2::DecorationThemeProvider> themeFinder(
117 KPluginFactory::instantiatePlugin<KDecoration2::DecorationThemeProvider>(info).plugin);
118 KDecoration2::DecorationThemeMetaData
data;
119 const auto decoSettingsMap = info.rawData().value(
"org.kde.kdecoration2").toObject().toVariantMap();
121 const QString &kns = findKNewStuff(decoSettingsMap);
122 if (!kns.isEmpty() && !m_knsProviders.contains(kns)) {
123 m_knsProviders.append(kns);
125 if (isThemeEngine(decoSettingsMap)) {
126 const QString keyword = themeListKeyword(decoSettingsMap);
127 if (keyword.isNull()) {
131 const auto themesList = themeFinder->themes();
132 for (
const KDecoration2::DecorationThemeMetaData &
data : themesList) {
133 m_plugins.emplace_back(
data);
141 if (decoSettingsMap.contains(QStringLiteral(
"kcmodule"))) {
142 qWarning() <<
"The use of 'kcmodule' is deprecated in favor of 'kcmoduleName', please update" << info.name();
145 data.setConfigurationName(info.value(
"X-KDE-ConfigModule"));
146 data.setBorderSize(recommendedBorderSize(decoSettingsMap));
147 data.setVisibleName(info.name().isEmpty() ? info.pluginId() : info.name());
148 data.setPluginId(info.pluginId());
149 data.setThemeName(
data.visibleName());
151 m_plugins.emplace_back(std::move(
data));
158 auto it = std::find_if(m_plugins.cbegin(), m_plugins.cend(), [pluginName, themeName](
const KDecoration2::DecorationThemeMetaData &d) {
159 return d.pluginId() == pluginName && d.themeName() == themeName;
161 if (it == m_plugins.cend()) {
162 return QModelIndex();
164 const auto distance = std::distance(m_plugins.cbegin(), it);
165 return createIndex(distance, 0);