aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAurelien Gateau <aurelien.gateau@canonical.com>2010-10-08 17:02:24 +0200
committerAurelien Gateau <aurelien.gateau@canonical.com>2010-10-08 17:02:24 +0200
commit6f032f50c8bec41cd56e36ec09af118a9684af5b (patch)
treec23e61e24c4e7674d624e2d5329b1e5fd612f751
parentfe08c86fc6b9d9d843149bf195b995d7e38a2c40 (diff)
downloadlibayatana-appindicator-6f032f50c8bec41cd56e36ec09af118a9684af5b.tar.gz
libayatana-appindicator-6f032f50c8bec41cd56e36ec09af118a9684af5b.tar.bz2
libayatana-appindicator-6f032f50c8bec41cd56e36ec09af118a9684af5b.zip
Fix implementation of org.kde.StatusNotifierWatcher interface
ProtocolVersion, IsStatusNotifierHostRegistered and RegisteredStatusNotifierItems are properties, not methods.
-rw-r--r--src/application-service-appstore.c18
-rw-r--r--src/application-service-appstore.h1
-rw-r--r--src/application-service-watcher.c93
-rw-r--r--src/notification-watcher.xml13
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 <http://www.gnu.org/licenses/>.
#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)
{
@@ -205,33 +271,12 @@ _notification_watcher_server_register_status_notifier_item (ApplicationServiceWa
}
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)
{
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 @@
<interface name="org.kde.StatusNotifierWatcher">
<!-- Properties -->
- <!-- None currently -->
+ <property name="ProtocolVersion" type="i" access="read" />
+ <property name="IsStatusNotifierHostRegistered" type="b" access="read" />
+ <property name="RegisteredStatusNotifierItems" type="as" access="read" />
<!-- Methods -->
<method name="RegisterStatusNotifierItem">
<annotation name="org.freedesktop.DBus.GLib.Async" value="true" />
<arg type="s" name="service" direction="in" />
</method>
- <method name="RegisteredStatusNotifierItems">
- <arg type="as" name="services" direction="out" />
- </method>
- <method name="ProtocolVersion">
- <arg type="s" name="version" direction="out" />
- </method>
<method name="RegisterNotificationHost">
<arg type="s" name="service" direction="in" />
</method>
- <method name="IsNotificationHostRegistered">
- <arg type="b" name="hasHost" direction="out" />
- </method>
<method name="XAyatanaRegisterNotificationApprover">
<annotation name="org.freedesktop.DBus.GLib.Async" value="true" />
<!-- The path where to find the approver interface -->