From c6cb726c5694f8a35711a48a7bf5e2a6723aeba8 Mon Sep 17 00:00:00 2001 From: Nick Dedekind Date: Thu, 8 Aug 2013 16:12:57 +0100 Subject: Glib callbacks send events through qt. --- libqmenumodel/src/qdbusactiongroup.cpp | 64 +++++++++++++++++++++++++++++++--- 1 file changed, 59 insertions(+), 5 deletions(-) (limited to 'libqmenumodel/src/qdbusactiongroup.cpp') diff --git a/libqmenumodel/src/qdbusactiongroup.cpp b/libqmenumodel/src/qdbusactiongroup.cpp index 824b5f0..48aa882 100644 --- a/libqmenumodel/src/qdbusactiongroup.cpp +++ b/libqmenumodel/src/qdbusactiongroup.cpp @@ -21,11 +21,18 @@ #include "qstateaction.h" #include "converter.h" +// Qt +#include +#include + extern "C" { #include #include } +const QEvent::Type DBusActionStateEvent::eventType = static_cast(QEvent::registerEventType()); +const QEvent::Type DBusActionVisiblityEvent::eventType = static_cast(QEvent::registerEventType()); + /*! \qmltype QDBusActionGroup \inherits QDBusObject @@ -53,7 +60,8 @@ extern "C" { /*! \internal */ QDBusActionGroup::QDBusActionGroup(QObject *parent) :QObject(parent), - m_actionGroup(NULL) + QDBusObject(this), + m_actionGroup(NULL) { } @@ -184,7 +192,8 @@ void QDBusActionGroup::setActionGroup(GDBusActionGroup *ag) gchar **actions = g_action_group_list_actions(m_actionGroup); for(guint i=0; i < g_strv_length(actions); i++) { - Q_EMIT actionAppear(actions[i]); + DBusActionVisiblityEvent dave(actions[i], true); + QCoreApplication::sendEvent(this, &dave); } g_strfreev(actions); } @@ -218,23 +227,68 @@ void QDBusActionGroup::activateAction(const QString &name, const QVariant ¶m } } +bool QDBusActionGroup::event(QEvent* e) +{ + if (QDBusObject::event(e)) { + return true; + + } else if (e->type() == DBusActionVisiblityEvent::eventType) { + DBusActionVisiblityEvent *dave = static_cast(e); + + if (dave->visible) { + Q_EMIT actionAppear(dave->name); + } else { + Q_EMIT actionVanish(dave->name); + } + } else if (e->type() == DBusActionStateEvent::eventType) { + DBusActionStateEvent *dase = static_cast(e); + + Q_EMIT actionStateChanged(dase->name, dase->state); + } + return QObject::event(e); +} + /*! \internal */ void QDBusActionGroup::onActionAdded(GDBusActionGroup *, gchar *name, gpointer data) { QDBusActionGroup *self = reinterpret_cast(data); - Q_EMIT self->actionAppear(name); + + DBusActionVisiblityEvent dave(name, true); + QCoreApplication::sendEvent(self, &dave); } /*! \internal */ void QDBusActionGroup::onActionRemoved(GDBusActionGroup *, gchar *name, gpointer data) { QDBusActionGroup *self = reinterpret_cast(data); - Q_EMIT self->actionVanish(name); + + DBusActionVisiblityEvent dave(name, false); + QCoreApplication::sendEvent(self, &dave); } /*! \internal */ void QDBusActionGroup::onActionStateChanged(GDBusActionGroup *, gchar *name, GVariant *value, gpointer data) { QDBusActionGroup *self = reinterpret_cast(data); - Q_EMIT self->actionStateChanged(name, Converter::toQVariant(value)); + + DBusActionStateEvent dase(name, Converter::toQVariant(value)); + QCoreApplication::sendEvent(self, &dase); +} + +DBusActionEvent::DBusActionEvent(const QString& _name, QEvent::Type type) + : QEvent(type), + name(_name) +{ +} + +DBusActionVisiblityEvent::DBusActionVisiblityEvent(const QString& _name, bool _visible) + : DBusActionEvent(_name, DBusActionVisiblityEvent::eventType), + visible(_visible) +{ +} + +DBusActionStateEvent::DBusActionStateEvent(const QString& _name, const QVariant& _state) + : DBusActionEvent(_name, DBusActionStateEvent::eventType), + state(_state) +{ } -- cgit v1.2.3 From 9be29519eb308eae8a2fafe7441324a53220726b Mon Sep 17 00:00:00 2001 From: Nick Dedekind Date: Fri, 9 Aug 2013 08:10:21 +0100 Subject: bit of code cleanup --- libqmenumodel/src/qdbusactiongroup.cpp | 2 -- 1 file changed, 2 deletions(-) (limited to 'libqmenumodel/src/qdbusactiongroup.cpp') diff --git a/libqmenumodel/src/qdbusactiongroup.cpp b/libqmenumodel/src/qdbusactiongroup.cpp index 48aa882..72e3302 100644 --- a/libqmenumodel/src/qdbusactiongroup.cpp +++ b/libqmenumodel/src/qdbusactiongroup.cpp @@ -22,7 +22,6 @@ #include "converter.h" // Qt -#include #include extern "C" { @@ -231,7 +230,6 @@ bool QDBusActionGroup::event(QEvent* e) { if (QDBusObject::event(e)) { return true; - } else if (e->type() == DBusActionVisiblityEvent::eventType) { DBusActionVisiblityEvent *dave = static_cast(e); -- cgit v1.2.3 From db47d077dcd9ee6761de828c9194d3fa2331f9ea Mon Sep 17 00:00:00 2001 From: Nick Dedekind Date: Fri, 9 Aug 2013 09:01:43 +0100 Subject: moved events to separate file. --- libqmenumodel/src/qdbusactiongroup.cpp | 22 +--------------------- 1 file changed, 1 insertion(+), 21 deletions(-) (limited to 'libqmenumodel/src/qdbusactiongroup.cpp') diff --git a/libqmenumodel/src/qdbusactiongroup.cpp b/libqmenumodel/src/qdbusactiongroup.cpp index 72e3302..5000470 100644 --- a/libqmenumodel/src/qdbusactiongroup.cpp +++ b/libqmenumodel/src/qdbusactiongroup.cpp @@ -20,6 +20,7 @@ #include "qdbusactiongroup.h" #include "qstateaction.h" #include "converter.h" +#include "qmenumodelevents.h" // Qt #include @@ -29,9 +30,6 @@ extern "C" { #include } -const QEvent::Type DBusActionStateEvent::eventType = static_cast(QEvent::registerEventType()); -const QEvent::Type DBusActionVisiblityEvent::eventType = static_cast(QEvent::registerEventType()); - /*! \qmltype QDBusActionGroup \inherits QDBusObject @@ -272,21 +270,3 @@ void QDBusActionGroup::onActionStateChanged(GDBusActionGroup *, gchar *name, GVa DBusActionStateEvent dase(name, Converter::toQVariant(value)); QCoreApplication::sendEvent(self, &dase); } - -DBusActionEvent::DBusActionEvent(const QString& _name, QEvent::Type type) - : QEvent(type), - name(_name) -{ -} - -DBusActionVisiblityEvent::DBusActionVisiblityEvent(const QString& _name, bool _visible) - : DBusActionEvent(_name, DBusActionVisiblityEvent::eventType), - visible(_visible) -{ -} - -DBusActionStateEvent::DBusActionStateEvent(const QString& _name, const QVariant& _state) - : DBusActionEvent(_name, DBusActionStateEvent::eventType), - state(_state) -{ -} -- cgit v1.2.3