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

List:       kde-commits
Subject:    KDE/kdebase/workspace/plasma/generic/applets/systemtray
From:       Marco Martin <notmart () gmail ! com>
Date:       2010-05-01 15:53:36
Message-ID: 20100501155336.7FB14AC8AA () svn ! kde ! org
[Download RAW message or body]

SVN commit 1121527 by mart:

a first attempt on a global shortcut config for systray icons.
it works sporadically, config ui still sucks (should replace the keyboard shortuc \
section, i think)



 M  +22 -0     protocols/dbussystemtray/dbussystemtraytask.cpp  
 M  +6 -0      protocols/dbussystemtray/dbussystemtraywidget.cpp  
 M  +56 -9     ui/applet.cpp  
 M  +14 -6     ui/autohide.ui  


--- trunk/KDE/kdebase/workspace/plasma/generic/applets/systemtray/protocols/dbussystemtray/dbussystemtraytask.cpp \
#1121526:1121527 @@ -20,6 +20,7 @@
 
 #include "dbussystemtraytask.h"
 
+#include <QAction>
 #include <QDir>
 #include <QGraphicsWidget>
 #include <QGraphicsSceneContextMenuEvent>
@@ -28,6 +29,7 @@
 #include <QTimer>
 #include <QMetaEnum>
 
+#include <KAction>
 #include <KIcon>
 #include <KIconLoader>
 #include <KStandardDirs>
@@ -120,6 +122,8 @@
 {
     Q_UNUSED(taskName);
 
+    QString oldTypeId = m_typeId;
+
     QString cat = properties["Category"].toString();
     if (!cat.isEmpty()) {
         int index = metaObject()->indexOfEnumerator("Category");
@@ -179,6 +183,24 @@
                 properties["ToolTipIcon"].value<QIcon>());
 
 
+    if (m_typeId != oldTypeId) {
+        QHash<Plasma::Applet *, QGraphicsWidget *>::const_iterator i = \
widgetsByHost().constBegin(); +        while (i != widgetsByHost().constEnd()) {
+            Plasma::IconWidget *icon = static_cast<Plasma::IconWidget *>(i.value());
+            icon->action()->setObjectName(QString("Systemtray-%1-%2").arg(m_typeId).arg(i.key()->id()));
 +
+            KConfigGroup cg = i.key()->config();
+            KConfigGroup shortcutsConfig = KConfigGroup(&cg, "Shortcuts");
+            QString shortcutText = \
shortcutsConfig.readEntryUntranslated(icon->action()->objectName(), QString()); +     \
KAction *action = qobject_cast<KAction *>(icon->action()); +            if (action) {
+                action->setGlobalShortcut(KShortcut(shortcutText));
+            }
+
+            ++i;
+        }
+    }
+
     m_embeddable = true;
 
     emit changed(this);
--- trunk/KDE/kdebase/workspace/plasma/generic/applets/systemtray/protocols/dbussystemtray/dbussystemtraywidget.cpp \
#1121526:1121527 @@ -22,6 +22,8 @@
 #include <QDBusAbstractInterface>
 #include <QGraphicsSceneWheelEvent>
 
+#include <KAction>
+
 #include <Plasma/Containment>
 #include <Plasma/Corona>
 #include <Plasma/Theme>
@@ -35,6 +37,10 @@
       m_host(parent)
 {
     connect(this, SIGNAL(clicked()), this, SLOT(calculateShowPosition()));
+
+    KAction *action = new KAction(this);
+    setAction(action);
+    connect(action, SIGNAL(triggered()), this, SLOT(calculateShowPosition()));
 }
 
 void DBusSystemTrayWidget::mousePressEvent(QGraphicsSceneMouseEvent *event)
--- trunk/KDE/kdebase/workspace/plasma/generic/applets/systemtray/ui/applet.cpp \
#1121526:1121527 @@ -40,12 +40,14 @@
 #include <QStyledItemDelegate>
 
 
+#include <KAction>
 #include <KConfigDialog>
 #include <KComboBox>
 #include <KWindowSystem>
 #include <KCategorizedView>
 #include <KCategorizedSortFilterProxyModel>
 #include <KCategoryDrawer>
+#include <KKeySequenceWidget>
 
 #include <Solid/Device>
 
@@ -470,8 +472,8 @@
         m_visibleItemsSourceModel.data()->clear();
     }
 
