#ifdef HAVE_CONFIG_H #include "config.h" #endif #include "menuitem.h" /* Private */ typedef struct _DbusmenuMenuitemPrivate DbusmenuMenuitemPrivate; struct _DbusmenuMenuitemPrivate { guint id; 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); g_type_class_add_private (klass, sizeof (DbusmenuMenuitemPrivate)); object_class->dispose = dbusmenu_menuitem_dispose; object_class->finalize = dbusmenu_menuitem_finalize; return; } 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; } static void dbusmenu_menuitem_dispose (GObject *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); return; } /* Public interface */ DbusmenuMenuitem * 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) { DbusmenuMenuitemPrivate * priv = DBUSMENU_MENUITEM_GET_PRIVATE(mi); return priv->id; } 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; } DbusmenuMenuitem * dbusmenu_menuitem_child_find (DbusmenuMenuitem * mi, guint id) { return NULL; } 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) { 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) { dbusmenu_menuitem_buildxml(DBUSMENU_MENUITEM(children->data), array); } g_ptr_array_add(array, g_strdup("")); } return; }