[prev in list] [next in list] [prev in thread] [next in thread] 

List:       kde-commits
Subject:    KDE/kdebase/workspace/powerdevil/daemon
From:       Lukáš Tinkl <lukas () kde ! org>
Date:       2010-12-17 19:06:17
Message-ID: 20101217190617.693FAAC8A8 () svn ! kde ! org
[Download RAW message or body]

SVN commit 1207385 by lukas:

This patch adds a fallback mechanism for setting the display brightness
to the PowerDevil upower's backend using the udev
(/sys/class/backlight/) interface. It uses the KAuth framework to setup
a helper application that does the actual read/writes.

Reviewed by drf: http://svn.reviewboard.kde.org/r/6141/

BUG:257948


 M  +7 -0      BackendConfig.cmake  
 A             backends/upower/backlight_helper_actions.actions  
 A             backends/upower/backlighthelper.cpp   [License: LGPL (v2)]
 A             backends/upower/backlighthelper.h   [License: LGPL (v2)]
 M  +37 -6     backends/upower/powerdevilupowerbackend.cpp  


--- trunk/KDE/kdebase/workspace/powerdevil/daemon/BackendConfig.cmake \
#1207384:1207385 @@ -33,6 +33,13 @@
 
 set(powerdevilupowerbackend_LIBS ${X11_LIBRARIES} ${QT_QTGUI_LIBRARY} \
${X11_Xrandr_LIB})  
+## backlight helper executable
+kde4_add_executable(backlighthelper backends/upower/backlighthelper.cpp \
${backlighthelper_mocs}) +target_link_libraries(backlighthelper ${KDE4_KDECORE_LIBS})
+install(TARGETS backlighthelper DESTINATION ${LIBEXEC_INSTALL_DIR})
+kde4_install_auth_helper_files(backlighthelper org.kde.powerdevil.backlighthelper \
root) +kde4_install_auth_actions(org.kde.powerdevil.backlighthelper \
${CMAKE_CURRENT_SOURCE_DIR}/backends/upower/backlight_helper_actions.actions) +
 ########################## HAL Backend #####################################
 
 include_directories(${CMAKE_CURRENT_SOURCE_DIR}/backends/hal
--- trunk/KDE/kdebase/workspace/powerdevil/daemon/backends/upower/powerdevilupowerbackend.cpp \
#1207384:1207385 @@ -27,10 +27,13 @@
 
 #include <KDebug>
 #include <KPluginFactory>
+#include <KAuth/Action>
 
 #include "xrandrbrightness.h"
 #include "upowersuspendjob.h"
 
+#define HELPER_ID "org.kde.powerdevil.backlighthelper"
+
 PowerDevilUPowerBackend::PowerDevilUPowerBackend(QObject* parent)
     : BackendInterface(parent),
       m_brightNessControl(0),
@@ -98,9 +101,7 @@
 
     // Brightness Controls available
     BrightnessControlsList controls;
-    if (m_brightNessControl->isSupported()) {
         controls.insert(QLatin1String("LVDS1"), Screen);
-    }
 
     if (m_kbdBacklight->isValid())
         controls.insert(QLatin1String("KBD"), Keyboard);
@@ -177,22 +178,52 @@
 
 float PowerDevilUPowerBackend::brightness(PowerDevil::BackendInterface::BrightnessControlType \
type) const  {
+    float result = 0.0;
+
     if (type == Screen) {
-        kDebug() << "Screen brightness: " << m_brightNessControl->brightness();
-        return m_brightNessControl->brightness();
+        if (m_brightNessControl->isSupported()) {
+            //kDebug() << "Calling xrandr brightness";
+            result = m_brightNessControl->brightness();
+        } else {
+            //kDebug() << "Falling back to helper to get brightness";
+            KAuth::Action action("org.kde.powerdevil.backlighthelper.brightness");
+            action.setHelperID(HELPER_ID);
+            KAuth::ActionReply reply = action.execute();
+            if (reply.succeeded()) {
+                result = reply.data()["brightness"].toFloat();
+                //kDebug() << "org.kde.powerdevil.backlighthelper.brightness \
succeeded: " << reply.data()["brightness"]; +            }
+            else
+                kWarning() << "org.kde.powerdevil.backlighthelper.brightness \
failed"; +
+        }
+        kDebug() << "Screen brightness: " << result;
     } else if (type == Keyboard) {
         kDebug() << "Kbd backlight brightness: " << m_kbdBacklight->GetBrightness();
-        return m_kbdBacklight->GetBrightness() / m_kbdBacklight->GetMaxBrightness() \
* 100; +        result = m_kbdBacklight->GetBrightness() / \
m_kbdBacklight->GetMaxBrightness() * 100;  }
 
-    return 0.0;
+    return result;
 }
 
 bool PowerDevilUPowerBackend::setBrightness(float brightnessValue, \
PowerDevil::BackendInterface::BrightnessControlType type)  {
     if (type == Screen) {
         kDebug() << "set screen brightness: " << brightnessValue;
+        if (m_brightNessControl->isSupported()) {
         m_brightNessControl->setBrightness(brightnessValue);
+        } else {
+            //kDebug() << "Falling back to helper to set brightness";
+            KAuth::Action \
action("org.kde.powerdevil.backlighthelper.setbrightness"); +            \
action.setHelperID(HELPER_ID); +            action.addArgument("brightness", \
brightnessValue); +            KAuth::ActionReply reply = action.execute();
+            if (reply.failed()) {
+                kWarning() << "org.kde.powerdevil.backlighthelper.setbrightness \
failed"; +                return false;
+            }
+        }
+
         float newBrightness = brightness(Screen);
         if (!qFuzzyCompare(newBrightness, m_cachedBrightness)) {
             m_cachedBrightness = newBrightness;


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic