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

List:       kde-commits
Subject:    KDE/kdebase/workspace/plasma/containments/desktop
From:       Aaron J. Seigo <aseigo () kde ! org>
Date:       2009-04-03 0:41:44
Message-ID: 1238719304.694995.23945.nullmailer () svn ! kde ! org
[Download RAW message or body]

SVN commit 948432 by aseigo:

support listing multiple panels if they exist, don't assume the panel containment is \
called "panel" if there is only one installed. now to duplicate this code in panel ;)


 M  +39 -5     desktop.cpp  
 M  +3 -0      desktop.h  


--- trunk/KDE/kdebase/workspace/plasma/containments/desktop/desktop.cpp \
#948431:948432 @@ -28,7 +28,9 @@
 #include <QFileInfo>
 #include <QGraphicsScene>
 #include <QGraphicsView>
+#include <QMenu>
 #include <QPainter>
+#include <QSignalMapper>
 #include <QTimeLine>
 
 #include <KAuthorized>
@@ -58,6 +60,7 @@
 
 DefaultDesktop::DefaultDesktop(QObject *parent, const QVariantList &args)
     : Containment(parent, args),
+      m_addPanelsMenu(0),
       m_lockDesktopAction(0),
       m_appletBrowserAction(0),
       m_addPanelAction(0),
@@ -83,6 +86,11 @@
     //kDebug() << "!!! loading desktop";
 }
 
+DefaultDesktop::~DefaultDesktop()
+{
+    delete m_addPanelsMenu;
+}
+
 void DefaultDesktop::constraintsEvent(Plasma::Constraints constraints)
 {
     if (constraints & Plasma::ImmutableConstraint && m_appletBrowserAction) {
@@ -118,9 +126,17 @@
 
 void DefaultDesktop::addPanel()
 {
+    KPluginInfo::List panelPlugins = listContainments("panel");
+
+    if (!panelPlugins.isEmpty()) {
+        addPanel(panelPlugins.first().pluginName());
+    }
+}
+
+void DefaultDesktop::addPanel(const QString &plugin)
+{
     if (corona()) {
-        // make a panel at the top
-        Containment* panel = corona()->addContainment("panel");
+        Containment* panel = corona()->addContainment(plugin);
         panel->showConfigurationInterface();
 
         panel->setScreen(screen());
@@ -190,10 +206,28 @@
     if (!m_appletBrowserAction) {
         m_appletBrowserAction = action("add widgets");
 
-        m_addPanelAction = new QAction(i18n("Add Panel"), this);
-        connect(m_addPanelAction, SIGNAL(triggered(bool)), this, SLOT(addPanel()));
-        m_addPanelAction->setIcon(KIcon("list-add"));
+        KPluginInfo::List panelPlugins = listContainmentsOfType("panel");
 
+        if (panelPlugins.size() == 1) {
+            m_addPanelAction = new QAction(i18n("Add Panel"), this);
+            connect(m_addPanelAction, SIGNAL(triggered(bool)), this, \
SLOT(addPanel())); +            m_addPanelAction->setIcon(KIcon("list-add"));
+        } else if (!panelPlugins.isEmpty()) {
+            m_addPanelsMenu = new QMenu();
+            m_addPanelAction = m_addPanelsMenu->menuAction();
+            m_addPanelAction->setText(i18n("Add Panel"));
+
+            QSignalMapper *mapper = new QSignalMapper(this);
+            connect(mapper, SIGNAL(mapped(QString)), this, SLOT(addPanel(QString)));
+
+            foreach (const KPluginInfo &plugin, panelPlugins) {
+                QAction *action = new QAction(plugin.name(), this);
+                mapper->setMapping(action, plugin.pluginName());
+                connect(action, SIGNAL(triggered(bool)), mapper, SLOT(map()));
+                m_addPanelsMenu->addAction(action);
+            }
+        }
+
         m_runCommandAction = new QAction(i18n("Run Command..."), this);
         connect(m_runCommandAction, SIGNAL(triggered(bool)), this, \
SLOT(runCommand()));  m_runCommandAction->setIcon(KIcon("system-run"));
--- trunk/KDE/kdebase/workspace/plasma/containments/desktop/desktop.h #948431:948432
@@ -61,6 +61,7 @@
 
 public:
     DefaultDesktop(QObject *parent, const QVariantList &args);
+    ~DefaultDesktop();
     void constraintsEvent(Plasma::Constraints constraints);
 
     QList<QAction*> contextualActions();
@@ -75,6 +76,7 @@
     void logout();
 
     void addPanel();
+    void addPanel(const QString &plugin);
 
     void onAppletAdded(Plasma::Applet *, const QPointF &);
     void onAppletRemoved(Plasma::Applet *);
@@ -83,6 +85,7 @@
     void refreshWorkingArea();
 
 private:
+    QMenu *m_addPanelsMenu;
     QAction *m_lockDesktopAction;
     QAction *m_appletBrowserAction;
     QAction *m_addPanelAction;


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

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