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

List:       kde-commits
Subject:    KDE/kdebase/workspace/plasma/generic/applets/systemtray/protocols/dbussystemtray
From:       Aurélien Gâteau <agateau () kde ! org>
Date:       2009-12-04 16:22:02
Message-ID: 1259943722.439814.18799.nullmailer () svn ! kde ! org
[Download RAW message or body]

SVN commit 1058534 by gateau:

Update to new KSNI movie API

 M  +27 -29    dbussystemtraytask.cpp  


--- trunk/KDE/kdebase/workspace/plasma/generic/applets/systemtray/protocols/dbussystemtray/dbussystemtraytask.cpp \
#1058533:1058534 @@ -20,9 +20,11 @@
 
 #include "dbussystemtraytask.h"
 
+#include <QDir>
 #include <QGraphicsWidget>
 #include <QGraphicsSceneContextMenuEvent>
 #include <QIcon>
+#include <QMovie>
 
 #include <KIcon>
 #include <KIconLoader>
@@ -49,8 +51,7 @@
 public:
     DBusSystemTrayTaskPrivate(DBusSystemTrayTask *q)
         : q(q),
-          currentFrame(0),
-          movieTimer(0),
+          movie(0),
           blinkTimer(0),
           blink(false),
           valid(false),
@@ -60,7 +61,7 @@
 
     ~DBusSystemTrayTaskPrivate()
     {
-        delete movieTimer;
+        delete movie;
         delete blinkTimer;
     }
 
@@ -79,7 +80,7 @@
 
     //callbacks
     void syncToolTip(const KDbusToolTipStruct &);
-    void syncMovie(const KDbusImageVector &);
+    void syncMovie(const QString &);
     void refreshCallback(QDBusPendingCallWatcher *call);
 
 
@@ -89,9 +90,7 @@
     QString title;
     QIcon icon;
     QIcon attentionIcon;
-    QVector<QPixmap> movie;
-    int currentFrame;
-    QTimer *movieTimer;
+    QMovie *movie;
     QTimer *blinkTimer;
     QHash<Plasma::Applet *, Plasma::IconWidget *>iconWidgets;
     Plasma::ToolTipContent toolTipData;
@@ -311,9 +310,8 @@
             }
         }
 
-        KDbusImageVector movie;
-        properties["AttentionMovie"].value<QDBusArgument>() >> movie;
-        syncMovie(movie);
+        QString movieName = properties["AttentionMovieName"].toString();
+        syncMovie(movieName);
 
         KDbusToolTipStruct toolTip;
         properties["ToolTip"].value<QDBusArgument>() >> toolTip;
@@ -409,25 +407,30 @@
     blink = !blink;
 }
 
-void DBusSystemTrayTaskPrivate::syncMovie(const KDbusImageVector &movieData)
+void DBusSystemTrayTaskPrivate::syncMovie(const QString &movieName)
 {
-    movie = QVector<QPixmap>(movieData.size());
-
-    if (!movieData.isEmpty()) {
-        for (int i=0; i<movieData.size(); ++i) {
-            movie[i] = KDbusImageStructToPixmap(movieData[i]);
-        }
+    delete movie;
+    if (movieName.isNull()) {
+        movie = 0;
+        return;
     }
+    if (QDir::isAbsolutePath(movieName)) {
+        movie = new QMovie(movieName);
+    } else {
+        movie = KIconLoader::global()->loadMovie(movieName, KIconLoader::Panel);
+    }
+    q->connect(movie, SIGNAL(frameChanged(int)), q, SLOT(updateMovieFrame()));
 }
 
 
 
 void DBusSystemTrayTaskPrivate::updateMovieFrame()
 {
+    Q_ASSERT(movie);
+    QPixmap pix = movie->currentPixmap();
     foreach (Plasma::IconWidget *iconWidget, iconWidgets) {
-        iconWidget->setIcon(movie[currentFrame]);
+        iconWidget->setIcon(pix);
     }
-    currentFrame = (currentFrame + 1) % movie.size();
 }
 
 
@@ -469,12 +472,9 @@
     }
 
     if (status == Task::NeedsAttention) {
-        if (movie.size() != 0) {
-            if (!movieTimer) {
-                movieTimer = new QTimer(q);
-                q->connect(movieTimer, SIGNAL(timeout()), q, \
                SLOT(updateMovieFrame()));
-                movieTimer->start(100);
-            }
+        if (movie) {
+            movie->stop();
+            movie->start();
         } else if (!attentionIcon.isNull()) {
             if (!blinkTimer) {
                 blinkTimer = new QTimer(q);
@@ -483,10 +483,8 @@
             }
         }
     } else {
-        if (movieTimer) {
-            movieTimer->stop();
-            movieTimer->deleteLater();
-            movieTimer = 0;
+        if (movie) {
+            movie->stop();
         }
 
         if (blinkTimer) {


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

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