Beispiel #1
0
static void
append_directory_path(GMenuTreeDirectory *directory,
                      GString            *path)
{
  GMenuTreeDirectory *parent;

  parent = gmenu_tree_item_get_parent(GMENU_TREE_ITEM(directory));

  if (!parent)
  {
    g_string_append_c(path, '/');
    return;
  }

  append_directory_path(parent, path);

  g_string_append(path, gmenu_tree_directory_get_name(directory));
  g_string_append_c(path, '/');

  gmenu_tree_item_unref(parent);
}
Beispiel #2
0
/*=============================================================================
 * This function processes a directory entry and all it's child nodes
 */
void process_directory(GMenuTreeDirectory *directory, gboolean isRoot)
{
    int hasSeparator = 0;
    int hasMenu = 0;
    GMenuTreeItemType entryType;
    GSList *entryList = gmenu_tree_directory_get_contents (directory);
    GSList *l;
    
    if (option_do_not_use_categories == 00 && isRoot == 0 &&
    g_slist_length(entryList) > 0)
    {
        hasMenu = 1;
        
        if (option_show_amount_of_entries == 1)
        {
            g_printf(
              "<menu id=\"xdg-menu-%s\" label=\"%s (%d)\">\n",
              gmenu_tree_directory_get_name(directory),
              gmenu_tree_directory_get_name(directory),
              g_slist_length(entryList));
        }
        else
        {
            g_printf(
              "<menu id=\"xdg-menu-%s\" label=\"%s\">\n",
              gmenu_tree_directory_get_name(directory),
              gmenu_tree_directory_get_name(directory));
        }
    }

    for (l = entryList; l; l = l->next)
    {
        GMenuTreeItem *item = l->data;
        
        entryType = gmenu_tree_item_get_type (GMENU_TREE_ITEM(item));
        
        switch (entryType)
        {
            case GMENU_TREE_ITEM_DIRECTORY:
                if (hasSeparator)
                {
                    process_separator(GMENU_TREE_SEPARATOR(item));
                    hasSeparator = 0;
                }
                process_directory(GMENU_TREE_DIRECTORY(item), 0);
                break;
            case GMENU_TREE_ITEM_ENTRY:
                if (hasSeparator)
                {
                    process_separator(GMENU_TREE_SEPARATOR(item));
                    hasSeparator = 0;
                }
                process_entry(GMENU_TREE_ENTRY(item));
                break;
            case GMENU_TREE_ITEM_SEPARATOR:
                hasSeparator = 1;
                break;
        }
        
        gmenu_tree_item_unref (item);
    }
    
    if (hasMenu == 1)
    {
        g_printf("</menu>\n");
    }
    
    g_slist_free (entryList);
}