diff --git a/kcms/desktoptheme/kcm.cpp b/kcms/desktoptheme/kcm.cpp index ec6a92ac6..b4a5379de 100644 --- a/kcms/desktoptheme/kcm.cpp +++ b/kcms/desktoptheme/kcm.cpp @@ -1,323 +1,323 @@ /* This file is part of the KDE Project Copyright (c) 2014 Marco Martin Copyright (c) 2014 Vishesh Handa Copyright (c) 2016 David Rosca Copyright (c) 2018 Kai Uwe Broulik This library is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License version 2 as published by the Free Software Foundation. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with this library; see the file COPYING.LIB. If not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include "kcm.h" #include #include #include #include #include #include #include #include #include #include #include #include #include #include Q_LOGGING_CATEGORY(KCM_DESKTOP_THEME, "kcm_desktoptheme") K_PLUGIN_FACTORY_WITH_JSON(KCMDesktopThemeFactory, "kcm_desktoptheme.json", registerPlugin();) KCMDesktopTheme::KCMDesktopTheme(QObject *parent, const QVariantList &args) : KQuickAddons::ConfigModule(parent, args) , m_defaultTheme(new Plasma::Theme(this)) , m_haveThemeExplorerInstalled(false) { //This flag seems to be needed in order for QQuickWidget to work //see https://bugreports.qt-project.org/browse/QTBUG-40765 //also, it seems to work only if set in the kcm, not in the systemsettings' main qApp->setAttribute(Qt::AA_DontCreateNativeWidgetSiblings); qmlRegisterType(); - KAboutData* about = new KAboutData(QStringLiteral("kcm_desktoptheme"), i18n("Configure Desktop Theme"), + KAboutData* about = new KAboutData(QStringLiteral("kcm_desktoptheme"), i18n("Choose the Plasma theme"), QStringLiteral("0.1"), QString(), KAboutLicense::LGPL); about->addAuthor(i18n("David Rosca"), QString(), QStringLiteral("nowrep@gmail.com")); setAboutData(about); setButtons(Apply | Default | Help); m_model = new QStandardItemModel(this); QHash roles = m_model->roleNames(); roles[PluginNameRole] = QByteArrayLiteral("pluginName"); roles[ThemeNameRole] = QByteArrayLiteral("themeName"); roles[DescriptionRole] = QByteArrayLiteral("description"); roles[IsLocalRole] = QByteArrayLiteral("isLocal"); roles[PendingDeletionRole] = QByteArrayLiteral("pendingDeletion"); m_model->setItemRoleNames(roles); m_haveThemeExplorerInstalled = !QStandardPaths::findExecutable(QStringLiteral("plasmathemeexplorer")).isEmpty(); } KCMDesktopTheme::~KCMDesktopTheme() { delete m_defaultTheme; } QStandardItemModel *KCMDesktopTheme::desktopThemeModel() const { return m_model; } QString KCMDesktopTheme::selectedPlugin() const { return m_selectedPlugin; } void KCMDesktopTheme::setSelectedPlugin(const QString &plugin) { if (m_selectedPlugin == plugin) { return; } m_selectedPlugin = plugin; emit selectedPluginChanged(m_selectedPlugin); emit selectedPluginIndexChanged(); updateNeedsSave(); } int KCMDesktopTheme::selectedPluginIndex() const { const auto results = m_model->match(m_model->index(0, 0), PluginNameRole, m_selectedPlugin); if (results.count() == 1) { return results.first().row(); } return -1; } void KCMDesktopTheme::setPendingDeletion(int index, bool pending) { QModelIndex idx = m_model->index(index, 0); m_model->setData(idx, pending, PendingDeletionRole); if (pending && selectedPluginIndex() == index) { // move to the next non-pending theme const auto nonPending = m_model->match(idx, PendingDeletionRole, false); setSelectedPlugin(nonPending.first().data(PluginNameRole).toString()); } updateNeedsSave(); } void KCMDesktopTheme::getNewStuff(QQuickItem *ctx) { if (!m_newStuffDialog) { m_newStuffDialog = new KNS3::DownloadDialog(QStringLiteral("plasma-themes.knsrc")); m_newStuffDialog.data()->setWindowTitle(i18n("Download New Desktop Themes")); m_newStuffDialog->setWindowModality(Qt::WindowModal); m_newStuffDialog->winId(); // so it creates the windowHandle(); connect(m_newStuffDialog.data(), &KNS3::DownloadDialog::accepted, this, &KCMDesktopTheme::load); } if (ctx && ctx->window()) { m_newStuffDialog->windowHandle()->setTransientParent(ctx->window()); } m_newStuffDialog.data()->show(); } void KCMDesktopTheme::installThemeFromFile(const QUrl &file) { qCDebug(KCM_DESKTOP_THEME) << "Installing ... " << file; const QString program = QStringLiteral("kpackagetool5"); const QStringList arguments = { QStringLiteral("--type"), QStringLiteral("Plasma/Theme"), QStringLiteral("--install"), file.toLocalFile()}; qCDebug(KCM_DESKTOP_THEME) << program << arguments.join(QStringLiteral(" ")); QProcess *myProcess = new QProcess(this); connect(myProcess, static_cast(&QProcess::finished), this, [this, myProcess](int exitCode, QProcess::ExitStatus exitStatus) { Q_UNUSED(exitStatus); if (exitCode == 0) { emit showSuccessMessage(i18n("Theme installed successfully.")); load(); } else { Q_EMIT showErrorMessage(i18n("Theme installation failed.")); } }); connect(myProcess, static_cast(&QProcess::error), this, [this](QProcess::ProcessError e) { qCWarning(KCM_DESKTOP_THEME) << "Theme installation failed: " << e; Q_EMIT showErrorMessage(i18n("Theme installation failed.")); }); myProcess->start(program, arguments); } void KCMDesktopTheme::applyPlasmaTheme(QQuickItem *item, const QString &themeName) { if (!item) { return; } Plasma::Theme *theme = m_themes[themeName]; if (!theme) { theme = new Plasma::Theme(themeName, this); m_themes[themeName] = theme; } Q_FOREACH (Plasma::Svg *svg, item->findChildren()) { svg->setTheme(theme); svg->setUsingRenderingCache(false); } } void KCMDesktopTheme::load() { m_pendingRemoval.clear(); // Get all desktop themes QStringList themes; const QStringList &packs = QStandardPaths::locateAll(QStandardPaths::GenericDataLocation, QStringLiteral("plasma/desktoptheme"), QStandardPaths::LocateDirectory); Q_FOREACH (const QString &ppath, packs) { const QDir cd(ppath); const QStringList &entries = cd.entryList(QDir::Dirs | QDir::Hidden | QDir::NoDotAndDotDot); Q_FOREACH (const QString &pack, entries) { const QString _metadata = ppath + QLatin1Char('/') + pack + QStringLiteral("/metadata.desktop"); if (QFile::exists(_metadata)) { themes << _metadata; } } } m_model->clear(); Q_FOREACH (const QString &theme, themes) { int themeSepIndex = theme.lastIndexOf(QLatin1Char('/'), -1); const QString themeRoot = theme.left(themeSepIndex); int themeNameSepIndex = themeRoot.lastIndexOf(QLatin1Char('/'), -1); const QString packageName = themeRoot.right(themeRoot.length() - themeNameSepIndex - 1); KDesktopFile df(theme); if (df.noDisplay()) { continue; } QString name = df.readName(); if (name.isEmpty()) { name = packageName; } const bool isLocal = QFileInfo(theme).isWritable(); if (m_model->findItems(packageName).isEmpty()) { QStandardItem *item = new QStandardItem; item->setText(packageName); item->setData(packageName, PluginNameRole); item->setData(name, ThemeNameRole); item->setData(df.readComment(), DescriptionRole); item->setData(isLocal, IsLocalRole); item->setData(false, PendingDeletionRole); m_model->appendRow(item); } } KConfigGroup cg(KSharedConfig::openConfig(QStringLiteral("plasmarc")), "Theme"); setSelectedPlugin(cg.readEntry("name", m_defaultTheme->themeName())); updateNeedsSave(); } void KCMDesktopTheme::save() { if (m_defaultTheme->themeName() != m_selectedPlugin) { m_defaultTheme->setThemeName(m_selectedPlugin); } processPendingDeletions(); updateNeedsSave(); } void KCMDesktopTheme::defaults() { setSelectedPlugin(QStringLiteral("default")); // can this be done more elegantly? const auto pendingDeletions = m_model->match(m_model->index(0, 0), PendingDeletionRole, true); for (const QModelIndex &idx : pendingDeletions) { m_model->setData(idx, false, PendingDeletionRole); } } bool KCMDesktopTheme::canEditThemes() const { return m_haveThemeExplorerInstalled; } void KCMDesktopTheme::editTheme(const QString &theme) { QProcess::startDetached(QStringLiteral("plasmathemeexplorer -t ") % theme); } void KCMDesktopTheme::updateNeedsSave() { setNeedsSave(!m_model->match(m_model->index(0, 0), PendingDeletionRole, true).isEmpty() || m_selectedPlugin != m_defaultTheme->themeName()); } void KCMDesktopTheme::processPendingDeletions() { const QString program = QStringLiteral("plasmapkg2"); const auto pendingDeletions = m_model->match(m_model->index(0, 0), PendingDeletionRole, true, -1 /*all*/); QVector persistentPendingDeletions; // turn into persistent model index so we can delete as we go std::transform(pendingDeletions.begin(), pendingDeletions.end(), std::back_inserter(persistentPendingDeletions), [](const QModelIndex &idx) { return QPersistentModelIndex(idx); }); for (const QPersistentModelIndex &idx : persistentPendingDeletions) { const QString pluginName = idx.data(PluginNameRole).toString(); const QString displayName = idx.data(Qt::DisplayRole).toString(); Q_ASSERT(pluginName != m_selectedPlugin); const QStringList arguments = {QStringLiteral("-t"), QStringLiteral("theme"), QStringLiteral("-r"), pluginName}; QProcess *process = new QProcess(this); connect(process, static_cast(&QProcess::finished), this, [this, process, idx, pluginName, displayName](int exitCode, QProcess::ExitStatus exitStatus) { Q_UNUSED(exitStatus); if (exitCode == 0) { m_model->removeRow(idx.row()); } else { emit showErrorMessage(i18n("Removing theme failed: %1", QString::fromLocal8Bit(process->readAllStandardOutput().trimmed()))); m_model->setData(idx, false, PendingDeletionRole); } process->deleteLater(); }); process->start(program, arguments); process->waitForFinished(); // needed so it deletes fine when "OK" is clicked and the dialog destroyed } } #include "kcm.moc" diff --git a/kcms/desktoptheme/kcm_desktoptheme.desktop b/kcms/desktoptheme/kcm_desktoptheme.desktop index bf5e224e8..30f314bf9 100644 --- a/kcms/desktoptheme/kcm_desktoptheme.desktop +++ b/kcms/desktoptheme/kcm_desktoptheme.desktop @@ -1,175 +1,175 @@ [Desktop Entry] -Icon=preferences-desktop +Icon=preferences-desktop-plasma Exec=kcmshell5 kcm_desktoptheme Type=Service X-KDE-ServiceTypes=KCModule X-KDE-Library=kcm_desktoptheme X-KDE-ParentApp=kcontrol X-KDE-System-Settings-Parent-Category=workspacetheme X-KDE-Weight=40 X-DocPath=kcontrol/desktopthemedetails/index.html -Name=Desktop Theme +Name=Plasma Theme Name[ar]=سمة سطح المكتب Name[bg]=Тема за работния плот Name[bn]=ডেস্কটপ থীম Name[bs]=Tema površi Name[ca]=Tema d'escriptori Name[ca@valencia]=Tema d'escriptori Name[cs]=Motiv plochy Name[da]=Skrivebordstema Name[de]=Arbeitsflächen-Design Name[el]=Θέμα επιφάνειας εργασίας Name[en_GB]=Desktop Theme Name[es]=Tema de escritorio Name[et]=Töölauateema Name[eu]=Mahaigaineko gaia Name[fi]=Työpöytäteema Name[fr]=Thème de bureau Name[ga]=Téama Deisce Name[gl]=Tema de escritorio Name[gu]=ડેસ્કટોપ થીમ Name[he]=ערכת־הנושא לשולחן־העבודה Name[hi]=डेस्कटॉप प्रसंग Name[hr]=Tema radne površine Name[hu]=Asztali téma Name[ia]=Thema de scriptorio Name[id]=Tema Desktop Name[is]=Skjáborðsþema Name[it]=Tema del desktop Name[ja]=デスクトップテーマ Name[kk]=Үстел нақышы Name[km]=ស្បែក​ផ្ទៃតុ Name[kn]=ಗಣಕತೆರೆ ಪರಿಸರವಿನ್ಯಾಸ Name[ko]=데스크톱 테마 Name[lt]=Darbalaukio apipavidalinimas Name[lv]=Darbvirsmas tēma Name[mr]=डेस्कटॉप शैली Name[nb]=Skrivebordstema Name[nds]=Schriefdischmuster Name[nl]=Bureaubladthema Name[nn]=Skrivebordstema Name[pa]=ਡੈਸਕਟਾਪ ਥੀਮ Name[pl]=Wygląd pulpitu Name[pt]=Tema do Ambiente de Trabalho Name[pt_BR]=Tema da área de trabalho Name[ro]=Tematica de birou Name[ru]=Тема рабочего стола Name[si]=වැඩතල තේමාව Name[sk]=Téma plochy Name[sl]=Namizna tema Name[sr]=Тема површи Name[sr@ijekavian]=Тема површи Name[sr@ijekavianlatin]=Tema površi Name[sr@latin]=Tema površi Name[sv]=Skrivbordstema Name[tg]=Мавзӯъи мизи корӣ Name[th]=ชุดตกแต่งพื้นที่ทำงาน Name[tr]=Masaüstü Teması Name[ug]=ئۈستەلئۈستى ئۆرنىكى Name[uk]=Тема стільниці Name[vi]=Sắc thái màn hình Name[wa]=Tinme do scribanne Name[x-test]=xxDesktop Themexx Name[zh_CN]=Desktop Theme,桌面主题 Name[zh_TW]=桌面主題 -Comment=Desktop Theme +Comment=Choose the Plasma theme Comment[ar]=سمة سطح المكتب Comment[bs]=Tema radne površine Comment[ca]=Tema d'escriptori Comment[ca@valencia]=Tema d'escriptori Comment[cs]=Motiv plochy Comment[da]=Skrivebordstema Comment[de]=Arbeitsflächen-Design Comment[el]=Θέμα επιφάνειας εργασίας Comment[en_GB]=Desktop Theme Comment[es]=Tema de escritorio Comment[et]=Töölauateema Comment[eu]=Mahaigaineko gaia Comment[fi]=Työpöytäteema Comment[fr]=Thème de bureau Comment[gl]=Tema do escritorio Comment[he]=ערכת־הנושא לשולחן־העבודה Comment[hu]=Asztali téma Comment[id]=Tema Desktop Comment[is]=Skjáborðsþema Comment[it]=Tema del desktop Comment[ja]=デスクトップテーマ Comment[ko]=데스크톱 테마 Comment[lt]=Darbalaukio apipavidalinimas Comment[mr]=डेस्कटॉप शैली Comment[nb]=Skrivebordstema Comment[nds]=Schriefdischmuster Comment[nl]=Bureaubladthema Comment[nn]=Skrivebordstema Comment[pa]=ਡੈਸਕਟਾਪ ਥੀਮ Comment[pl]=Wygląd pulpitu Comment[pt]=Tema do Ambiente de Trabalho Comment[pt_BR]=Tema da área de trabalho Comment[ru]=Тема рабочего стола Comment[sk]=Téma plochy Comment[sl]=Namizna tema Comment[sr]=Тема површи Comment[sr@ijekavian]=Тема површи Comment[sr@ijekavianlatin]=Tema površi Comment[sr@latin]=Tema površi Comment[sv]=Skrivbordstema Comment[tr]=Masaüstü Teması Comment[uk]=Тема стільниці Comment[x-test]=xxDesktop Themexx Comment[zh_CN]=Desktop Theme,桌面主题 Comment[zh_TW]=桌面主題 X-KDE-Keywords=Desktop Theme X-KDE-Keywords[ar]=سمة سطح المكتب X-KDE-Keywords[bs]=Tema površi X-KDE-Keywords[ca]=Tema d'escriptori X-KDE-Keywords[ca@valencia]=Tema d'escriptori X-KDE-Keywords[cs]=Motiv plochy X-KDE-Keywords[da]=Skrivebordstema X-KDE-Keywords[de]=Arbeitsflächen-Design X-KDE-Keywords[el]=Θέμα επιφάνειας εργασίας X-KDE-Keywords[en_GB]=Desktop Theme X-KDE-Keywords[es]=Tema de escritorio X-KDE-Keywords[et]=Töölauateema X-KDE-Keywords[eu]=Mahaigaineko gaia X-KDE-Keywords[fi]=Työpöytäteema X-KDE-Keywords[fr]=Thème du bureau X-KDE-Keywords[ga]=Téama Deisce X-KDE-Keywords[gl]=Tema do escritorio X-KDE-Keywords[he]=ערכת־הנושא X-KDE-Keywords[hu]=Asztali téma X-KDE-Keywords[ia]=Thema de scriptorio X-KDE-Keywords[id]=Tema Desktop X-KDE-Keywords[is]=Skjáborðsþema X-KDE-Keywords[it]=Tema del desktop X-KDE-Keywords[ja]=デスクトップテーマ X-KDE-Keywords[kk]=Desktop Theme,Үстел нақышы X-KDE-Keywords[km]=រូបរាង​ផ្ទៃតុ X-KDE-Keywords[ko]=데스크톱 테마 X-KDE-Keywords[lt]=Darbalaukio apipavidalinimas X-KDE-Keywords[mr]=डेस्कटॉप शैली X-KDE-Keywords[nb]=Skrivebordstema X-KDE-Keywords[nds]=Schriefdischmuster X-KDE-Keywords[nl]=Bureaubladthema X-KDE-Keywords[nn]=Skrivebordstema X-KDE-Keywords[pa]=ਡੈਸਕਟਾਪ ਥੀਮ X-KDE-Keywords[pl]=Wygląd pulpitu X-KDE-Keywords[pt]=Tema do Ambiente de Trabalho X-KDE-Keywords[pt_BR]=Tema da área de trabalho X-KDE-Keywords[ro]=Tematica de birou X-KDE-Keywords[ru]=Тема рабочего стола X-KDE-Keywords[sk]=Téma plochy X-KDE-Keywords[sl]=Namizna tema X-KDE-Keywords[sr]=Desktop Theme,тема површи X-KDE-Keywords[sr@ijekavian]=Desktop Theme,тема површи X-KDE-Keywords[sr@ijekavianlatin]=Desktop Theme,tema površi X-KDE-Keywords[sr@latin]=Desktop Theme,tema površi X-KDE-Keywords[sv]=Skrivbordstema X-KDE-Keywords[tr]=Masaüstü Teması X-KDE-Keywords[ug]=ئۈستەلئۈستى ئۆرنىكى X-KDE-Keywords[uk]=тема,стільниця X-KDE-Keywords[vi]=Sắc thái màn hình X-KDE-Keywords[x-test]=xxDesktop Themexx X-KDE-Keywords[zh_CN]=Desktop Theme,桌面主题 X-KDE-Keywords[zh_TW]=Desktop Theme diff --git a/kcms/desktoptheme/package/contents/ui/main.qml b/kcms/desktoptheme/package/contents/ui/main.qml index 953cace62..f3058f4a2 100644 --- a/kcms/desktoptheme/package/contents/ui/main.qml +++ b/kcms/desktoptheme/package/contents/ui/main.qml @@ -1,164 +1,164 @@ /* Copyright (c) 2014 Marco Martin Copyright (c) 2016 David Rosca Copyright (c) 2018 Kai Uwe Broulik This library is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License version 2 as published by the Free Software Foundation. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with this library; see the file COPYING.LIB. If not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ import QtQuick 2.1 import QtQuick.Layouts 1.1 import QtQuick.Dialogs 1.0 import QtQuick.Controls 2.3 as QtControls import org.kde.kirigami 2.4 as Kirigami import org.kde.kconfig 1.0 // for KAuthorized import org.kde.kcm 1.1 as KCM KCM.GridViewKCM { - KCM.ConfigModule.quickHelp: i18n("This module lets you configure the desktop theme.") + KCM.ConfigModule.quickHelp: i18n("This module lets you choose the Plasma theme.") view.model: kcm.desktopThemeModel view.currentIndex: kcm.selectedPluginIndex DropArea { anchors.fill: parent onEntered: { if (!drag.hasUrls) { drag.accepted = false; } } onDropped: kcm.installThemeFromFile(drop.urls[0]) } view.remove: Transition { ParallelAnimation { NumberAnimation { property: "scale"; to: 0.5; duration: Kirigami.Units.longDuration } NumberAnimation { property: "opacity"; to: 0.0; duration: Kirigami.Units.longDuration } } } view.removeDisplaced: Transition { SequentialAnimation { // wait for the "remove" animation to finish PauseAnimation { duration: Kirigami.Units.longDuration } NumberAnimation { properties: "x,y"; duration: Kirigami.Units.longDuration } } } view.delegate: KCM.GridDelegate { id: delegate text: model.themeName toolTip: model.description || model.themeName opacity: model.pendingDeletion ? 0.3 : 1 Behavior on opacity { NumberAnimation { duration: Kirigami.Units.longDuration } } thumbnailAvailable: true thumbnail: ThemePreview { id: preview anchors.fill: parent themeName: model.pluginName } actions: [ Kirigami.Action { iconName: "document-edit" tooltip: i18n("Edit Theme") enabled: !model.pendingDeletion visible: kcm.canEditThemes onTriggered: kcm.editTheme(model.pluginName) }, Kirigami.Action { iconName: "edit-delete" tooltip: i18n("Remove Theme") enabled: model.isLocal visible: !model.pendingDeletion onTriggered: kcm.setPendingDeletion(model.index, true); }, Kirigami.Action { iconName: "edit-undo" tooltip: i18n("Restore Theme") visible: model.pendingDeletion onTriggered: kcm.setPendingDeletion(model.index, false); } ] onClicked: { kcm.selectedPlugin = model.pluginName; view.forceActiveFocus(); } } footer: ColumnLayout { Kirigami.InlineMessage { id: infoLabel Layout.fillWidth: true showCloseButton: true Connections { target: kcm onShowSuccessMessage: { infoLabel.type = Kirigami.MessageType.Positive; infoLabel.text = message; infoLabel.visible = true; } onShowErrorMessage: { infoLabel.type = Kirigami.MessageType.Error; infoLabel.text = message; infoLabel.visible = true; } } } RowLayout { Layout.alignment: Qt.AlignRight QtControls.Button { text: i18n("Install from File...") icon.name: "document-import" onClicked: fileDialogLoader.active = true; } QtControls.Button { - text: i18n("Get New Desktop Themes...") + text: i18n("Get New Plasma Themes...") icon.name: "get-hot-new-stuff" onClicked: kcm.getNewStuff(this) visible: KAuthorized.authorize("ghns") } } } Loader { id: fileDialogLoader active: false sourceComponent: FileDialog { title: i18n("Open Theme") folder: shortcuts.home nameFilters: [ i18n("Theme Files (*.zip *.tar.gz *.tar.bz2)") ] Component.onCompleted: open() onAccepted: { kcm.installThemeFromFile(fileUrls[0]) fileDialogLoader.active = false } onRejected: { fileDialogLoader.active = false } } } } diff --git a/kcms/desktoptheme/package/metadata.desktop b/kcms/desktoptheme/package/metadata.desktop index 07ee98d8c..0df3302e2 100644 --- a/kcms/desktoptheme/package/metadata.desktop +++ b/kcms/desktoptheme/package/metadata.desktop @@ -1,125 +1,125 @@ [Desktop Entry] -Name=Desktop Theme +Name=Plasma Theme Name[ar]=سمة سطح المكتب Name[bg]=Тема за работния плот Name[bn]=ডেস্কটপ থীম Name[bs]=Tema površi Name[ca]=Tema d'escriptori Name[ca@valencia]=Tema d'escriptori Name[cs]=Motiv plochy Name[da]=Skrivebordstema Name[de]=Arbeitsflächen-Design Name[el]=Θέμα επιφάνειας εργασίας Name[en_GB]=Desktop Theme Name[es]=Tema de escritorio Name[et]=Töölauateema Name[eu]=Mahaigaineko gaia Name[fi]=Työpöytäteema Name[fr]=Thème de bureau Name[ga]=Téama Deisce Name[gl]=Tema de escritorio Name[gu]=ડેસ્કટોપ થીમ Name[he]=ערכת־הנושא לשולחן־העבודה Name[hi]=डेस्कटॉप प्रसंग Name[hr]=Tema radne površine Name[hu]=Asztali téma Name[ia]=Thema de scriptorio Name[id]=Tema Desktop Name[is]=Skjáborðsþema Name[it]=Tema del desktop Name[ja]=デスクトップテーマ Name[kk]=Үстел нақышы Name[km]=ស្បែក​ផ្ទៃតុ Name[kn]=ಗಣಕತೆರೆ ಪರಿಸರವಿನ್ಯಾಸ Name[ko]=데스크톱 테마 Name[lt]=Darbalaukio apipavidalinimas Name[lv]=Darbvirsmas tēma Name[mr]=डेस्कटॉप शैली Name[nb]=Skrivebordstema Name[nds]=Schriefdischmuster Name[nl]=Bureaubladthema Name[nn]=Skrivebordstema Name[pa]=ਡੈਸਕਟਾਪ ਥੀਮ Name[pl]=Wygląd pulpitu Name[pt]=Tema do Ambiente de Trabalho Name[pt_BR]=Tema da área de trabalho Name[ro]=Tematica de birou Name[ru]=Тема рабочего стола Name[si]=වැඩතල තේමාව Name[sk]=Téma plochy Name[sl]=Namizna tema Name[sr]=Тема површи Name[sr@ijekavian]=Тема површи Name[sr@ijekavianlatin]=Tema površi Name[sr@latin]=Tema površi Name[sv]=Skrivbordstema Name[tg]=Мавзӯъи мизи корӣ Name[th]=ชุดตกแต่งพื้นที่ทำงาน Name[tr]=Masaüstü Teması Name[ug]=ئۈستەلئۈستى ئۆرنىكى Name[uk]=Тема стільниці Name[vi]=Sắc thái màn hình Name[wa]=Tinme do scribanne Name[x-test]=xxDesktop Themexx Name[zh_CN]=Desktop Theme,桌面主题 Name[zh_TW]=桌面主題 -Comment=Desktop Theme +Comment=Choose the Plasma theme Comment[ar]=سمة سطح المكتب Comment[bs]=Tema radne površine Comment[ca]=Tema d'escriptori Comment[ca@valencia]=Tema d'escriptori Comment[cs]=Motiv plochy Comment[da]=Skrivebordstema Comment[de]=Arbeitsflächen-Design Comment[el]=Θέμα επιφάνειας εργασίας Comment[en_GB]=Desktop Theme Comment[es]=Tema de escritorio Comment[et]=Töölauateema Comment[eu]=Mahaigaineko gaia Comment[fi]=Työpöytäteema Comment[fr]=Thème de bureau Comment[gl]=Tema do escritorio Comment[he]=ערכת־הנושא לשולחן־העבודה Comment[hu]=Asztali téma Comment[id]=Tema Desktop Comment[is]=Skjáborðsþema Comment[it]=Tema del desktop Comment[ja]=デスクトップテーマ Comment[ko]=데스크톱 테마 Comment[lt]=Darbalaukio apipavidalinimas Comment[mr]=डेस्कटॉप शैली Comment[nb]=Skrivebordstema Comment[nds]=Schriefdischmuster Comment[nl]=Bureaubladthema Comment[nn]=Skrivebordstema Comment[pa]=ਡੈਸਕਟਾਪ ਥੀਮ Comment[pl]=Wygląd pulpitu Comment[pt]=Tema do Ambiente de Trabalho Comment[pt_BR]=Tema da área de trabalho Comment[ru]=Тема рабочего стола Comment[sk]=Téma plochy Comment[sl]=Namizna tema Comment[sr]=Тема површи Comment[sr@ijekavian]=Тема површи Comment[sr@ijekavianlatin]=Tema površi Comment[sr@latin]=Tema površi Comment[sv]=Skrivbordstema Comment[tr]=Masaüstü Teması Comment[uk]=Тема стільниці Comment[x-test]=xxDesktop Themexx Comment[zh_CN]=Desktop Theme,桌面主题 Comment[zh_TW]=桌面主題 Icon=preferences-desktop-theme Keywords= Type=Service X-KDE-ParentApp= X-KDE-PluginInfo-Author=David Rosca X-KDE-PluginInfo-Email=nowrep@gmail.com X-KDE-PluginInfo-License=GPL-2.0+ X-KDE-PluginInfo-Name=kcm_desktoptheme X-KDE-PluginInfo-Version= X-KDE-PluginInfo-Website=https://www.kde.org/plasma-desktop X-KDE-ServiceTypes=Plasma/Generic X-Plasma-API=declarativeappletscript X-Plasma-MainScript=ui/main.qml