-    QMultiMap<QString, const Task *> sortedTasks;
-    foreach (const Task *task, s_manager->tasks()) {
+    QMultiMap<QString, Task *> sortedTasks;
+    foreach (Task *task, s_manager->tasks()) {
         if (!m_shownCategories.contains(task->category())) {
              continue;
         }
@@ -483,7 +485,11 @@
         sortedTasks.insert(task->name(), task);
     }
 
-    foreach (const Task *task, sortedTasks) {
+    KConfigGroup gcg = globalConfig();
+    KConfigGroup cg = config();
+    KConfigGroup shortcutsConfig = KConfigGroup(&cg, "Shortcuts");
+
+    foreach (Task *task, sortedTasks) {
         QTreeWidgetItem *listItem = new QTreeWidgetItem(m_autoHideUi.icons);
         KComboBox *itemCombo = new KComboBox(m_autoHideUi.icons);
         listItem->setText(0, task->name());
@@ -504,13 +510,22 @@
         }
         m_autoHideUi.icons->setItemWidget(listItem, 1, itemCombo);
 
+        KKeySequenceWidget *button = new KKeySequenceWidget(m_autoHideUi.icons);
+
+        Plasma::IconWidget *icon = qobject_cast<Plasma::IconWidget \
*>(task->widget(this)); +        Plasma::Applet *applet = qobject_cast<Plasma::Applet \
*>(task->widget(this)); +
+        if (task && icon) {
+            QString shortcutText = \
shortcutsConfig.readEntryUntranslated(icon->action()->objectName(), QString()); +     \
button->setKeySequence(shortcutText); +        } else if (task && applet) {
+            button->setKeySequence(applet->globalShortcut().primary());
+        }
+        m_autoHideUi.icons->setItemWidget(listItem, 2, button);
         m_autoHideUi.icons->addTopLevelItem(listItem);
     }
 
 
-    KConfigGroup gcg = globalConfig();
-    KConfigGroup cg = config();
-
     const QString itemCategories = i18nc("Categories of items in the systemtray that \
will be shown or hidden", "Shown item categories");  
     QStandardItem *applicationStatusItem = new QStandardItem();
@@ -582,6 +597,9 @@
 
 void Applet::configAccepted()
 {
+    KConfigGroup cg = config();
+    KConfigGroup shortcutsConfig = KConfigGroup(&cg, "Shortcuts");
+
     QStringList hiddenTypes;
     QStringList alwaysShownTypes;
     QTreeWidget *hiddenList = m_autoHideUi.icons;
@@ -589,16 +607,45 @@
         QTreeWidgetItem *item = hiddenList->topLevelItem(i);
         KComboBox *itemCombo = static_cast<KComboBox *>(hiddenList->itemWidget(item, \
                1));
         //kDebug() << (item->checkState() == Qt::Checked) << \
item->data(Qt::UserRole).toString(); +        const QString taskTypeId = \
item->data(0, Qt::UserRole).toString();  //Always hidden
         if (itemCombo->currentIndex() == 1) {
-            hiddenTypes << item->data(0, Qt::UserRole).toString();
+            hiddenTypes << taskTypeId;
         //Always visible
         } else if (itemCombo->currentIndex() == 2) {
-            alwaysShownTypes << item->data(0, Qt::UserRole).toString();
+            alwaysShownTypes << taskTypeId;
         }
+
+        KKeySequenceWidget *keySeq = static_cast<KKeySequenceWidget \
*>(hiddenList->itemWidget(item, 2)); +        QKeySequence seq = \
keySeq->keySequence(); +        Task *task = 0;
+        //FIXME: terribly inefficient
+        foreach (Task *candidateTask, s_manager->tasks()) {
+            if (candidateTask->typeId() == taskTypeId) {
+                task = candidateTask;
+                break;
     }
+        }
 
-    KConfigGroup cg = config();
+        if (task) {
+            QGraphicsWidget *widget = task->widget(this);
+
+            if (widget) {
+                Plasma::Applet *applet = qobject_cast<Plasma::Applet *>(widget);
+                Plasma::IconWidget *icon = qobject_cast<Plasma::IconWidget \
*>(widget); +                if (applet) {
+                    applet->setGlobalShortcut(KShortcut(seq));
+                } else if (icon) {
+                    KAction *action = qobject_cast<KAction *>(icon->action());
+                    if (action) {
+                        action->setGlobalShortcut(KShortcut(seq));
+                        shortcutsConfig.writeEntry(action->objectName(), \
seq.toString()); +                    }
+                }
+            }
+        }
+    }
+
     cg.writeEntry("hidden", hiddenTypes);
     cg.writeEntry("alwaysShown", alwaysShownTypes);
 
--- trunk/KDE/kdebase/workspace/plasma/generic/applets/systemtray/ui/autohide.ui \
#1121526:1121527 @@ -19,28 +19,36 @@
      <property name="rootIsDecorated">
       <bool>false</bool>
      </property>
+     <property name="columnCount">
+      <number>3</number>
+     </property>
      <attribute name="headerVisible">
-      <bool>false</bool>
+      <bool>true</bool>
      </attribute>
      <attribute name="headerDefaultSectionSize">
-      <number>200</number>
+      <number>100</number>
      </attribute>
      <attribute name="headerDefaultSectionSize">
-      <number>200</number>
+      <number>100</number>
      </attribute>
      <attribute name="headerVisible">
-      <bool>false</bool>
+      <bool>true</bool>
      </attribute>
      <column>
       <property name="text">
-       <string>1</string>
+       <string>Item</string>
       </property>
      </column>
      <column>
       <property name="text">
-       <string>2</string>
+       <string>Visibility</string>
       </property>
      </column>
+     <column>
+      <property name="text">
+       <string>Keyboard shortcut</string>
+      </property>
+     </column>
     </widget>
    </item>
   </layout>


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

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