File cpu-hog.diff of Package powerdevil

--- daemon/PollSystemLoader.cpp	2008-10-27 14:51:16.000000000 +0100
+++ daemon/PollSystemLoader.cpp	2008-12-05 16:27:41.000000000 +0100
@@ -41,7 +41,7 @@
 
     // Test each polling system
     WidgetBasedPoller *wpl = new WidgetBasedPoller(this);
-    XSyncBasedPoller *xpl = new XSyncBasedPoller(this);
+    XSyncBasedPoller *xpl = XSyncBasedPoller::instance();
     TimerBasedPoller *tpl = new TimerBasedPoller(this);
 
     if (wpl->isAvailable()) {
@@ -55,7 +55,6 @@
     }
 
     wpl->deleteLater();
-    xpl->deleteLater();
     tpl->deleteLater();
 }
 
@@ -96,7 +95,7 @@
         m_poller = new TimerBasedPoller(this);
         break;
     case AbstractSystemPoller::XSyncBased:
-        m_poller = new XSyncBasedPoller(this);
+        m_poller = XSyncBasedPoller::instance();
         break;
     default:
         return false;
@@ -119,7 +118,9 @@
     if (m_poller) {
         m_poller->unloadPoller();
 
-        m_poller->deleteLater();
+        if (m_poller->getPollingType() != AbstractSystemPoller::XSyncBased) {
+            m_poller->deleteLater();
+        }
     }
 
     return true;
--- daemon/powerdevil.desktop	2008-10-27 14:51:16.000000000 +0100
+++ daemon/powerdevil.desktop	2008-12-05 16:27:41.000000000 +0100
@@ -9,7 +9,9 @@
 X-KDE-Kded-phase=1
 
 Name=PowerDevil
+Name[ar]=عفريت الطاقة
 Name[gu]=પાવરડેવિલ
+Name[hi]=पावर-डेविल
 Name[kn]=ಪವರ್ ಡೆವಿಲ್
 Name[nds]=Stroomdüvel
 Name[pa]=ਪਾਵਰ-ਡੀਵਿਲ
@@ -17,21 +19,35 @@
 Name[x-test]=xxPowerDevilxx
 
 Comment=A Laptop Power Management Daemon
+Comment[ar]=مراقب إدارة الطاقة للحواسيب المحمولة
 Comment[be@latin]=Słužba kiravańnia enerhijaj na laptopie
+Comment[ca]=Un dimoni per a la gestió d'energia dels portàtils
+Comment[de]=Ein Energieverwaltungsdienst für Notebooks
 Comment[el]=Ένας δαίμονας διαχείρισης ενέργειας του φορητού υπολογιστή
+Comment[es]=Un demonio de gestión de energía de portátiles
+Comment[et]=Sülearvuti voolutarbe haldamise deemon
 Comment[gl]=Un daemon de xestión da enerxía para portátiles
 Comment[gu]=લેપટોપ પાવર વ્યવસ્થાપક ડેમોન
+Comment[hi]=लैपटॉप बिज़ली प्रबंधन डेमन
+Comment[it]=Un demone per laptop per la gestione dell'energia
+Comment[ja]=ラップトップ電源管理のデーモン
 Comment[kk]=Лаптоп қуаттандыруын басқару қызметі
 Comment[km]=ដេមិន​គ្រប់គ្រង​ថាមពល​របស់​កុំព្យូទ័រ​យួរដៃ
 Comment[kn]=ಉಡಿಗಣಕ (ಲಾಪ್ಟಾಪ್) ವಿದ್ಯುಚ್ಛಕ್ತಿ ವ್ಯವಸ್ಥಾಪನಾ ನೇಪಥಿಕ (ಡೀಮನ್)
+Comment[lv]=Klēpjdatora energokontroles dēmons
+Comment[ml]=ഒരു ലാപ്ടോപ് പവര്‍ മാനേജ്മെന്റ് നിരന്തരപ്രവ്രത്തി
 Comment[nb]=Strømstyringsnisse for bærbare maskiner
 Comment[nds]=En Stroomkuntrull-Dämoon för Klappreekners
+Comment[nl]=Een energiebeheerdaemon voor laptops
 Comment[pa]=ਇੱਕ ਲੈਪਟਾਪ ਪਾਵਰ ਮੈਨਿਜਮੈਂਟ ਡੈਮਨ
 Comment[pt]=Um Sistema de Gestão da Energia para Portáteis
 Comment[pt_BR]=Um Sistema de Gestão da Energia para Portáteis
