Warning, /plasma/plasma-mobile/components/wallpaperimageplugin/qml/WallpaperPluginConfigLoader.qml is written in an unsupported language. File is not indexed.

0001 // SPDX-FileCopyrightText: 2013 Marco Martin <mart@kde.org>
0002 // SPDX-FileCopyrightText: 2014 Kai Uwe Broulik <kde@privat.broulik.de>
0003 // SPDX-FileCopyrightText: 2019 David Redondo <kde@david-redondo.de>
0004 // SPDX-FileCopyrightText: 2023 Méven Car <meven@kde.org>
0005 // SPDX-FileCopyrightText: 2023 Devin Lin <devin@kde.org>
0006 // SPDX-License-Identifier: LGPL-2.0-or-later
0007 
0008 import QtQuick
0009 import QtQuick.Controls as QQC2
0010 import org.kde.plasma.private.mobileshell.wallpaperimageplugin as WallpaperImagePlugin
0011 
0012 QQC2.StackView {
0013     id: root
0014 
0015     property string wallpaperPlugin
0016     property string wallpaperPluginSource
0017     property var wallpaperPluginConfig
0018     property var wallpaperPluginModel
0019 
0020     property var configDialog: QtObject {
0021         property string currentWallpaper: root.wallpaperPlugin
0022     }
0023 
0024     function onConfigurationChanged() {
0025         for (var key in root.wallpaperPluginConfig) {
0026             const cfgKey = "cfg_" + key;
0027             if (root.currentItem[cfgKey] !== undefined) {
0028                 root.wallpaperPluginConfig[key] = root.currentItem[cfgKey]
0029             }
0030         }
0031     }
0032 
0033     onWallpaperPluginSourceChanged: {
0034         loadSourceFile();
0035     }
0036 
0037     onWallpaperPluginConfigChanged: {
0038         onWallpaperConfigurationChanged();
0039     }
0040     
0041     function onWallpaperConfigurationChanged() {
0042         let wallpaperConfig = root.wallpaperPluginConfig
0043         if (!wallpaperConfig || !root.currentItem) {
0044             return;
0045         }
0046         wallpaperConfig.keys().forEach(key => {
0047             const cfgKey = "cfg_" + key;
0048             if (cfgKey in root.currentItem) {
0049                 
0050                 var changedSignal = root.currentItem[cfgKey + "Changed"]
0051                 if (changedSignal) {
0052                     changedSignal.disconnect(root.onConfigurationChanged);
0053                 }
0054                 root.currentItem[cfgKey] = wallpaperConfig[key];
0055                 
0056                 changedSignal = root.currentItem[cfgKey + "Changed"]
0057                 if (changedSignal) {
0058                     changedSignal.connect(root.onConfigurationChanged)
0059                 }
0060             }                    
0061         })
0062     }
0063     
0064     function loadSourceFile() {
0065         let wallpaperConfig = root.wallpaperPluginConfig;
0066         let wallpaperPluginSource = root.wallpaperPluginSource;
0067 
0068         // BUG 407619: wallpaperConfig can be null before calling `ContainmentItem::loadWallpaper()`
0069         if (wallpaperConfig && wallpaperPluginSource) {
0070             var props = {
0071                 "configDialog": root.configDialog,
0072                 "wallpaperConfiguration": wallpaperConfig
0073             };
0074                                     
0075             wallpaperConfig.keys().forEach(key => {
0076                 // Preview is not part of the config, only of the WallpaperObject
0077                 if (!key.startsWith("Preview")) {
0078                     props["cfg_" + key] = wallpaperConfig[key];
0079                 }
0080             });
0081             
0082             var newItem = replace(Qt.resolvedUrl(wallpaperPluginSource), props)
0083                 
0084             wallpaperConfig.keys().forEach(key => {
0085                 const cfgKey = "cfg_" + key;
0086                 if (cfgKey in root.currentItem) {
0087                     var changedSignal = root.currentItem[cfgKey + "Changed"]
0088                     if (changedSignal) {
0089                         changedSignal.connect(root.onConfigurationChanged)
0090                     }
0091                 }
0092             });
0093 
0094             const configurationChangedSignal = newItem.configurationChanged
0095             if (configurationChangedSignal) {
0096                 configurationChangedSignal.connect(root.onConfigurationChanged)
0097             }
0098         } else {
0099             replace(emptyConfig)
0100         }
0101     }
0102 
0103     Item {
0104         id: emptyConfig
0105     }
0106 }