aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlbert Astals Cid <albert.astals@canonical.com>2017-03-06 15:55:12 +0100
committerAlbert Astals Cid <albert.astals@canonical.com>2017-03-06 15:55:12 +0100
commit7579572643413c5d399ec2bee6339ab20232c8cf (patch)
treebdf781de2e09b52acb8a43174385141c4cbc0751
parent2eaa36e38c910a0ee2450ac7ccae6473d359eb58 (diff)
downloadqmenumodel-7579572643413c5d399ec2bee6339ab20232c8cf.tar.gz
qmenumodel-7579572643413c5d399ec2bee6339ab20232c8cf.tar.bz2
qmenumodel-7579572643413c5d399ec2bee6339ab20232c8cf.zip
Call about to show for those items that have a qtubuntu-tag property
-rw-r--r--libqmenumodel/src/unitymenumodel.cpp43
-rw-r--r--libqmenumodel/src/unitymenumodel.h3
2 files changed, 44 insertions, 2 deletions
diff --git a/libqmenumodel/src/unitymenumodel.cpp b/libqmenumodel/src/unitymenumodel.cpp
index 192ee46..ebadaf7 100644
--- a/libqmenumodel/src/unitymenumodel.cpp
+++ b/libqmenumodel/src/unitymenumodel.cpp
@@ -289,7 +289,7 @@ UnityMenuModel::UnityMenuModel(QObject *parent):
priv = new UnityMenuModelPrivate(this);
}
-UnityMenuModel::UnityMenuModel(const UnityMenuModelPrivate& other, QObject *parent):
+UnityMenuModel::UnityMenuModel(const UnityMenuModelPrivate& other, UnityMenuModel *parent):
QAbstractListModel(parent)
{
priv = new UnityMenuModelPrivate(other, this);
@@ -729,6 +729,47 @@ void UnityMenuModel::activate(int index, const QVariant& parameter)
}
}
+void UnityMenuModel::aboutToShow(int index)
+{
+ GSequenceIter *it = g_sequence_get_iter_at_pos (priv->items, index);
+ if (g_sequence_iter_is_end (it)) {
+ return;
+ }
+
+ GtkMenuTrackerItem *item = (GtkMenuTrackerItem *) g_sequence_get (it);
+ if (!item) {
+ return;
+ }
+
+ quint64 actionTag;
+ if (gtk_menu_tracker_item_get_attribute (item, "qtubuntu-tag", "t", &actionTag)) {
+ // Child UnityMenuModel have priv->connection null, so climb to the parent until we find a non null one
+ UnityMenuModelPrivate *privToUse = priv;
+ while (privToUse && !privToUse->connection) {
+ UnityMenuModel *pModel = dynamic_cast<UnityMenuModel*>(privToUse->model->QObject::parent());
+ if (pModel) {
+ privToUse = pModel->priv;
+ } else {
+ privToUse = nullptr;
+ }
+ }
+ if (privToUse) {
+ g_dbus_connection_call (privToUse->connection,
+ privToUse->busName,
+ privToUse->menuObjectPath,
+ "qtubuntu.actions.extra",
+ "aboutToShow",
+ g_variant_new("(t)", actionTag),
+ nullptr,
+ G_DBUS_CALL_FLAGS_NO_AUTO_START,
+ 0,
+ nullptr,
+ nullptr,
+ nullptr);
+ }
+ }
+}
+
void UnityMenuModel::activateByVariantString(int index, const QString& parameter)
{
activate(index, Converter::toQVariantFromVariantString(parameter));
diff --git a/libqmenumodel/src/unitymenumodel.h b/libqmenumodel/src/unitymenumodel.h
index ed3bcd7..1a2a190 100644
--- a/libqmenumodel/src/unitymenumodel.h
+++ b/libqmenumodel/src/unitymenumodel.h
@@ -63,6 +63,7 @@ public:
Q_INVOKABLE QVariant get(int row, const QByteArray &role);
Q_INVOKABLE void activate(int index, const QVariant& parameter = QVariant());
+ Q_INVOKABLE void aboutToShow(int index);
Q_INVOKABLE void activateByVariantString(int index, const QString& parameter = QString());
Q_INVOKABLE void changeState(int index, const QVariant& parameter);
Q_INVOKABLE void changeStateByVariantString(int index, const QString& parameter);
@@ -90,7 +91,7 @@ private:
class UnityMenuModelPrivate *priv;
friend class UnityMenuModelPrivate;
- UnityMenuModel(const UnityMenuModelPrivate& other, QObject *parent);
+ UnityMenuModel(const UnityMenuModelPrivate& other, UnityMenuModel *parent);
};
#endif