+++ /dev/null
-diff --git a/plasma/generic/dataengines/powermanagement/powermanagementengine.cpp b/plasma/generic/dataengines/powermanagement/powermanagementengine.cpp
-index 33a6e03..f3a918a 100644
---- a/plasma/generic/dataengines/powermanagement/powermanagementengine.cpp
-+++ b/plasma/generic/dataengines/powermanagement/powermanagementengine.cpp
-@@ -34,6 +34,7 @@
- #include <KIdleTime>
-
- #include <QtDBus/QDBusConnectionInterface>
-+#include <QtDBus/QDBusError>
- #include <QtDBus/QDBusInterface>
- #include <QtDBus/QDBusMetaType>
- #include <QtDBus/QDBusReply>
-@@ -58,23 +59,39 @@ PowermanagementEngine::~PowermanagementEngine()
-
- void PowermanagementEngine::init()
- {
-- connect(Solid::DeviceNotifier::instance(), SIGNAL(deviceRemoved(QString)),
-- this, SLOT(deviceRemoved(QString)));
- connect(Solid::DeviceNotifier::instance(), SIGNAL(deviceAdded(QString)),
- this, SLOT(deviceAdded(QString)));
-+ connect(Solid::DeviceNotifier::instance(), SIGNAL(deviceRemoved(QString)),
-+ this, SLOT(deviceRemoved(QString)));
-
-+ // FIXME This check doesn't work, connect seems to always return true, hence the hack below
- if (QDBusConnection::sessionBus().interface()->isServiceRegistered("org.kde.Solid.PowerManagement")) {
- if (!QDBusConnection::sessionBus().connect("org.kde.Solid.PowerManagement",
-- "/org/kde/Solid/PowerManagement",
-- "org.kde.Solid.PowerManagement",
-+ "/org/kde/Solid/PowerManagement/Actions/BrightnessControl",
-+ "org.kde.Solid.PowerManagement.Actions.BrightnessControl",
- "brightnessChanged", this,
- SLOT(screenBrightnessChanged(int)))) {
- kDebug() << "error connecting to Brightness changes via dbus";
-- }
-- else {
-+ brightnessControlsAvailableChanged(false);
-+ } else {
- sourceRequestEvent("PowerDevil");
- screenBrightnessChanged(0);
-+ brightnessControlsAvailableChanged(true);
- }
-+
-+ if (!QDBusConnection::sessionBus().connect("org.kde.Solid.PowerManagement",
-+ "/org/kde/Solid/PowerManagement/Actions/KeyboardBrightnessControl",
-+ "org.kde.Solid.PowerManagement.Actions.KeyboardBrightnessControl",
-+ "keyboardBrightnessChanged", this,
-+ SLOT(keyboardBrightnessChanged(int)))) {
-+ kDebug() << "error connecting to Keyboard Brightness changes via dbus";
-+ keyboardBrightnessControlsAvailableChanged(false);
-+ } else {
-+ sourceRequestEvent("PowerDevil");
-+ keyboardBrightnessChanged(0);
-+ keyboardBrightnessControlsAvailableChanged(true);
-+ }
-+
- if (!QDBusConnection::sessionBus().connect("org.kde.Solid.PowerManagement",
- "/org/kde/Solid/PowerManagement",
- "org.kde.Solid.PowerManagement",
-@@ -114,27 +131,32 @@ bool PowermanagementEngine::sourceRequestEvent(const QString &name)
- foreach (const Solid::Device &deviceBattery, listBattery) {
- const Solid::Battery* battery = deviceBattery.as<Solid::Battery>();
-
-- if (battery && (battery->type() == Solid::Battery::PrimaryBattery ||
-- battery->type() == Solid::Battery::UpsBattery)) {
-- const QString source = QString("Battery%1").arg(index++);
-+ const QString source = QString("Battery%1").arg(index++);
-
-- batterySources << source;
-- m_batterySources[deviceBattery.udi()] = source;
-+ batterySources << source;
-+ m_batterySources[deviceBattery.udi()] = source;
-
-- connect(battery, SIGNAL(chargeStateChanged(int,QString)), this,
-- SLOT(updateBatteryChargeState(int,QString)));
-- connect(battery, SIGNAL(chargePercentChanged(int,QString)), this,
-- SLOT(updateBatteryChargePercent(int,QString)));
-- connect(battery, SIGNAL(plugStateChanged(bool,QString)), this,
-- SLOT(updateBatteryPlugState(bool,QString)));
-+ connect(battery, SIGNAL(chargeStateChanged(int,QString)), this,
-+ SLOT(updateBatteryChargeState(int,QString)));
-+ connect(battery, SIGNAL(chargePercentChanged(int,QString)), this,
-+ SLOT(updateBatteryChargePercent(int,QString)));
-+ connect(battery, SIGNAL(plugStateChanged(bool,QString)), this,
-+ SLOT(updateBatteryPlugState(bool,QString)));
-
-- // Set initial values
-- updateBatteryChargeState(battery->chargeState(), deviceBattery.udi());
-- updateBatteryChargePercent(battery->chargePercent(), deviceBattery.udi());
-- updateBatteryPlugState(battery->isPlugged(), deviceBattery.udi());
-- }
-+ // Set initial values
-+ updateBatteryChargeState(battery->chargeState(), deviceBattery.udi());
-+ updateBatteryChargePercent(battery->chargePercent(), deviceBattery.udi());
-+ updateBatteryPlugState(battery->isPlugged(), deviceBattery.udi());
-+ updateBatteryPowerSupplyState(battery->isPowerSupply(), deviceBattery.udi());
-+
-+ setData(source, "Vendor", deviceBattery.vendor());
-+ setData(source, "Product", deviceBattery.product());
-+ setData(source, "Capacity", battery->capacity());
-+ setData(source, "Type", batteryType(battery));
- }
-
-+ updateBatteryNames();
-+
- setData("Battery", "Has Battery", !batterySources.isEmpty());
- if (!batterySources.isEmpty()) {
- setData("Battery", "Sources", batterySources);
-@@ -180,14 +202,30 @@ bool PowermanagementEngine::sourceRequestEvent(const QString &name)
- //kDebug() << "Sleepstate \"" << sleepstate << "\" supported.";
- }
- } else if (name == "PowerDevil") {
-- QDBusMessage msg = QDBusMessage::createMethodCall("org.kde.Solid.PowerManagement",
-- "/org/kde/Solid/PowerManagement",
-- "org.kde.Solid.PowerManagement",
-- "brightness");
-- QDBusPendingReply<int> reply = QDBusConnection::sessionBus().asyncCall(msg);
-- QDBusPendingCallWatcher *watcher = new QDBusPendingCallWatcher(reply, this);
-- QObject::connect(watcher, SIGNAL(finished(QDBusPendingCallWatcher*)),
-- this, SLOT(screenBrightnessReply(QDBusPendingCallWatcher*)));
-+ QDBusMessage msg;
-+ QDBusPendingReply<int> reply;
-+
-+ if (m_brightnessControlsAvailable) {
-+ msg = QDBusMessage::createMethodCall("org.kde.Solid.PowerManagement",
-+ "/org/kde/Solid/PowerManagement/Actions/BrightnessControl",
-+ "org.kde.Solid.PowerManagement.Actions.BrightnessControl",
-+ "brightness");
-+ reply = QDBusConnection::sessionBus().asyncCall(msg);
-+ QDBusPendingCallWatcher *screenWatcher = new QDBusPendingCallWatcher(reply, this);
-+ QObject::connect(screenWatcher, SIGNAL(finished(QDBusPendingCallWatcher*)),
-+ this, SLOT(screenBrightnessReply(QDBusPendingCallWatcher*)));
-+ }
-+
-+ if (m_keyboardBrightnessControlsAvailable) {
-+ msg = QDBusMessage::createMethodCall("org.kde.Solid.PowerManagement",
-+ "/org/kde/Solid/PowerManagement/Actions/KeyboardBrightnessControl",
-+ "org.kde.Solid.PowerManagement.Actions.KeyboardBrightnessControl",
-+ "keyboardBrightness");
-+ reply = QDBusConnection::sessionBus().asyncCall(msg);
-+ QDBusPendingCallWatcher *keyboardWatcher = new QDBusPendingCallWatcher(reply, this);
-+ QObject::connect(keyboardWatcher, SIGNAL(finished(QDBusPendingCallWatcher*)),
-+ this, SLOT(keyboardBrightnessReply(QDBusPendingCallWatcher*)));
-+ }
- //any info concerning lock screen/screensaver goes here
- } else if (name == "UserActivity") {
- setData("UserActivity", "IdleTime", KIdleTime::instance()->idleTime());
-@@ -198,6 +236,37 @@ bool PowermanagementEngine::sourceRequestEvent(const QString &name)
- return true;
- }
-
-+QString PowermanagementEngine::batteryType(const Solid::Battery* battery)
-+{
-+ switch(battery->type()) {
-+ case Solid::Battery::PrimaryBattery:
-+ return QLatin1String("Battery");
-+ break;
-+ case Solid::Battery::UpsBattery:
-+ return QLatin1String("Ups");
-+ break;
-+ case Solid::Battery::MonitorBattery:
-+ return QLatin1String("Monitor");
-+ break;
-+ case Solid::Battery::MouseBattery:
-+ return QLatin1String("Mouse");
-+ break;
-+ case Solid::Battery::KeyboardBattery:
-+ return QLatin1String("Keyboad");
-+ break;
-+ case Solid::Battery::PdaBattery:
-+ return QLatin1String("Pda");
-+ break;
-+ case Solid::Battery::PhoneBattery:
-+ return QLatin1String("Phone");
-+ break;
-+ default:
-+ return QLatin1String("Unknown");
-+ }
-+
-+ return QLatin1String("Unknown");
-+}
-+
- bool PowermanagementEngine::updateSourceEvent(const QString &source)
- {
- if (source == "UserActivity") {
-@@ -243,6 +312,45 @@ void PowermanagementEngine::updateBatteryChargePercent(int newValue, const QStri
- setData(source, "Percent", newValue);
- }
-
-+void PowermanagementEngine::updateBatteryPowerSupplyState(bool newState, const QString& udi)
-+{
-+ const QString source = m_batterySources[udi];
-+ setData(source, "Is Power Supply", newState);
-+}
-+
-+void PowermanagementEngine::updateBatteryNames()
-+{
-+ uint unnamedBatteries = 0;
-+ foreach (QString source, m_batterySources) {
-+ DataContainer *batteryDataContainer = containerForSource(source);
-+ if (batteryDataContainer) {
-+ const QString batteryVendor = batteryDataContainer->data()["Vendor"].toString();
-+ const QString batteryProduct = batteryDataContainer->data()["Product"].toString();
-+
-+ // Don't show battery name for primary power supply batteries. They usually have cryptic serial number names.
-+ const QString batteryType = batteryDataContainer->data()["Type"].toString();
-+ bool batteryIsPowerSupply = batteryDataContainer->data()["Is Power Supply"].toBool();
-+ bool showBatteryName = batteryType != QLatin1String("Battery") ||
-+ (batteryType != QLatin1String("Battery") && !batteryIsPowerSupply);
-+
-+ if (!batteryProduct.isEmpty() && batteryProduct != "Unknown Battery" && showBatteryName) {
-+ if (!batteryVendor.isEmpty()) {
-+ setData(source, "Pretty Name", QString(batteryVendor + ' ' + batteryProduct));
-+ } else {
-+ setData(source, "Pretty Name", batteryProduct);
-+ }
-+ } else {
-+ ++unnamedBatteries;
-+ if (unnamedBatteries > 1) {
-+ setData(source, "Pretty Name", i18nc("Placeholder is the battery number", "Battery %1", unnamedBatteries));
-+ } else {
-+ setData(source, "Pretty Name", i18n("Battery"));
-+ }
-+ }
-+ }
-+ }
-+}
-+
- void PowermanagementEngine::updateAcPlugState(bool newState)
- {
- setData("AC Adapter", "Plugged in", newState);
-@@ -273,8 +381,7 @@ void PowermanagementEngine::deviceAdded(const QString& udi)
- if (device.isValid()) {
- const Solid::Battery* battery = device.as<Solid::Battery>();
-
-- if (battery && (battery->type() == Solid::Battery::PrimaryBattery ||
-- battery->type() == Solid::Battery::UpsBattery)) {
-+ if (battery) {
- int index = 0;
- QStringList sourceNames(m_batterySources.values());
- while (sourceNames.contains(QString("Battery%1").arg(index))) {
-@@ -291,14 +398,24 @@ void PowermanagementEngine::deviceAdded(const QString& udi)
- SLOT(updateBatteryChargePercent(int,QString)));
- connect(battery, SIGNAL(plugStateChanged(bool,QString)), this,
- SLOT(updateBatteryPlugState(bool,QString)));
-+ connect(battery, SIGNAL(powerSupplyStateChanged(bool,QString)), this,
-+ SLOT(updateBatteryPowerSupplyState(bool,QString)));
-
- // Set initial values
- updateBatteryChargeState(battery->chargeState(), device.udi());
- updateBatteryChargePercent(battery->chargePercent(), device.udi());
- updateBatteryPlugState(battery->isPlugged(), device.udi());
-+ updateBatteryPowerSupplyState(battery->isPowerSupply(), device.udi());
-+
-+ setData(source, "Vendor", device.vendor());
-+ setData(source, "Product", device.product());
-+ setData(source, "Capacity", battery->capacity());
-+ setData(source, "Type", batteryType(battery));
-
- setData("Battery", "Sources", sourceNames);
- setData("Battery", "Has Battery", !sourceNames.isEmpty());
-+
-+ updateBatteryNames();
- }
- }
- }
-@@ -309,6 +426,18 @@ void PowermanagementEngine::batteryRemainingTimeChanged(qulonglong time)
- setData("Battery", "Remaining msec", time);
- }
-
-+void PowermanagementEngine::brightnessControlsAvailableChanged(bool available)
-+{
-+ setData("PowerDevil", "Screen Brightness Available", available);
-+ m_brightnessControlsAvailable = available;
-+}
-+
-+void PowermanagementEngine::keyboardBrightnessControlsAvailableChanged(bool available)
-+{
-+ setData("PowerDevil", "Keyboard Brightness Available", available);
-+ m_keyboardBrightnessControlsAvailable = available;
-+}
-+
- void PowermanagementEngine::batteryRemainingTimeReply(QDBusPendingCallWatcher *watcher)
- {
- QDBusPendingReply<qulonglong> reply = *watcher;
-@@ -327,11 +456,18 @@ void PowermanagementEngine::screenBrightnessChanged(int brightness)
- setData("PowerDevil", "Screen Brightness", brightness);
- }
-
-+void PowermanagementEngine::keyboardBrightnessChanged(int brightness)
-+{
-+ setData("PowerDevil", "Keyboard Brightness", brightness);
-+}
-+
- void PowermanagementEngine::screenBrightnessReply(QDBusPendingCallWatcher *watcher)
- {
- QDBusPendingReply<int> reply = *watcher;
- if (reply.isError()) {
- kDebug() << "Error getting screen brightness: " << reply.error().message();
-+ // FIXME Because the above check doesn't work, we unclaim backlight support as soon as it fails
-+ brightnessControlsAvailableChanged(false);
- } else {
- screenBrightnessChanged(reply.value());
- }
-@@ -339,6 +475,20 @@ void PowermanagementEngine::screenBrightnessReply(QDBusPendingCallWatcher *watch
- watcher->deleteLater();
- }
-
-+void PowermanagementEngine::keyboardBrightnessReply(QDBusPendingCallWatcher *watcher)
-+{
-+ QDBusPendingReply<int> reply = *watcher;
-+ if (reply.isError()) {
-+ kDebug() << "Error getting keyboard brightness: " << reply.error().message();
-+ // FIXME Because the above check doesn't work, we unclaim backlight support as soon as it fails
-+ keyboardBrightnessControlsAvailableChanged(false);
-+ } else {
-+ keyboardBrightnessChanged(reply.value());
-+ }
-+
-+ watcher->deleteLater();
-+}
-+
- K_EXPORT_PLASMA_DATAENGINE(powermanagement, PowermanagementEngine)
-
- #include "powermanagementengine.moc"
-diff --git a/plasma/generic/dataengines/powermanagement/powermanagementengine.h b/plasma/generic/dataengines/powermanagement/powermanagementengine.h
-index 512bf6e..dafb6c2 100644
---- a/plasma/generic/dataengines/powermanagement/powermanagementengine.h
-+++ b/plasma/generic/dataengines/powermanagement/powermanagementengine.h
-@@ -54,21 +54,32 @@ private slots:
- void updateBatteryChargeState(int newState, const QString& udi);
- void updateBatteryPlugState(bool newState, const QString& udi);
- void updateBatteryChargePercent(int newValue, const QString& udi);
-+ void updateBatteryPowerSupplyState(bool newState, const QString& udi);
- void updateAcPlugState(bool newState);
-+ void updateBatteryNames();
-+
- void deviceRemoved(const QString& udi);
- void deviceAdded(const QString& udi);
- void batteryRemainingTimeChanged(qulonglong time);
- void batteryRemainingTimeReply(QDBusPendingCallWatcher*);
- void screenBrightnessChanged(int brightness);
-+ void keyboardBrightnessChanged(int brightness);
- void screenBrightnessReply(QDBusPendingCallWatcher *watcher);
-+ void keyboardBrightnessReply(QDBusPendingCallWatcher *watcher);
-+ void brightnessControlsAvailableChanged(bool available);
-+ void keyboardBrightnessControlsAvailableChanged(bool available);
-
- private:
-+ QString batteryType(const Solid::Battery *battery);
- QStringList basicSourceNames() const;
-
- QStringList m_sources;
-
- QHash<QString, QString> m_batterySources; // <udi, Battery0>
-
-+ bool m_brightnessControlsAvailable;
-+ bool m_keyboardBrightnessControlsAvailable;
-+
- };
-
-
-diff --git a/plasma/generic/dataengines/powermanagement/powermanagementjob.cpp b/plasma/generic/dataengines/powermanagement/powermanagementjob.cpp
-index 1b0b8a0..06156d9 100644
---- a/plasma/generic/dataengines/powermanagement/powermanagementjob.cpp
-+++ b/plasma/generic/dataengines/powermanagement/powermanagementjob.cpp
-@@ -94,6 +94,10 @@ void PowerManagementJob::start()
- setScreenBrightness(parameters().value("brightness").toInt());
- setResult(true);
- return;
-+ } else if (operation == "setKeyboardBrightness") {
-+ setKeyboardBrightness(parameters().value("brightness").toInt());
-+ setResult(true);
-+ return;
- }
-
- kDebug() << "don't know what to do with " << operation;
-@@ -103,8 +107,8 @@ void PowerManagementJob::start()
- bool PowerManagementJob::suspend(const SuspendType &type)
- {
- QDBusMessage msg = QDBusMessage::createMethodCall("org.kde.Solid.PowerManagement",
-- "/org/kde/Solid/PowerManagement",
-- "org.kde.Solid.PowerManagement",
-+ "/org/kde/Solid/PowerManagement/Actions/SuspendSession",
-+ "org.kde.Solid.PowerManagement.Actions.SuspendSession",
- callForType(type));
- QDBusConnection::sessionBus().asyncCall(msg);
- return true;
-@@ -130,13 +134,23 @@ QString PowerManagementJob::callForType(const SuspendType &type)
- void PowerManagementJob::setScreenBrightness(int value)
- {
- QDBusMessage msg = QDBusMessage::createMethodCall("org.kde.Solid.PowerManagement",
-- "/org/kde/Solid/PowerManagement",
-- "org.kde.Solid.PowerManagement",
-+ "/org/kde/Solid/PowerManagement/Actions/BrightnessControl",
-+ "org.kde.Solid.PowerManagement.Actions.BrightnessControl",
- "setBrightness");
- msg << value;
- QDBusConnection::sessionBus().asyncCall(msg);
- }
-
-+void PowerManagementJob::setKeyboardBrightness(int value)
-+{
-+ QDBusMessage msg = QDBusMessage::createMethodCall("org.kde.Solid.PowerManagement",
-+ "/org/kde/Solid/PowerManagement/Actions/KeyboardBrightnessControl",
-+ "org.kde.Solid.PowerManagement.Actions.KeyboardBrightnessControl",
-+ "setKeyboardBrightness");
-+ msg << value;
-+ QDBusConnection::sessionBus().asyncCall(msg);
-+}
-+
- void PowerManagementJob::requestShutDown()
- {
- KWorkSpace::requestShutDown();
-diff --git a/plasma/generic/dataengines/powermanagement/powermanagementjob.h b/plasma/generic/dataengines/powermanagement/powermanagementjob.h
-index 3b974ab..c1c7bf4 100644
---- a/plasma/generic/dataengines/powermanagement/powermanagementjob.h
-+++ b/plasma/generic/dataengines/powermanagement/powermanagementjob.h
-@@ -1,6 +1,6 @@
- /*
- * Copyright 2011 Sebastian Kügler <sebas@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 version 2 as
- * published by the Free Software Foundation
-@@ -41,6 +41,7 @@ class PowerManagementJob : public Plasma::ServiceJob
- void requestShutDown();
- QString callForType(const SuspendType &type);
- void setScreenBrightness(int value);
-+ void setKeyboardBrightness(int value);
- };
-
- #endif // POWERMANAGEMENTJOB_H
-diff --git a/plasma/generic/dataengines/powermanagement/powermanagementservice.operations b/plasma/generic/dataengines/powermanagement/powermanagementservice.operations
-index 533c00a..c9abbf9 100644
---- a/plasma/generic/dataengines/powermanagement/powermanagementservice.operations
-+++ b/plasma/generic/dataengines/powermanagement/powermanagementservice.operations
-@@ -37,4 +37,9 @@
- <label>The value of the screen brightness</label>
- </entry>
- </group>
-+ <group name="setKeyboardBrightness">
-+ <entry name="brightness" type="Int">
-+ <label>The value of the keyboard brightness</label>
-+ </entry>
-+ </group>
- </kcfg>
-diff --git a/plasma/generic/applets/batterymonitor/contents/code/logic.js b/plasma/generic/applets/batterymonitor/contents/code/logic.js
-index 974694a..d1c08c1 100644
---- a/plasma/generic/applets/batterymonitor/contents/code/logic.js
-+++ b/plasma/generic/applets/batterymonitor/contents/code/logic.js
-@@ -18,74 +18,178 @@
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- */
-
--var ram = 0
--var disk = 1
-+var powermanagementDisabled = false;
-
- function updateCumulative() {
- var sum = 0;
-+ var count = 0;
- var charged = true;
-+ var plugged = false;
- for (var i=0; i<batteries.count; i++) {
- var b = batteries.get(i);
-+ if (!b["Is Power Supply"]) {
-+ continue;
-+ }
- if (b["Plugged in"]) {
- sum += b["Percent"];
-+ plugged = true;
- }
- if (b["State"] != "NoCharge") {
- charged = false;
- }
-+ count++;
- }
-
-- if (batteries.count > 0) {
-- batteries.cumulativePercent = Math.round(sum/batteries.count);
-+ if (count > 0) {
-+ batteries.cumulativePercent = Math.round(sum/count);
- } else {
-- batteries.cumulativePercent = 0;
-+ // We don't have any power supply batteries
-+ // Use the lowest value from any battery
-+ if (batteries.count > 0) {
-+ var b = lowestBattery();
-+ batteries.cumulativePercent = b["Percent"];
-+ } else {
-+ batteries.cumulativePercent = 0;
-+ }
- }
-+ batteries.cumulativePluggedin = plugged;
- batteries.allCharged = charged;
- }
-
--function stringForState(batteryData) {
-- var pluggedIn = batteryData["Plugged in"];
-- var percent = batteryData["Percent"];
-- var state = batteryData["State"];
--
-- if (pluggedIn) {
-- if (state == "NoCharge") {
-- return i18n("<b>%1% (charged)</b>", percent);
-- } else if (state == "Discharging") {
-- return i18n("<b>%1% (discharging)</b>", percent);
-- } else {//charging
-- return i18n("<b>%1% (charging)</b>", percent);
-+function plasmoidStatus() {
-+ var status = "PassiveStatus";
-+ if (powermanagementDisabled) {
-+ status = "ActiveStatus";
-+ }
-+
-+ if (batteries.cumulativePluggedin) {
-+ if (batteries.cumulativePercent <= 10) {
-+ status = "NeedsAttentionStatus";
-+ } else if (!batteries.allCharged) {
-+ status = "ActiveStatus";
- }
-+ } else if (batteries.count > 0) { // in case your mouse gets low
-+ if (batteries.cumulativePercent && batteries.cumulativePercent <= 10) {
-+ status = "NeedsAttentionStatus";
-+ }
-+ }
-+ return status;
-+}
-+
-+function lowestBattery() {
-+ if (batteries.count == 0) {
-+ return;
- }
-
-- return i18nc("Battery is not plugged in", "<b>Not present</b>");
-+ var lowestPercent = 100;
-+ var lowestBattery;
-+ for(var i=0; i<batteries.count; i++) {
-+ var b = batteries.get(i);
-+ if (b["Percent"] && b["Percent"] < lowestPercent) {
-+ lowestPercent = b["Percent"];
-+ lowestBattery = b;
-+ }
-+ }
-+ return b;
- }
-
--function updateTooltip() {
-- var text="";
-- for (var i=0; i<batteries.count; i++) {
-- if (batteries.count == 1) {
-- text += i18n("Battery:");
-- } else {
-- if (text != "") {
-- text += "<br/>";
-+function stringForBatteryState(batteryData) {
-+ if (batteryData["Plugged in"]) {
-+ switch(batteryData["State"]) {
-+ case "NoCharge": return i18n("Not Charging");
-+ case "Discharging": return i18n("Discharging");
-+ case "FullyCharged": return i18n("Fully Charged");
-+ default: return i18n("Charging");
-+ }
-+ } else {
-+ return i18nc("Battery is currently not present in the bay","Not present");
-+ }
-+}
-+
-+function iconForBattery(batteryData,pluggedIn) {
-+ switch(batteryData["Type"]) {
-+ case "Monitor":
-+ return "video-display";
-+ case "Mouse":
-+ return "input-mouse";
-+ case "Keyboard":
-+ return "input-keyboard";
-+ case "Pda":
-+ return "pda";
-+ case "Phone":
-+ return "phone";
-+ default: // Primary and UPS
-+ p = batteryData["Percent"];
-+ if (p >= 90) {
-+ fill = "100";
-+ } else if (p >= 70) {
-+ fill = "080";
-+ } else if (p >= 50) {
-+ fill = "060";
-+ } else if (p >= 30) {
-+ fill = "040";
-+ } else if (p >= 10) {
-+ fill = "caution";
-+ } else {
-+ fill = "low";
- }
-
-- text += i18nc("tooltip: placeholder is the battery ID", "Battery %1:", i+1);
-+ if (pluggedIn && batteryData["Is Power Supply"]) {
-+ return "battery-charging-" + fill;
-+ } else {
-+ if (p < 5) {
-+ return "dialog-warning"
-+ }
-+ return "battery-" + fill;
-+ }
-+ }
-+}
-+
-+function updateTooltip() {
-+ var image = "";
-+ var text = "";
-+ if (batteries.count == 0) {
-+ image = "battery-missing";
-+ if (!powermanagementDisabled) {
-+ text = i18n("No batteries available");
- }
-+ } else {
-+ var hasPowerSupply = false;
-
-- text += " ";
-- text += stringForState(pmSource.data["Battery"+i]);
-- }
-+ text = "<table style='white-space: nowrap'>";
-+ for(var i=0; i<batteries.count; i++) {
-+ var b = batteries.get(i);
-+ text += "<tr>";
-+ text += "<td align='right'>" + i18nc("Placeholder is battery name", "%1:", b["Pretty Name"]) + " </td>";
-+ text += "<td><b>";
-+ if (b["Plugged in"]) {
-+ text += i18nc("Placeholder is battery percentage", "%1%", b["Percent"]);
-+ } else {
-+ text += i18n("N/A")
-+ }
-+ text += "</b></td>";
-+ text += "</tr>";
-+
-+ if (b["Is Power Supply"]) { hasPowerSupply = true; }
-+ }
-+ text += "</table>";
-
-- if (text != "") {
-- text += "<br/>";
-+ if (hasPowerSupply) {
-+ var b = [];
-+ b["Type"] = "Battery";
-+ b["Percent"] = batteries.cumulativePercent;
-+ image = iconForBattery(b, pmSource.data["AC Adapter"]["Plugged in"] ? true : false);
-+ } else {
-+ var b = lowestBattery();
-+ image = iconForBattery(b, false);
-+ }
- }
-
-- if (pmSource.data["AC Adapter"]) {
-- text += i18nc("tooltip", "AC Adapter:") + " ";
-- text += pmSource.data["AC Adapter"]["Plugged in"] ? i18nc("tooltip", "<b>Plugged in</b>") : i18nc("tooltip", "<b>Not plugged in</b>");
-+ if (powermanagementDisabled) {
-+ text += i18n("Power management is disabled");
- }
- batteries.tooltipText = text;
-+ batteries.tooltipImage = image;
- }
-
- function updateBrightness() {
-@@ -94,16 +198,26 @@ function updateBrightness() {
- return;
- }
- dialogItem.disableBrightnessUpdate = true;
-- dialogItem.screenBrightness = pmSource.data["PowerDevil"]["Screen Brightness"];
-+ if (pmSource.data["PowerDevil"]["Screen Brightness"]) {
-+ dialogItem.screenBrightness = pmSource.data["PowerDevil"]["Screen Brightness"];
-+ }
-+ if (pmSource.data["PowerDevil"]["Keyboard Brightness"]) {
-+ dialogItem.keyboardBrightness = pmSource.data["PowerDevil"]["Keyboard Brightness"];
-+ }
- dialogItem.disableBrightnessUpdate = false;
- }
-
--function callForType(type) {
-- if (type == ram) {
-- return "suspendToRam";
-- } else if (type == disk) {
-- return "suspendToDisk";
-- }
-+// TODO: give translated and formatted string with KGlobal::locale()->prettyFormatDuration(msec);
-+function formatDuration(msec) {
-+ if (msec == 0 || msec === undefined)
-+ return "";
-+
-+ var time = new Date(msec);
-+ var hours = time.getUTCHours();
-+ var minutes = time.getUTCMinutes();
-
-- return "suspendHybrid";
-+ var str = "";
-+ if (hours > 0) str += i18np("1 hour ", "%1 hours ", hours);
-+ if (minutes > 0) str += i18np("1 minute", "%1 minutes", minutes);
-+ return str;
- }
-diff --git a/plasma/generic/applets/batterymonitor/contents/code/platform.js b/plasma/generic/applets/batterymonitor/contents/code/platform.js
-deleted file mode 100644
-index 59af3af..0000000
---- a/plasma/generic/applets/batterymonitor/contents/code/platform.js
-+++ /dev/null
-@@ -1,9 +0,0 @@
--
--function shouldOfferSuspend(pmSource) {
-- return pmSource.data["Sleep States"]["Suspend"];
--}
--
--function shouldOfferHibernate(pmSource) {
-- return pmSource.data["Sleep States"]["Hibernate"];
--}
--
-diff --git a/plasma/generic/applets/batterymonitor/contents/config/main.xml b/plasma/generic/applets/batterymonitor/contents/config/main.xml
-index fc31b3e..5e9e31d 100644
---- a/plasma/generic/applets/batterymonitor/contents/config/main.xml
-+++ b/plasma/generic/applets/batterymonitor/contents/config/main.xml
-@@ -6,12 +6,6 @@
- <kcfgfile name=""/>
-
- <group name="General">
-- <entry name="showBatteryString" type="Bool">
-- <default>false</default>
-- </entry>
-- <entry name="showMultipleBatteries" type="Bool">
-- <default>false</default>
-- </entry>
- <entry name="showRemainingTime" type="Bool">
- <default>false</default>
- </entry>
-diff --git a/plasma/generic/applets/batterymonitor/contents/ui/AcAdapterItem.qml b/plasma/generic/applets/batterymonitor/contents/ui/AcAdapterItem.qml
-new file mode 100644
-index 0000000..c2216f8
---- /dev/null
-+++ b/plasma/generic/applets/batterymonitor/contents/ui/AcAdapterItem.qml
-@@ -0,0 +1,87 @@
-+/*
-+ * Copyright 2012-2013 Daniel Nicoletti <dantti12@gmail.com>
-+ * Copyright 2013 Kai Uwe Broulik <kde@privat.broulik.de>
-+ *
-+ * 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.
-+ */
-+
-+import QtQuick 1.1
-+import org.kde.plasma.core 0.1 as PlasmaCore
-+import org.kde.plasma.components 0.1 as Components
-+import org.kde.qtextracomponents 0.1
-+
-+Item {
-+ id: brightnessItem
-+ clip: true
-+ width: parent.width
-+ height: acIcon.height + padding.margins.top + padding.margins.bottom
-+
-+ property bool pluggedIn
-+ property bool showTime
-+ property string remainingString
-+
-+ QIconItem {
-+ id: acIcon
-+ width: theme.iconSizes.dialog
-+ height: width
-+ anchors {
-+ top: parent.top
-+ topMargin: padding.margins.top
-+ left: parent.left
-+ leftMargin: padding.margins.left
-+ }
-+
-+ icon: pluggedIn ? QIcon("battery-charging-low") : QIcon("battery-low")
-+ }
-+
-+ Components.Label {
-+ id: acLabel
-+ anchors {
-+ top: acIcon.top
-+ left: acIcon.right
-+ leftMargin: 6
-+ }
-+ height: paintedHeight
-+ text: i18n("AC Adapter")
-+ }
-+
-+ Components.Label {
-+ id: acStatus
-+ anchors {
-+ top: showTime ? acLabel.top : undefined
-+ bottom: showTime ? undefined : acIcon.bottom
-+ left: showTime ? acLabel.right : acIcon.right
-+ leftMargin: showTime ? 3 : 6
-+ }
-+ height: paintedHeight
-+ text: pluggedIn ? i18n("Plugged In") : i18n("Not Plugged In")
-+ color: "#77"+(theme.textColor.toString().substr(1))
-+ }
-+
-+ Components.Label {
-+ id: acTime
-+ anchors {
-+ bottom: acIcon.bottom
-+ left: acIcon.right
-+ leftMargin: 6
-+ }
-+ height: paintedHeight
-+ visible: showTime
-+ text: pluggedIn ? i18n("Time remaining until full: %1", remainingString) : i18n("Time remaining until empty: %1", remainingString)
-+ color: "#77"+(theme.textColor.toString().substr(1))
-+ }
-+}
-+
-diff --git a/plasma/generic/applets/batterymonitor/contents/ui/BatteryIcon.qml b/plasma/generic/applets/batterymonitor/contents/ui/BatteryIcon.qml
-index 080ab51..6a49d34 100644
---- a/plasma/generic/applets/batterymonitor/contents/ui/BatteryIcon.qml
-+++ b/plasma/generic/applets/batterymonitor/contents/ui/BatteryIcon.qml
-@@ -21,15 +21,13 @@ import QtQuick 1.1
- import org.kde.plasma.core 0.1 as PlasmaCore
-
- Item {
--
-- property bool monochrome
- property bool hasBattery
- property int percent
- property bool pluggedIn
--
-+
- PlasmaCore.Svg {
- id: svg
-- imagePath: monochrome ? "icons/battery" : "widgets/battery-oxygen"
-+ imagePath: "icons/battery"
- }
-
- PlasmaCore.SvgItem {
-@@ -39,25 +37,55 @@ Item {
- }
-
- PlasmaCore.SvgItem {
-+ id: fillSvg
- anchors.fill: parent
- svg: svg
- elementId: hasBattery ? fillElement(percent) : "Unavailable"
-- visible: percent>10 || !hasBattery
-+ visible: elementId != ""
- }
-
- function fillElement(p) {
-- if (p >= 90) {
-- return "Fill100";
-- } else if (p >= 70) {
-- return "Fill80";
-- } else if (p >= 50) {
-- return "Fill60";
-- } else if (p > 20) {
-- return "Fill40";
-- } else if (p >= 10) {
-- return "Fill20";
-+ // We switched from having steps of 20 for the battery percentage to a more accurate
-+ // step of 10. This means we break other and older themes.
-+ // If the Fill10 element is not found, it is likely that the theme doesn't support
-+ // that and we use the older method of obtaining the fill element.
-+ if (!svg.hasElement("Fill10")) {
-+ if (p >= 90) {
-+ return "Fill100";
-+ } else if (p >= 70) {
-+ return "Fill80";
-+ } else if (p >= 50) {
-+ return "Fill60";
-+ } else if (p > 20) {
-+ return "Fill40";
-+ } else if (p >= 10) {
-+ return "Fill20";
-+ }
-+ return "";
-+ } else {
-+ if (p >= 95) {
-+ return "Fill100";
-+ } else if (p >= 85) {
-+ return "Fill90";
-+ } else if (p >= 75) {
-+ return "Fill90";
-+ } else if (p >= 65) {
-+ return "Fill80";
-+ } else if (p >= 55) {
-+ return "Fill60";
-+ } else if (p >= 45) {
-+ return "Fill50";
-+ } else if (p >= 35) {
-+ return "Fill40";
-+ } else if (p >= 25) {
-+ return "Fill30";
-+ } else if (p >= 15) {
-+ return "Fill20";
-+ } else if (p >= 5) {
-+ return "Fill10";
-+ }
-+ return "";
- }
-- return "";
- }
-
- PlasmaCore.SvgItem {
-diff --git a/plasma/generic/applets/batterymonitor/contents/ui/BatteryItem.qml b/plasma/generic/applets/batterymonitor/contents/ui/BatteryItem.qml
-new file mode 100644
-index 0000000..3317aea
---- /dev/null
-+++ b/plasma/generic/applets/batterymonitor/contents/ui/BatteryItem.qml
-@@ -0,0 +1,312 @@
-+/*
-+ * Copyright 2012-2013 Daniel Nicoletti <dantti12@gmail.com>
-+ * Copyright 2013 Kai Uwe Broulik <kde@privat.broulik.de>
-+ *
-+ * 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.
-+ */
-+
-+import QtQuick 1.1
-+import org.kde.plasma.core 0.1 as PlasmaCore
-+import org.kde.plasma.components 0.1 as Components
-+import org.kde.qtextracomponents 0.1
-+import "plasmapackage:/code/logic.js" as Logic
-+
-+Item {
-+ id: batteryItem
-+ clip: true
-+ width: batteryColumn.width
-+ height: expanded ? batteryInfos.height + padding.margins.top + padding.margins.bottom * 2 + actionRow.height
-+ : batteryInfos.height + padding.margins.top + padding.margins.bottom
-+
-+ Behavior on height { PropertyAnimation {} }
-+
-+ property bool highlight
-+ property bool expanded
-+ property bool showChargeAnimation
-+
-+ // NOTE: According to the UPower spec this property is only valid for primary batteries, however
-+ // UPower seems to set the Present property false when a device is added but not probed yet
-+ property bool isPresent: model["Plugged in"]
-+
-+ function updateSelection() {
-+ var containsMouse = mouseArea.containsMouse;
-+
-+ if (highlight || expanded && containsMouse) {
-+ padding.opacity = 1;
-+ } else if (expanded) {
-+ padding.opacity = 0.8;
-+ } else if (containsMouse) {
-+ padding.opacity = 0.65;
-+ } else {
-+ padding.opacity = 0;
-+ }
-+ }
-+
-+ PlasmaCore.FrameSvgItem {
-+ id: padding
-+ imagePath: "widgets/viewitem"
-+ prefix: "hover"
-+ opacity: 0
-+ Behavior on opacity { PropertyAnimation {} }
-+ anchors.fill: parent
-+ }
-+
-+ MouseArea {
-+ id: mouseArea
-+ anchors.fill: parent
-+ hoverEnabled: true
-+ onEntered: updateSelection()
-+ onExited: updateSelection()
-+ onClicked: {
-+ if (expanded) {
-+ expanded = false;
-+ } else {
-+ expanded = true;
-+ batteryItem.forceActiveFocus();
-+ }
-+ updateSelection();
-+ }
-+ }
-+
-+ Item {
-+ id: batteryInfos
-+ height: Math.max(batteryIcon.height, batteryNameLabel.height + batteryPercentBar.height)
-+
-+ anchors {
-+ top: parent.top
-+ topMargin: padding.margins.top
-+ left: parent.left
-+ leftMargin: padding.margins.left
-+ right: parent.right
-+ rightMargin: padding.margins.right
-+ }
-+
-+ QIconItem {
-+ id: batteryIcon
-+ width: theme.iconSizes.dialog
-+ height: width
-+ anchors {
-+ verticalCenter: parent.verticalCenter
-+ left: parent.left
-+ }
-+ icon: QIcon(Logic.iconForBattery(model,pluggedIn))
-+ }
-+
-+ SequentialAnimation {
-+ id: chargeAnimation
-+ running: showChargeAnimation && model["State"] == "Charging"
-+ alwaysRunToEnd: true
-+ loops: Animation.Infinite
-+
-+ NumberAnimation {
-+ target: batteryIcon
-+ properties: "opacity"
-+ from: 1.0
-+ to: 0.5
-+ duration: 750
-+ easing.type: Easing.InCubic
-+ }
-+ NumberAnimation {
-+ target: batteryIcon
-+ properties: "opacity"
-+ from: 0.5
-+ to: 1.0
-+ duration: 750
-+ easing.type: Easing.OutCubic
-+ }
-+ }
-+
-+ Components.Label {
-+ id: batteryNameLabel
-+ anchors {
-+ verticalCenter: isPresent ? undefined : batteryIcon.verticalCenter
-+ top: isPresent ? parent.top : undefined
-+ left: batteryIcon.right
-+ leftMargin: 6
-+ }
-+ height: paintedHeight
-+ elide: Text.ElideRight
-+ text: model["Pretty Name"]
-+ }
-+
-+ Components.Label {
-+ id: batteryStatusLabel
-+ anchors {
-+ top: batteryNameLabel.top
-+ left: batteryNameLabel.right
-+ leftMargin: 3
-+ }
-+ text: Logic.stringForBatteryState(model)
-+ height: paintedHeight
-+ visible: model["Is Power Supply"]
-+ color: "#77"+(theme.textColor.toString().substr(1))
-+ }
-+
-+ Components.ProgressBar {
-+ id: batteryPercentBar
-+ anchors {
-+ bottom: parent.bottom
-+ left: batteryIcon.right
-+ leftMargin: 6
-+ right: batteryPercent.left
-+ rightMargin: 6
-+ }
-+ minimumValue: 0
-+ maximumValue: 100
-+ visible: isPresent
-+ value: parseInt(model["Percent"])
-+ }
-+
-+ Components.Label {
-+ id: batteryPercent
-+ anchors {
-+ verticalCenter: batteryPercentBar.verticalCenter
-+ right: parent.right
-+ }
-+ visible: isPresent
-+ text: i18nc("Placeholder is battery percentage", "%1%", model["Percent"])
-+ }
-+ }
-+
-+ Column {
-+ id: actionRow
-+ opacity: expanded ? 1 : 0
-+ width: parent.width
-+ anchors {
-+ top: batteryInfos.bottom
-+ topMargin: padding.margins.bottom
-+ left: parent.left
-+ leftMargin: padding.margins.left
-+ right: parent.right
-+ rightMargin: padding.margins.right
-+ bottomMargin: padding.margins.bottom
-+ }
-+ spacing: 4
-+ Behavior on opacity { PropertyAnimation {} }
-+
-+ PlasmaCore.SvgItem {
-+ svg: PlasmaCore.Svg {
-+ id: lineSvg
-+ imagePath: "widgets/line"
-+ }
-+ elementId: "horizontal-line"
-+ height: lineSvg.elementSize("horizontal-line").height
-+ width: parent.width
-+ }
-+
-+ Row {
-+ id: detailsRow
-+ width: parent.width
-+ spacing: 4
-+
-+ Column {
-+ id: labelsColumn
-+ Components.Label {
-+ height: paintedHeight
-+ width: parent.width
-+ horizontalAlignment: Text.AlignRight
-+ onPaintedWidthChanged: {
-+ if (paintedWidth > parent.width) { parent.width = paintedWidth; }
-+ }
-+ text: model["State"] == "Charging" ? i18n("Time To Full:") : i18n("Time To Empty:")
-+ visible: remainingTimeLabel.visible
-+ font.pointSize: theme.smallestFont.pointSize
-+ color: "#99"+(theme.textColor.toString().substr(1))
-+ }
-+ Components.Label {
-+ height: paintedHeight
-+ width: parent.width
-+ horizontalAlignment: Text.AlignRight
-+ onPaintedWidthChanged: {
-+ if (paintedWidth > parent.width) { parent.width = paintedWidth; }
-+ }
-+ text: i18n("Capacity:")
-+ visible: capacityLabel.visible
-+ font.pointSize: theme.smallestFont.pointSize
-+ color: "#99"+(theme.textColor.toString().substr(1))
-+ }
-+ Components.Label {
-+ height: paintedHeight
-+ width: parent.width
-+ horizontalAlignment: Text.AlignRight
-+ onPaintedWidthChanged: {
-+ if (paintedWidth > parent.width) { parent.width = paintedWidth; }
-+ }
-+ text: i18n("Vendor:")
-+ visible: vendorLabel.visible
-+ font.pointSize: theme.smallestFont.pointSize
-+ color: "#99"+(theme.textColor.toString().substr(1))
-+ }
-+ Components.Label {
-+ height: paintedHeight
-+ width: parent.width
-+ horizontalAlignment: Text.AlignRight
-+ onPaintedWidthChanged: {
-+ if (paintedWidth > parent.width) { parent.width = paintedWidth; }
-+ }
-+ text: i18n("Model:")
-+ visible: modelLabel.visible
-+ font.pointSize: theme.smallestFont.pointSize
-+ color: "#99"+(theme.textColor.toString().substr(1))
-+ }
-+ }
-+ Column {
-+ width: parent.width - labelsColumn.width - parent.spacing * 2
-+ Components.Label { // Remaining Time
-+ id: remainingTimeLabel
-+ height: paintedHeight
-+ width: parent.width
-+ elide: Text.ElideRight
-+ text: Logic.formatDuration(model["Remaining Time"])
-+ visible: showRemainingTime && model["Is Power Supply"] && model["State"] != "NoCharge" && text
-+ font.pointSize: theme.smallestFont.pointSize
-+ color: "#99"+(theme.textColor.toString().substr(1))
-+ }
-+ Components.Label { // Capacity
-+ id: capacityLabel
-+ height: paintedHeight
-+ width: parent.width
-+ elide: Text.ElideRight
-+ text: i18nc("Placeholder is battery capacity", "%1%", model["Capacity"])
-+ visible: model["Is Power Supply"] && model["Capacity"] != "" && model["Capacity"] !== undefined
-+ font.pointSize: theme.smallestFont.pointSize
-+ color: "#99"+(theme.textColor.toString().substr(1))
-+ }
-+ Components.Label { // Vendor
-+ id: vendorLabel
-+ height: paintedHeight
-+ width: parent.width
-+ elide: Text.ElideRight
-+ text: model["Vendor"]
-+ visible: model["Vendor"] != "" && model["Vendor"] !== undefined
-+ font.pointSize: theme.smallestFont.pointSize
-+ color: "#99"+(theme.textColor.toString().substr(1))
-+ }
-+ Components.Label { // Model
-+ id: modelLabel
-+ height: paintedHeight
-+ width: parent.width
-+ elide: Text.ElideRight
-+ text: model["Product"]
-+ visible: model["Product"] != "" && model["Product"] !== undefined
-+ font.pointSize: theme.smallestFont.pointSize
-+ color: "#99"+(theme.textColor.toString().substr(1))
-+ }
-+ }
-+ }
-+ }
-+}
-+
-diff --git a/plasma/generic/applets/batterymonitor/contents/ui/BrightnessItem.qml b/plasma/generic/applets/batterymonitor/contents/ui/BrightnessItem.qml
-new file mode 100644
-index 0000000..34c596c
---- /dev/null
-+++ b/plasma/generic/applets/batterymonitor/contents/ui/BrightnessItem.qml
-@@ -0,0 +1,89 @@
-+/*
-+ * Copyright 2012-2013 Daniel Nicoletti <dantti12@gmail.com>
-+ * Copyright 2013 Kai Uwe Broulik <kde@privat.broulik.de>
-+ *
-+ * 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.
-+ */
-+
-+import QtQuick 1.1
-+import org.kde.plasma.core 0.1 as PlasmaCore
-+import org.kde.plasma.components 0.1 as Components
-+import org.kde.qtextracomponents 0.1
-+
-+Item {
-+ id: brightnessItem
-+ clip: true
-+ width: parent.width
-+ height: Math.max(brightnessIcon.height, brightnessLabel.height + brightnessSlider.height) + padding.margins.top + padding.margins.bottom
-+
-+ property alias icon: brightnessIcon.icon
-+ property alias label: brightnessLabel.text
-+ property alias value: brightnessSlider.value
-+
-+ signal changed(int screenBrightness)
-+
-+ QIconItem {
-+ id: brightnessIcon
-+ width: theme.iconSizes.dialog
-+ height: width
-+ anchors {
-+ verticalCenter: parent.verticalCenter
-+ topMargin: padding.margins.top
-+ bottomMargin: padding.margins.bottom
-+ left: parent.left
-+ leftMargin: padding.margins.left
-+ }
-+ }
-+
-+ Components.Label {
-+ id: brightnessLabel
-+ anchors {
-+ top: parent.top
-+ topMargin: padding.margins.top
-+ left: brightnessIcon.right
-+ leftMargin: 6
-+ }
-+ height: paintedHeight
-+ }
-+
-+ Components.Slider {
-+ id: brightnessSlider
-+ anchors {
-+ bottom: parent.bottom
-+ bottomMargin: padding.margins.bottom
-+ left: brightnessIcon.right
-+ right: brightnessPercent.left
-+ leftMargin: 6
-+ rightMargin: 6
-+ }
-+ minimumValue: 0
-+ maximumValue: 100
-+ stepSize: 10
-+ onValueChanged: changed(value)
-+ }
-+
-+ Components.Label {
-+ id: brightnessPercent
-+ anchors {
-+ right: parent.right
-+ rightMargin: padding.margins.right
-+ verticalCenter: brightnessSlider.verticalCenter
-+ }
-+ height: paintedHeight
-+ text: i18nc("Placeholder is brightness percentage", "%1%", brightnessSlider.value)
-+ }
-+}
-+
-diff --git a/plasma/generic/applets/batterymonitor/contents/ui/CompactRepresentation.qml b/plasma/generic/applets/batterymonitor/contents/ui/CompactRepresentation.qml
-new file mode 100644
-index 0000000..ebab135
---- /dev/null
-+++ b/plasma/generic/applets/batterymonitor/contents/ui/CompactRepresentation.qml
-@@ -0,0 +1,112 @@
-+/*
-+* Copyright 2011 Sebastian Kügler <sebas@kde.org>
-+* Copyright 2011 Viranch Mehta <viranch.mehta@gmail.com>
-+* Copyright 2013 Kai Uwe Broulik <kde@privat.broulik.de>
-+*
-+* 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.
-+*/
-+
-+import QtQuick 1.1
-+import org.kde.plasma.core 0.1 as PlasmaCore
-+import org.kde.plasma.components 0.1 as Components
-+import "plasmapackage:/code/logic.js" as Logic
-+
-+ListView {
-+ id: view
-+
-+ property int minimumWidth
-+ property int minimumHeight
-+
-+ property bool hasBattery
-+
-+ property QtObject pmSource
-+ property QtObject batteries
-+
-+ property bool singleBattery
-+
-+ model: singleBattery ? 1 : batteries
-+
-+ anchors.fill: parent
-+ orientation: ListView.Horizontal
-+ interactive: false
-+
-+ function isConstrained() {
-+ return (plasmoid.formFactor == Vertical || plasmoid.formFactor == Horizontal);
-+ }
-+
-+ Component.onCompleted: {
-+ if (!isConstrained()) {
-+ minimumHeight = theme.iconSizes.dialog;
-+ minimumWidth = minimumHeight * view.count;
-+ } else {
-+ // NOTE: Keep in sync with systray
-+ minimumHeight = 24;
-+ minimumWidth = 24;
-+ }
-+ }
-+
-+ delegate: Item {
-+ id: batteryContainer
-+
-+ property bool hasBattery: view.singleBattery ? batteries.count : model["Plugged in"]
-+ property int percent: view.singleBattery ? batteries.cumulativePercent : model["Percent"]
-+ property bool pluggedIn: view.singleBattery ? pmSource.data["AC Adapter"]["Plugged in"] : pmSource.data["AC Adapter"]["Plugged in"] && model["Is Power Supply"]
-+
-+ width: view.width/view.count
-+ height: view.height
-+
-+ property real iconSize: Math.min(width, height)
-+
-+ Column {
-+ anchors.fill: parent
-+
-+ BatteryIcon {
-+ id: batteryIcon
-+ anchors.centerIn: isConstrained() ? parent : undefined
-+ anchors.horizontalCenter: isConstrained() ? undefined : parent.horizontalCenter
-+ hasBattery: batteryContainer.hasBattery
-+ percent: batteryContainer.percent
-+ pluggedIn: batteryContainer.pluggedIn
-+ height: isConstrained() ? batteryContainer.iconSize : batteryContainer.iconSize - batteryLabel.height
-+ width: height
-+ }
-+
-+ Components.Label {
-+ id: batteryLabel
-+ width: parent.width
-+ height: paintedHeight
-+ horizontalAlignment: Text.AlignHCenter
-+ text: i18nc("battery percentage below battery icon", "%1%", percent)
-+ font.pixelSize: Math.max(batteryContainer.iconSize/8, 10)
-+ visible: !isConstrained()
-+ }
-+ }
-+ }
-+
-+ MouseArea {
-+ id: mouseArea
-+ anchors.fill: parent
-+ hoverEnabled: true
-+ onClicked: plasmoid.togglePopup()
-+
-+ PlasmaCore.ToolTip {
-+ id: tooltip
-+ target: mouseArea
-+ image: batteries.tooltipImage
-+ subText: batteries.tooltipText
-+ }
-+ }
-+}
-diff --git a/plasma/generic/applets/batterymonitor/contents/ui/PopupDialog.qml b/plasma/generic/applets/batterymonitor/contents/ui/PopupDialog.qml
-index 76fb1ce..4f46834 100644
---- a/plasma/generic/applets/batterymonitor/contents/ui/PopupDialog.qml
-+++ b/plasma/generic/applets/batterymonitor/contents/ui/PopupDialog.qml
-@@ -1,5 +1,6 @@
- /*
- * Copyright 2011 Viranch Mehta <viranch.mehta@gmail.com>
-+ * Copyright 2013 Kai Uwe Broulik <kde@privat.broulik.de>
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU Library General Public License as
-@@ -18,176 +19,106 @@
- */
-
- import QtQuick 1.1
-+import org.kde.plasma.core 0.1 as PlasmaCore
- import org.kde.plasma.components 0.1 as Components
-+import org.kde.qtextracomponents 0.1
- import "plasmapackage:/code/logic.js" as Logic
-
- Item {
- id: dialog
-- width: childrenRect.width+24
-- height: childrenRect.height+24
-+ property int actualHeight: batteryColumn.implicitHeight + settingsColumn.height + separator.height + 10 // 10 = separator margins
-
-- property alias model: batteryLabels.model
-- property alias hasBattery: batteryIcon.hasBattery
-- property alias percent: batteryIcon.percent
-+ property alias model: batteryList.model
- property bool pluggedIn
-+ property bool showRemainingTime
-+
-+ property bool popupShown // somehow plasmoid.popupShowing isn't working
-+
-+ property bool isBrightnessAvailable
- property alias screenBrightness: brightnessSlider.value
-- property int remainingMsec
-- property alias showSuspendButton: suspendButton.visible
-- property alias showHibernateButton: hibernateButton.visible
-
-+ property bool isKeyboardBrightnessAvailable
-+ property alias keyboardBrightness: keyboardBrightnessSlider.value
-
-- signal suspendClicked(int type)
- signal brightnessChanged(int screenBrightness)
-+ signal keyboardBrightnessChanged(int keyboardBrightness)
- signal powermanagementChanged(bool checked)
-
-+ PlasmaCore.FrameSvgItem {
-+ id: padding
-+ imagePath: "widgets/viewitem"
-+ prefix: "hover"
-+ opacity: 0
-+ }
-+
- Column {
-- id: labels
-- spacing: 6
-+ id: batteryColumn
-+ spacing: 4
-+ width: parent.width
- anchors {
-- top: parent.top
- left: parent.left
-- margins: 12
-- }
-- Repeater {
-- model: dialog.model
-- Components.Label {
-- text: model.count>1 ? i18nc("Placeholder is the battery ID", "Battery %1:", index+1) : i18n("Battery:")
-- width: labels.width
-- horizontalAlignment: Text.AlignRight
-- }
-- }
--
-- Components.Label {
-- text: i18n("AC Adapter:")
-- anchors.right: parent.right
-- anchors.bottomMargin: 12
-- }
--
-- Components.Label {
-- text: i18nc("Label for remaining time", "Time Remaining:")
-- visible: remainingTime.visible
-- anchors.right: parent.right
-- }
--
-- Components.Label {
-- text: i18nc("Label for power management inhibition", "Power management enabled:")
-- anchors.right: parent.right
-+ right: parent.right
-+ top: plasmoid.location == BottomEdge ? parent.top : undefined
-+ bottom: plasmoid.location == BottomEdge ? undefined : parent.bottom
- }
-
-- Components.Label {
-- text: i18n("Screen Brightness:")
-- anchors.right: parent.right
-+ Repeater {
-+ id: batteryList
-+ delegate: BatteryItem { showChargeAnimation: popupShown }
- }
- }
-
- Column {
-- id: values
-- spacing: 6
-- anchors {
-- top: parent.top
-- left: labels.right
-- margins: 12
-- }
-+ id: settingsColumn
-+ spacing: 0
-+ width: parent.width
-
-- Column {
-- id: upperValues
-- spacing: 6
-- anchors {
-- left: values.left
-- }
--
-- Repeater {
-- id: batteryLabels
-- Components.Label {
-- text: Logic.stringForState(model)
-- font.weight: Font.Bold
-- }
-- }
--
-- Components.Label {
-- text: dialog.pluggedIn ? i18n("Plugged in") : i18n("Not plugged in")
-- font.weight: Font.Bold
-- anchors.bottomMargin: 12
-- }
--
-- Components.Label {
-- id: remainingTime
-- text: formatDuration(remainingMsec);
-- font.weight: Font.Bold
-- visible: text!=""
-- }
-- }
--
-- Column {
-- id: lowerValues
-- spacing: 6
-- width: upperValues.width + batteryIcon.width * 2
-- anchors {
-- left: values.left
-- }
-- Components.CheckBox {
-- checked: true
-- onClicked: powermanagementChanged(checked)
-- x: 1
-- }
--
-- Components.Slider {
-- id: brightnessSlider
-- width: lowerValues.width
-- minimumValue: 0
-- maximumValue: 100
-- stepSize: 10
-- onValueChanged: brightnessChanged(value)
-- }
-+ anchors {
-+ left: parent.left
-+ right: parent.right
-+ top: plasmoid.location == BottomEdge ? undefined : parent.top
-+ bottom: plasmoid.location == BottomEdge ? parent.bottom : undefined
- }
-- }
-
-- // TODO: give translated and formatted string with KGlobal::locale()->prettyFormatDuration(msec);
-- function formatDuration(msec) {
-- if (msec==0)
-- return "";
--
-- var time = new Date(msec);
-- var hours = time.getUTCHours();
-- var minutes = time.getUTCMinutes();
-- var str = "";
-- if (hours > 0) str += i18np("1 hour ", "%1 hours ", hours);
-- if (minutes > 0) str += i18np("1 minute", "%1 minutes", minutes);
-- return str;
-- }
-+ BrightnessItem {
-+ id: brightnessSlider
-+ icon: QIcon("video-display")
-+ label: i18n("Display Brightness")
-+ visible: isBrightnessAvailable
-+ onChanged: brightnessChanged(value)
-
-- Row {
-- anchors {
-- top: values.bottom
-- margins: 12
-- right: values.right
- }
-
-- Components.ToolButton {
-- id: suspendButton
-- iconSource: "system-suspend"
-- text: i18nc("Suspend the computer to RAM; translation should be short", "Sleep")
-- onClicked: suspendClicked(Logic.ram)
-+ BrightnessItem {
-+ id: keyboardBrightnessSlider
-+ icon: QIcon("input-keyboard")
-+ label: i18n("Keyboard Brightness")
-+ visible: isKeyboardBrightnessAvailable
-+ onChanged: keyboardBrightnessChanged(value)
- }
-
-- Components.ToolButton {
-- id: hibernateButton
-- iconSource: "system-suspend-hibernate"
-- text: i18nc("Suspend the computer to disk; translation should be short", "Hibernate")
-- onClicked: suspendClicked(Logic.disk)
-+ PowerManagementItem {
-+ id: pmSwitch
-+ onEnabledChanged: powermanagementChanged(enabled)
- }
- }
-
-- BatteryIcon {
-- id: batteryIcon
-- monochrome: false
-- pluggedIn: dialog.pluggedIn
-+ PlasmaCore.SvgItem {
-+ id: separator
-+ svg: PlasmaCore.Svg {
-+ id: lineSvg
-+ imagePath: "widgets/line"
-+ }
-+ elementId: "horizontal-line"
-+ height: lineSvg.elementSize("horizontal-line").height
-+ width: parent.width
- anchors {
-- top: parent.top
-- right: values.right
-- topMargin: 12
-+ top: plasmoid.location == BottomEdge ? undefined : settingsColumn.bottom
-+ bottom: plasmoid.location == BottomEdge ? settingsColumn.top : undefined
-+ leftMargin: padding.margins.left
-+ rightMargin: padding.margins.right
-+ topMargin: 5
-+ bottomMargin: 5
- }
-- width: height
-- height: hibernateButton.height * 2
- }
- }
-diff --git a/plasma/generic/applets/batterymonitor/contents/ui/PowerManagementItem.qml b/plasma/generic/applets/batterymonitor/contents/ui/PowerManagementItem.qml
-new file mode 100644
-index 0000000..85555ac
---- /dev/null
-+++ b/plasma/generic/applets/batterymonitor/contents/ui/PowerManagementItem.qml
-@@ -0,0 +1,64 @@
-+/*
-+ * Copyright 2012-2013 Daniel Nicoletti <dantti12@gmail.com>
-+ * Copyright 2013 Kai Uwe Broulik <kde@privat.broulik.de>
-+ *
-+ * 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.
-+ */
-+
-+import QtQuick 1.1
-+import org.kde.plasma.core 0.1 as PlasmaCore
-+import org.kde.plasma.components 0.1 as Components
-+import org.kde.qtextracomponents 0.1
-+
-+Item {
-+ id: brightnessItem
-+ clip: true
-+ width: parent.width
-+ height: Math.max(pmCheckBox.height, pmLabel.height) + padding.margins.top + padding.margins.bottom
-+
-+ property bool enabled: pmCheckBox.checked
-+
-+ Components.CheckBox {
-+ id: pmCheckBox
-+ anchors {
-+ verticalCenter: parent.verticalCenter
-+ left: parent.left
-+ leftMargin: padding.margins.left + (theme.iconSizes.dialog - width)
-+ topMargin: padding.margins.top
-+ bottomMargin: padding.margins.bottom
-+ }
-+ checked: true
-+ }
-+
-+ Components.Label {
-+ id: pmLabel
-+ anchors {
-+ verticalCenter: pmCheckBox.verticalCenter
-+ left: pmCheckBox.right
-+ leftMargin: 6
-+ }
-+ height: paintedHeight
-+ text: i18n("Enable Power Management")
-+ }
-+
-+ MouseArea {
-+ anchors.fill: parent
-+
-+ onReleased: pmCheckBox.released();
-+ onPressed: pmCheckBox.forceActiveFocus();
-+ }
-+}
-+
-diff --git a/plasma/generic/applets/batterymonitor/contents/ui/ScrollableListView.qml b/plasma/generic/applets/batterymonitor/contents/ui/ScrollableListView.qml
-new file mode 100644
-index 0000000..c3cb818
---- /dev/null
-+++ b/plasma/generic/applets/batterymonitor/contents/ui/ScrollableListView.qml
-@@ -0,0 +1,58 @@
-+/*
-+ * Copyright 2012 Daniel Nicoletti <dantti12@gmail.com>
-+ *
-+ * 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.
-+ */
-+
-+import QtQuick 1.1
-+import org.kde.plasma.core 0.1 as PlasmaCore
-+import org.kde.plasma.components 0.1 as Components
-+import org.kde.qtextracomponents 0.1
-+
-+FocusScope {
-+ property alias delegate: list.delegate
-+ property alias model: list.model
-+ property alias view: list
-+ property alias interactive: list.interactive
-+ property alias currentIndex: list.currentIndex
-+ signal countChanged()
-+
-+ Component.onCompleted: {
-+ list.countChanged.connect(countChanged)
-+ }
-+
-+ ListView {
-+ id: list
-+ clip: true
-+ focus: true
-+ anchors {
-+ left: parent.left
-+ right: scrollBar.visible ? scrollBar.left : parent.right
-+ top : parent.top
-+ bottom: parent.bottom
-+ }
-+ boundsBehavior: Flickable.StopAtBounds
-+ }
-+ Components.ScrollBar {
-+ id: scrollBar
-+ flickableItem: list
-+ anchors {
-+ right: parent.right
-+ top: list.top
-+ bottom: list.bottom
-+ }
-+ }
-+}
-diff --git a/plasma/generic/applets/batterymonitor/contents/ui/batterymonitor.qml b/plasma/generic/applets/batterymonitor/contents/ui/batterymonitor.qml
-index a5e1c13..357c2dc 100644
---- a/plasma/generic/applets/batterymonitor/contents/ui/batterymonitor.qml
-+++ b/plasma/generic/applets/batterymonitor/contents/ui/batterymonitor.qml
-@@ -1,6 +1,7 @@
- /*
- * Copyright 2011 Sebastian Kügler <sebas@kde.org>
- * Copyright 2011 Viranch Mehta <viranch.mehta@gmail.com>
-+ * Copyright 2013 Kai Uwe Broulik <kde@privat.broulik.de>
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU Library General Public License as
-@@ -21,128 +22,46 @@
- import QtQuick 1.1
- import org.kde.plasma.core 0.1 as PlasmaCore
- import "plasmapackage:/code/logic.js" as Logic
--import "plasmapackage:/code/platform.js" as Platform
-
- Item {
- id: batterymonitor
-- property int minimumWidth: dialogItem.width
-- property int minimumHeight: dialogItem.height
-+ property int minimumWidth: theme.iconSizes.dialog * 9
-+ property int minimumHeight: dialogItem.actualHeight
-+ property int maximumHeight: dialogItem.actualHeight
-
- property bool show_remaining_time: false
-
-+ PlasmaCore.Theme { id: theme }
-+
- Component.onCompleted: {
-- Logic.updateCumulative();
-- Logic.updateTooltip();
-- Logic.updateBrightness();
-+ plasmoid.aspectRatioMode = IgnoreAspectRatio
-+ updateLogic(true);
- plasmoid.addEventListener('ConfigChanged', configChanged);
-+ plasmoid.popupEvent.connect(popupEventSlot);
- }
-
- function configChanged() {
- show_remaining_time = plasmoid.readConfig("showRemainingTime");
- }
-
-- property Component compactRepresentation: Component {
-- ListView {
-- id: view
--
-- property int minimumWidth
-- property int minimumHeight
--
-- property bool showOverlay: false
-- property bool showMultipleBatteries: false
-- property bool hasBattery: pmSource.data["Battery"]["Has Battery"]
--
-- property QtObject pmSource: plasmoid.rootItem.pmSource
-- property QtObject batteries: plasmoid.rootItem.batteries
--
-- property bool singleBattery: isConstrained() || !showMultipleBatteries || !hasBattery
--
-- model: singleBattery ? 1 : batteries
--
-- PlasmaCore.Theme { id: theme }
--
-- anchors.fill: parent
-- orientation: ListView.Horizontal
--
-- function isConstrained() {
-- return (plasmoid.formFactor == Vertical || plasmoid.formFactor == Horizontal);
-- }
--
-- Component.onCompleted: {
-- if (!isConstrained()) {
-- minimumWidth = 32;
-- minimumHeight = 32;
-- }
-- plasmoid.addEventListener('ConfigChanged', configChanged);
-- }
--
-- function configChanged() {
-- showOverlay = plasmoid.readConfig("showBatteryString");
-- showMultipleBatteries = plasmoid.readConfig("showMultipleBatteries");
-- }
--
-- delegate: Item {
-- id: batteryContainer
--
-- property bool hasBattery: view.singleBattery ? batteries.cumulativePluggedin : model["Plugged in"]
-- property int percent: view.singleBattery ? batteries.cumulativePercent : model["Percent"]
-- property bool pluggedIn: pmSource.data["AC Adapter"]["Plugged in"]
--
-- width: view.width/view.count
-- height: view.height
--
-- property real size: Math.min(width, height)
--
-- BatteryIcon {
-- id: batteryIcon
-- monochrome: true
-- hasBattery: parent.hasBattery
-- percent: parent.percent
-- pluggedIn: parent.pluggedIn
-- width: size; height: size
-- anchors.centerIn: parent
-- }
--
-- Rectangle {
-- id: labelRect
-- // should be 40 when size is 90
-- width: Math.max(parent.size*4/9, 35)
-- height: width/2
-- anchors.centerIn: parent
-- color: theme.backgroundColor
-- border.color: "grey"
-- border.width: 2
-- radius: 4
-- opacity: hasBattery ? (showOverlay ? 0.7 : (isConstrained() ? 0 : mouseArea.containsMouse*0.7)) : 0
--
-- Behavior on opacity { NumberAnimation { duration: 100 } }
-- }
--
-- Text {
-- id: overlayText
-- text: i18nc("overlay on the battery, needs to be really tiny", "%1%", percent);
-- color: theme.textColor
-- font.pixelSize: Math.max(parent.size/8, 11)
-- anchors.centerIn: labelRect
-- // keep the opacity 1 when labelRect.opacity=0.7
-- opacity: labelRect.opacity/0.7
-- }
-- }
-+ function updateLogic(updateBrightness) {
-+ Logic.updateCumulative();
-+ plasmoid.status = Logic.plasmoidStatus();
-+ Logic.updateTooltip();
-+ if (updateBrightness) {
-+ Logic.updateBrightness();
-+ }
-+ }
-
-- MouseArea {
-- id: mouseArea
-- anchors.fill: parent
-- hoverEnabled: true
-- onClicked: plasmoid.togglePopup()
-+ function popupEventSlot(popped) {
-+ dialogItem.popupShown = popped;
-+ }
-
-- PlasmaCore.ToolTip {
-- id: tooltip
-- target: mouseArea
-- image: "battery"
-- subText: batteries.tooltipText
-- }
-- }
-- }
-+ property Component compactRepresentation: CompactRepresentation {
-+ hasBattery: pmSource.data["Battery"]["Has Battery"]
-+ pmSource: plasmoid.rootItem.pmSource
-+ batteries: plasmoid.rootItem.batteries
-+ singleBattery: isConstrained() || !hasBattery
- }
-
- property QtObject pmSource: PlasmaCore.DataSource {
-@@ -150,12 +69,11 @@ Item {
- engine: "powermanagement"
- connectedSources: sources
- onDataChanged: {
-- Logic.updateTooltip();
-- Logic.updateBrightness();
-+ updateLogic(true);
- }
- onSourceAdded: {
- if (source == "Battery0") {
-- disconnectSource(source);
-+ disconnectSource(source);
- connectSource(source);
- }
- }
-@@ -172,45 +90,31 @@ Item {
- sourceFilter: "Battery[0-9]+"
-
- onDataChanged: {
-- Logic.updateCumulative();
--
-- var status = "PassiveStatus";
-- if (batteries.cumulativePluggedin) {
-- if (batteries.cumulativePercent <= 10) {
-- status = "NeedsAttentionStatus";
-- } else if (!batteries.allCharged) {
-- status = "ActiveStatus";
-- }
-- }
-- plasmoid.status = status;
-+ updateLogic()
- }
-
- property int cumulativePercent
-- property bool cumulativePluggedin: count > 0
-+ property bool cumulativePluggedin
- // true --> all batteries charged
- // false --> one of the batteries charging/discharging
- property bool allCharged
- property string tooltipText
-+ property string tooltipImage
- }
-
- PopupDialog {
- id: dialogItem
- property bool disableBrightnessUpdate: false
- model: batteries
-- hasBattery: batteries.cumulativePluggedin
-- percent: batteries.cumulativePercent
-+ anchors.fill: parent
-+
-+ isBrightnessAvailable: pmSource.data["PowerDevil"]["Screen Brightness Available"] ? true : false
-+ isKeyboardBrightnessAvailable: pmSource.data["PowerDevil"]["Keyboard Brightness Available"] ? true : false
-+
-+ showRemainingTime: show_remaining_time
-+
- pluggedIn: pmSource.data["AC Adapter"]["Plugged in"]
-- remainingMsec: parent.show_remaining_time ? Number(pmSource.data["Battery"]["Remaining msec"]) : 0
-- showSuspendButton: Platform.shouldOfferSuspend(pmSource)
-- showHibernateButton: Platform.shouldOfferHibernate(pmSource)
-
-- onSuspendClicked: {
-- plasmoid.togglePopup();
-- service = pmSource.serviceForSource("PowerDevil");
-- var operationName = Logic.callForType(type);
-- operation = service.operationDescription(operationName);
-- service.startOperationCall(operation);
-- }
- onBrightnessChanged: {
- if (disableBrightnessUpdate) {
- return;
-@@ -220,6 +124,15 @@ Item {
- operation.brightness = screenBrightness;
- service.startOperationCall(operation);
- }
-+ onKeyboardBrightnessChanged: {
-+ if (disableBrightnessUpdate) {
-+ return;
-+ }
-+ service = pmSource.serviceForSource("PowerDevil");
-+ operation = service.operationDescription("setKeyboardBrightness");
-+ operation.brightness = keyboardBrightness;
-+ service.startOperationCall(operation);
-+ }
- property int cookie1: -1
- property int cookie2: -1
- onPowermanagementChanged: {
-@@ -256,6 +169,8 @@ Item {
- cookie2 = job.result;
- });
- }
-+ Logic.powermanagementDisabled = !checked;
-+ updateLogic();
- }
- }
- }
-diff --git a/plasma/generic/applets/batterymonitor/contents/ui/config.ui b/plasma/generic/applets/batterymonitor/contents/ui/config.ui
-deleted file mode 100644
-index 3df38e2..0000000
---- a/plasma/generic/applets/batterymonitor/contents/ui/config.ui
-+++ /dev/null
-@@ -1,54 +0,0 @@
--<?xml version="1.0" encoding="UTF-8"?>
--<ui version="4.0">
-- <class>batteryConfig</class>
-- <widget class="QWidget" name="batteryConfig">
-- <property name="geometry">
-- <rect>
-- <x>0</x>
-- <y>0</y>
-- <width>247</width>
-- <height>73</height>
-- </rect>
-- </property>
-- <property name="windowTitle">
-- <string>Configure Battery Monitor</string>
-- </property>
-- <layout class="QVBoxLayout" name="verticalLayout">
-- <item>
-- <widget class="QCheckBox" name="kcfg_showBatteryString">
-- <property name="toolTip">
-- <string/>
-- </property>
-- <property name="text">
-- <string>Show charge &information</string>
-- </property>
-- </widget>
-- </item>
-- <item>
-- <widget class="QCheckBox" name="kcfg_showMultipleBatteries">
-- <property name="toolTip">
-- <string/>
-- </property>
-- <property name="text">
-- <string>Show the state for &each battery present</string>
-- </property>
-- </widget>
-- </item>
-- <item>
-- <spacer name="verticalSpacer">
-- <property name="orientation">
-- <enum>Qt::Vertical</enum>
-- </property>
-- <property name="sizeHint" stdset="0">
-- <size>
-- <width>20</width>
-- <height>15</height>
-- </size>
-- </property>
-- </spacer>
-- </item>
-- </layout>
-- </widget>
-- <resources/>
-- <connections/>
--</ui>
-diff --git a/plasma/generic/applets/batterymonitor/metadata.desktop b/plasma/generic/applets/batterymonitor/metadata.desktop
-index cd8f1a2..2b70e2c 100644
---- a/plasma/generic/applets/batterymonitor/metadata.desktop
-+++ b/plasma/generic/applets/batterymonitor/metadata.desktop
-@@ -159,7 +159,6 @@ Comment[zh_CN]=查看电池电源的状态
- Comment[zh_TW]=查看您的電池的電力狀態
- Encoding=UTF-8
- Keywords=Power Management;Battery;System;Energy;
--Keywords[bs]=Upravljanje napajenjem, Baterija, Sistem, Energija
- Keywords[ca]=Sistema de gestió d'energia;Bateria;Sistema;Energia;
- Keywords[cs]=Správa napájení;Baterie;Systém;Energie;
- Keywords[da]=Strømstyring;battery;system;energi;
-@@ -167,17 +166,16 @@ Keywords[de]=Energieverwaltungssystem;Akku;System;Energie;
- Keywords[el]=Διαχείριση ισχύος·Μπαταρία·Σύστημα·Ενέργεια·
- Keywords[es]=Gestión de energía;Batería;Sistema;Energía;
- Keywords[fi]=Virranhallinta;Akku;Järjestelmä;Virransäästö;
--Keywords[fr]=Gestion de l'énergie, Batterie, Système, Énergie,
--Keywords[gl]=Power Management;Battery;System;Energy;xestión da enerxía;batería;sistema;
-+Keywords[fr]=Gestion de l'énergie, Batterie, Système, Énergie,
- Keywords[hu]=Energiakezelés;Akkumulátor;Rendszer;Energia;
--Keywords[ia]=Gestion de energia; Batteria;Systema; Energia;
--Keywords[it]=Gestione energetica;Batteria;Sistema;Energia;
-+Keywords[ia]=Gestion de energia;Batteria;Systema; Energia;
- Keywords[kk]=Power Management;Battery;System;Energy;
- Keywords[lt]=Energijos valdymas,Baterija,Sistema,Energija,akumuliatorius;
- Keywords[mr]=वीज व्यवस्थापन; बॅटरी; प्रणाली; ऊर्जा;
- Keywords[nb]=Strømstyring; Batteri; System; Energi;
- Keywords[nl]=Energiebeheer;Batterij;Accu;Systeem;Energie;
--Keywords[pl]=Zarządzanie energią;bateria;system;energia;
-+Keywords[pa]=ਪਾਵਰ ਪਰਬੰਧ;ਬੈਟਰੀ;ਸਿਸਟਮ;ਊਰਜਾ;
-+Keywords[pl]=Zarządzanie Energią;Bateria;System;Energia
- Keywords[pt]=Gestão de Energia;Bateria;Sistema;Energia;
- Keywords[pt_BR]=Gerenciamento de energia;Bateria;Sistema;Energia;
- Keywords[ru]=Power Management;Battery;System;Energy;управление питанием;батарея;система;энергия;энергопотребление
-@@ -198,17 +196,17 @@ Type=Service
- X-KDE-ServiceTypes=Plasma/Applet,Plasma/PopupApplet
-
- X-Plasma-API=declarativeappletscript
--X-Plasma-DefaultSize=100,100
-+X-Plasma-DefaultSize=450,300
- X-Plasma-MainScript=ui/batterymonitor.qml
- X-Plasma-ConfigPlugins=powerdevilprofilesconfig,powerdevilactivitiesconfig,powerdevilglobalconfig
- X-Plasma-NotificationArea=true
-
--X-KDE-PluginInfo-Author=Sebastian Kügler
-+X-KDE-PluginInfo-Author=Sebastian Kügler, Kai Uwe Broulik
- X-KDE-PluginInfo-Category=System Information
--X-KDE-PluginInfo-Email=sebas@kde.org
-+X-KDE-PluginInfo-Email=sebas@kde.org, kde@privat.broulik.de
- X-KDE-PluginInfo-License=GPL
- X-KDE-PluginInfo-Name=battery
--X-KDE-PluginInfo-Version=1.0
-+X-KDE-PluginInfo-Version=2.0
- X-KDE-PluginInfo-Website=http://vizZzion.org
- X-KDE-PluginInfo-Depends=
- X-KDE-PluginInfo-EnabledByDefault=true
-diff --git a/plasma/generic/applets/batterymonitor/platformcontents/touch/code/platform.js b/plasma/generic/applets/batterymonitor/platformcontents/touch/code/platform.js
-deleted file mode 100644
-index aa57ab8..0000000
---- a/plasma/generic/applets/batterymonitor/platformcontents/touch/code/platform.js
-+++ /dev/null
-@@ -1,9 +0,0 @@
--
--function shouldOfferSuspend() {
-- return false;
--}
--
--function shouldOfferHibernate() {
-- return false;
--}
--
-diff --git a/plasma/generic/applets/batterymonitor/contents/ui/batterymonitor.qml b/plasma/generic/applets/batterymonitor/contents/ui/batterymonitor.qml
-index 357c2dc..feda7bc 100644
---- a/plasma/generic/applets/batterymonitor/contents/ui/batterymonitor.qml
-+++ b/plasma/generic/applets/batterymonitor/contents/ui/batterymonitor.qml
-@@ -84,13 +84,19 @@ Item {
- }
- }
-
-- property QtObject batteries: PlasmaCore.DataModel {
-+ property QtObject batteries: PlasmaCore.SortFilterModel {
- id: batteries
-- dataSource: pmSource
-- sourceFilter: "Battery[0-9]+"
--
-- onDataChanged: {
-- updateLogic()
-+ filterRole: "Is Power Supply"
-+ sortOrder: Qt.DescendingOrder
-+ sourceModel: PlasmaCore.SortFilterModel {
-+ sortRole: "Pretty Name"
-+ sortOrder: Qt.AscendingOrder
-+ sourceModel: PlasmaCore.DataModel {
-+ dataSource: pmSource
-+ sourceFilter: "Battery[0-9]+"
-+
-+ onDataChanged: updateLogic()
-+ }
- }
-
- property int cumulativePercent
-diff --git a/plasma/generic/applets/batterymonitor/contents/ui/AcAdapterItem.qml b/plasma/generic/applets/batterymonitor/contents/ui/AcAdapterItem.qml
-deleted file mode 100644
-index c2216f8..0000000
---- a/plasma/generic/applets/batterymonitor/contents/ui/AcAdapterItem.qml
-+++ /dev/null
-@@ -1,87 +0,0 @@
--/*
-- * Copyright 2012-2013 Daniel Nicoletti <dantti12@gmail.com>
-- * Copyright 2013 Kai Uwe Broulik <kde@privat.broulik.de>
-- *
-- * 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.
-- */
--
--import QtQuick 1.1
--import org.kde.plasma.core 0.1 as PlasmaCore
--import org.kde.plasma.components 0.1 as Components
--import org.kde.qtextracomponents 0.1
--
--Item {
-- id: brightnessItem
-- clip: true
-- width: parent.width
-- height: acIcon.height + padding.margins.top + padding.margins.bottom
--
-- property bool pluggedIn
-- property bool showTime
-- property string remainingString
--
-- QIconItem {
-- id: acIcon
-- width: theme.iconSizes.dialog
-- height: width
-- anchors {
-- top: parent.top
-- topMargin: padding.margins.top
-- left: parent.left
-- leftMargin: padding.margins.left
-- }
--
-- icon: pluggedIn ? QIcon("battery-charging-low") : QIcon("battery-low")
-- }
--
-- Components.Label {
-- id: acLabel
-- anchors {
-- top: acIcon.top
-- left: acIcon.right
-- leftMargin: 6
-- }
-- height: paintedHeight
-- text: i18n("AC Adapter")
-- }
--
-- Components.Label {
-- id: acStatus
-- anchors {
-- top: showTime ? acLabel.top : undefined
-- bottom: showTime ? undefined : acIcon.bottom
-- left: showTime ? acLabel.right : acIcon.right
-- leftMargin: showTime ? 3 : 6
-- }
-- height: paintedHeight
-- text: pluggedIn ? i18n("Plugged In") : i18n("Not Plugged In")
-- color: "#77"+(theme.textColor.toString().substr(1))
-- }
--
-- Components.Label {
-- id: acTime
-- anchors {
-- bottom: acIcon.bottom
-- left: acIcon.right
-- leftMargin: 6
-- }
-- height: paintedHeight
-- visible: showTime
-- text: pluggedIn ? i18n("Time remaining until full: %1", remainingString) : i18n("Time remaining until empty: %1", remainingString)
-- color: "#77"+(theme.textColor.toString().substr(1))
-- }
--}
--
-diff --git a/plasma/generic/applets/batterymonitor/contents/ui/BatteryIcon.qml b/plasma/generic/applets/batterymonitor/contents/ui/BatteryIcon.qml
-index 106c8f9..cdb2a35 100644
---- a/plasma/generic/applets/batterymonitor/contents/ui/BatteryIcon.qml
-+++ b/plasma/generic/applets/batterymonitor/contents/ui/BatteryIcon.qml
-@@ -32,11 +32,35 @@ Item {
- }
-
- PlasmaCore.SvgItem {
-+ id: batterySvg
- anchors.fill: parent
- svg: svg
- elementId: "Battery"
- }
-
-+ SequentialAnimation {
-+ running: percent < 5 && !pluggedIn
-+ alwaysRunToEnd: true
-+ loops: Animation.Infinite
-+
-+ NumberAnimation {
-+ target: batterySvg
-+ properties: "opacity"
-+ from: 1.0
-+ to: 0.2
-+ duration: 750
-+ easing.type: Easing.InCubic
-+ }
-+ NumberAnimation {
-+ target: batterySvg
-+ properties: "opacity"
-+ from: 0.2
-+ to: 1.0
-+ duration: 750
-+ easing.type: Easing.OutCubic
-+ }
-+ }
-+
- PlasmaCore.SvgItem {
- id: fillSvg
- anchors.fill: parent
Summary: KDE 4 base workspace components
Summary(pl.UTF-8): Podstawowe komponenty środowiska KDE 4
Name: kde4-kdebase-workspace
-Version: 4.10.5
+Version: 4.11.0
Release: 1
License: GPL v2+
Group: X11/Applications
Source0: ftp://ftp.kde.org/pub/kde/%{_state}/%{version}/src/%{orgname}-%{version}.tar.xz
-# Source0-md5: 46ebef4c24e383e5ed447a5374f8cb9e
+# Source0-md5: a90af95f905874b092709361b9526e3e
Source1: kdebase-kdesktop.pam
Source2: kdebase-kdm.pam
Source3: kdebase-kdm-np.pam
Patch1: %{name}-kdmconfig.patch
Patch2: %{name}-kdm_revertcrashlogic.patch
Patch3: kde4-kdebase-workspace-brightness.patch
-Patch4: kde4-kdebase-workspace-multibattery.patch
URL: http://www.kde.org/
BuildRequires: ConsoleKit-devel
BuildRequires: Mesa-libGLES-devel
%description solid -l pl.UTF-8
Solid - konfiguracja sprzętu w KDE 4.
-%package networkmanager
-Summary: Solid NetworkManager - network management using the NetworkManager daemon
-Summary(pl.UTF-8): Solid NetworkManager - zarządzanie siecią przy użyciu demona NetworkManager
-Group: X11/Applications
-Requires: %{name}-solid = %{version}-%{release}
-
-%description networkmanager
-Solid NetworkManager - network management using the NetworkManager
-daemon.
-
-%description networkmanager -l pl.UTF-8
-Solid NetworkManager - zarządzanie siecią przy użyciu demona
-NetworkManager.
-
%package kwrited
Summary: KDE write messaging daemon
Summary(pl.UTF-8): Demon do KDE obsługujący wymianę wiadomości za pomocą write
# https://bugs.kde.org/show_bug.cgi?id=281862
#%patch2 -p1
#%patch3 -p1
-%patch4 -p1
%build
install -d build
%attr(755,root,root) %{_libdir}/kde4/powerdevilhandlebuttoneventsaction_config.so
%attr(755,root,root) %{_libdir}/kde4/powerdevilrunscriptaction_config.so
%attr(755,root,root) %{_libdir}/kde4/powerdevilsuspendsessionaction_config.so
+%attr(755,root,root) %{_libdir}/kde4/powerdevilkeyboardbrightnesscontrolaction_config.so
%attr(755,root,root) %{_libdir}/libpowerdevilcore.so.0
%attr(755,root,root) %{_libdir}/libpowerdevilcore.so.*.*
%attr(755,root,root) %{_libdir}/libpowerdevilconfigcommonprivate.so.4
%{_datadir}/kde4/services/powerdevilprofilesconfig.desktop
%{_datadir}/kde4/services/powerdevilrunscriptaction.desktop
%{_datadir}/kde4/services/powerdevilsuspendsessionaction.desktop
+%{_datadir}/kde4/services/powerdevilkeyboardbrightnesscontrolaction.desktop
%{_datadir}/kde4/services/settings-power-management.desktop
%{_datadir}/kde4/servicetypes/powerdevilaction.desktop
%{_datadir}/kde4/services/keys.desktop
%{_datadir}/kde4/services/mouse.desktop
%{_datadir}/kde4/servicetypes/kwindecoration.desktop
-%{_datadir}/kde4/servicetypes/solidremotecontrolmanager.desktop
%{_datadir}/sounds/pop.wav
# old decoration libs
%attr(755,root,root) %{_libdir}/kde4/kcm_kwindecoration.so
%attr(755,root,root) %{_libdir}/libpowerdevilconfigcommonprivate.so
%attr(755,root,root) %{_libdir}/libprocesscore.so
%attr(755,root,root) %{_libdir}/libprocessui.so
-%attr(755,root,root) %{_libdir}/libsolidcontrol.so
-%attr(755,root,root) %{_libdir}/libsolidcontrolifaces.so
%attr(755,root,root) %{_libdir}/libsystemsettingsview.so
%attr(755,root,root) %{_libdir}/libtaskmanager.so
%attr(755,root,root) %{_libdir}/libweather_ion.so
%{_includedir}/kworkspace
%{_includedir}/ksgrd
%{_includedir}/ksysguard
-%{_includedir}/solid
%{_includedir}/systemsettingsview
%{_includedir}/taskmanager
%{_includedir}/plasmaclock
%attr(755,root,root) %{_bindir}/kwin
%attr(755,root,root) %{_bindir}/kwin_gles
%attr(755,root,root) %{_libdir}/libkwineffects.so.*
-%attr(755,root,root) %{_libdir}/libkwinnvidiahack.so.*
%attr(755,root,root) %{_libdir}/libkdeinit4_kwin.so
%attr(755,root,root) %{_libdir}/libkdeinit4_kwin_gles.so
%attr(755,root,root) %{_libdir}/libkdeinit4_kwin_rules_dialog.so
%attr(755,root,root) %{_libdir}/kde4/kcm_kwin_scripts.so
%attr(755,root,root) %{_libdir}/kde4/kcm_kwin4_effect_builtins.so
+%attr(755,root,root) %{_libdir}/kde4/kcm_kwin4_genericscripted.so
%attr(755,root,root) %{_libdir}/kde4/kcm_kwincompositing.so
%attr(755,root,root) %{_libdir}/kde4/kcm_kwindesktop.so
%attr(755,root,root) %{_libdir}/kde4/kcm_kwinoptions.so
%attr(755,root,root) %{_libdir}/kconf_update_bin/kwin_update_tabbox_qml_settings
%attr(755,root,root) %{_libdir}/kconf_update_bin/kwin_update_settings_49
%attr(755,root,root) %{_libdir}/kconf_update_bin/kwin_update_settings_410
+%attr(755,root,root) %{_libdir}/kconf_update_bin/kwin_update_settings_411
%attr(755,root,root) %{_libdir}/kconf_update_bin/notifications-to-orgkdenotifications
%attr(755,root,root) %{_libdir}/kde4/libexec/kwin_killer_helper
%attr(755,root,root) %{_libdir}/kde4/libexec/kwin_opengl_test
%dir %{_datadir}/apps/kwin
%{_datadir}/apps/kwin/*.glsl
%{_datadir}/apps/kwin/*.png
-%{_datadir}/apps/kwin/*.frag
-%{_datadir}/apps/kwin/*.vert
%dir %{_datadir}/apps/kwin/default_rules
%{_datadir}/apps/kwin/default_rules/fsp_workarounds_1.kwinrules
%{_datadir}/apps/kwin/effects
%{_datadir}/apps/kwin/stripTitle.js
%dir %{_datadir}/apps/kwin/decorations
%{_datadir}/apps/kwin/tabbox
+%{_datadir}/apps/kwin/desktoptabbox
+%{_datadir}/apps/kwin/shaders
%{_datadir}/config/kwinscripts.knsrc
%{_datadir}/config/kwinswitcher.knsrc
%{_datadir}/config.kcfg/kwin.kcfg
%{_datadir}/kde4/services/kwin-script-desktopchangeosd.desktop
%{_datadir}/kde4/services/kwin-script-synchronizeskipswitcher.desktop
%{_datadir}/kde4/services/kwin-script-videowall.desktop
-%{_datadir}/kde4/services/kwin/boxswitch.desktop
-%{_datadir}/kde4/services/kwin/boxswitch_config.desktop
%{_datadir}/kde4/services/kwin/coverswitch.desktop
%{_datadir}/kde4/services/kwin/coverswitch_config.desktop
%{_datadir}/kde4/services/kwin/cubeslide_config.desktop
%{_datadir}/kde4/services/kwin/dashboard_config.desktop
%{_datadir}/kde4/services/kwin/desktopgrid.desktop
%{_datadir}/kde4/services/kwin/desktopgrid_config.desktop
-%{_datadir}/kde4/services/kwin/dialogparent.desktop
%{_datadir}/kde4/services/kwin/diminactive.desktop
%{_datadir}/kde4/services/kwin/diminactive_config.desktop
%{_datadir}/kde4/services/kwin/dimscreen.desktop
-%{_datadir}/kde4/services/kwin/explosion.desktop
#%{_datadir}/kde4/services/kwin/fade.desktop
%{_datadir}/kde4/services/kwin/fallapart.desktop
%{_datadir}/kde4/services/kwin/invert.desktop
%{_datadir}/kde4/services/kwin/invert_config.desktop
-%{_datadir}/kde4/services/kwin/login.desktop
-%{_datadir}/kde4/services/kwin/login_config.desktop
+%{_datadir}/kde4/services/kwin/kscreen.desktop
#%{_datadir}/kde4/services/kwin/logout.desktop
%{_datadir}/kde4/services/kwin/lookingglass.desktop
%{_datadir}/kde4/services/kwin/lookingglass_config.desktop
%{_datadir}/kde4/services/kwin/minimizeanimation.desktop
%{_datadir}/kde4/services/kwin/mousemark.desktop
%{_datadir}/kde4/services/kwin/mousemark_config.desktop
-%{_datadir}/kde4/services/kwin/outline.desktop
%{_datadir}/kde4/services/kwin/presentwindows.desktop
%{_datadir}/kde4/services/kwin/presentwindows_config.desktop
%{_datadir}/kde4/services/kwin/resize.desktop
%{_datadir}/kde4/services/kwin/resize_config.desktop
-%{_datadir}/kde4/services/kwin/scalein.desktop
+%{_datadir}/kde4/services/kwin/screenedgeeffect.desktop
%{_datadir}/kde4/services/kwin/screenshot.desktop
#%{_datadir}/kde4/services/kwin/shadow.desktop
#%{_datadir}/kde4/services/kwin/shadow_config.desktop
%{_datadir}/kde4/services/kwin/sheet.desktop
%{_datadir}/kde4/services/kwin/slideback.desktop
%{_datadir}/kde4/services/kwin/snaphelper.desktop
-%{_datadir}/kde4/services/kwin/translucency.desktop
-%{_datadir}/kde4/services/kwin/translucency_config.desktop
%{_datadir}/kde4/services/kwinscreenedges.desktop
%{_datadir}/kde4/services/kwin/blur.desktop
%{_datadir}/kde4/services/kwin/blur_config.desktop
%{_datadir}/kde4/servicetypes/kwineffect.desktop
%{_datadir}/kde4/servicetypes/kwinscript.desktop
%{_datadir}/kde4/servicetypes/kwinwindowswitcher.desktop
+%{_datadir}/kde4/servicetypes/kwindesktopswitcher.desktop
%{_datadir}/apps/kconf_update/plasma-add-shortcut-to-menu.upd
%{_datadir}/apps/kconf_update/krdb_libpathwipe.upd
#%{_datadir}/apps/kconf_update/kwin.upd
#%{_datadir}/apps/kconf_update/kwin_blacklist.upd
#%{_datadir}/apps/kconf_update/khotkeys_printscreen.upd
%{_datadir}/apps/kconf_update/notifications-to-orgkdenotifications.upd
+%attr(755,root,root) %{_datadir}/apps/kconf_update/kwin_translate_activity_rule.sh
+%{_datadir}/apps/kconf_update/kwin_translate_activity_rule.upd
+%attr(755,root,root) %{_datadir}/apps/kconf_update/kwin_translate_confrequest_rule.sh
+%{_datadir}/apps/kconf_update/kwin_translate_confrequest_rule.upd
+%{_datadir}/apps/kconf_update/kwin_update_411.upd
+%{_datadir}/apps/kconf_update/oxygen.upd
+%attr(755,root,root) %{_datadir}/apps/kconf_update/update_oxygen.pl
%{_iconsdir}/oxygen/16x16/apps/kwin.png
%{_iconsdir}/oxygen/32x32/apps/kwin.png
%{_iconsdir}/oxygen/48x48/apps/kwin.png
%{_iconsdir}/Oxygen_White
%{_iconsdir}/Oxygen_Yellow
%{_iconsdir}/Oxygen_Zion
+%{_iconsdir}/KDE_Classic
%files plasma
%defattr(644,root,root,755)
%attr(755,root,root) %{_libdir}/kde4/plasma_engine_keystate.so
%attr(755,root,root) %{_libdir}/kde4/plasma_engine_metadata.so
%attr(755,root,root) %{_libdir}/kde4/plasma_engine_mouse.so
-%attr(755,root,root) %{_libdir}/kde4/plasma_engine_network.so
%attr(755,root,root) %{_libdir}/kde4/plasma_engine_nowplaying.so
%attr(755,root,root) %{_libdir}/kde4/plasma_engine_notifications.so
%attr(755,root,root) %{_libdir}/kde4/plasma_engine_places.so
%attr(755,root,root) %{_libdir}/kde4/plasma_engine_weather.so
%attr(755,root,root) %{_libdir}/kde4/plasma_engine_devicenotifications.so
%attr(755,root,root) %{_libdir}/kde4/plasma_engine_statusnotifieritem.so
-%attr(755,root,root) %{_libdir}/kde4/plasma_package_ggl.so
%attr(755,root,root) %{_libdir}/kde4/plasma_packagestructure_share.so
-%attr(755,root,root) %{_libdir}/kde4/plasma_scriptengine_ggl.so
%attr(755,root,root) %{_libdir}/kde4/plasma-geolocation-gps.so
%attr(755,root,root) %{_libdir}/kde4/plasma-geolocation-ip.so
%attr(755,root,root) %{_libdir}/kde4/plasma_applet_panelspacer_internal.so
%{_datadir}/kde4/services/plasma-applet-org.kde.showActivityManager.desktop
%{_datadir}/kde4/services/plasma-dataengine-share-addon-imgsusepasteorg.desktop
%{_datadir}/kde4/services/plasma-dataengine-share-addon-kde.desktop
+%{_datadir}/kde4/services/plasma-dataengine-share-addon-im9.desktop
%{_datadir}/kde4/services/plasma-layout-org.kde.plasma-desktop.SaL.desktop
%{_datadir}/kde4/services/plasma-layout-org.kde.plasma-desktop.desktopIcons.desktop
%{_datadir}/kde4/services/plasma-runner-activityrunner.desktop
%dir %{_datadir}/apps/plasma/services
%{_datadir}/apps/plasma/packages/org.kde.desktop.activitymanager
%{_datadir}/apps/plasma/packages/org.kde.desktop.widgetexplorer
+%{_datadir}/apps/plasma/packages/org.kde.plasma.tasks
%{_datadir}/apps/plasma/plasmoids/battery
%{_datadir}/apps/plasma/plasmoids/lockout
%{_datadir}/apps/plasma/plasmoids/notifier
%{_datadir}/apps/plasma/services/statusnotifieritem.operations
%{_datadir}/apps/plasma/services/mpris2.operations
%dir %{_datadir}/apps/plasma/shareprovider
+%{_datadir}/apps/plasma/shareprovider/im9
%{_datadir}/apps/plasma/shareprovider/imgsusepasteorg
%{_datadir}/apps/plasma/shareprovider/imgur
%{_datadir}/apps/plasma/shareprovider/kde
%{_datadir}/kde4/services/plasma-dataengine-filebrowser.desktop
%{_datadir}/kde4/services/plasma-dataengine-hotplug.desktop
%{_datadir}/kde4/services/plasma-dataengine-mouse.desktop
-%{_datadir}/kde4/services/plasma-dataengine-network.desktop
%{_datadir}/kde4/services/plasma-dataengine-places.desktop
%{_datadir}/kde4/services/plasma-dataengine-powermanagement.desktop
%{_datadir}/kde4/services/plasma-dataengine-rss.desktop
%{_datadir}/kde4/services/plasma-wallpaper-image.desktop
#%{_datadir}/kde4/services/plasma-applet-ggl-photos.desktop
#%{_datadir}/kde4/services/plasma-applet-ggl-rss.desktop
-%{_datadir}/kde4/services/plasma-packagestructure-googlegadgets.desktop
-%{_datadir}/kde4/services/plasma-scriptengine-googlegadgets.desktop
%{_datadir}/kde4/services/plasma-sal-bookmarks.desktop
%{_datadir}/kde4/services/plasma-sal-contacts.desktop
%{_datadir}/kde4/services/plasma-sal-education.desktop
%files solid
%defattr(644,root,root,755)
%attr(755,root,root) %{_bindir}/solid-action-desktop-gen
-#%attr(755,root,root) %{_bindir}/solid-bluetooth
-%attr(755,root,root) %{_bindir}/solid-network
-#%attr(755,root,root) %{_bindir}/solid-powermanagement
-%attr(755,root,root) %{_libdir}/libsolidcontrol.so.*
-%attr(755,root,root) %{_libdir}/libsolidcontrolifaces.so.*
%attr(755,root,root) %{_libdir}/kde4/devinfo.so
-%attr(755,root,root) %{_libdir}/kde4/kcm_solid.so
%attr(755,root,root) %{_libdir}/kde4/kcm_solid_actions.so
-%attr(755,root,root) %{_libdir}/kde4/solid_fakenet.so
-%attr(755,root,root) %{_libdir}/kde4/solid_modemmanager04.so
-#%attr(755,root,root) %{_libdir}/kde4/solid_hal_power.so
-#%attr(755,root,root) %{_libdir}/kde4/solid_bluez.so
-%attr(755,root,root) %{_libdir}/kde4/solid_wicd.so
-#%attr(755,root,root) %{_libdir}/kde4/solid_lirc.so
%dir %{_datadir}/apps/solid
%dir %{_datadir}/apps/solid/actions
%dir %{_datadir}/apps/solid/devices
%{_datadir}/apps/solid/devices/*.desktop
-%dir %{_datadir}/apps/solidfakenetbackend
%{_datadir}/apps/solid/actions/test-predicate-openinwindow.desktop
-%{_datadir}/apps/solidfakenetbackend/fakenetworking.xml
%{_datadir}/apps/plasma/services/soliddevice.operations
%{_datadir}/kde4/services/deviceinfocategory.desktop
%{_datadir}/kde4/services/devinfo.desktop
-%{_datadir}/kde4/services/kcm_solid.desktop
-%{_datadir}/kde4/services/solidbackends
%{_datadir}/kde4/services/solid-actions.desktop
-%{_datadir}/kde4/servicetypes/solidmodemmanager.desktop
-%{_datadir}/kde4/servicetypes/solidnetworkmanager.desktop
#%{_datadir}/kde4/servicetypes/solidpowermanager.desktop
%{_datadir}/kde4/servicetypes/solid-device-type.desktop
#%{_datadir}/kde4/servicetypes/solidremotecontrolmanager.desktop
%dir %{_datadir}/apps/kcmsolidactions
%{_datadir}/apps/kcmsolidactions/solid-action-template.desktop
-%files networkmanager
-%defattr(644,root,root,755)
-#%attr(755,root,root) %{_libdir}/kde4/solid_networkmanager07.so
-%attr(755,root,root) %{_libdir}/kde4/solid_networkmanager09_fake.so
-%{_iconsdir}/*/*x*/apps/networkmanager.png
-
%files kwrited
%defattr(644,root,root,755)
%attr(755,root,root) %{_libdir}/kde4/kded_kwrited.so