+Comment[ro]=Demon pentru gestiunea energiei laptopului
 Comment[ru]=Служба управления питанием ноутбука
 Comment[sv]=En strömspardemon för bärbara datorer
+Comment[th]=ดีมอนจัดการพลังงานของเครื่องแลปทอป
 Comment[tr]=Dizüstü Bilgisayarlar için bir Güç Yönetimi Servisi
 Comment[uk]=Фонова служба керування живленням портативного комп’ютера
 Comment[x-test]=xxA Laptop Power Management Daemonxx
+Comment[zh_CN]=便携式电脑电源管理守护程序
 Comment[zh_TW]=筆記型電腦電源管理守護程式
--- daemon/XSyncBasedPoller.cpp	2008-10-27 14:51:16.000000000 +0100
+++ daemon/XSyncBasedPoller.cpp	2008-12-05 16:27:41.000000000 +0100
@@ -22,6 +22,28 @@
 #include <QX11Info>
 
 #include <klocalizedstring.h>
+#include <kglobal.h>
+
+class XSyncBasedPollerHelper
+{
+public:
+    XSyncBasedPollerHelper() : q(0) {}
+    ~XSyncBasedPollerHelper() {
+        delete q;
+    }
+    XSyncBasedPoller *q;
+};
+
+K_GLOBAL_STATIC(XSyncBasedPollerHelper, s_globalXSyncBasedPoller)
+
+XSyncBasedPoller *XSyncBasedPoller::instance()
+{
+    if (!s_globalXSyncBasedPoller->q) {
+        new XSyncBasedPoller;
+    }
+
+    return s_globalXSyncBasedPoller->q;
+}
 
 XSyncBasedPoller::XSyncBasedPoller(QObject *parent)
         : AbstractSystemPoller(parent)
@@ -30,65 +52,69 @@
         , m_idleCounter(None)
         , m_timeoutAlarm(None)
         , m_resetAlarm(None)
-        , m_error(false)
 #endif
+        , m_available(true)
 {
+    Q_ASSERT(!s_globalXSyncBasedPoller->q);
+    s_globalXSyncBasedPoller->q = this;
+
 #ifdef HAVE_XSYNC
     int sync_major, sync_minor;
+    int ncounters;
 
     if (!XSyncQueryExtension(m_display, &m_sync_event, &m_sync_error)) {
-        m_error = true;
+        m_available = false;
         return;
     }
 
     if (!XSyncInitialize(m_display, &sync_major, &sync_minor)) {
-        m_error = true;
+        m_available = false;
         return;
     }
 
-    kDebug() << "XSync Inited";
-#endif
-}
-
-XSyncBasedPoller::~XSyncBasedPoller()
-{
-}
-
-QString XSyncBasedPoller::name()
-{
-    return i18n("XSync Based (recommended)");
-}
+    kDebug() << sync_major << sync_minor;
 
-bool XSyncBasedPoller::isAvailable()
-{
-#ifdef HAVE_XSYNC
-    if (m_error) {
-        return false;
-    }
-
-    int ncounters;
     m_counters = XSyncListSystemCounters(m_display, &ncounters);
 
     bool idleFound = false;
 
-    for (int i = 0; i < ncounters && !m_idleCounter; ++i) {
+    for (int i = 0; i < ncounters; ++i) {
         if (!strcmp(m_counters[i].name, "IDLETIME")) {
-            m_idleCounter = m_counters[i].counter;
             idleFound = true;
+            break;
         }
     }
 
     XSyncFreeSystemCounterList(m_counters);
 
     if (!idleFound) {
-        return false;
+        m_available = false;
     }
 
-    return true;
-
 #else
-    return false;
+    m_available = false;
 #endif
+
+    if (m_available) {
+        kDebug() << "XSync seems available and ready";
+    } else {
+        kDebug() << "XSync seems not available";
+    }
+
+}
+
+XSyncBasedPoller::~XSyncBasedPoller()
+{
+}
+
+QString XSyncBasedPoller::name()
+{
+    return i18n("XSync Based (recommended)");
+}
+
+bool XSyncBasedPoller::isAvailable()
+{
+    return m_available;
 }
 
 bool XSyncBasedPoller::setUpPoller()
@@ -100,6 +126,8 @@
         return false;
     }
 
+    kDebug() << "XSync Inited";
+
     m_counters = XSyncListSystemCounters(m_display, &ncounters);
 
     bool idleFound = false;
