aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTed Gould <ted@gould.cx>2010-10-15 16:10:55 -0500
committerTed Gould <ted@gould.cx>2010-10-15 16:10:55 -0500
commit37596991960990c127336ccc8527832a35d595ad (patch)
treec53a2c8e06fd9748e2c590b340eae68927f4c261
parent5c07a374c78a73fee4030a61c74ab3a99fc8bcc5 (diff)
downloadlibdbusmenu-37596991960990c127336ccc8527832a35d595ad.tar.gz
libdbusmenu-37596991960990c127336ccc8527832a35d595ad.tar.bz2
libdbusmenu-37596991960990c127336ccc8527832a35d595ad.zip
Making signals emit on dbus as well as locally.
-rw-r--r--libdbusmenu-glib/server.c44
1 files changed, 44 insertions, 0 deletions
diff --git a/libdbusmenu-glib/server.c b/libdbusmenu-glib/server.c
index 42463a9..652b2a8 100644
--- a/libdbusmenu-glib/server.c
+++ b/libdbusmenu-glib/server.c
@@ -589,6 +589,15 @@ layout_update_idle (gpointer user_data)
DbusmenuServerPrivate * priv = DBUSMENU_SERVER_GET_PRIVATE(server);
g_signal_emit(G_OBJECT(server), signals[LAYOUT_UPDATED], 0, priv->layout_revision, 0, TRUE);
+ if (priv->dbusobject != NULL && priv->bus != NULL) {
+ g_dbus_connection_emit_signal(priv->bus,
+ NULL,
+ priv->dbusobject,
+ DBUSMENU_INTERFACE,
+ "LayoutUpdated",
+ g_variant_new("(ui)", priv->layout_revision, 0),
+ NULL);
+ }
priv->layout_idle = 0;
@@ -612,7 +621,29 @@ layout_update_signal (DbusmenuServer * server)
static void
menuitem_property_changed (DbusmenuMenuitem * mi, gchar * property, GValue * value, DbusmenuServer * server)
{
+ DbusmenuServerPrivate * priv = DBUSMENU_SERVER_GET_PRIVATE(server);
+
g_signal_emit(G_OBJECT(server), signals[ID_PROP_UPDATE], 0, dbusmenu_menuitem_get_id(mi), property, value, TRUE);
+
+ if (priv->dbusobject != NULL && priv->bus != NULL) {
+ GValue variantval = {0};
+ g_value_init(&variantval, G_TYPE_VARIANT);
+
+ if (!g_value_transform(value, &variantval)) {
+ g_warning("Unable to convert property '%s' of type %s to a variant", property, G_VALUE_TYPE_NAME(value));
+ }
+ GVariant * variant = g_value_get_variant(&variantval);
+
+ g_dbus_connection_emit_signal(priv->bus,
+ NULL,
+ priv->dbusobject,
+ DBUSMENU_INTERFACE,
+ "ItemPropertyUpdated",
+ g_variant_new("(isv)", dbusmenu_menuitem_get_id(mi), property, variant),
+ NULL);
+
+ g_value_unset(&variantval);
+ }
return;
}
@@ -663,7 +694,20 @@ menuitem_child_moved (DbusmenuMenuitem * parent, DbusmenuMenuitem * child, guint
static void
menuitem_shown (DbusmenuMenuitem * mi, guint timestamp, DbusmenuServer * server)
{
+ DbusmenuServerPrivate * priv = DBUSMENU_SERVER_GET_PRIVATE(server);
+
g_signal_emit(G_OBJECT(server), signals[ITEM_ACTIVATION], 0, dbusmenu_menuitem_get_id(mi), timestamp, TRUE);
+
+ if (priv->dbusobject != NULL && priv->bus != NULL) {
+ g_dbus_connection_emit_signal(priv->bus,
+ NULL,
+ priv->dbusobject,
+ DBUSMENU_INTERFACE,
+ "ItemPropertyUpdated",
+ g_variant_new("(iu)", dbusmenu_menuitem_get_id(mi), timestamp),
+ NULL);
+ }
+
return;
}