1309 lines
46 KiB
Diff
1309 lines
46 KiB
Diff
diff --git a/shell/packageplugins/CMakeLists.txt b/shell/packageplugins/CMakeLists.txt
|
|
index 54b8c89..16ea8c0 100644
|
|
--- a/shell/packageplugins/CMakeLists.txt
|
|
+++ b/shell/packageplugins/CMakeLists.txt
|
|
@@ -1,5 +1,4 @@
|
|
add_subdirectory(layouttemplate)
|
|
add_subdirectory(lookandfeel)
|
|
add_subdirectory(shell)
|
|
-add_subdirectory(qmlWallpaper)
|
|
-add_subdirectory(wallpaperimages)
|
|
+add_subdirectory(wallpaper)
|
|
diff --git a/shell/packageplugins/qmlWallpaper/CMakeLists.txt b/shell/packageplugins/qmlWallpaper/CMakeLists.txt
|
|
deleted file mode 100644
|
|
index 5f9f871..0000000
|
|
--- a/shell/packageplugins/qmlWallpaper/CMakeLists.txt
|
|
+++ /dev/null
|
|
@@ -1,17 +0,0 @@
|
|
-add_definitions(-DTRANSLATION_DOMAIN=\"plasma_package_wallpaper\")
|
|
-
|
|
-set(wallpaper_SRCS
|
|
- wallpaper.cpp
|
|
-)
|
|
-
|
|
-add_library(plasma_packagestructure_wallpaper MODULE ${wallpaper_SRCS})
|
|
-
|
|
-target_link_libraries(plasma_packagestructure_wallpaper
|
|
- KF5::Declarative
|
|
- KF5::I18n
|
|
- KF5::Plasma
|
|
-)
|
|
-
|
|
-kservice_desktop_to_json(plasma_packagestructure_wallpaper plasma-packagestructure-wallpaper.desktop)
|
|
-
|
|
-install(TARGETS plasma_packagestructure_wallpaper DESTINATION ${PLUGIN_INSTALL_DIR}/plasma/packagestructure)
|
|
diff --git a/shell/packageplugins/qmlWallpaper/plasma-packagestructure-wallpaper.desktop b/shell/packageplugins/qmlWallpaper/plasma-packagestructure-wallpaper.desktop
|
|
deleted file mode 100644
|
|
index bb6ce31..0000000
|
|
--- a/shell/packageplugins/qmlWallpaper/plasma-packagestructure-wallpaper.desktop
|
|
+++ /dev/null
|
|
@@ -1,36 +0,0 @@
|
|
-[Desktop Entry]
|
|
-Name=Wallpaper
|
|
-Name[ca]=Fons d'escriptori
|
|
-Name[cs]=Tapeta
|
|
-Name[da]=Baggrundsbillede
|
|
-Name[de]=Hintergrundbild
|
|
-Name[en_GB]=Wallpaper
|
|
-Name[es]=Fondo del escritorio
|
|
-Name[fi]=Tausta
|
|
-Name[hu]=Háttérkép
|
|
-Name[ko]=배경 그림
|
|
-Name[nb]=Tapet
|
|
-Name[nds]=Achtergrundbild
|
|
-Name[nl]=Achtergrondafbeelding
|
|
-Name[pl]=Tapeta
|
|
-Name[pt]=Papel de Parede
|
|
-Name[pt_BR]=Papel de parede
|
|
-Name[ru]=Обои
|
|
-Name[sk]=Tapeta
|
|
-Name[sl]=Slika ozadja
|
|
-Name[sr]=Тапет
|
|
-Name[sr@ijekavian]=Тапет
|
|
-Name[sr@ijekavianlatin]=Tapet
|
|
-Name[sr@latin]=Tapet
|
|
-Name[sv]=Skrivbordsunderlägg
|
|
-Name[uk]=Зображення тла
|
|
-Name[x-test]=xxWallpaperxx
|
|
-Name[zh_TW]=桌布
|
|
-Type=Service
|
|
-X-KDE-ServiceTypes=Plasma/PackageStructure
|
|
-X-KDE-Library=plasma_packagestructure_wallpaper
|
|
-
|
|
-X-KDE-PluginInfo-Author=Marco Martin
|
|
-X-KDE-PluginInfo-Email=notmart@gmail.com
|
|
-X-KDE-PluginInfo-Name=Plasma/Wallpaper
|
|
-X-KDE-PluginInfo-Version=1
|
|
diff --git a/shell/packageplugins/qmlWallpaper/wallpaper.cpp b/shell/packageplugins/qmlWallpaper/wallpaper.cpp
|
|
deleted file mode 100644
|
|
index 4aa8c2a..0000000
|
|
--- a/shell/packageplugins/qmlWallpaper/wallpaper.cpp
|
|
+++ /dev/null
|
|
@@ -1,72 +0,0 @@
|
|
-/******************************************************************************
|
|
-* Copyright 2007-2009 by Aaron Seigo <aseigo@kde.org> *
|
|
-* Copyright 2013 by Sebastian Kügler <sebas@kde.org> *
|
|
-* *
|
|
-* This library is free software; you can redistribute it and/or *
|
|
-* modify it under the terms of the GNU Library General Public *
|
|
-* License as published by the Free Software Foundation; either *
|
|
-* version 2 of the License, or (at your option) any later version. *
|
|
-* *
|
|
-* 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 "wallpaper.h"
|
|
-
|
|
-
|
|
-#include <KLocalizedString>
|
|
-#include <KDeclarative/KDeclarative>
|
|
-
|
|
-void QmlWallpaperPackage::initPackage(Plasma::Package *package)
|
|
-{
|
|
- package->addFileDefinition("mainscript", "ui/main.qml", i18n("Main Script File"));
|
|
- package->setRequired("mainscript", true);
|
|
-
|
|
- QStringList platform = KDeclarative::KDeclarative::runtimePlatform();
|
|
- if (!platform.isEmpty()) {
|
|
- QMutableStringListIterator it(platform);
|
|
- while (it.hasNext()) {
|
|
- it.next();
|
|
- it.setValue("platformcontents/" + it.value());
|
|
- }
|
|
-
|
|
- platform.append("contents");
|
|
- package->setContentsPrefixPaths(platform);
|
|
- }
|
|
-
|
|
- package->setDefaultPackageRoot("plasma/wallpapers/");
|
|
-
|
|
- package->addDirectoryDefinition("images", "images", i18n("Images"));
|
|
- package->addDirectoryDefinition("theme", "theme", i18n("Themed Images"));
|
|
- QStringList mimetypes;
|
|
- mimetypes << "image/svg+xml" << "image/png" << "image/jpeg";
|
|
- package->setMimeTypes("images", mimetypes);
|
|
- package->setMimeTypes("theme", mimetypes);
|
|
-
|
|
- package->addDirectoryDefinition("config", "config", i18n("Configuration Definitions"));
|
|
- mimetypes.clear();
|
|
- mimetypes << "text/xml";
|
|
- package->setMimeTypes("config", mimetypes);
|
|
-
|
|
- package->addDirectoryDefinition("ui", "ui", i18n("User Interface"));
|
|
-
|
|
- package->addDirectoryDefinition("data", "data", i18n("Data Files"));
|
|
-
|
|
- package->addDirectoryDefinition("scripts", "code", i18n("Executable Scripts"));
|
|
- mimetypes.clear();
|
|
- mimetypes << "text/plain";
|
|
- package->setMimeTypes("scripts", mimetypes);
|
|
-
|
|
- package->addDirectoryDefinition("translations", "locale", i18n("Translations"));
|
|
-}
|
|
-
|
|
-K_EXPORT_PLASMA_PACKAGE_WITH_JSON(QmlWallpaperPackage, "plasma-packagestructure-wallpaper.json")
|
|
-
|
|
-#include "wallpaper.moc"
|
|
diff --git a/shell/packageplugins/qmlWallpaper/wallpaper.h b/shell/packageplugins/qmlWallpaper/wallpaper.h
|
|
deleted file mode 100644
|
|
index f3cd5d6..0000000
|
|
--- a/shell/packageplugins/qmlWallpaper/wallpaper.h
|
|
+++ /dev/null
|
|
@@ -1,34 +0,0 @@
|
|
-/******************************************************************************
|
|
-* Copyright 2007 by Aaron Seigo <aseigo@kde.org> *
|
|
-* Copyright 2013 by Marco Martin <mart@kde.org> *
|
|
-* Copyright 2013 by Sebastian Kügler <sebas@kde.org> *
|
|
-* *
|
|
-* This library is free software; you can redistribute it and/or *
|
|
-* modify it under the terms of the GNU Library General Public *
|
|
-* License as published by the Free Software Foundation; either *
|
|
-* version 2 of the License, or (at your option) any later version. *
|
|
-* *
|
|
-* 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. *
|
|
-*******************************************************************************/
|
|
-
|
|
-#ifndef WALLPAPER_H
|
|
-#define WALLPAPER_H
|
|
-
|
|
-#include <Plasma/PackageStructure>
|
|
-
|
|
-class QmlWallpaperPackage : public Plasma::PackageStructure
|
|
-{
|
|
-public:
|
|
- QmlWallpaperPackage(QObject*, const QVariantList &) {}
|
|
- void initPackage(Plasma::Package *package);
|
|
-};
|
|
-
|
|
-#endif
|
|
diff --git a/shell/packageplugins/wallpaper/CMakeLists.txt b/shell/packageplugins/wallpaper/CMakeLists.txt
|
|
new file mode 100644
|
|
index 0000000..5f9f871
|
|
--- /dev/null
|
|
+++ b/shell/packageplugins/wallpaper/CMakeLists.txt
|
|
@@ -0,0 +1,17 @@
|
|
+add_definitions(-DTRANSLATION_DOMAIN=\"plasma_package_wallpaper\")
|
|
+
|
|
+set(wallpaper_SRCS
|
|
+ wallpaper.cpp
|
|
+)
|
|
+
|
|
+add_library(plasma_packagestructure_wallpaper MODULE ${wallpaper_SRCS})
|
|
+
|
|
+target_link_libraries(plasma_packagestructure_wallpaper
|
|
+ KF5::Declarative
|
|
+ KF5::I18n
|
|
+ KF5::Plasma
|
|
+)
|
|
+
|
|
+kservice_desktop_to_json(plasma_packagestructure_wallpaper plasma-packagestructure-wallpaper.desktop)
|
|
+
|
|
+install(TARGETS plasma_packagestructure_wallpaper DESTINATION ${PLUGIN_INSTALL_DIR}/plasma/packagestructure)
|
|
diff --git a/shell/packageplugins/wallpaper/plasma-packagestructure-wallpaper.desktop b/shell/packageplugins/wallpaper/plasma-packagestructure-wallpaper.desktop
|
|
new file mode 100644
|
|
index 0000000..bb6ce31
|
|
--- /dev/null
|
|
+++ b/shell/packageplugins/wallpaper/plasma-packagestructure-wallpaper.desktop
|
|
@@ -0,0 +1,36 @@
|
|
+[Desktop Entry]
|
|
+Name=Wallpaper
|
|
+Name[ca]=Fons d'escriptori
|
|
+Name[cs]=Tapeta
|
|
+Name[da]=Baggrundsbillede
|
|
+Name[de]=Hintergrundbild
|
|
+Name[en_GB]=Wallpaper
|
|
+Name[es]=Fondo del escritorio
|
|
+Name[fi]=Tausta
|
|
+Name[hu]=Háttérkép
|
|
+Name[ko]=배경 그림
|
|
+Name[nb]=Tapet
|
|
+Name[nds]=Achtergrundbild
|
|
+Name[nl]=Achtergrondafbeelding
|
|
+Name[pl]=Tapeta
|
|
+Name[pt]=Papel de Parede
|
|
+Name[pt_BR]=Papel de parede
|
|
+Name[ru]=Обои
|
|
+Name[sk]=Tapeta
|
|
+Name[sl]=Slika ozadja
|
|
+Name[sr]=Тапет
|
|
+Name[sr@ijekavian]=Тапет
|
|
+Name[sr@ijekavianlatin]=Tapet
|
|
+Name[sr@latin]=Tapet
|
|
+Name[sv]=Skrivbordsunderlägg
|
|
+Name[uk]=Зображення тла
|
|
+Name[x-test]=xxWallpaperxx
|
|
+Name[zh_TW]=桌布
|
|
+Type=Service
|
|
+X-KDE-ServiceTypes=Plasma/PackageStructure
|
|
+X-KDE-Library=plasma_packagestructure_wallpaper
|
|
+
|
|
+X-KDE-PluginInfo-Author=Marco Martin
|
|
+X-KDE-PluginInfo-Email=notmart@gmail.com
|
|
+X-KDE-PluginInfo-Name=Plasma/Wallpaper
|
|
+X-KDE-PluginInfo-Version=1
|
|
diff --git a/shell/packageplugins/wallpaper/wallpaper.cpp b/shell/packageplugins/wallpaper/wallpaper.cpp
|
|
new file mode 100644
|
|
index 0000000..4aa8c2a
|
|
--- /dev/null
|
|
+++ b/shell/packageplugins/wallpaper/wallpaper.cpp
|
|
@@ -0,0 +1,72 @@
|
|
+/******************************************************************************
|
|
+* Copyright 2007-2009 by Aaron Seigo <aseigo@kde.org> *
|
|
+* Copyright 2013 by Sebastian Kügler <sebas@kde.org> *
|
|
+* *
|
|
+* This library is free software; you can redistribute it and/or *
|
|
+* modify it under the terms of the GNU Library General Public *
|
|
+* License as published by the Free Software Foundation; either *
|
|
+* version 2 of the License, or (at your option) any later version. *
|
|
+* *
|
|
+* 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 "wallpaper.h"
|
|
+
|
|
+
|
|
+#include <KLocalizedString>
|
|
+#include <KDeclarative/KDeclarative>
|
|
+
|
|
+void QmlWallpaperPackage::initPackage(Plasma::Package *package)
|
|
+{
|
|
+ package->addFileDefinition("mainscript", "ui/main.qml", i18n("Main Script File"));
|
|
+ package->setRequired("mainscript", true);
|
|
+
|
|
+ QStringList platform = KDeclarative::KDeclarative::runtimePlatform();
|
|
+ if (!platform.isEmpty()) {
|
|
+ QMutableStringListIterator it(platform);
|
|
+ while (it.hasNext()) {
|
|
+ it.next();
|
|
+ it.setValue("platformcontents/" + it.value());
|
|
+ }
|
|
+
|
|
+ platform.append("contents");
|
|
+ package->setContentsPrefixPaths(platform);
|
|
+ }
|
|
+
|
|
+ package->setDefaultPackageRoot("plasma/wallpapers/");
|
|
+
|
|
+ package->addDirectoryDefinition("images", "images", i18n("Images"));
|
|
+ package->addDirectoryDefinition("theme", "theme", i18n("Themed Images"));
|
|
+ QStringList mimetypes;
|
|
+ mimetypes << "image/svg+xml" << "image/png" << "image/jpeg";
|
|
+ package->setMimeTypes("images", mimetypes);
|
|
+ package->setMimeTypes("theme", mimetypes);
|
|
+
|
|
+ package->addDirectoryDefinition("config", "config", i18n("Configuration Definitions"));
|
|
+ mimetypes.clear();
|
|
+ mimetypes << "text/xml";
|
|
+ package->setMimeTypes("config", mimetypes);
|
|
+
|
|
+ package->addDirectoryDefinition("ui", "ui", i18n("User Interface"));
|
|
+
|
|
+ package->addDirectoryDefinition("data", "data", i18n("Data Files"));
|
|
+
|
|
+ package->addDirectoryDefinition("scripts", "code", i18n("Executable Scripts"));
|
|
+ mimetypes.clear();
|
|
+ mimetypes << "text/plain";
|
|
+ package->setMimeTypes("scripts", mimetypes);
|
|
+
|
|
+ package->addDirectoryDefinition("translations", "locale", i18n("Translations"));
|
|
+}
|
|
+
|
|
+K_EXPORT_PLASMA_PACKAGE_WITH_JSON(QmlWallpaperPackage, "plasma-packagestructure-wallpaper.json")
|
|
+
|
|
+#include "wallpaper.moc"
|
|
diff --git a/shell/packageplugins/wallpaper/wallpaper.h b/shell/packageplugins/wallpaper/wallpaper.h
|
|
new file mode 100644
|
|
index 0000000..f3cd5d6
|
|
--- /dev/null
|
|
+++ b/shell/packageplugins/wallpaper/wallpaper.h
|
|
@@ -0,0 +1,34 @@
|
|
+/******************************************************************************
|
|
+* Copyright 2007 by Aaron Seigo <aseigo@kde.org> *
|
|
+* Copyright 2013 by Marco Martin <mart@kde.org> *
|
|
+* Copyright 2013 by Sebastian Kügler <sebas@kde.org> *
|
|
+* *
|
|
+* This library is free software; you can redistribute it and/or *
|
|
+* modify it under the terms of the GNU Library General Public *
|
|
+* License as published by the Free Software Foundation; either *
|
|
+* version 2 of the License, or (at your option) any later version. *
|
|
+* *
|
|
+* 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. *
|
|
+*******************************************************************************/
|
|
+
|
|
+#ifndef WALLPAPER_H
|
|
+#define WALLPAPER_H
|
|
+
|
|
+#include <Plasma/PackageStructure>
|
|
+
|
|
+class QmlWallpaperPackage : public Plasma::PackageStructure
|
|
+{
|
|
+public:
|
|
+ QmlWallpaperPackage(QObject*, const QVariantList &) {}
|
|
+ void initPackage(Plasma::Package *package);
|
|
+};
|
|
+
|
|
+#endif
|
|
diff --git a/shell/packageplugins/wallpaperimages/CMakeLists.txt b/shell/packageplugins/wallpaperimages/CMakeLists.txt
|
|
deleted file mode 100644
|
|
index 83af217..0000000
|
|
--- a/shell/packageplugins/wallpaperimages/CMakeLists.txt
|
|
+++ /dev/null
|
|
@@ -1,16 +0,0 @@
|
|
-add_definitions(-DTRANSLATION_DOMAIN=\"plasma_package_wallpaperimages\")
|
|
-
|
|
-set(wallpaper_SRCS
|
|
- wallpaperpackage.cpp
|
|
-)
|
|
-
|
|
-add_library(plasma_packagestructure_wallpaperimages MODULE ${wallpaper_SRCS})
|
|
-
|
|
-target_link_libraries(plasma_packagestructure_wallpaperimages
|
|
- KF5::I18n
|
|
- KF5::Plasma
|
|
-)
|
|
-
|
|
-kservice_desktop_to_json(plasma_packagestructure_wallpaperimages plasma-packagestructure-wallpaperimages.desktop)
|
|
-
|
|
-install(TARGETS plasma_packagestructure_wallpaperimages DESTINATION ${PLUGIN_INSTALL_DIR}/plasma/packagestructure)
|
|
diff --git a/shell/packageplugins/wallpaperimages/wallpaperpackage.cpp b/shell/packageplugins/wallpaperimages/wallpaperpackage.cpp
|
|
deleted file mode 100644
|
|
index 9231bce..0000000
|
|
--- a/shell/packageplugins/wallpaperimages/wallpaperpackage.cpp
|
|
+++ /dev/null
|
|
@@ -1,82 +0,0 @@
|
|
-/*
|
|
- * Copyright 2013 by Marco Martin <mart@kde.org>
|
|
-
|
|
- * This program is free software; you can redistribute it and/or modify
|
|
- * it under the terms of the GNU Library General Public License as
|
|
- * published by the Free Software Foundation; either version 2, or
|
|
- * (at your option) any later version.
|
|
- *
|
|
- * This program 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 General Public License for more details
|
|
- *
|
|
- * You should have received a copy of the GNU Library General Public
|
|
- * License along with this program; if not, write to the
|
|
- * Free Software Foundation, Inc.,
|
|
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
|
- */
|
|
-
|
|
-#include "wallpaperpackage.h"
|
|
-
|
|
-#include <QFileInfo>
|
|
-#include <QDebug>
|
|
-
|
|
-#include <klocalizedstring.h>
|
|
-
|
|
-WallpaperPackage::WallpaperPackage(QObject *parent, const QVariantList &args)
|
|
- : Plasma::PackageStructure(parent, args)
|
|
-{
|
|
-}
|
|
-
|
|
-void WallpaperPackage::initPackage(Plasma::Package *package)
|
|
-{
|
|
- package->addDirectoryDefinition("images", "images/", i18n("Images"));
|
|
-
|
|
- QStringList mimetypes;
|
|
- mimetypes << "image/svg" << "image/png" << "image/jpeg" << "image/jpg";
|
|
- package->setMimeTypes("images", mimetypes);
|
|
-
|
|
- package->setRequired("images", true);
|
|
- package->addFileDefinition("screenshot", "screenshot.png", i18n("Screenshot"));
|
|
- package->setAllowExternalPaths(true);
|
|
-}
|
|
-
|
|
-void WallpaperPackage::pathChanged(Plasma::Package *package)
|
|
-{
|
|
- static bool guard = false;
|
|
-
|
|
- if (guard) {
|
|
- return;
|
|
- }
|
|
-
|
|
- guard = true;
|
|
- QString ppath = package->path();
|
|
- if (ppath.endsWith('/')) {
|
|
- ppath.chop(1);
|
|
- if (!QFile::exists(ppath)) {
|
|
- ppath = package->path();
|
|
- }
|
|
- }
|
|
-
|
|
- QFileInfo info(ppath);
|
|
- const bool isFullPackage = info.isDir();
|
|
- package->removeDefinition("preferred");
|
|
- package->setRequired("images", isFullPackage);
|
|
-
|
|
- if (isFullPackage) {
|
|
- package->setContentsPrefixPaths(QStringList() << "contents/");
|
|
- } else {
|
|
- package->addFileDefinition("screenshot", info.fileName(), i18n("Preview"));
|
|
- package->addFileDefinition("preferred", info.fileName(), QString());
|
|
- package->setContentsPrefixPaths(QStringList());
|
|
- package->setPath(info.path());
|
|
- }
|
|
-
|
|
- guard = false;
|
|
-}
|
|
-
|
|
-K_EXPORT_PLASMA_PACKAGE_WITH_JSON(WallpaperPackage, "plasma-packagestructure-wallpaperimages.json")
|
|
-
|
|
-#include "wallpaperpackage.moc"
|
|
-
|
|
diff --git a/shell/packageplugins/wallpaperimages/wallpaperpackage.h b/shell/packageplugins/wallpaperimages/wallpaperpackage.h
|
|
deleted file mode 100644
|
|
index 541e1f7..0000000
|
|
--- a/shell/packageplugins/wallpaperimages/wallpaperpackage.h
|
|
+++ /dev/null
|
|
@@ -1,36 +0,0 @@
|
|
-/*
|
|
- * Copyright 2013 by Marco Martin <mart@kde.org>
|
|
-
|
|
- * This program is free software; you can redistribute it and/or modify
|
|
- * it under the terms of the GNU Library General Public License as
|
|
- * published by the Free Software Foundation; either version 2, or
|
|
- * (at your option) any later version.
|
|
- *
|
|
- * This program 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 General Public License for more details
|
|
- *
|
|
- * You should have received a copy of the GNU Library General Public
|
|
- * License along with this program; if not, write to the
|
|
- * Free Software Foundation, Inc.,
|
|
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
|
- */
|
|
-
|
|
-#ifndef WALLPAPERSTRUCTURE_H
|
|
-#define WALLPAPERSTRUCTURE_H
|
|
-
|
|
-#include <Plasma/PackageStructure>
|
|
-
|
|
-class WallpaperPackage : public Plasma::PackageStructure
|
|
-{
|
|
- Q_OBJECT
|
|
-
|
|
-public:
|
|
- explicit WallpaperPackage(QObject *parent = 0, const QVariantList &args = QVariantList());
|
|
-
|
|
- void initPackage(Plasma::Package *package);
|
|
- void pathChanged(Plasma::Package *package);
|
|
-};
|
|
-
|
|
-#endif
|
|
diff --git a/shell/scripting/applet.cpp b/shell/scripting/applet.cpp
|
|
index 056e17f..43a8acc 100644
|
|
--- a/shell/scripting/applet.cpp
|
|
+++ b/shell/scripting/applet.cpp
|
|
@@ -38,7 +38,8 @@ class Applet::Private
|
|
public:
|
|
Private()
|
|
: configDirty(false),
|
|
- inWallpaperConfig(false)
|
|
+ inWallpaperConfig(false),
|
|
+ wallpaperConfigDirty(false)
|
|
{
|
|
}
|
|
|
|
@@ -48,6 +49,7 @@ public:
|
|
QStringList globalConfigGroupPath;
|
|
bool configDirty : 1;
|
|
bool inWallpaperConfig : 1;
|
|
+ bool wallpaperConfigDirty : 1;
|
|
};
|
|
|
|
Applet::Applet(QObject *parent)
|
|
@@ -116,14 +118,16 @@ void Applet::writeConfig(const QString &key, const QVariant &value)
|
|
{
|
|
if (d->configGroup.isValid()) {
|
|
if (d->inWallpaperConfig) {
|
|
+ d->wallpaperConfigDirty = true;
|
|
//hacky, but only way to make the wallpaper react immediately
|
|
QObject *wallpaperGraphicsObject = applet()->property("wallpaperGraphicsObject").value<QObject *>();
|
|
+
|
|
if (wallpaperGraphicsObject) {
|
|
KDeclarative::ConfigPropertyMap *config = static_cast<KDeclarative::ConfigPropertyMap *>(wallpaperGraphicsObject->property("configuration").value<QObject *>());
|
|
config->setProperty(key.toLatin1(), value);
|
|
}
|
|
+ //check if it can be written in the applets' configScheme
|
|
} else if (applet()->configScheme()) {
|
|
- //check if it can be written in the applets' configScheme
|
|
KConfigSkeletonItem *item = applet()->configScheme()->findItemByName(key);
|
|
if (item) {
|
|
item->setProperty(value);
|
|
@@ -271,6 +275,11 @@ bool Applet::locked() const
|
|
return app->immutability() != Plasma::Types::Mutable;
|
|
}
|
|
|
|
+bool Applet::wallpaperConfigDirty() const
|
|
+{
|
|
+ return d->wallpaperConfigDirty;
|
|
+}
|
|
+
|
|
Plasma::Applet *Applet::applet() const
|
|
{
|
|
return 0;
|
|
diff --git a/shell/scripting/applet.h b/shell/scripting/applet.h
|
|
index cb78ac4..082a930 100644
|
|
--- a/shell/scripting/applet.h
|
|
+++ b/shell/scripting/applet.h
|
|
@@ -60,6 +60,8 @@ public:
|
|
void setLocked(bool locked);
|
|
bool locked() const;
|
|
|
|
+ bool wallpaperConfigDirty() const;
|
|
+
|
|
virtual Plasma::Applet *applet() const;
|
|
|
|
protected:
|
|
diff --git a/shell/scripting/containment.cpp b/shell/scripting/containment.cpp
|
|
index 288b9ce..fc7fa82 100644
|
|
--- a/shell/scripting/containment.cpp
|
|
+++ b/shell/scripting/containment.cpp
|
|
@@ -63,11 +63,14 @@ Containment::~Containment()
|
|
if (d->oldWallpaperPlugin != d->wallpaperPlugin ||
|
|
d->oldWallpaperMode != d->wallpaperMode) {
|
|
containment->setWallpaper(d->wallpaperPlugin);
|
|
+ } else if (wallpaperConfigDirty()) {
|
|
+ KConfigGroup cg(containment->config());
|
|
+ cg = KConfigGroup(&cg, "Wallpaper");
|
|
+ cg = KConfigGroup(&cg, containment->wallpaper());
|
|
}
|
|
}
|
|
|
|
reloadConfigIfNeeded();
|
|
-
|
|
delete d;
|
|
}
|
|
|
|
diff --git a/wallpapers/image/CMakeLists.txt b/wallpapers/image/CMakeLists.txt
|
|
index 5a2ccd5..50d1f1c 100644
|
|
--- a/wallpapers/image/CMakeLists.txt
|
|
+++ b/wallpapers/image/CMakeLists.txt
|
|
@@ -5,6 +5,7 @@ add_definitions(-DTRANSLATION_DOMAIN=\"plasma_applet_org.kde.image\")
|
|
set(image_SRCS
|
|
image.cpp
|
|
imageplugin.cpp
|
|
+ wallpaperpackage.cpp
|
|
backgroundlistmodel.cpp
|
|
)
|
|
|
|
diff --git a/wallpapers/image/backgroundlistmodel.cpp b/wallpapers/image/backgroundlistmodel.cpp
|
|
index a667c10..ccb9d10 100644
|
|
--- a/wallpapers/image/backgroundlistmodel.cpp
|
|
+++ b/wallpapers/image/backgroundlistmodel.cpp
|
|
@@ -40,6 +40,7 @@
|
|
#include <Plasma/PluginLoader>
|
|
|
|
#include "image.h"
|
|
+#include "wallpaperpackage.h"
|
|
|
|
QSet<QString> BackgroundFinder::m_suffixes;
|
|
|
|
@@ -56,9 +57,9 @@ void ImageSizeFinder::run()
|
|
}
|
|
|
|
|
|
-BackgroundListModel::BackgroundListModel(Image *wallpaper, QObject *parent)
|
|
+BackgroundListModel::BackgroundListModel(Image *listener, QObject *parent)
|
|
: QAbstractListModel(parent),
|
|
- m_wallpaper(wallpaper)
|
|
+ m_structureParent(listener)
|
|
{
|
|
connect(&m_dirwatch, SIGNAL(deleted(QString)), this, SLOT(removeBackground(QString)));
|
|
|
|
@@ -110,7 +111,7 @@ void BackgroundListModel::reload(const QStringList &selected)
|
|
emit countChanged();
|
|
}
|
|
|
|
- if (!m_wallpaper) {
|
|
+ if (!m_structureParent) {
|
|
return;
|
|
}
|
|
|
|
@@ -122,7 +123,7 @@ void BackgroundListModel::reload(const QStringList &selected)
|
|
const QStringList dirs = QStandardPaths::locateAll(QStandardPaths::GenericDataLocation, "wallpapers/", QStandardPaths::LocateDirectory);
|
|
qDebug() << " WP : -------" << dirs;
|
|
|
|
- BackgroundFinder *finder = new BackgroundFinder(m_wallpaper.data(), dirs);
|
|
+ BackgroundFinder *finder = new BackgroundFinder(m_structureParent.data(), dirs);
|
|
connect(finder, SIGNAL(backgroundsFound(QStringList,QString)), this, SLOT(backgroundsFound(QStringList,QString)));
|
|
m_findToken = finder->token();
|
|
finder->start();
|
|
@@ -138,7 +139,7 @@ void BackgroundListModel::backgroundsFound(const QStringList &paths, const QStri
|
|
|
|
void BackgroundListModel::processPaths(const QStringList &paths)
|
|
{
|
|
- if (!m_wallpaper) {
|
|
+ if (!m_structureParent) {
|
|
return;
|
|
}
|
|
|
|
@@ -173,12 +174,10 @@ void BackgroundListModel::processPaths(const QStringList &paths)
|
|
if ((info.isSymLink() || contentsIndex != -1) && paths.contains(file)) {
|
|
continue;
|
|
}
|
|
-
|
|
if (!contains(file) && QFile::exists(file)) {
|
|
- Plasma::Package package = Plasma::PluginLoader::self()->loadPackage("Wallpaper/Images");
|
|
+ Plasma::Package package = Plasma::Package(new WallpaperPackage(m_structureParent.data(), m_structureParent.data()));
|
|
package.setPath(file);
|
|
if (package.isValid()) {
|
|
- m_wallpaper->findPreferedImageInPackage(package);
|
|
newPackages << package;
|
|
}
|
|
}
|
|
@@ -203,18 +202,18 @@ void BackgroundListModel::processPaths(const QStringList &paths)
|
|
|
|
void BackgroundListModel::addBackground(const QString& path)
|
|
{
|
|
- if (!m_wallpaper || !contains(path)) {
|
|
+ if (!m_structureParent || !contains(path)) {
|
|
if (!m_dirwatch.contains(path)) {
|
|
m_dirwatch.addFile(path);
|
|
}
|
|
beginInsertRows(QModelIndex(), 0, 0);
|
|
- Plasma::Package package = Plasma::PluginLoader::self()->loadPackage("Wallpaper/Images");
|
|
+ //Plasma::Package pkg = Plasma::PluginLoader::self()->loadPackage(QString::fromLatin1("Plasma/Wallpaper"));
|
|
+ Plasma::Package pkg = Plasma::Package(new WallpaperPackage(0, 0));
|
|
|
|
m_removableWallpapers.insert(path);
|
|
- package.setPath(path);
|
|
- m_wallpaper->findPreferedImageInPackage(package);
|
|
- qDebug() << "WP Bckground added " << path << package.isValid();
|
|
- m_packages.prepend(package);
|
|
+ pkg.setPath(path);
|
|
+ qDebug() << "WP Bckground added " << path << pkg.isValid();
|
|
+ m_packages.prepend(pkg);
|
|
endInsertRows();
|
|
emit countChanged();
|
|
}
|
|
@@ -283,7 +282,7 @@ QSize BackgroundListModel::bestSize(const Plasma::Package &package) const
|
|
|
|
void BackgroundListModel::sizeFound(const QString &path, const QSize &s)
|
|
{
|
|
- if (!m_wallpaper) {
|
|
+ if (!m_structureParent) {
|
|
return;
|
|
}
|
|
|
|
@@ -393,7 +392,7 @@ QVariant BackgroundListModel::data(const QModelIndex &index, int role) const
|
|
|
|
void BackgroundListModel::showPreview(const KFileItem &item, const QPixmap &preview)
|
|
{
|
|
- if (!m_wallpaper) {
|
|
+ if (!m_structureParent) {
|
|
return;
|
|
}
|
|
|
|
@@ -424,8 +423,8 @@ Plasma::Package BackgroundListModel::package(int index) const
|
|
return m_packages.at(index);
|
|
}
|
|
|
|
-BackgroundFinder::BackgroundFinder(Image *wallpaper, const QStringList &paths)
|
|
- : QThread(wallpaper),
|
|
+BackgroundFinder::BackgroundFinder(Image *structureParent, const QStringList &paths)
|
|
+ : QThread(structureParent),
|
|
m_paths(paths),
|
|
m_token(QUuid().toString())
|
|
{
|
|
@@ -460,7 +459,8 @@ void BackgroundFinder::run()
|
|
|
|
QDir dir;
|
|
dir.setFilter(QDir::AllDirs | QDir::Files | QDir::Hidden | QDir::Readable);
|
|
- Plasma::Package package = Plasma::PluginLoader::self()->loadPackage("Wallpaper/Images");
|
|
+ //Plasma::Package pkg = Plasma::PluginLoader::self()->loadPackage(QString::fromLatin1("Plasma/Wallpaper"));
|
|
+ Plasma::Package pkg = Plasma::Package(new WallpaperPackage(0, 0));
|
|
|
|
int i;
|
|
for (i = 0; i < m_paths.count(); ++i) {
|
|
@@ -479,9 +479,9 @@ void BackgroundFinder::run()
|
|
|
|
const QString filePath = wp.filePath();
|
|
if (QFile::exists(filePath + QString::fromLatin1("/metadata.desktop"))) {
|
|
- package.setPath(filePath);
|
|
- if (package.isValid()) {
|
|
- papersFound << package.path();
|
|
+ pkg.setPath(filePath);
|
|
+ if (pkg.isValid()) {
|
|
+ papersFound << pkg.path();
|
|
//qDebug() << "adding package" << wp.filePath();
|
|
continue;
|
|
}
|
|
diff --git a/wallpapers/image/backgroundlistmodel.h b/wallpapers/image/backgroundlistmodel.h
|
|
index 0fa0d92..d5690e6 100644
|
|
--- a/wallpapers/image/backgroundlistmodel.h
|
|
+++ b/wallpapers/image/backgroundlistmodel.h
|
|
@@ -106,7 +106,7 @@ protected Q_SLOTS:
|
|
private:
|
|
QSize bestSize(const Plasma::Package &package) const;
|
|
|
|
- QPointer<Image> m_wallpaper;
|
|
+ QWeakPointer<Image> m_structureParent;
|
|
QList<Plasma::Package> m_packages;
|
|
QSet<QString> m_removableWallpapers;
|
|
QHash<QString, QSize> m_sizeCache;
|
|
@@ -123,7 +123,7 @@ class BackgroundFinder : public QThread
|
|
Q_OBJECT
|
|
|
|
public:
|
|
- BackgroundFinder(Image *wallpaper, const QStringList &p);
|
|
+ BackgroundFinder(Image *structureParent, const QStringList &p);
|
|
~BackgroundFinder();
|
|
|
|
QString token() const;
|
|
diff --git a/wallpapers/image/image.cpp b/wallpapers/image/image.cpp
|
|
index 373d824..d672dfe 100644
|
|
--- a/wallpapers/image/image.cpp
|
|
+++ b/wallpapers/image/image.cpp
|
|
@@ -22,9 +22,7 @@
|
|
***************************************************************************/
|
|
|
|
#include "image.h"
|
|
-
|
|
-#include <math.h>
|
|
-#include <float.h> // FLT_MAX
|
|
+#include "wallpaperpackage.h"
|
|
|
|
#include <QAction>
|
|
#include <QApplication>
|
|
@@ -44,7 +42,6 @@
|
|
#include <klocalizedstring.h>
|
|
|
|
#include <Plasma/Theme>
|
|
-#include <Plasma/PluginLoader>
|
|
#include <qstandardpaths.h>
|
|
#include "backgroundlistmodel.h"
|
|
|
|
@@ -59,7 +56,7 @@ Image::Image(QObject *parent)
|
|
m_width(0),
|
|
m_height(0)
|
|
{
|
|
- m_wallpaperPackage = Plasma::PluginLoader::self()->loadPackage("Wallpaper/Images");
|
|
+ m_wallpaperPackage = Plasma::Package(new WallpaperPackage(this, this));
|
|
|
|
connect(&m_timer, SIGNAL(timeout()), this, SLOT(nextSlide()));
|
|
|
|
@@ -115,73 +112,9 @@ void Image::setRenderingMode(RenderingMode mode)
|
|
QTimer::singleShot(200, this, SLOT(startSlideshow()));
|
|
updateDirWatch(m_slidePaths);
|
|
updateDirWatch(m_slidePaths);
|
|
- } else {
|
|
- // we need to reset the prefered image
|
|
- setSingleImage();
|
|
- }
|
|
-}
|
|
-
|
|
-float distance(const QSize& size, const QSize& desired)
|
|
-{
|
|
- // compute difference of areas
|
|
- float delta = size.width() * size.height() -
|
|
- desired.width() * desired.height();
|
|
- // scale down to about 1.0
|
|
- delta /= ((desired.width() * desired.height())+(size.width() * size.height()))/2;
|
|
-
|
|
- // Difference of areas, slight preference to scale down
|
|
- return delta >= 0.0 ? delta : -delta + 2.0;
|
|
-}
|
|
-
|
|
-QSize resSize(const QString &str)
|
|
-{
|
|
- int index = str.indexOf('x');
|
|
- if (index != -1) {
|
|
- return QSize(str.left(index).toInt(),
|
|
- str.mid(index + 1).toInt());
|
|
- }
|
|
-
|
|
- return QSize();
|
|
-}
|
|
-
|
|
-void Image::findPreferedImageInPackage(Plasma::Package &package)
|
|
-{
|
|
- if (!package.isValid() || !package.filePath("preferred").isEmpty()) {
|
|
- return;
|
|
- }
|
|
-
|
|
- QStringList images = package.entryList("images");
|
|
- if (images.empty()) {
|
|
- return;
|
|
- }
|
|
-
|
|
- //qDebug() << "wanted" << size;
|
|
-
|
|
- // choose the nearest resolution
|
|
- float best = FLT_MAX;
|
|
-
|
|
- QString bestImage;
|
|
- foreach (const QString &entry, images) {
|
|
- QSize candidate = resSize(QFileInfo(entry).baseName());
|
|
- if (candidate == QSize()) {
|
|
- continue;
|
|
- }
|
|
-
|
|
- double dist = distance(candidate, m_targetSize);
|
|
- //qDebug() << "candidate" << candidate << "distance" << dist;
|
|
- if (bestImage.isEmpty() || dist < best) {
|
|
- bestImage = entry;
|
|
- best = dist;
|
|
- //qDebug() << "best" << bestImage;
|
|
- if (dist == 0) {
|
|
- break;
|
|
- }
|
|
- }
|
|
}
|
|
|
|
- //qDebug() << "best image" << bestImage;
|
|
- package.removeDefinition("preferred");
|
|
- package.addFileDefinition("preferred", "images/" + bestImage, i18n("Recommended wallpaper file"));
|
|
+ emit renderingModeChanged();
|
|
}
|
|
|
|
QSize Image::targetSize() const
|
|
@@ -220,6 +153,8 @@ void Image::setWidth(int w)
|
|
}
|
|
}
|
|
|
|
+
|
|
+
|
|
Plasma::Package *Image::package()
|
|
{
|
|
return &m_wallpaperPackage;
|
|
@@ -379,27 +314,23 @@ void Image::addDirFromSelectionDialog()
|
|
}
|
|
}
|
|
|
|
-void Image::syncWallpaperPackage()
|
|
-{
|
|
- m_wallpaperPackage.setPath(m_wallpaper);
|
|
- findPreferedImageInPackage(m_wallpaperPackage);
|
|
- m_wallpaperPath = m_wallpaperPackage.filePath("preferred");
|
|
-}
|
|
-
|
|
void Image::setSingleImage()
|
|
{
|
|
- const QString oldPath = m_wallpaperPath;
|
|
if (m_wallpaper.isEmpty()) {
|
|
useSingleImageDefaults();
|
|
}
|
|
|
|
QString img;
|
|
if (QDir::isAbsolutePath(m_wallpaper)) {
|
|
- syncWallpaperPackage();
|
|
+ m_wallpaperPackage.setPath(m_wallpaper);
|
|
+ img = m_wallpaperPackage.filePath("preferred");
|
|
+ m_wallpaperPath = m_wallpaperPackage.filePath("preferred");
|
|
|
|
- if (QFile::exists(m_wallpaperPath)) {
|
|
- img = m_wallpaperPath;
|
|
+ if (img.isEmpty() && QFile::exists(m_wallpaper)) {
|
|
+ img = m_wallpaper;
|
|
+ m_wallpaperPath = m_wallpaper;
|
|
}
|
|
+ Q_EMIT wallpaperPathChanged();
|
|
} else {
|
|
//if it's not an absolute path, check if it's just a wallpaper name
|
|
const QString path = QStandardPaths::locate(QStandardPaths::GenericDataLocation, QLatin1String("wallpapers/") + QString(m_wallpaper + QString::fromLatin1("/metadata.desktop")));
|
|
@@ -408,19 +339,21 @@ void Image::setSingleImage()
|
|
QDir dir(path);
|
|
dir.cdUp();
|
|
|
|
- syncWallpaperPackage();
|
|
- img = m_wallpaperPath;
|
|
+ m_wallpaperPackage.setPath(m_wallpaper);
|
|
+ img = m_wallpaperPackage.filePath("preferred");
|
|
+ m_wallpaperPath = m_wallpaperPackage.filePath("preferred");
|
|
+ Q_EMIT wallpaperPathChanged();
|
|
}
|
|
}
|
|
|
|
if (img.isEmpty()) {
|
|
// ok, so the package we have failed to work out; let's try the default
|
|
+ // if we have already
|
|
+ const QString wallpaper = m_wallpaper;
|
|
useSingleImageDefaults();
|
|
- syncWallpaperPackage();
|
|
- }
|
|
-
|
|
- if (m_wallpaperPath != oldPath) {
|
|
- Q_EMIT wallpaperPathChanged();
|
|
+ if (wallpaper != m_wallpaper) {
|
|
+ setSingleImage();
|
|
+ }
|
|
}
|
|
}
|
|
|
|
@@ -436,20 +369,19 @@ void Image::addUrls(const QList<QUrl> &urls)
|
|
|
|
void Image::addUrl(const QUrl &url, bool setAsCurrent)
|
|
{
|
|
- QString path;
|
|
+ ///qDebug() << "droppage!" << url << url.isLocalFile();
|
|
if (url.isLocalFile()) {
|
|
- path = url.toLocalFile();
|
|
- } else if (url.scheme().isEmpty()) {
|
|
- if (QDir::isAbsolutePath(url.path())) {
|
|
- path = url.path();
|
|
+ const QString path = url.toLocalFile();
|
|
+ if (setAsCurrent) {
|
|
+ setWallpaper(path);
|
|
} else {
|
|
- path = QStandardPaths::locate(QStandardPaths::GenericDataLocation,
|
|
- QLatin1String("wallpapers/") + url.path(),
|
|
- QStandardPaths::LocateDirectory);
|
|
- }
|
|
-
|
|
- if (path.isEmpty()) {
|
|
- return;
|
|
+ if (m_mode != SingleImage) {
|
|
+ // it's a slide show, add it to the slide show
|
|
+ m_slideshowBackgrounds.append(path);
|
|
+ m_unseenSlideshowBackgrounds.append(path);
|
|
+ }
|
|
+ // always add it to the user papers, though
|
|
+ addUsersWallpaper(path);
|
|
}
|
|
} else {
|
|
QString wallpaperPath = QStandardPaths::writableLocation(QStandardPaths::GenericDataLocation) + QLatin1String("wallpapers/") + url.path();
|
|
@@ -462,20 +394,6 @@ void Image::addUrl(const QUrl &url, bool setAsCurrent)
|
|
connect(job, SIGNAL(result(KJob*)), this, SLOT(addWallpaperRetrieved(KJob*)));
|
|
}
|
|
}
|
|
-
|
|
- return;
|
|
- }
|
|
-
|
|
- if (setAsCurrent) {
|
|
- setWallpaper(path);
|
|
- } else {
|
|
- if (m_mode != SingleImage) {
|
|
- // it's a slide show, add it to the slide show
|
|
- m_slideshowBackgrounds.append(path);
|
|
- m_unseenSlideshowBackgrounds.append(path);
|
|
- }
|
|
- // always add it to the user papers, though
|
|
- addUsersWallpaper(path);
|
|
}
|
|
}
|
|
|
|
@@ -688,7 +606,6 @@ void Image::nextSlide()
|
|
const QString currentPath = m_unseenSlideshowBackgrounds.at(m_currentSlide);
|
|
|
|
m_wallpaperPackage.setPath(currentPath);
|
|
- findPreferedImageInPackage(m_wallpaperPackage);
|
|
|
|
m_timer.stop();
|
|
m_timer.start(m_delay * 1000);
|
|
@@ -747,7 +664,7 @@ void Image::removeWallpaper(QString name)
|
|
|
|
//Package plugin name
|
|
if (!name.contains('/')) {
|
|
- Plasma::Package p = Plasma::PluginLoader::self()->loadPackage("Wallpaper/Images");
|
|
+ Plasma::Package p = Plasma::Package(new WallpaperPackage(this, this));
|
|
KJob *j = p.uninstall(name, localWallpapers);
|
|
connect(j, &KJob::finished, [=] () {
|
|
m_model->reload(m_usersWallpapers);
|
|
diff --git a/wallpapers/image/image.h b/wallpapers/image/image.h
|
|
index 4fb87d2..c517c28 100644
|
|
--- a/wallpapers/image/image.h
|
|
+++ b/wallpapers/image/image.h
|
|
@@ -105,8 +105,6 @@ class Image : public QObject
|
|
QStringList slidePaths() const;
|
|
void setSlidePaths(const QStringList &slidePaths);
|
|
|
|
- void findPreferedImageInPackage(Plasma::Package &package);
|
|
-
|
|
public Q_SLOTS:
|
|
void nextSlide();
|
|
void removeWallpaper(QString name);
|
|
@@ -145,11 +143,12 @@ class Image : public QObject
|
|
void backgroundsFound(const QStringList &paths, const QString &token);
|
|
|
|
protected:
|
|
- void syncWallpaperPackage();
|
|
void setSingleImage();
|
|
void useSingleImageDefaults();
|
|
|
|
private:
|
|
+ static bool s_startupResumed;
|
|
+ static bool s_startupSuspended;
|
|
|
|
int m_delay;
|
|
QStringList m_dirs;
|
|
diff --git a/wallpapers/image/wallpaperpackage.cpp b/wallpapers/image/wallpaperpackage.cpp
|
|
new file mode 100644
|
|
index 0000000..1ee524e
|
|
--- /dev/null
|
|
+++ b/wallpapers/image/wallpaperpackage.cpp
|
|
@@ -0,0 +1,174 @@
|
|
+/*
|
|
+ * Copyright 2013 by Marco Martin <mart@kde.org>
|
|
+
|
|
+ * This program is free software; you can redistribute it and/or modify
|
|
+ * it under the terms of the GNU Library General Public License as
|
|
+ * published by the Free Software Foundation; either version 2, or
|
|
+ * (at your option) any later version.
|
|
+ *
|
|
+ * This program 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 General Public License for more details
|
|
+ *
|
|
+ * You should have received a copy of the GNU Library General Public
|
|
+ * License along with this program; if not, write to the
|
|
+ * Free Software Foundation, Inc.,
|
|
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
|
+ */
|
|
+
|
|
+#include "wallpaperpackage.h"
|
|
+
|
|
+#include <math.h>
|
|
+#include <float.h> // FLT_MAX
|
|
+
|
|
+#include <QFileInfo>
|
|
+#include <QDebug>
|
|
+
|
|
+#include <klocalizedstring.h>
|
|
+
|
|
+WallpaperPackage::WallpaperPackage(Image *paper, QObject *parent, const QVariantList &args)
|
|
+ : Plasma::PackageStructure(parent, args),
|
|
+ m_paper(paper),
|
|
+ m_fullPackage(true),
|
|
+ m_targetSize(100000, 100000)
|
|
+{
|
|
+}
|
|
+
|
|
+void WallpaperPackage::initPackage(Plasma::Package *package)
|
|
+{
|
|
+ package->addDirectoryDefinition("images", "images/", i18n("Images"));
|
|
+
|
|
+ QStringList mimetypes;
|
|
+ mimetypes << "image/svg" << "image/png" << "image/jpeg" << "image/jpg";
|
|
+ package->setMimeTypes("images", mimetypes);
|
|
+
|
|
+ package->setRequired("images", true);
|
|
+ package->addFileDefinition("screenshot", "screenshot.png", i18n("Screenshot"));
|
|
+ package->setAllowExternalPaths(true);
|
|
+
|
|
+ if (m_paper) {
|
|
+ m_targetSize = m_paper->targetSize();
|
|
+
|
|
+ connect(m_paper, SIGNAL(renderingModeChanged()), this, SLOT(renderHintsChanged()));
|
|
+ connect(m_paper, SIGNAL(destroyed(QObject*)), this, SLOT(paperDestroyed()));
|
|
+ }
|
|
+}
|
|
+
|
|
+void WallpaperPackage::renderHintsChanged()
|
|
+{
|
|
+ if (m_paper) {
|
|
+ m_targetSize = m_paper->targetSize();
|
|
+
|
|
+ if (m_fullPackage) {
|
|
+ findBestPaper(m_paper->package());
|
|
+ }
|
|
+ }
|
|
+}
|
|
+
|
|
+void WallpaperPackage::pathChanged(Plasma::Package *package)
|
|
+{
|
|
+ static bool guard = false;
|
|
+
|
|
+ if (guard) {
|
|
+ return;
|
|
+ }
|
|
+
|
|
+ guard = true;
|
|
+ QString ppath = package->path();
|
|
+ if (ppath.endsWith('/')) {
|
|
+ ppath.chop(1);
|
|
+ if (!QFile::exists(ppath)) {
|
|
+ ppath = package->path();
|
|
+ }
|
|
+ }
|
|
+ QFileInfo info(ppath);
|
|
+ m_fullPackage = info.isDir();
|
|
+ package->removeDefinition("preferred");
|
|
+ package->setRequired("images", m_fullPackage);
|
|
+
|
|
+ if (m_fullPackage) {
|
|
+ package->setContentsPrefixPaths(QStringList() << "contents/");
|
|
+ findBestPaper(package);
|
|
+ } else {
|
|
+ // dirty trick to support having a file passed in instead of a directory
|
|
+ package->addFileDefinition("preferred", info.fileName(), i18n("Recommended wallpaper file"));
|
|
+ package->addFileDefinition("screenshot", info.fileName(), i18n("Preview"));
|
|
+ package->setContentsPrefixPaths(QStringList());
|
|
+ package->setPath(info.path());
|
|
+ }
|
|
+
|
|
+ guard = false;
|
|
+}
|
|
+
|
|
+QSize WallpaperPackage::resSize(const QString &str) const
|
|
+{
|
|
+ int index = str.indexOf('x');
|
|
+ if (index != -1) {
|
|
+ return QSize(str.left(index).toInt(),
|
|
+ str.mid(index + 1).toInt());
|
|
+ } else {
|
|
+ return QSize();
|
|
+ }
|
|
+}
|
|
+
|
|
+void WallpaperPackage::findBestPaper(Plasma::Package *package)
|
|
+{
|
|
+ if (!package->isValid()) {
|
|
+ return;
|
|
+ }
|
|
+
|
|
+ QStringList images = package->entryList("images");
|
|
+ if (images.empty()) {
|
|
+ return;
|
|
+ }
|
|
+
|
|
+ //qDebug() << "wanted" << size;
|
|
+
|
|
+ // choose the nearest resolution
|
|
+ float best = FLT_MAX;
|
|
+
|
|
+ QString bestImage;
|
|
+ foreach (const QString &entry, images) {
|
|
+ QSize candidate = resSize(QFileInfo(entry).baseName());
|
|
+ if (candidate == QSize()) {
|
|
+ continue;
|
|
+ }
|
|
+
|
|
+ double dist = distance(candidate, m_targetSize);
|
|
+ //qDebug() << "candidate" << candidate << "distance" << dist;
|
|
+ if (bestImage.isEmpty() || dist < best) {
|
|
+ bestImage = entry;
|
|
+ best = dist;
|
|
+ //qDebug() << "best" << bestImage;
|
|
+ if (dist == 0) {
|
|
+ break;
|
|
+ }
|
|
+ }
|
|
+ }
|
|
+
|
|
+ //qDebug() << "best image" << bestImage;
|
|
+ package->removeDefinition("preferred");
|
|
+ package->addFileDefinition("preferred", "images/" + bestImage, i18n("Recommended wallpaper file"));
|
|
+}
|
|
+
|
|
+float WallpaperPackage::distance(const QSize& size, const QSize& desired) const
|
|
+{
|
|
+ // compute difference of areas
|
|
+ float delta = size.width() * size.height() -
|
|
+ desired.width() * desired.height();
|
|
+ // scale down to about 1.0
|
|
+ delta /= ((desired.width() * desired.height())+(size.width() * size.height()))/2;
|
|
+
|
|
+ // Difference of areas, slight preference to scale down
|
|
+ return delta >= 0.0 ? delta : -delta + 2.0;
|
|
+}
|
|
+
|
|
+void WallpaperPackage::paperDestroyed()
|
|
+{
|
|
+ m_paper = 0;
|
|
+}
|
|
+
|
|
+
|
|
+#include "wallpaperpackage.moc"
|
|
+
|
|
diff --git a/wallpapers/image/wallpaperpackage.h b/wallpapers/image/wallpaperpackage.h
|
|
new file mode 100644
|
|
index 0000000..45e8736
|
|
--- /dev/null
|
|
+++ b/wallpapers/image/wallpaperpackage.h
|
|
@@ -0,0 +1,55 @@
|
|
+/*
|
|
+ * Copyright 2013 by Marco Martin <mart@kde.org>
|
|
+
|
|
+ * This program is free software; you can redistribute it and/or modify
|
|
+ * it under the terms of the GNU Library General Public License as
|
|
+ * published by the Free Software Foundation; either version 2, or
|
|
+ * (at your option) any later version.
|
|
+ *
|
|
+ * This program 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 General Public License for more details
|
|
+ *
|
|
+ * You should have received a copy of the GNU Library General Public
|
|
+ * License along with this program; if not, write to the
|
|
+ * Free Software Foundation, Inc.,
|
|
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
|
+ */
|
|
+
|
|
+#ifndef WALLPAPERSTRUCTURE_H
|
|
+#define WALLPAPERSTRUCTURE_H
|
|
+
|
|
+#include <Plasma/PackageStructure>
|
|
+
|
|
+#include "image.h"
|
|
+
|
|
+class WallpaperPackage : public Plasma::PackageStructure
|
|
+{
|
|
+ Q_OBJECT
|
|
+
|
|
+public:
|
|
+ explicit WallpaperPackage(Image *paper, QObject *parent = 0, const QVariantList &args = QVariantList());
|
|
+
|
|
+ void initPackage(Plasma::Package *package);
|
|
+ void pathChanged(Plasma::Package *package);
|
|
+
|
|
+protected:
|
|
+ void pathChanged();
|
|
+
|
|
+private:
|
|
+ QSize resSize(const QString &str) const;
|
|
+ void findBestPaper(Plasma::Package *package);
|
|
+ float distance(const QSize& size, const QSize& desired) const;
|
|
+
|
|
+private Q_SLOTS:
|
|
+ void paperDestroyed();
|
|
+ void renderHintsChanged();
|
|
+
|
|
+private:
|
|
+ Image *m_paper;
|
|
+ bool m_fullPackage;
|
|
+ QSize m_targetSize;
|
|
+};
|
|
+
|
|
+#endif
|