#include #include #include #include #include #include #include #include "web.h" #include "web_bookmarks.h" enum { COL_TITLE, COL_URL, COL_LAST }; static void web_gtkhtml2_print_dom (xmlNodePtr node, int depth) { int i; xmlNodePtr child; if (depth == 0) g_debug ("--- Printing nodes ---"); for (i = 0; i < depth; i++) g_print (" "); g_debug ("Node: %s (%s)", node->name, node->content); for (child = node->children; child; child = child->next) web_gtkhtml2_print_dom (child, depth + 1); } static void web_bookmarks_create_tree (xmlNodePtr node, GtkListStore *store) { xmlNodePtr child; /* FIXME: Validation/error checking...? */ if (strcmp ((const char *)node->name, "item") == 0) { GtkTreeIter iter; const char *title = "", *link = ""; for (child = node->children; child; child = child->next) { if (strcmp ((const char *)child->name, "title") == 0) { title = (const char *)child->children->content; } else if (strcmp ((const char *)child->name, "link") == 0) { link = (const char *)child->children->content; } } gtk_list_store_insert_with_values (store, &iter, 0, COL_TITLE, title, COL_URL, link, -1); } else for (child = node->children; child; child = child->next) web_bookmarks_create_tree (child, store); } static void web_bookmarks_cursor_changed_cb (GtkTreeView *tree, WebPages *pages) { const gchar *url = NULL; GtkTreeIter iter; GtkTreeModel *model; GtkTreeSelection *selection = gtk_tree_view_get_selection (tree); if (!selection) return; if (!gtk_tree_selection_get_selected (selection, &model, &iter)) return; gtk_tree_model_get (model, &iter, COL_URL, &url, -1); if (url) gtk_entry_set_text (GTK_ENTRY (glade_xml_get_widget ( pages->xml, "url_entry")), url); } void web_bookmarks_init (WebPages *pages) { GtkWidget *widget; GtkListStore *model; GtkCellRenderer *renderer; gchar *home, *path; /* Create tree model */ widget = glade_xml_get_widget (pages->xml, "bookmarks_treeview"); renderer = gtk_cell_renderer_text_new (); gtk_tree_view_insert_column_with_attributes (GTK_TREE_VIEW (widget), -1, "Title", renderer, "text", COL_TITLE, NULL); /* renderer = gtk_cell_renderer_text_new (); gtk_tree_view_insert_column_with_attributes (GTK_TREE_VIEW (widget), -1, "URL", renderer, "text", COL_URL, NULL);*/ model = gtk_list_store_new (2, G_TYPE_STRING, G_TYPE_STRING); gtk_tree_view_set_model (GTK_TREE_VIEW (widget), GTK_TREE_MODEL (model)); /* Load Epiphany bookmarks rdf */ home = getenv ("HOME"); path = g_strconcat (home, G_DIR_SEPARATOR_S ".gnome2" G_DIR_SEPARATOR_S "epiphany" G_DIR_SEPARATOR_S "bookmarks.rdf", NULL); pages->bookmarks = g_new0 (WebBookmarks, 1); pages->bookmarks->xml_doc = xmlReadFile (path, NULL, 0); if (pages->bookmarks->xml_doc) web_bookmarks_create_tree (pages->bookmarks->xml_doc->children, model); else g_warning ("Failed to load bookmarks file (%s)", path); g_free (path); g_signal_connect (G_OBJECT (widget), "cursor-changed", G_CALLBACK (web_bookmarks_cursor_changed_cb), pages); }