on xenial help sign in
multi-icon panel indicators
d2f0375Nick Dedekind
Panel/Indicators/DefaultIndicatorWidget2.qml+22−10
@@ -27,7 +27,7 @@ Indicators.IndicatorWidget {
27 width: itemRow.width + units.gu(1)
27 width: itemRow.width + units.gu(1)
28
28
29 property alias label: itemLabel.text
29 property alias label: itemLabel.text
30− property alias iconSource: itemImage.source
30+ property var icons: undefined
31
31
32 Row {
32 Row {
33 id: itemRow
33 id: itemRow
@@ -39,16 +39,28 @@ Indicators.IndicatorWidget {
39 }
39 }
40 spacing: units.gu(0.5)
40 spacing: units.gu(0.5)
41
41
42− // FIXME : Should us Ubuntu.Icon . results in low res images
42+ Repeater {
43+ model: indicatorWidget.icons
44+ width: childrenRect.width
45+ anchors {
46+ top: parent.top
47+ bottom: parent.bottom
48+ }
49+
43− Image {
50+ Image {
44− id: itemImage
51+ id: itemImage
45− objectName: "itemImage"
52+ objectName: "itemImage"
46− visible: source != ""
53+ visible: source != ""
54+ source: modelData
47− height: indicatorWidget.iconSize
55+ height: indicatorWidget.iconSize
48− width: indicatorWidget.iconSize
56+ width: indicatorWidget.iconSize
49− anchors.verticalCenter: parent.verticalCenter
57+ anchors.verticalCenter: parent.verticalCenter
58+ }
50 }
59 }
51
60
61+ // FIXME : Should us Ubuntu.Icon . results in low res images
62+
63+
52 Label {
64 Label {
53 id: itemLabel
65 id: itemLabel
54 objectName: "itemLabel"
66 objectName: "itemLabel"
@@ -70,7 +82,7 @@ Indicators.IndicatorWidget {
70 }
82 }
71
83
72 label = actionState.label;
84 label = actionState.label;
73− iconSource = actionState.icon;
85+ icons = actionState.icons;
74 enabled = actionState.visible;
86 enabled = actionState.visible;
75 }
87 }
76}
88}
plugins/Unity/Indicators/rootactionstate.cpp+33−11
@@ -115,11 +115,11 @@ QString RootActionState::label() const
115 return m_cachedState.value("label", QVariant::fromValue(QString())).toString();
115 return m_cachedState.value("label", QVariant::fromValue(QString())).toString();
116}
116}
117
117
118−QString RootActionState::icon() const
118+QStringList RootActionState::icons() const
119{
119{
120− if (!isValid()) return QString();
120+ if (!isValid()) return QStringList();
121
121
122− return m_cachedState.value("icon", QVariant::fromValue(QString())).toString();
122+ return m_cachedState.value("icons", QVariant::fromValue(QStringList())).toStringList();
123}
123}
124
124
125QString RootActionState::accessibleName() const
125QString RootActionState::accessibleName() const
@@ -198,16 +198,38 @@ QVariant RootActionState::toQVariant(GVariant* state) const
198 while (g_variant_iter_loop (&iter, "{sv}", &key, &vvalue))
198 while (g_variant_iter_loop (&iter, "{sv}", &key, &vvalue))
199 {
199 {
200 QString str = QString::fromUtf8(key);
200 QString str = QString::fromUtf8(key);
201− if (str == "icon") {
201+ if (str == "icon" && !qmap.contains("icons")) {
202+ QStringList icons;
203+
202 // FIXME - should be sending a url.
204 // FIXME - should be sending a url.
203− GIcon *icon = g_icon_deserialize (vvalue);
205+ GIcon *gicon = g_icon_deserialize (vvalue);
204− if (icon) {
206+ if (gicon) {
205− qmap.insert(str, iconUri(icon));
207+ icons << iconUri(gicon) << iconUri(gicon);
206− g_object_unref (icon);
207 }
208 }
208− else {
209− qmap.insert(str, QVariant(""));
209+ qmap.insert("icons", icons);
210+
211+ } else if (str == "icons") {
212+
213+ QStringList icons;
214+
215+ if (g_variant_type_is_array(g_variant_get_type(vvalue))) {
216+
217+
218+ for (int i = 0, iMax = g_variant_n_children(vvalue); i < iMax; i++) {
219+ GVariant *child = g_variant_get_child_value(vvalue, i);
220+
221+ // FIXME - should be sending a url.
222+ GIcon *gicon = g_icon_deserialize (child);
223+ if (gicon) {
224+ icons << iconUri(gicon) << iconUri(gicon);
225+ g_object_unref (gicon);
226+ }
227+ g_variant_unref(child);
228+ }
210 }
229 }
230+ // will overwrite icon.
231+ qmap.insert("icons", icons);
232+
211 } else {
233 } else {
212 qmap.insert(str, ActionStateParser::toQVariant(vvalue));
234 qmap.insert(str, ActionStateParser::toQVariant(vvalue));
213 }
235 }
@@ -235,7 +257,7 @@ QVariant RootActionState::toQVariant(GVariant* state) const
235
257
236 gicon = g_icon_new_for_string (icon, NULL);
258 gicon = g_icon_new_for_string (icon, NULL);
237 if (gicon) {
259 if (gicon) {
238− qmap["icon"] = iconUri(gicon);
260+ qmap["icons"] = QStringList() << iconUri(gicon) << iconUri(gicon);
239 g_object_unref (gicon);
261 g_object_unref (gicon);
240 }
262 }
241
263
plugins/Unity/Indicators/rootactionstate.h+3−3
@@ -33,7 +33,7 @@ class UNITYINDICATORS_EXPORT RootActionState : public ActionStateParser
33
33
34 Q_PROPERTY(bool valid READ isValid NOTIFY validChanged)
34 Q_PROPERTY(bool valid READ isValid NOTIFY validChanged)
35 Q_PROPERTY(QString label READ label NOTIFY labelChanged)
35 Q_PROPERTY(QString label READ label NOTIFY labelChanged)
36− Q_PROPERTY(QString icon READ icon NOTIFY iconChanged)
36+ Q_PROPERTY(QStringList icons READ icons NOTIFY iconsChanged)
37 Q_PROPERTY(QString accessibleName READ accessibleName NOTIFY accessibleNameChanged)
37 Q_PROPERTY(QString accessibleName READ accessibleName NOTIFY accessibleNameChanged)
38 Q_PROPERTY(bool visible READ isVisible NOTIFY visibleChanged)
38 Q_PROPERTY(bool visible READ isVisible NOTIFY visibleChanged)
39public:
39public:
@@ -48,7 +48,7 @@ public:
48
48
49 bool isValid() const;
49 bool isValid() const;
50 QString label() const;
50 QString label() const;
51− QString icon() const;
51+ QStringList icons() const;
52 QString accessibleName() const;
52 QString accessibleName() const;
53 bool isVisible() const;
53 bool isVisible() const;
54
54
@@ -63,7 +63,7 @@ Q_SIGNALS:
63
63
64 void validChanged();
64 void validChanged();
65 void labelChanged();
65 void labelChanged();
66− void iconChanged();
66+ void iconsChanged();
67 void accessibleNameChanged();
67 void accessibleNameChanged();
68 void visibleChanged();
68 void visibleChanged();
69
69