[Marble-commits] KDE/kdeedu/marble

Dennis Nienhüser earthwings at gentoo.org
Tue Dec 28 11:33:35 CET 2010


SVN commit 1209858 by nienhueser:

QtMobility's approach to inhibit the screensaver on Maemo wakes up the screen every thirty seconds. This makes it impossible to activate the screen saver by the user.
Work around it by just asking not to do automatic screen blanking periodically.
Previously the plugin was only compiled when QtMobility was found. Now that dependency is gone, but you need to enable its compilation explicitly using the BUILD_INHIBIT_SCREENSAVER_PLUGIN cmake option.
REVIEW: 6186

 D             FindQtsysteminfo.cmake  
 M  +0 -3      src/plugins/render/CMakeLists.txt  
 M  +4 -2      src/plugins/render/inhibit-screensaver/CMakeLists.txt  
 M  +36 -17    src/plugins/render/inhibit-screensaver/InhibitScreensaverPlugin.cpp  
 M  +2 -0      src/plugins/render/inhibit-screensaver/InhibitScreensaverPlugin.h  


--- trunk/KDE/kdeedu/marble/src/plugins/render/CMakeLists.txt #1209857:1209858
@@ -24,12 +24,9 @@
 
 add_subdirectory( routing )
 
-find_package(Qtsysteminfo)
-if(QtSystemInfo_FOUND)
   # FIXME: The inhibit-screensaver plugin stresses the term render plugin a bit far.
   # It should be moved to a new plugin type later.
   add_subdirectory( inhibit-screensaver )
-endif(QtSystemInfo_FOUND)
 
 if (NOT WIN32)
   add_subdirectory( aprs )
--- trunk/KDE/kdeedu/marble/src/plugins/render/inhibit-screensaver/CMakeLists.txt #1209857:1209858
@@ -1,3 +1,6 @@
+OPTION(BUILD_INHIBIT_SCREENSAVER_PLUGIN "Build the Maemo specific inhibit-screensaver plugin")
+
+IF( BUILD_INHIBIT_SCREENSAVER_PLUGIN )
 PROJECT(InhibitScreensaverPlugin)
 
 INCLUDE_DIRECTORIES(
@@ -5,11 +8,10 @@
  ${CMAKE_BINARY_DIR}/src/plugins/render/inhibit-screensaver
  ${QT_INCLUDE_DIR}
  ${QT_QTNETWORK_INCLUDE_DIR}
- ${QtSystemInfo_INCLUDE_DIRS}
 )
 INCLUDE(${QT_USE_FILE})
 
 set( inhibit-screensaver_SRCS InhibitScreensaverPlugin.cpp )		 
-set( InhibitScreensaverPlugin_LIBS ${QtSystemInfo_LIBRARIES} )
 
 marble_add_plugin( InhibitScreensaverPlugin ${inhibit-screensaver_SRCS} )
+ENDIF()
--- trunk/KDE/kdeedu/marble/src/plugins/render/inhibit-screensaver/InhibitScreensaverPlugin.cpp #1209857:1209858
@@ -12,34 +12,50 @@
 
 #include "MarbleDataFacade.h"
 #include "PositionTracking.h"
+#include "MarbleDebug.h"
 
-#include <QtSystemInfo/QSystemScreenSaver>
+#include <QtCore/QTimer>
+#include <QtDBus/QDBusConnection>
+#include <QtDBus/QDBusInterface>
 
 namespace Marble {
 
 class InhibitScreensaverPluginPrivate
 {
 public:
-    bool m_initialized;
+    QDBusInterface *m_interface;
 
-    QtMobility::QSystemScreenSaver* m_screensaver;
+    QTimer m_timer;
 
     InhibitScreensaverPluginPrivate();
+
+    ~InhibitScreensaverPluginPrivate();
 };
 
 InhibitScreensaverPluginPrivate::InhibitScreensaverPluginPrivate() :
-        m_initialized( false ),
-        m_screensaver( 0 )
+        m_interface( 0 )
 {
-    // nothing to do
+    m_timer.setInterval( 10 * 1000 ); // timeout of 10 seconds
 }
 
+InhibitScreensaverPluginPrivate::~InhibitScreensaverPluginPrivate()
+{
+    delete m_interface;
+}
 
 InhibitScreensaverPlugin::InhibitScreensaverPlugin() :
         d ( new InhibitScreensaverPluginPrivate() )
 {
+    connect( &d->m_timer, SIGNAL( timeout() ), this, SLOT( inhibitScreenSaver() ) );
+
+#ifdef Q_WS_MAEMO_5
     setEnabled( true );
     setVisible( true );
+#else
+    qDebug() << "The inhibit screensaver plugin is only useful on Maemo.";
+    setEnabled( false );
+    setVisible( false );
+#endif
 }
 
 InhibitScreensaverPlugin::~InhibitScreensaverPlugin()
@@ -86,16 +102,19 @@
 void InhibitScreensaverPlugin::initialize()
 {
     Q_ASSERT( dataFacade() && dataFacade()->positionTracking() );
+
+    d->m_interface= new QDBusInterface( "com.nokia.mce", "/com/nokia/mce/request",
+       "com.nokia.mce.request", QDBusConnection::systemBus() );
+
     PositionTracking *tracking = dataFacade()->positionTracking();
     connect( tracking, SIGNAL( positionProviderPluginChanged( PositionProviderPlugin* ) ),
              this, SLOT( updateScreenSaverState( PositionProviderPlugin* ) ) );
     updateScreenSaverState( tracking->positionProviderPlugin() );
-    d->m_initialized = true;
 }
 
 bool InhibitScreensaverPlugin::isInitialized() const
 {
-    return d->m_initialized;
+    return d->m_interface;
 }
 
 void InhibitScreensaverPlugin::updateScreenSaverState( PositionProviderPlugin *activePlugin )
@@ -105,18 +124,18 @@
     }
 
     if ( activePlugin ) {
-        // Inhibit screensaver
-        if ( !d->m_screensaver ) {
-            d->m_screensaver = new QtMobility::QSystemScreenSaver( this );
-            d->m_screensaver->setScreenSaverInhibit();
+        d->m_timer.start(); // Inhibit screensaver
+    } else {
+      d->m_timer.stop();
         }
-    } else if ( d->m_screensaver ) {
-        // Do not inhibit the screensaver. The API here is cumbersome:
-        // You can only revert a previous inhibition by deleting the screensaver object. Wtf?
-        delete d->m_screensaver;
-        d->m_screensaver = 0;
     }
+
+void InhibitScreensaverPlugin::inhibitScreenSaver()
+{
+    if ( d->m_interface && d->m_interface->isValid() ) {
+        d->m_interface->call( "req_display_blanking_pause" );
 }
+}
 
 bool InhibitScreensaverPlugin::render( GeoPainter *, ViewportParams *, const QString&, GeoSceneLayer *)
 {
--- trunk/KDE/kdeedu/marble/src/plugins/render/inhibit-screensaver/InhibitScreensaverPlugin.h #1209857:1209858
@@ -61,6 +61,8 @@
 private Q_SLOTS:
      void updateScreenSaverState( PositionProviderPlugin *activePlugin );
 
+     void inhibitScreenSaver();
+
 private:
      InhibitScreensaverPluginPrivate* const d;
 };


More information about the Marble-commits mailing list