on xenial help sign in
multi-icon panel indicators
commitd2f03754b6e2e63112438ec0954b2782f75a9765 authorNick Dedekind <nicholas.dedekind@gmail.com> dateFri 16 Aug 2013, 15:09 (13 years ago) parented4a2a7
3 files changed+58−24
Panel/Indicators/DefaultIndicatorWidget2.qml+22−10 plugins/Unity/Indicators/rootactionstate.cpp+33−11 plugins/Unity/Indicators/rootactionstate.h+3−3
Panel/Indicators/DefaultIndicatorWidget2.qml+22−10
@@ -27,7 +27,7 @@ Indicators.IndicatorWidget {
2727 width: itemRow.width + units.gu(1)
2828
2929 property alias label: itemLabel.text
30− property alias iconSource: itemImage.source
30+ property var icons: undefined
3131
3232 Row {
3333 id: itemRow
@@ -39,16 +39,28 @@ Indicators.IndicatorWidget {
3939 }
4040 spacing: units.gu(0.5)
4141
42− // FIXME : Should us Ubuntu.Icon . results in low res images
43− Image {
44− id: itemImage
45− objectName: "itemImage"
46− visible: source != ""
47− height: indicatorWidget.iconSize
48− width: indicatorWidget.iconSize
49− anchors.verticalCenter: parent.verticalCenter
42+ Repeater {
43+ model: indicatorWidget.icons
44+ width: childrenRect.width
45+ anchors {
46+ top: parent.top
47+ bottom: parent.bottom
48+ }
49+
50+ Image {
51+ id: itemImage
52+ objectName: "itemImage"
53+ visible: source != ""
54+ source: modelData
55+ height: indicatorWidget.iconSize
56+ width: indicatorWidget.iconSize
57+ anchors.verticalCenter: parent.verticalCenter
58+ }
5059 }
5160
61+ // FIXME : Should us Ubuntu.Icon . results in low res images
62+
63+
5264 Label {
5365 id: itemLabel
5466 objectName: "itemLabel"
@@ -70,7 +82,7 @@ Indicators.IndicatorWidget {
7082 }
7183
7284 label = actionState.label;
73− iconSource = actionState.icon;
85+ icons = actionState.icons;
7486 enabled = actionState.visible;
7587 }
7688}
plugins/Unity/Indicators/rootactionstate.cpp+33−11
@@ -115,11 +115,11 @@ QString RootActionState::label() const
115115 return m_cachedState.value("label", QVariant::fromValue(QString())).toString();
116116}
117117
118−QString RootActionState::icon() const
118+QStringList RootActionState::icons() const
119119{
120− if (!isValid()) return QString();
120+ if (!isValid()) return QStringList();
121121
122− return m_cachedState.value("icon", QVariant::fromValue(QString())).toString();
122+ return m_cachedState.value("icons", QVariant::fromValue(QStringList())).toStringList();
123123}
124124
125125QString RootActionState::accessibleName() const
@@ -198,16 +198,38 @@ QVariant RootActionState::toQVariant(GVariant* state) const
198198 while (g_variant_iter_loop (&iter, "{sv}", &key, &vvalue))
199199 {
200200 QString str = QString::fromUtf8(key);
201− if (str == "icon") {
201+ if (str == "icon" && !qmap.contains("icons")) {
202+ QStringList icons;
203+
202204 // FIXME - should be sending a url.
203− GIcon *icon = g_icon_deserialize (vvalue);
204− if (icon) {
205− qmap.insert(str, iconUri(icon));
206− g_object_unref (icon);
205+ GIcon *gicon = g_icon_deserialize (vvalue);
206+ if (gicon) {
207+ icons << iconUri(gicon) << iconUri(gicon);
207208 }
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+ }
210229 }
230+ // will overwrite icon.
231+ qmap.insert("icons", icons);
232+
211233 } else {
212234 qmap.insert(str, ActionStateParser::toQVariant(vvalue));
213235 }
@@ -235,7 +257,7 @@ QVariant RootActionState::toQVariant(GVariant* state) const
235257
236258 gicon = g_icon_new_for_string (icon, NULL);
237259 if (gicon) {
238− qmap["icon"] = iconUri(gicon);
260+ qmap["icons"] = QStringList() << iconUri(gicon) << iconUri(gicon);
239261 g_object_unref (gicon);
240262 }
241263
plugins/Unity/Indicators/rootactionstate.h+3−3
@@ -33,7 +33,7 @@ class UNITYINDICATORS_EXPORT RootActionState : public ActionStateParser
3333
3434 Q_PROPERTY(bool valid READ isValid NOTIFY validChanged)
3535 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)
3737 Q_PROPERTY(QString accessibleName READ accessibleName NOTIFY accessibleNameChanged)
3838 Q_PROPERTY(bool visible READ isVisible NOTIFY visibleChanged)
3939public:
@@ -48,7 +48,7 @@ public:
4848
4949 bool isValid() const;
5050 QString label() const;
51− QString icon() const;
51+ QStringList icons() const;
5252 QString accessibleName() const;
5353 bool isVisible() const;
5454
@@ -63,7 +63,7 @@ Q_SIGNALS:
6363
6464 void validChanged();
6565 void labelChanged();
66− void iconChanged();
66+ void iconsChanged();
6767 void accessibleNameChanged();
6868 void visibleChanged();
6969