From 6f032f50c8bec41cd56e36ec09af118a9684af5b Mon Sep 17 00:00:00 2001 From: Aurelien Gateau Date: Fri, 8 Oct 2010 17:02:24 +0200 Subject: Fix implementation of org.kde.StatusNotifierWatcher interface ProtocolVersion, IsStatusNotifierHostRegistered and RegisteredStatusNotifierItems are properties, not methods. --- src/application-service-appstore.c | 18 ++++++++ src/application-service-appstore.h | 1 + src/application-service-watcher.c | 93 ++++++++++++++++++++++++++++---------- src/notification-watcher.xml | 13 ++---- 4 files changed, 91 insertions(+), 34 deletions(-) diff --git a/src/application-service-appstore.c b/src/application-service-appstore.c index 46118bb..e3befff 100644 --- a/src/application-service-appstore.c +++ b/src/application-service-appstore.c @@ -1022,6 +1022,24 @@ application_service_appstore_application_remove (ApplicationServiceAppstore * ap return; } +gchar** +application_service_appstore_application_get_list (ApplicationServiceAppstore * appstore) +{ + ApplicationServiceAppstorePrivate * priv = appstore->priv; + gchar ** out; + gchar ** outpntr; + GList * listpntr; + + out = g_new(gchar*, g_list_length(priv->applications) + 1); + + for (listpntr = priv->applications, outpntr = out; listpntr != NULL; listpntr = g_list_next(listpntr), ++outpntr) { + Application * app = (Application *)listpntr->data; + *outpntr = g_strdup_printf("%s%s", app->dbus_name, app->dbus_object); + } + *outpntr = 0; + return out; +} + /* Creates a basic appstore object and attaches the LRU file object to it. */ ApplicationServiceAppstore * diff --git a/src/application-service-appstore.h b/src/application-service-appstore.h index 73f6a9d..aa2824b 100644 --- a/src/application-service-appstore.h +++ b/src/application-service-appstore.h @@ -66,6 +66,7 @@ void application_service_appstore_application_remove (ApplicationServiceApp void application_service_appstore_approver_add (ApplicationServiceAppstore * appstore, const gchar * dbus_name, const gchar * dbus_object); +gchar** application_service_appstore_application_get_list (ApplicationServiceAppstore * appstore); G_END_DECLS diff --git a/src/application-service-watcher.c b/src/application-service-watcher.c index 5b77620..946b2a9 100644 --- a/src/application-service-watcher.c +++ b/src/application-service-watcher.c @@ -30,12 +30,25 @@ with this program. If not, see . #include "application-service-watcher.h" #include "dbus-shared.h" +/* Enum for the properties so that they can be quickly + found and looked up. */ +enum { + PROP_0, + PROP_PROTOCOL_VERSION, + PROP_IS_STATUS_NOTIFIER_HOST_REGISTERED, + PROP_REGISTERED_STATUS_NOTIFIER_ITEMS +}; + +/* The strings so that they can be slowly looked up. */ +#define PROP_PROTOCOL_VERSION_S "protocol-version" +#define PROP_IS_STATUS_NOTIFIER_HOST_REGISTERED_S "is-status-notifier-host-registered" +#define PROP_REGISTERED_STATUS_NOTIFIER_ITEMS_S "registered-status-notifier-items" + +#define CURRENT_PROTOCOL_VERSION 0 + static gboolean _notification_watcher_server_register_status_notifier_item (ApplicationServiceWatcher * appwatcher, const gchar * service, DBusGMethodInvocation * method); -static gboolean _notification_watcher_server_registered_status_notifier_items (ApplicationServiceWatcher * appwatcher, GArray ** apps); -static gboolean _notification_watcher_server_protocol_version (ApplicationServiceWatcher * appwatcher, char ** version); static gboolean _notification_watcher_server_register_notification_host (ApplicationServiceWatcher * appwatcher, const gchar * host); static gboolean _notification_watcher_server_x_ayatana_register_notification_approver (ApplicationServiceWatcher * appwatcher, const gchar * path, const GArray * categories, DBusGMethodInvocation * method); -static gboolean _notification_watcher_server_is_notification_host_registered (ApplicationServiceWatcher * appwatcher, gboolean * haveHost); static void get_name_cb (DBusGProxy * proxy, guint status, GError * error, gpointer data); #include "notification-watcher-server.h" @@ -66,6 +79,8 @@ static void application_service_watcher_class_init (ApplicationServiceWatcherCla static void application_service_watcher_init (ApplicationServiceWatcher *self); static void application_service_watcher_dispose (GObject *object); static void application_service_watcher_finalize (GObject *object); +static void application_service_watcher_set_property (GObject * object, guint prop_id, const GValue * value, GParamSpec * pspec); +static void application_service_watcher_get_property (GObject * object, guint prop_id, GValue * value, GParamSpec * pspec); G_DEFINE_TYPE (ApplicationServiceWatcher, application_service_watcher, G_TYPE_OBJECT); @@ -79,6 +94,34 @@ application_service_watcher_class_init (ApplicationServiceWatcherClass *klass) object_class->dispose = application_service_watcher_dispose; object_class->finalize = application_service_watcher_finalize; + /* Property funcs */ + object_class->set_property = application_service_watcher_set_property; + object_class->get_property = application_service_watcher_get_property; + + /* Properties */ + g_object_class_install_property (object_class, + PROP_PROTOCOL_VERSION, + g_param_spec_int(PROP_PROTOCOL_VERSION_S, + "Protocol Version", + "Which version of the StatusNotifierProtocol this watcher implements", + 0, G_MAXINT, + CURRENT_PROTOCOL_VERSION, + G_PARAM_READABLE | G_PARAM_STATIC_STRINGS)); + g_object_class_install_property (object_class, + PROP_IS_STATUS_NOTIFIER_HOST_REGISTERED, + g_param_spec_boolean(PROP_IS_STATUS_NOTIFIER_HOST_REGISTERED_S, + "Is StatusNotifierHost Registered", + "True if there is at least one StatusNotifierHost registered", + FALSE, + G_PARAM_READABLE | G_PARAM_STATIC_STRINGS)); + g_object_class_install_property (object_class, + PROP_REGISTERED_STATUS_NOTIFIER_ITEMS, + g_param_spec_boxed(PROP_REGISTERED_STATUS_NOTIFIER_ITEMS_S, + "Registered StatusNotifierItems", + "The list of StatusNotifierItems registered to this watcher", + G_TYPE_STRV, + G_PARAM_READABLE | G_PARAM_STATIC_STRINGS)); + /* Signals */ signals[SERVICE_REGISTERED] = g_signal_new ("service-registered", G_TYPE_FROM_CLASS(klass), G_SIGNAL_RUN_LAST, @@ -175,6 +218,29 @@ application_service_watcher_finalize (GObject *object) return; } +static void +application_service_watcher_set_property (GObject * object, guint prop_id, const GValue * value, GParamSpec * pspec) +{ + /* There are no writable properties for now */ +} + +static void +application_service_watcher_get_property (GObject * object, guint prop_id, GValue * value, GParamSpec * pspec) +{ + ApplicationServiceWatcherPrivate * priv = APPLICATION_SERVICE_WATCHER_GET_PRIVATE(object); + switch (prop_id) { + case PROP_PROTOCOL_VERSION: + g_value_set_int (value, CURRENT_PROTOCOL_VERSION); + break; + case PROP_IS_STATUS_NOTIFIER_HOST_REGISTERED: + g_value_set_boolean (value, TRUE); + break; + case PROP_REGISTERED_STATUS_NOTIFIER_ITEMS: + g_value_set_boxed (value, application_service_appstore_application_get_list(priv->appstore)); + break; + } +} + ApplicationServiceWatcher * application_service_watcher_new (ApplicationServiceAppstore * appstore) { @@ -204,20 +270,6 @@ _notification_watcher_server_register_status_notifier_item (ApplicationServiceWa return TRUE; } -static gboolean -_notification_watcher_server_registered_status_notifier_items (ApplicationServiceWatcher * appwatcher, GArray ** apps) -{ - - return FALSE; -} - -static gboolean -_notification_watcher_server_protocol_version (ApplicationServiceWatcher * appwatcher, char ** version) -{ - *version = g_strdup("Ayatana Version 1"); - return TRUE; -} - static gboolean _notification_watcher_server_register_notification_host (ApplicationServiceWatcher * appwatcher, const gchar * host) { @@ -225,13 +277,6 @@ _notification_watcher_server_register_notification_host (ApplicationServiceWatch return FALSE; } -static gboolean -_notification_watcher_server_is_notification_host_registered (ApplicationServiceWatcher * appwatcher, gboolean * haveHost) -{ - *haveHost = TRUE; - return TRUE; -} - /* Function to handle the return of the get name. There isn't a whole lot that can be done, but we're atleast going to tell people. */ static void diff --git a/src/notification-watcher.xml b/src/notification-watcher.xml index 5f19dd2..1a99af3 100644 --- a/src/notification-watcher.xml +++ b/src/notification-watcher.xml @@ -3,25 +3,18 @@ - + + + - - - - - - - - - -- cgit v1.2.3 From ea206ef1316942b005fd538dc8a251bd239291cd Mon Sep 17 00:00:00 2001 From: Aurelien Gateau Date: Fri, 8 Oct 2010 18:04:27 +0200 Subject: NotificationHost => StatusNotifierHost, Service => StatusNotifierItem --- src/application-service-watcher.c | 30 +++++++++++------------------- src/application-service-watcher.h | 7 +++---- src/notification-watcher.xml | 10 ++++------ 3 files changed, 18 insertions(+), 29 deletions(-) diff --git a/src/application-service-watcher.c b/src/application-service-watcher.c index 946b2a9..50b0be9 100644 --- a/src/application-service-watcher.c +++ b/src/application-service-watcher.c @@ -47,7 +47,7 @@ enum { #define CURRENT_PROTOCOL_VERSION 0 static gboolean _notification_watcher_server_register_status_notifier_item (ApplicationServiceWatcher * appwatcher, const gchar * service, DBusGMethodInvocation * method); -static gboolean _notification_watcher_server_register_notification_host (ApplicationServiceWatcher * appwatcher, const gchar * host); +static gboolean _notification_watcher_server_register_status_notifier_host (ApplicationServiceWatcher * appwatcher, const gchar * host); static gboolean _notification_watcher_server_x_ayatana_register_notification_approver (ApplicationServiceWatcher * appwatcher, const gchar * path, const GArray * categories, DBusGMethodInvocation * method); static void get_name_cb (DBusGProxy * proxy, guint status, GError * error, gpointer data); @@ -65,10 +65,9 @@ struct _ApplicationServiceWatcherPrivate { /* Signals Stuff */ enum { - SERVICE_REGISTERED, - SERVICE_UNREGISTERED, - NOTIFICATION_HOST_REGISTERED, - NOTIFICATION_HOST_UNREGISTERED, + STATUS_NOTIFIER_ITEM_REGISTERED, + STATUS_NOTIFIER_ITEM_UNREGISTERED, + STATUS_NOTIFIER_HOST_REGISTERED, LAST_SIGNAL }; @@ -122,31 +121,24 @@ application_service_watcher_class_init (ApplicationServiceWatcherClass *klass) G_TYPE_STRV, G_PARAM_READABLE | G_PARAM_STATIC_STRINGS)); /* Signals */ - signals[SERVICE_REGISTERED] = g_signal_new ("service-registered", + signals[STATUS_NOTIFIER_ITEM_REGISTERED] = g_signal_new ("status-notifier-item-registered", G_TYPE_FROM_CLASS(klass), G_SIGNAL_RUN_LAST, - G_STRUCT_OFFSET (ApplicationServiceWatcherClass, service_registered), + G_STRUCT_OFFSET (ApplicationServiceWatcherClass, status_notifier_item_registered), NULL, NULL, g_cclosure_marshal_VOID__STRING, G_TYPE_NONE, 1, G_TYPE_STRING, G_TYPE_NONE); - signals[SERVICE_UNREGISTERED] = g_signal_new ("service-unregistered", + signals[STATUS_NOTIFIER_ITEM_UNREGISTERED] = g_signal_new ("status-notifier-item-unregistered", G_TYPE_FROM_CLASS(klass), G_SIGNAL_RUN_LAST, - G_STRUCT_OFFSET (ApplicationServiceWatcherClass, service_unregistered), + G_STRUCT_OFFSET (ApplicationServiceWatcherClass, status_notifier_item_unregistered), NULL, NULL, g_cclosure_marshal_VOID__STRING, G_TYPE_NONE, 1, G_TYPE_STRING, G_TYPE_NONE); - signals[NOTIFICATION_HOST_REGISTERED] = g_signal_new ("notification-host-registered", + signals[STATUS_NOTIFIER_HOST_REGISTERED] = g_signal_new ("status-notifier-host-registered", G_TYPE_FROM_CLASS(klass), G_SIGNAL_RUN_LAST, - G_STRUCT_OFFSET (ApplicationServiceWatcherClass, notification_host_registered), - NULL, NULL, - g_cclosure_marshal_VOID__VOID, - G_TYPE_NONE, 0, G_TYPE_NONE); - signals[NOTIFICATION_HOST_UNREGISTERED] = g_signal_new ("notification-host-unregistered", - G_TYPE_FROM_CLASS(klass), - G_SIGNAL_RUN_LAST, - G_STRUCT_OFFSET (ApplicationServiceWatcherClass, notification_host_unregistered), + G_STRUCT_OFFSET (ApplicationServiceWatcherClass, status_notifier_host_registered), NULL, NULL, g_cclosure_marshal_VOID__VOID, G_TYPE_NONE, 0, G_TYPE_NONE); @@ -271,7 +263,7 @@ _notification_watcher_server_register_status_notifier_item (ApplicationServiceWa } static gboolean -_notification_watcher_server_register_notification_host (ApplicationServiceWatcher * appwatcher, const gchar * host) +_notification_watcher_server_register_status_notifier_host (ApplicationServiceWatcher * appwatcher, const gchar * host) { return FALSE; diff --git a/src/application-service-watcher.h b/src/application-service-watcher.h index ee6a723..6c430db 100644 --- a/src/application-service-watcher.h +++ b/src/application-service-watcher.h @@ -44,10 +44,9 @@ struct _ApplicationServiceWatcherClass { GObjectClass parent_class; /* Signals */ - void (*service_registered) (ApplicationServiceWatcher * watcher, gchar * object, gpointer data); - void (*service_unregistered) (ApplicationServiceWatcher * watcher, gchar * object, gpointer data); - void (*notification_host_registered) (ApplicationServiceWatcher * watcher, gpointer data); - void (*notification_host_unregistered) (ApplicationServiceWatcher * watcher, gpointer data); + void (*status_notifier_item_registered) (ApplicationServiceWatcher * watcher, gchar * object, gpointer data); + void (*status_notifier_item_unregistered) (ApplicationServiceWatcher * watcher, gchar * object, gpointer data); + void (*status_notifier_host_registered) (ApplicationServiceWatcher * watcher, gpointer data); }; struct _ApplicationServiceWatcher { diff --git a/src/notification-watcher.xml b/src/notification-watcher.xml index 1a99af3..b03c5e3 100644 --- a/src/notification-watcher.xml +++ b/src/notification-watcher.xml @@ -12,7 +12,7 @@ - + @@ -24,15 +24,13 @@ - + - + - - - + -- cgit v1.2.3