diff options
Diffstat (limited to 'src/application-service-appstore.c')
-rw-r--r-- | src/application-service-appstore.c | 63 |
1 files changed, 44 insertions, 19 deletions
diff --git a/src/application-service-appstore.c b/src/application-service-appstore.c index c9e803f..10feef5 100644 --- a/src/application-service-appstore.c +++ b/src/application-service-appstore.c @@ -24,7 +24,7 @@ with this program. If not, see <http://www.gnu.org/licenses/>. #include "config.h" #endif -#include "libindicator/indicator-object.h" +#include <libindicator/indicator-object.h> #include "libappindicator/app-indicator.h" #include "app-indicator-enum-types.h" #include "application-service-appstore.h" @@ -43,7 +43,9 @@ static void props_cb (GObject * object, GAsyncResult * res, gpointer user_data); #define NOTIFICATION_ITEM_PROP_CATEGORY "Category" #define NOTIFICATION_ITEM_PROP_STATUS "Status" #define NOTIFICATION_ITEM_PROP_ICON_NAME "IconName" +#define NOTIFICATION_ITEM_PROP_ICON_DESC "IconAccessibleDesc" #define NOTIFICATION_ITEM_PROP_AICON_NAME "AttentionIconName" +#define NOTIFICATION_ITEM_PROP_AICON_DESC "AttentionAccessibleDesc" #define NOTIFICATION_ITEM_PROP_ICON_THEME_PATH "IconThemePath" #define NOTIFICATION_ITEM_PROP_MENU "Menu" #define NOTIFICATION_ITEM_PROP_LABEL "XAyatanaLabel" @@ -99,7 +101,9 @@ struct _Application { gboolean validated; /* Whether we've gotten all the parameters and they look good. */ AppIndicatorStatus status; gchar * icon; + gchar * icon_desc; gchar * aicon; + gchar * aicon_desc; gchar * menu; gchar * icon_theme_path; gchar * label; @@ -163,7 +167,7 @@ application_service_appstore_class_init (ApplicationServiceAppstoreClass *klass) node_info = g_dbus_node_info_new_for_xml(_application_service, &error); if (error != NULL) { - g_error("Unable to parse Application Service Interface description: %s", error->message); + g_critical("Unable to parse Application Service Interface description: %s", error->message); g_error_free(error); } } @@ -172,7 +176,7 @@ application_service_appstore_class_init (ApplicationServiceAppstoreClass *klass) interface_info = g_dbus_node_info_lookup_interface(node_info, INDICATOR_APPLICATION_DBUS_IFACE); if (interface_info == NULL) { - g_error("Unable to find interface '" INDICATOR_APPLICATION_DBUS_IFACE "'"); + g_critical("Unable to find interface '" INDICATOR_APPLICATION_DBUS_IFACE "'"); } } @@ -215,7 +219,7 @@ bus_get_cb (GObject * object, GAsyncResult * res, gpointer user_data) GDBusConnection * connection = g_bus_get_finish(res, &error); if (error != NULL) { - g_error("OMG! Unable to get a connection to DBus: %s", error->message); + g_critical("OMG! Unable to get a connection to DBus: %s", error->message); g_error_free(error); return; } @@ -240,7 +244,7 @@ bus_get_cb (GObject * object, GAsyncResult * res, gpointer user_data) &error); if (error != NULL) { - g_error("Unable to register the object to DBus: %s", error->message); + g_critical("Unable to register the object to DBus: %s", error->message); g_error_free(error); return; } @@ -430,6 +434,7 @@ got_all_properties (GObject * source_object, GAsyncResult * res, ApplicationServiceAppstorePrivate * priv = app->appstore->priv; GVariant * menu = NULL, * id = NULL, * category = NULL, * status = NULL, * icon_name = NULL, * aicon_name = NULL, + * icon_desc = NULL, * aicon_desc = NULL, * icon_theme_path = NULL, * index = NULL, * label = NULL, * guide = NULL; @@ -441,7 +446,7 @@ got_all_properties (GObject * source_object, GAsyncResult * res, } if (error != NULL) { - g_error("Could not grab DBus properties for %s: %s", app->dbus_name, error->message); + g_critical("Could not grab DBus properties for %s: %s", app->dbus_name, error->message); g_error_free(error); if (!app->validated) application_free(app); @@ -464,8 +469,12 @@ got_all_properties (GObject * source_object, GAsyncResult * res, status = g_variant_ref(value); } else if (g_strcmp0(name, NOTIFICATION_ITEM_PROP_ICON_NAME) == 0) { icon_name = g_variant_ref(value); + } else if (g_strcmp0(name, NOTIFICATION_ITEM_PROP_ICON_DESC) == 0) { + icon_desc = g_variant_ref(value); } else if (g_strcmp0(name, NOTIFICATION_ITEM_PROP_AICON_NAME) == 0) { aicon_name = g_variant_ref(value); + } else if (g_strcmp0(name, NOTIFICATION_ITEM_PROP_AICON_DESC) == 0) { + aicon_desc = g_variant_ref(value); } else if (g_strcmp0(name, NOTIFICATION_ITEM_PROP_ICON_THEME_PATH) == 0) { icon_theme_path = g_variant_ref(value); } else if (g_strcmp0(name, NOTIFICATION_ITEM_PROP_ORDERING_INDEX) == 0) { @@ -543,7 +552,9 @@ got_all_properties (GObject * source_object, GAsyncResult * res, if (category) g_variant_unref (category); if (status) g_variant_unref (status); if (icon_name) g_variant_unref (icon_name); + if (icon_desc) g_variant_unref (icon_desc); if (aicon_name) g_variant_unref (aicon_name); + if (aicon_desc) g_variant_unref (aicon_desc); if (icon_theme_path) g_variant_unref (icon_theme_path); if (index) g_variant_unref (index); if (label) g_variant_unref (label); @@ -707,8 +718,11 @@ application_free (Application * app) if (app->icon != NULL) { g_free(app->icon); } - if (app->aicon != NULL) { - g_free(app->aicon); + if (app->icon_desc != NULL) { + g_free(app->icon_desc); + } + if (app->aicon_desc != NULL) { + g_free(app->aicon_desc); } if (app->menu != NULL) { g_free(app->menu); @@ -773,7 +787,7 @@ emit_signal (ApplicationServiceAppstore * appstore, const gchar * name, &error); if (error != NULL) { - g_error("Unable to send %s signal: %s", name, error->message); + g_critical("Unable to send %s signal: %s", name, error->message); g_error_free(error); return; } @@ -825,26 +839,37 @@ apply_status (Application * app) } else { /* Figure out which icon we should be using */ gchar * newicon = app->icon; + gchar * newdesc = app->icon_desc; if (app->status == APP_INDICATOR_STATUS_ATTENTION && app->aicon != NULL && app->aicon[0] != '\0') { newicon = app->aicon; + newdesc = app->aicon_desc; + } + + if (newdesc == NULL) { + newdesc = ""; } /* Determine whether we're already shown or not */ if (app->visible_state == VISIBLE_STATE_HIDDEN) { /* Put on panel */ emit_signal (appstore, "ApplicationAdded", - g_variant_new ("(sisosss)", newicon, + g_variant_new ("(sisossss)", newicon, get_position(app), app->dbus_name, app->menu, app->icon_theme_path, - app->label, app->guide)); + app->label, app->guide, + newdesc)); } else { /* Icon update */ gint position = get_position(app); if (position == -1) return; emit_signal (appstore, "ApplicationIconChanged", - g_variant_new ("(is)", position, newicon)); + g_variant_new ("(iss)", position, newicon, newdesc)); + emit_signal (appstore, "ApplicationLabelChanged", + g_variant_new ("(iss)", position, + app->label != NULL ? app->label : "", + app->guide != NULL ? app->guide : "")); } } @@ -1021,7 +1046,7 @@ dbus_proxy_cb (GObject * object, GAsyncResult * res, gpointer user_data) } if (error != NULL) { - g_error("Could not grab DBus proxy for %s: %s", app->dbus_name, error->message); + g_critical("Could not grab DBus proxy for %s: %s", app->dbus_name, error->message); g_error_free(error); application_free(app); return; @@ -1077,7 +1102,7 @@ props_cb (GObject * object, GAsyncResult * res, gpointer user_data) } if (error != NULL) { - g_error("Could not grab Properties DBus proxy for %s: %s", app->dbus_name, error->message); + g_critical("Could not grab Properties DBus proxy for %s: %s", app->dbus_name, error->message); g_error_free(error); application_free(app); return; @@ -1212,18 +1237,18 @@ get_applications (ApplicationServiceAppstore * appstore) continue; } - g_variant_builder_add (&builder, "(sisosss)", app->icon, + g_variant_builder_add (&builder, "(sisossss)", app->icon, position++, app->dbus_name, app->menu, app->icon_theme_path, app->label, - app->guide); + app->guide, app->icon_desc); } out = g_variant_builder_end(&builder); } else { GError * error = NULL; - out = g_variant_parse(g_variant_type_new("a(sisosss)"), "[]", NULL, NULL, &error); + out = g_variant_parse(g_variant_type_new("a(sisossss)"), "[]", NULL, NULL, &error); if (error != NULL) { - g_warning("Unable to parse '[]' as a 'a(sisosss)': %s", error->message); + g_warning("Unable to parse '[]' as a 'a(sisossss)': %s", error->message); out = NULL; g_error_free(error); } @@ -1416,7 +1441,7 @@ approver_proxy_cb (GObject * object, GAsyncResult * res, gpointer user_data) } if (error != NULL) { - g_error("Could not grab DBus proxy for approver: %s", error->message); + g_critical("Could not grab DBus proxy for approver: %s", error->message); g_error_free(error); return; } |