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

List:       kde-commits
Subject:    KDE/kdebase/workspace/plasma/desktop/shell
From:       Ivan Čukić <ivan.cukic () kde ! org>
Date:       2010-10-18 16:15:15
Message-ID: 20101018161515.ECDB6AC899 () svn ! kde ! org
[Download RAW message or body]

SVN commit 1187202 by ivan:

Finished activitymanager revamp

Summary
- configuration for activities added (name, icon)
- code refactored to remove /evil/ painting and mouse events detection
- activity controlls moved to separate classes for easier managing
- fixed some layout issues
- panel controller closes after a small delay when plasma loses focus
(not detecting specific windows anymore, so it is more robust)



 M  +1 -0      CMakeLists.txt  
 M  +6 -0      activity.cpp  
 M  +4 -0      activity.h  
 M  +53 -3     activitymanager/activitycontrols.cpp  
 M  +8 -2      activitymanager/activitycontrols.h  
 M  +1 -5      activitymanager/activityicon.cpp  
 M  +7 -6      controllerwindow.cpp  
 M  +1 -0      controllerwindow.h  


--- trunk/KDE/kdebase/workspace/plasma/desktop/shell/CMakeLists.txt #1187201:1187202
@@ -8,6 +8,7 @@
     activitymanager/activitymanager.cpp
     activitymanager/activityicon.cpp
     activitymanager/activitylist.cpp
+    activitymanager/activitycontrols.cpp
     activitymanager/filterbar.cpp
     activitymanager/kidenticongenerator.cpp
 )
--- trunk/KDE/kdebase/workspace/plasma/desktop/shell/activity.cpp #1187201:1187202
@@ -207,6 +207,12 @@
     }
 }
 
