diff options
-rw-r--r-- | libindicate/listener-marshal.list | 4 | ||||
-rw-r--r-- | libindicate/listener.c | 44 | ||||
-rw-r--r-- | libindicate/listener.h | 14 |
3 files changed, 40 insertions, 22 deletions
diff --git a/libindicate/listener-marshal.list b/libindicate/listener-marshal.list index c02c70f..562d06f 100644 --- a/libindicate/listener-marshal.list +++ b/libindicate/listener-marshal.list @@ -1,2 +1,6 @@ # IndicatorAdded, IndicatorRemoved, IndicatorModified VOID:UINT,STRING +# Local indicator_added, indicator_removed +VOID:POINTER,POINTER,STRING +# Local indicator_modified +VOID:POINTER,POINTER,STRING,STRING diff --git a/libindicate/listener.c b/libindicate/listener.c index 70ba8f4..75c7649 100644 --- a/libindicate/listener.c +++ b/libindicate/listener.c @@ -59,29 +59,41 @@ indicate_listener_class_init (IndicateListenerClass * class) gobj->finalize = indicate_listener_finalize; -/* TODO, I need new marshallers here, bah humbug signals[INDICATOR_ADDED] = g_signal_new("indicator-added", G_TYPE_FROM_CLASS (class), G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET (IndicateListenerClass, indicator_added), NULL, NULL, - g_cclosure_marshal_VOID__POINTER_POINTER_POINTER, - G_TYPE_NONE, 2, G_TYPE_OBJECT, G_TYPE_OBJECT, G_TYPE_STRING); + indicate_listener_marshal_VOID__POINTER_POINTER_STRING, + G_TYPE_NONE, 3, G_TYPE_POINTER, G_TYPE_POINTER, G_TYPE_STRING); signals[INDICATOR_REMOVED] = g_signal_new("indicator-removed", G_TYPE_FROM_CLASS (class), G_SIGNAL_RUN_LAST, - G_STRUCT_OFFSET (IndicateServerClass, indicator_removed), + G_STRUCT_OFFSET (IndicateListenerClass, indicator_removed), NULL, NULL, - g_cclosure_marshal_VOID__UINT_POINTER, - G_TYPE_NONE, 2, G_TYPE_UINT, G_TYPE_STRING); + indicate_listener_marshal_VOID__POINTER_POINTER_STRING, + G_TYPE_NONE, 3, G_TYPE_POINTER, G_TYPE_POINTER, G_TYPE_STRING); signals[INDICATOR_MODIFIED] = g_signal_new("indicator-modified", G_TYPE_FROM_CLASS (class), G_SIGNAL_RUN_LAST, - G_STRUCT_OFFSET (IndicateServerClass, indicator_modified), + G_STRUCT_OFFSET (IndicateListenerClass, indicator_modified), NULL, NULL, - g_cclosure_marshal_VOID__UINT_POINTER, - G_TYPE_NONE, 2, G_TYPE_UINT, G_TYPE_STRING); -*/ + indicate_listener_marshal_VOID__POINTER_POINTER_STRING_STRING, + G_TYPE_NONE, 4, G_TYPE_POINTER, G_TYPE_POINTER, G_TYPE_STRING, G_TYPE_STRING); + signals[SERVER_ADDED] = g_signal_new("server-added", + G_TYPE_FROM_CLASS (class), + G_SIGNAL_RUN_LAST, + G_STRUCT_OFFSET (IndicateListenerClass, server_added), + NULL, NULL, + g_cclosure_marshal_VOID__POINTER, + G_TYPE_NONE, 1, G_TYPE_POINTER); + signals[SERVER_REMOVED] = g_signal_new("server-removed", + G_TYPE_FROM_CLASS (class), + G_SIGNAL_RUN_LAST, + G_STRUCT_OFFSET (IndicateListenerClass, server_removed), + NULL, NULL, + g_cclosure_marshal_VOID__POINTER, + G_TYPE_NONE, 1, G_TYPE_POINTER); dbus_g_object_register_marshaller(indicate_listener_marshal_VOID__UINT_STRING, G_TYPE_NONE, @@ -376,7 +388,7 @@ proxy_indicator_added (DBusGProxy * proxy, guint id, const gchar * type, proxy_t dbus_g_proxy_connect_signal(proxyt->proxy, "IndicatorModified", G_CALLBACK(proxy_indicator_modified), proxyt, NULL); - /* TODO: Send signal */ + g_signal_emit(proxyt->listener, signals[SERVER_ADDED], 0, proxyt->name, TRUE); } GHashTable * indicators = g_hash_table_lookup(proxyt->indicators, type); @@ -387,8 +399,8 @@ proxy_indicator_added (DBusGProxy * proxy, guint id, const gchar * type, proxy_t } if (g_hash_table_lookup(indicators, (gpointer)id)) { - g_hash_table_insert(indicators, (gpointer)id, TRUE); - /* TODO: Send signal */ + g_hash_table_insert(indicators, (gpointer)id, (gpointer)TRUE); + g_signal_emit(proxyt->listener, signals[INDICATOR_ADDED], 0, proxyt->name, id, type, TRUE); } return; @@ -414,8 +426,7 @@ proxy_indicator_removed (DBusGProxy * proxy, guint id, const gchar * type, proxy } g_hash_table_remove(indicators, (gpointer)id); - - /* TODO: Signal here */ + g_signal_emit(proxyt->listener, signals[INDICATOR_REMOVED], 0, proxyt->name, id, type, TRUE); return; } @@ -428,6 +439,7 @@ proxy_indicator_modified (DBusGProxy * proxy, guint id, const gchar * type, prox return; } + // TODO: Search for the ID to discover the type GHashTable * indicators = g_hash_table_lookup(proxyt->indicators, type); if (indicators == NULL) { g_warning("Can not modify indicator %d of type '%s' as there are no indicators of that type on %s.", id, type, proxyt->name); @@ -439,7 +451,7 @@ proxy_indicator_modified (DBusGProxy * proxy, guint id, const gchar * type, prox return; } - /* TODO: Signal here */ + g_signal_emit(proxyt->listener, signals[INDICATOR_MODIFIED], 0, proxyt->name, id, type, type, TRUE); return; } diff --git a/libindicate/listener.h b/libindicate/listener.h index 5c482ba..c40bc07 100644 --- a/libindicate/listener.h +++ b/libindicate/listener.h @@ -20,6 +20,9 @@ G_BEGIN_DECLS #define INDICATE_IS_LISTENER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), INDICATE_TYPE_LISTENER)) #define INDICATE_LISTENER_GET_CLASS(object) (G_TYPE_INSTANCE_GET_CLASS((object), INDICATE_TYPE_LISTENER, IndicateListenerClass)) +typedef gchar IndicateListenerServer; +typedef guint IndicateListenerIndicator; + typedef struct _IndicateListener IndicateListener; struct _IndicateListener { GObject parent; @@ -42,13 +45,12 @@ struct _IndicateListenerClass { GObjectClass parent; /* Signals */ - void (* indicator_added) (IndicateServer * server, IndicateIndicator * indicator, gchar * type); - void (* indicator_removed) (IndicateServer * server, IndicateIndicator * indicator, gchar * type); - void (* indicator_modified) (IndicateServer * server, IndicateIndicator * indicator, gchar * property); - - void (* server_added) (IndicateServer * server); - void (* server_removed) (IndicateServer * server); + void (* indicator_added) (IndicateListenerServer * server, IndicateListenerIndicator * indicator, gchar * type); + void (* indicator_removed) (IndicateListenerServer * server, IndicateListenerIndicator * indicator, gchar * type); + void (* indicator_modified) (IndicateListenerServer * server, IndicateListenerIndicator * indicator, gchar * type, gchar * property); + void (* server_added) (IndicateListenerServer * server); + void (* server_removed) (IndicateListenerServer * server); }; GType indicate_listener_get_type (void) G_GNUC_CONST; |