@@ -252,12 +280,13 @@
     flags = XSyncCACounter | XSyncCAValueType | XSyncCATestType |
             XSyncCAValue | XSyncCADelta;
 
-    if (*alarm) {
+    if (*alarm)
         XSyncChangeAlarm(dpy, *alarm, flags, &attr);
-    } else {
+    else
         *alarm = XSyncCreateAlarm(dpy, flags, &attr);
-    }
 }
 #endif
 
 #include "XSyncBasedPoller.moc"
+
+
--- daemon/XSyncBasedPoller.h	2008-10-27 14:51:16.000000000 +0100
+++ daemon/XSyncBasedPoller.h	2008-12-05 16:27:41.000000000 +0100
@@ -39,6 +39,9 @@
     Q_OBJECT
 
 public:
+
+    static XSyncBasedPoller *instance();
+
     XSyncBasedPoller(QObject *parent = 0);
     virtual ~XSyncBasedPoller();
 
@@ -84,7 +87,9 @@
     XSyncAlarm          m_resetAlarm;
 #endif
     QWidget * m_filterWidget;
-    bool m_error;
+    bool m_available;
 };
 
 #endif /* XSYNCBASEDPOLLER_H */
+
+
--- kcmodule/CapabilitiesPage.cpp	2008-10-27 14:51:16.000000000 +0100
+++ kcmodule/CapabilitiesPage.cpp	2009-01-16 13:26:54.000000000 +0100
@@ -211,13 +211,17 @@
     }
 #endif
 
-#ifdef HAVE_XSCREENSAVER
-    xss = true;
-#endif
-
-#ifdef HAVE_XSYNC
-    xsync = true;
-#endif
+    QDBusMessage msg = QDBusMessage::createMethodCall("org.kde.kded",
+                       "/modules/powerdevil", "org.kde.PowerDevil", "getSupportedPollingSystems");
+    QDBusReply<QVariantMap> systems = QDBusConnection::sessionBus().call(msg);
+
+    foreach(const QVariant &ent, systems.value()) {
+        if (ent.toInt() == XSyncBased) {
+            xsync = true;
+        } else if (ent.toInt() == WidgetBased) {
+            xss = true;
+        }
+    }
 
 #ifdef HAVE_XTEST
     xtest = true;
@@ -275,28 +279,11 @@
                             "not available. XSync grants extra efficiency and performance, saving your "
                             "battery and CPU. It is advised to use PowerDevil with XSync enabled."));
 
-    } else if (PowerDevilSettings::pollingSystem() != 2) {
-
-        QDBusMessage msg = QDBusMessage::createMethodCall("org.kde.kded",
-                           "/modules/powerdevil", "org.kde.PowerDevil", "getSupportedPollingSystems");
-        QDBusReply<QVariantMap> systems = QDBusConnection::sessionBus().call(msg);
-
-        bool found = false;
-
-        foreach(const QVariant &ent, systems.value()) {
-            if (ent.toInt() == 2) {
-                found = true;
-            }
-        }
-
-        if (!found) {
-            setIssue(false, i18n("No issues found with your configuration."));
-        } else {
-            setIssue(true, i18n("XSync does not seem your preferred query backend, though it is available "
-                                "on your system. Using it largely improves performance and efficiency, and "
-                                "it is strongly advised. Click on the button below to enable it now."),
-                     i18n("Enable XSync Backend"), "dialog-ok-apply", SLOT(enableXSync()));
-        }
+    } else if (PowerDevilSettings::pollingSystem() != 2 && xsync) {
+        setIssue(true, i18n("XSync does not seem your preferred query backend, though it is available "
+                            "on your system. Using it largely improves performance and efficiency, and "
+                            "it is strongly advised. Click on the button below to enable it now."),
+                 i18n("Enable XSync Backend"), "dialog-ok-apply", SLOT(enableXSync()));
     } else {
         setIssue(false, i18n("No issues found with your configuration."));
     }
--- kcmodule/CapabilitiesPage.h	2008-09-29 00:24:21.000000000 +0200
+++ kcmodule/CapabilitiesPage.h	2008-12-05 16:27:41.000000000 +0100
@@ -47,6 +47,13 @@
                   const char *slot = 0, const QString &button2 = QString(),
                   const QString &buticon2 = QString(), const char *slot2 = 0);
 
+    enum PollingType {
+        Abstract = -1,
+        WidgetBased = 1,
+        XSyncBased = 2,
+        TimerBased = 3
+    };
+
 signals:
     void reload();
     void reloadModule();
