From 53b477561da7b49fcf208cf615a42e3b0820c0b8 Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Mon, 13 Apr 2009 16:23:09 -0500 Subject: Putting in more gobject based examples and getting all the libraries tied in to make them work. --- libdbusmenu-glib/menuitem.c | 48 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 48 insertions(+) create mode 100644 libdbusmenu-glib/menuitem.c (limited to 'libdbusmenu-glib/menuitem.c') diff --git a/libdbusmenu-glib/menuitem.c b/libdbusmenu-glib/menuitem.c new file mode 100644 index 0000000..080372a --- /dev/null +++ b/libdbusmenu-glib/menuitem.c @@ -0,0 +1,48 @@ +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif +#include "menuitem.h" + +typedef struct _DbusmenuMenuitemPrivate DbusmenuMenuitemPrivate; + +struct _DbusmenuMenuitemPrivate +{ +}; + +#define DBUSMENU_MENUITEM_GET_PRIVATE(o) \ +(G_TYPE_INSTANCE_GET_PRIVATE ((o), DBUSMENU_MENUITEM_TYPE, DbusmenuMenuitemPrivate)) + +static void dbusmenu_menuitem_class_init (DbusmenuMenuitemClass *klass); +static void dbusmenu_menuitem_init (DbusmenuMenuitem *self); +static void dbusmenu_menuitem_dispose (GObject *object); +static void dbusmenu_menuitem_finalize (GObject *object); + +G_DEFINE_TYPE (DbusmenuMenuitem, dbusmenu_menuitem, G_TYPE_OBJECT); + +static void +dbusmenu_menuitem_class_init (DbusmenuMenuitemClass *klass) +{ +GObjectClass *object_class = G_OBJECT_CLASS (klass); + +g_type_class_add_private (klass, sizeof (DbusmenuMenuitemPrivate)); + +object_class->dispose = dbusmenu_menuitem_dispose; +object_class->finalize = dbusmenu_menuitem_finalize; +} + +static void +dbusmenu_menuitem_init (DbusmenuMenuitem *self) +{ +} + +static void +dbusmenu_menuitem_dispose (GObject *object) +{ +G_OBJECT_CLASS (dbusmenu_menuitem_parent_class)->dispose (object); +} + +static void +dbusmenu_menuitem_finalize (GObject *object) +{ +G_OBJECT_CLASS (dbusmenu_menuitem_parent_class)->finalize (object); +} -- cgit v1.2.3 From 8f11b51313d3ca8a514b563c8a475f869c143f5f Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Thu, 16 Apr 2009 11:46:16 -0500 Subject: Changing the menuitem type --- libdbusmenu-glib/menuitem.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'libdbusmenu-glib/menuitem.c') diff --git a/libdbusmenu-glib/menuitem.c b/libdbusmenu-glib/menuitem.c index 080372a..c57acaa 100644 --- a/libdbusmenu-glib/menuitem.c +++ b/libdbusmenu-glib/menuitem.c @@ -10,7 +10,7 @@ struct _DbusmenuMenuitemPrivate }; #define DBUSMENU_MENUITEM_GET_PRIVATE(o) \ -(G_TYPE_INSTANCE_GET_PRIVATE ((o), DBUSMENU_MENUITEM_TYPE, DbusmenuMenuitemPrivate)) +(G_TYPE_INSTANCE_GET_PRIVATE ((o), DBUSMENU_TYPE_MENUITEM, DbusmenuMenuitemPrivate)) static void dbusmenu_menuitem_class_init (DbusmenuMenuitemClass *klass); static void dbusmenu_menuitem_init (DbusmenuMenuitem *self); -- cgit v1.2.3 From 50f2ad0a5e649d43acdcdf06c0453f7a5733e953 Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Thu, 16 Apr 2009 12:53:30 -0500 Subject: Adding in all the public functions as real functions and implementing a couple of children related ones. --- libdbusmenu-glib/menuitem.c | 101 +++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 94 insertions(+), 7 deletions(-) (limited to 'libdbusmenu-glib/menuitem.c') diff --git a/libdbusmenu-glib/menuitem.c b/libdbusmenu-glib/menuitem.c index c57acaa..5d22b32 100644 --- a/libdbusmenu-glib/menuitem.c +++ b/libdbusmenu-glib/menuitem.c @@ -3,46 +3,133 @@ #endif #include "menuitem.h" +/* Private */ typedef struct _DbusmenuMenuitemPrivate DbusmenuMenuitemPrivate; - struct _DbusmenuMenuitemPrivate { + GList * children; }; #define DBUSMENU_MENUITEM_GET_PRIVATE(o) \ (G_TYPE_INSTANCE_GET_PRIVATE ((o), DBUSMENU_TYPE_MENUITEM, DbusmenuMenuitemPrivate)) +/* Prototypes */ static void dbusmenu_menuitem_class_init (DbusmenuMenuitemClass *klass); static void dbusmenu_menuitem_init (DbusmenuMenuitem *self); static void dbusmenu_menuitem_dispose (GObject *object); static void dbusmenu_menuitem_finalize (GObject *object); +/* GObject stuff */ G_DEFINE_TYPE (DbusmenuMenuitem, dbusmenu_menuitem, G_TYPE_OBJECT); static void dbusmenu_menuitem_class_init (DbusmenuMenuitemClass *klass) { -GObjectClass *object_class = G_OBJECT_CLASS (klass); + GObjectClass *object_class = G_OBJECT_CLASS (klass); -g_type_class_add_private (klass, sizeof (DbusmenuMenuitemPrivate)); + g_type_class_add_private (klass, sizeof (DbusmenuMenuitemPrivate)); -object_class->dispose = dbusmenu_menuitem_dispose; -object_class->finalize = dbusmenu_menuitem_finalize; + object_class->dispose = dbusmenu_menuitem_dispose; + object_class->finalize = dbusmenu_menuitem_finalize; } static void dbusmenu_menuitem_init (DbusmenuMenuitem *self) { + return; } static void dbusmenu_menuitem_dispose (GObject *object) { -G_OBJECT_CLASS (dbusmenu_menuitem_parent_class)->dispose (object); + + G_OBJECT_CLASS (dbusmenu_menuitem_parent_class)->dispose (object); + return; } static void dbusmenu_menuitem_finalize (GObject *object) { -G_OBJECT_CLASS (dbusmenu_menuitem_parent_class)->finalize (object); + + G_OBJECT_CLASS (dbusmenu_menuitem_parent_class)->finalize (object); + return; +} + +/* Public interface */ +GList * +dbusmenu_menuitem_get_children (DbusmenuMenuitem * mi) +{ + g_return_val_if_fail(DBUSMENU_IS_MENUITEM(mi), NULL); + + DbusmenuMenuitemPrivate * priv = DBUSMENU_MENUITEM_GET_PRIVATE(mi); + return priv->children; +} + +guint +dbusmenu_menuitem_get_position (DbusmenuMenuitem * mi, DbusmenuMenuitem * parent) +{ + /* TODO: I'm not too happy returning zeros here. But that's all I've got */ + g_return_val_if_fail(DBUSMENU_IS_MENUITEM(mi), 0); + g_return_val_if_fail(DBUSMENU_IS_MENUITEM(parent), 0); + + GList * childs = dbusmenu_menuitem_get_children(parent); + guint count = 0; + for ( ; childs != NULL; childs = childs->next) { + if (childs->data == mi) break; + } + + if (childs == NULL) return 0; + + return count; +} + +gboolean +dbusmenu_menuitem_child_append (DbusmenuMenuitem * mi, DbusmenuMenuitem * child) +{ + + return FALSE; } + +gboolean +dbusmenu_menuitem_child_delete (DbusmenuMenuitem * mi, DbusmenuMenuitem * child) +{ + + return FALSE; +} + +gboolean +dbusmenu_menuitem_child_add_position (DbusmenuMenuitem * mi, DbusmenuMenuitem * child, guint position) +{ + + + return FALSE; +} + +gboolean +dbusmenu_menuitem_property_set (DbusmenuMenuitem * mi, const gchar * property, const gchar * value) +{ + + return FALSE; +} + +const gchar * +dbusmenu_menuitem_property_get (DbusmenuMenuitem * mi, const gchar * property) +{ + + return NULL; +} + +gboolean +dbusmenu_menuitem_property_exist (DbusmenuMenuitem * mi, const gchar * property) +{ + + return FALSE; +} + +void +dbusmenu_menuitem_buildxml (DbusmenuMenuitem * mi, GPtrArray ** array) +{ + + return; +} + -- cgit v1.2.3 From c3d826854d0dd3b27b5591d03e70d2c1d903bb37 Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Thu, 16 Apr 2009 12:57:03 -0500 Subject: Putting in IDs --- libdbusmenu-glib/menuitem.c | 8 ++++++++ 1 file changed, 8 insertions(+) (limited to 'libdbusmenu-glib/menuitem.c') diff --git a/libdbusmenu-glib/menuitem.c b/libdbusmenu-glib/menuitem.c index 5d22b32..f6cd99e 100644 --- a/libdbusmenu-glib/menuitem.c +++ b/libdbusmenu-glib/menuitem.c @@ -7,6 +7,7 @@ typedef struct _DbusmenuMenuitemPrivate DbusmenuMenuitemPrivate; struct _DbusmenuMenuitemPrivate { + guint id; GList * children; }; @@ -33,9 +34,16 @@ dbusmenu_menuitem_class_init (DbusmenuMenuitemClass *klass) object_class->finalize = dbusmenu_menuitem_finalize; } +static guint menuitem_next_id = 1; + static void dbusmenu_menuitem_init (DbusmenuMenuitem *self) { + DbusmenuMenuitemPrivate * priv = DBUSMENU_MENUITEM_GET_PRIVATE(self); + + priv->id = menuitem_next_id++; + priv->children = NULL; + return; } -- cgit v1.2.3 From 00eafa4bed235caacd87bc119433577c0e1fa7a9 Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Thu, 16 Apr 2009 13:07:25 -0500 Subject: Okay, let's build some XML --- libdbusmenu-glib/menuitem.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) (limited to 'libdbusmenu-glib/menuitem.c') diff --git a/libdbusmenu-glib/menuitem.c b/libdbusmenu-glib/menuitem.c index f6cd99e..3aa39c6 100644 --- a/libdbusmenu-glib/menuitem.c +++ b/libdbusmenu-glib/menuitem.c @@ -135,8 +135,20 @@ dbusmenu_menuitem_property_exist (DbusmenuMenuitem * mi, const gchar * property) } void -dbusmenu_menuitem_buildxml (DbusmenuMenuitem * mi, GPtrArray ** array) +dbusmenu_menuitem_buildxml (DbusmenuMenuitem * mi, GPtrArray * array) { + g_return_if_fail(DBUSMENU_IS_MENUITEM(mi)); + + GList * children = dbusmenu_menuitem_get_children(mi); + if (children == NULL) { + g_ptr_array_add(array, g_strdup_printf("", dbusmenu_menuitem_get_id(mi))); + } else { + g_ptr_array_add(array, g_strdup_printf("", dbusmenu_menuitem_get_id(mi))); + for ( ; children != NULL; children = children->next) { + dbus_menuitem_buildxml(DBUSMENU_MENUITEM(children->data), array); + } + g_ptr_array_add(array, g_strdup("")); + } return; } -- cgit v1.2.3 From 4cf3e30cfa9bace377649683d7c4e76c634b02e8 Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Thu, 16 Apr 2009 15:39:11 -0500 Subject: No warnings, put them in now I had to fix them --- libdbusmenu-glib/menuitem.c | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) (limited to 'libdbusmenu-glib/menuitem.c') diff --git a/libdbusmenu-glib/menuitem.c b/libdbusmenu-glib/menuitem.c index 3aa39c6..4187adc 100644 --- a/libdbusmenu-glib/menuitem.c +++ b/libdbusmenu-glib/menuitem.c @@ -32,6 +32,8 @@ dbusmenu_menuitem_class_init (DbusmenuMenuitemClass *klass) object_class->dispose = dbusmenu_menuitem_dispose; object_class->finalize = dbusmenu_menuitem_finalize; + + return; } static guint menuitem_next_id = 1; @@ -64,6 +66,13 @@ dbusmenu_menuitem_finalize (GObject *object) } /* Public interface */ +guint +dbusmenu_menuitem_get_id (DbusmenuMenuitem * mi) +{ + DbusmenuMenuitemPrivate * priv = DBUSMENU_MENUITEM_GET_PRIVATE(mi); + return priv->id; +} + GList * dbusmenu_menuitem_get_children (DbusmenuMenuitem * mi) { @@ -145,7 +154,7 @@ dbusmenu_menuitem_buildxml (DbusmenuMenuitem * mi, GPtrArray * array) } else { g_ptr_array_add(array, g_strdup_printf("", dbusmenu_menuitem_get_id(mi))); for ( ; children != NULL; children = children->next) { - dbus_menuitem_buildxml(DBUSMENU_MENUITEM(children->data), array); + dbusmenu_menuitem_buildxml(DBUSMENU_MENUITEM(children->data), array); } g_ptr_array_add(array, g_strdup("")); } -- cgit v1.2.3 From 8fa3697487b63874cc60446c6674f77b62ee7414 Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Thu, 16 Apr 2009 16:03:57 -0500 Subject: Adding in tests dictory, a test, and making it compile --- libdbusmenu-glib/menuitem.c | 6 ++++++ 1 file changed, 6 insertions(+) (limited to 'libdbusmenu-glib/menuitem.c') diff --git a/libdbusmenu-glib/menuitem.c b/libdbusmenu-glib/menuitem.c index 4187adc..b2f64f6 100644 --- a/libdbusmenu-glib/menuitem.c +++ b/libdbusmenu-glib/menuitem.c @@ -66,6 +66,12 @@ dbusmenu_menuitem_finalize (GObject *object) } /* Public interface */ +DbusmenuMenuitem * +dbusmenu_menuitem_new (void) +{ + return g_object_new(DBUSMENU_TYPE_MENUITEM, NULL); +} + guint dbusmenu_menuitem_get_id (DbusmenuMenuitem * mi) { -- cgit v1.2.3 From 74daa57d491aff78857a554ddb8c190c70a5e269 Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Tue, 28 Apr 2009 08:51:49 -0500 Subject: Putting in placeholders for the functions that got prototyped last revision --- libdbusmenu-glib/menuitem.c | 14 ++++++++++++++ 1 file changed, 14 insertions(+) (limited to 'libdbusmenu-glib/menuitem.c') diff --git a/libdbusmenu-glib/menuitem.c b/libdbusmenu-glib/menuitem.c index b2f64f6..6fdc7d2 100644 --- a/libdbusmenu-glib/menuitem.c +++ b/libdbusmenu-glib/menuitem.c @@ -72,6 +72,13 @@ dbusmenu_menuitem_new (void) return g_object_new(DBUSMENU_TYPE_MENUITEM, NULL); } +DbusmenuMenuitem * +dbusmenu_menuitem_new_with_id (guint id) +{ + + return NULL; +} + guint dbusmenu_menuitem_get_id (DbusmenuMenuitem * mi) { @@ -128,6 +135,13 @@ dbusmenu_menuitem_child_add_position (DbusmenuMenuitem * mi, DbusmenuMenuitem * return FALSE; } +DbusmenuMenuitem * +dbusmenu_menuitem_child_find (DbusmenuMenuitem * mi, guint id) +{ + + return NULL; +} + gboolean dbusmenu_menuitem_property_set (DbusmenuMenuitem * mi, const gchar * property, const gchar * value) { -- cgit v1.2.3 From 626927e3c09cfdc4d376c95e91752fa88cc0799e Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Tue, 5 May 2009 17:29:36 +0100 Subject: Implement the new_with_id function by making the id a property and building some set_ and get_ --- libdbusmenu-glib/menuitem.c | 62 +++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 57 insertions(+), 5 deletions(-) (limited to 'libdbusmenu-glib/menuitem.c') diff --git a/libdbusmenu-glib/menuitem.c b/libdbusmenu-glib/menuitem.c index 6fdc7d2..c571fd4 100644 --- a/libdbusmenu-glib/menuitem.c +++ b/libdbusmenu-glib/menuitem.c @@ -11,6 +11,12 @@ struct _DbusmenuMenuitemPrivate GList * children; }; +/* Properties */ +enum { + PROP_0, + PROP_ID, +}; + #define DBUSMENU_MENUITEM_GET_PRIVATE(o) \ (G_TYPE_INSTANCE_GET_PRIVATE ((o), DBUSMENU_TYPE_MENUITEM, DbusmenuMenuitemPrivate)) @@ -19,6 +25,8 @@ static void dbusmenu_menuitem_class_init (DbusmenuMenuitemClass *klass); static void dbusmenu_menuitem_init (DbusmenuMenuitem *self); static void dbusmenu_menuitem_dispose (GObject *object); static void dbusmenu_menuitem_finalize (GObject *object); +static void set_property (GObject * obj, guint id, const GValue * value, GParamSpec * pspec); +static void get_property (GObject * obj, guint id, GValue * value, GParamSpec * pspec); /* GObject stuff */ G_DEFINE_TYPE (DbusmenuMenuitem, dbusmenu_menuitem, G_TYPE_OBJECT); @@ -32,6 +40,14 @@ dbusmenu_menuitem_class_init (DbusmenuMenuitemClass *klass) object_class->dispose = dbusmenu_menuitem_dispose; object_class->finalize = dbusmenu_menuitem_finalize; + object_class->set_property = set_property; + object_class->get_property = get_property; + + g_object_class_install_property (object_class, PROP_ID, + g_param_spec_uint("id", "ID for the menu item", + "This is a unique indentifier for the menu item.", + 0, 30000, 0, + G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY | G_PARAM_STATIC_STRINGS)); return; } @@ -43,7 +59,7 @@ dbusmenu_menuitem_init (DbusmenuMenuitem *self) { DbusmenuMenuitemPrivate * priv = DBUSMENU_MENUITEM_GET_PRIVATE(self); - priv->id = menuitem_next_id++; + priv->id = 0; priv->children = NULL; return; @@ -65,6 +81,41 @@ dbusmenu_menuitem_finalize (GObject *object) return; } +static void +set_property (GObject * obj, guint id, const GValue * value, GParamSpec * pspec) +{ + DbusmenuMenuitemPrivate * priv = DBUSMENU_MENUITEM_GET_PRIVATE(obj); + + switch (id) { + case PROP_ID: + priv->id = g_value_get_uint(value); + if (priv->id > menuitem_next_id) { + menuitem_next_id = priv->id; + } + break; + } + + return; +} + +static void +get_property (GObject * obj, guint id, GValue * value, GParamSpec * pspec) +{ + DbusmenuMenuitemPrivate * priv = DBUSMENU_MENUITEM_GET_PRIVATE(obj); + + switch (id) { + case PROP_ID: + if (priv->id == 0) { + priv->id = menuitem_next_id++; + } + g_value_set_uint(value, priv->id); + break; + } + + return; +} + + /* Public interface */ DbusmenuMenuitem * dbusmenu_menuitem_new (void) @@ -75,15 +126,16 @@ dbusmenu_menuitem_new (void) DbusmenuMenuitem * dbusmenu_menuitem_new_with_id (guint id) { - - return NULL; + return g_object_new(DBUSMENU_TYPE_MENUITEM, "id", id, NULL); } guint dbusmenu_menuitem_get_id (DbusmenuMenuitem * mi) { - DbusmenuMenuitemPrivate * priv = DBUSMENU_MENUITEM_GET_PRIVATE(mi); - return priv->id; + GValue retval = {0}; + g_value_init(&retval, G_TYPE_UINT); + g_object_get_property(G_OBJECT(mi), "id", &retval); + return g_value_get_uint(&retval); } GList * -- cgit v1.2.3 From 071c8b6d09ee51fc8f7d7514d74f031e6f6a048a Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Wed, 6 May 2009 07:37:12 +0100 Subject: Debugging messages and switching the ID gathering function around. --- libdbusmenu-glib/menuitem.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) (limited to 'libdbusmenu-glib/menuitem.c') diff --git a/libdbusmenu-glib/menuitem.c b/libdbusmenu-glib/menuitem.c index c571fd4..0aff2d8 100644 --- a/libdbusmenu-glib/menuitem.c +++ b/libdbusmenu-glib/menuitem.c @@ -126,7 +126,9 @@ dbusmenu_menuitem_new (void) DbusmenuMenuitem * dbusmenu_menuitem_new_with_id (guint id) { - return g_object_new(DBUSMENU_TYPE_MENUITEM, "id", id, NULL); + DbusmenuMenuitem * mi = g_object_new(DBUSMENU_TYPE_MENUITEM, "id", id, NULL); + g_debug("New Menuitem id %d goal id %d", dbusmenu_menuitem_get_id(mi), id); + return mi; } guint -- cgit v1.2.3 From 616007d3189fddf8e490b9e589bb2eeb0b486ae9 Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Wed, 6 May 2009 08:23:19 +0100 Subject: Fleshing out the children management --- libdbusmenu-glib/menuitem.c | 23 ++++++++++++++++------- 1 file changed, 16 insertions(+), 7 deletions(-) (limited to 'libdbusmenu-glib/menuitem.c') diff --git a/libdbusmenu-glib/menuitem.c b/libdbusmenu-glib/menuitem.c index 0aff2d8..9ccef96 100644 --- a/libdbusmenu-glib/menuitem.c +++ b/libdbusmenu-glib/menuitem.c @@ -170,28 +170,37 @@ dbusmenu_menuitem_get_position (DbusmenuMenuitem * mi, DbusmenuMenuitem * parent gboolean dbusmenu_menuitem_child_append (DbusmenuMenuitem * mi, DbusmenuMenuitem * child) { - - return FALSE; + DbusmenuMenuitemPrivate * priv = DBUSMENU_MENUITEM_GET_PRIVATE(mi); + priv->children = g_list_append(priv->children, child); + return TRUE; } gboolean dbusmenu_menuitem_child_delete (DbusmenuMenuitem * mi, DbusmenuMenuitem * child) { - - return FALSE; + DbusmenuMenuitemPrivate * priv = DBUSMENU_MENUITEM_GET_PRIVATE(mi); + priv->children = g_list_remove(priv->children, child); + return TRUE; } gboolean dbusmenu_menuitem_child_add_position (DbusmenuMenuitem * mi, DbusmenuMenuitem * child, guint position) { - - - return FALSE; + DbusmenuMenuitemPrivate * priv = DBUSMENU_MENUITEM_GET_PRIVATE(mi); + priv->children = g_list_insert(priv->children, child, position); + return TRUE; } DbusmenuMenuitem * dbusmenu_menuitem_child_find (DbusmenuMenuitem * mi, guint id) { + GList * childs = dbusmenu_menuitem_get_children(mi); + for ( ; childs == NULL; childs = g_list_next(childs)) { + DbusmenuMenuitem * lmi = DBUSMENU_MENUITEM(childs->data); + if (id == dbusmenu_menuitem_get_id(lmi)) { + return lmi; + } + } return NULL; } -- cgit v1.2.3 From ac5c4fd2498a7e711fc190f591b6fba71397b74f Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Fri, 8 May 2009 16:24:02 -0500 Subject: Checking for a NULL child more vigorously --- libdbusmenu-glib/menuitem.c | 2 ++ 1 file changed, 2 insertions(+) (limited to 'libdbusmenu-glib/menuitem.c') diff --git a/libdbusmenu-glib/menuitem.c b/libdbusmenu-glib/menuitem.c index 9ccef96..2cf4b85 100644 --- a/libdbusmenu-glib/menuitem.c +++ b/libdbusmenu-glib/menuitem.c @@ -195,6 +195,8 @@ DbusmenuMenuitem * dbusmenu_menuitem_child_find (DbusmenuMenuitem * mi, guint id) { GList * childs = dbusmenu_menuitem_get_children(mi); + if (childs == NULL) return NULL; + for ( ; childs == NULL; childs = g_list_next(childs)) { DbusmenuMenuitem * lmi = DBUSMENU_MENUITEM(childs->data); if (id == dbusmenu_menuitem_get_id(lmi)) { -- cgit v1.2.3 From 87fea6b9f16b49d3ad1b6801e53fd89f516b2973 Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Mon, 11 May 2009 12:12:10 -0500 Subject: Allowing people to take children. --- libdbusmenu-glib/menuitem.c | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) (limited to 'libdbusmenu-glib/menuitem.c') diff --git a/libdbusmenu-glib/menuitem.c b/libdbusmenu-glib/menuitem.c index 2cf4b85..985de95 100644 --- a/libdbusmenu-glib/menuitem.c +++ b/libdbusmenu-glib/menuitem.c @@ -149,6 +149,27 @@ dbusmenu_menuitem_get_children (DbusmenuMenuitem * mi) return priv->children; } +/** + dbusmenu_menuitem_take_children: + @mi: The #DbusmenMenuitem to take the children from. + + While the name sounds devious that's exactly what this function + does. It takes the list of children from the @mi and clears the + internal list. The calling function is no in charge of the ref's + on the children it has taken. A lot of responsibility involved + in taking children. +*/ +GList * +dbusmenu_menuitem_take_children (DbusmenuMenuitem * mi) +{ + g_return_val_if_fail(DBUSMENU_IS_MENUITEM(mi), NULL); + + DbusmenuMenuitemPrivate * priv = DBUSMENU_MENUITEM_GET_PRIVATE(mi); + GList * children = priv->children; + priv->children = NULL; + return children; +} + guint dbusmenu_menuitem_get_position (DbusmenuMenuitem * mi, DbusmenuMenuitem * parent) { -- cgit v1.2.3 From 1dee09e4f2b42b3104293f52e6008341905b1127 Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Mon, 11 May 2009 16:58:01 -0500 Subject: Function documentation. --- libdbusmenu-glib/menuitem.c | 115 +++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 114 insertions(+), 1 deletion(-) (limited to 'libdbusmenu-glib/menuitem.c') diff --git a/libdbusmenu-glib/menuitem.c b/libdbusmenu-glib/menuitem.c index 985de95..151a837 100644 --- a/libdbusmenu-glib/menuitem.c +++ b/libdbusmenu-glib/menuitem.c @@ -4,6 +4,16 @@ #include "menuitem.h" /* Private */ +/** + DbusmenuMenuitemPrivate: + @id: The ID of this menu item + @children: A list of #DbusmenuMenuitem objects that are + children to this one. + + These are the little secrets that we don't want getting + out of data that we have. They can still be gotten using + accessor functions, but are protected appropriately. +*/ typedef struct _DbusmenuMenuitemPrivate DbusmenuMenuitemPrivate; struct _DbusmenuMenuitemPrivate { @@ -117,12 +127,28 @@ get_property (GObject * obj, guint id, GValue * value, GParamSpec * pspec) /* Public interface */ + +/** + dbusmenu_menuitem_new: + + Create a new #DbusmenuMenuitem with all default values. + + Return value: A newly allocated #DbusmenuMenuitem. +*/ DbusmenuMenuitem * dbusmenu_menuitem_new (void) { return g_object_new(DBUSMENU_TYPE_MENUITEM, NULL); } +/** + dbusmenu_menuitem_new_with_id: + @id: ID to use for this menuitem + + This creates a blank #DbusmenuMenuitem with a specific ID. + + Return value: A newly allocated #DbusmenuMenuitem. +*/ DbusmenuMenuitem * dbusmenu_menuitem_new_with_id (guint id) { @@ -131,6 +157,14 @@ dbusmenu_menuitem_new_with_id (guint id) return mi; } +/** + dbusmenu_menuitem_get_id: + @mi: The #DbusmenuMenuitem to query. + + Gets the unique ID for @mi. + + Return value: The ID of the @mi. +*/ guint dbusmenu_menuitem_get_id (DbusmenuMenuitem * mi) { @@ -140,6 +174,16 @@ dbusmenu_menuitem_get_id (DbusmenuMenuitem * mi) return g_value_get_uint(&retval); } +/** + dbusmenu_menuitem_get_children: + @mi: The #DbusmenuMenuitem to query. + + Returns simply the list of children that this menu item + has. The list is valid until another child related function + is called, where it might be changed. + + Return value: A #GList of pointers to #DbusmenuMenuitem objects. +*/ GList * dbusmenu_menuitem_get_children (DbusmenuMenuitem * mi) { @@ -158,6 +202,8 @@ dbusmenu_menuitem_get_children (DbusmenuMenuitem * mi) internal list. The calling function is no in charge of the ref's on the children it has taken. A lot of responsibility involved in taking children. + + Return value: A #GList of pointers to #DbusmenuMenuitem objects. */ GList * dbusmenu_menuitem_take_children (DbusmenuMenuitem * mi) @@ -170,6 +216,17 @@ dbusmenu_menuitem_take_children (DbusmenuMenuitem * mi) return children; } +/** + dbusmenu_menuitem_get_position: + @mi: The #DbusmenuMenuitem to find the position of + @parent: The #DbusmenuMenuitem who's children contain @mi + + This function returns the position of the menu item @mi + in the children of @parent. It will return zero if the + menu item can't be found. + + Return value: The position of @mi in the children of @parent. +*/ guint dbusmenu_menuitem_get_position (DbusmenuMenuitem * mi, DbusmenuMenuitem * parent) { @@ -178,8 +235,9 @@ dbusmenu_menuitem_get_position (DbusmenuMenuitem * mi, DbusmenuMenuitem * parent g_return_val_if_fail(DBUSMENU_IS_MENUITEM(parent), 0); GList * childs = dbusmenu_menuitem_get_children(parent); + if (childs == NULL) return 0; guint count = 0; - for ( ; childs != NULL; childs = childs->next) { + for ( ; childs != NULL; childs = childs->next, count++) { if (childs->data == mi) break; } @@ -188,6 +246,16 @@ dbusmenu_menuitem_get_position (DbusmenuMenuitem * mi, DbusmenuMenuitem * parent return count; } +/** + dbusmenu_menuitem_child_append: + @mi: The #DbusmenuMenuitem which will become a new parent + @child: The #DbusmenMenuitem that will be a child + + This function adds @child to the list of children on @mi at + the end of that list. + + Return value: Whether the child has been added successfully. +*/ gboolean dbusmenu_menuitem_child_append (DbusmenuMenuitem * mi, DbusmenuMenuitem * child) { @@ -196,6 +264,17 @@ dbusmenu_menuitem_child_append (DbusmenuMenuitem * mi, DbusmenuMenuitem * child) return TRUE; } +/** + dbusmenu_menuitem_child_delete: + @mi: The #DbusmenuMenuitem which has @child as a child + @child: The child #DbusmenuMenuitem that you want to no longer + be a child of @mi. + + This function removes @child from the children list of @mi. It does + not call #g_object_unref on @child. + + Return value: If we were able to delete @child. +*/ gboolean dbusmenu_menuitem_child_delete (DbusmenuMenuitem * mi, DbusmenuMenuitem * child) { @@ -204,6 +283,18 @@ dbusmenu_menuitem_child_delete (DbusmenuMenuitem * mi, DbusmenuMenuitem * child) return TRUE; } +/** + dbusmenu_menuitem_child_add_position: + @mi: The #DbusmenuMenuitem that we're adding the child @child to. + @child: The #DbusmenuMenuitem to make a child of @mi. + @position: Where in @mi object's list of chidren @child should be placed. + + Puts @child in the list of children for @mi at the location + specified in @position. If there is not enough entires available + then @child will be placed at the end of the list. + + Return value: Whether @child was added successfully. +*/ gboolean dbusmenu_menuitem_child_add_position (DbusmenuMenuitem * mi, DbusmenuMenuitem * child, guint position) { @@ -212,6 +303,17 @@ dbusmenu_menuitem_child_add_position (DbusmenuMenuitem * mi, DbusmenuMenuitem * return TRUE; } +/** + dbusmenu_menuitem_child_find: + @mi: The #DbusmenuMenuitem who's children to look on + @id: The ID of the child that we're looking for. + + Search the children of @mi to find one with the ID of @id. + If it doesn't exist then we return #NULL. + + Return value: The menu item with the ID @id or #NULL if it + can't be found. +*/ DbusmenuMenuitem * dbusmenu_menuitem_child_find (DbusmenuMenuitem * mi, guint id) { @@ -249,6 +351,17 @@ dbusmenu_menuitem_property_exist (DbusmenuMenuitem * mi, const gchar * property) return FALSE; } +/** + dbusmenu_menuitem_buildxml: + @mi: #DbusmenuMenuitem to represent in XML + @array: A list of string that will be turned into an XML file + + This function will add strings to the array @array. It will put + at least one entry if this menu item has no children. If it has + children it will put two for this entry, one representing the + start tag and one that is a closing tag. It will allow it's + children to place their own tags in the array in between those two. +*/ void dbusmenu_menuitem_buildxml (DbusmenuMenuitem * mi, GPtrArray * array) { -- cgit v1.2.3 From a2f612da2fe73e6e22abf2fadbe18d4a12e52b1f Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Tue, 12 May 2009 08:51:39 -0500 Subject: Add in the LGPL 2.1/3 text to the tops of the files. --- libdbusmenu-glib/menuitem.c | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) (limited to 'libdbusmenu-glib/menuitem.c') diff --git a/libdbusmenu-glib/menuitem.c b/libdbusmenu-glib/menuitem.c index 151a837..6360079 100644 --- a/libdbusmenu-glib/menuitem.c +++ b/libdbusmenu-glib/menuitem.c @@ -1,3 +1,31 @@ +/* +A library to communicate a menu object set accross DBus and +track updates and maintain consistency. + +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 + +*/ + #ifdef HAVE_CONFIG_H #include "config.h" #endif -- cgit v1.2.3 From 53b4a13ca4541bcdf85ca3ee28cb6ffc81e6f5b0 Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Tue, 12 May 2009 11:07:00 -0500 Subject: Checking parameters on MI functions. --- libdbusmenu-glib/menuitem.c | 13 +++++++++++++ 1 file changed, 13 insertions(+) (limited to 'libdbusmenu-glib/menuitem.c') diff --git a/libdbusmenu-glib/menuitem.c b/libdbusmenu-glib/menuitem.c index 6360079..0894d2c 100644 --- a/libdbusmenu-glib/menuitem.c +++ b/libdbusmenu-glib/menuitem.c @@ -196,6 +196,8 @@ dbusmenu_menuitem_new_with_id (guint id) guint dbusmenu_menuitem_get_id (DbusmenuMenuitem * mi) { + g_return_val_if_fail(DBUSMENU_IS_MENUITEM(mi), 0); + GValue retval = {0}; g_value_init(&retval, G_TYPE_UINT); g_object_get_property(G_OBJECT(mi), "id", &retval); @@ -287,6 +289,9 @@ dbusmenu_menuitem_get_position (DbusmenuMenuitem * mi, DbusmenuMenuitem * parent gboolean dbusmenu_menuitem_child_append (DbusmenuMenuitem * mi, DbusmenuMenuitem * child) { + g_return_val_if_fail(DBUSMENU_IS_MENUITEM(mi), FALSE); + g_return_val_if_fail(DBUSMENU_IS_MENUITEM(child), FALSE); + DbusmenuMenuitemPrivate * priv = DBUSMENU_MENUITEM_GET_PRIVATE(mi); priv->children = g_list_append(priv->children, child); return TRUE; @@ -306,6 +311,9 @@ dbusmenu_menuitem_child_append (DbusmenuMenuitem * mi, DbusmenuMenuitem * child) gboolean dbusmenu_menuitem_child_delete (DbusmenuMenuitem * mi, DbusmenuMenuitem * child) { + g_return_val_if_fail(DBUSMENU_IS_MENUITEM(mi), FALSE); + g_return_val_if_fail(DBUSMENU_IS_MENUITEM(child), FALSE); + DbusmenuMenuitemPrivate * priv = DBUSMENU_MENUITEM_GET_PRIVATE(mi); priv->children = g_list_remove(priv->children, child); return TRUE; @@ -326,6 +334,9 @@ dbusmenu_menuitem_child_delete (DbusmenuMenuitem * mi, DbusmenuMenuitem * child) gboolean dbusmenu_menuitem_child_add_position (DbusmenuMenuitem * mi, DbusmenuMenuitem * child, guint position) { + g_return_val_if_fail(DBUSMENU_IS_MENUITEM(mi), FALSE); + g_return_val_if_fail(DBUSMENU_IS_MENUITEM(child), FALSE); + DbusmenuMenuitemPrivate * priv = DBUSMENU_MENUITEM_GET_PRIVATE(mi); priv->children = g_list_insert(priv->children, child, position); return TRUE; @@ -345,6 +356,8 @@ dbusmenu_menuitem_child_add_position (DbusmenuMenuitem * mi, DbusmenuMenuitem * DbusmenuMenuitem * dbusmenu_menuitem_child_find (DbusmenuMenuitem * mi, guint id) { + g_return_val_if_fail(DBUSMENU_IS_MENUITEM(mi), NULL); + GList * childs = dbusmenu_menuitem_get_children(mi); if (childs == NULL) return NULL; -- cgit v1.2.3