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

List:       kde-commits
Subject:    KDE/kdebase/workspace/plasma/generic/containmentactions/switchwindow
From:       Aaron J. Seigo <aseigo () kde ! org>
Date:       2010-12-03 18:39:23
Message-ID: 20101203183923.684FFAC8A4 () svn ! kde ! org
[Download RAW message or body]

SVN commit 1203362 by aseigo:

don't leak; make a bit more sensible while we're at it


 M  +33 -29    switch.cpp  
 M  +10 -4     switch.h  


--- trunk/KDE/kdebase/workspace/plasma/generic/containmentactions/switchwindow/switch.cpp \
#1203361:1203362 @@ -30,10 +30,22 @@
 #include <Plasma/Service>
 
 SwitchWindow::SwitchWindow(QObject *parent, const QVariantList &args)
-    : Plasma::ContainmentActions(parent, args)
+    : Plasma::ContainmentActions(parent, args),
+      m_menu(new KMenu()),
+      m_action(new QAction(this)),
+      m_mode(AllFlat)
 {
+    m_menu->setTitle(i18n("Windows"));
+    connect(m_menu, SIGNAL(triggered(QAction*)), this, SLOT(switchTo(QAction*)));
+
+    m_action->setMenu(m_menu);
 }
 
+SwitchWindow::~SwitchWindow()
+{
+    delete m_menu;
+}
+
 void SwitchWindow::init(const KConfigGroup &config)
 {
     m_mode = (MenuMode)config.readEntry("mode", (int)AllFlat);
@@ -88,15 +100,15 @@
     }
 }
 
-QMenu *SwitchWindow::makeMenu()
+void SwitchWindow::makeMenu()
 {
+    m_menu->clear();
     Plasma::DataEngine *tasks = dataEngine("tasks");
     if (! tasks->isValid()) {
-        return 0;
+        return;
     }
 
     QMultiHash<int, QAction*> desktops;
-    KMenu *desktopMenu = new KMenu();
 
     //make all the window actions
     foreach (const QString &source, tasks->sources()) {
@@ -115,7 +127,7 @@
             continue;
         }
 
-        QAction *action = new QAction(name, desktopMenu);
+        QAction *action = new QAction(name, m_menu);
         action->setIcon(window.value("icon").value<QIcon>());
         action->setData(source);
         desktops.insert(window.value("desktop").toInt(), action);
@@ -124,9 +136,9 @@
     //sort into menu
     if (m_mode == CurrentDesktop) {
         int currentDesktop = KWindowSystem::currentDesktop();
-        desktopMenu->addTitle(i18n("Windows"));
-        desktopMenu->addActions(desktops.values(currentDesktop));
-        desktopMenu->addActions(desktops.values(-1));
+        m_menu->addTitle(i18n("Windows"));
+        m_menu->addActions(desktops.values(currentDesktop));
+        m_menu->addActions(desktops.values(-1));
     } else {
         int numDesktops = KWindowSystem::numberOfDesktops();
         if (m_mode == AllFlat) {
@@ -134,55 +146,47 @@
                 if (desktops.contains(i)) {
                     QString name = KWindowSystem::desktopName(i);
                     name = QString("%1: %2").arg(i).arg(name);
-                    desktopMenu->addTitle(name);
-                    desktopMenu->addActions(desktops.values(i));
+                    m_menu->addTitle(name);
+                    m_menu->addActions(desktops.values(i));
                 }
             }
             if (desktops.contains(-1)) {
-                desktopMenu->addTitle(i18n("All Desktops"));
-                desktopMenu->addActions(desktops.values(-1));
+                m_menu->addTitle(i18n("All Desktops"));
+                m_menu->addActions(desktops.values(-1));
             }
         } else { //submenus
             for (int i = 1; i <= numDesktops; ++i) {
                 if (desktops.contains(i)) {
                         QString name = KWindowSystem::desktopName(i);
                         name = QString("%1: %2").arg(i).arg(name);
-                        KMenu *subMenu = new KMenu(name, desktopMenu);
+                        KMenu *subMenu = new KMenu(name, m_menu);
                         subMenu->addActions(desktops.values(i));
-                        desktopMenu->addMenu(subMenu);
+                        m_menu->addMenu(subMenu);
                 }
             }
             if (desktops.contains(-1)) {
-                KMenu *subMenu = new KMenu(i18n("All Desktops"), desktopMenu);
+                KMenu *subMenu = new KMenu(i18n("All Desktops"), m_menu);
                 subMenu->addActions(desktops.values(-1));
-                desktopMenu->addMenu(subMenu);
+                m_menu->addMenu(subMenu);
             }
         }
     }
 
-    connect(desktopMenu, SIGNAL(triggered(QAction*)), this, \
                SLOT(switchTo(QAction*)));
-    return desktopMenu;
+    m_menu->adjustSize();
 }
 
 void SwitchWindow::contextEvent(QGraphicsSceneMouseEvent *event)
 {
-    QMenu *desktopMenu = makeMenu();
-    if (desktopMenu) {
-        desktopMenu->adjustSize();
-        desktopMenu->exec(popupPosition(desktopMenu->size(), event));
+    if (!m_menu->isEmpty()) {
+        m_menu->exec(popupPosition(m_menu->size(), event));
     }
 }
 
 QList<QAction*> SwitchWindow::contextualActions()
 {
+    makeMenu();
     QList<QAction*> list;
-    QMenu *menu = makeMenu();
-    if (menu) {
-        QAction *action = new QAction(this); //FIXME I hope this doesn't leak
-        action->setMenu(menu);
-        menu->setTitle(i18n("Windows"));
-        list << action;
-    }
+    list << m_action;
     return list;
 }
 
--- trunk/KDE/kdebase/workspace/plasma/generic/containmentactions/switchwindow/switch.h \
#1203361:1203362 @@ -24,13 +24,14 @@
 #include <plasma/containmentactions.h>
 
 class QAction;
-class QMenu;
+class KMenu;
 
 class SwitchWindow : public Plasma::ContainmentActions
 {
     Q_OBJECT
     public:
         SwitchWindow(QObject* parent, const QVariantList& args);
+        ~SwitchWindow();
 
         void init(const KConfigGroup &config);
         QWidget* createConfigurationInterface(QWidget* parent);
@@ -41,18 +42,23 @@
         void contextEvent(QGraphicsSceneMouseEvent *event);
         void wheelEvent(QGraphicsSceneWheelEvent *event);
         QList<QAction*> contextualActions();
-        QMenu *makeMenu();
 
-    public slots:
+    private:
+        void makeMenu();
+
+    private slots:
         void switchTo(QAction *action);
 
     private:
-        Ui::Config m_ui;
         enum MenuMode {
             AllFlat = 0,
             DesktopSubmenus,
             CurrentDesktop
         };
+
+        KMenu *m_menu;
+        QAction *m_action;
+        Ui::Config m_ui;
         MenuMode m_mode;
 };
 


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

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