--- kcmodule/generalPage.ui	2008-10-27 14:51:16.000000000 +0100
+++ kcmodule/generalPage.ui	2008-12-05 16:27:41.000000000 +0100
@@ -124,19 +124,6 @@
             </property>
            </widget>
           </item>
-          <item row="3" column="1" >
-           <widget class="QPushButton" name="notificationsButton" >
-            <property name="maximumSize" >
-             <size>
-              <width>200</width>
-              <height>16777215</height>
-             </size>
-            </property>
-            <property name="text" >
-             <string>Configure Notifications</string>
-            </property>
-           </widget>
-          </item>
           <item row="4" column="0" >
            <widget class="QCheckBox" name="suspendWait" >
             <property name="toolTip" >
@@ -173,6 +160,36 @@
             </property>
            </widget>
           </item>
+          <item row="3" column="1" >
+           <layout class="QHBoxLayout" name="horizontalLayout_2" >
+            <item>
+             <widget class="QPushButton" name="notificationsButton" >
+              <property name="maximumSize" >
+               <size>
+                <width>16777215</width>
+                <height>16777215</height>
+               </size>
+              </property>
+              <property name="text" >
+               <string>Configure Notifications</string>
+              </property>
+             </widget>
+            </item>
+            <item>
+             <spacer name="horizontalSpacer" >
+              <property name="orientation" >
+               <enum>Qt::Horizontal</enum>
+              </property>
+              <property name="sizeHint" stdset="0" >
+               <size>
+                <width>40</width>
+                <height>20</height>
+               </size>
+              </property>
+             </spacer>
+            </item>
+           </layout>
+          </item>
          </layout>
         </widget>
        </item>
@@ -273,8 +290,8 @@
        <rect>
         <x>0</x>
         <y>0</y>
-        <width>571</width>
-        <height>431</height>
+        <width>263</width>
+        <height>206</height>
        </rect>
       </property>
       <attribute name="label" >
--- kcmodule/powerdevilconfig.desktop	2008-09-29 18:39:20.000000000 +0200
+++ kcmodule/powerdevilconfig.desktop	2008-12-05 16:27:41.000000000 +0100
@@ -11,33 +11,72 @@
 X-KDE-System-Settings-Parent-Category=system
 
 Name=Power Management
+Name[ar]=ادارة الطاقة
 Name[be@latin]=Kiravańnie enerhijaj
+Name[ca]=Gestió d'energia
+Name[de]=Energieverwaltung
 Name[el]=Διαχείριση ενέργειας
+Name[es]=Gestión de energía
+Name[et]=Voolutarbe haldus
 Name[gl]=Xestión da enerxía
 Name[gu]=પાવર વ્યવસ્થાપક
+Name[he]=ניהול צריכת חשמל
+Name[hi]=बिज़ली प्रबंधन
+Name[it]=Gestione energetica
+Name[ja]=電源管理
 Name[kk]=Қуаттандыруды басқару
 Name[km]=ការ​គ្រប់គ្រង​ថាមពល
 Name[kn]=ವಿದ್ಯುಚ್ಛಕ್ತಿ ವ್ಯವಸ್ಥಾಪನೆ
+Name[lt]=Energijos valdymas
+Name[lv]=Energokontrole
+Name[ml]=പവര്‍ മാനേജ്മെന്റ്
+Name[nb]=Strømstyring
 Name[nds]=Stroomkuntrull
+Name[nl]=Energiebeheer
+Name[pa]=ਪਾਵਰ ਮੈਨਿਜਮੈਂਟ
 Name[pt]=Gestão de Energia
-Name[pt_BR]=Gestão de Energia
+Name[pt_BR]=Gerenciamento de energia
+Name[ro]=Gestiune energie
+Name[ru]=Управление питанием
 Name[sv]=Strömsparhantering
+Name[th]=การจัดการพลังงาน
 Name[tr]=Güç Yönetimi
 Name[uk]=Керування живленням
 Name[x-test]=xxPower Managementxx
+Name[zh_CN]=电源管理
 Name[zh_TW]=電源管理
 
 Comment=Display brightness, suspend and power profile settings
