From 03077752f8a7b86e1008ca85d726690b0c8fac2f Mon Sep 17 00:00:00 2001 From: Eitan Isaacson Date: Wed, 8 Apr 2009 14:25:50 +0300 Subject: gtypified the interests enum. --- libindicate/Makefile.am | 44 ++++++++++++++++++++++++++++++++++++++++++-- libindicate/interests.h | 5 ++--- libindicate/server.h | 4 ---- 3 files changed, 44 insertions(+), 9 deletions(-) (limited to 'libindicate') diff --git a/libindicate/Makefile.am b/libindicate/Makefile.am index c1900a6..91072f7 100644 --- a/libindicate/Makefile.am +++ b/libindicate/Makefile.am @@ -1,3 +1,6 @@ +MARSHAL_PREFIX = indicate_marshal +MARSHAL_FILE = indicate-marshal +ENUM_FILE = indicate-enum-types INCLUDES= \ -DG_LOG_DOMAIN=\"libindicate\" @@ -14,7 +17,9 @@ BUILT_SOURCES = \ dbus-listener-server.h \ dbus-listener-client.h \ listener-marshal.c \ - listener-marshal.h + listener-marshal.h \ + $(ENUM_FILE).h \ + $(ENUM_FILE).c lib_LTLIBRARIES = \ libindicate.la @@ -26,7 +31,8 @@ indicate_headers = \ indicator-message.h \ listener.h \ server.h \ - interests.h + interests.h \ + $(ENUM_FILE).h libindicateinclude_HEADERS = \ $(indicate_headers) @@ -37,6 +43,7 @@ libindicate_la_SOURCES = \ dbus-indicate-client.h \ dbus-listener-server.h \ dbus-listener-client.h \ + indicate-enum-types.c \ server.c \ listener.c \ listener-marshal.c \ @@ -97,6 +104,39 @@ listener-marshal.c: $(srcdir)/listener-marshal.list pkgconfig_DATA = indicate.pc pkgconfigdir = $(libdir)/pkgconfig +$(ENUM_FILE).h: s-enum-types-h + @true +s-enum-types-h: $(indicate_headers) Makefile + ( cd $(srcdir) && glib-mkenums \ + --fhead "#ifndef _INDICATE_ENUM_TYPES_H_\n#define _INDICATE_ENUM_TYPES_H_\n\n#include \n\nG_BEGIN_DECLS\n" \ + --fprod "/* enumerations from \"@filename@\" */\n" \ + --vhead "GType @enum_name@_get_type(void);\n#define INDICATE_TYPE_@ENUMSHORT@ (@enum_name@_get_type())\n" \ + --ftail "G_END_DECLS\n\n#endif /* _INDICATE_ENUM_TYPES_H_ */" \ + interests.h ) > tmp-$(ENUM_FILE).h \ + && (cmp -s tmp-$(ENUM_FILE).h $(ENUM_FILE).h || cp tmp-$(ENUM_FILE).h $(ENUM_FILE).h ) \ + && rm -f tmp-$(ENUM_FILE).h \ + && echo timestamp > $(@F) + +$(ENUM_FILE).c: s-enum-types-c + @true +s-enum-types-c: $(indicate_headers) Makefile + ( cd $(srcdir) && glib-mkenums \ + --fhead "#include \n#include " \ + --fprod "\n/* enumerations from \"@filename@\" */" \ + --vhead "GType\n@enum_name@_get_type (void)\n{\n static GType etype = 0;\n if (etype == 0) {\n static const G@Type@Value values[] = {" \ + --vprod " { @VALUENAME@, \"@VALUENAME@\", \"@valuenick@\" }," \ + --vtail " { 0, NULL, NULL }\n };\n etype = g_@type@_register_static (\"@EnumName@\", values);\n }\n return etype;\n}\n" \ + interests.h ) > tmp-$(ENUM_FILE).c \ + && (cmp -s tmp-$(ENUM_FILE).c $(ENUM_FILE).c || cp tmp-$(ENUM_FILE).c $(ENUM_FILE).c ) \ + && rm -f tmp-$(ENUM_FILE).c \ + && echo timestamp > $(@F) + +CLEANFILES = \ + $(ENUM_FILE).c \ + $(ENUM_FILE).h \ + s-enum-types-c \ + s-enum-types-h + if USE_GIR gobjectintrospection_gir_DATA = \ diff --git a/libindicate/interests.h b/libindicate/interests.h index 70c52d9..1c6215a 100644 --- a/libindicate/interests.h +++ b/libindicate/interests.h @@ -34,8 +34,7 @@ License version 3 and version 2.1 along with this program. If not, see G_BEGIN_DECLS -typedef enum _IndicateInterests IndicateInterests; -enum _IndicateInterests { +typedef enum { INDICATE_INTEREST_NONE, /**< We're of no interest */ INDICATE_INTEREST_SERVER_DISPLAY, /**< Displays the server's existance to the user */ INDICATE_INTEREST_SERVER_SIGNAL, /**< Will send signals to the server to be displayed */ @@ -43,7 +42,7 @@ enum _IndicateInterests { INDICATE_INTEREST_INDICATOR_SIGNAL, /**< Will return signals based on individual indicators being responded to */ INDICATE_INTEREST_INDICATOR_COUNT, /**< Only displays a count of the indicators */ INDICATE_INTEREST_LAST /**< Makes merges and counting easier */ -}; +} IndicateInterests; G_END_DECLS diff --git a/libindicate/server.h b/libindicate/server.h index cfb4334..5db46f9 100644 --- a/libindicate/server.h +++ b/libindicate/server.h @@ -124,10 +124,6 @@ void indicate_server_remove_indicator (IndicateServer * server, IndicateIndicato IndicateServer * indicate_server_ref_default (void); void indicate_server_set_default (IndicateServer * server); -/* Check to see if there is someone, out there, who likes this */ -gboolean indicate_server_check_interest (IndicateServer * server, IndicateInterests interest); - - /* Signal emission functions for sub-classes of the server */ void indicate_server_emit_indicator_added (IndicateServer *server, guint id, const gchar *type); void indicate_server_emit_indicator_removed (IndicateServer *server, guint id, const gchar *type); -- cgit v1.2.3 From a300f6cd4ed76fbc68c379bcc6729aa71cfc1759 Mon Sep 17 00:00:00 2001 From: Eitan Isaacson Date: Wed, 8 Apr 2009 16:47:46 +0300 Subject: GBoxed IndicateListenerServer --- libindicate/listener.c | 37 +++++++++++++++++++++++++++++++++++++ libindicate/listener.h | 5 +++++ 2 files changed, 42 insertions(+) (limited to 'libindicate') diff --git a/libindicate/listener.c b/libindicate/listener.c index 381a5f9..aa36d18 100644 --- a/libindicate/listener.c +++ b/libindicate/listener.c @@ -1024,3 +1024,40 @@ indicate_listener_server_check_interest (IndicateListener * listener, IndicateLi return server->interests[interest]; } +GType +indicate_listener_server_get_gtype (void) +{ + static GType our_type = 0; + + if (our_type == 0) + our_type = g_boxed_type_register_static ("IndicateListenerServer", + (GBoxedCopyFunc) indicate_listener_server_copy, + (GBoxedFreeFunc) indicate_listener_server_free); + + return our_type; +} + +IndicateListenerServer * +indicate_listener_server_copy (const IndicateListenerServer *listener_server) +{ + IndicateListenerServer *retval; + retval = (IndicateListenerServer *)g_memdup ( + listener_server, + sizeof (IndicateListenerServer)); + + g_object_ref (retval->proxy); + dbus_g_connection_ref (retval->connection); + g_stpcpy (retval->name, listener_server->name); + + return retval; +} + +void +indicate_listener_server_free (IndicateListenerServer *listener_server) +{ + g_free (listener_server->name); + g_object_unref (listener_server->proxy); + dbus_g_connection_unref (listener_server->connection); + + g_free (listener_server); +} diff --git a/libindicate/listener.h b/libindicate/listener.h index 0fdaa9b..5a1e991 100644 --- a/libindicate/listener.h +++ b/libindicate/listener.h @@ -59,6 +59,11 @@ G_BEGIN_DECLS #define INDICATE_LISTENER_INDICATOR_ID(indicator) (indicate_listener_indicator_get_id(indicator)) typedef struct _IndicateListenerServer IndicateListenerServer; +#define INDICATE_TYPE_LISTENER_SERVER (indicate_listener_server_get_gtype ()) +GType indicate_listener_server_get_gtype (void) G_GNUC_CONST; +IndicateListenerServer *indicate_listener_server_copy (const IndicateListenerServer *listener_server); +void indicate_listener_server_free (IndicateListenerServer *listener_server); + typedef struct _IndicateListenerIndicator IndicateListenerIndicator; typedef struct _IndicateListener IndicateListener; -- cgit v1.2.3 From 8f4019b3cc4f01cc2f37473c548dc8986d151586 Mon Sep 17 00:00:00 2001 From: Eitan Isaacson Date: Wed, 8 Apr 2009 18:14:27 +0300 Subject: Changed marshallers to GBoxed for IndicatorListenerServer. Make copy/free functions empty for now. --- libindicate/listener-marshal.list | 6 +++--- libindicate/listener.c | 38 ++++++++++++-------------------------- 2 files changed, 15 insertions(+), 29 deletions(-) (limited to 'libindicate') diff --git a/libindicate/listener-marshal.list b/libindicate/listener-marshal.list index a3d20a9..37dade3 100644 --- a/libindicate/listener-marshal.list +++ b/libindicate/listener-marshal.list @@ -28,8 +28,8 @@ # IndicatorAdded, IndicatorRemoved, IndicatorModified VOID:UINT,STRING # Local indicator_added, indicator_removed -VOID:POINTER,POINTER,STRING +VOID:BOXED,POINTER,STRING # Local indicator_modified -VOID:POINTER,POINTER,STRING,STRING +VOID:BOXED,POINTER,STRING,STRING # Local server_added and server_removed -VOID:POINTER,STRING +VOID:BOXED,STRING diff --git a/libindicate/listener.c b/libindicate/listener.c index aa36d18..3a3c34b 100644 --- a/libindicate/listener.c +++ b/libindicate/listener.c @@ -153,36 +153,36 @@ indicate_listener_class_init (IndicateListenerClass * class) G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET (IndicateListenerClass, indicator_added), NULL, NULL, - _indicate_listener_marshal_VOID__POINTER_POINTER_STRING, - G_TYPE_NONE, 3, G_TYPE_POINTER, G_TYPE_POINTER, G_TYPE_STRING); + _indicate_listener_marshal_VOID__BOXED_POINTER_STRING, + G_TYPE_NONE, 3, INDICATE_TYPE_LISTENER_SERVER, G_TYPE_POINTER, G_TYPE_STRING); signals[INDICATOR_REMOVED] = g_signal_new(INDICATE_LISTENER_SIGNAL_INDICATOR_REMOVED, G_TYPE_FROM_CLASS (class), G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET (IndicateListenerClass, indicator_removed), NULL, NULL, - _indicate_listener_marshal_VOID__POINTER_POINTER_STRING, - G_TYPE_NONE, 3, G_TYPE_POINTER, G_TYPE_POINTER, G_TYPE_STRING); + _indicate_listener_marshal_VOID__BOXED_POINTER_STRING, + G_TYPE_NONE, 3, INDICATE_TYPE_LISTENER_SERVER, G_TYPE_POINTER, G_TYPE_STRING); signals[INDICATOR_MODIFIED] = g_signal_new(INDICATE_LISTENER_SIGNAL_INDICATOR_MODIFIED, G_TYPE_FROM_CLASS (class), G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET (IndicateListenerClass, indicator_modified), NULL, NULL, - _indicate_listener_marshal_VOID__POINTER_POINTER_STRING_STRING, - G_TYPE_NONE, 4, G_TYPE_POINTER, G_TYPE_POINTER, G_TYPE_STRING, G_TYPE_STRING); + _indicate_listener_marshal_VOID__BOXED_POINTER_STRING_STRING, + G_TYPE_NONE, 4, INDICATE_TYPE_LISTENER_SERVER, G_TYPE_POINTER, G_TYPE_STRING, G_TYPE_STRING); signals[SERVER_ADDED] = g_signal_new(INDICATE_LISTENER_SIGNAL_SERVER_ADDED, G_TYPE_FROM_CLASS (class), G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET (IndicateListenerClass, server_added), NULL, NULL, - _indicate_listener_marshal_VOID__POINTER_STRING, - G_TYPE_NONE, 2, G_TYPE_POINTER, G_TYPE_STRING); + _indicate_listener_marshal_VOID__BOXED_STRING, + G_TYPE_NONE, 2, INDICATE_TYPE_LISTENER_SERVER, G_TYPE_STRING); signals[SERVER_REMOVED] = g_signal_new(INDICATE_LISTENER_SIGNAL_SERVER_REMOVED, G_TYPE_FROM_CLASS (class), G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET (IndicateListenerClass, server_removed), NULL, NULL, - _indicate_listener_marshal_VOID__POINTER_STRING, - G_TYPE_NONE, 2, G_TYPE_POINTER, G_TYPE_STRING); + _indicate_listener_marshal_VOID__BOXED_STRING, + G_TYPE_NONE, 2, INDICATE_TYPE_LISTENER_SERVER, G_TYPE_STRING); dbus_g_object_register_marshaller(_indicate_listener_marshal_VOID__UINT_STRING, G_TYPE_NONE, @@ -686,7 +686,7 @@ proxy_indicator_modified (DBusGProxy * proxy, guint id, const gchar * property, return; } - g_signal_emit(proxyt->listener, signals[INDICATOR_MODIFIED], 0, &proxyt->server, GUINT_TO_POINTER(id), type, property, TRUE); + g_signal_emit(proxyt->listener, signals[INDICATOR_MODIFIED], 0, proxyt->server, GUINT_TO_POINTER(id), type, property, TRUE); return; } @@ -1040,24 +1040,10 @@ indicate_listener_server_get_gtype (void) IndicateListenerServer * indicate_listener_server_copy (const IndicateListenerServer *listener_server) { - IndicateListenerServer *retval; - retval = (IndicateListenerServer *)g_memdup ( - listener_server, - sizeof (IndicateListenerServer)); - - g_object_ref (retval->proxy); - dbus_g_connection_ref (retval->connection); - g_stpcpy (retval->name, listener_server->name); - - return retval; + return listener_server; } void indicate_listener_server_free (IndicateListenerServer *listener_server) { - g_free (listener_server->name); - g_object_unref (listener_server->proxy); - dbus_g_connection_unref (listener_server->connection); - - g_free (listener_server); } -- cgit v1.2.3 From a3188d21d2682bf371e9e76638c26550d95a84c9 Mon Sep 17 00:00:00 2001 From: Eitan Isaacson Date: Fri, 10 Apr 2009 12:51:16 +0300 Subject: changed IndicateListenerServer to a gtyped pointer instead of a gboxed. --- libindicate/listener-marshal.list | 6 +++--- libindicate/listener.c | 26 +++++++------------------- 2 files changed, 10 insertions(+), 22 deletions(-) (limited to 'libindicate') diff --git a/libindicate/listener-marshal.list b/libindicate/listener-marshal.list index 37dade3..a3d20a9 100644 --- a/libindicate/listener-marshal.list +++ b/libindicate/listener-marshal.list @@ -28,8 +28,8 @@ # IndicatorAdded, IndicatorRemoved, IndicatorModified VOID:UINT,STRING # Local indicator_added, indicator_removed -VOID:BOXED,POINTER,STRING +VOID:POINTER,POINTER,STRING # Local indicator_modified -VOID:BOXED,POINTER,STRING,STRING +VOID:POINTER,POINTER,STRING,STRING # Local server_added and server_removed -VOID:BOXED,STRING +VOID:POINTER,STRING diff --git a/libindicate/listener.c b/libindicate/listener.c index 3a3c34b..13c9e81 100644 --- a/libindicate/listener.c +++ b/libindicate/listener.c @@ -153,35 +153,35 @@ indicate_listener_class_init (IndicateListenerClass * class) G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET (IndicateListenerClass, indicator_added), NULL, NULL, - _indicate_listener_marshal_VOID__BOXED_POINTER_STRING, + _indicate_listener_marshal_VOID__POINTER_POINTER_STRING, G_TYPE_NONE, 3, INDICATE_TYPE_LISTENER_SERVER, G_TYPE_POINTER, G_TYPE_STRING); signals[INDICATOR_REMOVED] = g_signal_new(INDICATE_LISTENER_SIGNAL_INDICATOR_REMOVED, G_TYPE_FROM_CLASS (class), G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET (IndicateListenerClass, indicator_removed), NULL, NULL, - _indicate_listener_marshal_VOID__BOXED_POINTER_STRING, + _indicate_listener_marshal_VOID__POINTER_POINTER_STRING, G_TYPE_NONE, 3, INDICATE_TYPE_LISTENER_SERVER, G_TYPE_POINTER, G_TYPE_STRING); signals[INDICATOR_MODIFIED] = g_signal_new(INDICATE_LISTENER_SIGNAL_INDICATOR_MODIFIED, G_TYPE_FROM_CLASS (class), G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET (IndicateListenerClass, indicator_modified), NULL, NULL, - _indicate_listener_marshal_VOID__BOXED_POINTER_STRING_STRING, + _indicate_listener_marshal_VOID__POINTER_POINTER_STRING_STRING, G_TYPE_NONE, 4, INDICATE_TYPE_LISTENER_SERVER, G_TYPE_POINTER, G_TYPE_STRING, G_TYPE_STRING); signals[SERVER_ADDED] = g_signal_new(INDICATE_LISTENER_SIGNAL_SERVER_ADDED, G_TYPE_FROM_CLASS (class), G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET (IndicateListenerClass, server_added), NULL, NULL, - _indicate_listener_marshal_VOID__BOXED_STRING, + _indicate_listener_marshal_VOID__POINTER_STRING, G_TYPE_NONE, 2, INDICATE_TYPE_LISTENER_SERVER, G_TYPE_STRING); signals[SERVER_REMOVED] = g_signal_new(INDICATE_LISTENER_SIGNAL_SERVER_REMOVED, G_TYPE_FROM_CLASS (class), G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET (IndicateListenerClass, server_removed), NULL, NULL, - _indicate_listener_marshal_VOID__BOXED_STRING, + _indicate_listener_marshal_VOID__POINTER_STRING, G_TYPE_NONE, 2, INDICATE_TYPE_LISTENER_SERVER, G_TYPE_STRING); dbus_g_object_register_marshaller(_indicate_listener_marshal_VOID__UINT_STRING, @@ -686,7 +686,7 @@ proxy_indicator_modified (DBusGProxy * proxy, guint id, const gchar * property, return; } - g_signal_emit(proxyt->listener, signals[INDICATOR_MODIFIED], 0, proxyt->server, GUINT_TO_POINTER(id), type, property, TRUE); + g_signal_emit(proxyt->listener, signals[INDICATOR_MODIFIED], 0, &proxyt->server, GUINT_TO_POINTER(id), type, property, TRUE); return; } @@ -1030,20 +1030,8 @@ indicate_listener_server_get_gtype (void) static GType our_type = 0; if (our_type == 0) - our_type = g_boxed_type_register_static ("IndicateListenerServer", - (GBoxedCopyFunc) indicate_listener_server_copy, - (GBoxedFreeFunc) indicate_listener_server_free); + our_type = g_pointer_type_register_static ("IndicateListenerServer"); return our_type; } -IndicateListenerServer * -indicate_listener_server_copy (const IndicateListenerServer *listener_server) -{ - return listener_server; -} - -void -indicate_listener_server_free (IndicateListenerServer *listener_server) -{ -} -- cgit v1.2.3 From bcdeb139acbff6d15d442f2bac3b1bb751413645 Mon Sep 17 00:00:00 2001 From: Eitan Isaacson Date: Fri, 10 Apr 2009 13:16:39 +0300 Subject: gtypify IndicateListenerIndicator --- libindicate/listener.c | 17 ++++++++++++++--- libindicate/listener.h | 4 ++-- 2 files changed, 16 insertions(+), 5 deletions(-) (limited to 'libindicate') diff --git a/libindicate/listener.c b/libindicate/listener.c index 13c9e81..0646e81 100644 --- a/libindicate/listener.c +++ b/libindicate/listener.c @@ -154,21 +154,21 @@ indicate_listener_class_init (IndicateListenerClass * class) G_STRUCT_OFFSET (IndicateListenerClass, indicator_added), NULL, NULL, _indicate_listener_marshal_VOID__POINTER_POINTER_STRING, - G_TYPE_NONE, 3, INDICATE_TYPE_LISTENER_SERVER, G_TYPE_POINTER, G_TYPE_STRING); + G_TYPE_NONE, 3, INDICATE_TYPE_LISTENER_SERVER, INDICATE_TYPE_LISTENER_INDICATOR, G_TYPE_STRING); signals[INDICATOR_REMOVED] = g_signal_new(INDICATE_LISTENER_SIGNAL_INDICATOR_REMOVED, G_TYPE_FROM_CLASS (class), G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET (IndicateListenerClass, indicator_removed), NULL, NULL, _indicate_listener_marshal_VOID__POINTER_POINTER_STRING, - G_TYPE_NONE, 3, INDICATE_TYPE_LISTENER_SERVER, G_TYPE_POINTER, G_TYPE_STRING); + G_TYPE_NONE, 3, INDICATE_TYPE_LISTENER_SERVER, INDICATE_TYPE_LISTENER_INDICATOR, G_TYPE_STRING); signals[INDICATOR_MODIFIED] = g_signal_new(INDICATE_LISTENER_SIGNAL_INDICATOR_MODIFIED, G_TYPE_FROM_CLASS (class), G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET (IndicateListenerClass, indicator_modified), NULL, NULL, _indicate_listener_marshal_VOID__POINTER_POINTER_STRING_STRING, - G_TYPE_NONE, 4, INDICATE_TYPE_LISTENER_SERVER, G_TYPE_POINTER, G_TYPE_STRING, G_TYPE_STRING); + G_TYPE_NONE, 4, INDICATE_TYPE_LISTENER_SERVER, INDICATE_TYPE_LISTENER_INDICATOR, G_TYPE_STRING, G_TYPE_STRING); signals[SERVER_ADDED] = g_signal_new(INDICATE_LISTENER_SIGNAL_SERVER_ADDED, G_TYPE_FROM_CLASS (class), G_SIGNAL_RUN_LAST, @@ -1035,3 +1035,14 @@ indicate_listener_server_get_gtype (void) return our_type; } +GType +indicate_listener_indicator_get_gtype (void) +{ + static GType our_type = 0; + + if (our_type == 0) + our_type = g_pointer_type_register_static ("IndicateListenerIndicator"); + + return our_type; +} + diff --git a/libindicate/listener.h b/libindicate/listener.h index 5a1e991..5bfd298 100644 --- a/libindicate/listener.h +++ b/libindicate/listener.h @@ -61,10 +61,10 @@ G_BEGIN_DECLS typedef struct _IndicateListenerServer IndicateListenerServer; #define INDICATE_TYPE_LISTENER_SERVER (indicate_listener_server_get_gtype ()) GType indicate_listener_server_get_gtype (void) G_GNUC_CONST; -IndicateListenerServer *indicate_listener_server_copy (const IndicateListenerServer *listener_server); -void indicate_listener_server_free (IndicateListenerServer *listener_server); typedef struct _IndicateListenerIndicator IndicateListenerIndicator; +#define INDICATE_TYPE_LISTENER_INDICATOR (indicate_listener_indicator_get_gtype ()) +GType indicate_listener_indicator_get_gtype (void) G_GNUC_CONST; typedef struct _IndicateListener IndicateListener; struct _IndicateListener { -- cgit v1.2.3 From f4bfa1ff71ef925907901dc0c438328891daca1c Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Fri, 10 Apr 2009 14:32:37 -0500 Subject: Create the virtual function for checking interest. --- libindicate/server.c | 13 +++++++++++++ 1 file changed, 13 insertions(+) (limited to 'libindicate') diff --git a/libindicate/server.c b/libindicate/server.c index 9e33516..1378a0d 100644 --- a/libindicate/server.c +++ b/libindicate/server.c @@ -1202,6 +1202,19 @@ _indicate_server_remove_interest (IndicateServer * server, gchar * interest, DBu return FALSE; } +gboolean +indicate_server_check_interest (IndicateServer * server, IndicateInterests interest) +{ + IndicateServerClass * class = INDICATE_SERVER_GET_CLASS(server); + + if (class != NULL && class->check_interest != NULL) { + return class->check_interest (server, interest); + } + + g_warning("check_interest function not implemented in this server class: %s", G_OBJECT_TYPE_NAME(server)); + return FALSE; +} + /* Signal emission functions for sub-classes of the server */ void indicate_server_emit_indicator_added (IndicateServer *server, guint id, const gchar *type) -- cgit v1.2.3 From ce664599c72dcb80f9e0427a2a49fc3c26fb79c8 Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Sun, 12 Apr 2009 21:41:48 -0500 Subject: Proto-pseudo-code for the introspection functions that are going to be needed --- libindicate/listener.c | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) (limited to 'libindicate') diff --git a/libindicate/listener.c b/libindicate/listener.c index 0646e81..8ae3973 100644 --- a/libindicate/listener.c +++ b/libindicate/listener.c @@ -1046,3 +1046,34 @@ indicate_listener_indicator_get_gtype (void) return our_type; } +static const gchar * _introspector_path[] = ["", "org", "freedesktop", "indicate", NULL]; +static const gchar * _introspector_interface = "org.freedesktop.indicator"; + +void +introspect_this (gchar * xml, IndicateServer * server) +{ + if (xml != NULL) { + /* Parse the XML */ + + /* Check for root being "node" */ + + const gchar * nodename = NULL; + const gchar * nameval = NULL; + if (_introspector_path[server->introspect_level] == NULL) { + /* We're looking for our interface */ + nodename = "interface"; + nameval = _introspector_interface; + } else { + /* We're looking for our next node */ + nodename = "node"; + nameval = _introspector_path[server->introspect_level]; + } + + } else { + server->introspect_level = 0; + } + + dbus_proxy_create(); + dbus_proxy_call(intropsect_this); + +} -- cgit v1.2.3 From bde7e27a7b972017f16ebf40ad173896d22bec25 Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Mon, 13 Apr 2009 13:30:31 -0500 Subject: Whoa, it like builds and stuff --- libindicate/listener.c | 61 +++++++++++++++++++++++++++++++++++++++++++++----- 1 file changed, 55 insertions(+), 6 deletions(-) (limited to 'libindicate') diff --git a/libindicate/listener.c b/libindicate/listener.c index b647f0a..6613e3d 100644 --- a/libindicate/listener.c +++ b/libindicate/listener.c @@ -27,6 +27,9 @@ License version 3 and version 2.1 along with this program. If not, see */ +#include +#include + #include "listener.h" #include "listener-marshal.h" #include @@ -89,6 +92,7 @@ typedef struct { gchar * type; IndicateListener * listener; GHashTable * indicators; + guint introspect_level; IndicateListenerServer server; } proxy_t; @@ -1046,17 +1050,29 @@ indicate_listener_indicator_get_gtype (void) return our_type; } -static const gchar * _introspector_path[] = ["", "org", "freedesktop", "indicate", NULL]; +static const gchar * _introspector_path[] = {"", "org", "freedesktop", "indicate", NULL}; +static const gchar * _introspector_fullpath[] = {"/", "/org", "/org/freedesktop", "/org/freedesktop/indicate", NULL}; static const gchar * _introspector_interface = "org.freedesktop.indicator"; -void -introspect_this (gchar * xml, IndicateServer * server) +static void +introspect_this (DBusGProxy * proxy, char * OUT_data, GError * error, gpointer data) { - if (xml != NULL) { + g_debug("Introspect this:\n%s", OUT_data); + proxy_t * server = (proxy_t *)data; + if (OUT_data != NULL) { + xmlDocPtr xmldoc; /* Parse the XML */ + xmldoc = xmlReadMemory(OUT_data, g_utf8_strlen(OUT_data, 16*1024), "introspection.xml", NULL, 0); /* Check for root being "node" */ + xmlNodePtr root = xmlDocGetRootElement(xmldoc); + if (g_strcmp(root->name, "node") != 0) { + xmlFreeDoc(xmldoc); + g_warning("Introspection data from %s is not valid: %s", server->name, OUT_data); + return; + } + server->introspect_level += 1; const gchar * nodename = NULL; const gchar * nameval = NULL; if (_introspector_path[server->introspect_level] == NULL) { @@ -1069,11 +1085,44 @@ introspect_this (gchar * xml, IndicateServer * server) nameval = _introspector_path[server->introspect_level]; } + gboolean found = FALSE; + xmlNodePtr children; + for (children = root->children; children != NULL; children = children->next) { + gchar * xmlnameval = NULL; + if (g_strcmp0(children->name, nodename) == 0) { + xmlAttrPtr attrib; + for (attrib = children->properties; attrib != NULL; attrib = attrib->next) { + if (g_strcmp0(attrib->name, "name") == 0) { + if (attrib->children != NULL) { + xmlnameval = attrib->children->content; + } + break; + } + } + + if (!g_strcmp0(nameval, xmlnameval)) { + found = TRUE; + break; + } + } + } + + xmlFreeDoc(xmldoc); + + if (!found) { + /* Ah, nothing we're interested in */ + return; + } } else { server->introspect_level = 0; } - dbus_proxy_create(); - dbus_proxy_call(intropsect_this); + DBusGProxy * newproxy = dbus_g_proxy_new_for_name(server->connection, + server->name, + _introspector_fullpath[server->introspect_level], + DBUS_INTERFACE_INTROSPECTABLE); + org_freedesktop_DBus_Introspectable_introspect_async(newproxy, introspect_this, server); + + return; } -- cgit v1.2.3 From 24e268d166ef026a3f1c4e7b09ae13d15bf427eb Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Mon, 13 Apr 2009 14:07:46 -0500 Subject: Fleshing out some --- libindicate/listener.c | 10 ++++++++++ 1 file changed, 10 insertions(+) (limited to 'libindicate') diff --git a/libindicate/listener.c b/libindicate/listener.c index 6613e3d..420d8cd 100644 --- a/libindicate/listener.c +++ b/libindicate/listener.c @@ -1059,6 +1059,16 @@ introspect_this (DBusGProxy * proxy, char * OUT_data, GError * error, gpointer d { g_debug("Introspect this:\n%s", OUT_data); proxy_t * server = (proxy_t *)data; + if (proxy != NULL) { + g_object_unref(proxy); + } + if (error != NULL) { + /* We probably couldn't introspect that far up. That's + life, it happens. */ + g_debug("Introspection error on %s object %s: %s", server->name, _introspector_fullpath[server->introspect_level], error->message); + return; + } + if (OUT_data != NULL) { xmlDocPtr xmldoc; /* Parse the XML */ -- cgit v1.2.3 From dec69be399365590e8bc5140f470aafd805ff17d Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Mon, 13 Apr 2009 14:15:01 -0500 Subject: Okay, connected into that other there code... let's see what happens. --- libindicate/listener.c | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) (limited to 'libindicate') diff --git a/libindicate/listener.c b/libindicate/listener.c index 420d8cd..fd35d66 100644 --- a/libindicate/listener.c +++ b/libindicate/listener.c @@ -133,6 +133,7 @@ static void proxy_indicator_modified (DBusGProxy * proxy, guint id, const gchar static void proxy_get_indicator_list (DBusGProxy * proxy, GArray * indicators, GError * error, gpointer data); static void proxy_get_indicator_type (DBusGProxy * proxy, gchar * type, GError * error, gpointer data); static void proxy_indicators_free (gpointer data); +static void introspect_this (DBusGProxy * proxy, char * OUT_data, GError * error, gpointer data); /* DBus interface */ gboolean _indicate_listener_get_indicator_servers (IndicateListener * listener, GList * servers); @@ -502,13 +503,9 @@ todo_idle (gpointer data) priv->proxies_possible = g_list_prepend(priv->proxies_possible, proxyt); - /* I think that we need to have this as there is a race - * condition here. If someone comes on the bus and we get - * that message, but before we set up the handler for the ServerShow - * signal it gets sent, we wouldn't get it. So then we would - * miss an indicator server coming on the bus. I'd like to not - * generate a warning in every app with DBus though. */ - indicate_listener_server_get_type(listener, &proxyt->server, get_type_cb, proxyt); + /* Look through the introspection data to see if this + is already a server */ + introspect_this (NULL, NULL, NULL, proxyt); return TRUE; } @@ -1123,6 +1120,13 @@ introspect_this (DBusGProxy * proxy, char * OUT_data, GError * error, gpointer d /* Ah, nothing we're interested in */ return; } + + if (_introspector_path[server->introspect_level] == NULL) { + /* If we've found the interface at the end of the tree, whoo! hoo! */ + /* Now we know it's safe to get the type on it */ + indicate_listener_server_get_type(server->listener, &server->server, get_type_cb, server); + return; + } } else { server->introspect_level = 0; } -- cgit v1.2.3 From 135906b4b250f8c5be3a1a157d77c689313f381a Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Mon, 13 Apr 2009 14:16:25 -0500 Subject: Ah, a typo. Bother. --- libindicate/listener.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'libindicate') diff --git a/libindicate/listener.c b/libindicate/listener.c index fd35d66..5ae3e09 100644 --- a/libindicate/listener.c +++ b/libindicate/listener.c @@ -1073,7 +1073,7 @@ introspect_this (DBusGProxy * proxy, char * OUT_data, GError * error, gpointer d /* Check for root being "node" */ xmlNodePtr root = xmlDocGetRootElement(xmldoc); - if (g_strcmp(root->name, "node") != 0) { + if (g_strcmp0(root->name, "node") != 0) { xmlFreeDoc(xmldoc); g_warning("Introspection data from %s is not valid: %s", server->name, OUT_data); return; -- cgit v1.2.3 From 46a050c2eac7bc12566339cbdea6bdb3376ccecf Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Mon, 13 Apr 2009 14:41:33 -0500 Subject: Less debug --- libindicate/listener.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'libindicate') diff --git a/libindicate/listener.c b/libindicate/listener.c index 5ae3e09..20a3278 100644 --- a/libindicate/listener.c +++ b/libindicate/listener.c @@ -1054,7 +1054,7 @@ static const gchar * _introspector_interface = "org.freedesktop.indicator"; static void introspect_this (DBusGProxy * proxy, char * OUT_data, GError * error, gpointer data) { - g_debug("Introspect this:\n%s", OUT_data); + /* g_debug("Introspect this:\n%s", OUT_data); */ proxy_t * server = (proxy_t *)data; if (proxy != NULL) { g_object_unref(proxy); -- cgit v1.2.3 From e32b37d049968231cb19129654fd3be997efb48b Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Mon, 13 Apr 2009 14:47:35 -0500 Subject: Commenting out some debug messages --- libindicate/listener.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) (limited to 'libindicate') diff --git a/libindicate/listener.c b/libindicate/listener.c index 20a3278..a314ea8 100644 --- a/libindicate/listener.c +++ b/libindicate/listener.c @@ -1061,8 +1061,9 @@ introspect_this (DBusGProxy * proxy, char * OUT_data, GError * error, gpointer d } if (error != NULL) { /* We probably couldn't introspect that far up. That's - life, it happens. */ - g_debug("Introspection error on %s object %s: %s", server->name, _introspector_fullpath[server->introspect_level], error->message); + life, it happens. Or there's a timeout, that happens + too, I guess some apps are too busy for us. */ + /* g_debug("Introspection error on %s object %s: %s", server->name, _introspector_fullpath[server->introspect_level], error->message); */ return; } -- cgit v1.2.3 From 43cf92a1e3306bf142f98ebc0cc4b2c636271c0d Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Mon, 20 Apr 2009 12:10:58 -0500 Subject: Chaning the include so that it works for make distcheck --- libindicate/Makefile.am | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'libindicate') diff --git a/libindicate/Makefile.am b/libindicate/Makefile.am index 91072f7..3ad6247 100644 --- a/libindicate/Makefile.am +++ b/libindicate/Makefile.am @@ -121,7 +121,7 @@ $(ENUM_FILE).c: s-enum-types-c @true s-enum-types-c: $(indicate_headers) Makefile ( cd $(srcdir) && glib-mkenums \ - --fhead "#include \n#include " \ + --fhead "#include \"interests.h\"\n#include " \ --fprod "\n/* enumerations from \"@filename@\" */" \ --vhead "GType\n@enum_name@_get_type (void)\n{\n static GType etype = 0;\n if (etype == 0) {\n static const G@Type@Value values[] = {" \ --vprod " { @VALUENAME@, \"@VALUENAME@\", \"@valuenick@\" }," \ -- cgit v1.2.3 From 76d5d0d2ad09b22fd49ca49761a12554a1d6383c Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Mon, 20 Apr 2009 13:13:04 -0500 Subject: Gaurding against setting bad interests --- libindicate/listener.c | 4 ++++ 1 file changed, 4 insertions(+) (limited to 'libindicate') diff --git a/libindicate/listener.c b/libindicate/listener.c index fddeb71..bd3639d 100644 --- a/libindicate/listener.c +++ b/libindicate/listener.c @@ -1003,6 +1003,10 @@ interest_cb (DBusGProxy *proxy, GError *error, gpointer userdata) void indicate_listener_server_show_interest (IndicateListener * listener, IndicateListenerServer * server, IndicateInterests interest) { + if (!(interest > INDICATE_INTEREST_NONE && interest < INDICATE_INTEREST_LAST)) { + return; + } + if (!server->interests[interest]) { org_freedesktop_indicator_show_interest_async (server->proxy, interest_to_string(interest), interest_cb, server); server->interests[interest] = TRUE; -- cgit v1.2.3 From c73af692f9bd4cab185206ab90b592469e659d77 Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Thu, 30 Apr 2009 11:40:56 -0500 Subject: First pass at trying to create some function documentation for Indicator --- libindicate/indicator.c | 99 +++++++++++++++++++++++++++++++++++++++++++++++++ libindicate/indicator.h | 8 ++++ 2 files changed, 107 insertions(+) (limited to 'libindicate') diff --git a/libindicate/indicator.c b/libindicate/indicator.c index dfcba67..87b11a7 100644 --- a/libindicate/indicator.c +++ b/libindicate/indicator.c @@ -76,6 +76,12 @@ indicate_indicator_class_init (IndicateIndicatorClass * class) gobj->finalize = indicate_indicator_finalize; + /** IndicateIndicator::dispaly: + + Emitted when the user has clicked on this indicator. In the + messaging indicator this would be when someone clicks on the + menu item for the indicator. + */ signals[USER_DISPLAY] = g_signal_new(INDICATE_INDICATOR_SIGNAL_DISPLAY, G_TYPE_FROM_CLASS(class), G_SIGNAL_RUN_LAST, @@ -83,6 +89,11 @@ indicate_indicator_class_init (IndicateIndicatorClass * class) NULL, NULL, g_cclosure_marshal_VOID__VOID, G_TYPE_NONE, 0); + /** IndicateIndicator::hide: + + Emitted every time this indicator is hidden. This + is mostly used by #IndicateServer. + */ signals[HIDE] = g_signal_new(INDICATE_INDICATOR_SIGNAL_HIDE, G_TYPE_FROM_CLASS(class), G_SIGNAL_RUN_LAST, @@ -90,6 +101,11 @@ indicate_indicator_class_init (IndicateIndicatorClass * class) NULL, NULL, g_cclosure_marshal_VOID__VOID, G_TYPE_NONE, 0); + /** IndicateIndicator::hide: + + Emitted every time this indicator is shown. This + is mostly used by #IndicateServer. + */ signals[SHOW] = g_signal_new(INDICATE_INDICATOR_SIGNAL_SHOW, G_TYPE_FROM_CLASS(class), G_SIGNAL_RUN_LAST, @@ -97,6 +113,11 @@ indicate_indicator_class_init (IndicateIndicatorClass * class) NULL, NULL, g_cclosure_marshal_VOID__VOID, G_TYPE_NONE, 0); + /** IndicateIndicator::modified: + + Emitted every time an indicator property is changed. + This is mostly used by #IndicateServer. + */ signals[MODIFIED] = g_signal_new(INDICATE_INDICATOR_SIGNAL_MODIFIED, G_TYPE_FROM_CLASS(class), G_SIGNAL_RUN_LAST, @@ -145,6 +166,10 @@ indicate_indicator_finalize (GObject * obj) return; } +/** indicate_indicator_new: + + Builds a new indicator object using #g_object_new. +*/ IndicateIndicator * indicate_indicator_new (void) { @@ -152,6 +177,13 @@ indicate_indicator_new (void) return indicator; } +/** indicate_indicator_show: + @indicator: a #IndicateIndicator to act on + + Shows this indicator on the bus. If the #IndicateServer that it's + connected to is not shown itself this function will show the server + as well using #indicate_server_show. +*/ void indicate_indicator_show (IndicateIndicator * indicator) { @@ -171,6 +203,12 @@ indicate_indicator_show (IndicateIndicator * indicator) return; } +/** indicate_indicator_hide: + @indicator: a #IndicateIndicator to act on + + Hides the indicator from the bus. Does not effect the + indicator's #IndicateServer in any way. +*/ void indicate_indicator_hide (IndicateIndicator * indicator) { @@ -186,6 +224,13 @@ indicate_indicator_hide (IndicateIndicator * indicator) return; } +/** indicate_indicator_is_visible: + @indicator: a #IndicateIndicator to act on + + Checkes the visibility status of @indicator. + + Return value: %TRUE if the indicator is visible else %FALSE. +*/ gboolean indicate_indicator_is_visible (IndicateIndicator * indicator) { @@ -194,6 +239,14 @@ indicate_indicator_is_visible (IndicateIndicator * indicator) return priv->is_visible; } +/** indicate_indicator_get_id: + @indicator: a #IndicateIndicator to act on + + Gets the ID value of the @indicator. + + Return value: The ID of the indicator. Can not be zero. + Zero represents an error. +*/ guint indicate_indicator_get_id (IndicateIndicator * indicator) { @@ -202,6 +255,14 @@ indicate_indicator_get_id (IndicateIndicator * indicator) return priv->id; } +/** indicate_indicator_get_indicator_type: + @indicator: a #IndicateIndicator to act on + + Returns the type of @indicator. This is largely set by the subclass + that the indicator was built with and should not be free'd. + + Return value: A string defining the type or NULL for no type. +*/ const gchar * indicate_indicator_get_indicator_type (IndicateIndicator * indicator) { @@ -215,6 +276,13 @@ indicate_indicator_get_indicator_type (IndicateIndicator * indicator) return NULL; } +/** indicate_indicator_user_display: + @indicator: a #IndicateIndicator to act on + + Emits the #IndicateIndicator::user-display signal simliar to a user + clicking on @indicator over the bus. Signal will not be sent if the + @indicator is not visible. +*/ void indicate_indicator_user_display (IndicateIndicator * indicator) { @@ -227,6 +295,17 @@ indicate_indicator_user_display (IndicateIndicator * indicator) return; } +/** indicate_indicator_set_property: + @indicator: a #IndicateIndicator to act on + @key: name of the property + @data: value of the property + + Sets a simple string property on @indicator. If the property + had previously been set it will replace it with the new value, + otherwise it will create the property. This will include an + emition of #IndicateIndicator::modified if the property value + was changed. +*/ void indicate_indicator_set_property (IndicateIndicator * indicator, const gchar * key, const gchar * data) { @@ -238,6 +317,16 @@ indicate_indicator_set_property (IndicateIndicator * indicator, const gchar * ke return class->set_property(indicator, key, data); } +/** indicate_indicator_set_property_icon: + @indicator: a #IndicateIndicator to act on + @key: name of the property + @data: icon to set property with + + This is a helper function that wraps around #indicate_indicator_set_property + but takes an #GdkPixbuf parameter. It then takes the @data + parameter, turns it into a PNG, base64 encodes it and then + uses that data to call #indicate_indicator_set_property. +*/ void indicate_indicator_set_property_icon (IndicateIndicator * indicator, const gchar * key, const GdkPixbuf * data) { @@ -271,6 +360,16 @@ indicate_indicator_set_property_icon (IndicateIndicator * indicator, const gchar return; } +/** indicate_indicator_set_property_time: + @indicator: a #IndicateIndicator to act on + @key: name of the property + @data: time to set property with + + This is a helper function that wraps around #indicate_indicator_set_property + but takes an #GTimeVal parameter. It then takes the @data + parameter converts it to an ISO 8601 time string and + uses that data to call #indicate_indicator_set_property. +*/ void indicate_indicator_set_property_time (IndicateIndicator * indicator, const gchar * key, GTimeVal * time) { diff --git a/libindicate/indicator.h b/libindicate/indicator.h index 8af5568..4536cf5 100644 --- a/libindicate/indicator.h +++ b/libindicate/indicator.h @@ -56,6 +56,14 @@ G_BEGIN_DECLS typedef struct _IndicateIndicator IndicateIndicator; typedef struct _IndicateIndicatorClass IndicateIndicatorClass; +/** + IndicateInidcator: + + The indicator object represents a single item that is shared over the + indicator bus. This could be something like one IM, one e-mail or + a single system update. It should be accessed only through its + accessors. +*/ struct _IndicateIndicator { GObject parent; }; -- cgit v1.2.3 From f62b8365144946f97e7c6450dcc36c09d746ff31 Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Thu, 30 Apr 2009 11:51:46 -0500 Subject: Dispaly typo --- libindicate/indicator.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'libindicate') diff --git a/libindicate/indicator.c b/libindicate/indicator.c index 87b11a7..b691357 100644 --- a/libindicate/indicator.c +++ b/libindicate/indicator.c @@ -76,7 +76,7 @@ indicate_indicator_class_init (IndicateIndicatorClass * class) gobj->finalize = indicate_indicator_finalize; - /** IndicateIndicator::dispaly: + /** IndicateIndicator::display: Emitted when the user has clicked on this indicator. In the messaging indicator this would be when someone clicks on the -- cgit v1.2.3 From 1c91e431be9a8e9bf706485735efccf0a0c54283 Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Thu, 30 Apr 2009 13:07:29 -0500 Subject: Turns out that gtk-doc can't have the name of the function on the same line as the start of the comment. How stupid. --- libindicate/indicator.c | 44 ++++++++++++++++++++++++++++++-------------- 1 file changed, 30 insertions(+), 14 deletions(-) (limited to 'libindicate') diff --git a/libindicate/indicator.c b/libindicate/indicator.c index b691357..e40975a 100644 --- a/libindicate/indicator.c +++ b/libindicate/indicator.c @@ -76,7 +76,8 @@ indicate_indicator_class_init (IndicateIndicatorClass * class) gobj->finalize = indicate_indicator_finalize; - /** IndicateIndicator::display: + /** + IndicateIndicator::display: Emitted when the user has clicked on this indicator. In the messaging indicator this would be when someone clicks on the @@ -89,7 +90,8 @@ indicate_indicator_class_init (IndicateIndicatorClass * class) NULL, NULL, g_cclosure_marshal_VOID__VOID, G_TYPE_NONE, 0); - /** IndicateIndicator::hide: + /** + IndicateIndicator::hide: Emitted every time this indicator is hidden. This is mostly used by #IndicateServer. @@ -101,7 +103,8 @@ indicate_indicator_class_init (IndicateIndicatorClass * class) NULL, NULL, g_cclosure_marshal_VOID__VOID, G_TYPE_NONE, 0); - /** IndicateIndicator::hide: + /** + IndicateIndicator::hide: Emitted every time this indicator is shown. This is mostly used by #IndicateServer. @@ -113,7 +116,8 @@ indicate_indicator_class_init (IndicateIndicatorClass * class) NULL, NULL, g_cclosure_marshal_VOID__VOID, G_TYPE_NONE, 0); - /** IndicateIndicator::modified: + /** + IndicateIndicator::modified: Emitted every time an indicator property is changed. This is mostly used by #IndicateServer. @@ -166,9 +170,12 @@ indicate_indicator_finalize (GObject * obj) return; } -/** indicate_indicator_new: +/** + indicate_indicator_new: Builds a new indicator object using #g_object_new. + + Return value: A pointer to a new #IndicateIndicator object. */ IndicateIndicator * indicate_indicator_new (void) @@ -177,7 +184,8 @@ indicate_indicator_new (void) return indicator; } -/** indicate_indicator_show: +/** + indicate_indicator_show: @indicator: a #IndicateIndicator to act on Shows this indicator on the bus. If the #IndicateServer that it's @@ -203,7 +211,8 @@ indicate_indicator_show (IndicateIndicator * indicator) return; } -/** indicate_indicator_hide: +/** + indicate_indicator_hide: @indicator: a #IndicateIndicator to act on Hides the indicator from the bus. Does not effect the @@ -224,7 +233,8 @@ indicate_indicator_hide (IndicateIndicator * indicator) return; } -/** indicate_indicator_is_visible: +/** + indicate_indicator_is_visible: @indicator: a #IndicateIndicator to act on Checkes the visibility status of @indicator. @@ -239,7 +249,8 @@ indicate_indicator_is_visible (IndicateIndicator * indicator) return priv->is_visible; } -/** indicate_indicator_get_id: +/** + indicate_indicator_get_id: @indicator: a #IndicateIndicator to act on Gets the ID value of the @indicator. @@ -255,7 +266,8 @@ indicate_indicator_get_id (IndicateIndicator * indicator) return priv->id; } -/** indicate_indicator_get_indicator_type: +/** + indicate_indicator_get_indicator_type: @indicator: a #IndicateIndicator to act on Returns the type of @indicator. This is largely set by the subclass @@ -276,7 +288,8 @@ indicate_indicator_get_indicator_type (IndicateIndicator * indicator) return NULL; } -/** indicate_indicator_user_display: +/** + indicate_indicator_user_display: @indicator: a #IndicateIndicator to act on Emits the #IndicateIndicator::user-display signal simliar to a user @@ -295,7 +308,8 @@ indicate_indicator_user_display (IndicateIndicator * indicator) return; } -/** indicate_indicator_set_property: +/** + indicate_indicator_set_property: @indicator: a #IndicateIndicator to act on @key: name of the property @data: value of the property @@ -317,7 +331,8 @@ indicate_indicator_set_property (IndicateIndicator * indicator, const gchar * ke return class->set_property(indicator, key, data); } -/** indicate_indicator_set_property_icon: +/** + indicate_indicator_set_property_icon: @indicator: a #IndicateIndicator to act on @key: name of the property @data: icon to set property with @@ -360,7 +375,8 @@ indicate_indicator_set_property_icon (IndicateIndicator * indicator, const gchar return; } -/** indicate_indicator_set_property_time: +/** + indicate_indicator_set_property_time: @indicator: a #IndicateIndicator to act on @key: name of the property @data: time to set property with -- cgit v1.2.3 From 43f575ee79e3f0bd6f69a6ce835d5298053073fb Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Thu, 30 Apr 2009 14:06:45 -0500 Subject: Getting most of the indicator documentation in the pool. --- libindicate/indicator.c | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) (limited to 'libindicate') diff --git a/libindicate/indicator.c b/libindicate/indicator.c index e40975a..c867a9a 100644 --- a/libindicate/indicator.c +++ b/libindicate/indicator.c @@ -170,6 +170,14 @@ indicate_indicator_finalize (GObject * obj) return; } +/** + indicate_indicator_get_type: + + Gets a unique #GType for the #IndicateIndicator objects. + + Return value: A unique #GType value. +*/ + /** indicate_indicator_new: @@ -397,6 +405,16 @@ indicate_indicator_set_property_time (IndicateIndicator * indicator, const gchar return; } +/** + indicate_indicator_get_property: + @indicator: a #IndicateIndicator to act on + @key: name of the property + + Returns the value that is set for a property or %NULL if that + property is not set. + + Return value: A constant string or NULL. +*/ const gchar * indicate_indicator_get_property (IndicateIndicator * indicator, const gchar * key) { @@ -408,6 +426,17 @@ indicate_indicator_get_property (IndicateIndicator * indicator, const gchar * ke return class->get_property(indicator, key); } +/** + indicate_indicator_list_properties: + @indicator: a #IndicateIndicator to act on + + This function gets a list of all the properties that exist + on a @indicator. The array may have zero entries but almost + always at least has 'type' in it. + + Return value: An array of strings that is the keys of all + the properties on this indicator. +*/ GPtrArray * indicate_indicator_list_properties (IndicateIndicator * indicator) { -- cgit v1.2.3 From 47c4b8e7c3f328da2ec23ddec762c47b329a44da Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Thu, 30 Apr 2009 14:10:33 -0500 Subject: Typo --- libindicate/indicator.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'libindicate') diff --git a/libindicate/indicator.h b/libindicate/indicator.h index 4536cf5..138a48c 100644 --- a/libindicate/indicator.h +++ b/libindicate/indicator.h @@ -57,7 +57,7 @@ typedef struct _IndicateIndicator IndicateIndicator; typedef struct _IndicateIndicatorClass IndicateIndicatorClass; /** - IndicateInidcator: + IndicateIndicator: The indicator object represents a single item that is shared over the indicator bus. This could be something like one IM, one e-mail or -- cgit v1.2.3 From dd49cd3da4456be72f5aae8ba0900c80b637409c Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Thu, 30 Apr 2009 14:10:41 -0500 Subject: What is the server --- libindicate/server.h | 10 ++++++++++ 1 file changed, 10 insertions(+) (limited to 'libindicate') diff --git a/libindicate/server.h b/libindicate/server.h index cfb4334..0c5a83c 100644 --- a/libindicate/server.h +++ b/libindicate/server.h @@ -57,6 +57,16 @@ G_BEGIN_DECLS #define INDICATE_SERVER_SIGNAL_INTEREST_ADDED "interest-added" #define INDICATE_SERVER_SIGNAL_INTEREST_REMOVED "interest-removed" +/** + IndicateServer: + + This is the object that represents the overall connection + between this application and DBus. It acts as the proxy for + incomming DBus calls and also sends the appropriate signals + on DBus for events happening on other objects locally. It + provides some settings that effection how the application as + a whole is perceived by listeners of the indicator protocol. +*/ typedef struct _IndicateServer IndicateServer; struct _IndicateServer { GObject parent; -- cgit v1.2.3 From 877ac7aac626a3c8ce4bdd601eff9fb92fe64911 Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Thu, 30 Apr 2009 14:29:40 -0500 Subject: Adding in IndicateIndicatorClass documentation. --- libindicate/indicator.h | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) (limited to 'libindicate') diff --git a/libindicate/indicator.h b/libindicate/indicator.h index 138a48c..dc057f4 100644 --- a/libindicate/indicator.h +++ b/libindicate/indicator.h @@ -68,6 +68,37 @@ struct _IndicateIndicator { GObject parent; }; +/** + IndicateIndicatorClass: + + All of the functions that are used to modify or change data that is + in the indicator. Typically gets subclassed by other types of + indicators, for example #IndicateIndicatorMessages. + + @hide: #IndicateIndicator::hide + + @show: #IndicateIndicator::show + + @user_display: #IndicateIndicator::user-display + + @modified: #IndicateIndicator::modified + + @get_type: Returns a constant string for the type of this indicator. + Typically gets overridden by subclasses and defines the type of + the indicator. + + @set_property: Called when #indicate_indicator_set_property is called + and should set the value. While typically it is overridden by + subclasses they usually handle special properties themselves and + then call the superclass for storage. + + @get_property: Called when #indicate_indicator_get_property is called + and should return the value requested. Many times this is left alone. + + @list_properties: Called when #indicate_indicator_list_properties is called + and returns a list of the properties available. Again this can be + overridden by subclasses to handle special properties. +*/ struct _IndicateIndicatorClass { GObjectClass parent_class; -- cgit v1.2.3 From 9201eb6ce3b2770038f0c71e89aadb3c55af6157 Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Thu, 30 Apr 2009 14:35:30 -0500 Subject: Making it more like English and less like a pointer table. --- libindicate/indicator.h | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) (limited to 'libindicate') diff --git a/libindicate/indicator.h b/libindicate/indicator.h index dc057f4..61cc1d2 100644 --- a/libindicate/indicator.h +++ b/libindicate/indicator.h @@ -75,13 +75,13 @@ struct _IndicateIndicator { in the indicator. Typically gets subclassed by other types of indicators, for example #IndicateIndicatorMessages. - @hide: #IndicateIndicator::hide + @hide: Slot for #IndicateIndicator::hide. - @show: #IndicateIndicator::show + @show: Slot for #IndicateIndicator::show. - @user_display: #IndicateIndicator::user-display + @user_display: Slot for #IndicateIndicator::user-display. - @modified: #IndicateIndicator::modified + @modified: Slot for #IndicateIndicator::modified. @get_type: Returns a constant string for the type of this indicator. Typically gets overridden by subclasses and defines the type of -- cgit v1.2.3 From d73f65f28afe4fc11cec345e4baadf4d934c656d Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Thu, 30 Apr 2009 15:12:37 -0500 Subject: Reformatting to make gtk-doc happy. --- libindicate/indicator.h | 26 ++++++++++---------------- 1 file changed, 10 insertions(+), 16 deletions(-) (limited to 'libindicate') diff --git a/libindicate/indicator.h b/libindicate/indicator.h index 61cc1d2..77ffb7d 100644 --- a/libindicate/indicator.h +++ b/libindicate/indicator.h @@ -70,34 +70,28 @@ struct _IndicateIndicator { /** IndicateIndicatorClass: - - All of the functions that are used to modify or change data that is - in the indicator. Typically gets subclassed by other types of - indicators, for example #IndicateIndicatorMessages. - + @parent_class: Parent class #GObjectClass. @hide: Slot for #IndicateIndicator::hide. - @show: Slot for #IndicateIndicator::show. - @user_display: Slot for #IndicateIndicator::user-display. - @modified: Slot for #IndicateIndicator::modified. - @get_type: Returns a constant string for the type of this indicator. Typically gets overridden by subclasses and defines the type of - the indicator. - - @set_property: Called when #indicate_indicator_set_property is called + the indicator. Is called by indicate_indicator_get_indicator_type(). + @set_property: Called when indicate_indicator_set_property() is called and should set the value. While typically it is overridden by subclasses they usually handle special properties themselves and then call the superclass for storage. - - @get_property: Called when #indicate_indicator_get_property is called + @get_property: Called when indicate_indicator_get_property() is called and should return the value requested. Many times this is left alone. - - @list_properties: Called when #indicate_indicator_list_properties is called + @list_properties: Called when indicate_indicator_list_properties() is called and returns a list of the properties available. Again this can be overridden by subclasses to handle special properties. + + All of the functions that are used to modify or change data that is + in the indicator. Typically gets subclassed by other types of + indicators, for example #IndicateIndicatorMessages. + */ struct _IndicateIndicatorClass { GObjectClass parent_class; -- cgit v1.2.3 From a77a8085c8993dfb3e27952e77c245d6bca86128 Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Thu, 30 Apr 2009 15:40:06 -0500 Subject: Section information --- libindicate/indicator.h | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) (limited to 'libindicate') diff --git a/libindicate/indicator.h b/libindicate/indicator.h index 77ffb7d..3e2a803 100644 --- a/libindicate/indicator.h +++ b/libindicate/indicator.h @@ -133,6 +133,37 @@ void indicate_indicator_set_property_time (IndicateIndicator * indicator, const const gchar * indicate_indicator_get_property (IndicateIndicator * indicator, const gchar * key); GPtrArray * indicate_indicator_list_properties (IndicateIndicator * indicator); +/** + SECTION:indicator + @short_description: A representation of state for applications + @stability: Unstable + @include: libindicate/indicator.h + + An indicator is designed to represent a single instance of something + in your application. So this might be an IM or Email using #IndicateIndicatorMessage + or any other thing that is a small unit of information to pass on + to the user. + + Indicators make no promises about how they are preceived by the + user, it's up to the listener to represent them in an intutive and + visually appealling way. But, what we can do is provide information + on the indicator to provide enough information for the listener + to do that. + + Mostly this is done through properties. The only property that is + defined for the base indicator is the 'type' property. And this + is only available to set by creating a subclass of the + #IndicateIndicator object. It is assumed that you can look at the + definitions of the various subtypes to determine which properties + they support. + + It may be that some users don't want to create objects for every + indicator as it could be a lot of overhead if there are large numbers + and there is already a data structure representing them all. In that + case it is recommended that you ignore the #IndicateIndicator object + tree in general and move to subclassing #IndicateServer directly. +*/ + G_END_DECLS #endif /* INDICATE_INDICATOR_H_INCLUDED__ */ -- cgit v1.2.3 From 933bcaaa5942e9990e07da32bcde392d0e9a7883 Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Thu, 30 Apr 2009 16:57:51 -0500 Subject: Adding in message documentation and cleaning up some mistakes as I see them. --- libindicate/indicator-message.c | 7 +++++++ libindicate/indicator-message.h | 38 ++++++++++++++++++++++++++++++++------ libindicate/indicator.c | 2 +- 3 files changed, 40 insertions(+), 7 deletions(-) (limited to 'libindicate') diff --git a/libindicate/indicator-message.c b/libindicate/indicator-message.c index 4e8ef30..9cd735a 100644 --- a/libindicate/indicator-message.c +++ b/libindicate/indicator-message.c @@ -85,6 +85,13 @@ indicate_indicator_message_finalize (GObject *object) G_OBJECT_CLASS (indicate_indicator_message_parent_class)->finalize (object); } +/** + indicate_indicator_message_new: + + Builds a new indicator message object using #g_object_new. + + Return value: A pointer to a new #IndicateIndicatorMessage object. +*/ static const gchar * get_indicator_type (IndicateIndicator * indicator) { diff --git a/libindicate/indicator-message.h b/libindicate/indicator-message.h index 0910477..62a41b7 100644 --- a/libindicate/indicator-message.h +++ b/libindicate/indicator-message.h @@ -47,19 +47,45 @@ G_BEGIN_DECLS typedef struct _IndicateIndicatorMessage IndicateIndicatorMessage; typedef struct _IndicateIndicatorMessageClass IndicateIndicatorMessageClass; -struct _IndicateIndicatorMessageClass -{ -IndicateIndicatorClass parent_class; +/** + IndicateIndicatorMessageClass: + + Subclass of #IndicateIndicator with no new functions or signals. +*/ +struct _IndicateIndicatorMessageClass { + IndicateIndicatorClass parent_class; }; -struct _IndicateIndicatorMessage -{ -IndicateIndicator parent; +/** + IndicateIndicatorMessage: + + A class to represent indicators who's 'type' is "message". These + are basically indicators that represent messages from humans to + humans via computers. Things like instance messages, micro blogging + entries or e-mails. All of these qualify as messages. + + TODO: This should include a list of properties that are supported. +*/ +struct _IndicateIndicatorMessage { + IndicateIndicator parent; }; GType indicate_indicator_message_get_type (void); IndicateIndicatorMessage * indicate_indicator_message_new (void); +/** + SECTION:indicator-message + @short_description: A representation of human generated messages + @stability: Unstable + @include: libindicate/indicator-message.h + + The message indicators represent messages that come from humans + to humans using computers. They come in all different forms with + various different interaction protocols, but they all want the human + at the computer to interact back with the human that sent the + message. +*/ + G_END_DECLS #endif diff --git a/libindicate/indicator.c b/libindicate/indicator.c index c867a9a..15788d4 100644 --- a/libindicate/indicator.c +++ b/libindicate/indicator.c @@ -181,7 +181,7 @@ indicate_indicator_finalize (GObject * obj) /** indicate_indicator_new: - Builds a new indicator object using #g_object_new. + Builds a new indicator object using g_object_new(). Return value: A pointer to a new #IndicateIndicator object. */ -- cgit v1.2.3 From a1ba880a312728fa4973c2d498ea574426a291f9 Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Thu, 30 Apr 2009 20:17:52 -0500 Subject: Comments for the class, who put all those functions on there... --- libindicate/server.h | 42 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 42 insertions(+) (limited to 'libindicate') diff --git a/libindicate/server.h b/libindicate/server.h index 0c5a83c..c327a13 100644 --- a/libindicate/server.h +++ b/libindicate/server.h @@ -72,6 +72,48 @@ struct _IndicateServer { GObject parent; }; +/** + IndicateServerClass: + @parent: Parent Class + @indicator_added: Slot for #IndicatorServer::indicator-added + @indicator_removed: Slot for #IndicatorServer::indicator-removed + @indicator_modified: Slot for #IndicatorServer::indicator-modified + @server_show: Slot for #IndicatorServer::server-show + @server_hide: Slot for #IndicatorServer::server-hide + @server_display: Slot for #IndicatorServer::server-display + @interest_added: Slot for #IndicatorServer::interest-added + @interest_removed: Slot for #IndicatorServer::interest-removed + @get_indicator_count: Returns the number of indicators that are visible + on the bus. Hidden indicators should not be counted. + @get_indciator_count_by_type: Returns the number of indicators that are + of a given type and visible on the bus. + @get_indicator_list: List all of the indicators that are visible. + @get_indicator_list_by_type: List all of the indicators of a given + type that are visible. + @get_indicator_property: Get a property from a particular indicator. + @get_indicator_property_group: Get the values for a set of properties + as an array of entries, returning an array as well. + @get_indicator_properties: Get a list of all the properties that are + on a particular indicator. + @show_indicator_to_user: Respond to someone on the bus asking to show + a particular indicator to the user. + @get_next_id: Get the next unused indicator ID. + @show_interest: React to someone signifying that they are interested + in this server. + @remove_interest: Someone on the bus is no longer interest in this + server, remove it's interest. + @check_interest: Check to see if anyone on the bus is interested in this + server for a particular feature. + @indicate_server_reserved1: Reserved for future use + @indicate_server_reserved2: Reserved for future use + @indicate_server_reserved3: Reserved for future use + @indicate_server_reserved4: Reserved for future use + + All of the functions and signals that make up the server class + including those that are public API to the application and those + that are public API to all of DBus. Subclasses may need to + implement a large portion of these. +*/ typedef struct _IndicateServerClass IndicateServerClass; struct _IndicateServerClass { GObjectClass parent; -- cgit v1.2.3 From f4a1e4626b061bd26d2a0fea8b44ea37d0b56b7a Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Thu, 30 Apr 2009 20:24:53 -0500 Subject: Server section documentation. --- libindicate/server.h | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) (limited to 'libindicate') diff --git a/libindicate/server.h b/libindicate/server.h index c327a13..f0e1569 100644 --- a/libindicate/server.h +++ b/libindicate/server.h @@ -186,6 +186,35 @@ void indicate_server_emit_indicator_removed (IndicateServer *server, guint id, c void indicate_server_emit_indicator_modified (IndicateServer *server, guint id, const gchar *property); void indicate_server_emit_server_display (IndicateServer *server); +/** + SECTION:server + @short_description: The representation of the application on DBus. + @stability: Unstable + @include: libindicate/server.h + + The server object is the object that provides the functions on + to DBus for other applications to call. It does this by implementing + the DBus indicator spec, but it also allows for subclassing so that + subclasses don't have to worry about the DBus-isms as much as + the functionality that they're trying to express. + + For simple applications there is limited need to set anything + more than the desktop file and the type of the server using + indicate_server_set_desktop_file() and indicate_server_set_type(). + Each of these function sets the respective value and expresses + it in a way that other applications on the bus can read it. + + More advanced applications might find the need to subclass the + #IndicateServer object and make their own. This is likely the + case where applications have complex data stores that they don't + want to turn into a large set of #GObjects that can take up a + significant amount of memory in the program. + + In general, it is recommended that application authors go with + the high memory path first, and then optimize by implementing + their server on a second pass. +*/ + G_END_DECLS #endif /* INDICATE_SERVER_H_INCLUDED__ */ -- cgit v1.2.3 From 15720aae214633691ed4a940dd1b7dcb313ea0ca Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Thu, 30 Apr 2009 20:37:52 -0500 Subject: Basic signals docs. --- libindicate/server.c | 50 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 50 insertions(+) (limited to 'libindicate') diff --git a/libindicate/server.c b/libindicate/server.c index d42fe61..e8dad3f 100644 --- a/libindicate/server.c +++ b/libindicate/server.c @@ -163,6 +163,12 @@ indicate_server_class_init (IndicateServerClass * class) gobj->set_property = set_property; gobj->get_property = get_property; + /** + IndicateServer::indicator-added: + + Emitted every time that a new indicator is made visible to + the world. This results in a signal on DBus. + */ signals[INDICATOR_ADDED] = g_signal_new(INDICATE_SERVER_SIGNAL_INDICATOR_ADDED, G_TYPE_FROM_CLASS (class), G_SIGNAL_RUN_LAST, @@ -170,6 +176,12 @@ indicate_server_class_init (IndicateServerClass * class) NULL, NULL, g_cclosure_marshal_VOID__UINT_POINTER, G_TYPE_NONE, 2, G_TYPE_UINT, G_TYPE_STRING); + /** + IndicateServer::indicator-removed: + + Emitted every time that a new indicator is made invisible to + the world. This results in a signal on DBus. + */ signals[INDICATOR_REMOVED] = g_signal_new(INDICATE_SERVER_SIGNAL_INDICATOR_REMOVED, G_TYPE_FROM_CLASS (class), G_SIGNAL_RUN_LAST, @@ -177,6 +189,12 @@ indicate_server_class_init (IndicateServerClass * class) NULL, NULL, g_cclosure_marshal_VOID__UINT_POINTER, G_TYPE_NONE, 2, G_TYPE_UINT, G_TYPE_STRING); + /** + IndicateServer::indicator-modified: + + Emitted every time that a property on an indicator changes + and it is visible to the world. This results in a signal on DBus. + */ signals[INDICATOR_MODIFIED] = g_signal_new(INDICATE_SERVER_SIGNAL_INDICATOR_MODIFIED, G_TYPE_FROM_CLASS (class), G_SIGNAL_RUN_LAST, @@ -184,6 +202,13 @@ indicate_server_class_init (IndicateServerClass * class) NULL, NULL, g_cclosure_marshal_VOID__UINT_POINTER, G_TYPE_NONE, 2, G_TYPE_UINT, G_TYPE_STRING); + /** + IndicateServer::server-show: + + Emitted when a server comes onto DBus by being shown. This + is typically when listeners start reacting to the application's + indicators. This results in a signal on DBus. + */ signals[SERVER_SHOW] = g_signal_new(INDICATE_SERVER_SIGNAL_SERVER_SHOW, G_TYPE_FROM_CLASS (class), G_SIGNAL_RUN_LAST, @@ -191,6 +216,12 @@ indicate_server_class_init (IndicateServerClass * class) NULL, NULL, g_cclosure_marshal_VOID__POINTER, G_TYPE_NONE, 1, G_TYPE_STRING); + /** + IndicateServer::server-hide: + + Emitted when a server removes itself from DBus. This results + in a signal on DBus. + */ signals[SERVER_HIDE] = g_signal_new(INDICATE_SERVER_SIGNAL_SERVER_HIDE, G_TYPE_FROM_CLASS (class), G_SIGNAL_RUN_LAST, @@ -198,6 +229,13 @@ indicate_server_class_init (IndicateServerClass * class) NULL, NULL, g_cclosure_marshal_VOID__POINTER, G_TYPE_NONE, 1, G_TYPE_STRING); + /** + IndicateServer::server-display: + + Emitted when a listener signals that the server itself should be + displayed. This signal is caused by a user clicking on the application + item in the Messaging Menu. This signal is emitted by DBus. + */ signals[SERVER_DISPLAY] = g_signal_new(INDICATE_SERVER_SIGNAL_SERVER_DISPLAY, G_TYPE_FROM_CLASS (class), G_SIGNAL_RUN_LAST, @@ -205,6 +243,12 @@ indicate_server_class_init (IndicateServerClass * class) NULL, NULL, g_cclosure_marshal_VOID__VOID, G_TYPE_NONE, 0); + /** + IndicateServer::interest-added: + + Emitted when a listener signals that they are interested in + this server for a particular reason. This signal is emitted by DBus. + */ signals[INTEREST_ADDED] = g_signal_new(INDICATE_SERVER_SIGNAL_INTEREST_ADDED, G_TYPE_FROM_CLASS (class), G_SIGNAL_RUN_LAST, @@ -212,6 +256,12 @@ indicate_server_class_init (IndicateServerClass * class) NULL, NULL, g_cclosure_marshal_VOID__UINT, G_TYPE_NONE, 1, G_TYPE_UINT); + /** + IndicateServer::interest-removed: + + Emitted when a listener signals that they are no longer interested in + this server for a particular reason. This signal is emitted by DBus. + */ signals[INTEREST_REMOVED] = g_signal_new(INDICATE_SERVER_SIGNAL_INTEREST_REMOVED, G_TYPE_FROM_CLASS (class), G_SIGNAL_RUN_LAST, -- cgit v1.2.3 From dbfd181e1068fdbafd97bf11f5654dc8bc14caa5 Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Thu, 30 Apr 2009 20:44:43 -0500 Subject: Woot, signal documentation works now. --- libindicate/server.h | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) (limited to 'libindicate') diff --git a/libindicate/server.h b/libindicate/server.h index f0e1569..820e641 100644 --- a/libindicate/server.h +++ b/libindicate/server.h @@ -75,14 +75,14 @@ struct _IndicateServer { /** IndicateServerClass: @parent: Parent Class - @indicator_added: Slot for #IndicatorServer::indicator-added - @indicator_removed: Slot for #IndicatorServer::indicator-removed - @indicator_modified: Slot for #IndicatorServer::indicator-modified - @server_show: Slot for #IndicatorServer::server-show - @server_hide: Slot for #IndicatorServer::server-hide - @server_display: Slot for #IndicatorServer::server-display - @interest_added: Slot for #IndicatorServer::interest-added - @interest_removed: Slot for #IndicatorServer::interest-removed + @indicator_added: Slot for #IndicateServer::indicator-added. + @indicator_removed: Slot for #IndicateServer::indicator-removed. + @indicator_modified: Slot for #IndicateServer::indicator-modified. + @server_show: Slot for #IndicateServer::server-show. + @server_hide: Slot for #IndicateServer::server-hide. + @server_display: Slot for #IndicateServer::server-display. + @interest_added: Slot for #IndicateServer::interest-added. + @interest_removed: Slot for #IndicateServer::interest-removed. @get_indicator_count: Returns the number of indicators that are visible on the bus. Hidden indicators should not be counted. @get_indciator_count_by_type: Returns the number of indicators that are -- cgit v1.2.3 From f64bd73788470bb55a2a1060b7fea815d769d0d4 Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Thu, 30 Apr 2009 20:53:10 -0500 Subject: Adding in arguments on the signal docs. --- libindicate/server.c | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) (limited to 'libindicate') diff --git a/libindicate/server.c b/libindicate/server.c index e8dad3f..6cc6f34 100644 --- a/libindicate/server.c +++ b/libindicate/server.c @@ -165,9 +165,14 @@ indicate_server_class_init (IndicateServerClass * class) /** IndicateServer::indicator-added: + @arg0: The #IndicateServer object + @arg1: The #IndicateIndicator ID number + @arg2: The type of the indicator Emitted every time that a new indicator is made visible to the world. This results in a signal on DBus. + + Can be emitted by subclasses using indicate_server_emit_indicator_added() */ signals[INDICATOR_ADDED] = g_signal_new(INDICATE_SERVER_SIGNAL_INDICATOR_ADDED, G_TYPE_FROM_CLASS (class), @@ -178,9 +183,14 @@ indicate_server_class_init (IndicateServerClass * class) G_TYPE_NONE, 2, G_TYPE_UINT, G_TYPE_STRING); /** IndicateServer::indicator-removed: + @arg0: The #IndicateServer object + @arg1: The #IndicateIndicator ID number + @arg2: The type of the indicator Emitted every time that a new indicator is made invisible to the world. This results in a signal on DBus. + + Can be emitted by subclasses using indicate_server_emit_indicator_removed() */ signals[INDICATOR_REMOVED] = g_signal_new(INDICATE_SERVER_SIGNAL_INDICATOR_REMOVED, G_TYPE_FROM_CLASS (class), @@ -191,9 +201,14 @@ indicate_server_class_init (IndicateServerClass * class) G_TYPE_NONE, 2, G_TYPE_UINT, G_TYPE_STRING); /** IndicateServer::indicator-modified: + @arg0: The #IndicateServer object + @arg1: The #IndicateIndicator ID number + @arg2: The name of the property modified Emitted every time that a property on an indicator changes and it is visible to the world. This results in a signal on DBus. + + Can be emitted by subclasses using indicate_server_emit_indicator_modified() */ signals[INDICATOR_MODIFIED] = g_signal_new(INDICATE_SERVER_SIGNAL_INDICATOR_MODIFIED, G_TYPE_FROM_CLASS (class), @@ -204,6 +219,8 @@ indicate_server_class_init (IndicateServerClass * class) G_TYPE_NONE, 2, G_TYPE_UINT, G_TYPE_STRING); /** IndicateServer::server-show: + @arg0: The #IndicateServer object + @arg1: The type of the server Emitted when a server comes onto DBus by being shown. This is typically when listeners start reacting to the application's @@ -218,6 +235,8 @@ indicate_server_class_init (IndicateServerClass * class) G_TYPE_NONE, 1, G_TYPE_STRING); /** IndicateServer::server-hide: + @arg0: The #IndicateServer object + @arg1: The type of the server Emitted when a server removes itself from DBus. This results in a signal on DBus. @@ -231,10 +250,13 @@ indicate_server_class_init (IndicateServerClass * class) G_TYPE_NONE, 1, G_TYPE_STRING); /** IndicateServer::server-display: + @arg0: The #IndicateServer object Emitted when a listener signals that the server itself should be displayed. This signal is caused by a user clicking on the application item in the Messaging Menu. This signal is emitted by DBus. + + Can be emitted by subclasses using indicate_server_emit_server_display() */ signals[SERVER_DISPLAY] = g_signal_new(INDICATE_SERVER_SIGNAL_SERVER_DISPLAY, G_TYPE_FROM_CLASS (class), @@ -245,6 +267,8 @@ indicate_server_class_init (IndicateServerClass * class) G_TYPE_NONE, 0); /** IndicateServer::interest-added: + @arg0: The #IndicateServer object + @arg1: The interest that was added from #IndicateInterests Emitted when a listener signals that they are interested in this server for a particular reason. This signal is emitted by DBus. @@ -258,6 +282,8 @@ indicate_server_class_init (IndicateServerClass * class) G_TYPE_NONE, 1, G_TYPE_UINT); /** IndicateServer::interest-removed: + @arg0: The #IndicateServer object + @arg1: The interest that was removed from #IndicateInterests Emitted when a listener signals that they are no longer interested in this server for a particular reason. This signal is emitted by DBus. -- cgit v1.2.3 From 1595ee29749284d0606f4a5524aeefbc728498e4 Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Thu, 30 Apr 2009 20:58:42 -0500 Subject: Adding in arguments for the signals --- libindicate/indicator.c | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) (limited to 'libindicate') diff --git a/libindicate/indicator.c b/libindicate/indicator.c index 15788d4..207d975 100644 --- a/libindicate/indicator.c +++ b/libindicate/indicator.c @@ -78,6 +78,7 @@ indicate_indicator_class_init (IndicateIndicatorClass * class) /** IndicateIndicator::display: + @arg0: The #IndicateIndicator object Emitted when the user has clicked on this indicator. In the messaging indicator this would be when someone clicks on the @@ -92,9 +93,12 @@ indicate_indicator_class_init (IndicateIndicatorClass * class) G_TYPE_NONE, 0); /** IndicateIndicator::hide: + @arg0: The #IndicateIndicator object Emitted every time this indicator is hidden. This is mostly used by #IndicateServer. + + Typically this results in an emition of #IndicateServer::indicator-removed. */ signals[HIDE] = g_signal_new(INDICATE_INDICATOR_SIGNAL_HIDE, G_TYPE_FROM_CLASS(class), @@ -104,10 +108,13 @@ indicate_indicator_class_init (IndicateIndicatorClass * class) g_cclosure_marshal_VOID__VOID, G_TYPE_NONE, 0); /** - IndicateIndicator::hide: + IndicateIndicator::show: + @arg0: The #IndicateIndicator object Emitted every time this indicator is shown. This is mostly used by #IndicateServer. + + Typically this results in an emition of #IndicateServer::indicator-added. */ signals[SHOW] = g_signal_new(INDICATE_INDICATOR_SIGNAL_SHOW, G_TYPE_FROM_CLASS(class), @@ -118,9 +125,13 @@ indicate_indicator_class_init (IndicateIndicatorClass * class) G_TYPE_NONE, 0); /** IndicateIndicator::modified: + @arg0: The #IndicateIndicator object + @arg1: The name of the property that changed. Emitted every time an indicator property is changed. This is mostly used by #IndicateServer. + + Typically this results in an emition of #IndicateServer::indicator-modified. */ signals[MODIFIED] = g_signal_new(INDICATE_INDICATOR_SIGNAL_MODIFIED, G_TYPE_FROM_CLASS(class), -- cgit v1.2.3 From 51f63e11e0e39400d5be18a303a18989a7d67ea3 Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Thu, 30 Apr 2009 21:42:39 -0500 Subject: Documenting most of the public visible functions --- libindicate/server.c | 134 ++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 133 insertions(+), 1 deletion(-) (limited to 'libindicate') diff --git a/libindicate/server.c b/libindicate/server.c index 6cc6f34..cec9bd2 100644 --- a/libindicate/server.c +++ b/libindicate/server.c @@ -442,7 +442,17 @@ indicate_server_error_quark (void) return quark; } - +/** + indicate_server_show: + @server: The #IndicateServer to be shown + + This function exports the object onto DBus and shows it + to the world. This will be the start of it receiving external + signals from DBus. It is likely that, if there are listeners + running, there will several #IndicateServer::interest-added + signals coming shortly after this function. This function + emits the #IndicateServer::server-added signal across the bus. +*/ void indicate_server_show (IndicateServer * server) { @@ -479,6 +489,16 @@ indicate_server_show (IndicateServer * server) return; } +/** + indicate_server_hide: + @server: The #IndicateServer to hide. + + This function hides the server from DBus so that it does + not get signals anymore. This causes the signal #IndicateServer::server-hide + to be sent across the bus for all listeners. Also internally + it will signal #IndicateServer::interest-removed for all the + interests that were currently set for this server. +*/ void indicate_server_hide (IndicateServer * server) { @@ -686,6 +706,16 @@ indicator_modified_cb (IndicateIndicator * indicator, gchar * property, Indicate g_signal_emit(server, signals[INDICATOR_MODIFIED], 0, indicate_indicator_get_id(indicator), property, TRUE); } +/** + indicate_server_add_indicator: + @server: The #IndicateServer to add the #IndicateIndictor to. + @indicator: The #IndicateIndicator to add. + + This function adds an indicator @indicator to the list that are + watched by the server @server. This means that signals that are + emitted by the indicator will be picked up and passed via DBus onto + listeners of the application. +*/ void indicate_server_add_indicator (IndicateServer * server, IndicateIndicator * indicator) { @@ -709,6 +739,14 @@ indicate_server_add_indicator (IndicateServer * server, IndicateIndicator * indi return; } +/** + indicate_server_remove_indicator: + @server: The #IndicateServer to remove the #IndicateIndictor from. + @indicator: The #IndicateIndicator to remove. + + Removes an indicator @indicator from being watched by the server @server + so it's signals are no longer watched and set over DBus. +*/ void indicate_server_remove_indicator (IndicateServer * server, IndicateIndicator * indicator) { @@ -739,6 +777,15 @@ indicate_server_set_dbus_object (const gchar * obj) return; } +/** + indicate_server_set_desktop_file: + @server: The #IndicateServer to set the type of + @type: The new desktop file representing the server + + This is a convience function to set the #IndicateServer:desktop + property of the @server object. The property can also be set + via traditional means, but this one is easier to read. +*/ void indicate_server_set_desktop_file (IndicateServer * server, const gchar * path) { @@ -749,6 +796,15 @@ indicate_server_set_desktop_file (IndicateServer * server, const gchar * path) return; } +/** + indicate_server_set_type: + @server: The #IndicateServer to set the type of + @type: The new type of the server + + This is a convience function to set the #IndicateServer:type + property of the @server object. The property can also be set + via traditional means, but this one is easier to read. +*/ void indicate_server_set_type (IndicateServer * server, const gchar * type) { @@ -761,6 +817,17 @@ indicate_server_set_type (IndicateServer * server, const gchar * type) static IndicateServer * default_indicate_server = NULL; +/** + indicate_server_ref_default: + + This function will return a reference to the default #IndicateServer + reference if there is one, or it will create one if one had not + previously been created. It is recommended that all applications + use this function to create a #IndicateServer as it ensure that there + is only one per application. + + Return value: A reference to the default #IndicateServer instance. +*/ IndicateServer * indicate_server_ref_default (void) { @@ -775,6 +842,16 @@ indicate_server_ref_default (void) return default_indicate_server; } +/** + indicate_server_set_default: + @server: The #IndicateServer that should be used + + This function is used to set the default #IndicateServer that will + be used when creating #IndicateIndicators or for anyone else that + calls indicate_server_ref_default(). Typically this is just an + instance of #IndicateServer but applications that create a subclass + of #IndicateServer should set this as well. +*/ void indicate_server_set_default (IndicateServer * server) { @@ -1179,6 +1256,15 @@ _indicate_server_show_indicator_to_user (IndicateServer * server, guint id, GErr return TRUE; } +/** + indicate_server_get_next_id: + @server: The #IndicateServer the ID will be on + + Returns the next available unused ID that an indicator + can have. + + Return value: A valid indicator ID. +*/ guint indicate_server_get_next_id (IndicateServer * server) { @@ -1283,6 +1369,17 @@ _indicate_server_remove_interest (IndicateServer * server, gchar * interest, DBu return FALSE; } +/** + indicate_server_check_interest: + @server: The #IndicateServer being checked + @interest: Which interest type we're checking for + + This function looks at all the interest that various listeners + have specified that they have for this server and returns whether + there is a listener that has the interest specified in @interest. + + Return value: %TRUE if a listener as the interest otherwise %FALSE +*/ gboolean indicate_server_check_interest (IndicateServer * server, IndicateInterests interest) { @@ -1297,6 +1394,16 @@ indicate_server_check_interest (IndicateServer * server, IndicateInterests inter } /* Signal emission functions for sub-classes of the server */ + +/** + indicate_server_emit_indicator_added: + @server: The #IndicateServer being represented + @id: The ID of the indicator being added + @type: The type of the indicator + + This function emits the #IndicateServer::indicator-added signal and is + used by subclasses. +*/ void indicate_server_emit_indicator_added (IndicateServer *server, guint id, const gchar *type) { @@ -1306,6 +1413,15 @@ indicate_server_emit_indicator_added (IndicateServer *server, guint id, const gc g_signal_emit(server, signals[INDICATOR_ADDED], 0, id, type); } +/** + indicate_server_emit_indicator_removed: + @server: The #IndicateServer being represented + @id: The ID of the indicator being removed + @type: The type of the indicator + + This function emits the #IndicateServer::indicator-removed signal and is + used by subclasses. +*/ void indicate_server_emit_indicator_removed (IndicateServer *server, guint id, const gchar *type) { @@ -1315,6 +1431,15 @@ indicate_server_emit_indicator_removed (IndicateServer *server, guint id, const g_signal_emit(server, signals[INDICATOR_REMOVED], 0, id, type); } +/** + indicate_server_emit_indicator_modified: + @server: The #IndicateServer being represented + @id: The ID of the indicator with the modified property + @proprerty: The name of the property being modified + + This function emits the #IndicateServer::indicator-modified signal and is + used by subclasses. +*/ void indicate_server_emit_indicator_modified (IndicateServer *server, guint id, const gchar *property) { @@ -1324,6 +1449,13 @@ indicate_server_emit_indicator_modified (IndicateServer *server, guint id, const g_signal_emit(server, signals[INDICATOR_MODIFIED], 0, id, property); } +/** + indicate_server_emit_server_display: + @server: The #IndicateServer being displayed + + This function emits the #IndicateServer::server-display signal and is + used by subclasses. +*/ void indicate_server_emit_server_display (IndicateServer *server) { -- cgit v1.2.3 From 3810da4bb215f815f9528e9fa7145de9c99efbff Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Thu, 30 Apr 2009 21:45:19 -0500 Subject: Fixing some documentation bugs. --- libindicate/indicator-message.h | 1 + libindicate/server.c | 4 ++-- libindicate/server.h | 2 +- 3 files changed, 4 insertions(+), 3 deletions(-) (limited to 'libindicate') diff --git a/libindicate/indicator-message.h b/libindicate/indicator-message.h index 62a41b7..76273c6 100644 --- a/libindicate/indicator-message.h +++ b/libindicate/indicator-message.h @@ -49,6 +49,7 @@ typedef struct _IndicateIndicatorMessageClass IndicateIndicatorMessageClass; /** IndicateIndicatorMessageClass: + @parent_class: Parent Class Subclass of #IndicateIndicator with no new functions or signals. */ diff --git a/libindicate/server.c b/libindicate/server.c index cec9bd2..cd8b33a 100644 --- a/libindicate/server.c +++ b/libindicate/server.c @@ -780,7 +780,7 @@ indicate_server_set_dbus_object (const gchar * obj) /** indicate_server_set_desktop_file: @server: The #IndicateServer to set the type of - @type: The new desktop file representing the server + @path: The new desktop file representing the server This is a convience function to set the #IndicateServer:desktop property of the @server object. The property can also be set @@ -1435,7 +1435,7 @@ indicate_server_emit_indicator_removed (IndicateServer *server, guint id, const indicate_server_emit_indicator_modified: @server: The #IndicateServer being represented @id: The ID of the indicator with the modified property - @proprerty: The name of the property being modified + @property: The name of the property being modified This function emits the #IndicateServer::indicator-modified signal and is used by subclasses. diff --git a/libindicate/server.h b/libindicate/server.h index 820e641..2a300e2 100644 --- a/libindicate/server.h +++ b/libindicate/server.h @@ -85,7 +85,7 @@ struct _IndicateServer { @interest_removed: Slot for #IndicateServer::interest-removed. @get_indicator_count: Returns the number of indicators that are visible on the bus. Hidden indicators should not be counted. - @get_indciator_count_by_type: Returns the number of indicators that are + @get_indicator_count_by_type: Returns the number of indicators that are of a given type and visible on the bus. @get_indicator_list: List all of the indicators that are visible. @get_indicator_list_by_type: List all of the indicators of a given -- cgit v1.2.3 From c027c7f3d30bc35937a5b900355bd593e2a12a04 Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Thu, 30 Apr 2009 22:29:44 -0500 Subject: Fixing typo --- libindicate/indicator.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'libindicate') diff --git a/libindicate/indicator.c b/libindicate/indicator.c index 207d975..76eb616 100644 --- a/libindicate/indicator.c +++ b/libindicate/indicator.c @@ -398,7 +398,7 @@ indicate_indicator_set_property_icon (IndicateIndicator * indicator, const gchar indicate_indicator_set_property_time: @indicator: a #IndicateIndicator to act on @key: name of the property - @data: time to set property with + @time: time to set property with This is a helper function that wraps around #indicate_indicator_set_property but takes an #GTimeVal parameter. It then takes the @data -- cgit v1.2.3 From e3a0b5a84b1da2dd632972dccb0dad35859d5957 Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Tue, 21 Jul 2009 10:42:36 -0500 Subject: Oops, we shouldn't have a prototype for a function that doesn't exist. Thanks to Aurilien. --- libindicate/server.h | 3 --- 1 file changed, 3 deletions(-) (limited to 'libindicate') diff --git a/libindicate/server.h b/libindicate/server.h index 2a300e2..ef938c3 100644 --- a/libindicate/server.h +++ b/libindicate/server.h @@ -151,9 +151,6 @@ struct _IndicateServerClass { GType indicate_server_get_type (void) G_GNUC_CONST; -/* Create a new server */ -IndicateServer * indicate_server_new (void); - /* Sets the object. By default this is /org/freedesktop/indicators */ void indicate_server_set_dbus_object (const gchar * obj); -- cgit v1.2.3 From 5cbbca20e09a1d7281c566b01b1fc2b50a81d0b5 Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Tue, 21 Jul 2009 11:37:51 -0500 Subject: Creating the server marshallers that we need --- libindicate/Makefile.am | 15 +++++++++++++++ libindicate/server-marshal.list | 29 +++++++++++++++++++++++++++++ 2 files changed, 44 insertions(+) create mode 100644 libindicate/server-marshal.list (limited to 'libindicate') diff --git a/libindicate/Makefile.am b/libindicate/Makefile.am index 3ad6247..a35cf35 100644 --- a/libindicate/Makefile.am +++ b/libindicate/Makefile.am @@ -9,6 +9,7 @@ EXTRA_DIST = \ indicate-interface.xml \ indicate-listener.xml \ listener-marshal.list \ + server-marshal.list \ indicate.pc.in BUILT_SOURCES = \ @@ -18,6 +19,8 @@ BUILT_SOURCES = \ dbus-listener-client.h \ listener-marshal.c \ listener-marshal.h \ + server-marshal.c \ + server-marshal.h \ $(ENUM_FILE).h \ $(ENUM_FILE).c @@ -45,6 +48,8 @@ libindicate_la_SOURCES = \ dbus-listener-client.h \ indicate-enum-types.c \ server.c \ + server-marshal.c \ + server-marshal.h \ listener.c \ listener-marshal.c \ listener-marshal.h \ @@ -101,6 +106,16 @@ listener-marshal.c: $(srcdir)/listener-marshal.list --prefix=_indicate_listener_marshal $(srcdir)/listener-marshal.list \ > listener-marshal.c +server-marshal.h: $(srcdir)/server-marshal.list + glib-genmarshal --header \ + --prefix=_indicate_server_marshal $(srcdir)/server-marshal.list \ + > server-marshal.h + +server-marshal.c: $(srcdir)/server-marshal.list + glib-genmarshal --body \ + --prefix=_indicate_server_marshal $(srcdir)/server-marshal.list \ + > server-marshal.c + pkgconfig_DATA = indicate.pc pkgconfigdir = $(libdir)/pkgconfig diff --git a/libindicate/server-marshal.list b/libindicate/server-marshal.list new file mode 100644 index 0000000..540f0fe --- /dev/null +++ b/libindicate/server-marshal.list @@ -0,0 +1,29 @@ +# A library to allow applictions to provide simple indications of +# information to be displayed to users of the application through the +# interface shell. +# +# Copyright 2009 Canonical Ltd. +# +# Authors: +# Ted Gould +# +# This program is free software: you can redistribute it and/or modify it +# under the terms of either or both of the following licenses: +# +# 1) the GNU Lesser General Public License version 3, as published by the +# Free Software Foundation; and/or +# 2) the GNU Lesser General Public License version 2.1, as published by +# the Free Software Foundation. +# +# This program is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranties of +# MERCHANTABILITY, SATISFACTORY QUALITY or FITNESS FOR A PARTICULAR +# PURPOSE. See the applicable version of the GNU Lesser General Public +# License for more details. +# +# You should have received a copy of both the GNU Lesser General Public +# License version 3 and version 2.1 along with this program. If not, see +# +# +# IndicatorAdded +VOID:UINT,STRING -- cgit v1.2.3 From b8b2c52d84980f6132e6071dc879ac5e40b90880 Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Tue, 21 Jul 2009 11:39:26 -0500 Subject: Using the server marshaller --- libindicate/server.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'libindicate') diff --git a/libindicate/server.c b/libindicate/server.c index cd8b33a..95a5c3c 100644 --- a/libindicate/server.c +++ b/libindicate/server.c @@ -29,6 +29,7 @@ License version 3 and version 2.1 along with this program. If not, see #include "server.h" #include "interests-priv.h" +#include "server-marshal.h" #include #include @@ -179,7 +180,7 @@ indicate_server_class_init (IndicateServerClass * class) G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET (IndicateServerClass, indicator_added), NULL, NULL, - g_cclosure_marshal_VOID__UINT_POINTER, + _indicate_server_marshal_VOID__UINT_STRING, G_TYPE_NONE, 2, G_TYPE_UINT, G_TYPE_STRING); /** IndicateServer::indicator-removed: -- cgit v1.2.3 From 53908231e04a6b04ff07bde18bc737079a83aa4f Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Tue, 21 Jul 2009 11:41:46 -0500 Subject: Fixing the other signal marshallers --- libindicate/server.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) (limited to 'libindicate') diff --git a/libindicate/server.c b/libindicate/server.c index 95a5c3c..a3d3be8 100644 --- a/libindicate/server.c +++ b/libindicate/server.c @@ -198,7 +198,7 @@ indicate_server_class_init (IndicateServerClass * class) G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET (IndicateServerClass, indicator_removed), NULL, NULL, - g_cclosure_marshal_VOID__UINT_POINTER, + _indicate_server_marshal_VOID__UINT_STRING, G_TYPE_NONE, 2, G_TYPE_UINT, G_TYPE_STRING); /** IndicateServer::indicator-modified: @@ -216,7 +216,7 @@ indicate_server_class_init (IndicateServerClass * class) G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET (IndicateServerClass, indicator_modified), NULL, NULL, - g_cclosure_marshal_VOID__UINT_POINTER, + _indicate_server_marshal_VOID__UINT_STRING, G_TYPE_NONE, 2, G_TYPE_UINT, G_TYPE_STRING); /** IndicateServer::server-show: @@ -232,7 +232,7 @@ indicate_server_class_init (IndicateServerClass * class) G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET (IndicateServerClass, server_show), NULL, NULL, - g_cclosure_marshal_VOID__POINTER, + g_cclosure_marshal_VOID__STRING, G_TYPE_NONE, 1, G_TYPE_STRING); /** IndicateServer::server-hide: @@ -247,7 +247,7 @@ indicate_server_class_init (IndicateServerClass * class) G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET (IndicateServerClass, server_hide), NULL, NULL, - g_cclosure_marshal_VOID__POINTER, + g_cclosure_marshal_VOID__STRING, G_TYPE_NONE, 1, G_TYPE_STRING); /** IndicateServer::server-display: -- cgit v1.2.3 From 8157a2c4c11e6a15b52b100e5c58ba9d6cd48850 Mon Sep 17 00:00:00 2001 From: Aurelien Gateau Date: Mon, 27 Jul 2009 17:18:41 +0200 Subject: Destroy dbus proxies in listener finalize. Makes it possible to destroy a listener and recreate one without calling the old instance callbacks (useful for unit-tests). --- libindicate/listener.c | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) (limited to 'libindicate') diff --git a/libindicate/listener.c b/libindicate/listener.c index bd3639d..5a64c81 100644 --- a/libindicate/listener.c +++ b/libindicate/listener.c @@ -277,8 +277,19 @@ indicate_listener_init (IndicateListener * listener) static void indicate_listener_finalize (GObject * obj) { - /* IndicateListener * listener = INDICATE_LISTENER(obj); */ - + IndicateListener * listener = INDICATE_LISTENER(obj); + IndicateListenerPrivate * priv = INDICATE_LISTENER_GET_PRIVATE(listener); + + if (priv->todo_idle != 0) { + g_idle_remove_by_data(obj); + } + /* Hack: proxy_struct_destroy() lacks a user_data parameter, but since the + * caller is responsible for handling params on the stack, it works + */ + g_list_foreach(priv->proxies_possible, (GFunc)proxy_struct_destroy, NULL); + g_list_free(priv->proxies_possible); + g_list_foreach(priv->proxies_working, (GFunc)proxy_struct_destroy, NULL); + g_list_free(priv->proxies_working); G_OBJECT_CLASS (indicate_listener_parent_class)->finalize (obj); return; } -- cgit v1.2.3 From 7f379d5d7fb9ddf834be4864324637b12af98750 Mon Sep 17 00:00:00 2001 From: Aurelien Gateau Date: Mon, 27 Jul 2009 17:20:24 +0200 Subject: Removed warning: it's annoying in unittests. --- libindicate/listener.c | 2 -- 1 file changed, 2 deletions(-) (limited to 'libindicate') diff --git a/libindicate/listener.c b/libindicate/listener.c index 5a64c81..501d367 100644 --- a/libindicate/listener.c +++ b/libindicate/listener.c @@ -297,8 +297,6 @@ indicate_listener_finalize (GObject * obj) IndicateListener * indicate_listener_new (void) { - g_warning("Creating a new listener is generally discouraged, please use indicate_listener_ref_default"); - IndicateListener * listener; listener = g_object_new(INDICATE_TYPE_LISTENER, NULL); return listener; -- cgit v1.2.3 From b3d3f3de3bb73ac8cc77ed5c8bde5aeb76073af2 Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Mon, 3 Aug 2009 18:50:57 +0100 Subject: Adding a function to set the server of the indicator upon creation. indicate_indicator_new_with_server() --- libindicate/indicator.c | 30 ++++++++++++++++++++++++++++++ libindicate/indicator.h | 5 ++++- libindicate/server.h | 3 ++- 3 files changed, 36 insertions(+), 2 deletions(-) (limited to 'libindicate') diff --git a/libindicate/indicator.c b/libindicate/indicator.c index 76eb616..92712bd 100644 --- a/libindicate/indicator.c +++ b/libindicate/indicator.c @@ -203,6 +203,36 @@ indicate_indicator_new (void) return indicator; } +/** + indicate_indicator_new_with_server: + @server: The server that should be associated with this indicator. + + Builds a new indicator object using g_object_new() and sets + the server to the specified server. Also, adds a reference + to the server. + + Return value: A pointer to a new #IndicateIndicator object. +*/ +IndicateIndicator * +indicate_indicator_new_with_server (IndicateServer * server) +{ + g_return_val_if_fail(server != NULL, NULL); + + IndicateIndicator * indicator = g_object_new(INDICATE_TYPE_INDICATOR, NULL); + + IndicateIndicatorPrivate * priv = INDICATE_INDICATOR_GET_PRIVATE(indicator); + if (priv->server != NULL) { + g_object_unref(priv->server); + priv->server = NULL; + } + + priv->server = server; + g_object_ref(priv->server); + + return indicator; +} + + /** indicate_indicator_show: @indicator: a #IndicateIndicator to act on diff --git a/libindicate/indicator.h b/libindicate/indicator.h index 3e2a803..118c6c0 100644 --- a/libindicate/indicator.h +++ b/libindicate/indicator.h @@ -68,6 +68,8 @@ struct _IndicateIndicator { GObject parent; }; +#include "server.h" + /** IndicateIndicatorClass: @parent_class: Parent class #GObjectClass. @@ -109,7 +111,9 @@ struct _IndicateIndicatorClass { GType indicate_indicator_get_type(void) G_GNUC_CONST; +/* New Indicator Functions */ IndicateIndicator * indicate_indicator_new (void); +IndicateIndicator * indicate_indicator_new_with_server (IndicateServer * server); /* Show and hide this indicator */ void indicate_indicator_show (IndicateIndicator * indicator); @@ -167,4 +171,3 @@ GPtrArray * indicate_indicator_list_properties (IndicateIndicator * indicator); G_END_DECLS #endif /* INDICATE_INDICATOR_H_INCLUDED__ */ - diff --git a/libindicate/server.h b/libindicate/server.h index ef938c3..cff76c4 100644 --- a/libindicate/server.h +++ b/libindicate/server.h @@ -33,7 +33,6 @@ License version 3 and version 2.1 along with this program. If not, see #include #include -#include "indicator.h" #include "interests.h" G_BEGIN_DECLS @@ -72,6 +71,8 @@ struct _IndicateServer { GObject parent; }; +#include "indicator.h" + /** IndicateServerClass: @parent: Parent Class -- cgit v1.2.3 From 78ad4c46f88249a278dc0d86a3241716c0e7f385 Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Mon, 3 Aug 2009 23:31:00 +0100 Subject: Moving the listener code and some indicator code into libindicate-gtk --- libindicate/Makefile.am | 1 + libindicate/indicator.c | 44 ------------------------ libindicate/indicator.h | 3 -- libindicate/listener-private.h | 63 ++++++++++++++++++++++++++++++++++ libindicate/listener.c | 77 ++---------------------------------------- libindicate/listener.h | 7 ---- 6 files changed, 66 insertions(+), 129 deletions(-) create mode 100644 libindicate/listener-private.h (limited to 'libindicate') diff --git a/libindicate/Makefile.am b/libindicate/Makefile.am index a35cf35..d4746fb 100644 --- a/libindicate/Makefile.am +++ b/libindicate/Makefile.am @@ -53,6 +53,7 @@ libindicate_la_SOURCES = \ listener.c \ listener-marshal.c \ listener-marshal.h \ + listener-private.h \ indicator.c \ indicator-message.c \ interests-priv.h diff --git a/libindicate/indicator.c b/libindicate/indicator.c index 92712bd..cb257eb 100644 --- a/libindicate/indicator.c +++ b/libindicate/indicator.c @@ -380,50 +380,6 @@ indicate_indicator_set_property (IndicateIndicator * indicator, const gchar * ke return class->set_property(indicator, key, data); } -/** - indicate_indicator_set_property_icon: - @indicator: a #IndicateIndicator to act on - @key: name of the property - @data: icon to set property with - - This is a helper function that wraps around #indicate_indicator_set_property - but takes an #GdkPixbuf parameter. It then takes the @data - parameter, turns it into a PNG, base64 encodes it and then - uses that data to call #indicate_indicator_set_property. -*/ -void -indicate_indicator_set_property_icon (IndicateIndicator * indicator, const gchar * key, const GdkPixbuf * data) -{ - if (!GDK_IS_PIXBUF(data)) { - g_warning("Invalide GdkPixbuf"); - return; - } - - GError * error = NULL; - gchar * png_data; - gsize png_data_len; - - if (!gdk_pixbuf_save_to_buffer((GdkPixbuf *)data, &png_data, &png_data_len, "png", &error, NULL)) { - if (error == NULL) { - g_warning("Unable to create pixbuf data stream: %d", png_data_len); - } else { - g_warning("Unable to create pixbuf data stream: %s", error->message); - g_error_free(error); - error = NULL; - } - - return; - } - - gchar * prop_str = g_base64_encode((guchar *)png_data, png_data_len); - indicate_indicator_set_property(indicator, key, prop_str); - - g_free(prop_str); - g_free(png_data); - - return; -} - /** indicate_indicator_set_property_time: @indicator: a #IndicateIndicator to act on diff --git a/libindicate/indicator.h b/libindicate/indicator.h index 118c6c0..20b998d 100644 --- a/libindicate/indicator.h +++ b/libindicate/indicator.h @@ -33,8 +33,6 @@ License version 3 and version 2.1 along with this program. If not, see #include #include -#include - G_BEGIN_DECLS /* Boilerplate */ @@ -132,7 +130,6 @@ void indicate_indicator_user_display (IndicateIndicator * indicator); /* Properties handling */ void indicate_indicator_set_property (IndicateIndicator * indicator, const gchar * key, const gchar * data); -void indicate_indicator_set_property_icon (IndicateIndicator * indicator, const gchar * key, const GdkPixbuf * data); void indicate_indicator_set_property_time (IndicateIndicator * indicator, const gchar * key, GTimeVal * time); const gchar * indicate_indicator_get_property (IndicateIndicator * indicator, const gchar * key); GPtrArray * indicate_indicator_list_properties (IndicateIndicator * indicator); diff --git a/libindicate/listener-private.h b/libindicate/listener-private.h new file mode 100644 index 0000000..ea1b108 --- /dev/null +++ b/libindicate/listener-private.h @@ -0,0 +1,63 @@ +/* +A library to allow applictions to provide simple indications of +information to be displayed to users of the application through the +interface shell. + +Copyright 2009 Canonical Ltd. + +Authors: + Ted Gould + +This program is free software: you can redistribute it and/or modify it +under the terms of either or both of the following licenses: + +1) the GNU Lesser General Public License version 3, as published by the +Free Software Foundation; and/or +2) the GNU Lesser General Public License version 2.1, as published by +the Free Software Foundation. + +This program is distributed in the hope that it will be useful, but +WITHOUT ANY WARRANTY; without even the implied warranties of +MERCHANTABILITY, SATISFACTORY QUALITY or FITNESS FOR A PARTICULAR +PURPOSE. See the applicable version of the GNU Lesser General Public +License for more details. + +You should have received a copy of both the GNU Lesser General Public +License version 3 and version 2.1 along with this program. If not, see + +*/ + +#ifndef INDICATE_LISTENER_PRIVATE_H__ +#define INDICATE_LISTENER_PRIVATE_H__ 1 + +struct _IndicateListenerServer { + gchar * name; + DBusGProxy * proxy; + DBusGConnection * connection; + gboolean interests[INDICATE_INTEREST_LAST]; +}; + +struct _IndicateListenerIndicator { + guint id; +}; + +typedef struct _IndicateListenerPrivate IndicateListenerPrivate; +struct _IndicateListenerPrivate +{ + DBusGConnection * session_bus; + DBusGConnection * system_bus; + + DBusGProxy * dbus_proxy_session; + DBusGProxy * dbus_proxy_system; + + GList * proxies_working; + GList * proxies_possible; + + GArray * proxy_todo; + guint todo_idle; +}; + +#define INDICATE_LISTENER_GET_PRIVATE(o) \ + (G_TYPE_INSTANCE_GET_PRIVATE ((o), INDICATE_TYPE_LISTENER, IndicateListenerPrivate)) + +#endif /* INDICATE_LISTENER_PRIVATE_H__ */ diff --git a/libindicate/listener.c b/libindicate/listener.c index 501d367..48ad616 100644 --- a/libindicate/listener.c +++ b/libindicate/listener.c @@ -54,35 +54,7 @@ enum { static guint signals[LAST_SIGNAL] = { 0 }; -struct _IndicateListenerServer { - gchar * name; - DBusGProxy * proxy; - DBusGConnection * connection; - gboolean interests[INDICATE_INTEREST_LAST]; -}; - -struct _IndicateListenerIndicator { - guint id; -}; - -typedef struct _IndicateListenerPrivate IndicateListenerPrivate; -struct _IndicateListenerPrivate -{ - DBusGConnection * session_bus; - DBusGConnection * system_bus; - - DBusGProxy * dbus_proxy_session; - DBusGProxy * dbus_proxy_system; - - GList * proxies_working; - GList * proxies_possible; - - GArray * proxy_todo; - guint todo_idle; -}; - -#define INDICATE_LISTENER_GET_PRIVATE(o) \ - (G_TYPE_INSTANCE_GET_PRIVATE ((o), INDICATE_TYPE_LISTENER, IndicateListenerPrivate)) +#include "listener-private.h" typedef struct { DBusGProxy * proxy; @@ -718,8 +690,7 @@ proxy_indicators_free (gpointer data) typedef enum _get_property_type get_property_type; enum _get_property_type { PROPERTY_TYPE_STRING, - PROPERTY_TYPE_TIME, - PROPERTY_TYPE_ICON + PROPERTY_TYPE_TIME }; typedef struct _get_property_t get_property_t; @@ -750,44 +721,6 @@ get_property_cb (DBusGProxy *proxy, char * OUT_value, GError *error, gpointer us cb(get_property_data->listener, get_property_data->server, get_property_data->indicator, get_property_data->property, OUT_value, get_property_data->data); break; } - case PROPERTY_TYPE_ICON: { - indicate_listener_get_property_icon_cb cb = (indicate_listener_get_property_icon_cb)get_property_data->cb; - - /* There is no icon */ - if (OUT_value == NULL || OUT_value[0] == '\0') { - break; - } - - gsize length = 0; - guchar * icondata = g_base64_decode(OUT_value, &length); - - GInputStream * input = g_memory_input_stream_new_from_data(icondata, length, NULL); - if (input == NULL) { - g_warning("Cound not create input stream from icon property data"); - g_free(icondata); - break; - } - - GError * error = NULL; - GdkPixbuf * icon = gdk_pixbuf_new_from_stream(input, NULL, &error); - if (icon != NULL) { - cb(get_property_data->listener, get_property_data->server, get_property_data->indicator, get_property_data->property, icon, get_property_data->data); - } - - if (error != NULL) { - g_warning("Unable to build Pixbuf from icon data: %s", error->message); - g_error_free(error); - } - - error = NULL; - g_input_stream_close(input, NULL, &error); - if (error != NULL) { - g_warning("Unable to close input stream: %s", error->message); - g_error_free(error); - } - g_free(icondata); - break; - } case PROPERTY_TYPE_TIME: { indicate_listener_get_property_time_cb cb = (indicate_listener_get_property_time_cb)get_property_data->cb; GTimeVal time; @@ -834,12 +767,6 @@ indicate_listener_get_property_time (IndicateListener * listener, IndicateListen return get_property_helper(listener, server, indicator, property, G_CALLBACK(callback), data, PROPERTY_TYPE_TIME); } -void -indicate_listener_get_property_icon (IndicateListener * listener, IndicateListenerServer * server, IndicateListenerIndicator * indicator, gchar * property, indicate_listener_get_property_icon_cb callback, gpointer data) -{ - return get_property_helper(listener, server, indicator, property, G_CALLBACK(callback), data, PROPERTY_TYPE_ICON); -} - gboolean _indicate_listener_get_indicator_servers (IndicateListener * listener, GList * servers) { diff --git a/libindicate/listener.h b/libindicate/listener.h index 5bfd298..f2ed4b1 100644 --- a/libindicate/listener.h +++ b/libindicate/listener.h @@ -88,7 +88,6 @@ GType indicate_listener_get_type (void) G_GNUC_CONST; typedef void (*indicate_listener_get_property_cb) (IndicateListener * listener, IndicateListenerServer * server, IndicateListenerIndicator * indicator, gchar * property, gchar * propertydata, gpointer data); typedef void (*indicate_listener_get_property_time_cb) (IndicateListener * listener, IndicateListenerServer * server, IndicateListenerIndicator * indicator, gchar * property, GTimeVal * propertydata, gpointer data); -typedef void (*indicate_listener_get_property_icon_cb) (IndicateListener * listener, IndicateListenerServer * server, IndicateListenerIndicator * indicator, gchar * property, GdkPixbuf * propertydata, gpointer data); typedef void (*indicate_listener_get_server_property_cb) (IndicateListener * listener, IndicateListenerServer * server, gchar * value, gpointer data); /* Create a new listener */ @@ -106,12 +105,6 @@ void indicate_listener_get_property_time (IndicateListener * l gchar * property, indicate_listener_get_property_time_cb callback, gpointer data); -void indicate_listener_get_property_icon (IndicateListener * listener, - IndicateListenerServer * server, - IndicateListenerIndicator * indicator, - gchar * property, - indicate_listener_get_property_icon_cb callback, - gpointer data); void indicate_listener_display (IndicateListener * listener, IndicateListenerServer * server, IndicateListenerIndicator * indicator); -- cgit v1.2.3 From 3ec1d88af94c277d43c210f15c0ccded5b67898c Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Mon, 3 Aug 2009 23:53:17 +0100 Subject: Last libgtk-pixbuf header --- libindicate/listener.h | 2 -- 1 file changed, 2 deletions(-) (limited to 'libindicate') diff --git a/libindicate/listener.h b/libindicate/listener.h index f2ed4b1..37cda03 100644 --- a/libindicate/listener.h +++ b/libindicate/listener.h @@ -33,8 +33,6 @@ License version 3 and version 2.1 along with this program. If not, see #include #include -#include - #include "indicator.h" #include "server.h" #include "interests.h" -- cgit v1.2.3 From e4ac1dcf9a7372aa506d0acc773ae6b772ce976c Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Tue, 4 Aug 2009 12:25:24 +0100 Subject: Update the pc file from the GTK split out. --- libindicate/indicate.pc.in | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'libindicate') diff --git a/libindicate/indicate.pc.in b/libindicate/indicate.pc.in index cdc79b6..ff17ecb 100644 --- a/libindicate/indicate.pc.in +++ b/libindicate/indicate.pc.in @@ -5,7 +5,7 @@ bindir=@bindir@ includedir=@includedir@ Cflags: -I${includedir}/libindicate-0.1 -Requires: gtk+-2.0 dbus-glib-1 +Requires: gobject-2.0 glib-2.0 dbus-glib-1 Libs: -L${libdir} -lindicate Name: libindicate -- cgit v1.2.3