[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