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

List:       kde-commits
Subject:    KDE/kdebase/workspace/plasma/applets/tasks
From:       Aaron J. Seigo <aseigo () kde ! org>
Date:       2009-04-30 5:21:51
Message-ID: 1241068911.375425.26738.nullmailer () svn ! kde ! org
[Download RAW message or body]

SVN commit 961393 by aseigo:

move the window highlighting to AbstractTaskItem so we can support multiple groups


 M  +57 -6     abstracttaskitem.cpp  
 M  +1 -0      abstracttaskitem.h  
 M  +3 -3      taskgroupitem.h  
 M  +0 -29     windowtaskitem.cpp  
 M  +0 -2      windowtaskitem.h  


--- trunk/KDE/kdebase/workspace/plasma/applets/tasks/abstracttaskitem.cpp \
#961392:961393 @@ -23,13 +23,15 @@
 #include "abstracttaskitem.h"
 
 // Qt
+#include <QApplication>
+#include <QGraphicsLinearLayout>
 #include <QGraphicsSceneContextMenuEvent>
+#include <QGraphicsView>
 #include <QStyleOptionGraphicsItem>
-#include <QGraphicsView>
+#include <QTextLayout>
 #include <QTimer>
-#include <QApplication>
-#include <QTextLayout>
-#include <QGraphicsLinearLayout>
+#include <QVarLengthArray>
+#include <QX11Info>
 
 // KDE
 #include <KAuthorized>
@@ -55,6 +57,8 @@
 #include "tasks.h"
 #include "taskgroupitem.h"
 
+static const int HOVER_EFFECT_TIMEOUT = 500;
+
 AbstractTaskItem::AbstractTaskItem(QGraphicsWidget *parent, Tasks *applet, const \
bool showTooltip)  : QGraphicsWidget(parent),
       m_abstractItem(0),
@@ -65,6 +69,7 @@
       m_alpha(1),
       m_backgroundPrefix("normal"),
       m_updateTimerId(0),
+      m_hoverEffectTimerId(0),
       m_attentionTimerId(0),
       m_attentionTicks(0),
       m_fadeIn(true),
@@ -266,8 +271,8 @@
 void AbstractTaskItem::hoverEnterEvent(QGraphicsSceneHoverEvent *event)
 {
     Q_UNUSED(event)
-
     fadeBackground("hover", 175, true);
+    m_hoverEffectTimerId = startTimer(HOVER_EFFECT_TIMEOUT);
 }
 
 void AbstractTaskItem::hoverLeaveEvent(QGraphicsSceneHoverEvent *event)
@@ -275,7 +280,18 @@
     Q_UNUSED(event)
 
     QString backgroundPrefix;
+    if (m_hoverEffectTimerId) {
+        killTimer(m_hoverEffectTimerId);
+        m_hoverEffectTimerId = 0;
+    }
 
+#ifdef Q_WS_X11
+    Display *dpy = QX11Info::display();
+    const WId rootWin = QX11Info::appRootWindow();
+    Atom atom = XInternAtom(dpy, "_KDE_WINDOW_HIGHLIGHT", False);
+    XDeleteProperty(dpy, rootWin, atom);
+#endif
+
     if (m_flags & TaskWantsAttention) {
         backgroundPrefix = "attention";
     } else if (m_flags & TaskIsMinimized) {
@@ -336,8 +352,8 @@
 {
     if (event->timerId() == m_updateTimerId) {
         killTimer(m_updateTimerId);
+        m_updateTimerId = 0;
         update();
-        m_updateTimerId = 0;
     } else if (event->timerId() == m_attentionTimerId) {
         ++m_attentionTicks;
         if (m_attentionTicks > 6) {
@@ -353,6 +369,41 @@
         }
 
         update();
+    } else if (event->timerId() == m_hoverEffectTimerId) {
+#ifdef Q_WS_X11
+        QList<TaskManager::TaskItem *> windows;
+
+        if (m_abstractItem->isGroupItem()) {
+            foreach (AbstractGroupableItem *item,
+                     \
static_cast<TaskManager::TaskGroup*>(m_abstractItem)->members()) { +                \
if (item->isGroupItem()) { +                    //TODO: recurse through sub-groups?
+                } else {
+                    windows.append(static_cast<TaskManager::TaskItem*>(item));
+                }
+            }
+        } else {
+            windows.append(static_cast<TaskManager::TaskItem*>(m_abstractItem));
+        }
+
+        const int numWindows = windows.count();
+        QVarLengthArray<long, 1024> data(1 + numWindows);
+        data[0] = numWindows;
+
+        kDebug() << "setting for" << numWindows;
+        for (int i = 0; i < numWindows; ++i) {
+            data[i + 1] = windows.at(i)->task()->window();
+        }
+
+        Display *dpy = QX11Info::display();
+        const WId rootWin = QX11Info::appRootWindow();
+        Atom atom = XInternAtom(dpy, "_KDE_WINDOW_HIGHLIGHT", False);
+        XChangeProperty(dpy, rootWin, atom, atom, 32, PropModeReplace,
+                        reinterpret_cast<unsigned char *>(data.data()), \
data.size()); +#endif
+
+        killTimer(m_hoverEffectTimerId);
+        m_hoverEffectTimerId = 0;
     } else {
         QGraphicsWidget::timerEvent(event);
     }
--- trunk/KDE/kdebase/workspace/plasma/applets/tasks/abstracttaskitem.h \
#961392:961393 @@ -225,6 +225,7 @@
     QPointF _dragOffset;
     QTime m_lastUpdate;
     int m_updateTimerId;
+    int m_hoverEffectTimerId;
     int m_attentionTimerId;
     int m_attentionTicks;
 
--- trunk/KDE/kdebase/workspace/plasma/applets/tasks/taskgroupitem.h #961392:961393
@@ -64,7 +64,7 @@
 
     virtual void close();
 
-    QList <AbstractTaskItem*> memberList() const;
+    QList<AbstractTaskItem*> memberList() const;
     AbstractTaskItem * activeSubTask();
 
     virtual bool isWindowItem() const;
@@ -100,7 +100,7 @@
 
     TaskItemLayout *tasksLayout();
 
-    int indexOf (AbstractTaskItem *task);
+    int indexOf(AbstractTaskItem *task);
 
     int optimumCapacity();
 
@@ -191,7 +191,7 @@
 
     TaskItemLayout *m_tasksLayout;
     QTimer *m_popupMenuTimer;
-    QHash <int, Order> m_taskOrder;
+    QHash<int, Order> m_taskOrder;
     int m_lastActivated;
     int m_activeTaskIndex;
     int m_maximumRows;
--- trunk/KDE/kdebase/workspace/plasma/applets/tasks/windowtaskitem.cpp \
#961392:961393 @@ -99,35 +99,6 @@
     event->accept();
 }
 
-void WindowTaskItem::hoverEnterEvent(QGraphicsSceneHoverEvent *event)
-{
-    Q_UNUSED(event)
-
-#ifdef Q_WS_X11
-    QVarLengthArray<long, 1024> data(1);
-    data[0] = m_task->task()->window();
-
-    Display *dpy = QX11Info::display();
-    Atom atom = XInternAtom(dpy, "_KDE_WINDOW_HIGHLIGHT", False);
-    XChangeProperty(dpy, m_task->task()->window(), atom, atom, 32, PropModeReplace, \
                reinterpret_cast<unsigned char *>(data.data()), data.size());
-#endif
-
-    AbstractTaskItem::hoverEnterEvent(event);
-}
-
-void WindowTaskItem::hoverLeaveEvent(QGraphicsSceneHoverEvent *event)
-{
-    Q_UNUSED(event)
-
-#ifdef Q_WS_X11
-    Display *dpy = QX11Info::display();
-    Atom atom = XInternAtom(dpy, "_KDE_WINDOW_HIGHLIGHT", False);
-    XDeleteProperty(dpy, m_task->task()->window(), atom);
-#endif
-
-    AbstractTaskItem::hoverLeaveEvent(event);
-}
-
 //destroy this item
 void WindowTaskItem::close()
 {
--- trunk/KDE/kdebase/workspace/plasma/applets/tasks/windowtaskitem.h #961392:961393
@@ -64,8 +64,6 @@
     void close();
 
 protected:
-    void hoverEnterEvent(QGraphicsSceneHoverEvent *event);
-    void hoverLeaveEvent(QGraphicsSceneHoverEvent *event);
     void contextMenuEvent(QGraphicsSceneContextMenuEvent *event);
     void mousePressEvent(QGraphicsSceneMouseEvent *event);
     void updateToolTip();


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

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