+Comment[ar]=تعرض الإضاءءة و التعليق و إعدادات ملف توصيف الطاقة
+Comment[be@latin]=Pakažy nałady jarkaści, snu j profil kiravańnia enerhijaj
+Comment[ca]=Mostra els paràmetres de la lluminositat, suspensió i del perfil d'energia
+Comment[de]=Einstellungen zu Bildschirmhelligkeit, Ruhezustand und Energieprofilen
+Comment[el]=Φωτεινότητα οθόνης, αναστολή και ρυθμίσεις προφίλ ενέργειας
+Comment[es]=Configuración del perfil de brillo de la pantalla, suspensión y energía
+Comment[et]=Heleduse, passiivseisundi ja voolutarbe profiili seadistuste näitamine
 Comment[gl]=Mostra os axustes de brillo, suspensión e enerxía do perfíl
+Comment[gu]=ડિસ્પ્લે ઉજાસ, સસ્પેન્ડ અને પાવર પ્રોફાઇલ ગોઠવણીઓ
+Comment[hi]=चमकीलापन, निलंबन तथा पावर प्रोफ़ाइल विन्यास दिखाएँ
+Comment[it]=Mostra le impostazioni di luminosità, sospensione e profilo energetico
+Comment[ja]=ディスプレイの明るさ、サスペンド、電源プロファイルの設定
 Comment[kk]=Дисплей жарықтығы, қалғу, қуаттандыру профилінің параметрлері
 Comment[km]=បង្ហាញ​ពន្លឺ ផ្អាក និង​កា​រកំណត់​ទម្រង់​ថាមពល
 Comment[kn]=ಪ್ರದರ್ಶನ ಉಜ್ವಲತೆ (ಬ್ರೈಟ್ನೆಸ್), ವಜಾಮಾಡುವಿಕೆ (ಸಸ್ಪೆಂಡ್) ಹಾಗೂ ವಿದ್ಯುಚ್ಛಕ್ತಿ ವೈಶಿಷ್ಟ್ಯ ಸಂಯೋಜನೆಗಳು
+Comment[lv]=Parāda gaišumu, iemigšanas un jaudas profila iestatījumus
+Comment[ml]=തെളിച്ചവും, താല്‍കാലികമായി നിര്‍ത്തിവെക്കാനുള്ളതിന്റെയും ഊര്‍ജ്ജത്തിന്റെയും പ്രൊഫൈല്‍ സജ്ജീകരണങ്ങള്‍ കാണിക്കുക.
+Comment[nb]=Innstillinger for lysstyrke, hvile/dvale og strømprofiler
 Comment[nds]=Helligkeit-, Utsett- un Stroomprofil-Instellen wiesen
+Comment[nl]=Schermhelderheid-, slaapstand- en energieprofielen instellen
+Comment[pa]=ਡਿਸਪਲੇਅ ਚਮਕ, ਸਸਪੈਂਡ ਅਤੇ ਪਾਵਰ ਪਰੋਫਾਇਲ ਸੈਟਿੰਗ
 Comment[pt]=Mostra a configuração do brilho, suspensão e perfil de energia
 Comment[pt_BR]=Mostra a configuração do brilho, suspensão e perfil de energia
+Comment[ro]=Configurări pentru luminozitatea ecranului, suspendare și profiluri alimentare
 Comment[sv]=Visar ljusstyrka, och inställningar av viloläge och strömsparprofil
+Comment[th]=ตั้งค่าความสว่างการแสดงผล, การหยุดพักการทำงาน และโพรไฟล์จัดการพลังงาน
+Comment[tr]=Ekran parlaklığı, askıya alma ve güç profili ayarları
 Comment[uk]=Показати параметри яскравості, переходу до сну та керування живленням профілю
 Comment[x-test]=xxDisplay brightness, suspend and power profile settingsxx
+Comment[zh_CN]=显示亮度、挂起和电源配置方案的设置
 Comment[zh_TW]=顯示亮度、暫停與電源設定檔
 
 X-KDE-Keywords=system,power,power management,energy,laptop,battery,suspension,AC,suspend,hibernate,brightness,performance,lid
--- kcmodule/PowerDevilKCM.cpp	2008-09-29 00:24:21.000000000 +0200
+++ kcmodule/PowerDevilKCM.cpp	2008-12-05 16:27:41.000000000 +0100
@@ -142,6 +142,7 @@
     if (m_widget) {
         m_widget->load();
     }
+    emit changed(false);
 }
 
 void PowerDevilKCM::save()
@@ -151,6 +152,7 @@
 
         streamToDBus();
     }
+    emit changed(false);
 }
 
 void PowerDevilKCM::defaults()
openSUSE Build Service is sponsored by