[gnome-menus] libmenu: Allow grabbing the parent from any GMenuTreeItem



commit d1beaf075f02281e28bb730f3e43dd15dfea2ef3
Author: Jasper St. Pierre <jstpierre mecheye net>
Date:   Wed Jun 20 14:57:58 2012 -0400

    libmenu: Allow grabbing the parent from any GMenuTreeItem
    
    Oh how I wish we had real inheritance.

 libmenu/gmenu-tree.c |   51 +++++++++++++++++++++++++++++++++++++++++++------
 libmenu/gmenu-tree.h |    3 ++
 2 files changed, 47 insertions(+), 7 deletions(-)
---
diff --git a/libmenu/gmenu-tree.c b/libmenu/gmenu-tree.c
index 53f5e1e..3e59c2c 100644
--- a/libmenu/gmenu-tree.c
+++ b/libmenu/gmenu-tree.c
@@ -846,6 +846,13 @@ gmenu_tree_invoke_monitors (GMenuTree *tree)
   g_signal_emit (tree, gmenu_tree_signals[CHANGED], 0);
 }
 
+static GMenuTreeDirectory *
+get_parent (GMenuTreeItem *item)
+{
+  g_return_val_if_fail (item != NULL, NULL);
+  return item->parent ? gmenu_tree_item_ref (item->parent) : NULL;
+}
+
 /**
  * gmenu_tree_directory_get_parent:
  * @directory: a #GMenuTreeDirectory
@@ -855,10 +862,7 @@ gmenu_tree_invoke_monitors (GMenuTree *tree)
 GMenuTreeDirectory *
 gmenu_tree_directory_get_parent (GMenuTreeDirectory *directory)
 {
-  GMenuTreeItem *item = (GMenuTreeItem*)directory;
-  g_return_val_if_fail (item != NULL, NULL);
-
-  return item->parent ? gmenu_tree_item_ref (item->parent) : NULL;
+  return get_parent ((GMenuTreeItem *)directory);
 }
 
 /**
@@ -870,10 +874,43 @@ gmenu_tree_directory_get_parent (GMenuTreeDirectory *directory)
 GMenuTreeDirectory *
 gmenu_tree_entry_get_parent (GMenuTreeEntry *entry)
 {
-  GMenuTreeItem *item = (GMenuTreeItem*)entry;
-  g_return_val_if_fail (item != NULL, NULL);
+  return get_parent ((GMenuTreeItem *)entry);
+}
 
-  return item->parent ? gmenu_tree_item_ref (item->parent) : NULL;
+/**
+ * gmenu_tree_alias_get_parent:
+ * @alias: a #GMenuTreeAlias
+ *
+ * Returns: (transfer full): The parent directory, or %NULL if none
+ */
+GMenuTreeDirectory *
+gmenu_tree_alias_get_parent (GMenuTreeAlias *alias)
+{
+  return get_parent ((GMenuTreeItem *)alias);
+}
+
+/**
+ * gmenu_tree_header_get_parent:
+ * @header: a #GMenuTreeHeader
+ *
+ * Returns: (transfer full): The parent directory, or %NULL if none
+ */
+GMenuTreeDirectory *
+gmenu_tree_header_get_parent (GMenuTreeHeader *header)
+{
+  return get_parent ((GMenuTreeItem *)header);
+}
+
+/**
+ * gmenu_tree_separator_get_parent:
+ * @separator: a #GMenuTreeSeparator
+ *
+ * Returns: (transfer full): The parent directory, or %NULL if none
+ */
+GMenuTreeDirectory *
+gmenu_tree_separator_get_parent (GMenuTreeSeparator *separator)
+{
+  return get_parent ((GMenuTreeItem *)separator);
 }
 
 static void
diff --git a/libmenu/gmenu-tree.h b/libmenu/gmenu-tree.h
index db25572..4ccdb2b 100644
--- a/libmenu/gmenu-tree.h
+++ b/libmenu/gmenu-tree.h
@@ -145,14 +145,17 @@ gboolean gmenu_tree_entry_get_is_unallocated  (GMenuTreeEntry *entry);
 
 GMenuTreeDirectory *gmenu_tree_header_get_directory (GMenuTreeHeader *header);
 GMenuTree          *gmenu_tree_header_get_tree      (GMenuTreeHeader *header);
+GMenuTreeDirectory *gmenu_tree_header_get_parent    (GMenuTreeHeader *header);
 
 GMenuTreeDirectory *gmenu_tree_alias_get_directory         (GMenuTreeAlias *alias);
 GMenuTreeItemType   gmenu_tree_alias_get_aliased_item_type (GMenuTreeAlias *alias);
 GMenuTreeDirectory *gmenu_tree_alias_get_aliased_directory (GMenuTreeAlias *alias);
 GMenuTreeEntry     *gmenu_tree_alias_get_aliased_entry     (GMenuTreeAlias *alias);
 GMenuTree          *gmenu_tree_alias_get_tree              (GMenuTreeAlias *alias);
+GMenuTreeDirectory *gmenu_tree_alias_get_parent            (GMenuTreeAlias *alias);
 
 GMenuTree          *gmenu_tree_separator_get_tree (GMenuTreeSeparator *separator);
+GMenuTreeDirectory *gmenu_tree_separator_get_parent (GMenuTreeSeparator *separator);
 
 G_END_DECLS
 



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]