From 8eff74d9fb43dfc5e86ca6225cdbfb31f550c100 Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Mon, 30 Nov 2009 10:30:22 -0600 Subject: Making the directory name shorter --- .../application-indicator-enum-types.c.in | 33 + .../application-indicator-enum-types.h.in | 33 + src/libappindicator/application-indicator.c | 847 +++++++++++++++++++++ src/libappindicator/application-indicator.h | 142 ++++ 4 files changed, 1055 insertions(+) create mode 100644 src/libappindicator/application-indicator-enum-types.c.in create mode 100644 src/libappindicator/application-indicator-enum-types.h.in create mode 100644 src/libappindicator/application-indicator.c create mode 100644 src/libappindicator/application-indicator.h (limited to 'src/libappindicator') diff --git a/src/libappindicator/application-indicator-enum-types.c.in b/src/libappindicator/application-indicator-enum-types.c.in new file mode 100644 index 0000000..dedf54c --- /dev/null +++ b/src/libappindicator/application-indicator-enum-types.c.in @@ -0,0 +1,33 @@ +/*** BEGIN file-header ***/ +#include "libappindicator/application-indicator-enum-types.h" + +/*** END file-header ***/ + +/*** BEGIN file-production ***/ +#include "@filename@" +/*** END file-production ***/ + +/*** BEGIN value-header ***/ +GType +@enum_name@_get_type (void) +{ + static GType etype = 0; + if (G_UNLIKELY(etype == 0)) { + static const G@Type@Value values[] = { +/*** END value-header ***/ + +/*** BEGIN value-production ***/ + { @VALUENAME@, "@VALUENAME@", "@valuenick@" }, +/*** END value-production ***/ + +/*** BEGIN value-tail ***/ + { 0, NULL, NULL} + }; + + etype = g_@type@_register_static (g_intern_static_string("@EnumName@"), values); + } + + return etype; +} + +/*** END value-tail ***/ diff --git a/src/libappindicator/application-indicator-enum-types.h.in b/src/libappindicator/application-indicator-enum-types.h.in new file mode 100644 index 0000000..e037be7 --- /dev/null +++ b/src/libappindicator/application-indicator-enum-types.h.in @@ -0,0 +1,33 @@ +/*** BEGIN file-header ***/ +#ifndef __CUSTOM_INDICATOR_ENUM_TYPES_H__ +#define __CUSTOM_INDICATOR_ENUM_TYPES_H__ + +#include + +G_BEGIN_DECLS + +/*** END file-header ***/ + +/*** BEGIN file-tail ***/ + +G_END_DECLS + +#endif /* __CUSTOM_INDICATOR_ENUM_TYPES_H__ */ +/*** END file-tail ***/ + +/*** BEGIN file-production ***/ +/* Enumerations from file: "@filename@" */ +/*** END file-production ***/ + +/*** BEGIN value-header ***/ +/** + @enum_name@_get_type: + + Builds a glib type for the @EnumName@ enumeration. + + Return value: A registered type for the enum +*/ +GType @enum_name@_get_type (void) G_GNUC_CONST; +#define CUSTOM_INDICATOR_TYPE_@ENUMSHORT@ (@enum_name@_get_type()) + +/*** END value-header ***/ diff --git a/src/libappindicator/application-indicator.c b/src/libappindicator/application-indicator.c new file mode 100644 index 0000000..74efd1e --- /dev/null +++ b/src/libappindicator/application-indicator.c @@ -0,0 +1,847 @@ +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include +#include + +#include "libappindicator/application-indicator.h" +#include "libappindicator/application-indicator-enum-types.h" + +#include "notification-item-server.h" +#include "notification-watcher-client.h" + +#include "dbus-shared.h" + +/** + CustomIndicatorPrivate: + @id: The ID of the indicator. Maps to CustomIndicator::id. + @category: Which category the indicator is. Maps to CustomIndicator::category. + @status: The status of the indicator. Maps to CustomIndicator::status. + @icon_name: The name of the icon to use. Maps to CustomIndicator::icon-name. + @attention_icon_name: The name of the attention icon to use. Maps to CustomIndicator::attention-icon-name. + @menu: The menu for this indicator. Maps to CustomIndicator::menu + @watcher_proxy: The proxy connection to the watcher we're connected to. If we're not connected to one this will be #NULL. + + All of the private data in an instance of a + custom indicator. +*/ +typedef struct _CustomIndicatorPrivate CustomIndicatorPrivate; +struct _CustomIndicatorPrivate { + /* Properties */ + gchar * id; + CustomIndicatorCategory category; + CustomIndicatorStatus status; + gchar * icon_name; + gchar * attention_icon_name; + DbusmenuServer * menu; + + /* Fun stuff */ + DBusGProxy * watcher_proxy; + DBusGConnection * connection; +}; + +/* Signals Stuff */ +enum { + NEW_ICON, + NEW_ATTENTION_ICON, + NEW_STATUS, + CONNECTION_CHANGED, + LAST_SIGNAL +}; + +static guint signals[LAST_SIGNAL] = { 0 }; + +/* Enum for the properties so that they can be quickly + found and looked up. */ +enum { + PROP_0, + PROP_ID, + PROP_CATEGORY, + PROP_CATEGORY_ENUM, + PROP_STATUS, + PROP_STATUS_ENUM, + PROP_ICON_NAME, + PROP_ATTENTION_ICON_NAME, + PROP_MENU, + PROP_MENU_OBJECT, + PROP_CONNECTED +}; + +/* The strings so that they can be slowly looked up. */ +#define PROP_ID_S "id" +#define PROP_CATEGORY_S "category" +#define PROP_CATEGORY_ENUM_S "category-enum" +#define PROP_STATUS_S "status" +#define PROP_STATUS_ENUM_S "status-enum" +#define PROP_ICON_NAME_S "icon-name" +#define PROP_ATTENTION_ICON_NAME_S "attention-icon-name" +#define PROP_MENU_S "menu" +#define PROP_MENU_OBJECT_S "menu-object" +#define PROP_CONNECTED_S "connected" + +/* Private macro, shhhh! */ +#define CUSTOM_INDICATOR_GET_PRIVATE(o) \ + (G_TYPE_INSTANCE_GET_PRIVATE ((o), CUSTOM_INDICATOR_TYPE, CustomIndicatorPrivate)) + +/* Boiler plate */ +static void custom_indicator_class_init (CustomIndicatorClass *klass); +static void custom_indicator_init (CustomIndicator *self); +static void custom_indicator_dispose (GObject *object); +static void custom_indicator_finalize (GObject *object); +/* Property functions */ +static void custom_indicator_set_property (GObject * object, guint prop_id, const GValue * value, GParamSpec * pspec); +static void custom_indicator_get_property (GObject * object, guint prop_id, GValue * value, GParamSpec * pspec); +/* Other stuff */ +static void check_connect (CustomIndicator * self); +static void register_service_cb (DBusGProxy * proxy, GError * error, gpointer data); + +/* GObject type */ +G_DEFINE_TYPE (CustomIndicator, custom_indicator, G_TYPE_OBJECT); + +static void +custom_indicator_class_init (CustomIndicatorClass *klass) +{ + GObjectClass *object_class = G_OBJECT_CLASS (klass); + + g_type_class_add_private (klass, sizeof (CustomIndicatorPrivate)); + + /* Clean up */ + object_class->dispose = custom_indicator_dispose; + object_class->finalize = custom_indicator_finalize; + + /* Property funcs */ + object_class->set_property = custom_indicator_set_property; + object_class->get_property = custom_indicator_get_property; + + /* Properties */ + g_object_class_install_property(object_class, PROP_ID, + g_param_spec_string(PROP_ID_S, + "The ID for this indicator", + "An ID that should be unique, but used consistently by this program and it's indicator.", + NULL, + G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); + + g_object_class_install_property(object_class, PROP_CATEGORY, + g_param_spec_string(PROP_CATEGORY_S, + "Indicator Category as a string", + "The type of indicator that this represents as a string. For DBus.", + NULL, + G_PARAM_READABLE | G_PARAM_STATIC_STRINGS)); + + g_object_class_install_property(object_class, PROP_CATEGORY_ENUM, + g_param_spec_enum(PROP_CATEGORY_ENUM_S, + "Indicator Category", + "The type of indicator that this represents. Please don't use 'other'. Defaults to 'Application Status'.", + CUSTOM_INDICATOR_TYPE_INDICATOR_CATEGORY, + CUSTOM_INDICATOR_CATEGORY_APPLICATION_STATUS, + G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); + + g_object_class_install_property(object_class, PROP_STATUS, + g_param_spec_string(PROP_STATUS_S, + "Indicator Status as a string", + "The status of the indicator represented as a string. For DBus.", + NULL, + G_PARAM_READABLE | G_PARAM_STATIC_STRINGS)); + + g_object_class_install_property(object_class, PROP_STATUS_ENUM, + g_param_spec_enum(PROP_STATUS_ENUM_S, + "Indicator Status", + "Whether the indicator is shown or requests attention. Defaults to 'off'.", + CUSTOM_INDICATOR_TYPE_INDICATOR_STATUS, + CUSTOM_INDICATOR_STATUS_PASSIVE, + G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); + + g_object_class_install_property(object_class, PROP_ICON_NAME, + g_param_spec_string(PROP_ICON_NAME_S, + "An icon for the indicator", + "The default icon that is shown for the indicator.", + NULL, + G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); + + g_object_class_install_property(object_class, PROP_ATTENTION_ICON_NAME, + g_param_spec_string(PROP_ATTENTION_ICON_NAME_S, + "An icon to show when the indicator request attention.", + "If the indicator sets it's status to 'attention' then this icon is shown.", + NULL, + G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); + + g_object_class_install_property(object_class, PROP_MENU, + g_param_spec_string(PROP_MENU_S, + "The object path of the menu on DBus.", + "A method for getting the menu path as a string for DBus.", + NULL, + G_PARAM_READABLE | G_PARAM_STATIC_STRINGS)); + + g_object_class_install_property(object_class, PROP_MENU_OBJECT, + g_param_spec_object(PROP_MENU_OBJECT_S, + "The Menu for the indicator", + "A DBus Menu Server object that can have a menu attached to it. The object from this menu will be sent across the bus for the client to connect to and signal.", + DBUSMENU_TYPE_SERVER, + G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); + + g_object_class_install_property(object_class, PROP_CONNECTED, + g_param_spec_boolean(PROP_CONNECTED_S, + "Whether we're conneced to a watcher", + "Pretty simple, true if we have a reasonable expectation of being displayed through this object. You should hide your TrayIcon if so.", + FALSE, + G_PARAM_READABLE | G_PARAM_STATIC_STRINGS)); + + + /* Signals */ + + /** + CustomIndicator::new-icon: + @arg0: The #CustomIndicator object + + Signaled when there is a new icon set for the + object. + */ + signals[NEW_ICON] = g_signal_new (CUSTOM_INDICATOR_SIGNAL_NEW_ICON, + G_TYPE_FROM_CLASS(klass), + G_SIGNAL_RUN_LAST, + G_STRUCT_OFFSET (CustomIndicatorClass, new_icon), + NULL, NULL, + g_cclosure_marshal_VOID__VOID, + G_TYPE_NONE, 0, G_TYPE_NONE); + + /** + CustomIndicator::new-attention-icon: + @arg0: The #CustomIndicator object + + Signaled when there is a new attention icon set for the + object. + */ + signals[NEW_ATTENTION_ICON] = g_signal_new (CUSTOM_INDICATOR_SIGNAL_NEW_ATTENTION_ICON, + G_TYPE_FROM_CLASS(klass), + G_SIGNAL_RUN_LAST, + G_STRUCT_OFFSET (CustomIndicatorClass, new_attention_icon), + NULL, NULL, + g_cclosure_marshal_VOID__VOID, + G_TYPE_NONE, 0, G_TYPE_NONE); + + /** + CustomIndicator::new-status: + @arg0: The #CustomIndicator object + @arg1: The string value of the #CustomIndicatorStatus enum. + + Signaled when the status of the indicator changes. + */ + signals[NEW_STATUS] = g_signal_new (CUSTOM_INDICATOR_SIGNAL_NEW_STATUS, + G_TYPE_FROM_CLASS(klass), + G_SIGNAL_RUN_LAST, + G_STRUCT_OFFSET (CustomIndicatorClass, new_status), + NULL, NULL, + g_cclosure_marshal_VOID__STRING, + G_TYPE_NONE, 1, G_TYPE_STRING, G_TYPE_NONE); + + /** + CustomIndicator::connection-changed: + @arg0: The #CustomIndicator object + @arg1: Whether we're connected or not + + Signaled when we connect to a watcher, or when it drops + away. + */ + signals[CONNECTION_CHANGED] = g_signal_new (CUSTOM_INDICATOR_SIGNAL_CONNECTION_CHANGED, + G_TYPE_FROM_CLASS(klass), + G_SIGNAL_RUN_LAST, + G_STRUCT_OFFSET (CustomIndicatorClass, connection_changed), + NULL, NULL, + g_cclosure_marshal_VOID__BOOLEAN, + G_TYPE_NONE, 1, G_TYPE_BOOLEAN, G_TYPE_NONE); + + /* Initialize the object as a DBus type */ + dbus_g_object_type_install_info(CUSTOM_INDICATOR_TYPE, + &dbus_glib__notification_item_server_object_info); + + return; +} + +static void +custom_indicator_init (CustomIndicator *self) +{ + CustomIndicatorPrivate * priv = CUSTOM_INDICATOR_GET_PRIVATE(self); + + priv->id = NULL; + priv->category = CUSTOM_INDICATOR_CATEGORY_OTHER; + priv->status = CUSTOM_INDICATOR_STATUS_PASSIVE; + priv->icon_name = NULL; + priv->attention_icon_name = NULL; + priv->menu = NULL; + + priv->watcher_proxy = NULL; + priv->connection = NULL; + + /* Put the object on DBus */ + GError * error = NULL; + priv->connection = dbus_g_bus_get(DBUS_BUS_SESSION, &error); + if (error != NULL) { + g_error("Unable to connect to the session bus when creating custom indicator: %s", error->message); + g_error_free(error); + return; + } + + dbus_g_connection_register_g_object(priv->connection, + "/need/a/path", + G_OBJECT(self)); + + return; +} + +/* Free all objects, make sure that all the dbus + signals are sent out before we shut this down. */ +static void +custom_indicator_dispose (GObject *object) +{ + CustomIndicator * self = CUSTOM_INDICATOR(object); + g_return_if_fail(self != NULL); + + CustomIndicatorPrivate * priv = CUSTOM_INDICATOR_GET_PRIVATE(self); + + if (priv->status != CUSTOM_INDICATOR_STATUS_PASSIVE) { + custom_indicator_set_status(self, CUSTOM_INDICATOR_STATUS_PASSIVE); + } + + if (priv->menu != NULL) { + g_object_unref(G_OBJECT(priv->menu)); + priv->menu = NULL; + } + + if (priv->watcher_proxy != NULL) { + dbus_g_connection_flush(priv->connection); + g_object_unref(G_OBJECT(priv->watcher_proxy)); + priv->watcher_proxy = NULL; + } + + G_OBJECT_CLASS (custom_indicator_parent_class)->dispose (object); + return; +} + +/* Free all of the memory that we could be using in + the object. */ +static void +custom_indicator_finalize (GObject *object) +{ + CustomIndicator * self = CUSTOM_INDICATOR(object); + g_return_if_fail(self != NULL); + + CustomIndicatorPrivate * priv = CUSTOM_INDICATOR_GET_PRIVATE(self); + + if (priv->status != CUSTOM_INDICATOR_STATUS_PASSIVE) { + g_warning("Finalizing Custom Status with the status set to: %d", priv->status); + } + + if (priv->id != NULL) { + g_free(priv->id); + priv->id = NULL; + } + + if (priv->icon_name != NULL) { + g_free(priv->icon_name); + priv->icon_name = NULL; + } + + if (priv->attention_icon_name != NULL) { + g_free(priv->attention_icon_name); + priv->attention_icon_name = NULL; + } + + G_OBJECT_CLASS (custom_indicator_parent_class)->finalize (object); + return; +} + +#define WARN_BAD_TYPE(prop, value) g_warning("Can not work with property '%s' with value of type '%s'.", prop, G_VALUE_TYPE_NAME(value)) + +/* Set some properties */ +static void +custom_indicator_set_property (GObject * object, guint prop_id, const GValue * value, GParamSpec * pspec) +{ + CustomIndicator * self = CUSTOM_INDICATOR(object); + g_return_if_fail(self != NULL); + + CustomIndicatorPrivate * priv = CUSTOM_INDICATOR_GET_PRIVATE(self); + + switch (prop_id) { + /* *********************** */ + case PROP_ID: + if (G_VALUE_HOLDS_STRING(value)) { + if (priv->id != NULL) { + g_warning("Resetting ID value when I already had a value of: %s", priv->id); + g_free(priv->id); + priv->id = NULL; + } + priv->id = g_strdup(g_value_get_string(value)); + } else { + WARN_BAD_TYPE(PROP_ID_S, value); + } + check_connect(self); + break; + /* *********************** */ + case PROP_CATEGORY_ENUM: + if (G_VALUE_HOLDS_ENUM(value)) { + priv->category = g_value_get_enum(value); + } else { + WARN_BAD_TYPE(PROP_CATEGORY_ENUM_S, value); + } + break; + /* *********************** */ + case PROP_STATUS_ENUM: { + gboolean changed = FALSE; + if (G_VALUE_HOLDS_ENUM(value)) { + if (priv->status != g_value_get_enum(value)) { + changed = TRUE; + } + priv->status = g_value_get_enum(value); + } else { + WARN_BAD_TYPE(PROP_STATUS_ENUM_S, value); + } + if (changed) { + GParamSpecEnum * enumspec = G_PARAM_SPEC_ENUM(pspec); + if (enumspec != NULL) { + GEnumValue * enumval = g_enum_get_value(enumspec->enum_class, priv->status); + g_signal_emit(object, signals[NEW_STATUS], 0, enumval->value_nick, TRUE); + } + } + break; + } + /* *********************** */ + case PROP_ICON_NAME: + if (G_VALUE_HOLDS_STRING(value)) { + const gchar * instr = g_value_get_string(value); + gboolean changed = FALSE; + if (priv->icon_name == NULL) { + priv->icon_name = g_strdup(instr); + changed = TRUE; + } else if (!g_strcmp0(instr, priv->icon_name)) { + changed = FALSE; + } else { + g_free(priv->icon_name); + priv->icon_name = g_strdup(instr); + changed = TRUE; + } + if (changed) { + g_signal_emit(object, signals[NEW_ICON], 0, TRUE); + } + } else { + WARN_BAD_TYPE(PROP_ICON_NAME_S, value); + } + check_connect(self); + break; + /* *********************** */ + case PROP_ATTENTION_ICON_NAME: + if (G_VALUE_HOLDS_STRING(value)) { + const gchar * instr = g_value_get_string(value); + gboolean changed = FALSE; + if (priv->attention_icon_name == NULL) { + priv->attention_icon_name = g_strdup(instr); + changed = TRUE; + } else if (!g_strcmp0(instr, priv->attention_icon_name)) { + changed = FALSE; + } else { + g_free(priv->attention_icon_name); + priv->attention_icon_name = g_strdup(instr); + changed = TRUE; + } + if (changed) { + g_signal_emit(object, signals[NEW_ATTENTION_ICON], 0, TRUE); + } + } else { + WARN_BAD_TYPE(PROP_ATTENTION_ICON_NAME_S, value); + } + break; + /* *********************** */ + case PROP_MENU_OBJECT: + if (G_VALUE_HOLDS_OBJECT(value)) { + if (priv->menu != NULL) { + g_object_unref(G_OBJECT(priv->menu)); + } + priv->menu = DBUSMENU_SERVER(g_value_get_object(value)); + g_object_ref(G_OBJECT(priv->menu)); + } else { + WARN_BAD_TYPE(PROP_MENU_S, value); + } + check_connect(self); + break; + /* *********************** */ + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); + break; + } + + return; +} + +/* Function to fill our value with the property it's requesting. */ +static void +custom_indicator_get_property (GObject * object, guint prop_id, GValue * value, GParamSpec * pspec) +{ + CustomIndicator * self = CUSTOM_INDICATOR(object); + g_return_if_fail(self != NULL); + + CustomIndicatorPrivate * priv = CUSTOM_INDICATOR_GET_PRIVATE(self); + + switch (prop_id) { + /* *********************** */ + case PROP_ID: + if (G_VALUE_HOLDS_STRING(value)) { + g_value_set_string(value, priv->id); + } else { + WARN_BAD_TYPE(PROP_ID_S, value); + } + break; + /* *********************** */ + case PROP_CATEGORY: + if (G_VALUE_HOLDS_STRING(value)) { + GParamSpec * spec_for_enum = g_object_class_find_property(G_OBJECT_GET_CLASS(object), PROP_CATEGORY_ENUM_S); + GParamSpecEnum * enumspec = G_PARAM_SPEC_ENUM(spec_for_enum); + if (enumspec != NULL) { + GEnumValue * enumval = g_enum_get_value(enumspec->enum_class, priv->category); + g_value_set_string(value, enumval->value_nick); + } else { + g_assert_not_reached(); + } + } else { + WARN_BAD_TYPE(PROP_CATEGORY_S, value); + } + break; + /* *********************** */ + case PROP_CATEGORY_ENUM: + if (G_VALUE_HOLDS_ENUM(value)) { + /* We want the enum value */ + g_value_set_enum(value, priv->category); + } else { + WARN_BAD_TYPE(PROP_CATEGORY_ENUM_S, value); + } + break; + /* *********************** */ + case PROP_STATUS: + if (G_VALUE_HOLDS_STRING(value)) { + GParamSpec * spec_for_enum = g_object_class_find_property(G_OBJECT_GET_CLASS(object), PROP_STATUS_ENUM_S); + GParamSpecEnum * enumspec = G_PARAM_SPEC_ENUM(spec_for_enum); + if (enumspec != NULL) { + GEnumValue * enumval = g_enum_get_value(enumspec->enum_class, priv->status); + g_value_set_string(value, enumval->value_nick); + } else { + g_assert_not_reached(); + } + } else { + WARN_BAD_TYPE(PROP_STATUS_S, value); + } + break; + /* *********************** */ + case PROP_STATUS_ENUM: + if (G_VALUE_HOLDS_ENUM(value)) { + /* We want the enum value */ + g_value_set_enum(value, priv->status); + } else { + WARN_BAD_TYPE(PROP_STATUS_ENUM_S, value); + } + break; + /* *********************** */ + case PROP_ICON_NAME: + if (G_VALUE_HOLDS_STRING(value)) { + g_value_set_string(value, priv->icon_name); + } else { + WARN_BAD_TYPE(PROP_ICON_NAME_S, value); + } + break; + /* *********************** */ + case PROP_ATTENTION_ICON_NAME: + if (G_VALUE_HOLDS_STRING(value)) { + g_value_set_string(value, priv->attention_icon_name); + } else { + WARN_BAD_TYPE(PROP_ATTENTION_ICON_NAME_S, value); + } + break; + /* *********************** */ + case PROP_MENU: + if (G_VALUE_HOLDS_STRING(value)) { + if (priv->menu != NULL) { + g_object_get_property(G_OBJECT(priv->menu), DBUSMENU_SERVER_PROP_DBUS_OBJECT, value); + } + } else { + WARN_BAD_TYPE(PROP_MENU_S, value); + } + break; + /* *********************** */ + case PROP_MENU_OBJECT: + if (G_VALUE_HOLDS_OBJECT(value)) { + g_value_set_object(value, priv->menu); + } else { + WARN_BAD_TYPE(PROP_MENU_OBJECT_S, value); + } + break; + /* *********************** */ + case PROP_CONNECTED: + if (G_VALUE_HOLDS_BOOLEAN(value)) { + g_value_set_boolean(value, priv->watcher_proxy != NULL ? TRUE : FALSE); + } else { + WARN_BAD_TYPE(PROP_CONNECTED_S, value); + } + break; + /* *********************** */ + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); + break; + } + + return; +} + +/* This function is used to see if we have enough information to + connect to things. If we do, and we're not connected, it + connects for us. */ +static void +check_connect (CustomIndicator * self) +{ + CustomIndicatorPrivate * priv = CUSTOM_INDICATOR_GET_PRIVATE(self); + + /* We're alreadying connecting or trying to connect. */ + if (priv->watcher_proxy != NULL) return; + + /* Do we have enough information? */ + if (priv->menu == NULL) return; + if (priv->icon_name == NULL) return; + if (priv->id == NULL) return; + + GError * error = NULL; + priv->watcher_proxy = dbus_g_proxy_new_for_name_owner(priv->connection, + INDICATOR_CUSTOM_DBUS_ADDR, + NOTIFICATION_WATCHER_DBUS_OBJ, + NOTIFICATION_WATCHER_DBUS_IFACE, + &error); + if (error != NULL) { + g_warning("Unable to create Ayatana Watcher proxy! %s", error->message); + /* TODO: This is where we should start looking at fallbacks */ + g_error_free(error); + return; + } + + org_ayatana_indicator_application_NotificationWatcher_register_service_async(priv->watcher_proxy, "/need/a/path", register_service_cb, self); + + return; +} + +static void +register_service_cb (DBusGProxy * proxy, GError * error, gpointer data) +{ + CustomIndicatorPrivate * priv = CUSTOM_INDICATOR_GET_PRIVATE(data); + + if (error != NULL) { + g_warning("Unable to connect to the Notification Watcher: %s", error->message); + g_object_unref(G_OBJECT(priv->watcher_proxy)); + priv->watcher_proxy = NULL; + } + return; +} + + +/* ************************* */ +/* Public Functions */ +/* ************************* */ + +/** + custom_indicator_set_id: + @ci: The #CustomIndicator object to use + @id: ID to set for this indicator + + Wrapper function for property #CustomIndicator::id. +*/ +void +custom_indicator_set_id (CustomIndicator * ci, const gchar * id) +{ + GValue value = {0}; + g_value_init(&value, G_TYPE_STRING); + g_value_set_string(&value, id); + g_object_set_property(G_OBJECT(ci), PROP_ID_S, &value); + return; +} + +/** + custom_indicator_set_category: + @ci: The #CustomIndicator object to use + @category: The category to set for this indicator + + Wrapper function for property #CustomIndicator::category. +*/ +void +custom_indicator_set_category (CustomIndicator * ci, CustomIndicatorCategory category) +{ + GValue value = {0}; + g_value_init(&value, CUSTOM_INDICATOR_TYPE_INDICATOR_CATEGORY); + g_value_set_enum(&value, category); + g_object_set_property(G_OBJECT(ci), PROP_CATEGORY_ENUM_S, &value); + return; +} + +/** + custom_indicator_set_status: + @ci: The #CustomIndicator object to use + @status: The status to set for this indicator + + Wrapper function for property #CustomIndicator::status. +*/ +void +custom_indicator_set_status (CustomIndicator * ci, CustomIndicatorStatus status) +{ + GValue value = {0}; + g_value_init(&value, CUSTOM_INDICATOR_TYPE_INDICATOR_STATUS); + g_value_set_enum(&value, status); + g_object_set_property(G_OBJECT(ci), PROP_STATUS_ENUM_S, &value); + return; +} + +/** + custom_indicator_set_icon: + @ci: The #CustomIndicator object to use + @icon_name: The name of the icon to set for this indicator + + Wrapper function for property #CustomIndicator::icon. +*/ +void custom_indicator_set_icon (CustomIndicator * ci, const gchar * icon_name) +{ + GValue value = {0}; + g_value_init(&value, G_TYPE_STRING); + g_value_set_string(&value, icon_name); + g_object_set_property(G_OBJECT(ci), PROP_ICON_NAME_S, &value); + return; +} + +/** + custom_indicator_set_attention_icon: + @ci: The #CustomIndicator object to use + @icon_name: The name of the attention icon to set for this indicator + + Wrapper function for property #CustomIndicator::attention-icon. +*/ +void +custom_indicator_set_attention_icon (CustomIndicator * ci, const gchar * icon_name) +{ + GValue value = {0}; + g_value_init(&value, G_TYPE_STRING); + g_value_set_string(&value, icon_name); + g_object_set_property(G_OBJECT(ci), PROP_ATTENTION_ICON_NAME_S, &value); + return; +} + +/** + custom_indicator_set_menu: + @ci: The #CustomIndicator object to use + @menu: The object with the menu for the indicator + + Wrapper function for property #CustomIndicator::menu. +*/ +void +custom_indicator_set_menu (CustomIndicator * ci, DbusmenuServer * menu) +{ + GValue value = {0}; + g_value_init(&value, G_TYPE_OBJECT); + g_value_set_object(&value, G_OBJECT(menu)); + g_object_set_property(G_OBJECT(ci), PROP_MENU_OBJECT_S, &value); + return; +} + +/** + custom_indicator_get_id: + @ci: The #CustomIndicator object to use + + Wrapper function for property #CustomIndicator::id. + + Return value: The current ID +*/ +const gchar * +custom_indicator_get_id (CustomIndicator * ci) +{ + GValue value = {0}; + g_value_init(&value, G_TYPE_STRING); + g_object_get_property(G_OBJECT(ci), PROP_ID_S, &value); + return g_value_get_string(&value); +} + +/** + custom_indicator_get_category: + @ci: The #CustomIndicator object to use + + Wrapper function for property #CustomIndicator::category. + + Return value: The current category. +*/ +CustomIndicatorCategory +custom_indicator_get_category (CustomIndicator * ci) +{ + GValue value = {0}; + g_value_init(&value, CUSTOM_INDICATOR_TYPE_INDICATOR_CATEGORY); + g_object_get_property(G_OBJECT(ci), PROP_CATEGORY_ENUM_S, &value); + return g_value_get_enum(&value); +} + +/** + custom_indicator_get_status: + @ci: The #CustomIndicator object to use + + Wrapper function for property #CustomIndicator::status. + + Return value: The current status. +*/ +CustomIndicatorStatus +custom_indicator_get_status (CustomIndicator * ci) +{ + GValue value = {0}; + g_value_init(&value, CUSTOM_INDICATOR_TYPE_INDICATOR_STATUS); + g_object_get_property(G_OBJECT(ci), PROP_STATUS_ENUM_S, &value); + return g_value_get_enum(&value); +} + +/** + custom_indicator_get_icon: + @ci: The #CustomIndicator object to use + + Wrapper function for property #CustomIndicator::icon-name. + + Return value: The current icon name. +*/ +const gchar * +custom_indicator_get_icon (CustomIndicator * ci) +{ + GValue value = {0}; + g_value_init(&value, G_TYPE_STRING); + g_object_get_property(G_OBJECT(ci), PROP_ICON_NAME_S, &value); + return g_value_get_string(&value); +} + +/** + custom_indicator_get_attention_icon: + @ci: The #CustomIndicator object to use + + Wrapper function for property #CustomIndicator::attention-icon-name. + + Return value: The current attention icon name. +*/ +const gchar * +custom_indicator_get_attention_icon (CustomIndicator * ci) +{ + GValue value = {0}; + g_value_init(&value, G_TYPE_STRING); + g_object_get_property(G_OBJECT(ci), PROP_ATTENTION_ICON_NAME_S, &value); + return g_value_get_string(&value); +} + +/** + custom_indicator_get_menu: + @ci: The #CustomIndicator object to use + + Wrapper function for property #CustomIndicator::menu. + + Return value: The current menu being used. +*/ +DbusmenuServer * +custom_indicator_get_menu (CustomIndicator * ci) +{ + GValue value = {0}; + g_value_init(&value, G_TYPE_OBJECT); + g_object_get_property(G_OBJECT(ci), PROP_MENU_OBJECT_S, &value); + return DBUSMENU_SERVER(g_value_get_object(&value)); +} + + diff --git a/src/libappindicator/application-indicator.h b/src/libappindicator/application-indicator.h new file mode 100644 index 0000000..2e9045c --- /dev/null +++ b/src/libappindicator/application-indicator.h @@ -0,0 +1,142 @@ +#ifndef __CUSTOM_INDICATOR_H__ +#define __CUSTOM_INDICATOR_H__ + +#include +#include +#include + +G_BEGIN_DECLS + +#define CUSTOM_INDICATOR_TYPE (custom_indicator_get_type ()) +#define CUSTOM_INDICATOR(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), CUSTOM_INDICATOR_TYPE, CustomIndicator)) +#define CUSTOM_INDICATOR_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), CUSTOM_INDICATOR_TYPE, CustomIndicatorClass)) +#define IS_CUSTOM_INDICATOR(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), CUSTOM_INDICATOR_TYPE)) +#define IS_CUSTOM_INDICATOR_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), CUSTOM_INDICATOR_TYPE)) +#define CUSTOM_INDICATOR_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), CUSTOM_INDICATOR_TYPE, CustomIndicatorClass)) + +#define CUSTOM_INDICATOR_SIGNAL_NEW_ICON "new-icon" +#define CUSTOM_INDICATOR_SIGNAL_NEW_ATTENTION_ICON "new-attention-icon" +#define CUSTOM_INDICATOR_SIGNAL_NEW_STATUS "new-status" +#define CUSTOM_INDICATOR_SIGNAL_CONNECTION_CHANGED "connection-changed" + +/** + CustomIndicatorCategory: + @CUSTOM_INDICATOR_CATEGORY_APPLICATION_STATUS: The indicator is used to display the status of the application. + @CUSTOM_INDICATOR_CATEGORY_COMMUNICATIONS: The application is used for communication with other people. + @CUSTOM_INDICATOR_CATEGORY_SYSTEM_SERVICES: A system indicator relating to something in the user's system. + @CUSTOM_INDICATOR_CATEGORY_HARDWARE: An indicator relating to the user's hardware. + @CUSTOM_INDICATOR_CATEGORY_OTHER: Something not defined in this enum, please don't use unless you really need it. + + The category provides grouping for the indicators so that + users can find indicators that are similar together. +*/ +typedef enum { /*< prefix=CUSTOM_INDICATOR_CATEGORY >*/ + CUSTOM_INDICATOR_CATEGORY_APPLICATION_STATUS, + CUSTOM_INDICATOR_CATEGORY_COMMUNICATIONS, + CUSTOM_INDICATOR_CATEGORY_SYSTEM_SERVICES, + CUSTOM_INDICATOR_CATEGORY_HARDWARE, + CUSTOM_INDICATOR_CATEGORY_OTHER +} CustomIndicatorCategory; + +/** + CustomIndicatorStatus: + @CUSTOM_INDICATOR_STATUS_PASSIVE: The indicator should not be shown to the user. + @CUSTOM_INDICATOR_STATUS_ACTIVE: The indicator should be shown in it's default state. + @CUSTOM_INDICATOR_STATUS_ATTENTION: The indicator should show it's attention icon. + + These are the states that the indicator can be on in + the user's panel. The indicator by default starts + in the state @CUSTOM_INDICATOR_STATUS_OFF and can be + shown by setting it to @CUSTOM_INDICATOR_STATUS_ON. +*/ +typedef enum { /*< prefix=CUSTOM_INDICATOR_STATUS >*/ + CUSTOM_INDICATOR_STATUS_PASSIVE, + CUSTOM_INDICATOR_STATUS_ACTIVE, + CUSTOM_INDICATOR_STATUS_ATTENTION +} CustomIndicatorStatus; + +typedef struct _CustomIndicator CustomIndicator; +typedef struct _CustomIndicatorClass CustomIndicatorClass; + +/** + CustomIndicatorClass: + @parent_class: Mia familia + @new_icon: Slot for #CustomIndicator::new-icon. + @new_attention_icon: Slot for #CustomIndicator::new-attention-icon. + @new_status: Slot for #CustomIndicator::new-status. + @connection_changed: Slot for #CustomIndicator::connection-changed. + @custom_indicator_reserved_1: Reserved for future use. + @custom_indicator_reserved_2: Reserved for future use. + @custom_indicator_reserved_3: Reserved for future use. + @custom_indicator_reserved_4: Reserved for future use. + + The signals and external functions that make up the #CustomIndicator + class object. +*/ +struct _CustomIndicatorClass { + /* Parent */ + GObjectClass parent_class; + + /* DBus Signals */ + void (* new_icon) (CustomIndicator * indicator, + gpointer user_data); + void (* new_attention_icon) (CustomIndicator * indicator, + gpointer user_data); + void (* new_status) (CustomIndicator * indicator, + gchar * status_string, + gpointer user_data); + + /* Local Signals */ + void (* connection_changed) (CustomIndicator * indicator, + gboolean connected, + gpointer user_data); + + /* Reserved */ + void (*custom_indicator_reserved_1)(void); + void (*custom_indicator_reserved_2)(void); + void (*custom_indicator_reserved_3)(void); + void (*custom_indicator_reserved_4)(void); +}; + +/** + CustomIndicator: + @parent: Parent object. + + A custom indicator represents the values that are needed to show a + unique status in the panel for an application. In general, applications + should try to fit in the other indicators that are available on the + panel before using this. But, sometimes it is necissary. +*/ +struct _CustomIndicator { + GObject parent; + /* None. We're a very private object. */ +}; + +/* GObject Stuff */ +GType custom_indicator_get_type (void); + +/* Set properties */ +void custom_indicator_set_id (CustomIndicator * ci, + const gchar * id); +void custom_indicator_set_category (CustomIndicator * ci, + CustomIndicatorCategory category); +void custom_indicator_set_status (CustomIndicator * ci, + CustomIndicatorStatus status); +void custom_indicator_set_icon (CustomIndicator * ci, + const gchar * icon_name); +void custom_indicator_set_attention_icon (CustomIndicator * ci, + const gchar * icon_name); +void custom_indicator_set_menu (CustomIndicator * ci, + DbusmenuServer * menu); + +/* Get properties */ +const gchar * custom_indicator_get_id (CustomIndicator * ci); +CustomIndicatorCategory custom_indicator_get_category (CustomIndicator * ci); +CustomIndicatorStatus custom_indicator_get_status (CustomIndicator * ci); +const gchar * custom_indicator_get_icon (CustomIndicator * ci); +const gchar * custom_indicator_get_attention_icon (CustomIndicator * ci); +DbusmenuServer * custom_indicator_get_menu (CustomIndicator * ci); + +G_END_DECLS + +#endif -- cgit v1.2.3 From 997bdb5be1665441cfa2e13d4cb0c9733e7776f6 Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Mon, 30 Nov 2009 10:58:09 -0600 Subject: Shortening the file names as well. --- src/libappindicator/app-indicator-enum-types.c.in | 33 + src/libappindicator/app-indicator-enum-types.h.in | 33 + src/libappindicator/app-indicator.c | 847 +++++++++++++++++++++ src/libappindicator/app-indicator.h | 142 ++++ .../application-indicator-enum-types.c.in | 33 - .../application-indicator-enum-types.h.in | 33 - src/libappindicator/application-indicator.c | 847 --------------------- src/libappindicator/application-indicator.h | 142 ---- 8 files changed, 1055 insertions(+), 1055 deletions(-) create mode 100644 src/libappindicator/app-indicator-enum-types.c.in create mode 100644 src/libappindicator/app-indicator-enum-types.h.in create mode 100644 src/libappindicator/app-indicator.c create mode 100644 src/libappindicator/app-indicator.h delete mode 100644 src/libappindicator/application-indicator-enum-types.c.in delete mode 100644 src/libappindicator/application-indicator-enum-types.h.in delete mode 100644 src/libappindicator/application-indicator.c delete mode 100644 src/libappindicator/application-indicator.h (limited to 'src/libappindicator') diff --git a/src/libappindicator/app-indicator-enum-types.c.in b/src/libappindicator/app-indicator-enum-types.c.in new file mode 100644 index 0000000..19abc88 --- /dev/null +++ b/src/libappindicator/app-indicator-enum-types.c.in @@ -0,0 +1,33 @@ +/*** BEGIN file-header ***/ +#include "libappindicator/app-indicator-enum-types.h" + +/*** END file-header ***/ + +/*** BEGIN file-production ***/ +#include "@filename@" +/*** END file-production ***/ + +/*** BEGIN value-header ***/ +GType +@enum_name@_get_type (void) +{ + static GType etype = 0; + if (G_UNLIKELY(etype == 0)) { + static const G@Type@Value values[] = { +/*** END value-header ***/ + +/*** BEGIN value-production ***/ + { @VALUENAME@, "@VALUENAME@", "@valuenick@" }, +/*** END value-production ***/ + +/*** BEGIN value-tail ***/ + { 0, NULL, NULL} + }; + + etype = g_@type@_register_static (g_intern_static_string("@EnumName@"), values); + } + + return etype; +} + +/*** END value-tail ***/ diff --git a/src/libappindicator/app-indicator-enum-types.h.in b/src/libappindicator/app-indicator-enum-types.h.in new file mode 100644 index 0000000..e037be7 --- /dev/null +++ b/src/libappindicator/app-indicator-enum-types.h.in @@ -0,0 +1,33 @@ +/*** BEGIN file-header ***/ +#ifndef __CUSTOM_INDICATOR_ENUM_TYPES_H__ +#define __CUSTOM_INDICATOR_ENUM_TYPES_H__ + +#include + +G_BEGIN_DECLS + +/*** END file-header ***/ + +/*** BEGIN file-tail ***/ + +G_END_DECLS + +#endif /* __CUSTOM_INDICATOR_ENUM_TYPES_H__ */ +/*** END file-tail ***/ + +/*** BEGIN file-production ***/ +/* Enumerations from file: "@filename@" */ +/*** END file-production ***/ + +/*** BEGIN value-header ***/ +/** + @enum_name@_get_type: + + Builds a glib type for the @EnumName@ enumeration. + + Return value: A registered type for the enum +*/ +GType @enum_name@_get_type (void) G_GNUC_CONST; +#define CUSTOM_INDICATOR_TYPE_@ENUMSHORT@ (@enum_name@_get_type()) + +/*** END value-header ***/ diff --git a/src/libappindicator/app-indicator.c b/src/libappindicator/app-indicator.c new file mode 100644 index 0000000..fc2e196 --- /dev/null +++ b/src/libappindicator/app-indicator.c @@ -0,0 +1,847 @@ +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include +#include + +#include "libappindicator/app-indicator.h" +#include "libappindicator/app-indicator-enum-types.h" + +#include "notification-item-server.h" +#include "notification-watcher-client.h" + +#include "dbus-shared.h" + +/** + CustomIndicatorPrivate: + @id: The ID of the indicator. Maps to CustomIndicator::id. + @category: Which category the indicator is. Maps to CustomIndicator::category. + @status: The status of the indicator. Maps to CustomIndicator::status. + @icon_name: The name of the icon to use. Maps to CustomIndicator::icon-name. + @attention_icon_name: The name of the attention icon to use. Maps to CustomIndicator::attention-icon-name. + @menu: The menu for this indicator. Maps to CustomIndicator::menu + @watcher_proxy: The proxy connection to the watcher we're connected to. If we're not connected to one this will be #NULL. + + All of the private data in an instance of a + custom indicator. +*/ +typedef struct _CustomIndicatorPrivate CustomIndicatorPrivate; +struct _CustomIndicatorPrivate { + /* Properties */ + gchar * id; + CustomIndicatorCategory category; + CustomIndicatorStatus status; + gchar * icon_name; + gchar * attention_icon_name; + DbusmenuServer * menu; + + /* Fun stuff */ + DBusGProxy * watcher_proxy; + DBusGConnection * connection; +}; + +/* Signals Stuff */ +enum { + NEW_ICON, + NEW_ATTENTION_ICON, + NEW_STATUS, + CONNECTION_CHANGED, + LAST_SIGNAL +}; + +static guint signals[LAST_SIGNAL] = { 0 }; + +/* Enum for the properties so that they can be quickly + found and looked up. */ +enum { + PROP_0, + PROP_ID, + PROP_CATEGORY, + PROP_CATEGORY_ENUM, + PROP_STATUS, + PROP_STATUS_ENUM, + PROP_ICON_NAME, + PROP_ATTENTION_ICON_NAME, + PROP_MENU, + PROP_MENU_OBJECT, + PROP_CONNECTED +}; + +/* The strings so that they can be slowly looked up. */ +#define PROP_ID_S "id" +#define PROP_CATEGORY_S "category" +#define PROP_CATEGORY_ENUM_S "category-enum" +#define PROP_STATUS_S "status" +#define PROP_STATUS_ENUM_S "status-enum" +#define PROP_ICON_NAME_S "icon-name" +#define PROP_ATTENTION_ICON_NAME_S "attention-icon-name" +#define PROP_MENU_S "menu" +#define PROP_MENU_OBJECT_S "menu-object" +#define PROP_CONNECTED_S "connected" + +/* Private macro, shhhh! */ +#define CUSTOM_INDICATOR_GET_PRIVATE(o) \ + (G_TYPE_INSTANCE_GET_PRIVATE ((o), CUSTOM_INDICATOR_TYPE, CustomIndicatorPrivate)) + +/* Boiler plate */ +static void custom_indicator_class_init (CustomIndicatorClass *klass); +static void custom_indicator_init (CustomIndicator *self); +static void custom_indicator_dispose (GObject *object); +static void custom_indicator_finalize (GObject *object); +/* Property functions */ +static void custom_indicator_set_property (GObject * object, guint prop_id, const GValue * value, GParamSpec * pspec); +static void custom_indicator_get_property (GObject * object, guint prop_id, GValue * value, GParamSpec * pspec); +/* Other stuff */ +static void check_connect (CustomIndicator * self); +static void register_service_cb (DBusGProxy * proxy, GError * error, gpointer data); + +/* GObject type */ +G_DEFINE_TYPE (CustomIndicator, custom_indicator, G_TYPE_OBJECT); + +static void +custom_indicator_class_init (CustomIndicatorClass *klass) +{ + GObjectClass *object_class = G_OBJECT_CLASS (klass); + + g_type_class_add_private (klass, sizeof (CustomIndicatorPrivate)); + + /* Clean up */ + object_class->dispose = custom_indicator_dispose; + object_class->finalize = custom_indicator_finalize; + + /* Property funcs */ + object_class->set_property = custom_indicator_set_property; + object_class->get_property = custom_indicator_get_property; + + /* Properties */ + g_object_class_install_property(object_class, PROP_ID, + g_param_spec_string(PROP_ID_S, + "The ID for this indicator", + "An ID that should be unique, but used consistently by this program and it's indicator.", + NULL, + G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); + + g_object_class_install_property(object_class, PROP_CATEGORY, + g_param_spec_string(PROP_CATEGORY_S, + "Indicator Category as a string", + "The type of indicator that this represents as a string. For DBus.", + NULL, + G_PARAM_READABLE | G_PARAM_STATIC_STRINGS)); + + g_object_class_install_property(object_class, PROP_CATEGORY_ENUM, + g_param_spec_enum(PROP_CATEGORY_ENUM_S, + "Indicator Category", + "The type of indicator that this represents. Please don't use 'other'. Defaults to 'Application Status'.", + CUSTOM_INDICATOR_TYPE_INDICATOR_CATEGORY, + CUSTOM_INDICATOR_CATEGORY_APPLICATION_STATUS, + G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); + + g_object_class_install_property(object_class, PROP_STATUS, + g_param_spec_string(PROP_STATUS_S, + "Indicator Status as a string", + "The status of the indicator represented as a string. For DBus.", + NULL, + G_PARAM_READABLE | G_PARAM_STATIC_STRINGS)); + + g_object_class_install_property(object_class, PROP_STATUS_ENUM, + g_param_spec_enum(PROP_STATUS_ENUM_S, + "Indicator Status", + "Whether the indicator is shown or requests attention. Defaults to 'off'.", + CUSTOM_INDICATOR_TYPE_INDICATOR_STATUS, + CUSTOM_INDICATOR_STATUS_PASSIVE, + G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); + + g_object_class_install_property(object_class, PROP_ICON_NAME, + g_param_spec_string(PROP_ICON_NAME_S, + "An icon for the indicator", + "The default icon that is shown for the indicator.", + NULL, + G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); + + g_object_class_install_property(object_class, PROP_ATTENTION_ICON_NAME, + g_param_spec_string(PROP_ATTENTION_ICON_NAME_S, + "An icon to show when the indicator request attention.", + "If the indicator sets it's status to 'attention' then this icon is shown.", + NULL, + G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); + + g_object_class_install_property(object_class, PROP_MENU, + g_param_spec_string(PROP_MENU_S, + "The object path of the menu on DBus.", + "A method for getting the menu path as a string for DBus.", + NULL, + G_PARAM_READABLE | G_PARAM_STATIC_STRINGS)); + + g_object_class_install_property(object_class, PROP_MENU_OBJECT, + g_param_spec_object(PROP_MENU_OBJECT_S, + "The Menu for the indicator", + "A DBus Menu Server object that can have a menu attached to it. The object from this menu will be sent across the bus for the client to connect to and signal.", + DBUSMENU_TYPE_SERVER, + G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); + + g_object_class_install_property(object_class, PROP_CONNECTED, + g_param_spec_boolean(PROP_CONNECTED_S, + "Whether we're conneced to a watcher", + "Pretty simple, true if we have a reasonable expectation of being displayed through this object. You should hide your TrayIcon if so.", + FALSE, + G_PARAM_READABLE | G_PARAM_STATIC_STRINGS)); + + + /* Signals */ + + /** + CustomIndicator::new-icon: + @arg0: The #CustomIndicator object + + Signaled when there is a new icon set for the + object. + */ + signals[NEW_ICON] = g_signal_new (CUSTOM_INDICATOR_SIGNAL_NEW_ICON, + G_TYPE_FROM_CLASS(klass), + G_SIGNAL_RUN_LAST, + G_STRUCT_OFFSET (CustomIndicatorClass, new_icon), + NULL, NULL, + g_cclosure_marshal_VOID__VOID, + G_TYPE_NONE, 0, G_TYPE_NONE); + + /** + CustomIndicator::new-attention-icon: + @arg0: The #CustomIndicator object + + Signaled when there is a new attention icon set for the + object. + */ + signals[NEW_ATTENTION_ICON] = g_signal_new (CUSTOM_INDICATOR_SIGNAL_NEW_ATTENTION_ICON, + G_TYPE_FROM_CLASS(klass), + G_SIGNAL_RUN_LAST, + G_STRUCT_OFFSET (CustomIndicatorClass, new_attention_icon), + NULL, NULL, + g_cclosure_marshal_VOID__VOID, + G_TYPE_NONE, 0, G_TYPE_NONE); + + /** + CustomIndicator::new-status: + @arg0: The #CustomIndicator object + @arg1: The string value of the #CustomIndicatorStatus enum. + + Signaled when the status of the indicator changes. + */ + signals[NEW_STATUS] = g_signal_new (CUSTOM_INDICATOR_SIGNAL_NEW_STATUS, + G_TYPE_FROM_CLASS(klass), + G_SIGNAL_RUN_LAST, + G_STRUCT_OFFSET (CustomIndicatorClass, new_status), + NULL, NULL, + g_cclosure_marshal_VOID__STRING, + G_TYPE_NONE, 1, G_TYPE_STRING, G_TYPE_NONE); + + /** + CustomIndicator::connection-changed: + @arg0: The #CustomIndicator object + @arg1: Whether we're connected or not + + Signaled when we connect to a watcher, or when it drops + away. + */ + signals[CONNECTION_CHANGED] = g_signal_new (CUSTOM_INDICATOR_SIGNAL_CONNECTION_CHANGED, + G_TYPE_FROM_CLASS(klass), + G_SIGNAL_RUN_LAST, + G_STRUCT_OFFSET (CustomIndicatorClass, connection_changed), + NULL, NULL, + g_cclosure_marshal_VOID__BOOLEAN, + G_TYPE_NONE, 1, G_TYPE_BOOLEAN, G_TYPE_NONE); + + /* Initialize the object as a DBus type */ + dbus_g_object_type_install_info(CUSTOM_INDICATOR_TYPE, + &dbus_glib__notification_item_server_object_info); + + return; +} + +static void +custom_indicator_init (CustomIndicator *self) +{ + CustomIndicatorPrivate * priv = CUSTOM_INDICATOR_GET_PRIVATE(self); + + priv->id = NULL; + priv->category = CUSTOM_INDICATOR_CATEGORY_OTHER; + priv->status = CUSTOM_INDICATOR_STATUS_PASSIVE; + priv->icon_name = NULL; + priv->attention_icon_name = NULL; + priv->menu = NULL; + + priv->watcher_proxy = NULL; + priv->connection = NULL; + + /* Put the object on DBus */ + GError * error = NULL; + priv->connection = dbus_g_bus_get(DBUS_BUS_SESSION, &error); + if (error != NULL) { + g_error("Unable to connect to the session bus when creating custom indicator: %s", error->message); + g_error_free(error); + return; + } + + dbus_g_connection_register_g_object(priv->connection, + "/need/a/path", + G_OBJECT(self)); + + return; +} + +/* Free all objects, make sure that all the dbus + signals are sent out before we shut this down. */ +static void +custom_indicator_dispose (GObject *object) +{ + CustomIndicator * self = CUSTOM_INDICATOR(object); + g_return_if_fail(self != NULL); + + CustomIndicatorPrivate * priv = CUSTOM_INDICATOR_GET_PRIVATE(self); + + if (priv->status != CUSTOM_INDICATOR_STATUS_PASSIVE) { + custom_indicator_set_status(self, CUSTOM_INDICATOR_STATUS_PASSIVE); + } + + if (priv->menu != NULL) { + g_object_unref(G_OBJECT(priv->menu)); + priv->menu = NULL; + } + + if (priv->watcher_proxy != NULL) { + dbus_g_connection_flush(priv->connection); + g_object_unref(G_OBJECT(priv->watcher_proxy)); + priv->watcher_proxy = NULL; + } + + G_OBJECT_CLASS (custom_indicator_parent_class)->dispose (object); + return; +} + +/* Free all of the memory that we could be using in + the object. */ +static void +custom_indicator_finalize (GObject *object) +{ + CustomIndicator * self = CUSTOM_INDICATOR(object); + g_return_if_fail(self != NULL); + + CustomIndicatorPrivate * priv = CUSTOM_INDICATOR_GET_PRIVATE(self); + + if (priv->status != CUSTOM_INDICATOR_STATUS_PASSIVE) { + g_warning("Finalizing Custom Status with the status set to: %d", priv->status); + } + + if (priv->id != NULL) { + g_free(priv->id); + priv->id = NULL; + } + + if (priv->icon_name != NULL) { + g_free(priv->icon_name); + priv->icon_name = NULL; + } + + if (priv->attention_icon_name != NULL) { + g_free(priv->attention_icon_name); + priv->attention_icon_name = NULL; + } + + G_OBJECT_CLASS (custom_indicator_parent_class)->finalize (object); + return; +} + +#define WARN_BAD_TYPE(prop, value) g_warning("Can not work with property '%s' with value of type '%s'.", prop, G_VALUE_TYPE_NAME(value)) + +/* Set some properties */ +static void +custom_indicator_set_property (GObject * object, guint prop_id, const GValue * value, GParamSpec * pspec) +{ + CustomIndicator * self = CUSTOM_INDICATOR(object); + g_return_if_fail(self != NULL); + + CustomIndicatorPrivate * priv = CUSTOM_INDICATOR_GET_PRIVATE(self); + + switch (prop_id) { + /* *********************** */ + case PROP_ID: + if (G_VALUE_HOLDS_STRING(value)) { + if (priv->id != NULL) { + g_warning("Resetting ID value when I already had a value of: %s", priv->id); + g_free(priv->id); + priv->id = NULL; + } + priv->id = g_strdup(g_value_get_string(value)); + } else { + WARN_BAD_TYPE(PROP_ID_S, value); + } + check_connect(self); + break; + /* *********************** */ + case PROP_CATEGORY_ENUM: + if (G_VALUE_HOLDS_ENUM(value)) { + priv->category = g_value_get_enum(value); + } else { + WARN_BAD_TYPE(PROP_CATEGORY_ENUM_S, value); + } + break; + /* *********************** */ + case PROP_STATUS_ENUM: { + gboolean changed = FALSE; + if (G_VALUE_HOLDS_ENUM(value)) { + if (priv->status != g_value_get_enum(value)) { + changed = TRUE; + } + priv->status = g_value_get_enum(value); + } else { + WARN_BAD_TYPE(PROP_STATUS_ENUM_S, value); + } + if (changed) { + GParamSpecEnum * enumspec = G_PARAM_SPEC_ENUM(pspec); + if (enumspec != NULL) { + GEnumValue * enumval = g_enum_get_value(enumspec->enum_class, priv->status); + g_signal_emit(object, signals[NEW_STATUS], 0, enumval->value_nick, TRUE); + } + } + break; + } + /* *********************** */ + case PROP_ICON_NAME: + if (G_VALUE_HOLDS_STRING(value)) { + const gchar * instr = g_value_get_string(value); + gboolean changed = FALSE; + if (priv->icon_name == NULL) { + priv->icon_name = g_strdup(instr); + changed = TRUE; + } else if (!g_strcmp0(instr, priv->icon_name)) { + changed = FALSE; + } else { + g_free(priv->icon_name); + priv->icon_name = g_strdup(instr); + changed = TRUE; + } + if (changed) { + g_signal_emit(object, signals[NEW_ICON], 0, TRUE); + } + } else { + WARN_BAD_TYPE(PROP_ICON_NAME_S, value); + } + check_connect(self); + break; + /* *********************** */ + case PROP_ATTENTION_ICON_NAME: + if (G_VALUE_HOLDS_STRING(value)) { + const gchar * instr = g_value_get_string(value); + gboolean changed = FALSE; + if (priv->attention_icon_name == NULL) { + priv->attention_icon_name = g_strdup(instr); + changed = TRUE; + } else if (!g_strcmp0(instr, priv->attention_icon_name)) { + changed = FALSE; + } else { + g_free(priv->attention_icon_name); + priv->attention_icon_name = g_strdup(instr); + changed = TRUE; + } + if (changed) { + g_signal_emit(object, signals[NEW_ATTENTION_ICON], 0, TRUE); + } + } else { + WARN_BAD_TYPE(PROP_ATTENTION_ICON_NAME_S, value); + } + break; + /* *********************** */ + case PROP_MENU_OBJECT: + if (G_VALUE_HOLDS_OBJECT(value)) { + if (priv->menu != NULL) { + g_object_unref(G_OBJECT(priv->menu)); + } + priv->menu = DBUSMENU_SERVER(g_value_get_object(value)); + g_object_ref(G_OBJECT(priv->menu)); + } else { + WARN_BAD_TYPE(PROP_MENU_S, value); + } + check_connect(self); + break; + /* *********************** */ + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); + break; + } + + return; +} + +/* Function to fill our value with the property it's requesting. */ +static void +custom_indicator_get_property (GObject * object, guint prop_id, GValue * value, GParamSpec * pspec) +{ + CustomIndicator * self = CUSTOM_INDICATOR(object); + g_return_if_fail(self != NULL); + + CustomIndicatorPrivate * priv = CUSTOM_INDICATOR_GET_PRIVATE(self); + + switch (prop_id) { + /* *********************** */ + case PROP_ID: + if (G_VALUE_HOLDS_STRING(value)) { + g_value_set_string(value, priv->id); + } else { + WARN_BAD_TYPE(PROP_ID_S, value); + } + break; + /* *********************** */ + case PROP_CATEGORY: + if (G_VALUE_HOLDS_STRING(value)) { + GParamSpec * spec_for_enum = g_object_class_find_property(G_OBJECT_GET_CLASS(object), PROP_CATEGORY_ENUM_S); + GParamSpecEnum * enumspec = G_PARAM_SPEC_ENUM(spec_for_enum); + if (enumspec != NULL) { + GEnumValue * enumval = g_enum_get_value(enumspec->enum_class, priv->category); + g_value_set_string(value, enumval->value_nick); + } else { + g_assert_not_reached(); + } + } else { + WARN_BAD_TYPE(PROP_CATEGORY_S, value); + } + break; + /* *********************** */ + case PROP_CATEGORY_ENUM: + if (G_VALUE_HOLDS_ENUM(value)) { + /* We want the enum value */ + g_value_set_enum(value, priv->category); + } else { + WARN_BAD_TYPE(PROP_CATEGORY_ENUM_S, value); + } + break; + /* *********************** */ + case PROP_STATUS: + if (G_VALUE_HOLDS_STRING(value)) { + GParamSpec * spec_for_enum = g_object_class_find_property(G_OBJECT_GET_CLASS(object), PROP_STATUS_ENUM_S); + GParamSpecEnum * enumspec = G_PARAM_SPEC_ENUM(spec_for_enum); + if (enumspec != NULL) { + GEnumValue * enumval = g_enum_get_value(enumspec->enum_class, priv->status); + g_value_set_string(value, enumval->value_nick); + } else { + g_assert_not_reached(); + } + } else { + WARN_BAD_TYPE(PROP_STATUS_S, value); + } + break; + /* *********************** */ + case PROP_STATUS_ENUM: + if (G_VALUE_HOLDS_ENUM(value)) { + /* We want the enum value */ + g_value_set_enum(value, priv->status); + } else { + WARN_BAD_TYPE(PROP_STATUS_ENUM_S, value); + } + break; + /* *********************** */ + case PROP_ICON_NAME: + if (G_VALUE_HOLDS_STRING(value)) { + g_value_set_string(value, priv->icon_name); + } else { + WARN_BAD_TYPE(PROP_ICON_NAME_S, value); + } + break; + /* *********************** */ + case PROP_ATTENTION_ICON_NAME: + if (G_VALUE_HOLDS_STRING(value)) { + g_value_set_string(value, priv->attention_icon_name); + } else { + WARN_BAD_TYPE(PROP_ATTENTION_ICON_NAME_S, value); + } + break; + /* *********************** */ + case PROP_MENU: + if (G_VALUE_HOLDS_STRING(value)) { + if (priv->menu != NULL) { + g_object_get_property(G_OBJECT(priv->menu), DBUSMENU_SERVER_PROP_DBUS_OBJECT, value); + } + } else { + WARN_BAD_TYPE(PROP_MENU_S, value); + } + break; + /* *********************** */ + case PROP_MENU_OBJECT: + if (G_VALUE_HOLDS_OBJECT(value)) { + g_value_set_object(value, priv->menu); + } else { + WARN_BAD_TYPE(PROP_MENU_OBJECT_S, value); + } + break; + /* *********************** */ + case PROP_CONNECTED: + if (G_VALUE_HOLDS_BOOLEAN(value)) { + g_value_set_boolean(value, priv->watcher_proxy != NULL ? TRUE : FALSE); + } else { + WARN_BAD_TYPE(PROP_CONNECTED_S, value); + } + break; + /* *********************** */ + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); + break; + } + + return; +} + +/* This function is used to see if we have enough information to + connect to things. If we do, and we're not connected, it + connects for us. */ +static void +check_connect (CustomIndicator * self) +{ + CustomIndicatorPrivate * priv = CUSTOM_INDICATOR_GET_PRIVATE(self); + + /* We're alreadying connecting or trying to connect. */ + if (priv->watcher_proxy != NULL) return; + + /* Do we have enough information? */ + if (priv->menu == NULL) return; + if (priv->icon_name == NULL) return; + if (priv->id == NULL) return; + + GError * error = NULL; + priv->watcher_proxy = dbus_g_proxy_new_for_name_owner(priv->connection, + INDICATOR_CUSTOM_DBUS_ADDR, + NOTIFICATION_WATCHER_DBUS_OBJ, + NOTIFICATION_WATCHER_DBUS_IFACE, + &error); + if (error != NULL) { + g_warning("Unable to create Ayatana Watcher proxy! %s", error->message); + /* TODO: This is where we should start looking at fallbacks */ + g_error_free(error); + return; + } + + org_ayatana_indicator_application_NotificationWatcher_register_service_async(priv->watcher_proxy, "/need/a/path", register_service_cb, self); + + return; +} + +static void +register_service_cb (DBusGProxy * proxy, GError * error, gpointer data) +{ + CustomIndicatorPrivate * priv = CUSTOM_INDICATOR_GET_PRIVATE(data); + + if (error != NULL) { + g_warning("Unable to connect to the Notification Watcher: %s", error->message); + g_object_unref(G_OBJECT(priv->watcher_proxy)); + priv->watcher_proxy = NULL; + } + return; +} + + +/* ************************* */ +/* Public Functions */ +/* ************************* */ + +/** + custom_indicator_set_id: + @ci: The #CustomIndicator object to use + @id: ID to set for this indicator + + Wrapper function for property #CustomIndicator::id. +*/ +void +custom_indicator_set_id (CustomIndicator * ci, const gchar * id) +{ + GValue value = {0}; + g_value_init(&value, G_TYPE_STRING); + g_value_set_string(&value, id); + g_object_set_property(G_OBJECT(ci), PROP_ID_S, &value); + return; +} + +/** + custom_indicator_set_category: + @ci: The #CustomIndicator object to use + @category: The category to set for this indicator + + Wrapper function for property #CustomIndicator::category. +*/ +void +custom_indicator_set_category (CustomIndicator * ci, CustomIndicatorCategory category) +{ + GValue value = {0}; + g_value_init(&value, CUSTOM_INDICATOR_TYPE_INDICATOR_CATEGORY); + g_value_set_enum(&value, category); + g_object_set_property(G_OBJECT(ci), PROP_CATEGORY_ENUM_S, &value); + return; +} + +/** + custom_indicator_set_status: + @ci: The #CustomIndicator object to use + @status: The status to set for this indicator + + Wrapper function for property #CustomIndicator::status. +*/ +void +custom_indicator_set_status (CustomIndicator * ci, CustomIndicatorStatus status) +{ + GValue value = {0}; + g_value_init(&value, CUSTOM_INDICATOR_TYPE_INDICATOR_STATUS); + g_value_set_enum(&value, status); + g_object_set_property(G_OBJECT(ci), PROP_STATUS_ENUM_S, &value); + return; +} + +/** + custom_indicator_set_icon: + @ci: The #CustomIndicator object to use + @icon_name: The name of the icon to set for this indicator + + Wrapper function for property #CustomIndicator::icon. +*/ +void custom_indicator_set_icon (CustomIndicator * ci, const gchar * icon_name) +{ + GValue value = {0}; + g_value_init(&value, G_TYPE_STRING); + g_value_set_string(&value, icon_name); + g_object_set_property(G_OBJECT(ci), PROP_ICON_NAME_S, &value); + return; +} + +/** + custom_indicator_set_attention_icon: + @ci: The #CustomIndicator object to use + @icon_name: The name of the attention icon to set for this indicator + + Wrapper function for property #CustomIndicator::attention-icon. +*/ +void +custom_indicator_set_attention_icon (CustomIndicator * ci, const gchar * icon_name) +{ + GValue value = {0}; + g_value_init(&value, G_TYPE_STRING); + g_value_set_string(&value, icon_name); + g_object_set_property(G_OBJECT(ci), PROP_ATTENTION_ICON_NAME_S, &value); + return; +} + +/** + custom_indicator_set_menu: + @ci: The #CustomIndicator object to use + @menu: The object with the menu for the indicator + + Wrapper function for property #CustomIndicator::menu. +*/ +void +custom_indicator_set_menu (CustomIndicator * ci, DbusmenuServer * menu) +{ + GValue value = {0}; + g_value_init(&value, G_TYPE_OBJECT); + g_value_set_object(&value, G_OBJECT(menu)); + g_object_set_property(G_OBJECT(ci), PROP_MENU_OBJECT_S, &value); + return; +} + +/** + custom_indicator_get_id: + @ci: The #CustomIndicator object to use + + Wrapper function for property #CustomIndicator::id. + + Return value: The current ID +*/ +const gchar * +custom_indicator_get_id (CustomIndicator * ci) +{ + GValue value = {0}; + g_value_init(&value, G_TYPE_STRING); + g_object_get_property(G_OBJECT(ci), PROP_ID_S, &value); + return g_value_get_string(&value); +} + +/** + custom_indicator_get_category: + @ci: The #CustomIndicator object to use + + Wrapper function for property #CustomIndicator::category. + + Return value: The current category. +*/ +CustomIndicatorCategory +custom_indicator_get_category (CustomIndicator * ci) +{ + GValue value = {0}; + g_value_init(&value, CUSTOM_INDICATOR_TYPE_INDICATOR_CATEGORY); + g_object_get_property(G_OBJECT(ci), PROP_CATEGORY_ENUM_S, &value); + return g_value_get_enum(&value); +} + +/** + custom_indicator_get_status: + @ci: The #CustomIndicator object to use + + Wrapper function for property #CustomIndicator::status. + + Return value: The current status. +*/ +CustomIndicatorStatus +custom_indicator_get_status (CustomIndicator * ci) +{ + GValue value = {0}; + g_value_init(&value, CUSTOM_INDICATOR_TYPE_INDICATOR_STATUS); + g_object_get_property(G_OBJECT(ci), PROP_STATUS_ENUM_S, &value); + return g_value_get_enum(&value); +} + +/** + custom_indicator_get_icon: + @ci: The #CustomIndicator object to use + + Wrapper function for property #CustomIndicator::icon-name. + + Return value: The current icon name. +*/ +const gchar * +custom_indicator_get_icon (CustomIndicator * ci) +{ + GValue value = {0}; + g_value_init(&value, G_TYPE_STRING); + g_object_get_property(G_OBJECT(ci), PROP_ICON_NAME_S, &value); + return g_value_get_string(&value); +} + +/** + custom_indicator_get_attention_icon: + @ci: The #CustomIndicator object to use + + Wrapper function for property #CustomIndicator::attention-icon-name. + + Return value: The current attention icon name. +*/ +const gchar * +custom_indicator_get_attention_icon (CustomIndicator * ci) +{ + GValue value = {0}; + g_value_init(&value, G_TYPE_STRING); + g_object_get_property(G_OBJECT(ci), PROP_ATTENTION_ICON_NAME_S, &value); + return g_value_get_string(&value); +} + +/** + custom_indicator_get_menu: + @ci: The #CustomIndicator object to use + + Wrapper function for property #CustomIndicator::menu. + + Return value: The current menu being used. +*/ +DbusmenuServer * +custom_indicator_get_menu (CustomIndicator * ci) +{ + GValue value = {0}; + g_value_init(&value, G_TYPE_OBJECT); + g_object_get_property(G_OBJECT(ci), PROP_MENU_OBJECT_S, &value); + return DBUSMENU_SERVER(g_value_get_object(&value)); +} + + diff --git a/src/libappindicator/app-indicator.h b/src/libappindicator/app-indicator.h new file mode 100644 index 0000000..2e9045c --- /dev/null +++ b/src/libappindicator/app-indicator.h @@ -0,0 +1,142 @@ +#ifndef __CUSTOM_INDICATOR_H__ +#define __CUSTOM_INDICATOR_H__ + +#include +#include +#include + +G_BEGIN_DECLS + +#define CUSTOM_INDICATOR_TYPE (custom_indicator_get_type ()) +#define CUSTOM_INDICATOR(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), CUSTOM_INDICATOR_TYPE, CustomIndicator)) +#define CUSTOM_INDICATOR_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), CUSTOM_INDICATOR_TYPE, CustomIndicatorClass)) +#define IS_CUSTOM_INDICATOR(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), CUSTOM_INDICATOR_TYPE)) +#define IS_CUSTOM_INDICATOR_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), CUSTOM_INDICATOR_TYPE)) +#define CUSTOM_INDICATOR_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), CUSTOM_INDICATOR_TYPE, CustomIndicatorClass)) + +#define CUSTOM_INDICATOR_SIGNAL_NEW_ICON "new-icon" +#define CUSTOM_INDICATOR_SIGNAL_NEW_ATTENTION_ICON "new-attention-icon" +#define CUSTOM_INDICATOR_SIGNAL_NEW_STATUS "new-status" +#define CUSTOM_INDICATOR_SIGNAL_CONNECTION_CHANGED "connection-changed" + +/** + CustomIndicatorCategory: + @CUSTOM_INDICATOR_CATEGORY_APPLICATION_STATUS: The indicator is used to display the status of the application. + @CUSTOM_INDICATOR_CATEGORY_COMMUNICATIONS: The application is used for communication with other people. + @CUSTOM_INDICATOR_CATEGORY_SYSTEM_SERVICES: A system indicator relating to something in the user's system. + @CUSTOM_INDICATOR_CATEGORY_HARDWARE: An indicator relating to the user's hardware. + @CUSTOM_INDICATOR_CATEGORY_OTHER: Something not defined in this enum, please don't use unless you really need it. + + The category provides grouping for the indicators so that + users can find indicators that are similar together. +*/ +typedef enum { /*< prefix=CUSTOM_INDICATOR_CATEGORY >*/ + CUSTOM_INDICATOR_CATEGORY_APPLICATION_STATUS, + CUSTOM_INDICATOR_CATEGORY_COMMUNICATIONS, + CUSTOM_INDICATOR_CATEGORY_SYSTEM_SERVICES, + CUSTOM_INDICATOR_CATEGORY_HARDWARE, + CUSTOM_INDICATOR_CATEGORY_OTHER +} CustomIndicatorCategory; + +/** + CustomIndicatorStatus: + @CUSTOM_INDICATOR_STATUS_PASSIVE: The indicator should not be shown to the user. + @CUSTOM_INDICATOR_STATUS_ACTIVE: The indicator should be shown in it's default state. + @CUSTOM_INDICATOR_STATUS_ATTENTION: The indicator should show it's attention icon. + + These are the states that the indicator can be on in + the user's panel. The indicator by default starts + in the state @CUSTOM_INDICATOR_STATUS_OFF and can be + shown by setting it to @CUSTOM_INDICATOR_STATUS_ON. +*/ +typedef enum { /*< prefix=CUSTOM_INDICATOR_STATUS >*/ + CUSTOM_INDICATOR_STATUS_PASSIVE, + CUSTOM_INDICATOR_STATUS_ACTIVE, + CUSTOM_INDICATOR_STATUS_ATTENTION +} CustomIndicatorStatus; + +typedef struct _CustomIndicator CustomIndicator; +typedef struct _CustomIndicatorClass CustomIndicatorClass; + +/** + CustomIndicatorClass: + @parent_class: Mia familia + @new_icon: Slot for #CustomIndicator::new-icon. + @new_attention_icon: Slot for #CustomIndicator::new-attention-icon. + @new_status: Slot for #CustomIndicator::new-status. + @connection_changed: Slot for #CustomIndicator::connection-changed. + @custom_indicator_reserved_1: Reserved for future use. + @custom_indicator_reserved_2: Reserved for future use. + @custom_indicator_reserved_3: Reserved for future use. + @custom_indicator_reserved_4: Reserved for future use. + + The signals and external functions that make up the #CustomIndicator + class object. +*/ +struct _CustomIndicatorClass { + /* Parent */ + GObjectClass parent_class; + + /* DBus Signals */ + void (* new_icon) (CustomIndicator * indicator, + gpointer user_data); + void (* new_attention_icon) (CustomIndicator * indicator, + gpointer user_data); + void (* new_status) (CustomIndicator * indicator, + gchar * status_string, + gpointer user_data); + + /* Local Signals */ + void (* connection_changed) (CustomIndicator * indicator, + gboolean connected, + gpointer user_data); + + /* Reserved */ + void (*custom_indicator_reserved_1)(void); + void (*custom_indicator_reserved_2)(void); + void (*custom_indicator_reserved_3)(void); + void (*custom_indicator_reserved_4)(void); +}; + +/** + CustomIndicator: + @parent: Parent object. + + A custom indicator represents the values that are needed to show a + unique status in the panel for an application. In general, applications + should try to fit in the other indicators that are available on the + panel before using this. But, sometimes it is necissary. +*/ +struct _CustomIndicator { + GObject parent; + /* None. We're a very private object. */ +}; + +/* GObject Stuff */ +GType custom_indicator_get_type (void); + +/* Set properties */ +void custom_indicator_set_id (CustomIndicator * ci, + const gchar * id); +void custom_indicator_set_category (CustomIndicator * ci, + CustomIndicatorCategory category); +void custom_indicator_set_status (CustomIndicator * ci, + CustomIndicatorStatus status); +void custom_indicator_set_icon (CustomIndicator * ci, + const gchar * icon_name); +void custom_indicator_set_attention_icon (CustomIndicator * ci, + const gchar * icon_name); +void custom_indicator_set_menu (CustomIndicator * ci, + DbusmenuServer * menu); + +/* Get properties */ +const gchar * custom_indicator_get_id (CustomIndicator * ci); +CustomIndicatorCategory custom_indicator_get_category (CustomIndicator * ci); +CustomIndicatorStatus custom_indicator_get_status (CustomIndicator * ci); +const gchar * custom_indicator_get_icon (CustomIndicator * ci); +const gchar * custom_indicator_get_attention_icon (CustomIndicator * ci); +DbusmenuServer * custom_indicator_get_menu (CustomIndicator * ci); + +G_END_DECLS + +#endif diff --git a/src/libappindicator/application-indicator-enum-types.c.in b/src/libappindicator/application-indicator-enum-types.c.in deleted file mode 100644 index dedf54c..0000000 --- a/src/libappindicator/application-indicator-enum-types.c.in +++ /dev/null @@ -1,33 +0,0 @@ -/*** BEGIN file-header ***/ -#include "libappindicator/application-indicator-enum-types.h" - -/*** END file-header ***/ - -/*** BEGIN file-production ***/ -#include "@filename@" -/*** END file-production ***/ - -/*** BEGIN value-header ***/ -GType -@enum_name@_get_type (void) -{ - static GType etype = 0; - if (G_UNLIKELY(etype == 0)) { - static const G@Type@Value values[] = { -/*** END value-header ***/ - -/*** BEGIN value-production ***/ - { @VALUENAME@, "@VALUENAME@", "@valuenick@" }, -/*** END value-production ***/ - -/*** BEGIN value-tail ***/ - { 0, NULL, NULL} - }; - - etype = g_@type@_register_static (g_intern_static_string("@EnumName@"), values); - } - - return etype; -} - -/*** END value-tail ***/ diff --git a/src/libappindicator/application-indicator-enum-types.h.in b/src/libappindicator/application-indicator-enum-types.h.in deleted file mode 100644 index e037be7..0000000 --- a/src/libappindicator/application-indicator-enum-types.h.in +++ /dev/null @@ -1,33 +0,0 @@ -/*** BEGIN file-header ***/ -#ifndef __CUSTOM_INDICATOR_ENUM_TYPES_H__ -#define __CUSTOM_INDICATOR_ENUM_TYPES_H__ - -#include - -G_BEGIN_DECLS - -/*** END file-header ***/ - -/*** BEGIN file-tail ***/ - -G_END_DECLS - -#endif /* __CUSTOM_INDICATOR_ENUM_TYPES_H__ */ -/*** END file-tail ***/ - -/*** BEGIN file-production ***/ -/* Enumerations from file: "@filename@" */ -/*** END file-production ***/ - -/*** BEGIN value-header ***/ -/** - @enum_name@_get_type: - - Builds a glib type for the @EnumName@ enumeration. - - Return value: A registered type for the enum -*/ -GType @enum_name@_get_type (void) G_GNUC_CONST; -#define CUSTOM_INDICATOR_TYPE_@ENUMSHORT@ (@enum_name@_get_type()) - -/*** END value-header ***/ diff --git a/src/libappindicator/application-indicator.c b/src/libappindicator/application-indicator.c deleted file mode 100644 index 74efd1e..0000000 --- a/src/libappindicator/application-indicator.c +++ /dev/null @@ -1,847 +0,0 @@ -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include -#include - -#include "libappindicator/application-indicator.h" -#include "libappindicator/application-indicator-enum-types.h" - -#include "notification-item-server.h" -#include "notification-watcher-client.h" - -#include "dbus-shared.h" - -/** - CustomIndicatorPrivate: - @id: The ID of the indicator. Maps to CustomIndicator::id. - @category: Which category the indicator is. Maps to CustomIndicator::category. - @status: The status of the indicator. Maps to CustomIndicator::status. - @icon_name: The name of the icon to use. Maps to CustomIndicator::icon-name. - @attention_icon_name: The name of the attention icon to use. Maps to CustomIndicator::attention-icon-name. - @menu: The menu for this indicator. Maps to CustomIndicator::menu - @watcher_proxy: The proxy connection to the watcher we're connected to. If we're not connected to one this will be #NULL. - - All of the private data in an instance of a - custom indicator. -*/ -typedef struct _CustomIndicatorPrivate CustomIndicatorPrivate; -struct _CustomIndicatorPrivate { - /* Properties */ - gchar * id; - CustomIndicatorCategory category; - CustomIndicatorStatus status; - gchar * icon_name; - gchar * attention_icon_name; - DbusmenuServer * menu; - - /* Fun stuff */ - DBusGProxy * watcher_proxy; - DBusGConnection * connection; -}; - -/* Signals Stuff */ -enum { - NEW_ICON, - NEW_ATTENTION_ICON, - NEW_STATUS, - CONNECTION_CHANGED, - LAST_SIGNAL -}; - -static guint signals[LAST_SIGNAL] = { 0 }; - -/* Enum for the properties so that they can be quickly - found and looked up. */ -enum { - PROP_0, - PROP_ID, - PROP_CATEGORY, - PROP_CATEGORY_ENUM, - PROP_STATUS, - PROP_STATUS_ENUM, - PROP_ICON_NAME, - PROP_ATTENTION_ICON_NAME, - PROP_MENU, - PROP_MENU_OBJECT, - PROP_CONNECTED -}; - -/* The strings so that they can be slowly looked up. */ -#define PROP_ID_S "id" -#define PROP_CATEGORY_S "category" -#define PROP_CATEGORY_ENUM_S "category-enum" -#define PROP_STATUS_S "status" -#define PROP_STATUS_ENUM_S "status-enum" -#define PROP_ICON_NAME_S "icon-name" -#define PROP_ATTENTION_ICON_NAME_S "attention-icon-name" -#define PROP_MENU_S "menu" -#define PROP_MENU_OBJECT_S "menu-object" -#define PROP_CONNECTED_S "connected" - -/* Private macro, shhhh! */ -#define CUSTOM_INDICATOR_GET_PRIVATE(o) \ - (G_TYPE_INSTANCE_GET_PRIVATE ((o), CUSTOM_INDICATOR_TYPE, CustomIndicatorPrivate)) - -/* Boiler plate */ -static void custom_indicator_class_init (CustomIndicatorClass *klass); -static void custom_indicator_init (CustomIndicator *self); -static void custom_indicator_dispose (GObject *object); -static void custom_indicator_finalize (GObject *object); -/* Property functions */ -static void custom_indicator_set_property (GObject * object, guint prop_id, const GValue * value, GParamSpec * pspec); -static void custom_indicator_get_property (GObject * object, guint prop_id, GValue * value, GParamSpec * pspec); -/* Other stuff */ -static void check_connect (CustomIndicator * self); -static void register_service_cb (DBusGProxy * proxy, GError * error, gpointer data); - -/* GObject type */ -G_DEFINE_TYPE (CustomIndicator, custom_indicator, G_TYPE_OBJECT); - -static void -custom_indicator_class_init (CustomIndicatorClass *klass) -{ - GObjectClass *object_class = G_OBJECT_CLASS (klass); - - g_type_class_add_private (klass, sizeof (CustomIndicatorPrivate)); - - /* Clean up */ - object_class->dispose = custom_indicator_dispose; - object_class->finalize = custom_indicator_finalize; - - /* Property funcs */ - object_class->set_property = custom_indicator_set_property; - object_class->get_property = custom_indicator_get_property; - - /* Properties */ - g_object_class_install_property(object_class, PROP_ID, - g_param_spec_string(PROP_ID_S, - "The ID for this indicator", - "An ID that should be unique, but used consistently by this program and it's indicator.", - NULL, - G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); - - g_object_class_install_property(object_class, PROP_CATEGORY, - g_param_spec_string(PROP_CATEGORY_S, - "Indicator Category as a string", - "The type of indicator that this represents as a string. For DBus.", - NULL, - G_PARAM_READABLE | G_PARAM_STATIC_STRINGS)); - - g_object_class_install_property(object_class, PROP_CATEGORY_ENUM, - g_param_spec_enum(PROP_CATEGORY_ENUM_S, - "Indicator Category", - "The type of indicator that this represents. Please don't use 'other'. Defaults to 'Application Status'.", - CUSTOM_INDICATOR_TYPE_INDICATOR_CATEGORY, - CUSTOM_INDICATOR_CATEGORY_APPLICATION_STATUS, - G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); - - g_object_class_install_property(object_class, PROP_STATUS, - g_param_spec_string(PROP_STATUS_S, - "Indicator Status as a string", - "The status of the indicator represented as a string. For DBus.", - NULL, - G_PARAM_READABLE | G_PARAM_STATIC_STRINGS)); - - g_object_class_install_property(object_class, PROP_STATUS_ENUM, - g_param_spec_enum(PROP_STATUS_ENUM_S, - "Indicator Status", - "Whether the indicator is shown or requests attention. Defaults to 'off'.", - CUSTOM_INDICATOR_TYPE_INDICATOR_STATUS, - CUSTOM_INDICATOR_STATUS_PASSIVE, - G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); - - g_object_class_install_property(object_class, PROP_ICON_NAME, - g_param_spec_string(PROP_ICON_NAME_S, - "An icon for the indicator", - "The default icon that is shown for the indicator.", - NULL, - G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); - - g_object_class_install_property(object_class, PROP_ATTENTION_ICON_NAME, - g_param_spec_string(PROP_ATTENTION_ICON_NAME_S, - "An icon to show when the indicator request attention.", - "If the indicator sets it's status to 'attention' then this icon is shown.", - NULL, - G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); - - g_object_class_install_property(object_class, PROP_MENU, - g_param_spec_string(PROP_MENU_S, - "The object path of the menu on DBus.", - "A method for getting the menu path as a string for DBus.", - NULL, - G_PARAM_READABLE | G_PARAM_STATIC_STRINGS)); - - g_object_class_install_property(object_class, PROP_MENU_OBJECT, - g_param_spec_object(PROP_MENU_OBJECT_S, - "The Menu for the indicator", - "A DBus Menu Server object that can have a menu attached to it. The object from this menu will be sent across the bus for the client to connect to and signal.", - DBUSMENU_TYPE_SERVER, - G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); - - g_object_class_install_property(object_class, PROP_CONNECTED, - g_param_spec_boolean(PROP_CONNECTED_S, - "Whether we're conneced to a watcher", - "Pretty simple, true if we have a reasonable expectation of being displayed through this object. You should hide your TrayIcon if so.", - FALSE, - G_PARAM_READABLE | G_PARAM_STATIC_STRINGS)); - - - /* Signals */ - - /** - CustomIndicator::new-icon: - @arg0: The #CustomIndicator object - - Signaled when there is a new icon set for the - object. - */ - signals[NEW_ICON] = g_signal_new (CUSTOM_INDICATOR_SIGNAL_NEW_ICON, - G_TYPE_FROM_CLASS(klass), - G_SIGNAL_RUN_LAST, - G_STRUCT_OFFSET (CustomIndicatorClass, new_icon), - NULL, NULL, - g_cclosure_marshal_VOID__VOID, - G_TYPE_NONE, 0, G_TYPE_NONE); - - /** - CustomIndicator::new-attention-icon: - @arg0: The #CustomIndicator object - - Signaled when there is a new attention icon set for the - object. - */ - signals[NEW_ATTENTION_ICON] = g_signal_new (CUSTOM_INDICATOR_SIGNAL_NEW_ATTENTION_ICON, - G_TYPE_FROM_CLASS(klass), - G_SIGNAL_RUN_LAST, - G_STRUCT_OFFSET (CustomIndicatorClass, new_attention_icon), - NULL, NULL, - g_cclosure_marshal_VOID__VOID, - G_TYPE_NONE, 0, G_TYPE_NONE); - - /** - CustomIndicator::new-status: - @arg0: The #CustomIndicator object - @arg1: The string value of the #CustomIndicatorStatus enum. - - Signaled when the status of the indicator changes. - */ - signals[NEW_STATUS] = g_signal_new (CUSTOM_INDICATOR_SIGNAL_NEW_STATUS, - G_TYPE_FROM_CLASS(klass), - G_SIGNAL_RUN_LAST, - G_STRUCT_OFFSET (CustomIndicatorClass, new_status), - NULL, NULL, - g_cclosure_marshal_VOID__STRING, - G_TYPE_NONE, 1, G_TYPE_STRING, G_TYPE_NONE); - - /** - CustomIndicator::connection-changed: - @arg0: The #CustomIndicator object - @arg1: Whether we're connected or not - - Signaled when we connect to a watcher, or when it drops - away. - */ - signals[CONNECTION_CHANGED] = g_signal_new (CUSTOM_INDICATOR_SIGNAL_CONNECTION_CHANGED, - G_TYPE_FROM_CLASS(klass), - G_SIGNAL_RUN_LAST, - G_STRUCT_OFFSET (CustomIndicatorClass, connection_changed), - NULL, NULL, - g_cclosure_marshal_VOID__BOOLEAN, - G_TYPE_NONE, 1, G_TYPE_BOOLEAN, G_TYPE_NONE); - - /* Initialize the object as a DBus type */ - dbus_g_object_type_install_info(CUSTOM_INDICATOR_TYPE, - &dbus_glib__notification_item_server_object_info); - - return; -} - -static void -custom_indicator_init (CustomIndicator *self) -{ - CustomIndicatorPrivate * priv = CUSTOM_INDICATOR_GET_PRIVATE(self); - - priv->id = NULL; - priv->category = CUSTOM_INDICATOR_CATEGORY_OTHER; - priv->status = CUSTOM_INDICATOR_STATUS_PASSIVE; - priv->icon_name = NULL; - priv->attention_icon_name = NULL; - priv->menu = NULL; - - priv->watcher_proxy = NULL; - priv->connection = NULL; - - /* Put the object on DBus */ - GError * error = NULL; - priv->connection = dbus_g_bus_get(DBUS_BUS_SESSION, &error); - if (error != NULL) { - g_error("Unable to connect to the session bus when creating custom indicator: %s", error->message); - g_error_free(error); - return; - } - - dbus_g_connection_register_g_object(priv->connection, - "/need/a/path", - G_OBJECT(self)); - - return; -} - -/* Free all objects, make sure that all the dbus - signals are sent out before we shut this down. */ -static void -custom_indicator_dispose (GObject *object) -{ - CustomIndicator * self = CUSTOM_INDICATOR(object); - g_return_if_fail(self != NULL); - - CustomIndicatorPrivate * priv = CUSTOM_INDICATOR_GET_PRIVATE(self); - - if (priv->status != CUSTOM_INDICATOR_STATUS_PASSIVE) { - custom_indicator_set_status(self, CUSTOM_INDICATOR_STATUS_PASSIVE); - } - - if (priv->menu != NULL) { - g_object_unref(G_OBJECT(priv->menu)); - priv->menu = NULL; - } - - if (priv->watcher_proxy != NULL) { - dbus_g_connection_flush(priv->connection); - g_object_unref(G_OBJECT(priv->watcher_proxy)); - priv->watcher_proxy = NULL; - } - - G_OBJECT_CLASS (custom_indicator_parent_class)->dispose (object); - return; -} - -/* Free all of the memory that we could be using in - the object. */ -static void -custom_indicator_finalize (GObject *object) -{ - CustomIndicator * self = CUSTOM_INDICATOR(object); - g_return_if_fail(self != NULL); - - CustomIndicatorPrivate * priv = CUSTOM_INDICATOR_GET_PRIVATE(self); - - if (priv->status != CUSTOM_INDICATOR_STATUS_PASSIVE) { - g_warning("Finalizing Custom Status with the status set to: %d", priv->status); - } - - if (priv->id != NULL) { - g_free(priv->id); - priv->id = NULL; - } - - if (priv->icon_name != NULL) { - g_free(priv->icon_name); - priv->icon_name = NULL; - } - - if (priv->attention_icon_name != NULL) { - g_free(priv->attention_icon_name); - priv->attention_icon_name = NULL; - } - - G_OBJECT_CLASS (custom_indicator_parent_class)->finalize (object); - return; -} - -#define WARN_BAD_TYPE(prop, value) g_warning("Can not work with property '%s' with value of type '%s'.", prop, G_VALUE_TYPE_NAME(value)) - -/* Set some properties */ -static void -custom_indicator_set_property (GObject * object, guint prop_id, const GValue * value, GParamSpec * pspec) -{ - CustomIndicator * self = CUSTOM_INDICATOR(object); - g_return_if_fail(self != NULL); - - CustomIndicatorPrivate * priv = CUSTOM_INDICATOR_GET_PRIVATE(self); - - switch (prop_id) { - /* *********************** */ - case PROP_ID: - if (G_VALUE_HOLDS_STRING(value)) { - if (priv->id != NULL) { - g_warning("Resetting ID value when I already had a value of: %s", priv->id); - g_free(priv->id); - priv->id = NULL; - } - priv->id = g_strdup(g_value_get_string(value)); - } else { - WARN_BAD_TYPE(PROP_ID_S, value); - } - check_connect(self); - break; - /* *********************** */ - case PROP_CATEGORY_ENUM: - if (G_VALUE_HOLDS_ENUM(value)) { - priv->category = g_value_get_enum(value); - } else { - WARN_BAD_TYPE(PROP_CATEGORY_ENUM_S, value); - } - break; - /* *********************** */ - case PROP_STATUS_ENUM: { - gboolean changed = FALSE; - if (G_VALUE_HOLDS_ENUM(value)) { - if (priv->status != g_value_get_enum(value)) { - changed = TRUE; - } - priv->status = g_value_get_enum(value); - } else { - WARN_BAD_TYPE(PROP_STATUS_ENUM_S, value); - } - if (changed) { - GParamSpecEnum * enumspec = G_PARAM_SPEC_ENUM(pspec); - if (enumspec != NULL) { - GEnumValue * enumval = g_enum_get_value(enumspec->enum_class, priv->status); - g_signal_emit(object, signals[NEW_STATUS], 0, enumval->value_nick, TRUE); - } - } - break; - } - /* *********************** */ - case PROP_ICON_NAME: - if (G_VALUE_HOLDS_STRING(value)) { - const gchar * instr = g_value_get_string(value); - gboolean changed = FALSE; - if (priv->icon_name == NULL) { - priv->icon_name = g_strdup(instr); - changed = TRUE; - } else if (!g_strcmp0(instr, priv->icon_name)) { - changed = FALSE; - } else { - g_free(priv->icon_name); - priv->icon_name = g_strdup(instr); - changed = TRUE; - } - if (changed) { - g_signal_emit(object, signals[NEW_ICON], 0, TRUE); - } - } else { - WARN_BAD_TYPE(PROP_ICON_NAME_S, value); - } - check_connect(self); - break; - /* *********************** */ - case PROP_ATTENTION_ICON_NAME: - if (G_VALUE_HOLDS_STRING(value)) { - const gchar * instr = g_value_get_string(value); - gboolean changed = FALSE; - if (priv->attention_icon_name == NULL) { - priv->attention_icon_name = g_strdup(instr); - changed = TRUE; - } else if (!g_strcmp0(instr, priv->attention_icon_name)) { - changed = FALSE; - } else { - g_free(priv->attention_icon_name); - priv->attention_icon_name = g_strdup(instr); - changed = TRUE; - } - if (changed) { - g_signal_emit(object, signals[NEW_ATTENTION_ICON], 0, TRUE); - } - } else { - WARN_BAD_TYPE(PROP_ATTENTION_ICON_NAME_S, value); - } - break; - /* *********************** */ - case PROP_MENU_OBJECT: - if (G_VALUE_HOLDS_OBJECT(value)) { - if (priv->menu != NULL) { - g_object_unref(G_OBJECT(priv->menu)); - } - priv->menu = DBUSMENU_SERVER(g_value_get_object(value)); - g_object_ref(G_OBJECT(priv->menu)); - } else { - WARN_BAD_TYPE(PROP_MENU_S, value); - } - check_connect(self); - break; - /* *********************** */ - default: - G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); - break; - } - - return; -} - -/* Function to fill our value with the property it's requesting. */ -static void -custom_indicator_get_property (GObject * object, guint prop_id, GValue * value, GParamSpec * pspec) -{ - CustomIndicator * self = CUSTOM_INDICATOR(object); - g_return_if_fail(self != NULL); - - CustomIndicatorPrivate * priv = CUSTOM_INDICATOR_GET_PRIVATE(self); - - switch (prop_id) { - /* *********************** */ - case PROP_ID: - if (G_VALUE_HOLDS_STRING(value)) { - g_value_set_string(value, priv->id); - } else { - WARN_BAD_TYPE(PROP_ID_S, value); - } - break; - /* *********************** */ - case PROP_CATEGORY: - if (G_VALUE_HOLDS_STRING(value)) { - GParamSpec * spec_for_enum = g_object_class_find_property(G_OBJECT_GET_CLASS(object), PROP_CATEGORY_ENUM_S); - GParamSpecEnum * enumspec = G_PARAM_SPEC_ENUM(spec_for_enum); - if (enumspec != NULL) { - GEnumValue * enumval = g_enum_get_value(enumspec->enum_class, priv->category); - g_value_set_string(value, enumval->value_nick); - } else { - g_assert_not_reached(); - } - } else { - WARN_BAD_TYPE(PROP_CATEGORY_S, value); - } - break; - /* *********************** */ - case PROP_CATEGORY_ENUM: - if (G_VALUE_HOLDS_ENUM(value)) { - /* We want the enum value */ - g_value_set_enum(value, priv->category); - } else { - WARN_BAD_TYPE(PROP_CATEGORY_ENUM_S, value); - } - break; - /* *********************** */ - case PROP_STATUS: - if (G_VALUE_HOLDS_STRING(value)) { - GParamSpec * spec_for_enum = g_object_class_find_property(G_OBJECT_GET_CLASS(object), PROP_STATUS_ENUM_S); - GParamSpecEnum * enumspec = G_PARAM_SPEC_ENUM(spec_for_enum); - if (enumspec != NULL) { - GEnumValue * enumval = g_enum_get_value(enumspec->enum_class, priv->status); - g_value_set_string(value, enumval->value_nick); - } else { - g_assert_not_reached(); - } - } else { - WARN_BAD_TYPE(PROP_STATUS_S, value); - } - break; - /* *********************** */ - case PROP_STATUS_ENUM: - if (G_VALUE_HOLDS_ENUM(value)) { - /* We want the enum value */ - g_value_set_enum(value, priv->status); - } else { - WARN_BAD_TYPE(PROP_STATUS_ENUM_S, value); - } - break; - /* *********************** */ - case PROP_ICON_NAME: - if (G_VALUE_HOLDS_STRING(value)) { - g_value_set_string(value, priv->icon_name); - } else { - WARN_BAD_TYPE(PROP_ICON_NAME_S, value); - } - break; - /* *********************** */ - case PROP_ATTENTION_ICON_NAME: - if (G_VALUE_HOLDS_STRING(value)) { - g_value_set_string(value, priv->attention_icon_name); - } else { - WARN_BAD_TYPE(PROP_ATTENTION_ICON_NAME_S, value); - } - break; - /* *********************** */ - case PROP_MENU: - if (G_VALUE_HOLDS_STRING(value)) { - if (priv->menu != NULL) { - g_object_get_property(G_OBJECT(priv->menu), DBUSMENU_SERVER_PROP_DBUS_OBJECT, value); - } - } else { - WARN_BAD_TYPE(PROP_MENU_S, value); - } - break; - /* *********************** */ - case PROP_MENU_OBJECT: - if (G_VALUE_HOLDS_OBJECT(value)) { - g_value_set_object(value, priv->menu); - } else { - WARN_BAD_TYPE(PROP_MENU_OBJECT_S, value); - } - break; - /* *********************** */ - case PROP_CONNECTED: - if (G_VALUE_HOLDS_BOOLEAN(value)) { - g_value_set_boolean(value, priv->watcher_proxy != NULL ? TRUE : FALSE); - } else { - WARN_BAD_TYPE(PROP_CONNECTED_S, value); - } - break; - /* *********************** */ - default: - G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); - break; - } - - return; -} - -/* This function is used to see if we have enough information to - connect to things. If we do, and we're not connected, it - connects for us. */ -static void -check_connect (CustomIndicator * self) -{ - CustomIndicatorPrivate * priv = CUSTOM_INDICATOR_GET_PRIVATE(self); - - /* We're alreadying connecting or trying to connect. */ - if (priv->watcher_proxy != NULL) return; - - /* Do we have enough information? */ - if (priv->menu == NULL) return; - if (priv->icon_name == NULL) return; - if (priv->id == NULL) return; - - GError * error = NULL; - priv->watcher_proxy = dbus_g_proxy_new_for_name_owner(priv->connection, - INDICATOR_CUSTOM_DBUS_ADDR, - NOTIFICATION_WATCHER_DBUS_OBJ, - NOTIFICATION_WATCHER_DBUS_IFACE, - &error); - if (error != NULL) { - g_warning("Unable to create Ayatana Watcher proxy! %s", error->message); - /* TODO: This is where we should start looking at fallbacks */ - g_error_free(error); - return; - } - - org_ayatana_indicator_application_NotificationWatcher_register_service_async(priv->watcher_proxy, "/need/a/path", register_service_cb, self); - - return; -} - -static void -register_service_cb (DBusGProxy * proxy, GError * error, gpointer data) -{ - CustomIndicatorPrivate * priv = CUSTOM_INDICATOR_GET_PRIVATE(data); - - if (error != NULL) { - g_warning("Unable to connect to the Notification Watcher: %s", error->message); - g_object_unref(G_OBJECT(priv->watcher_proxy)); - priv->watcher_proxy = NULL; - } - return; -} - - -/* ************************* */ -/* Public Functions */ -/* ************************* */ - -/** - custom_indicator_set_id: - @ci: The #CustomIndicator object to use - @id: ID to set for this indicator - - Wrapper function for property #CustomIndicator::id. -*/ -void -custom_indicator_set_id (CustomIndicator * ci, const gchar * id) -{ - GValue value = {0}; - g_value_init(&value, G_TYPE_STRING); - g_value_set_string(&value, id); - g_object_set_property(G_OBJECT(ci), PROP_ID_S, &value); - return; -} - -/** - custom_indicator_set_category: - @ci: The #CustomIndicator object to use - @category: The category to set for this indicator - - Wrapper function for property #CustomIndicator::category. -*/ -void -custom_indicator_set_category (CustomIndicator * ci, CustomIndicatorCategory category) -{ - GValue value = {0}; - g_value_init(&value, CUSTOM_INDICATOR_TYPE_INDICATOR_CATEGORY); - g_value_set_enum(&value, category); - g_object_set_property(G_OBJECT(ci), PROP_CATEGORY_ENUM_S, &value); - return; -} - -/** - custom_indicator_set_status: - @ci: The #CustomIndicator object to use - @status: The status to set for this indicator - - Wrapper function for property #CustomIndicator::status. -*/ -void -custom_indicator_set_status (CustomIndicator * ci, CustomIndicatorStatus status) -{ - GValue value = {0}; - g_value_init(&value, CUSTOM_INDICATOR_TYPE_INDICATOR_STATUS); - g_value_set_enum(&value, status); - g_object_set_property(G_OBJECT(ci), PROP_STATUS_ENUM_S, &value); - return; -} - -/** - custom_indicator_set_icon: - @ci: The #CustomIndicator object to use - @icon_name: The name of the icon to set for this indicator - - Wrapper function for property #CustomIndicator::icon. -*/ -void custom_indicator_set_icon (CustomIndicator * ci, const gchar * icon_name) -{ - GValue value = {0}; - g_value_init(&value, G_TYPE_STRING); - g_value_set_string(&value, icon_name); - g_object_set_property(G_OBJECT(ci), PROP_ICON_NAME_S, &value); - return; -} - -/** - custom_indicator_set_attention_icon: - @ci: The #CustomIndicator object to use - @icon_name: The name of the attention icon to set for this indicator - - Wrapper function for property #CustomIndicator::attention-icon. -*/ -void -custom_indicator_set_attention_icon (CustomIndicator * ci, const gchar * icon_name) -{ - GValue value = {0}; - g_value_init(&value, G_TYPE_STRING); - g_value_set_string(&value, icon_name); - g_object_set_property(G_OBJECT(ci), PROP_ATTENTION_ICON_NAME_S, &value); - return; -} - -/** - custom_indicator_set_menu: - @ci: The #CustomIndicator object to use - @menu: The object with the menu for the indicator - - Wrapper function for property #CustomIndicator::menu. -*/ -void -custom_indicator_set_menu (CustomIndicator * ci, DbusmenuServer * menu) -{ - GValue value = {0}; - g_value_init(&value, G_TYPE_OBJECT); - g_value_set_object(&value, G_OBJECT(menu)); - g_object_set_property(G_OBJECT(ci), PROP_MENU_OBJECT_S, &value); - return; -} - -/** - custom_indicator_get_id: - @ci: The #CustomIndicator object to use - - Wrapper function for property #CustomIndicator::id. - - Return value: The current ID -*/ -const gchar * -custom_indicator_get_id (CustomIndicator * ci) -{ - GValue value = {0}; - g_value_init(&value, G_TYPE_STRING); - g_object_get_property(G_OBJECT(ci), PROP_ID_S, &value); - return g_value_get_string(&value); -} - -/** - custom_indicator_get_category: - @ci: The #CustomIndicator object to use - - Wrapper function for property #CustomIndicator::category. - - Return value: The current category. -*/ -CustomIndicatorCategory -custom_indicator_get_category (CustomIndicator * ci) -{ - GValue value = {0}; - g_value_init(&value, CUSTOM_INDICATOR_TYPE_INDICATOR_CATEGORY); - g_object_get_property(G_OBJECT(ci), PROP_CATEGORY_ENUM_S, &value); - return g_value_get_enum(&value); -} - -/** - custom_indicator_get_status: - @ci: The #CustomIndicator object to use - - Wrapper function for property #CustomIndicator::status. - - Return value: The current status. -*/ -CustomIndicatorStatus -custom_indicator_get_status (CustomIndicator * ci) -{ - GValue value = {0}; - g_value_init(&value, CUSTOM_INDICATOR_TYPE_INDICATOR_STATUS); - g_object_get_property(G_OBJECT(ci), PROP_STATUS_ENUM_S, &value); - return g_value_get_enum(&value); -} - -/** - custom_indicator_get_icon: - @ci: The #CustomIndicator object to use - - Wrapper function for property #CustomIndicator::icon-name. - - Return value: The current icon name. -*/ -const gchar * -custom_indicator_get_icon (CustomIndicator * ci) -{ - GValue value = {0}; - g_value_init(&value, G_TYPE_STRING); - g_object_get_property(G_OBJECT(ci), PROP_ICON_NAME_S, &value); - return g_value_get_string(&value); -} - -/** - custom_indicator_get_attention_icon: - @ci: The #CustomIndicator object to use - - Wrapper function for property #CustomIndicator::attention-icon-name. - - Return value: The current attention icon name. -*/ -const gchar * -custom_indicator_get_attention_icon (CustomIndicator * ci) -{ - GValue value = {0}; - g_value_init(&value, G_TYPE_STRING); - g_object_get_property(G_OBJECT(ci), PROP_ATTENTION_ICON_NAME_S, &value); - return g_value_get_string(&value); -} - -/** - custom_indicator_get_menu: - @ci: The #CustomIndicator object to use - - Wrapper function for property #CustomIndicator::menu. - - Return value: The current menu being used. -*/ -DbusmenuServer * -custom_indicator_get_menu (CustomIndicator * ci) -{ - GValue value = {0}; - g_value_init(&value, G_TYPE_OBJECT); - g_object_get_property(G_OBJECT(ci), PROP_MENU_OBJECT_S, &value); - return DBUSMENU_SERVER(g_value_get_object(&value)); -} - - diff --git a/src/libappindicator/application-indicator.h b/src/libappindicator/application-indicator.h deleted file mode 100644 index 2e9045c..0000000 --- a/src/libappindicator/application-indicator.h +++ /dev/null @@ -1,142 +0,0 @@ -#ifndef __CUSTOM_INDICATOR_H__ -#define __CUSTOM_INDICATOR_H__ - -#include -#include -#include - -G_BEGIN_DECLS - -#define CUSTOM_INDICATOR_TYPE (custom_indicator_get_type ()) -#define CUSTOM_INDICATOR(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), CUSTOM_INDICATOR_TYPE, CustomIndicator)) -#define CUSTOM_INDICATOR_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), CUSTOM_INDICATOR_TYPE, CustomIndicatorClass)) -#define IS_CUSTOM_INDICATOR(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), CUSTOM_INDICATOR_TYPE)) -#define IS_CUSTOM_INDICATOR_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), CUSTOM_INDICATOR_TYPE)) -#define CUSTOM_INDICATOR_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), CUSTOM_INDICATOR_TYPE, CustomIndicatorClass)) - -#define CUSTOM_INDICATOR_SIGNAL_NEW_ICON "new-icon" -#define CUSTOM_INDICATOR_SIGNAL_NEW_ATTENTION_ICON "new-attention-icon" -#define CUSTOM_INDICATOR_SIGNAL_NEW_STATUS "new-status" -#define CUSTOM_INDICATOR_SIGNAL_CONNECTION_CHANGED "connection-changed" - -/** - CustomIndicatorCategory: - @CUSTOM_INDICATOR_CATEGORY_APPLICATION_STATUS: The indicator is used to display the status of the application. - @CUSTOM_INDICATOR_CATEGORY_COMMUNICATIONS: The application is used for communication with other people. - @CUSTOM_INDICATOR_CATEGORY_SYSTEM_SERVICES: A system indicator relating to something in the user's system. - @CUSTOM_INDICATOR_CATEGORY_HARDWARE: An indicator relating to the user's hardware. - @CUSTOM_INDICATOR_CATEGORY_OTHER: Something not defined in this enum, please don't use unless you really need it. - - The category provides grouping for the indicators so that - users can find indicators that are similar together. -*/ -typedef enum { /*< prefix=CUSTOM_INDICATOR_CATEGORY >*/ - CUSTOM_INDICATOR_CATEGORY_APPLICATION_STATUS, - CUSTOM_INDICATOR_CATEGORY_COMMUNICATIONS, - CUSTOM_INDICATOR_CATEGORY_SYSTEM_SERVICES, - CUSTOM_INDICATOR_CATEGORY_HARDWARE, - CUSTOM_INDICATOR_CATEGORY_OTHER -} CustomIndicatorCategory; - -/** - CustomIndicatorStatus: - @CUSTOM_INDICATOR_STATUS_PASSIVE: The indicator should not be shown to the user. - @CUSTOM_INDICATOR_STATUS_ACTIVE: The indicator should be shown in it's default state. - @CUSTOM_INDICATOR_STATUS_ATTENTION: The indicator should show it's attention icon. - - These are the states that the indicator can be on in - the user's panel. The indicator by default starts - in the state @CUSTOM_INDICATOR_STATUS_OFF and can be - shown by setting it to @CUSTOM_INDICATOR_STATUS_ON. -*/ -typedef enum { /*< prefix=CUSTOM_INDICATOR_STATUS >*/ - CUSTOM_INDICATOR_STATUS_PASSIVE, - CUSTOM_INDICATOR_STATUS_ACTIVE, - CUSTOM_INDICATOR_STATUS_ATTENTION -} CustomIndicatorStatus; - -typedef struct _CustomIndicator CustomIndicator; -typedef struct _CustomIndicatorClass CustomIndicatorClass; - -/** - CustomIndicatorClass: - @parent_class: Mia familia - @new_icon: Slot for #CustomIndicator::new-icon. - @new_attention_icon: Slot for #CustomIndicator::new-attention-icon. - @new_status: Slot for #CustomIndicator::new-status. - @connection_changed: Slot for #CustomIndicator::connection-changed. - @custom_indicator_reserved_1: Reserved for future use. - @custom_indicator_reserved_2: Reserved for future use. - @custom_indicator_reserved_3: Reserved for future use. - @custom_indicator_reserved_4: Reserved for future use. - - The signals and external functions that make up the #CustomIndicator - class object. -*/ -struct _CustomIndicatorClass { - /* Parent */ - GObjectClass parent_class; - - /* DBus Signals */ - void (* new_icon) (CustomIndicator * indicator, - gpointer user_data); - void (* new_attention_icon) (CustomIndicator * indicator, - gpointer user_data); - void (* new_status) (CustomIndicator * indicator, - gchar * status_string, - gpointer user_data); - - /* Local Signals */ - void (* connection_changed) (CustomIndicator * indicator, - gboolean connected, - gpointer user_data); - - /* Reserved */ - void (*custom_indicator_reserved_1)(void); - void (*custom_indicator_reserved_2)(void); - void (*custom_indicator_reserved_3)(void); - void (*custom_indicator_reserved_4)(void); -}; - -/** - CustomIndicator: - @parent: Parent object. - - A custom indicator represents the values that are needed to show a - unique status in the panel for an application. In general, applications - should try to fit in the other indicators that are available on the - panel before using this. But, sometimes it is necissary. -*/ -struct _CustomIndicator { - GObject parent; - /* None. We're a very private object. */ -}; - -/* GObject Stuff */ -GType custom_indicator_get_type (void); - -/* Set properties */ -void custom_indicator_set_id (CustomIndicator * ci, - const gchar * id); -void custom_indicator_set_category (CustomIndicator * ci, - CustomIndicatorCategory category); -void custom_indicator_set_status (CustomIndicator * ci, - CustomIndicatorStatus status); -void custom_indicator_set_icon (CustomIndicator * ci, - const gchar * icon_name); -void custom_indicator_set_attention_icon (CustomIndicator * ci, - const gchar * icon_name); -void custom_indicator_set_menu (CustomIndicator * ci, - DbusmenuServer * menu); - -/* Get properties */ -const gchar * custom_indicator_get_id (CustomIndicator * ci); -CustomIndicatorCategory custom_indicator_get_category (CustomIndicator * ci); -CustomIndicatorStatus custom_indicator_get_status (CustomIndicator * ci); -const gchar * custom_indicator_get_icon (CustomIndicator * ci); -const gchar * custom_indicator_get_attention_icon (CustomIndicator * ci); -DbusmenuServer * custom_indicator_get_menu (CustomIndicator * ci); - -G_END_DECLS - -#endif -- cgit v1.2.3 From 672b7258707f3508ca4abe5fd1adee3847af5f94 Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Mon, 30 Nov 2009 12:34:53 -0600 Subject: Massive custom to application find and replace throughout the code. --- src/libappindicator/app-indicator-enum-types.h.in | 8 +- src/libappindicator/app-indicator.c | 262 +++++++++++----------- src/libappindicator/app-indicator.h | 160 ++++++------- 3 files changed, 215 insertions(+), 215 deletions(-) (limited to 'src/libappindicator') diff --git a/src/libappindicator/app-indicator-enum-types.h.in b/src/libappindicator/app-indicator-enum-types.h.in index e037be7..1f48b41 100644 --- a/src/libappindicator/app-indicator-enum-types.h.in +++ b/src/libappindicator/app-indicator-enum-types.h.in @@ -1,6 +1,6 @@ /*** BEGIN file-header ***/ -#ifndef __CUSTOM_INDICATOR_ENUM_TYPES_H__ -#define __CUSTOM_INDICATOR_ENUM_TYPES_H__ +#ifndef __APPLICATION_INDICATOR_ENUM_TYPES_H__ +#define __APPLICATION_INDICATOR_ENUM_TYPES_H__ #include @@ -12,7 +12,7 @@ G_BEGIN_DECLS G_END_DECLS -#endif /* __CUSTOM_INDICATOR_ENUM_TYPES_H__ */ +#endif /* __APPLICATION_INDICATOR_ENUM_TYPES_H__ */ /*** END file-tail ***/ /*** BEGIN file-production ***/ @@ -28,6 +28,6 @@ G_END_DECLS Return value: A registered type for the enum */ GType @enum_name@_get_type (void) G_GNUC_CONST; -#define CUSTOM_INDICATOR_TYPE_@ENUMSHORT@ (@enum_name@_get_type()) +#define APPLICATION_INDICATOR_TYPE_@ENUMSHORT@ (@enum_name@_get_type()) /*** END value-header ***/ diff --git a/src/libappindicator/app-indicator.c b/src/libappindicator/app-indicator.c index fc2e196..da8576e 100644 --- a/src/libappindicator/app-indicator.c +++ b/src/libappindicator/app-indicator.c @@ -14,24 +14,24 @@ #include "dbus-shared.h" /** - CustomIndicatorPrivate: - @id: The ID of the indicator. Maps to CustomIndicator::id. - @category: Which category the indicator is. Maps to CustomIndicator::category. - @status: The status of the indicator. Maps to CustomIndicator::status. - @icon_name: The name of the icon to use. Maps to CustomIndicator::icon-name. - @attention_icon_name: The name of the attention icon to use. Maps to CustomIndicator::attention-icon-name. - @menu: The menu for this indicator. Maps to CustomIndicator::menu + ApplicationIndicatorPrivate: + @id: The ID of the indicator. Maps to ApplicationIndicator::id. + @category: Which category the indicator is. Maps to ApplicationIndicator::category. + @status: The status of the indicator. Maps to ApplicationIndicator::status. + @icon_name: The name of the icon to use. Maps to ApplicationIndicator::icon-name. + @attention_icon_name: The name of the attention icon to use. Maps to ApplicationIndicator::attention-icon-name. + @menu: The menu for this indicator. Maps to ApplicationIndicator::menu @watcher_proxy: The proxy connection to the watcher we're connected to. If we're not connected to one this will be #NULL. All of the private data in an instance of a - custom indicator. + application indicator. */ -typedef struct _CustomIndicatorPrivate CustomIndicatorPrivate; -struct _CustomIndicatorPrivate { +typedef struct _ApplicationIndicatorPrivate ApplicationIndicatorPrivate; +struct _ApplicationIndicatorPrivate { /* Properties */ gchar * id; - CustomIndicatorCategory category; - CustomIndicatorStatus status; + ApplicationIndicatorCategory category; + ApplicationIndicatorStatus status; gchar * icon_name; gchar * attention_icon_name; DbusmenuServer * menu; @@ -81,38 +81,38 @@ enum { #define PROP_CONNECTED_S "connected" /* Private macro, shhhh! */ -#define CUSTOM_INDICATOR_GET_PRIVATE(o) \ - (G_TYPE_INSTANCE_GET_PRIVATE ((o), CUSTOM_INDICATOR_TYPE, CustomIndicatorPrivate)) +#define APPLICATION_INDICATOR_GET_PRIVATE(o) \ + (G_TYPE_INSTANCE_GET_PRIVATE ((o), APPLICATION_INDICATOR_TYPE, ApplicationIndicatorPrivate)) /* Boiler plate */ -static void custom_indicator_class_init (CustomIndicatorClass *klass); -static void custom_indicator_init (CustomIndicator *self); -static void custom_indicator_dispose (GObject *object); -static void custom_indicator_finalize (GObject *object); +static void application_indicator_class_init (ApplicationIndicatorClass *klass); +static void application_indicator_init (ApplicationIndicator *self); +static void application_indicator_dispose (GObject *object); +static void application_indicator_finalize (GObject *object); /* Property functions */ -static void custom_indicator_set_property (GObject * object, guint prop_id, const GValue * value, GParamSpec * pspec); -static void custom_indicator_get_property (GObject * object, guint prop_id, GValue * value, GParamSpec * pspec); +static void application_indicator_set_property (GObject * object, guint prop_id, const GValue * value, GParamSpec * pspec); +static void application_indicator_get_property (GObject * object, guint prop_id, GValue * value, GParamSpec * pspec); /* Other stuff */ -static void check_connect (CustomIndicator * self); +static void check_connect (ApplicationIndicator * self); static void register_service_cb (DBusGProxy * proxy, GError * error, gpointer data); /* GObject type */ -G_DEFINE_TYPE (CustomIndicator, custom_indicator, G_TYPE_OBJECT); +G_DEFINE_TYPE (ApplicationIndicator, application_indicator, G_TYPE_OBJECT); static void -custom_indicator_class_init (CustomIndicatorClass *klass) +application_indicator_class_init (ApplicationIndicatorClass *klass) { GObjectClass *object_class = G_OBJECT_CLASS (klass); - g_type_class_add_private (klass, sizeof (CustomIndicatorPrivate)); + g_type_class_add_private (klass, sizeof (ApplicationIndicatorPrivate)); /* Clean up */ - object_class->dispose = custom_indicator_dispose; - object_class->finalize = custom_indicator_finalize; + object_class->dispose = application_indicator_dispose; + object_class->finalize = application_indicator_finalize; /* Property funcs */ - object_class->set_property = custom_indicator_set_property; - object_class->get_property = custom_indicator_get_property; + object_class->set_property = application_indicator_set_property; + object_class->get_property = application_indicator_get_property; /* Properties */ g_object_class_install_property(object_class, PROP_ID, @@ -133,8 +133,8 @@ custom_indicator_class_init (CustomIndicatorClass *klass) g_param_spec_enum(PROP_CATEGORY_ENUM_S, "Indicator Category", "The type of indicator that this represents. Please don't use 'other'. Defaults to 'Application Status'.", - CUSTOM_INDICATOR_TYPE_INDICATOR_CATEGORY, - CUSTOM_INDICATOR_CATEGORY_APPLICATION_STATUS, + APPLICATION_INDICATOR_TYPE_INDICATOR_CATEGORY, + APPLICATION_INDICATOR_CATEGORY_APPLICATION_STATUS, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); g_object_class_install_property(object_class, PROP_STATUS, @@ -148,8 +148,8 @@ custom_indicator_class_init (CustomIndicatorClass *klass) g_param_spec_enum(PROP_STATUS_ENUM_S, "Indicator Status", "Whether the indicator is shown or requests attention. Defaults to 'off'.", - CUSTOM_INDICATOR_TYPE_INDICATOR_STATUS, - CUSTOM_INDICATOR_STATUS_PASSIVE, + APPLICATION_INDICATOR_TYPE_INDICATOR_STATUS, + APPLICATION_INDICATOR_STATUS_PASSIVE, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); g_object_class_install_property(object_class, PROP_ICON_NAME, @@ -191,81 +191,81 @@ custom_indicator_class_init (CustomIndicatorClass *klass) /* Signals */ /** - CustomIndicator::new-icon: - @arg0: The #CustomIndicator object + ApplicationIndicator::new-icon: + @arg0: The #ApplicationIndicator object Signaled when there is a new icon set for the object. */ - signals[NEW_ICON] = g_signal_new (CUSTOM_INDICATOR_SIGNAL_NEW_ICON, + signals[NEW_ICON] = g_signal_new (APPLICATION_INDICATOR_SIGNAL_NEW_ICON, G_TYPE_FROM_CLASS(klass), G_SIGNAL_RUN_LAST, - G_STRUCT_OFFSET (CustomIndicatorClass, new_icon), + G_STRUCT_OFFSET (ApplicationIndicatorClass, new_icon), NULL, NULL, g_cclosure_marshal_VOID__VOID, G_TYPE_NONE, 0, G_TYPE_NONE); /** - CustomIndicator::new-attention-icon: - @arg0: The #CustomIndicator object + ApplicationIndicator::new-attention-icon: + @arg0: The #ApplicationIndicator object Signaled when there is a new attention icon set for the object. */ - signals[NEW_ATTENTION_ICON] = g_signal_new (CUSTOM_INDICATOR_SIGNAL_NEW_ATTENTION_ICON, + signals[NEW_ATTENTION_ICON] = g_signal_new (APPLICATION_INDICATOR_SIGNAL_NEW_ATTENTION_ICON, G_TYPE_FROM_CLASS(klass), G_SIGNAL_RUN_LAST, - G_STRUCT_OFFSET (CustomIndicatorClass, new_attention_icon), + G_STRUCT_OFFSET (ApplicationIndicatorClass, new_attention_icon), NULL, NULL, g_cclosure_marshal_VOID__VOID, G_TYPE_NONE, 0, G_TYPE_NONE); /** - CustomIndicator::new-status: - @arg0: The #CustomIndicator object - @arg1: The string value of the #CustomIndicatorStatus enum. + ApplicationIndicator::new-status: + @arg0: The #ApplicationIndicator object + @arg1: The string value of the #ApplicationIndicatorStatus enum. Signaled when the status of the indicator changes. */ - signals[NEW_STATUS] = g_signal_new (CUSTOM_INDICATOR_SIGNAL_NEW_STATUS, + signals[NEW_STATUS] = g_signal_new (APPLICATION_INDICATOR_SIGNAL_NEW_STATUS, G_TYPE_FROM_CLASS(klass), G_SIGNAL_RUN_LAST, - G_STRUCT_OFFSET (CustomIndicatorClass, new_status), + G_STRUCT_OFFSET (ApplicationIndicatorClass, new_status), NULL, NULL, g_cclosure_marshal_VOID__STRING, G_TYPE_NONE, 1, G_TYPE_STRING, G_TYPE_NONE); /** - CustomIndicator::connection-changed: - @arg0: The #CustomIndicator object + ApplicationIndicator::connection-changed: + @arg0: The #ApplicationIndicator object @arg1: Whether we're connected or not Signaled when we connect to a watcher, or when it drops away. */ - signals[CONNECTION_CHANGED] = g_signal_new (CUSTOM_INDICATOR_SIGNAL_CONNECTION_CHANGED, + signals[CONNECTION_CHANGED] = g_signal_new (APPLICATION_INDICATOR_SIGNAL_CONNECTION_CHANGED, G_TYPE_FROM_CLASS(klass), G_SIGNAL_RUN_LAST, - G_STRUCT_OFFSET (CustomIndicatorClass, connection_changed), + G_STRUCT_OFFSET (ApplicationIndicatorClass, connection_changed), NULL, NULL, g_cclosure_marshal_VOID__BOOLEAN, G_TYPE_NONE, 1, G_TYPE_BOOLEAN, G_TYPE_NONE); /* Initialize the object as a DBus type */ - dbus_g_object_type_install_info(CUSTOM_INDICATOR_TYPE, + dbus_g_object_type_install_info(APPLICATION_INDICATOR_TYPE, &dbus_glib__notification_item_server_object_info); return; } static void -custom_indicator_init (CustomIndicator *self) +application_indicator_init (ApplicationIndicator *self) { - CustomIndicatorPrivate * priv = CUSTOM_INDICATOR_GET_PRIVATE(self); + ApplicationIndicatorPrivate * priv = APPLICATION_INDICATOR_GET_PRIVATE(self); priv->id = NULL; - priv->category = CUSTOM_INDICATOR_CATEGORY_OTHER; - priv->status = CUSTOM_INDICATOR_STATUS_PASSIVE; + priv->category = APPLICATION_INDICATOR_CATEGORY_OTHER; + priv->status = APPLICATION_INDICATOR_STATUS_PASSIVE; priv->icon_name = NULL; priv->attention_icon_name = NULL; priv->menu = NULL; @@ -277,7 +277,7 @@ custom_indicator_init (CustomIndicator *self) GError * error = NULL; priv->connection = dbus_g_bus_get(DBUS_BUS_SESSION, &error); if (error != NULL) { - g_error("Unable to connect to the session bus when creating custom indicator: %s", error->message); + g_error("Unable to connect to the session bus when creating application indicator: %s", error->message); g_error_free(error); return; } @@ -292,15 +292,15 @@ custom_indicator_init (CustomIndicator *self) /* Free all objects, make sure that all the dbus signals are sent out before we shut this down. */ static void -custom_indicator_dispose (GObject *object) +application_indicator_dispose (GObject *object) { - CustomIndicator * self = CUSTOM_INDICATOR(object); + ApplicationIndicator * self = APPLICATION_INDICATOR(object); g_return_if_fail(self != NULL); - CustomIndicatorPrivate * priv = CUSTOM_INDICATOR_GET_PRIVATE(self); + ApplicationIndicatorPrivate * priv = APPLICATION_INDICATOR_GET_PRIVATE(self); - if (priv->status != CUSTOM_INDICATOR_STATUS_PASSIVE) { - custom_indicator_set_status(self, CUSTOM_INDICATOR_STATUS_PASSIVE); + if (priv->status != APPLICATION_INDICATOR_STATUS_PASSIVE) { + application_indicator_set_status(self, APPLICATION_INDICATOR_STATUS_PASSIVE); } if (priv->menu != NULL) { @@ -314,22 +314,22 @@ custom_indicator_dispose (GObject *object) priv->watcher_proxy = NULL; } - G_OBJECT_CLASS (custom_indicator_parent_class)->dispose (object); + G_OBJECT_CLASS (application_indicator_parent_class)->dispose (object); return; } /* Free all of the memory that we could be using in the object. */ static void -custom_indicator_finalize (GObject *object) +application_indicator_finalize (GObject *object) { - CustomIndicator * self = CUSTOM_INDICATOR(object); + ApplicationIndicator * self = APPLICATION_INDICATOR(object); g_return_if_fail(self != NULL); - CustomIndicatorPrivate * priv = CUSTOM_INDICATOR_GET_PRIVATE(self); + ApplicationIndicatorPrivate * priv = APPLICATION_INDICATOR_GET_PRIVATE(self); - if (priv->status != CUSTOM_INDICATOR_STATUS_PASSIVE) { - g_warning("Finalizing Custom Status with the status set to: %d", priv->status); + if (priv->status != APPLICATION_INDICATOR_STATUS_PASSIVE) { + g_warning("Finalizing Application Status with the status set to: %d", priv->status); } if (priv->id != NULL) { @@ -347,7 +347,7 @@ custom_indicator_finalize (GObject *object) priv->attention_icon_name = NULL; } - G_OBJECT_CLASS (custom_indicator_parent_class)->finalize (object); + G_OBJECT_CLASS (application_indicator_parent_class)->finalize (object); return; } @@ -355,12 +355,12 @@ custom_indicator_finalize (GObject *object) /* Set some properties */ static void -custom_indicator_set_property (GObject * object, guint prop_id, const GValue * value, GParamSpec * pspec) +application_indicator_set_property (GObject * object, guint prop_id, const GValue * value, GParamSpec * pspec) { - CustomIndicator * self = CUSTOM_INDICATOR(object); + ApplicationIndicator * self = APPLICATION_INDICATOR(object); g_return_if_fail(self != NULL); - CustomIndicatorPrivate * priv = CUSTOM_INDICATOR_GET_PRIVATE(self); + ApplicationIndicatorPrivate * priv = APPLICATION_INDICATOR_GET_PRIVATE(self); switch (prop_id) { /* *********************** */ @@ -474,12 +474,12 @@ custom_indicator_set_property (GObject * object, guint prop_id, const GValue * v /* Function to fill our value with the property it's requesting. */ static void -custom_indicator_get_property (GObject * object, guint prop_id, GValue * value, GParamSpec * pspec) +application_indicator_get_property (GObject * object, guint prop_id, GValue * value, GParamSpec * pspec) { - CustomIndicator * self = CUSTOM_INDICATOR(object); + ApplicationIndicator * self = APPLICATION_INDICATOR(object); g_return_if_fail(self != NULL); - CustomIndicatorPrivate * priv = CUSTOM_INDICATOR_GET_PRIVATE(self); + ApplicationIndicatorPrivate * priv = APPLICATION_INDICATOR_GET_PRIVATE(self); switch (prop_id) { /* *********************** */ @@ -593,9 +593,9 @@ custom_indicator_get_property (GObject * object, guint prop_id, GValue * value, connect to things. If we do, and we're not connected, it connects for us. */ static void -check_connect (CustomIndicator * self) +check_connect (ApplicationIndicator * self) { - CustomIndicatorPrivate * priv = CUSTOM_INDICATOR_GET_PRIVATE(self); + ApplicationIndicatorPrivate * priv = APPLICATION_INDICATOR_GET_PRIVATE(self); /* We're alreadying connecting or trying to connect. */ if (priv->watcher_proxy != NULL) return; @@ -607,7 +607,7 @@ check_connect (CustomIndicator * self) GError * error = NULL; priv->watcher_proxy = dbus_g_proxy_new_for_name_owner(priv->connection, - INDICATOR_CUSTOM_DBUS_ADDR, + INDICATOR_APPLICATION_DBUS_ADDR, NOTIFICATION_WATCHER_DBUS_OBJ, NOTIFICATION_WATCHER_DBUS_IFACE, &error); @@ -626,7 +626,7 @@ check_connect (CustomIndicator * self) static void register_service_cb (DBusGProxy * proxy, GError * error, gpointer data) { - CustomIndicatorPrivate * priv = CUSTOM_INDICATOR_GET_PRIVATE(data); + ApplicationIndicatorPrivate * priv = APPLICATION_INDICATOR_GET_PRIVATE(data); if (error != NULL) { g_warning("Unable to connect to the Notification Watcher: %s", error->message); @@ -642,14 +642,14 @@ register_service_cb (DBusGProxy * proxy, GError * error, gpointer data) /* ************************* */ /** - custom_indicator_set_id: - @ci: The #CustomIndicator object to use + application_indicator_set_id: + @ci: The #ApplicationIndicator object to use @id: ID to set for this indicator - Wrapper function for property #CustomIndicator::id. + Wrapper function for property #ApplicationIndicator::id. */ void -custom_indicator_set_id (CustomIndicator * ci, const gchar * id) +application_indicator_set_id (ApplicationIndicator * ci, const gchar * id) { GValue value = {0}; g_value_init(&value, G_TYPE_STRING); @@ -659,47 +659,47 @@ custom_indicator_set_id (CustomIndicator * ci, const gchar * id) } /** - custom_indicator_set_category: - @ci: The #CustomIndicator object to use + application_indicator_set_category: + @ci: The #ApplicationIndicator object to use @category: The category to set for this indicator - Wrapper function for property #CustomIndicator::category. + Wrapper function for property #ApplicationIndicator::category. */ void -custom_indicator_set_category (CustomIndicator * ci, CustomIndicatorCategory category) +application_indicator_set_category (ApplicationIndicator * ci, ApplicationIndicatorCategory category) { GValue value = {0}; - g_value_init(&value, CUSTOM_INDICATOR_TYPE_INDICATOR_CATEGORY); + g_value_init(&value, APPLICATION_INDICATOR_TYPE_INDICATOR_CATEGORY); g_value_set_enum(&value, category); g_object_set_property(G_OBJECT(ci), PROP_CATEGORY_ENUM_S, &value); return; } /** - custom_indicator_set_status: - @ci: The #CustomIndicator object to use + application_indicator_set_status: + @ci: The #ApplicationIndicator object to use @status: The status to set for this indicator - Wrapper function for property #CustomIndicator::status. + Wrapper function for property #ApplicationIndicator::status. */ void -custom_indicator_set_status (CustomIndicator * ci, CustomIndicatorStatus status) +application_indicator_set_status (ApplicationIndicator * ci, ApplicationIndicatorStatus status) { GValue value = {0}; - g_value_init(&value, CUSTOM_INDICATOR_TYPE_INDICATOR_STATUS); + g_value_init(&value, APPLICATION_INDICATOR_TYPE_INDICATOR_STATUS); g_value_set_enum(&value, status); g_object_set_property(G_OBJECT(ci), PROP_STATUS_ENUM_S, &value); return; } /** - custom_indicator_set_icon: - @ci: The #CustomIndicator object to use + application_indicator_set_icon: + @ci: The #ApplicationIndicator object to use @icon_name: The name of the icon to set for this indicator - Wrapper function for property #CustomIndicator::icon. + Wrapper function for property #ApplicationIndicator::icon. */ -void custom_indicator_set_icon (CustomIndicator * ci, const gchar * icon_name) +void application_indicator_set_icon (ApplicationIndicator * ci, const gchar * icon_name) { GValue value = {0}; g_value_init(&value, G_TYPE_STRING); @@ -709,14 +709,14 @@ void custom_indicator_set_icon (CustomIndicator * ci, const gchar * icon_name) } /** - custom_indicator_set_attention_icon: - @ci: The #CustomIndicator object to use + application_indicator_set_attention_icon: + @ci: The #ApplicationIndicator object to use @icon_name: The name of the attention icon to set for this indicator - Wrapper function for property #CustomIndicator::attention-icon. + Wrapper function for property #ApplicationIndicator::attention-icon. */ void -custom_indicator_set_attention_icon (CustomIndicator * ci, const gchar * icon_name) +application_indicator_set_attention_icon (ApplicationIndicator * ci, const gchar * icon_name) { GValue value = {0}; g_value_init(&value, G_TYPE_STRING); @@ -726,14 +726,14 @@ custom_indicator_set_attention_icon (CustomIndicator * ci, const gchar * icon_na } /** - custom_indicator_set_menu: - @ci: The #CustomIndicator object to use + application_indicator_set_menu: + @ci: The #ApplicationIndicator object to use @menu: The object with the menu for the indicator - Wrapper function for property #CustomIndicator::menu. + Wrapper function for property #ApplicationIndicator::menu. */ void -custom_indicator_set_menu (CustomIndicator * ci, DbusmenuServer * menu) +application_indicator_set_menu (ApplicationIndicator * ci, DbusmenuServer * menu) { GValue value = {0}; g_value_init(&value, G_TYPE_OBJECT); @@ -743,15 +743,15 @@ custom_indicator_set_menu (CustomIndicator * ci, DbusmenuServer * menu) } /** - custom_indicator_get_id: - @ci: The #CustomIndicator object to use + application_indicator_get_id: + @ci: The #ApplicationIndicator object to use - Wrapper function for property #CustomIndicator::id. + Wrapper function for property #ApplicationIndicator::id. Return value: The current ID */ const gchar * -custom_indicator_get_id (CustomIndicator * ci) +application_indicator_get_id (ApplicationIndicator * ci) { GValue value = {0}; g_value_init(&value, G_TYPE_STRING); @@ -760,49 +760,49 @@ custom_indicator_get_id (CustomIndicator * ci) } /** - custom_indicator_get_category: - @ci: The #CustomIndicator object to use + application_indicator_get_category: + @ci: The #ApplicationIndicator object to use - Wrapper function for property #CustomIndicator::category. + Wrapper function for property #ApplicationIndicator::category. Return value: The current category. */ -CustomIndicatorCategory -custom_indicator_get_category (CustomIndicator * ci) +ApplicationIndicatorCategory +application_indicator_get_category (ApplicationIndicator * ci) { GValue value = {0}; - g_value_init(&value, CUSTOM_INDICATOR_TYPE_INDICATOR_CATEGORY); + g_value_init(&value, APPLICATION_INDICATOR_TYPE_INDICATOR_CATEGORY); g_object_get_property(G_OBJECT(ci), PROP_CATEGORY_ENUM_S, &value); return g_value_get_enum(&value); } /** - custom_indicator_get_status: - @ci: The #CustomIndicator object to use + application_indicator_get_status: + @ci: The #ApplicationIndicator object to use - Wrapper function for property #CustomIndicator::status. + Wrapper function for property #ApplicationIndicator::status. Return value: The current status. */ -CustomIndicatorStatus -custom_indicator_get_status (CustomIndicator * ci) +ApplicationIndicatorStatus +application_indicator_get_status (ApplicationIndicator * ci) { GValue value = {0}; - g_value_init(&value, CUSTOM_INDICATOR_TYPE_INDICATOR_STATUS); + g_value_init(&value, APPLICATION_INDICATOR_TYPE_INDICATOR_STATUS); g_object_get_property(G_OBJECT(ci), PROP_STATUS_ENUM_S, &value); return g_value_get_enum(&value); } /** - custom_indicator_get_icon: - @ci: The #CustomIndicator object to use + application_indicator_get_icon: + @ci: The #ApplicationIndicator object to use - Wrapper function for property #CustomIndicator::icon-name. + Wrapper function for property #ApplicationIndicator::icon-name. Return value: The current icon name. */ const gchar * -custom_indicator_get_icon (CustomIndicator * ci) +application_indicator_get_icon (ApplicationIndicator * ci) { GValue value = {0}; g_value_init(&value, G_TYPE_STRING); @@ -811,15 +811,15 @@ custom_indicator_get_icon (CustomIndicator * ci) } /** - custom_indicator_get_attention_icon: - @ci: The #CustomIndicator object to use + application_indicator_get_attention_icon: + @ci: The #ApplicationIndicator object to use - Wrapper function for property #CustomIndicator::attention-icon-name. + Wrapper function for property #ApplicationIndicator::attention-icon-name. Return value: The current attention icon name. */ const gchar * -custom_indicator_get_attention_icon (CustomIndicator * ci) +application_indicator_get_attention_icon (ApplicationIndicator * ci) { GValue value = {0}; g_value_init(&value, G_TYPE_STRING); @@ -828,15 +828,15 @@ custom_indicator_get_attention_icon (CustomIndicator * ci) } /** - custom_indicator_get_menu: - @ci: The #CustomIndicator object to use + application_indicator_get_menu: + @ci: The #ApplicationIndicator object to use - Wrapper function for property #CustomIndicator::menu. + Wrapper function for property #ApplicationIndicator::menu. Return value: The current menu being used. */ DbusmenuServer * -custom_indicator_get_menu (CustomIndicator * ci) +application_indicator_get_menu (ApplicationIndicator * ci) { GValue value = {0}; g_value_init(&value, G_TYPE_OBJECT); diff --git a/src/libappindicator/app-indicator.h b/src/libappindicator/app-indicator.h index 2e9045c..01b7239 100644 --- a/src/libappindicator/app-indicator.h +++ b/src/libappindicator/app-indicator.h @@ -1,5 +1,5 @@ -#ifndef __CUSTOM_INDICATOR_H__ -#define __CUSTOM_INDICATOR_H__ +#ifndef __APPLICATION_INDICATOR_H__ +#define __APPLICATION_INDICATOR_H__ #include #include @@ -7,135 +7,135 @@ G_BEGIN_DECLS -#define CUSTOM_INDICATOR_TYPE (custom_indicator_get_type ()) -#define CUSTOM_INDICATOR(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), CUSTOM_INDICATOR_TYPE, CustomIndicator)) -#define CUSTOM_INDICATOR_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), CUSTOM_INDICATOR_TYPE, CustomIndicatorClass)) -#define IS_CUSTOM_INDICATOR(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), CUSTOM_INDICATOR_TYPE)) -#define IS_CUSTOM_INDICATOR_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), CUSTOM_INDICATOR_TYPE)) -#define CUSTOM_INDICATOR_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), CUSTOM_INDICATOR_TYPE, CustomIndicatorClass)) +#define APPLICATION_INDICATOR_TYPE (application_indicator_get_type ()) +#define APPLICATION_INDICATOR(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), APPLICATION_INDICATOR_TYPE, ApplicationIndicator)) +#define APPLICATION_INDICATOR_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), APPLICATION_INDICATOR_TYPE, ApplicationIndicatorClass)) +#define IS_APPLICATION_INDICATOR(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), APPLICATION_INDICATOR_TYPE)) +#define IS_APPLICATION_INDICATOR_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), APPLICATION_INDICATOR_TYPE)) +#define APPLICATION_INDICATOR_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), APPLICATION_INDICATOR_TYPE, ApplicationIndicatorClass)) -#define CUSTOM_INDICATOR_SIGNAL_NEW_ICON "new-icon" -#define CUSTOM_INDICATOR_SIGNAL_NEW_ATTENTION_ICON "new-attention-icon" -#define CUSTOM_INDICATOR_SIGNAL_NEW_STATUS "new-status" -#define CUSTOM_INDICATOR_SIGNAL_CONNECTION_CHANGED "connection-changed" +#define APPLICATION_INDICATOR_SIGNAL_NEW_ICON "new-icon" +#define APPLICATION_INDICATOR_SIGNAL_NEW_ATTENTION_ICON "new-attention-icon" +#define APPLICATION_INDICATOR_SIGNAL_NEW_STATUS "new-status" +#define APPLICATION_INDICATOR_SIGNAL_CONNECTION_CHANGED "connection-changed" /** - CustomIndicatorCategory: - @CUSTOM_INDICATOR_CATEGORY_APPLICATION_STATUS: The indicator is used to display the status of the application. - @CUSTOM_INDICATOR_CATEGORY_COMMUNICATIONS: The application is used for communication with other people. - @CUSTOM_INDICATOR_CATEGORY_SYSTEM_SERVICES: A system indicator relating to something in the user's system. - @CUSTOM_INDICATOR_CATEGORY_HARDWARE: An indicator relating to the user's hardware. - @CUSTOM_INDICATOR_CATEGORY_OTHER: Something not defined in this enum, please don't use unless you really need it. + ApplicationIndicatorCategory: + @APPLICATION_INDICATOR_CATEGORY_APPLICATION_STATUS: The indicator is used to display the status of the application. + @APPLICATION_INDICATOR_CATEGORY_COMMUNICATIONS: The application is used for communication with other people. + @APPLICATION_INDICATOR_CATEGORY_SYSTEM_SERVICES: A system indicator relating to something in the user's system. + @APPLICATION_INDICATOR_CATEGORY_HARDWARE: An indicator relating to the user's hardware. + @APPLICATION_INDICATOR_CATEGORY_OTHER: Something not defined in this enum, please don't use unless you really need it. The category provides grouping for the indicators so that users can find indicators that are similar together. */ -typedef enum { /*< prefix=CUSTOM_INDICATOR_CATEGORY >*/ - CUSTOM_INDICATOR_CATEGORY_APPLICATION_STATUS, - CUSTOM_INDICATOR_CATEGORY_COMMUNICATIONS, - CUSTOM_INDICATOR_CATEGORY_SYSTEM_SERVICES, - CUSTOM_INDICATOR_CATEGORY_HARDWARE, - CUSTOM_INDICATOR_CATEGORY_OTHER -} CustomIndicatorCategory; +typedef enum { /*< prefix=APPLICATION_INDICATOR_CATEGORY >*/ + APPLICATION_INDICATOR_CATEGORY_APPLICATION_STATUS, + APPLICATION_INDICATOR_CATEGORY_COMMUNICATIONS, + APPLICATION_INDICATOR_CATEGORY_SYSTEM_SERVICES, + APPLICATION_INDICATOR_CATEGORY_HARDWARE, + APPLICATION_INDICATOR_CATEGORY_OTHER +} ApplicationIndicatorCategory; /** - CustomIndicatorStatus: - @CUSTOM_INDICATOR_STATUS_PASSIVE: The indicator should not be shown to the user. - @CUSTOM_INDICATOR_STATUS_ACTIVE: The indicator should be shown in it's default state. - @CUSTOM_INDICATOR_STATUS_ATTENTION: The indicator should show it's attention icon. + ApplicationIndicatorStatus: + @APPLICATION_INDICATOR_STATUS_PASSIVE: The indicator should not be shown to the user. + @APPLICATION_INDICATOR_STATUS_ACTIVE: The indicator should be shown in it's default state. + @APPLICATION_INDICATOR_STATUS_ATTENTION: The indicator should show it's attention icon. These are the states that the indicator can be on in the user's panel. The indicator by default starts - in the state @CUSTOM_INDICATOR_STATUS_OFF and can be - shown by setting it to @CUSTOM_INDICATOR_STATUS_ON. + in the state @APPLICATION_INDICATOR_STATUS_OFF and can be + shown by setting it to @APPLICATION_INDICATOR_STATUS_ON. */ -typedef enum { /*< prefix=CUSTOM_INDICATOR_STATUS >*/ - CUSTOM_INDICATOR_STATUS_PASSIVE, - CUSTOM_INDICATOR_STATUS_ACTIVE, - CUSTOM_INDICATOR_STATUS_ATTENTION -} CustomIndicatorStatus; +typedef enum { /*< prefix=APPLICATION_INDICATOR_STATUS >*/ + APPLICATION_INDICATOR_STATUS_PASSIVE, + APPLICATION_INDICATOR_STATUS_ACTIVE, + APPLICATION_INDICATOR_STATUS_ATTENTION +} ApplicationIndicatorStatus; -typedef struct _CustomIndicator CustomIndicator; -typedef struct _CustomIndicatorClass CustomIndicatorClass; +typedef struct _ApplicationIndicator ApplicationIndicator; +typedef struct _ApplicationIndicatorClass ApplicationIndicatorClass; /** - CustomIndicatorClass: + ApplicationIndicatorClass: @parent_class: Mia familia - @new_icon: Slot for #CustomIndicator::new-icon. - @new_attention_icon: Slot for #CustomIndicator::new-attention-icon. - @new_status: Slot for #CustomIndicator::new-status. - @connection_changed: Slot for #CustomIndicator::connection-changed. - @custom_indicator_reserved_1: Reserved for future use. - @custom_indicator_reserved_2: Reserved for future use. - @custom_indicator_reserved_3: Reserved for future use. - @custom_indicator_reserved_4: Reserved for future use. - - The signals and external functions that make up the #CustomIndicator + @new_icon: Slot for #ApplicationIndicator::new-icon. + @new_attention_icon: Slot for #ApplicationIndicator::new-attention-icon. + @new_status: Slot for #ApplicationIndicator::new-status. + @connection_changed: Slot for #ApplicationIndicator::connection-changed. + @application_indicator_reserved_1: Reserved for future use. + @application_indicator_reserved_2: Reserved for future use. + @application_indicator_reserved_3: Reserved for future use. + @application_indicator_reserved_4: Reserved for future use. + + The signals and external functions that make up the #ApplicationIndicator class object. */ -struct _CustomIndicatorClass { +struct _ApplicationIndicatorClass { /* Parent */ GObjectClass parent_class; /* DBus Signals */ - void (* new_icon) (CustomIndicator * indicator, + void (* new_icon) (ApplicationIndicator * indicator, gpointer user_data); - void (* new_attention_icon) (CustomIndicator * indicator, + void (* new_attention_icon) (ApplicationIndicator * indicator, gpointer user_data); - void (* new_status) (CustomIndicator * indicator, + void (* new_status) (ApplicationIndicator * indicator, gchar * status_string, gpointer user_data); /* Local Signals */ - void (* connection_changed) (CustomIndicator * indicator, + void (* connection_changed) (ApplicationIndicator * indicator, gboolean connected, gpointer user_data); /* Reserved */ - void (*custom_indicator_reserved_1)(void); - void (*custom_indicator_reserved_2)(void); - void (*custom_indicator_reserved_3)(void); - void (*custom_indicator_reserved_4)(void); + void (*application_indicator_reserved_1)(void); + void (*application_indicator_reserved_2)(void); + void (*application_indicator_reserved_3)(void); + void (*application_indicator_reserved_4)(void); }; /** - CustomIndicator: + ApplicationIndicator: @parent: Parent object. - A custom indicator represents the values that are needed to show a + A application indicator represents the values that are needed to show a unique status in the panel for an application. In general, applications should try to fit in the other indicators that are available on the panel before using this. But, sometimes it is necissary. */ -struct _CustomIndicator { +struct _ApplicationIndicator { GObject parent; /* None. We're a very private object. */ }; /* GObject Stuff */ -GType custom_indicator_get_type (void); +GType application_indicator_get_type (void); /* Set properties */ -void custom_indicator_set_id (CustomIndicator * ci, - const gchar * id); -void custom_indicator_set_category (CustomIndicator * ci, - CustomIndicatorCategory category); -void custom_indicator_set_status (CustomIndicator * ci, - CustomIndicatorStatus status); -void custom_indicator_set_icon (CustomIndicator * ci, - const gchar * icon_name); -void custom_indicator_set_attention_icon (CustomIndicator * ci, - const gchar * icon_name); -void custom_indicator_set_menu (CustomIndicator * ci, - DbusmenuServer * menu); +void application_indicator_set_id (ApplicationIndicator * ci, + const gchar * id); +void application_indicator_set_category (ApplicationIndicator * ci, + ApplicationIndicatorCategory category); +void application_indicator_set_status (ApplicationIndicator * ci, + ApplicationIndicatorStatus status); +void application_indicator_set_icon (ApplicationIndicator * ci, + const gchar * icon_name); +void application_indicator_set_attention_icon (ApplicationIndicator * ci, + const gchar * icon_name); +void application_indicator_set_menu (ApplicationIndicator * ci, + DbusmenuServer * menu); /* Get properties */ -const gchar * custom_indicator_get_id (CustomIndicator * ci); -CustomIndicatorCategory custom_indicator_get_category (CustomIndicator * ci); -CustomIndicatorStatus custom_indicator_get_status (CustomIndicator * ci); -const gchar * custom_indicator_get_icon (CustomIndicator * ci); -const gchar * custom_indicator_get_attention_icon (CustomIndicator * ci); -DbusmenuServer * custom_indicator_get_menu (CustomIndicator * ci); +const gchar * application_indicator_get_id (ApplicationIndicator * ci); +ApplicationIndicatorCategory application_indicator_get_category (ApplicationIndicator * ci); +ApplicationIndicatorStatus application_indicator_get_status (ApplicationIndicator * ci); +const gchar * application_indicator_get_icon (ApplicationIndicator * ci); +const gchar * application_indicator_get_attention_icon (ApplicationIndicator * ci); +DbusmenuServer * application_indicator_get_menu (ApplicationIndicator * ci); G_END_DECLS -- cgit v1.2.3 From a7c70796808179a0033a01a436156f5d5087d39a Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Mon, 30 Nov 2009 13:11:17 -0600 Subject: Shortening the object names as well. People hate typing. --- src/libappindicator/app-indicator-enum-types.h.in | 8 +- src/libappindicator/app-indicator.c | 254 +++++++++++----------- src/libappindicator/app-indicator.h | 158 +++++++------- 3 files changed, 210 insertions(+), 210 deletions(-) (limited to 'src/libappindicator') diff --git a/src/libappindicator/app-indicator-enum-types.h.in b/src/libappindicator/app-indicator-enum-types.h.in index 1f48b41..b79446d 100644 --- a/src/libappindicator/app-indicator-enum-types.h.in +++ b/src/libappindicator/app-indicator-enum-types.h.in @@ -1,6 +1,6 @@ /*** BEGIN file-header ***/ -#ifndef __APPLICATION_INDICATOR_ENUM_TYPES_H__ -#define __APPLICATION_INDICATOR_ENUM_TYPES_H__ +#ifndef __APP_INDICATOR_ENUM_TYPES_H__ +#define __APP_INDICATOR_ENUM_TYPES_H__ #include @@ -12,7 +12,7 @@ G_BEGIN_DECLS G_END_DECLS -#endif /* __APPLICATION_INDICATOR_ENUM_TYPES_H__ */ +#endif /* __APP_INDICATOR_ENUM_TYPES_H__ */ /*** END file-tail ***/ /*** BEGIN file-production ***/ @@ -28,6 +28,6 @@ G_END_DECLS Return value: A registered type for the enum */ GType @enum_name@_get_type (void) G_GNUC_CONST; -#define APPLICATION_INDICATOR_TYPE_@ENUMSHORT@ (@enum_name@_get_type()) +#define APP_INDICATOR_TYPE_@ENUMSHORT@ (@enum_name@_get_type()) /*** END value-header ***/ diff --git a/src/libappindicator/app-indicator.c b/src/libappindicator/app-indicator.c index da8576e..89f77db 100644 --- a/src/libappindicator/app-indicator.c +++ b/src/libappindicator/app-indicator.c @@ -14,24 +14,24 @@ #include "dbus-shared.h" /** - ApplicationIndicatorPrivate: - @id: The ID of the indicator. Maps to ApplicationIndicator::id. - @category: Which category the indicator is. Maps to ApplicationIndicator::category. - @status: The status of the indicator. Maps to ApplicationIndicator::status. - @icon_name: The name of the icon to use. Maps to ApplicationIndicator::icon-name. - @attention_icon_name: The name of the attention icon to use. Maps to ApplicationIndicator::attention-icon-name. - @menu: The menu for this indicator. Maps to ApplicationIndicator::menu + AppIndicatorPrivate: + @id: The ID of the indicator. Maps to AppIndicator::id. + @category: Which category the indicator is. Maps to AppIndicator::category. + @status: The status of the indicator. Maps to AppIndicator::status. + @icon_name: The name of the icon to use. Maps to AppIndicator::icon-name. + @attention_icon_name: The name of the attention icon to use. Maps to AppIndicator::attention-icon-name. + @menu: The menu for this indicator. Maps to AppIndicator::menu @watcher_proxy: The proxy connection to the watcher we're connected to. If we're not connected to one this will be #NULL. All of the private data in an instance of a application indicator. */ -typedef struct _ApplicationIndicatorPrivate ApplicationIndicatorPrivate; -struct _ApplicationIndicatorPrivate { +typedef struct _AppIndicatorPrivate AppIndicatorPrivate; +struct _AppIndicatorPrivate { /* Properties */ gchar * id; - ApplicationIndicatorCategory category; - ApplicationIndicatorStatus status; + AppIndicatorCategory category; + AppIndicatorStatus status; gchar * icon_name; gchar * attention_icon_name; DbusmenuServer * menu; @@ -81,38 +81,38 @@ enum { #define PROP_CONNECTED_S "connected" /* Private macro, shhhh! */ -#define APPLICATION_INDICATOR_GET_PRIVATE(o) \ - (G_TYPE_INSTANCE_GET_PRIVATE ((o), APPLICATION_INDICATOR_TYPE, ApplicationIndicatorPrivate)) +#define APP_INDICATOR_GET_PRIVATE(o) \ + (G_TYPE_INSTANCE_GET_PRIVATE ((o), APP_INDICATOR_TYPE, AppIndicatorPrivate)) /* Boiler plate */ -static void application_indicator_class_init (ApplicationIndicatorClass *klass); -static void application_indicator_init (ApplicationIndicator *self); -static void application_indicator_dispose (GObject *object); -static void application_indicator_finalize (GObject *object); +static void app_indicator_class_init (AppIndicatorClass *klass); +static void app_indicator_init (AppIndicator *self); +static void app_indicator_dispose (GObject *object); +static void app_indicator_finalize (GObject *object); /* Property functions */ -static void application_indicator_set_property (GObject * object, guint prop_id, const GValue * value, GParamSpec * pspec); -static void application_indicator_get_property (GObject * object, guint prop_id, GValue * value, GParamSpec * pspec); +static void app_indicator_set_property (GObject * object, guint prop_id, const GValue * value, GParamSpec * pspec); +static void app_indicator_get_property (GObject * object, guint prop_id, GValue * value, GParamSpec * pspec); /* Other stuff */ -static void check_connect (ApplicationIndicator * self); +static void check_connect (AppIndicator * self); static void register_service_cb (DBusGProxy * proxy, GError * error, gpointer data); /* GObject type */ -G_DEFINE_TYPE (ApplicationIndicator, application_indicator, G_TYPE_OBJECT); +G_DEFINE_TYPE (AppIndicator, app_indicator, G_TYPE_OBJECT); static void -application_indicator_class_init (ApplicationIndicatorClass *klass) +app_indicator_class_init (AppIndicatorClass *klass) { GObjectClass *object_class = G_OBJECT_CLASS (klass); - g_type_class_add_private (klass, sizeof (ApplicationIndicatorPrivate)); + g_type_class_add_private (klass, sizeof (AppIndicatorPrivate)); /* Clean up */ - object_class->dispose = application_indicator_dispose; - object_class->finalize = application_indicator_finalize; + object_class->dispose = app_indicator_dispose; + object_class->finalize = app_indicator_finalize; /* Property funcs */ - object_class->set_property = application_indicator_set_property; - object_class->get_property = application_indicator_get_property; + object_class->set_property = app_indicator_set_property; + object_class->get_property = app_indicator_get_property; /* Properties */ g_object_class_install_property(object_class, PROP_ID, @@ -133,8 +133,8 @@ application_indicator_class_init (ApplicationIndicatorClass *klass) g_param_spec_enum(PROP_CATEGORY_ENUM_S, "Indicator Category", "The type of indicator that this represents. Please don't use 'other'. Defaults to 'Application Status'.", - APPLICATION_INDICATOR_TYPE_INDICATOR_CATEGORY, - APPLICATION_INDICATOR_CATEGORY_APPLICATION_STATUS, + APP_INDICATOR_TYPE_INDICATOR_CATEGORY, + APP_INDICATOR_CATEGORY_APPLICATION_STATUS, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); g_object_class_install_property(object_class, PROP_STATUS, @@ -148,8 +148,8 @@ application_indicator_class_init (ApplicationIndicatorClass *klass) g_param_spec_enum(PROP_STATUS_ENUM_S, "Indicator Status", "Whether the indicator is shown or requests attention. Defaults to 'off'.", - APPLICATION_INDICATOR_TYPE_INDICATOR_STATUS, - APPLICATION_INDICATOR_STATUS_PASSIVE, + APP_INDICATOR_TYPE_INDICATOR_STATUS, + APP_INDICATOR_STATUS_PASSIVE, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); g_object_class_install_property(object_class, PROP_ICON_NAME, @@ -191,81 +191,81 @@ application_indicator_class_init (ApplicationIndicatorClass *klass) /* Signals */ /** - ApplicationIndicator::new-icon: - @arg0: The #ApplicationIndicator object + AppIndicator::new-icon: + @arg0: The #AppIndicator object Signaled when there is a new icon set for the object. */ - signals[NEW_ICON] = g_signal_new (APPLICATION_INDICATOR_SIGNAL_NEW_ICON, + signals[NEW_ICON] = g_signal_new (APP_INDICATOR_SIGNAL_NEW_ICON, G_TYPE_FROM_CLASS(klass), G_SIGNAL_RUN_LAST, - G_STRUCT_OFFSET (ApplicationIndicatorClass, new_icon), + G_STRUCT_OFFSET (AppIndicatorClass, new_icon), NULL, NULL, g_cclosure_marshal_VOID__VOID, G_TYPE_NONE, 0, G_TYPE_NONE); /** - ApplicationIndicator::new-attention-icon: - @arg0: The #ApplicationIndicator object + AppIndicator::new-attention-icon: + @arg0: The #AppIndicator object Signaled when there is a new attention icon set for the object. */ - signals[NEW_ATTENTION_ICON] = g_signal_new (APPLICATION_INDICATOR_SIGNAL_NEW_ATTENTION_ICON, + signals[NEW_ATTENTION_ICON] = g_signal_new (APP_INDICATOR_SIGNAL_NEW_ATTENTION_ICON, G_TYPE_FROM_CLASS(klass), G_SIGNAL_RUN_LAST, - G_STRUCT_OFFSET (ApplicationIndicatorClass, new_attention_icon), + G_STRUCT_OFFSET (AppIndicatorClass, new_attention_icon), NULL, NULL, g_cclosure_marshal_VOID__VOID, G_TYPE_NONE, 0, G_TYPE_NONE); /** - ApplicationIndicator::new-status: - @arg0: The #ApplicationIndicator object - @arg1: The string value of the #ApplicationIndicatorStatus enum. + AppIndicator::new-status: + @arg0: The #AppIndicator object + @arg1: The string value of the #AppIndicatorStatus enum. Signaled when the status of the indicator changes. */ - signals[NEW_STATUS] = g_signal_new (APPLICATION_INDICATOR_SIGNAL_NEW_STATUS, + signals[NEW_STATUS] = g_signal_new (APP_INDICATOR_SIGNAL_NEW_STATUS, G_TYPE_FROM_CLASS(klass), G_SIGNAL_RUN_LAST, - G_STRUCT_OFFSET (ApplicationIndicatorClass, new_status), + G_STRUCT_OFFSET (AppIndicatorClass, new_status), NULL, NULL, g_cclosure_marshal_VOID__STRING, G_TYPE_NONE, 1, G_TYPE_STRING, G_TYPE_NONE); /** - ApplicationIndicator::connection-changed: - @arg0: The #ApplicationIndicator object + AppIndicator::connection-changed: + @arg0: The #AppIndicator object @arg1: Whether we're connected or not Signaled when we connect to a watcher, or when it drops away. */ - signals[CONNECTION_CHANGED] = g_signal_new (APPLICATION_INDICATOR_SIGNAL_CONNECTION_CHANGED, + signals[CONNECTION_CHANGED] = g_signal_new (APP_INDICATOR_SIGNAL_CONNECTION_CHANGED, G_TYPE_FROM_CLASS(klass), G_SIGNAL_RUN_LAST, - G_STRUCT_OFFSET (ApplicationIndicatorClass, connection_changed), + G_STRUCT_OFFSET (AppIndicatorClass, connection_changed), NULL, NULL, g_cclosure_marshal_VOID__BOOLEAN, G_TYPE_NONE, 1, G_TYPE_BOOLEAN, G_TYPE_NONE); /* Initialize the object as a DBus type */ - dbus_g_object_type_install_info(APPLICATION_INDICATOR_TYPE, + dbus_g_object_type_install_info(APP_INDICATOR_TYPE, &dbus_glib__notification_item_server_object_info); return; } static void -application_indicator_init (ApplicationIndicator *self) +app_indicator_init (AppIndicator *self) { - ApplicationIndicatorPrivate * priv = APPLICATION_INDICATOR_GET_PRIVATE(self); + AppIndicatorPrivate * priv = APP_INDICATOR_GET_PRIVATE(self); priv->id = NULL; - priv->category = APPLICATION_INDICATOR_CATEGORY_OTHER; - priv->status = APPLICATION_INDICATOR_STATUS_PASSIVE; + priv->category = APP_INDICATOR_CATEGORY_OTHER; + priv->status = APP_INDICATOR_STATUS_PASSIVE; priv->icon_name = NULL; priv->attention_icon_name = NULL; priv->menu = NULL; @@ -292,15 +292,15 @@ application_indicator_init (ApplicationIndicator *self) /* Free all objects, make sure that all the dbus signals are sent out before we shut this down. */ static void -application_indicator_dispose (GObject *object) +app_indicator_dispose (GObject *object) { - ApplicationIndicator * self = APPLICATION_INDICATOR(object); + AppIndicator * self = APP_INDICATOR(object); g_return_if_fail(self != NULL); - ApplicationIndicatorPrivate * priv = APPLICATION_INDICATOR_GET_PRIVATE(self); + AppIndicatorPrivate * priv = APP_INDICATOR_GET_PRIVATE(self); - if (priv->status != APPLICATION_INDICATOR_STATUS_PASSIVE) { - application_indicator_set_status(self, APPLICATION_INDICATOR_STATUS_PASSIVE); + if (priv->status != APP_INDICATOR_STATUS_PASSIVE) { + app_indicator_set_status(self, APP_INDICATOR_STATUS_PASSIVE); } if (priv->menu != NULL) { @@ -314,21 +314,21 @@ application_indicator_dispose (GObject *object) priv->watcher_proxy = NULL; } - G_OBJECT_CLASS (application_indicator_parent_class)->dispose (object); + G_OBJECT_CLASS (app_indicator_parent_class)->dispose (object); return; } /* Free all of the memory that we could be using in the object. */ static void -application_indicator_finalize (GObject *object) +app_indicator_finalize (GObject *object) { - ApplicationIndicator * self = APPLICATION_INDICATOR(object); + AppIndicator * self = APP_INDICATOR(object); g_return_if_fail(self != NULL); - ApplicationIndicatorPrivate * priv = APPLICATION_INDICATOR_GET_PRIVATE(self); + AppIndicatorPrivate * priv = APP_INDICATOR_GET_PRIVATE(self); - if (priv->status != APPLICATION_INDICATOR_STATUS_PASSIVE) { + if (priv->status != APP_INDICATOR_STATUS_PASSIVE) { g_warning("Finalizing Application Status with the status set to: %d", priv->status); } @@ -347,7 +347,7 @@ application_indicator_finalize (GObject *object) priv->attention_icon_name = NULL; } - G_OBJECT_CLASS (application_indicator_parent_class)->finalize (object); + G_OBJECT_CLASS (app_indicator_parent_class)->finalize (object); return; } @@ -355,12 +355,12 @@ application_indicator_finalize (GObject *object) /* Set some properties */ static void -application_indicator_set_property (GObject * object, guint prop_id, const GValue * value, GParamSpec * pspec) +app_indicator_set_property (GObject * object, guint prop_id, const GValue * value, GParamSpec * pspec) { - ApplicationIndicator * self = APPLICATION_INDICATOR(object); + AppIndicator * self = APP_INDICATOR(object); g_return_if_fail(self != NULL); - ApplicationIndicatorPrivate * priv = APPLICATION_INDICATOR_GET_PRIVATE(self); + AppIndicatorPrivate * priv = APP_INDICATOR_GET_PRIVATE(self); switch (prop_id) { /* *********************** */ @@ -474,12 +474,12 @@ application_indicator_set_property (GObject * object, guint prop_id, const GValu /* Function to fill our value with the property it's requesting. */ static void -application_indicator_get_property (GObject * object, guint prop_id, GValue * value, GParamSpec * pspec) +app_indicator_get_property (GObject * object, guint prop_id, GValue * value, GParamSpec * pspec) { - ApplicationIndicator * self = APPLICATION_INDICATOR(object); + AppIndicator * self = APP_INDICATOR(object); g_return_if_fail(self != NULL); - ApplicationIndicatorPrivate * priv = APPLICATION_INDICATOR_GET_PRIVATE(self); + AppIndicatorPrivate * priv = APP_INDICATOR_GET_PRIVATE(self); switch (prop_id) { /* *********************** */ @@ -593,9 +593,9 @@ application_indicator_get_property (GObject * object, guint prop_id, GValue * va connect to things. If we do, and we're not connected, it connects for us. */ static void -check_connect (ApplicationIndicator * self) +check_connect (AppIndicator * self) { - ApplicationIndicatorPrivate * priv = APPLICATION_INDICATOR_GET_PRIVATE(self); + AppIndicatorPrivate * priv = APP_INDICATOR_GET_PRIVATE(self); /* We're alreadying connecting or trying to connect. */ if (priv->watcher_proxy != NULL) return; @@ -626,7 +626,7 @@ check_connect (ApplicationIndicator * self) static void register_service_cb (DBusGProxy * proxy, GError * error, gpointer data) { - ApplicationIndicatorPrivate * priv = APPLICATION_INDICATOR_GET_PRIVATE(data); + AppIndicatorPrivate * priv = APP_INDICATOR_GET_PRIVATE(data); if (error != NULL) { g_warning("Unable to connect to the Notification Watcher: %s", error->message); @@ -642,14 +642,14 @@ register_service_cb (DBusGProxy * proxy, GError * error, gpointer data) /* ************************* */ /** - application_indicator_set_id: - @ci: The #ApplicationIndicator object to use + app_indicator_set_id: + @ci: The #AppIndicator object to use @id: ID to set for this indicator - Wrapper function for property #ApplicationIndicator::id. + Wrapper function for property #AppIndicator::id. */ void -application_indicator_set_id (ApplicationIndicator * ci, const gchar * id) +app_indicator_set_id (AppIndicator * ci, const gchar * id) { GValue value = {0}; g_value_init(&value, G_TYPE_STRING); @@ -659,47 +659,47 @@ application_indicator_set_id (ApplicationIndicator * ci, const gchar * id) } /** - application_indicator_set_category: - @ci: The #ApplicationIndicator object to use + app_indicator_set_category: + @ci: The #AppIndicator object to use @category: The category to set for this indicator - Wrapper function for property #ApplicationIndicator::category. + Wrapper function for property #AppIndicator::category. */ void -application_indicator_set_category (ApplicationIndicator * ci, ApplicationIndicatorCategory category) +app_indicator_set_category (AppIndicator * ci, AppIndicatorCategory category) { GValue value = {0}; - g_value_init(&value, APPLICATION_INDICATOR_TYPE_INDICATOR_CATEGORY); + g_value_init(&value, APP_INDICATOR_TYPE_INDICATOR_CATEGORY); g_value_set_enum(&value, category); g_object_set_property(G_OBJECT(ci), PROP_CATEGORY_ENUM_S, &value); return; } /** - application_indicator_set_status: - @ci: The #ApplicationIndicator object to use + app_indicator_set_status: + @ci: The #AppIndicator object to use @status: The status to set for this indicator - Wrapper function for property #ApplicationIndicator::status. + Wrapper function for property #AppIndicator::status. */ void -application_indicator_set_status (ApplicationIndicator * ci, ApplicationIndicatorStatus status) +app_indicator_set_status (AppIndicator * ci, AppIndicatorStatus status) { GValue value = {0}; - g_value_init(&value, APPLICATION_INDICATOR_TYPE_INDICATOR_STATUS); + g_value_init(&value, APP_INDICATOR_TYPE_INDICATOR_STATUS); g_value_set_enum(&value, status); g_object_set_property(G_OBJECT(ci), PROP_STATUS_ENUM_S, &value); return; } /** - application_indicator_set_icon: - @ci: The #ApplicationIndicator object to use + app_indicator_set_icon: + @ci: The #AppIndicator object to use @icon_name: The name of the icon to set for this indicator - Wrapper function for property #ApplicationIndicator::icon. + Wrapper function for property #AppIndicator::icon. */ -void application_indicator_set_icon (ApplicationIndicator * ci, const gchar * icon_name) +void app_indicator_set_icon (AppIndicator * ci, const gchar * icon_name) { GValue value = {0}; g_value_init(&value, G_TYPE_STRING); @@ -709,14 +709,14 @@ void application_indicator_set_icon (ApplicationIndicator * ci, const gchar * ic } /** - application_indicator_set_attention_icon: - @ci: The #ApplicationIndicator object to use + app_indicator_set_attention_icon: + @ci: The #AppIndicator object to use @icon_name: The name of the attention icon to set for this indicator - Wrapper function for property #ApplicationIndicator::attention-icon. + Wrapper function for property #AppIndicator::attention-icon. */ void -application_indicator_set_attention_icon (ApplicationIndicator * ci, const gchar * icon_name) +app_indicator_set_attention_icon (AppIndicator * ci, const gchar * icon_name) { GValue value = {0}; g_value_init(&value, G_TYPE_STRING); @@ -726,14 +726,14 @@ application_indicator_set_attention_icon (ApplicationIndicator * ci, const gchar } /** - application_indicator_set_menu: - @ci: The #ApplicationIndicator object to use + app_indicator_set_menu: + @ci: The #AppIndicator object to use @menu: The object with the menu for the indicator - Wrapper function for property #ApplicationIndicator::menu. + Wrapper function for property #AppIndicator::menu. */ void -application_indicator_set_menu (ApplicationIndicator * ci, DbusmenuServer * menu) +app_indicator_set_menu (AppIndicator * ci, DbusmenuServer * menu) { GValue value = {0}; g_value_init(&value, G_TYPE_OBJECT); @@ -743,15 +743,15 @@ application_indicator_set_menu (ApplicationIndicator * ci, DbusmenuServer * menu } /** - application_indicator_get_id: - @ci: The #ApplicationIndicator object to use + app_indicator_get_id: + @ci: The #AppIndicator object to use - Wrapper function for property #ApplicationIndicator::id. + Wrapper function for property #AppIndicator::id. Return value: The current ID */ const gchar * -application_indicator_get_id (ApplicationIndicator * ci) +app_indicator_get_id (AppIndicator * ci) { GValue value = {0}; g_value_init(&value, G_TYPE_STRING); @@ -760,49 +760,49 @@ application_indicator_get_id (ApplicationIndicator * ci) } /** - application_indicator_get_category: - @ci: The #ApplicationIndicator object to use + app_indicator_get_category: + @ci: The #AppIndicator object to use - Wrapper function for property #ApplicationIndicator::category. + Wrapper function for property #AppIndicator::category. Return value: The current category. */ -ApplicationIndicatorCategory -application_indicator_get_category (ApplicationIndicator * ci) +AppIndicatorCategory +app_indicator_get_category (AppIndicator * ci) { GValue value = {0}; - g_value_init(&value, APPLICATION_INDICATOR_TYPE_INDICATOR_CATEGORY); + g_value_init(&value, APP_INDICATOR_TYPE_INDICATOR_CATEGORY); g_object_get_property(G_OBJECT(ci), PROP_CATEGORY_ENUM_S, &value); return g_value_get_enum(&value); } /** - application_indicator_get_status: - @ci: The #ApplicationIndicator object to use + app_indicator_get_status: + @ci: The #AppIndicator object to use - Wrapper function for property #ApplicationIndicator::status. + Wrapper function for property #AppIndicator::status. Return value: The current status. */ -ApplicationIndicatorStatus -application_indicator_get_status (ApplicationIndicator * ci) +AppIndicatorStatus +app_indicator_get_status (AppIndicator * ci) { GValue value = {0}; - g_value_init(&value, APPLICATION_INDICATOR_TYPE_INDICATOR_STATUS); + g_value_init(&value, APP_INDICATOR_TYPE_INDICATOR_STATUS); g_object_get_property(G_OBJECT(ci), PROP_STATUS_ENUM_S, &value); return g_value_get_enum(&value); } /** - application_indicator_get_icon: - @ci: The #ApplicationIndicator object to use + app_indicator_get_icon: + @ci: The #AppIndicator object to use - Wrapper function for property #ApplicationIndicator::icon-name. + Wrapper function for property #AppIndicator::icon-name. Return value: The current icon name. */ const gchar * -application_indicator_get_icon (ApplicationIndicator * ci) +app_indicator_get_icon (AppIndicator * ci) { GValue value = {0}; g_value_init(&value, G_TYPE_STRING); @@ -811,15 +811,15 @@ application_indicator_get_icon (ApplicationIndicator * ci) } /** - application_indicator_get_attention_icon: - @ci: The #ApplicationIndicator object to use + app_indicator_get_attention_icon: + @ci: The #AppIndicator object to use - Wrapper function for property #ApplicationIndicator::attention-icon-name. + Wrapper function for property #AppIndicator::attention-icon-name. Return value: The current attention icon name. */ const gchar * -application_indicator_get_attention_icon (ApplicationIndicator * ci) +app_indicator_get_attention_icon (AppIndicator * ci) { GValue value = {0}; g_value_init(&value, G_TYPE_STRING); @@ -828,15 +828,15 @@ application_indicator_get_attention_icon (ApplicationIndicator * ci) } /** - application_indicator_get_menu: - @ci: The #ApplicationIndicator object to use + app_indicator_get_menu: + @ci: The #AppIndicator object to use - Wrapper function for property #ApplicationIndicator::menu. + Wrapper function for property #AppIndicator::menu. Return value: The current menu being used. */ DbusmenuServer * -application_indicator_get_menu (ApplicationIndicator * ci) +app_indicator_get_menu (AppIndicator * ci) { GValue value = {0}; g_value_init(&value, G_TYPE_OBJECT); diff --git a/src/libappindicator/app-indicator.h b/src/libappindicator/app-indicator.h index 01b7239..c86d638 100644 --- a/src/libappindicator/app-indicator.h +++ b/src/libappindicator/app-indicator.h @@ -1,5 +1,5 @@ -#ifndef __APPLICATION_INDICATOR_H__ -#define __APPLICATION_INDICATOR_H__ +#ifndef __APP_INDICATOR_H__ +#define __APP_INDICATOR_H__ #include #include @@ -7,99 +7,99 @@ G_BEGIN_DECLS -#define APPLICATION_INDICATOR_TYPE (application_indicator_get_type ()) -#define APPLICATION_INDICATOR(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), APPLICATION_INDICATOR_TYPE, ApplicationIndicator)) -#define APPLICATION_INDICATOR_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), APPLICATION_INDICATOR_TYPE, ApplicationIndicatorClass)) -#define IS_APPLICATION_INDICATOR(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), APPLICATION_INDICATOR_TYPE)) -#define IS_APPLICATION_INDICATOR_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), APPLICATION_INDICATOR_TYPE)) -#define APPLICATION_INDICATOR_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), APPLICATION_INDICATOR_TYPE, ApplicationIndicatorClass)) +#define APP_INDICATOR_TYPE (app_indicator_get_type ()) +#define APP_INDICATOR(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), APP_INDICATOR_TYPE, AppIndicator)) +#define APP_INDICATOR_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), APP_INDICATOR_TYPE, AppIndicatorClass)) +#define IS_APP_INDICATOR(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), APP_INDICATOR_TYPE)) +#define IS_APP_INDICATOR_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), APP_INDICATOR_TYPE)) +#define APP_INDICATOR_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), APP_INDICATOR_TYPE, AppIndicatorClass)) -#define APPLICATION_INDICATOR_SIGNAL_NEW_ICON "new-icon" -#define APPLICATION_INDICATOR_SIGNAL_NEW_ATTENTION_ICON "new-attention-icon" -#define APPLICATION_INDICATOR_SIGNAL_NEW_STATUS "new-status" -#define APPLICATION_INDICATOR_SIGNAL_CONNECTION_CHANGED "connection-changed" +#define APP_INDICATOR_SIGNAL_NEW_ICON "new-icon" +#define APP_INDICATOR_SIGNAL_NEW_ATTENTION_ICON "new-attention-icon" +#define APP_INDICATOR_SIGNAL_NEW_STATUS "new-status" +#define APP_INDICATOR_SIGNAL_CONNECTION_CHANGED "connection-changed" /** - ApplicationIndicatorCategory: - @APPLICATION_INDICATOR_CATEGORY_APPLICATION_STATUS: The indicator is used to display the status of the application. - @APPLICATION_INDICATOR_CATEGORY_COMMUNICATIONS: The application is used for communication with other people. - @APPLICATION_INDICATOR_CATEGORY_SYSTEM_SERVICES: A system indicator relating to something in the user's system. - @APPLICATION_INDICATOR_CATEGORY_HARDWARE: An indicator relating to the user's hardware. - @APPLICATION_INDICATOR_CATEGORY_OTHER: Something not defined in this enum, please don't use unless you really need it. + AppIndicatorCategory: + @APP_INDICATOR_CATEGORY_APPLICATION_STATUS: The indicator is used to display the status of the application. + @APP_INDICATOR_CATEGORY_COMMUNICATIONS: The application is used for communication with other people. + @APP_INDICATOR_CATEGORY_SYSTEM_SERVICES: A system indicator relating to something in the user's system. + @APP_INDICATOR_CATEGORY_HARDWARE: An indicator relating to the user's hardware. + @APP_INDICATOR_CATEGORY_OTHER: Something not defined in this enum, please don't use unless you really need it. The category provides grouping for the indicators so that users can find indicators that are similar together. */ -typedef enum { /*< prefix=APPLICATION_INDICATOR_CATEGORY >*/ - APPLICATION_INDICATOR_CATEGORY_APPLICATION_STATUS, - APPLICATION_INDICATOR_CATEGORY_COMMUNICATIONS, - APPLICATION_INDICATOR_CATEGORY_SYSTEM_SERVICES, - APPLICATION_INDICATOR_CATEGORY_HARDWARE, - APPLICATION_INDICATOR_CATEGORY_OTHER -} ApplicationIndicatorCategory; +typedef enum { /*< prefix=APP_INDICATOR_CATEGORY >*/ + APP_INDICATOR_CATEGORY_APPLICATION_STATUS, + APP_INDICATOR_CATEGORY_COMMUNICATIONS, + APP_INDICATOR_CATEGORY_SYSTEM_SERVICES, + APP_INDICATOR_CATEGORY_HARDWARE, + APP_INDICATOR_CATEGORY_OTHER +} AppIndicatorCategory; /** - ApplicationIndicatorStatus: - @APPLICATION_INDICATOR_STATUS_PASSIVE: The indicator should not be shown to the user. - @APPLICATION_INDICATOR_STATUS_ACTIVE: The indicator should be shown in it's default state. - @APPLICATION_INDICATOR_STATUS_ATTENTION: The indicator should show it's attention icon. + AppIndicatorStatus: + @APP_INDICATOR_STATUS_PASSIVE: The indicator should not be shown to the user. + @APP_INDICATOR_STATUS_ACTIVE: The indicator should be shown in it's default state. + @APP_INDICATOR_STATUS_ATTENTION: The indicator should show it's attention icon. These are the states that the indicator can be on in the user's panel. The indicator by default starts - in the state @APPLICATION_INDICATOR_STATUS_OFF and can be - shown by setting it to @APPLICATION_INDICATOR_STATUS_ON. + in the state @APP_INDICATOR_STATUS_OFF and can be + shown by setting it to @APP_INDICATOR_STATUS_ON. */ -typedef enum { /*< prefix=APPLICATION_INDICATOR_STATUS >*/ - APPLICATION_INDICATOR_STATUS_PASSIVE, - APPLICATION_INDICATOR_STATUS_ACTIVE, - APPLICATION_INDICATOR_STATUS_ATTENTION -} ApplicationIndicatorStatus; +typedef enum { /*< prefix=APP_INDICATOR_STATUS >*/ + APP_INDICATOR_STATUS_PASSIVE, + APP_INDICATOR_STATUS_ACTIVE, + APP_INDICATOR_STATUS_ATTENTION +} AppIndicatorStatus; -typedef struct _ApplicationIndicator ApplicationIndicator; -typedef struct _ApplicationIndicatorClass ApplicationIndicatorClass; +typedef struct _AppIndicator AppIndicator; +typedef struct _AppIndicatorClass AppIndicatorClass; /** - ApplicationIndicatorClass: + AppIndicatorClass: @parent_class: Mia familia - @new_icon: Slot for #ApplicationIndicator::new-icon. - @new_attention_icon: Slot for #ApplicationIndicator::new-attention-icon. - @new_status: Slot for #ApplicationIndicator::new-status. - @connection_changed: Slot for #ApplicationIndicator::connection-changed. - @application_indicator_reserved_1: Reserved for future use. - @application_indicator_reserved_2: Reserved for future use. - @application_indicator_reserved_3: Reserved for future use. - @application_indicator_reserved_4: Reserved for future use. - - The signals and external functions that make up the #ApplicationIndicator + @new_icon: Slot for #AppIndicator::new-icon. + @new_attention_icon: Slot for #AppIndicator::new-attention-icon. + @new_status: Slot for #AppIndicator::new-status. + @connection_changed: Slot for #AppIndicator::connection-changed. + @app_indicator_reserved_1: Reserved for future use. + @app_indicator_reserved_2: Reserved for future use. + @app_indicator_reserved_3: Reserved for future use. + @app_indicator_reserved_4: Reserved for future use. + + The signals and external functions that make up the #AppIndicator class object. */ -struct _ApplicationIndicatorClass { +struct _AppIndicatorClass { /* Parent */ GObjectClass parent_class; /* DBus Signals */ - void (* new_icon) (ApplicationIndicator * indicator, + void (* new_icon) (AppIndicator * indicator, gpointer user_data); - void (* new_attention_icon) (ApplicationIndicator * indicator, + void (* new_attention_icon) (AppIndicator * indicator, gpointer user_data); - void (* new_status) (ApplicationIndicator * indicator, + void (* new_status) (AppIndicator * indicator, gchar * status_string, gpointer user_data); /* Local Signals */ - void (* connection_changed) (ApplicationIndicator * indicator, + void (* connection_changed) (AppIndicator * indicator, gboolean connected, gpointer user_data); /* Reserved */ - void (*application_indicator_reserved_1)(void); - void (*application_indicator_reserved_2)(void); - void (*application_indicator_reserved_3)(void); - void (*application_indicator_reserved_4)(void); + void (*app_indicator_reserved_1)(void); + void (*app_indicator_reserved_2)(void); + void (*app_indicator_reserved_3)(void); + void (*app_indicator_reserved_4)(void); }; /** - ApplicationIndicator: + AppIndicator: @parent: Parent object. A application indicator represents the values that are needed to show a @@ -107,35 +107,35 @@ struct _ApplicationIndicatorClass { should try to fit in the other indicators that are available on the panel before using this. But, sometimes it is necissary. */ -struct _ApplicationIndicator { +struct _AppIndicator { GObject parent; /* None. We're a very private object. */ }; /* GObject Stuff */ -GType application_indicator_get_type (void); +GType app_indicator_get_type (void); /* Set properties */ -void application_indicator_set_id (ApplicationIndicator * ci, - const gchar * id); -void application_indicator_set_category (ApplicationIndicator * ci, - ApplicationIndicatorCategory category); -void application_indicator_set_status (ApplicationIndicator * ci, - ApplicationIndicatorStatus status); -void application_indicator_set_icon (ApplicationIndicator * ci, - const gchar * icon_name); -void application_indicator_set_attention_icon (ApplicationIndicator * ci, - const gchar * icon_name); -void application_indicator_set_menu (ApplicationIndicator * ci, - DbusmenuServer * menu); +void app_indicator_set_id (AppIndicator * ci, + const gchar * id); +void app_indicator_set_category (AppIndicator * ci, + AppIndicatorCategory category); +void app_indicator_set_status (AppIndicator * ci, + AppIndicatorStatus status); +void app_indicator_set_icon (AppIndicator * ci, + const gchar * icon_name); +void app_indicator_set_attention_icon (AppIndicator * ci, + const gchar * icon_name); +void app_indicator_set_menu (AppIndicator * ci, + DbusmenuServer * menu); /* Get properties */ -const gchar * application_indicator_get_id (ApplicationIndicator * ci); -ApplicationIndicatorCategory application_indicator_get_category (ApplicationIndicator * ci); -ApplicationIndicatorStatus application_indicator_get_status (ApplicationIndicator * ci); -const gchar * application_indicator_get_icon (ApplicationIndicator * ci); -const gchar * application_indicator_get_attention_icon (ApplicationIndicator * ci); -DbusmenuServer * application_indicator_get_menu (ApplicationIndicator * ci); +const gchar * app_indicator_get_id (AppIndicator * ci); +AppIndicatorCategory app_indicator_get_category (AppIndicator * ci); +AppIndicatorStatus app_indicator_get_status (AppIndicator * ci); +const gchar * app_indicator_get_icon (AppIndicator * ci); +const gchar * app_indicator_get_attention_icon (AppIndicator * ci); +DbusmenuServer * app_indicator_get_menu (AppIndicator * ci); G_END_DECLS -- cgit v1.2.3