diff options
author | Ted Gould <ted@gould.cx> | 2010-12-03 21:37:58 -0600 |
---|---|---|
committer | Ted Gould <ted@gould.cx> | 2010-12-03 21:37:58 -0600 |
commit | 2855f7ddc41cee49729cc94a43a3bead2de22055 (patch) | |
tree | f04bc5fb347c145d8ee5a015967ccfb2e3faaa85 /src/application-service-watcher.c | |
parent | 40c2ed841e817647a7f9bf0798815bbf8279769c (diff) | |
parent | 671666f8ece765624fe6f2c94e6ece24688c5b8c (diff) | |
download | libayatana-appindicator-2855f7ddc41cee49729cc94a43a3bead2de22055.tar.gz libayatana-appindicator-2855f7ddc41cee49729cc94a43a3bead2de22055.tar.bz2 libayatana-appindicator-2855f7ddc41cee49729cc94a43a3bead2de22055.zip |
Merging in removing of the service
Diffstat (limited to 'src/application-service-watcher.c')
-rw-r--r-- | src/application-service-watcher.c | 302 |
1 files changed, 0 insertions, 302 deletions
diff --git a/src/application-service-watcher.c b/src/application-service-watcher.c deleted file mode 100644 index 50b0be9..0000000 --- a/src/application-service-watcher.c +++ /dev/null @@ -1,302 +0,0 @@ -/* -An object implementing the NotificationWatcher interface and passes -the information into the app-store. - -Copyright 2009 Canonical Ltd. - -Authors: - Ted Gould <ted@canonical.com> - -This program is free software: you can redistribute it and/or modify it -under the terms of the GNU General Public License version 3, as published -by the Free Software Foundation. - -This program is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranties of -MERCHANTABILITY, SATISFACTORY QUALITY, or FITNESS FOR A PARTICULAR -PURPOSE. See the GNU General Public License for more details. - -You should have received a copy of the GNU General Public License along -with this program. If not, see <http://www.gnu.org/licenses/>. -*/ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include <dbus/dbus-glib.h> -#include <dbus/dbus-glib-lowlevel.h> -#include <dbus/dbus-glib-bindings.h> -#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_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); - -#include "notification-watcher-server.h" - -/* Private Stuff */ -typedef struct _ApplicationServiceWatcherPrivate ApplicationServiceWatcherPrivate; -struct _ApplicationServiceWatcherPrivate { - ApplicationServiceAppstore * appstore; - DBusGProxy * dbus_proxy; -}; - -#define APPLICATION_SERVICE_WATCHER_GET_PRIVATE(o) \ -(G_TYPE_INSTANCE_GET_PRIVATE ((o), APPLICATION_SERVICE_WATCHER_TYPE, ApplicationServiceWatcherPrivate)) - -/* Signals Stuff */ -enum { - STATUS_NOTIFIER_ITEM_REGISTERED, - STATUS_NOTIFIER_ITEM_UNREGISTERED, - STATUS_NOTIFIER_HOST_REGISTERED, - LAST_SIGNAL -}; - -static guint signals[LAST_SIGNAL] = { 0 }; - -/* GObject stuff */ -static void application_service_watcher_class_init (ApplicationServiceWatcherClass *klass); -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); - -static void -application_service_watcher_class_init (ApplicationServiceWatcherClass *klass) -{ - GObjectClass *object_class = G_OBJECT_CLASS (klass); - - g_type_class_add_private (klass, sizeof (ApplicationServiceWatcherPrivate)); - - 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[STATUS_NOTIFIER_ITEM_REGISTERED] = g_signal_new ("status-notifier-item-registered", - G_TYPE_FROM_CLASS(klass), - G_SIGNAL_RUN_LAST, - 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[STATUS_NOTIFIER_ITEM_UNREGISTERED] = g_signal_new ("status-notifier-item-unregistered", - G_TYPE_FROM_CLASS(klass), - G_SIGNAL_RUN_LAST, - 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[STATUS_NOTIFIER_HOST_REGISTERED] = g_signal_new ("status-notifier-host-registered", - G_TYPE_FROM_CLASS(klass), - G_SIGNAL_RUN_LAST, - G_STRUCT_OFFSET (ApplicationServiceWatcherClass, status_notifier_host_registered), - NULL, NULL, - g_cclosure_marshal_VOID__VOID, - G_TYPE_NONE, 0, G_TYPE_NONE); - - dbus_g_object_type_install_info(APPLICATION_SERVICE_WATCHER_TYPE, - &dbus_glib__notification_watcher_server_object_info); - - return; -} - -static void -application_service_watcher_init (ApplicationServiceWatcher *self) -{ - ApplicationServiceWatcherPrivate * priv = APPLICATION_SERVICE_WATCHER_GET_PRIVATE(self); - - priv->appstore = NULL; - - GError * error = NULL; - DBusGConnection * session_bus = dbus_g_bus_get(DBUS_BUS_SESSION, &error); - if (error != NULL) { - g_error("Unable to get session bus: %s", error->message); - g_error_free(error); - return; - } - - dbus_g_connection_register_g_object(session_bus, - NOTIFICATION_WATCHER_DBUS_OBJ, - G_OBJECT(self)); - - priv->dbus_proxy = dbus_g_proxy_new_for_name_owner(session_bus, - DBUS_SERVICE_DBUS, - DBUS_PATH_DBUS, - DBUS_INTERFACE_DBUS, - &error); - if (error != NULL) { - g_error("Ah, can't get proxy to dbus: %s", error->message); - g_error_free(error); - return; - } - - org_freedesktop_DBus_request_name_async(priv->dbus_proxy, - NOTIFICATION_WATCHER_DBUS_ADDR, - DBUS_NAME_FLAG_DO_NOT_QUEUE, - get_name_cb, - self); - - return; -} - -static void -application_service_watcher_dispose (GObject *object) -{ - ApplicationServiceWatcherPrivate * priv = APPLICATION_SERVICE_WATCHER_GET_PRIVATE(object); - - if (priv->appstore != NULL) { - g_object_unref(G_OBJECT(priv->appstore)); - priv->appstore = NULL; - } - - G_OBJECT_CLASS (application_service_watcher_parent_class)->dispose (object); - return; -} - -static void -application_service_watcher_finalize (GObject *object) -{ - - G_OBJECT_CLASS (application_service_watcher_parent_class)->finalize (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) -{ - GObject * obj = g_object_new(APPLICATION_SERVICE_WATCHER_TYPE, NULL); - ApplicationServiceWatcherPrivate * priv = APPLICATION_SERVICE_WATCHER_GET_PRIVATE(obj); - priv->appstore = appstore; - g_object_ref(G_OBJECT(priv->appstore)); - return APPLICATION_SERVICE_WATCHER(obj); -} - -static gboolean -_notification_watcher_server_register_status_notifier_item (ApplicationServiceWatcher * appwatcher, const gchar * service, DBusGMethodInvocation * method) -{ - ApplicationServiceWatcherPrivate * priv = APPLICATION_SERVICE_WATCHER_GET_PRIVATE(appwatcher); - - if (service[0] == '/') { - application_service_appstore_application_add(priv->appstore, - dbus_g_method_get_sender(method), - service); - } else { - application_service_appstore_application_add(priv->appstore, - service, - NOTIFICATION_ITEM_DEFAULT_OBJ); - } - - dbus_g_method_return(method, G_TYPE_NONE); - return TRUE; -} - -static gboolean -_notification_watcher_server_register_status_notifier_host (ApplicationServiceWatcher * appwatcher, const gchar * host) -{ - - return FALSE; -} - -/* 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 -get_name_cb (DBusGProxy * proxy, guint status, GError * error, gpointer data) -{ - if (error != NULL) { - g_warning("Unable to get watcher name '%s' because: %s", NOTIFICATION_WATCHER_DBUS_ADDR, error->message); - return; - } - - if (status != DBUS_REQUEST_NAME_REPLY_PRIMARY_OWNER && - status != DBUS_REQUEST_NAME_REPLY_ALREADY_OWNER) { - g_warning("Unable to get watcher name '%s'", NOTIFICATION_WATCHER_DBUS_ADDR); - return; - } - - return; -} - -static gboolean -_notification_watcher_server_x_ayatana_register_notification_approver (ApplicationServiceWatcher * appwatcher, const gchar * path, const GArray * categories, DBusGMethodInvocation * method) -{ - ApplicationServiceWatcherPrivate * priv = APPLICATION_SERVICE_WATCHER_GET_PRIVATE(appwatcher); - - application_service_appstore_approver_add(priv->appstore, - dbus_g_method_get_sender(method), - path); - - dbus_g_method_return(method, G_TYPE_NONE); - return TRUE; -} |