aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTed Gould <ted@canonical.com>2009-10-19 14:03:12 -0500
committerTed Gould <ted@canonical.com>2009-10-19 14:03:12 -0500
commit6da6b6b7cef68a66cfd0b382e68df462d7b4eb8d (patch)
treee3043613df495b2139e15d57ee5680a4008e2546
parent9e25a774c4efc46057eecb1b5c38340691df71ed (diff)
downloadlibayatana-appindicator-6da6b6b7cef68a66cfd0b382e68df462d7b4eb8d.tar.gz
libayatana-appindicator-6da6b6b7cef68a66cfd0b382e68df462d7b4eb8d.tar.bz2
libayatana-appindicator-6da6b6b7cef68a66cfd0b382e68df462d7b4eb8d.zip
Wow, properties. The properties system in gobject is a little insane.
-rw-r--r--src/libcustomindicator/custom-indicator.c52
1 files changed, 50 insertions, 2 deletions
diff --git a/src/libcustomindicator/custom-indicator.c b/src/libcustomindicator/custom-indicator.c
index bbf5210..7fb8fb8 100644
--- a/src/libcustomindicator/custom-indicator.c
+++ b/src/libcustomindicator/custom-indicator.c
@@ -2,6 +2,8 @@
#include "config.h"
#endif
+#include "libdbusmenu-glib/server.h"
+
#include "libcustomindicator/custom-indicator.h"
#include "libcustomindicator/custom-indicator-enum-types.h"
@@ -10,6 +12,8 @@ struct _CustomIndicatorPrivate {
int placeholder;
};
+/* Enum for the properties so that they can be quickly
+ found and looked up. */
enum properties {
PROP_0,
PROP_ID,
@@ -20,6 +24,7 @@ enum properties {
PROP_MENU
};
+/* The strings so that they can be slowly looked up. */
#define PROP_ID_S "id"
#define PROP_CATEGORY_S "category"
#define PROP_STATUS_S "status"
@@ -27,16 +32,20 @@ enum properties {
#define PROP_ATTENTION_ICON_NAME_S "attention-icon-name"
#define PROP_MENU_S "menu"
+/* Private macro, shhhh! */
#define CUSTOM_INDICATOR_GET_PRIVATE(o) \
-(G_TYPE_INSTANCE_GET_PRIVATE ((o), CUSTOM_INDICATOR_TYPE, CustomIndicatorPrivate))
+ (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);
+/* GObject type */
G_DEFINE_TYPE (CustomIndicator, custom_indicator, G_TYPE_OBJECT);
static void
@@ -46,20 +55,59 @@ custom_indicator_class_init (CustomIndicatorClass *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_enum(PROP_CATEGORY_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_enum(PROP_STATUS_S,
"Indicator Status",
- "Whether the indicator is shown or requests attention.",
+ "Whether the indicator is shown or requests attention. Defaults to 'off'.",
CUSTOM_INDICATOR_TYPE_INDICATOR_STATUS,
CUSTOM_INDICATOR_STATUS_OFF,
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_object(PROP_MENU_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));
+
return;
}