aboutsummaryrefslogtreecommitdiffstats
path: root/lib/ephy-start-here.c
diff options
context:
space:
mode:
Diffstat (limited to 'lib/ephy-start-here.c')
-rw-r--r--lib/ephy-start-here.c413
1 files changed, 0 insertions, 413 deletions
diff --git a/lib/ephy-start-here.c b/lib/ephy-start-here.c
deleted file mode 100644
index f51314b99..000000000
--- a/lib/ephy-start-here.c
+++ /dev/null
@@ -1,413 +0,0 @@
-/*
- * Copyright (C) 2002 Marco Pesenti Gritti
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2, or (at your option)
- * any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include <gtk/gtk.h>
-#include <libxml/tree.h>
-#include <libgnome/gnome-i18n.h>
-#include <string.h>
-
-#include "ephy-start-here.h"
-#include "ephy-file-helpers.h"
-
-struct EphyStartHerePrivate
-{
- const GList *langs;
- char *base_uri;
- xmlDocPtr doc;
-};
-
-static void
-ephy_start_here_class_init (EphyStartHereClass *klass);
-static void
-ephy_start_here_init (EphyStartHere *tab);
-static void
-ephy_start_here_finalize (GObject *object);
-
-static GObjectClass *parent_class = NULL;
-
-GType
-ephy_start_here_get_type (void)
-{
- static GType ephy_start_here_type = 0;
-
- if (ephy_start_here_type == 0)
- {
- static const GTypeInfo our_info =
- {
- sizeof (EphyStartHereClass),
- NULL, /* base_init */
- NULL, /* base_finalize */
- (GClassInitFunc) ephy_start_here_class_init,
- NULL,
- NULL, /* class_data */
- sizeof (EphyStartHere),
- 0, /* n_preallocs */
- (GInstanceInitFunc) ephy_start_here_init
- };
-
- ephy_start_here_type = g_type_register_static (G_TYPE_OBJECT,
- "EphyStartHere",
- &our_info, 0);
- }
-
- return ephy_start_here_type;
-}
-
-static void
-ephy_start_here_class_init (EphyStartHereClass *klass)
-{
- GObjectClass *object_class = G_OBJECT_CLASS (klass);
-
- parent_class = g_type_class_peek_parent (klass);
-
- object_class->finalize = ephy_start_here_finalize;
-}
-
-static void
-ephy_start_here_init (EphyStartHere *eb)
-{
- eb->priv = g_new0 (EphyStartHerePrivate, 1);
-
- eb->priv->langs = gnome_i18n_get_language_list ("LC_MESSAGES");
- eb->priv->base_uri = g_strconcat ("file://",
- ephy_file ("starthere/"),
- NULL);
-}
-
-static void
-ephy_start_here_finalize (GObject *object)
-{
- EphyStartHere *eb;
-
- g_return_if_fail (IS_EPHY_START_HERE (object));
-
- eb = EPHY_START_HERE (object);
-
- g_return_if_fail (eb->priv != NULL);
-
- g_free (eb->priv->base_uri);
-
- g_free (eb->priv);
-
- G_OBJECT_CLASS (parent_class)->finalize (object);
-}
-
-EphyStartHere *
-ephy_start_here_new ()
-{
- EphyStartHere *tab;
-
- tab = EPHY_START_HERE (g_object_new (EPHY_START_HERE_TYPE, NULL));
-
- return tab;
-}
-
-static gboolean
-is_my_lang (EphyStartHere *sh, char *my_lang)
-{
- const GList *l;
-
- for (l = sh->priv->langs; l != NULL; l = l->next)
- {
- char *lang = (char *)l->data;
-
- if (strcmp (lang, my_lang) == 0)
- return TRUE;
- }
-
- return FALSE;
-}
-
-static xmlNodePtr
-drop_other_languages (EphyStartHere *sh,
- const char *node_name,
- xmlNodePtr node)
-{
- xmlNodePtr default_node;
- xmlNodePtr res = NULL;
- gboolean use_default = TRUE;
-
- default_node = node->prev;
- while (default_node && !xmlStrEqual (default_node->name, node_name))
- {
- default_node = default_node->prev;
- }
- g_return_val_if_fail (default_node != NULL, NULL);
-
- while (node != NULL)
- {
- xmlChar *lang;
-
- res = node->next;
-
- lang = xmlNodeGetLang (node);
- if (!is_my_lang (sh, lang))
- {
- xmlUnlinkNode (node);
- xmlFreeNode (node);
- }
- else
- {
- use_default = FALSE;
- }
- xmlFree (lang);
-
- node = (res && xmlStrEqual (res->name, node_name)) ?
- res : NULL;
- }
-
- if (!use_default)
- {
- xmlUnlinkNode (default_node);
- xmlFreeNode (default_node);
- }
-
- return res;
-}
-
-static void
-select_language (EphyStartHere *sh, xmlNodePtr node)
-{
- while (node)
- {
- xmlChar *lang;
-
- lang = xmlNodeGetLang (node);
- if (lang)
- {
- node = drop_other_languages
- (sh, node->name, node);
- xmlFree (lang);
- }
- else
- {
- select_language (sh, node->children);
- node = node->next;
- }
- }
-}
-
-static char *
-mozilla_bookmarks (void)
-{
- GSList *l;
- char *dir;
- char *result;
-
- dir = g_build_filename (g_get_home_dir (), ".mozilla", NULL);
- l = ephy_file_find (dir, "bookmarks.html", 4);
- g_free (dir);
-
- result = l ? g_strdup (l->data) : NULL;
-
- g_slist_foreach (l, (GFunc) g_free, NULL);
- g_slist_free (l);
-
- return result;
-}
-
-static char *
-galeon_bookmarks (void)
-{
- GSList *l;
- char *dir;
- char *result;
-
- dir = g_build_filename (g_get_home_dir (), ".galeon", NULL);
- l = ephy_file_find (dir, "bookmarks.xbel", 4);
- g_free (dir);
-
- result = l ? g_strdup (l->data) : NULL;
-
- g_slist_foreach (l, (GFunc) g_free, NULL);
- g_slist_free (l);
-
- return result;
-}
-
-static char *
-konqueror_bookmarks (void)
-{
- GSList *l;
- char *dir;
- char *result;
-
- dir = g_build_filename (g_get_home_dir (), ".kde", "share",
- "apps", "konqueror", NULL);
- l = ephy_file_find (dir, "bookmarks.xml", 4);
- g_free (dir);
-
- result = l ? g_strdup (l->data) : NULL;
-
- g_slist_foreach (l, (GFunc) g_free, NULL);
- g_slist_free (l);
-
- return result;
-}
-
-static void
-attach_content (EphyStartHere *sh, xmlNodePtr node, xmlChar *id)
-{
- if (xmlStrEqual (id, "bookmarks-import"))
- {
- xmlNodePtr child;
- char *bmk_file;
-
- bmk_file = mozilla_bookmarks ();
- if (bmk_file)
- {
- child = xmlNewDocNode (sh->priv->doc, NULL, "action",
- _("Import Mozilla bookmarks"));
- xmlSetProp (child, "id", "import-mozilla-bookmarks");
- xmlSetProp (child, "param", bmk_file);
- xmlAddChild (node, child);
- }
- g_free (bmk_file);
-
- bmk_file = galeon_bookmarks ();
- if (bmk_file)
- {
- child = xmlNewDocNode (sh->priv->doc, NULL, "action",
- _("Import Galeon bookmarks"));
- xmlSetProp (child, "id", "import-galeon-bookmarks");
- xmlSetProp (child, "param", bmk_file);
- xmlAddChild (node, child);
- }
- g_free (bmk_file);
-
- bmk_file = konqueror_bookmarks ();
- if (bmk_file)
- {
- child = xmlNewDocNode (sh->priv->doc, NULL, "action",
- _("Import Konqueror bookmarks"));
- xmlSetProp (child, "id", "import-konqueror-bookmarks");
- xmlSetProp (child, "param", bmk_file);
- xmlAddChild (node, child);
- }
- g_free (bmk_file);
-
- }
-}
-
-static char *
-color_to_string (GdkColor color)
-{
- return g_strdup_printf ("#%.2x%.2x%.2x",
- color.red >> 8,
- color.green >> 8,
- color.blue >> 8);
-}
-
-static void
-build_content (EphyStartHere *sh, xmlNodePtr node)
-{
- while (node)
- {
- xmlChar *id;
-
- id = xmlGetProp (node, "id");
- if (id)
- {
- attach_content (sh, node, id);
- xmlFree (id);
- }
-
- if (xmlStrEqual (node->name, "section"))
- {
- GtkWidget *widget, *window;
- GdkColor color;
- char *str;
-
- /* create a random widget that we will use to get
- * the current style
- */
- window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
- widget = gtk_label_new ("");
- gtk_container_add (GTK_CONTAINER (window), widget);
- gtk_widget_realize (window);
- gtk_widget_realize (widget);
- gtk_widget_ensure_style (widget);
-
- color = widget->style->bg[GTK_STATE_NORMAL];
- str = color_to_string (color);
- xmlSetProp (node, "bg", str);
- g_free (str);
-
- color = widget->style->text[GTK_STATE_SELECTED];
- str = color_to_string (color);
- xmlSetProp (node, "title", str);
- g_free (str);
-
- color = widget->style->bg[GTK_STATE_ACTIVE];
- str = color_to_string (color);
- xmlSetProp (node, "title-bg", str);
- g_free (str);
-
- color = widget->style->bg[GTK_STATE_SELECTED];
- str = color_to_string (color);
- xmlSetProp (node, "link", str);
- g_free (str);
-
- color = widget->style->text[GTK_STATE_NORMAL];
- str = color_to_string (color);
- xmlSetProp (node, "text", str);
- g_free (str);
-
- gtk_widget_destroy (window);
- }
-
- build_content (sh, node->children);
- node = node->next;
- }
-}
-char *
-ephy_start_here_get_page (EphyStartHere *sh, const char *id)
-{
- xmlNodePtr root;
- const char *xml_filepath;
- char *xml_filename;
- xmlChar *content;
- int size;
-
- xml_filename = g_strconcat ("starthere/", id, ".xml", NULL);
- xml_filepath = ephy_file (xml_filename);
- if (!xml_filepath) return NULL;
- g_free (xml_filename);
-
- sh->priv->doc = xmlParseFile (xml_filepath);
- root = xmlDocGetRootElement (sh->priv->doc);
-
- select_language (sh, root);
- build_content (sh, root);
-
- xmlDocDumpMemory (sh->priv->doc, &content, &size);
-
- xmlFreeDoc (sh->priv->doc);
-
- return content;
-}
-
-const char *
-ephy_start_here_get_base_uri (EphyStartHere *sh)
-{
- return sh->priv->base_uri;
-}