+void Activity::setIcon(const QString &icon)
+{
+    KActivityController().setActivityIcon(m_id, icon);
+    emit iconChanged(icon);
+}
+
 void Activity::updateActivityName(Plasma::Context *context)
 {
     if (context->currentActivityId() != m_id) {
--- trunk/KDE/kdebase/workspace/plasma/desktop/shell/activity.h #1187201:1187202
@@ -85,12 +85,16 @@
 
 signals:
     void nameChanged(const QString &name);
+    void iconChanged(const QString &icon);
+
     void opened();
     void closed();
+
 //TODO signals for other changes
 
 public slots:
     void setName(const QString &name);
+    void setIcon(const QString &icon);
     /**
      * delete the activity forever
      */
--- trunk/KDE/kdebase/workspace/plasma/desktop/shell/activitymanager/activitycontrols.cpp \
#1187201:1187202 @@ -18,6 +18,11 @@
  */
 
 #include "activitycontrols.h"
+#include <QGraphicsScene>
+#include <KPushButton>
+#include <KIconDialog>
+#include <KWindowSystem>
+#include <QApplication>
 
 ActivityControls::ActivityControls(ActivityIcon * parent)
     : QGraphicsWidget(parent)
@@ -52,8 +57,8 @@
 
 // ActivityConfiguration
 
-ActivityConfiguration::ActivityConfiguration(ActivityIcon * parent)
-    : ActivityControls(parent)
+ActivityConfiguration::ActivityConfiguration(ActivityIcon * parent, Activity * \
activity) +    : ActivityControls(parent), m_activity(activity)
 {
     m_layoutButtons = new QGraphicsLinearLayout(this);
     m_layoutButtons->setOrientation(Qt::Vertical);
@@ -68,7 +73,8 @@
     m_buttonConfirmChanges = new Plasma::PushButton(this);
     m_buttonConfirmChanges->setText(i18n("Apply Changes"));
     m_layoutButtons->addItem(m_buttonConfirmChanges);
-    connect(m_buttonConfirmChanges, SIGNAL(clicked()), this, \
SIGNAL(applyChanges())); +    connect(m_buttonConfirmChanges, SIGNAL(clicked()), \
this, SLOT(applyChanges())); +    connect(m_buttonConfirmChanges, SIGNAL(clicked()), \
this, SIGNAL(closed()));  
     m_buttonCancel = new Plasma::PushButton(this);
     m_buttonCancel->setText(i18n("Cancel Changes"));
@@ -87,8 +93,14 @@
     m_activityIcon = new Plasma::PushButton(this);
     m_activityIcon->setIcon(KIcon("plasma"));
     m_layoutMain->addItem(m_activityIcon);
+    connect(m_activityIcon, SIGNAL(clicked()), this, SLOT(chooseIcon()));
 
     m_main->setGeometry(parent->contentsRect());
+
+    m_activityName->setText(m_activity->name());
+
+    m_activityIcon->setIcon(
+            QIcon(parent->pixmap(QSize(32, 32))));
 }
 
 void ActivityConfiguration::hideEvent(QHideEvent * event)
@@ -98,8 +110,46 @@
     m_main->hide();
 }
 
+void ActivityConfiguration::showEvent(QShowEvent * event)
+{
+    ActivityControls::showEvent(event);
+
+    m_main->setZValue(zValue());
+    m_main->show();
+}
+
 ActivityConfiguration::~ActivityConfiguration()
 {
     // delete m_layoutMain;
     m_main->deleteLater();
 }
+
+void ActivityConfiguration::applyChanges()
+{
+    m_activity->setName(m_activityName->text());
+
+    if (!m_iconName.isEmpty()) {
+        m_activity->setIcon(m_iconName);
+    }
+}
+
+void ActivityConfiguration::chooseIcon()
+{
+    QString iconName = KIconDialog::getIcon();
+
+    if (!iconName.isEmpty()) {
+        m_activityIcon->setIcon(KIcon(iconName));
+        m_iconName = iconName;
+    }
+
+    // somehow, after closing KIconDialog, plasma loses focus
+    // and the panel controller is closed, soforcing focus to
+    // any of the top level windows that are shown
+    foreach (QWidget * widget, QApplication::topLevelWidgets()) {
+        if (widget->isVisible()) {
+            KWindowSystem::forceActiveWindow(widget->winId(), 0);
+            break;
+        }
+    }
+}
+
--- trunk/KDE/kdebase/workspace/plasma/desktop/shell/activitymanager/activitycontrols.h \
#1187201:1187202 @@ -24,6 +24,7 @@
 #include <Plasma/LineEdit>
 
 #include "activityicon.h"
+#include "activity.h"
 
 class ActivityControls : public QGraphicsWidget {
     Q_OBJECT
@@ -54,14 +55,16 @@
 class ActivityConfiguration: public ActivityControls {
     Q_OBJECT
 public:
-    ActivityConfiguration(ActivityIcon * parent);
+    ActivityConfiguration(ActivityIcon * parent, Activity * activity);
     ~ActivityConfiguration();
 
-Q_SIGNALS:
+private Q_SLOTS:
     void applyChanges();
+    void chooseIcon();
 
 protected:
     void hideEvent(QHideEvent * event);
+    void showEvent(QShowEvent * event);
 
 private:
     QGraphicsLinearLayout * m_layoutButtons;
@@ -75,4 +78,7 @@
     QGraphicsWidget       * m_main;
     Plasma::LineEdit      * m_activityName;
     Plasma::PushButton    * m_activityIcon;
+
+    Activity              * m_activity;
+    QString                 m_iconName;
 };
--- trunk/KDE/kdebase/workspace/plasma/desktop/shell/activitymanager/activityicon.cpp \
#1187201:1187202 @@ -191,11 +191,7 @@
 
 void ActivityIcon::showConfiguration()
 {
-    QGraphicsWidget * w = new ActivityConfiguration(this);
-
-    connect(w, SIGNAL(applyChanges()), this, SLOT(applyChanges()));
-
-    showInlineWidget(w);
+    showInlineWidget(new ActivityConfiguration(this, m_activity));
 }
 
 void ActivityIcon::startInlineAnim()
--- trunk/KDE/kdebase/workspace/plasma/desktop/shell/controllerwindow.cpp \
#1187201:1187202 @@ -477,12 +477,13 @@
 {
     Q_UNUSED(id)
 
-    // if the active window isn't a Plasma::View and the widgets explorer is \
                visible,
-    // or the activityManager is visible, and we are no longer the active window but \
                still
-    // visible on-screen, then close up shop
-    if ((m_activityManager ||
-         (m_widgetExplorer && !qobject_cast<Plasma::View \
                *>(QApplication::activeWindow()))) &&
-        isControllerViewVisible() && !isActiveWindow()) {
+    // Small delay when closing due to lost focus
+    QTimer::singleShot(300, this, SLOT(closeIfNotFocussed()));
+}
+
+void ControllerWindow::closeIfNotFocussed()
+{
+    if (!QApplication::activeWindow()) {
         close();
     }
 }
--- trunk/KDE/kdebase/workspace/plasma/desktop/shell/controllerwindow.h \
#1187201:1187202 @@ -70,6 +70,7 @@
 public Q_SLOTS:
     void showWidgetExplorer();
     void showActivityManager();
+    void closeIfNotFocussed();
 
 protected:
     void setGraphicsWidget(QGraphicsWidget *widget);


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

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