Also list the system manual pages

This commit is contained in:
Pierre Pronchery 2014-05-10 00:20:24 +02:00
parent 9805dfe19b
commit fa136a7971

View File

@ -522,6 +522,8 @@ static void _new_manual(Helper * helper)
GtkCellRenderer * renderer; GtkCellRenderer * renderer;
GtkTreeViewColumn * column; GtkTreeViewColumn * column;
GtkWidget * view; GtkWidget * view;
char const * prefix[] = { MANDIR, "/usr/share/man", NULL };
char const ** p;
DIR * dir; DIR * dir;
struct dirent * de; struct dirent * de;
unsigned int section; unsigned int section;
@ -542,7 +544,7 @@ static void _new_manual(Helper * helper)
renderer = gtk_cell_renderer_text_new(); renderer = gtk_cell_renderer_text_new();
column = gtk_tree_view_column_new_with_attributes(_("Section"), column = gtk_tree_view_column_new_with_attributes(_("Section"),
renderer, "text", 3, NULL); renderer, "text", 3, NULL);
gtk_tree_view_column_set_sort_column_id(column, 1); gtk_tree_view_column_set_sort_column_id(column, 2);
gtk_tree_view_append_column(GTK_TREE_VIEW(view), column); gtk_tree_view_append_column(GTK_TREE_VIEW(view), column);
gtk_tree_view_column_clicked(column); gtk_tree_view_column_clicked(column);
g_signal_connect(view, "row-activated", G_CALLBACK( g_signal_connect(view, "row-activated", G_CALLBACK(
@ -551,13 +553,21 @@ static void _new_manual(Helper * helper)
gtk_notebook_append_page(GTK_NOTEBOOK(helper->notebook), widget, gtk_notebook_append_page(GTK_NOTEBOOK(helper->notebook), widget,
gtk_label_new(_("Manual"))); gtk_label_new(_("Manual")));
/* FIXME perform this while idle */ /* FIXME perform this while idle */
if((dir = opendir(MANDIR)) == NULL) for(p = prefix; *p != NULL; p++)
return; {
while((de = readdir(dir)) != NULL) /* XXX avoid duplicates */
if(sscanf(de->d_name, "html%u", &section) == 1) if((p != &prefix[0] && strcmp(*p, prefix[0]) == 0)
_new_manual_section(helper, MANDIR, de->d_name, store, || (p != &prefix[1] && strcmp(*p, prefix[1])
section); == 0))
closedir(dir); continue;
if((dir = opendir(*p)) == NULL)
continue;
while((de = readdir(dir)) != NULL)
if(sscanf(de->d_name, "html%u", &section) == 1)
_new_manual_section(helper, *p, de->d_name,
store, section);
closedir(dir);
}
} }
static void _new_manual_section(Helper * helper, char const * manhtmldir, static void _new_manual_section(Helper * helper, char const * manhtmldir,
@ -582,6 +592,7 @@ static void _new_manual_section(Helper * helper, char const * manhtmldir,
gtk_icon_size_lookup(GTK_ICON_SIZE_MENU, &size, &size); gtk_icon_size_lookup(GTK_ICON_SIZE_MENU, &size, &size);
pixbuf = gtk_icon_theme_load_icon(helper->icontheme, "folder", size, 0, pixbuf = gtk_icon_theme_load_icon(helper->icontheme, "folder", size, 0,
NULL); NULL);
/* FIXME check if a folder by the same name already exists */
gtk_tree_store_append(store, &parent, NULL); gtk_tree_store_append(store, &parent, NULL);
gtk_tree_store_set(store, &parent, 0, pixbuf, 1, manhtmldir, 2, section, gtk_tree_store_set(store, &parent, 0, pixbuf, 1, manhtmldir, 2, section,
3, name, -1); 3, name, -1);