katze-utils.c katze-utils.h \
katze-item.c katze-item.h \
katze-list.c katze-list.h \
- katze-array.c katze-array.h \
- katze-xbel.c katze-xbel.h
+ katze-array.c katze-array.h
/**
* SECTION:katze-array
* @short_description: A type aware item container
- * @see_also: #KatzeArray
+ * @see_also: #KatzeList
*
* #KatzeArray is a type aware container for items.
*/
gpointer item)
{
if (katze_array_is_a ((KatzeArray*)list, G_TYPE_OBJECT))
+ {
g_object_ref (item);
+ if (KATZE_IS_ITEM (item))
+ katze_item_set_parent (item, list);
+ }
KATZE_LIST_CLASS (katze_array_parent_class)->add_item (list, item);
}
{
KATZE_LIST_CLASS (katze_array_parent_class)->remove_item (list, item);
if (katze_array_is_a ((KatzeArray*)list, G_TYPE_OBJECT))
+ {
+ if (KATZE_IS_ITEM (item))
+ katze_item_set_parent (item, NULL);
g_object_unref (item);
+ }
}
static void
* @item: a #GObject
*
* Adds an item to the array.
+ *
+ * If @item is a #KatzeItem its parent is set accordingly.
**/
void
katze_array_add_item (KatzeArray* array,
* @item: a #GObject
*
* Removes an item from the array.
+ *
+ * If @item is a #KatzeItem its parent is unset accordingly.
**/
void
katze_array_remove_item (KatzeArray* array,
katze_assign (item->token, g_strdup (token));
g_object_notify (G_OBJECT (item), "token");
}
+
+/**
+ * katze_item_get_parent:
+ * @item: a #KatzeItem
+ *
+ * Determines the parent of @item.
+ *
+ * Return value: the parent of the item
+ **/
+gpointer
+katze_item_get_parent (KatzeItem* item)
+{
+ g_return_val_if_fail (KATZE_IS_ITEM (item), NULL);
+
+ return item->parent;
+}
+
+/**
+ * katze_item_set_parent:
+ * @item: a #KatzeItem
+ * @parent: the new parent
+ *
+ * Sets the parent of @item.
+ *
+ * This is intended for item container implementations and
+ * should not be used otherwise.
+ **/
+void
+katze_item_set_parent (KatzeItem* item,
+ gpointer parent)
+{
+ g_return_if_fail (KATZE_IS_ITEM (item));
+
+ if (parent)
+ g_object_ref (parent);
+ katze_object_assign (item->parent, parent);
+ /* g_object_notify (G_OBJECT (item), "parent"); */
+}
gchar* uri;
gchar* icon;
gchar* token;
+
+ KatzeItem* parent;
};
struct _KatzeItemClass
katze_item_set_token (KatzeItem* item,
const gchar* token);
+gpointer
+katze_item_get_parent (KatzeItem* item);
+
+void
+katze_item_set_parent (KatzeItem* item,
+ gpointer parent);
+
G_END_DECLS
#endif /* __MIDORI_WEB_ITEM_H__ */
+++ /dev/null
-/*
- Copyright (C) 2007-2008 Christian Dywan <christian@twotoasts.de>
-
- This library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- See the file COPYING for the full license text.
-*/
-
-/**
- * TODO:
- * - Support info > metadata, alias, added, modified, visited
- * - Compatibility: The Nokia 770 *requires* metadata and folder
- * - Compatibility: Kazehakase's bookmarks
- * - Compatibility: Epiphany's bookmarks
- * - XML Indentation
- **/
-
-#include "katze-xbel.h"
-
-#include <stdio.h>
-#include <string.h>
-#include <libxml/parser.h>
-#include <libxml/tree.h>
-#include <glib/gi18n.h>
-
-#include "katze-utils.h"
-
-struct _KatzeXbelItem
-{
- GObject parent_instance;
-
- guint refs;
- KatzeXbelItemKind kind;
- KatzeXbelItem* parent;
-
- GList* items;
- gboolean folded;
- gchar* title;
- gchar* desc;
- gchar* href;
-};
-
-G_DEFINE_TYPE (KatzeXbelItem, katze_xbel_item, G_TYPE_OBJECT)
-
-static void
-katze_xbel_item_finalize (GObject* object);
-
-static void
-katze_xbel_item_class_init (KatzeXbelItemClass* class)
-{
- GObjectClass* gobject_class = G_OBJECT_CLASS (class);
- gobject_class->finalize = katze_xbel_item_finalize;
-}
-
-static void
-katze_xbel_item_init (KatzeXbelItem* item)
-{
- item->parent = NULL;
-}
-
-static void
-katze_xbel_item_finalize (GObject* object)
-{
- KatzeXbelItem* item = KATZE_XBEL_ITEM (object);
-
- if (item->parent)
- katze_xbel_folder_remove_item (item->parent, item);
-
- if (item->kind == KATZE_XBEL_ITEM_KIND_FOLDER)
- {
- guint n = katze_xbel_folder_get_n_items (item);
- guint i;
- for (i = 0; i < n; i++)
- {
- KatzeXbelItem* _item = katze_xbel_folder_get_nth_item (item, i);
- _item->parent = NULL;
- katze_xbel_item_unref (_item);
- }
- g_list_free (item->items);
- }
- if (item->kind != KATZE_XBEL_ITEM_KIND_SEPARATOR)
- {
- g_free (item->title);
- g_free (item->desc);
- }
- if (item->kind == KATZE_XBEL_ITEM_KIND_BOOKMARK)
- g_free (item->href);
-
- G_OBJECT_CLASS (katze_xbel_item_parent_class)->finalize (object);
-}
-
-/* Create a new item of a certain type */
-static KatzeXbelItem*
-katze_xbel_item_new (KatzeXbelItemKind kind)
-{
- KatzeXbelItem* item = g_object_new (KATZE_TYPE_XBEL_ITEM, NULL);
-
- item->kind = kind;
-
- if (kind == KATZE_XBEL_ITEM_KIND_FOLDER)
- {
- item->items = NULL;
- item->folded = TRUE;
- }
- if (kind != KATZE_XBEL_ITEM_KIND_SEPARATOR)
- {
- item->title = NULL;
- item->desc = NULL;
- }
- if (kind == KATZE_XBEL_ITEM_KIND_BOOKMARK)
- item->href = g_strdup ("");
- return item;
-}
-
-/**
- * katze_xbel_bookmark_new:
- *
- * Create a new empty bookmark.
- *
- * Return value: a newly allocated bookmark
- **/
-KatzeXbelItem*
-katze_xbel_bookmark_new (void)
-{
- return katze_xbel_item_new (KATZE_XBEL_ITEM_KIND_BOOKMARK);
-}
-
-static KatzeXbelItem*
-katze_xbel_bookmark_from_xmlNodePtr (xmlNodePtr cur)
-{
- g_return_val_if_fail (cur, NULL);
-
- KatzeXbelItem* bookmark = katze_xbel_bookmark_new ();
- xmlChar* key = xmlGetProp (cur, (xmlChar*)"href");
- katze_xbel_bookmark_set_href (bookmark, (gchar*)key);
- cur = cur->xmlChildrenNode;
- while (cur)
- {
- if (!xmlStrcmp (cur->name, (const xmlChar*)"title"))
- {
- xmlChar* key = xmlNodeGetContent (cur);
- katze_xbel_item_set_title (bookmark, g_strstrip ((gchar*)key));
- }
- else if (!xmlStrcmp (cur->name, (const xmlChar*)"desc"))
- {
- xmlChar* key = xmlNodeGetContent (cur);
- katze_xbel_item_set_desc (bookmark, g_strstrip ((gchar*)key));
- }
- cur = cur->next;
- }
- return bookmark;
-}
-
-/**
- * katze_katze_xbel_separator_new:
- *
- * Create a new separator.
- *
- * The returned item must be freed eventually.
- *
- * Return value: a newly allocated separator.
- **/
-KatzeXbelItem*
-katze_xbel_separator_new (void)
-{
- return katze_xbel_item_new (KATZE_XBEL_ITEM_KIND_SEPARATOR);
-}
-
-/**
- * katze_xbel_folder_new:
- *
- * Create a new empty folder.
- *
- * The returned item must be freed eventually.
- *
- * Return value: a newly allocated folder.
- **/
-KatzeXbelItem*
-katze_xbel_folder_new (void)
-{
- return katze_xbel_item_new (KATZE_XBEL_ITEM_KIND_FOLDER);
-}
-
-/* Create a folder from an xmlNodePtr */
-static KatzeXbelItem*
-katze_xbel_folder_from_xmlNodePtr (xmlNodePtr cur)
-{
- g_return_val_if_fail (cur, NULL);
-
- KatzeXbelItem* folder = katze_xbel_folder_new ();
-
- xmlChar* key = xmlGetProp (cur, (xmlChar*)"folded");
- if (key)
- {
- if (!g_ascii_strncasecmp ((gchar*)key, "yes", 3))
- folder->folded = TRUE;
- else if (!g_ascii_strncasecmp ((gchar*)key, "no", 2))
- folder->folded = FALSE;
- else
- g_warning ("XBEL: Unknown value for folded.");
- xmlFree (key);
- }
- cur = cur->xmlChildrenNode;
- while (cur)
- {
- if (!xmlStrcmp (cur->name, (const xmlChar*)"title"))
- {
- xmlChar* key = xmlNodeGetContent (cur);
- katze_assign (folder->title, g_strstrip ((gchar*)key));
- }
- else if (!xmlStrcmp (cur->name, (const xmlChar*)"desc"))
- {
- xmlChar* key = xmlNodeGetContent (cur);
- katze_assign (folder->desc, g_strstrip ((gchar*)key));
- }
- else if (!xmlStrcmp (cur->name, (const xmlChar*)"folder"))
- {
- KatzeXbelItem* item = katze_xbel_folder_from_xmlNodePtr (cur);
- item->parent = folder;
- folder->items = g_list_prepend (folder->items, item);
- }
- else if (!xmlStrcmp (cur->name, (const xmlChar*)"bookmark"))
- {
- KatzeXbelItem* item = katze_xbel_bookmark_from_xmlNodePtr (cur);
- item->parent = folder;
- folder->items = g_list_prepend (folder->items, item);
- }
- else if (!xmlStrcmp (cur->name, (const xmlChar*)"separator"))
- {
- KatzeXbelItem* item = katze_xbel_separator_new ();
- item->parent = folder;
- folder->items = g_list_prepend (folder->items, item);
- }
- cur = cur->next;
- }
- /* Prepending and reversing is faster than appending */
- folder->items = g_list_reverse (folder->items);
- return folder;
-}
-
-/* Loads the contents from an xmlNodePtr into a folder. */
-static gboolean
-katze_xbel_folder_from_xmlDocPtr (KatzeXbelItem* folder,
- xmlDocPtr doc)
-{
- g_return_val_if_fail (katze_xbel_folder_is_empty (folder), FALSE);
- g_return_val_if_fail (doc, FALSE);
-
- xmlNodePtr cur = xmlDocGetRootElement (doc);
- xmlChar* version = xmlGetProp (cur, (xmlChar*)"version");
- if (xmlStrcmp (version, (xmlChar*)"1.0"))
- g_warning ("XBEL version is not 1.0.");
- xmlFree (version);
-
- katze_assign (folder->title, (gchar*)xmlGetProp (cur, (xmlChar*)"title"));
- katze_assign (folder->desc, (gchar*)xmlGetProp (cur, (xmlChar*)"desc"));
- if ((cur = xmlDocGetRootElement (doc)) == NULL)
- {
- /* Empty document */
- return FALSE;
- }
- if (xmlStrcmp (cur->name, (const xmlChar*)"xbel"))
- {
- /* Wrong document kind */
- return FALSE;
- }
- cur = cur->xmlChildrenNode;
- while (cur)
- {
- KatzeXbelItem* item = NULL;
- if (!xmlStrcmp (cur->name, (const xmlChar*)"folder"))
- item = katze_xbel_folder_from_xmlNodePtr (cur);
- else if (!xmlStrcmp (cur->name, (const xmlChar*)"bookmark"))
- item = katze_xbel_bookmark_from_xmlNodePtr (cur);
- else if (!xmlStrcmp (cur->name, (const xmlChar*)"separator"))
- item = katze_xbel_separator_new ();
- /*else if (!xmlStrcmp (cur->name, (const xmlChar*)"info"))
- item = katze_xbel_parse_info (xbel, cur);*/
- if (item)
- {
- item->parent = folder;
- folder->items = g_list_prepend (folder->items, item);
- }
- cur = cur->next;
- }
- /* Prepending and reversing is faster than appending */
- folder->items = g_list_reverse (folder->items);
- return TRUE;
-}
-
-/**
- * katze_xbel_item_ref:
- * @item: a valid item
- *
- * Ref an KatzeXbelItem.
- *
- * Ref means that the reference count is increased by one.
- *
- * This has no effect on children of a folder.
- **/
-void
-katze_xbel_item_ref (KatzeXbelItem* item)
-{
- g_return_if_fail (KATZE_IS_XBEL_ITEM (item));
-
- g_object_ref (item);
-}
-
-/**
- * katze_xbel_item_unref:
- * @item: a valid item
- *
- * Unref an KatzeXbelItem. If @item is a folder all of its children will also
- * be unreffed automatically.
- *
- * Unref means that the reference count is decreased. If there are no
- * references left, the memory will be freed and if needed removed from
- * its containing folder.
- **/
-void
-katze_xbel_item_unref (KatzeXbelItem* item)
-{
- g_return_if_fail (KATZE_IS_XBEL_ITEM (item));
-
- g_object_unref (item);
-}
-
-/**
- * katze_xbel_item_copy:
- * @item: the item to copy
- *
- * Copy an KatzeXbelItem.
- *
- * The returned item must be unreffed eventually.
- *
- * Return value: a copy of @item
- **/
-KatzeXbelItem*
-katze_xbel_item_copy (KatzeXbelItem* item)
-{
- g_return_val_if_fail (KATZE_IS_XBEL_ITEM (item), NULL);
-
- KatzeXbelItem* copy = katze_xbel_item_new (item->kind);
-
- if (katze_xbel_item_is_folder (item))
- {
- guint n = katze_xbel_folder_get_n_items (item);
- guint i;
- for (i = 0; i < n; i++)
- {
- KatzeXbelItem* _item = katze_xbel_folder_get_nth_item (item, i);
- katze_xbel_folder_append_item (copy, katze_xbel_item_copy (_item));
- }
- }
- if (item->kind != KATZE_XBEL_ITEM_KIND_SEPARATOR)
- {
- katze_xbel_item_set_title (copy, item->title);
- katze_xbel_item_set_desc (copy, item->desc);
- }
- if (item->kind == KATZE_XBEL_ITEM_KIND_BOOKMARK)
- katze_xbel_bookmark_set_href (copy, item->href);
- return copy;
-}
-
-/**
- * katze_xbel_folder_append_item:
- * @folder: a folder
- * @item: the item to append
- *
- * Append the given item to a folder.
- *
- * The item is actually moved and must not be contained in another folder.
- *
- **/
-void
-katze_xbel_folder_append_item (KatzeXbelItem* folder,
- KatzeXbelItem* item)
-{
- g_return_if_fail (!katze_xbel_item_get_parent (item));
- g_return_if_fail (katze_xbel_item_is_folder (folder));
-
- folder->items = g_list_append (folder->items, item);
-
- item->parent = folder;
-}
-
-/**
- * katze_xbel_folder_prepend_item:
- * @folder: a folder
- * @item: the item to prepend
- *
- * Prepend the given item to a folder.
- *
- * The item is actually moved and must not be contained in another folder.
- *
- **/
-void
-katze_xbel_folder_prepend_item (KatzeXbelItem* folder,
- KatzeXbelItem* item)
-{
- g_return_if_fail (!katze_xbel_item_get_parent (item));
- g_return_if_fail (katze_xbel_item_is_folder (folder));
-
- folder->items = g_list_prepend (folder->items, item);
-
- item->parent = folder;
-}
-
-/**
- * katze_xbel_folder_remove_item:
- * @folder: a folder
- * @item: the item to remove
- *
- * Remove the given @item from a @folder.
- **/
-void
-katze_xbel_folder_remove_item (KatzeXbelItem* folder,
- KatzeXbelItem* item)
-{
- g_return_if_fail (KATZE_IS_XBEL_ITEM (item));
- g_return_if_fail (katze_xbel_item_get_parent(folder) != item);
-
- /* Fortunately we know that items are unique */
- folder->items = g_list_remove (folder->items, item);
-
- item->parent = NULL;
-}
-
-/**
- * katze_xbel_folder_get_n_items:
- * @folder: a folder
- *
- * Retrieve the number of items contained in the given @folder.
- *
- * Return value: number of items
- **/
-guint
-katze_xbel_folder_get_n_items (KatzeXbelItem* folder)
-{
- g_return_val_if_fail (katze_xbel_item_is_folder (folder), 0);
-
- return g_list_length (folder->items);
-}
-
-/**
- * katze_xbel_folder_get_nth_item:
- * @folder: a folder
- * @n: the index of an item
- *
- * Retrieve an item contained in the given @folder by its index.
- *
- * Return value: the item at the given index or %NULL
- **/
-KatzeXbelItem*
-katze_xbel_folder_get_nth_item (KatzeXbelItem* folder,
- guint n)
-{
- g_return_val_if_fail (katze_xbel_item_is_folder(folder), NULL);
-
- return (KatzeXbelItem*) g_list_nth_data (folder->items, n);
-}
-
-/**
- * katze_xbel_folder_is_empty:
- * @folder: A folder.
- *
- * Determines wether or not a folder contains no items. This is significantly
- * faster than katze_xbel_folder_get_n_items for this particular purpose.
- *
- * Return value: Wether the given @folder is folded.
- **/
-gboolean
-katze_xbel_folder_is_empty (KatzeXbelItem* folder)
-{
- return !katze_xbel_folder_get_nth_item (folder, 0);
-}
-
-/**
- * katze_xbel_folder_get_folded:
- * @folder: A folder.
- *
- * Determines wether or not a folder is folded. If a folder is not folded
- * it should not be exposed in a user interface.
- *
- * New folders are folded by default.
- *
- * Return value: Wether the given @folder is folded.
- **/
-gboolean
-katze_xbel_folder_get_folded (KatzeXbelItem* folder)
-{
- g_return_val_if_fail (katze_xbel_item_is_folder (folder), TRUE);
-
- return folder->folded;
-}
-
-/**
- * katze_xbel_item_get_kind:
- * @item: A item.
- *
- * Determines the kind of an item.
- *
- * Return value: The kind of the given @item.
- **/
-KatzeXbelItemKind
-katze_xbel_item_get_kind (KatzeXbelItem* item)
-{
- g_return_val_if_fail (KATZE_IS_XBEL_ITEM (item), KATZE_XBEL_ITEM_KIND_BOOKMARK);
-
- return item->kind;
-}
-
-/**
- * katze_xbel_item_get_parent:
- * @item: A valid item.
- *
- * Retrieves the parent folder of an item.
- *
- * Return value: The parent folder of the given @item or %NULL.
- **/
-KatzeXbelItem*
-katze_xbel_item_get_parent (KatzeXbelItem* item)
-{
- g_return_val_if_fail (KATZE_IS_XBEL_ITEM (item), NULL);
-
- return item->parent;
-}
-
-/**
- * katze_xbel_item_get_title:
- * @item: A valid item.
- *
- * Retrieves the title of an item.
- *
- * Return value: The title of the given @item or %NULL.
- **/
-G_CONST_RETURN gchar*
-katze_xbel_item_get_title (KatzeXbelItem* item)
-{
- g_return_val_if_fail (!katze_xbel_item_is_separator (item), NULL);
-
- return item->title;
-}
-
-/**
- * katze_xbel_item_get_desc:
- * @item: A valid item.
- *
- * Retrieves the description of an item.
- *
- * Return value: The description of the @item or %NULL.
- **/
-G_CONST_RETURN gchar*
-katze_xbel_item_get_desc (KatzeXbelItem* item)
-{
- g_return_val_if_fail (!katze_xbel_item_is_separator (item), NULL);
-
- return item->desc;
-}
-
-/**
- * katze_xbel_bookmark_get_href:
- * @bookmark: A bookmark.
- *
- * Retrieves the uri of a bookmark. The value is guaranteed to not be %NULL.
- *
- * Return value: The uri of the @bookmark.
- **/
-G_CONST_RETURN gchar*
-katze_xbel_bookmark_get_href (KatzeXbelItem* bookmark)
-{
- g_return_val_if_fail (katze_xbel_item_is_bookmark (bookmark), NULL);
-
- return bookmark->href;
-}
-
-/**
- * katze_xbel_item_is_bookmark:
- * @item: A valid item.
- *
- * Determines wether or not an item is a bookmark.
- *
- * Return value: %TRUE if the @item is a bookmark.
- **/
-gboolean
-katze_xbel_item_is_bookmark (KatzeXbelItem* item)
-{
- g_return_val_if_fail (KATZE_IS_XBEL_ITEM (item), FALSE);
-
- return item->kind == KATZE_XBEL_ITEM_KIND_BOOKMARK;
-}
-
-/**
- * katze_xbel_item_is_separator:
- * @item: A valid item.
- *
- * Determines wether or not an item is a separator.
- *
- * Return value: %TRUE if the @item is a separator.
- **/
-gboolean katze_xbel_item_is_separator (KatzeXbelItem* item)
-{
- g_return_val_if_fail (KATZE_IS_XBEL_ITEM (item), FALSE);
-
- return item->kind == KATZE_XBEL_ITEM_KIND_SEPARATOR;
-}
-
-/**
- * katze_xbel_item_is_folder:
- * @item: A valid item.
- *
- * Determines wether or not an item is a folder.
- *
- * Return value: %TRUE if the item is a folder.
- **/
-gboolean
-katze_xbel_item_is_folder (KatzeXbelItem* item)
-{
- g_return_val_if_fail (KATZE_IS_XBEL_ITEM (item), FALSE);
-
- return item->kind == KATZE_XBEL_ITEM_KIND_FOLDER;
-}
-
-/**
- * katze_xbel_folder_set_folded:
- * @folder: A folder.
- * @folded: TRUE if the folder is folded.
- *
- * Sets the foldedness of the @folder.
- **/
-void
-katze_xbel_folder_set_folded (KatzeXbelItem* folder,
- gboolean folded)
-{
- g_return_if_fail (katze_xbel_item_is_folder (folder));
-
- folder->folded = folded;
-}
-
-/**
- * katze_xbel_item_set_title:
- * @item: A valid item.
- * @title: A string to use for the title.
- *
- * Sets the title of the @item.
- **/
-void
-katze_xbel_item_set_title (KatzeXbelItem* item,
- const gchar* title)
-{
- g_return_if_fail (!katze_xbel_item_is_separator (item));
-
- katze_assign (item->title, g_strdup (title));
-}
-
-/**
- * katze_xbel_item_set_desc:
- * @item: A valid item.
- * @title: A string to use for the description.
- *
- * Sets the description of the @item.
- **/
-void
-katze_xbel_item_set_desc (KatzeXbelItem* item,
- const gchar* desc)
-{
- g_return_if_fail (!katze_xbel_item_is_separator (item));
-
- katze_assign (item->desc, g_strdup (desc));
-}
-
-/**
- * katze_xbel_bookmark_set_href:
- * @bookmark: A bookmark.
- * @href: A string containing a valid uri.
- *
- * Sets the uri of the bookmark.
- *
- * The uri must not be %NULL.
- *
- * This uri is not currently validated in any way. This may change in the future.
- **/
-void
-katze_xbel_bookmark_set_href (KatzeXbelItem* bookmark,
- const gchar* href)
-{
- g_return_if_fail (katze_xbel_item_is_bookmark (bookmark));
- g_return_if_fail (href);
-
- katze_assign (bookmark->href, g_strdup (href));
-}
-
-gboolean
-katze_xbel_folder_from_data (KatzeXbelItem* folder,
- const gchar* data,
- GError** error)
-{
- g_return_val_if_fail (katze_xbel_folder_is_empty (folder), FALSE);
- g_return_val_if_fail (data, FALSE);
- xmlDocPtr doc;
- if((doc = xmlParseMemory (data, strlen (data))) == NULL)
- {
- /* No valid xml or broken encoding */
- *error = g_error_new_literal (KATZE_XBEL_ERROR, KATZE_XBEL_ERROR_READ,
- _("Malformed document."));
- return FALSE;
- }
- if (!katze_xbel_folder_from_xmlDocPtr (folder, doc))
- {
- /* Parsing failed */
- xmlFreeDoc(doc);
- *error = g_error_new_literal (KATZE_XBEL_ERROR, KATZE_XBEL_ERROR_READ,
- _("Malformed document."));
- return FALSE;
- }
- xmlFreeDoc(doc);
- return TRUE;
-}
-
-/**
- * katze_xbel_folder_from_file:
- * @folder: An empty folder.
- * @file: A relative path to a file.
- * @error: return location for a GError or %NULL
- *
- * Tries to load @file.
- *
- * Return value: %TRUE on success or %FALSE when an error occured.
- **/
-gboolean
-katze_xbel_folder_from_file (KatzeXbelItem* folder,
- const gchar* file,
- GError** error)
-{
- g_return_val_if_fail (katze_xbel_folder_is_empty (folder), FALSE);
- g_return_val_if_fail (file, FALSE);
- if (!g_file_test (file, G_FILE_TEST_EXISTS))
- {
- /* File doesn't exist */
- *error = g_error_new_literal (G_FILE_ERROR, G_FILE_ERROR_NOENT,
- _("File not found."));
- return FALSE;
- }
- xmlDocPtr doc;
- if ((doc = xmlParseFile (file)) == NULL)
- {
- /* No valid xml or broken encoding */
- *error = g_error_new_literal (KATZE_XBEL_ERROR, KATZE_XBEL_ERROR_READ,
- _("Malformed document."));
- return FALSE;
- }
- if (!katze_xbel_folder_from_xmlDocPtr (folder, doc))
- {
- /* Parsing failed */
- xmlFreeDoc (doc);
- *error = g_error_new_literal (KATZE_XBEL_ERROR, KATZE_XBEL_ERROR_READ,
- _("Malformed document."));
- return FALSE;
- }
- xmlFreeDoc (doc);
- return TRUE;
-}
-
-static gchar*
-katze_xbel_xml_element (const gchar* name,
- const gchar* value)
-{
- if (!value)
- return g_strdup ("");
- gchar* valueEscaped = g_markup_escape_text (value, -1);
- gchar* markup = g_strdup_printf ("<%s>%s</%s>\n",
- name, valueEscaped, name);
- g_free (valueEscaped);
- return markup;
-}
-
-gchar*
-katze_xbel_item_to_data (KatzeXbelItem* item)
-{
- g_return_val_if_fail (KATZE_IS_XBEL_ITEM (item), NULL);
-
- gchar* markup = NULL;
- switch (item->kind)
- {
- case KATZE_XBEL_ITEM_KIND_FOLDER:
- {
- GString* _markup = g_string_new (NULL);
- guint n = katze_xbel_folder_get_n_items (item);
- guint i;
- for (i = 0; i < n; i++)
- {
- KatzeXbelItem* _item = katze_xbel_folder_get_nth_item (item, i);
- gchar* item_markup = katze_xbel_item_to_data (_item);
- g_string_append (_markup, item_markup);
- g_free (item_markup);
- }
- gchar* folded = item->folded ? NULL : g_strdup_printf (" folded=\"no\"");
- gchar* title = katze_xbel_xml_element ("title", item->title);
- gchar* desc = katze_xbel_xml_element ("desc", item->desc);
- markup = g_strdup_printf ("<folder%s>\n%s%s%s</folder>\n",
- folded ? folded : "",
- title, desc,
- g_string_free (_markup, FALSE));
- g_free (folded);
- g_free (title);
- g_free (desc);
- break;
- }
- case KATZE_XBEL_ITEM_KIND_BOOKMARK:
- {
- gchar* href_escaped = g_markup_escape_text (item->href, -1);
- gchar* href = g_strdup_printf (" href=\"%s\"", href_escaped);
- g_free (href_escaped);
- gchar* title = katze_xbel_xml_element ("title", item->title);
- gchar* desc = katze_xbel_xml_element ("desc", item->desc);
- markup = g_strdup_printf ("<bookmark%s>\n%s%s%s</bookmark>\n",
- href,
- title, desc,
- "");
- g_free (href);
- g_free (title);
- g_free (desc);
- break;
- }
- case KATZE_XBEL_ITEM_KIND_SEPARATOR:
- markup = g_strdup ("<separator/>\n");
- break;
- default:
- g_warning ("XBEL: Unknown item kind");
- }
- return markup;
-}
-
-static gchar*
-katze_xbel_folder_to_data (KatzeXbelItem* folder,
- gsize* length,
- GError** error)
-{
- g_return_val_if_fail (katze_xbel_item_is_folder (folder), FALSE);
-
- GString* inner_markup = g_string_new (NULL);
- guint n = katze_xbel_folder_get_n_items (folder);
- guint i;
- for (i = 0; i < n; i++)
- {
- KatzeXbelItem* item = katze_xbel_folder_get_nth_item (folder, i);
- gchar* sItem = katze_xbel_item_to_data (item);
- g_string_append (inner_markup, sItem);
- g_free (sItem);
- }
- gchar* title = katze_xbel_xml_element ("title", folder->title);
- gchar* desc = katze_xbel_xml_element ("desc", folder->desc);
- gchar* outer_markup;
- outer_markup = g_strdup_printf (
- "%s%s<xbel version=\"1.0\">\n%s%s%s</xbel>\n",
- "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n",
- "<!DOCTYPE xbel PUBLIC \"+//IDN python.org//DTD "
- "XML Bookmark Exchange Language 1.0//EN//XML\" "
- "\"http://www.python.org/topics/xml/dtds/xbel-1.0.dtd\">\n",
- title,
- desc,
- g_string_free (inner_markup, FALSE));
- g_free (title);
- g_free (desc);
-
- if (length)
- *length = strlen (outer_markup);
- return outer_markup;
-}
-
-/**
- * katze_xbel_folder_to_file:
- * @folder: A folder.
- * @file: The destination filename.
- * @error: return location for a GError or %NULL
- *
- * Write the contents of @folder to the specified file, creating it if necessary.
- *
- * Return value: %TRUE on success or %FALSE when an error occured.
- **/
-gboolean
-katze_xbel_folder_to_file (KatzeXbelItem* folder,
- const gchar* file,
- GError** error)
-{
- g_return_val_if_fail (KATZE_IS_XBEL_ITEM (folder), FALSE);
- g_return_val_if_fail (file, FALSE);
-
- gchar* data;
- if (!(data = katze_xbel_folder_to_data (folder, NULL, error)))
- return FALSE;
- FILE* fp;
- if (!(fp = fopen (file, "w")))
- {
- *error = g_error_new_literal (G_FILE_ERROR, G_FILE_ERROR_ACCES,
- _("Writing failed."));
- return FALSE;
- }
- fputs (data, fp);
- fclose (fp);
- g_free (data);
- return TRUE;
-}
+++ /dev/null
-/*
- Copyright (C) 2007-2008 Christian Dywan <christian@twotoasts.de>
-
- This library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- See the file COPYING for the full license text.
-*/
-
-#ifndef __KATZE_XBEL_H__
-#define __KATZE_XBEL_H__ 1
-
-#include <glib-object.h>
-
-G_BEGIN_DECLS
-
-#define KATZE_TYPE_XBEL_ITEM \
- (katze_xbel_item_get_type ())
-#define KATZE_XBEL_ITEM(obj) \
- (G_TYPE_CHECK_INSTANCE_CAST ((obj), KATZE_TYPE_XBEL_ITEM, KatzeXbelItem))
-#define KATZE_IS_XBEL_ITEM(obj) \
- (G_TYPE_CHECK_INSTANCE_TYPE ((obj), KATZE_TYPE_XBEL_ITEM))
-
-typedef struct _KatzeXbelItem KatzeXbelItem;
-typedef struct _KatzeXbelItemClass KatzeXbelItemClass;
-
-struct _KatzeXbelItemClass
-{
- GObjectClass parent_class;
-};
-
-#define KATZE_XBEL_ERROR g_quark_from_string("KATZE_XBEL_ERROR")
-
-typedef enum
-{
- KATZE_XBEL_ERROR_INVALID_URI, /* Malformed uri */
- KATZE_XBEL_ERROR_INVALID_VALUE, /* Requested field not found */
- KATZE_XBEL_ERROR_URI_NOT_FOUND, /* Requested uri not found */
- KATZE_XBEL_ERROR_READ, /* Malformed document */
- KATZE_XBEL_ERROR_UNKNOWN_ENCODING, /* Parsed text was in an unknown encoding */
- KATZE_XBEL_ERROR_WRITE, /* Writing failed. */
-} KatzeXbelError;
-
-typedef enum
-{
- KATZE_XBEL_ITEM_KIND_FOLDER,
- KATZE_XBEL_ITEM_KIND_BOOKMARK,
- KATZE_XBEL_ITEM_KIND_SEPARATOR
-} KatzeXbelItemKind;
-
-GType
-katze_xbel_item_get_type (void) G_GNUC_CONST;
-
-KatzeXbelItem*
-katze_xbel_bookmark_new (void);
-
-KatzeXbelItem*
-katze_xbel_separator_new (void);
-
-KatzeXbelItem*
-katze_xbel_folder_new (void);
-
-void
-katze_xbel_item_ref (KatzeXbelItem* item);
-
-void
-katze_xbel_item_unref (KatzeXbelItem* item);
-
-KatzeXbelItem*
-katze_xbel_item_copy (KatzeXbelItem* item);
-
-void
-katze_xbel_folder_append_item (KatzeXbelItem* folder,
- KatzeXbelItem* item);
-
-void
-katze_xbel_folder_prepend_item (KatzeXbelItem* folder,
- KatzeXbelItem* item);
-
-void
-katze_xbel_folder_remove_item (KatzeXbelItem* folder,
- KatzeXbelItem* item);
-
-guint
-katze_xbel_folder_get_n_items (KatzeXbelItem* folder);
-
-KatzeXbelItem*
-katze_xbel_folder_get_nth_item (KatzeXbelItem* folder,
- guint n);
-
-gboolean
-katze_xbel_folder_is_empty (KatzeXbelItem* folder);
-
-gboolean
-katze_xbel_folder_get_folded (KatzeXbelItem* folder);
-
-KatzeXbelItemKind
-katze_xbel_item_get_kind (KatzeXbelItem* item);
-
-KatzeXbelItem*
-katze_xbel_item_get_parent (KatzeXbelItem* item);
-
-G_CONST_RETURN gchar*
-katze_xbel_item_get_title (KatzeXbelItem* item);
-
-G_CONST_RETURN gchar*
-katze_xbel_item_get_desc (KatzeXbelItem* item);
-
-G_CONST_RETURN gchar*
-katze_xbel_bookmark_get_href (KatzeXbelItem* bookmark);
-
-/*time_t
-katze_xbel_bookmark_get_added (KatzeXbelItem* bookmark);
-
-time_t
-katze_xbel_bookmark_get_modified (KatzeXbelItem* bookmark);
-
-time_t
-katze_xbel_bookmark_get_visited (KatzeXbelItem* bookmark);*/
-
-gboolean
-katze_xbel_item_is_bookmark (KatzeXbelItem* bookmark);
-
-gboolean
-katze_xbel_item_is_separator (KatzeXbelItem* bookmark);
-
-gboolean
-katze_xbel_item_is_folder (KatzeXbelItem* bookmark);
-
-void
-katze_xbel_folder_set_folded (KatzeXbelItem* folder,
- gboolean folded);
-
-void
-katze_xbel_item_set_title (KatzeXbelItem* item,
- const gchar* title);
-
-void
-katze_xbel_item_set_desc (KatzeXbelItem* item,
- const gchar* desc);
-
-void
-katze_xbel_bookmark_set_href (KatzeXbelItem* bookmark,
- const gchar* href);
-
-gboolean
-katze_xbel_folder_from_data (KatzeXbelItem* folder,
- const gchar* data,
- GError** error);
-
-gboolean
-katze_xbel_folder_from_file (KatzeXbelItem* folder,
- const gchar* file,
- GError** error);
-
-gchar*
-katze_xbel_item_to_data (KatzeXbelItem* item);
-
-gboolean
-katze_xbel_folder_to_file (KatzeXbelItem* folder,
- const gchar* file,
- GError** error);
-
-#endif /* !__KATZE_XBEL_H__ */
#include "katze-item.h"
#include "katze-list.h"
#include "katze-array.h"
-#include "katze-xbel.h"
#endif /* __KATZE_H__ */
#include <string.h>
#include <glib/gi18n.h>
#include <gtk/gtk.h>
+#include <libxml/parser.h>
+#include <libxml/tree.h>
#if ENABLE_NLS
#include <libintl.h>
}
}
+static KatzeItem*
+katze_item_from_xmlNodePtr (xmlNodePtr cur)
+{
+ KatzeItem* item;
+ xmlChar* key;
+
+ item = katze_item_new ();
+ key = xmlGetProp (cur, (xmlChar*)"href");
+ katze_item_set_uri (item, (gchar*)key);
+ g_free (key);
+
+ cur = cur->xmlChildrenNode;
+ while (cur)
+ {
+ if (!xmlStrcmp (cur->name, (const xmlChar*)"title"))
+ {
+ key = xmlNodeGetContent (cur);
+ katze_item_set_name (item, g_strstrip ((gchar*)key));
+ g_free (key);
+ }
+ else if (!xmlStrcmp (cur->name, (const xmlChar*)"desc"))
+ {
+ key = xmlNodeGetContent (cur);
+ katze_item_set_text (item, g_strstrip ((gchar*)key));
+ g_free (key);
+ }
+ cur = cur->next;
+ }
+ return item;
+}
+
+/* Create an array from an xmlNodePtr */
+static KatzeArray*
+katze_array_from_xmlNodePtr (xmlNodePtr cur)
+{
+ KatzeArray* array;
+ xmlChar* key;
+ KatzeItem* item;
+
+ array = katze_array_new (KATZE_TYPE_ARRAY);
+
+ key = xmlGetProp (cur, (xmlChar*)"folded");
+ if (key)
+ {
+ /* if (!g_ascii_strncasecmp ((gchar*)key, "yes", 3))
+ folder->folded = TRUE;
+ else if (!g_ascii_strncasecmp ((gchar*)key, "no", 2))
+ folder->folded = FALSE;
+ else
+ g_warning ("XBEL: Unknown value for folded."); */
+ xmlFree (key);
+ }
+
+ cur = cur->xmlChildrenNode;
+ while (cur)
+ {
+ if (!xmlStrcmp (cur->name, (const xmlChar*)"title"))
+ {
+ key = xmlNodeGetContent (cur);
+ katze_item_set_name (KATZE_ITEM (array), g_strstrip ((gchar*)key));
+ }
+ else if (!xmlStrcmp (cur->name, (const xmlChar*)"desc"))
+ {
+ key = xmlNodeGetContent (cur);
+ katze_item_set_text (KATZE_ITEM (array), g_strstrip ((gchar*)key));
+ }
+ else if (!xmlStrcmp (cur->name, (const xmlChar*)"folder"))
+ {
+ item = (KatzeItem*)katze_array_from_xmlNodePtr (cur);
+ katze_array_add_item (array, item);
+ }
+ else if (!xmlStrcmp (cur->name, (const xmlChar*)"bookmark"))
+ {
+ item = katze_item_from_xmlNodePtr (cur);
+ katze_array_add_item (array, item);
+ }
+ else if (!xmlStrcmp (cur->name, (const xmlChar*)"separator"))
+ {
+ item = katze_item_new ();
+ katze_array_add_item (array, item);
+ }
+ cur = cur->next;
+ }
+ return array;
+}
+
+/* Loads the contents from an xmlNodePtr into an array. */
+static gboolean
+katze_array_from_xmlDocPtr (KatzeArray* array,
+ xmlDocPtr doc)
+{
+ xmlNodePtr cur;
+ xmlChar* version;
+ gchar* value;
+ KatzeItem* item;
+
+ cur = xmlDocGetRootElement (doc);
+ version = xmlGetProp (cur, (xmlChar*)"version");
+ if (xmlStrcmp (version, (xmlChar*)"1.0"))
+ g_warning ("XBEL version is not 1.0.");
+ xmlFree (version);
+
+ value = (gchar*)xmlGetProp (cur, (xmlChar*)"title");
+ katze_item_set_name (KATZE_ITEM (array), value);
+ g_free (value);
+
+ value = (gchar*)xmlGetProp (cur, (xmlChar*)"desc");
+ katze_item_set_text (KATZE_ITEM (array), value);
+ g_free (value);
+
+ if ((cur = xmlDocGetRootElement (doc)) == NULL)
+ {
+ /* Empty document */
+ return FALSE;
+ }
+ if (xmlStrcmp (cur->name, (const xmlChar*)"xbel"))
+ {
+ /* Wrong document kind */
+ return FALSE;
+ }
+ cur = cur->xmlChildrenNode;
+ while (cur)
+ {
+ item = NULL;
+ if (!xmlStrcmp (cur->name, (const xmlChar*)"folder"))
+ item = (KatzeItem*)katze_array_from_xmlNodePtr (cur);
+ else if (!xmlStrcmp (cur->name, (const xmlChar*)"bookmark"))
+ item = katze_item_from_xmlNodePtr (cur);
+ else if (!xmlStrcmp (cur->name, (const xmlChar*)"separator"))
+ item = katze_item_new ();
+ /*else if (!xmlStrcmp (cur->name, (const xmlChar*)"info"))
+ item = katze_xbel_parse_info (xbel, cur);*/
+ if (item)
+ katze_array_add_item (array, item);
+ cur = cur->next;
+ }
+ return TRUE;
+}
+
+#if 0
+static gboolean
+katze_array_from_data (KatzeArray* array,
+ const gchar* data,
+ GError** error)
+{
+ xmlDocPtr doc;
+
+ g_return_val_if_fail (katze_array_is_a (array, KATZE_TYPE_ITEM), FALSE);
+ g_return_val_if_fail (data != NULL, FALSE);
+
+ katze_array_clear (array);
+
+ if((doc = xmlParseMemory (data, strlen (data))) == NULL)
+ {
+ /* No valid xml or broken encoding */
+ *error = g_error_new_literal (G_FILE_ERROR, G_FILE_ERROR_FAILED,
+ _("Malformed document."));
+ return FALSE;
+ }
+ if (!katze_array_from_xmlDocPtr (array, doc))
+ {
+ /* Parsing failed */
+ xmlFreeDoc (doc);
+ *error = g_error_new_literal (G_FILE_ERROR, G_FILE_ERROR_FAILED,
+ _("Malformed document."));
+ return FALSE;
+ }
+ xmlFreeDoc (doc);
+ return TRUE;
+}
+#endif
+
+static gboolean
+katze_array_from_file (KatzeArray* array,
+ const gchar* filename,
+ GError** error)
+{
+ xmlDocPtr doc;
+
+ g_return_val_if_fail (katze_array_is_a (array, KATZE_TYPE_ITEM), FALSE);
+ g_return_val_if_fail (filename != NULL, FALSE);
+
+ if (!g_file_test (filename, G_FILE_TEST_EXISTS))
+ {
+ /* File doesn't exist */
+ *error = g_error_new_literal (G_FILE_ERROR, G_FILE_ERROR_NOENT,
+ _("File not found."));
+ return FALSE;
+ }
+
+ if ((doc = xmlParseFile (filename)) == NULL)
+ {
+ /* No valid xml or broken encoding */
+ *error = g_error_new_literal (G_FILE_ERROR, G_FILE_ERROR_FAILED,
+ _("Malformed document."));
+ return FALSE;
+ }
+
+ if (!katze_array_from_xmlDocPtr (array, doc))
+ {
+ /* Parsing failed */
+ xmlFreeDoc (doc);
+ *error = g_error_new_literal (G_FILE_ERROR, G_FILE_ERROR_FAILED,
+ _("Malformed document."));
+ return FALSE;
+ }
+ xmlFreeDoc (doc);
+ return TRUE;
+}
+
static gchar*
_simple_xml_element (const gchar* name,
const gchar* value)
static void
midori_browser_weak_notify_cb (MidoriBrowser* browser,
- KatzeXbelItem* session)
+ KatzeArray* session)
{
g_object_disconnect (browser, "any-signal",
G_CALLBACK (midori_browser_session_cb), session, NULL);
MidoriStartup load_on_startup;
gchar* homepage;
KatzeArray* search_engines;
- KatzeXbelItem* bookmarks;
- guint i;
+ KatzeArray* bookmarks;
+ KatzeArray* _session;
+ KatzeArray* trash;
+ MidoriBrowser* browser;
+ KatzeArray* session;
+ guint n, i;
gchar* uri;
- KatzeXbelItem* item;
+ KatzeItem* item;
gchar* uri_ready;
#if ENABLE_NLS
}
katze_assign (config_file, g_build_filename (config_path, "bookmarks.xbel",
NULL));
- bookmarks = katze_xbel_folder_new ();
+ bookmarks = katze_array_new (KATZE_TYPE_ARRAY);
error = NULL;
- if (!katze_xbel_folder_from_file (bookmarks, config_file, &error))
+ if (!katze_array_from_file (bookmarks, config_file, &error))
{
if (error->code != G_FILE_ERROR_NOENT)
g_string_append_printf (error_messages,
g_error_free (error);
}
g_free (config_file);
- KatzeXbelItem* _session = katze_xbel_folder_new ();
+ _session = katze_array_new (KATZE_TYPE_ITEM);
g_object_get (settings, "load-on-startup", &load_on_startup, NULL);
if (load_on_startup == MIDORI_STARTUP_LAST_OPEN_PAGES)
{
config_file = g_build_filename (config_path, "session.xbel", NULL);
error = NULL;
- if (!katze_xbel_folder_from_file (_session, config_file, &error))
+ if (!katze_array_from_file (_session, config_file, &error))
{
if (error->code != G_FILE_ERROR_NOENT)
g_string_append_printf (error_messages,
g_free (config_file);
}
config_file = g_build_filename (config_path, "tabtrash.xbel", NULL);
- KatzeXbelItem* xbel_trash = katze_xbel_folder_new ();
+ trash = katze_array_new (KATZE_TYPE_ITEM);
error = NULL;
- if (!katze_xbel_folder_from_file (xbel_trash, config_file, &error))
+ if (!katze_array_from_file (trash, config_file, &error))
{
if (error->code != G_FILE_ERROR_NOENT)
g_string_append_printf (error_messages,
{
g_object_unref (settings);
g_object_unref (search_engines);
- katze_xbel_item_unref (bookmarks);
- katze_xbel_item_unref (_session);
- katze_xbel_item_unref (xbel_trash);
+ g_object_unref (bookmarks);
+ g_object_unref (_session);
+ g_object_unref (trash);
g_string_free (error_messages, TRUE);
return 0;
}
uri = strtok (g_strdup (uris[i]), "|");
while (uri != NULL)
{
- item = katze_xbel_bookmark_new ();
+ item = katze_item_new ();
uri_ready = sokoke_magic_uri (uri, NULL);
- katze_xbel_bookmark_set_href (item, uri_ready);
+ katze_item_set_uri (item, uri_ready);
g_free (uri_ready);
- katze_xbel_folder_append_item (_session, item);
+ katze_array_add_item (_session, item);
uri = strtok (NULL, "|");
}
g_free (uri);
i++;
}
- if (katze_xbel_folder_is_empty (_session))
+ if (katze_array_is_empty (_session))
{
- KatzeXbelItem* item = katze_xbel_bookmark_new ();
+ item = katze_item_new ();
if (load_on_startup == MIDORI_STARTUP_BLANK_PAGE)
- katze_xbel_bookmark_set_href (item, "");
+ katze_item_set_uri (item, "");
else
{
g_object_get (settings, "homepage", &homepage, NULL);
- katze_xbel_bookmark_set_href (item, homepage);
+ katze_item_set_uri (item, homepage);
g_free (homepage);
}
- katze_xbel_folder_prepend_item (_session, item);
+ katze_array_add_item (_session, item);
}
g_free (config_path);
- KatzeArray* trash = katze_array_new (KATZE_TYPE_ITEM);
- guint n = katze_xbel_folder_get_n_items (xbel_trash);
- for (i = 0; i < n; i++)
- {
- KatzeXbelItem* xbel_item = katze_xbel_folder_get_nth_item (xbel_trash, i);
- if (!katze_xbel_item_is_separator (xbel_item))
- {
- KatzeItem* item = g_object_new (KATZE_TYPE_ITEM,
- "name", katze_xbel_item_get_title (xbel_item),
- "uri", katze_xbel_bookmark_get_href (xbel_item),
- NULL);
- katze_array_add_item (trash, item);
- }
- }
- katze_xbel_item_unref (xbel_trash);
g_signal_connect_after (trash, "add-item",
G_CALLBACK (midori_web_list_add_item_cb), NULL);
"search-engines", search_engines,
NULL);
- MidoriBrowser* browser = g_object_new (MIDORI_TYPE_BROWSER,
- "settings", settings,
- "bookmarks", bookmarks,
- "trash", trash,
- "search-engines", search_engines,
- NULL);
+ browser = g_object_new (MIDORI_TYPE_BROWSER,
+ "settings", settings,
+ "bookmarks", bookmarks,
+ "trash", trash,
+ "search-engines", search_engines,
+ NULL);
midori_app_add_browser (app, browser);
gtk_widget_show (GTK_WIDGET (browser));
- KatzeArray* session = midori_browser_get_proxy_array (browser);
- n = katze_xbel_folder_get_n_items (_session);
+ session = midori_browser_get_proxy_array (browser);
+ n = katze_array_get_length (_session);
for (i = 0; i < n; i++)
{
- KatzeXbelItem* item = katze_xbel_folder_get_nth_item (_session, i);
- midori_browser_add_xbel_item (browser, item);
+ item = katze_array_get_nth_item (_session, i);
+ midori_browser_add_item (browser, item);
}
/* FIXME: Switch to the last active page */
- item = katze_xbel_folder_get_nth_item (_session, 0);
- if (!strcmp (katze_xbel_bookmark_get_href (item), ""))
+ item = katze_array_get_nth_item (_session, 0);
+ if (!strcmp (katze_item_get_uri (item), ""))
midori_browser_activate_action (browser, "Location");
- katze_xbel_item_unref (_session);
+ g_object_unref (_session);
g_signal_connect_after (browser, "notify::uri",
G_CALLBACK (midori_browser_session_cb), session);
g_free (config_file);
config_file = g_build_filename (config_path, "bookmarks.xbel", NULL);
error = NULL;
- if (!katze_xbel_folder_to_file (bookmarks, config_file, &error))
+ if (!katze_array_to_file (bookmarks, config_file, &error))
{
g_warning (_("The bookmarks couldn't be saved. %s"), error->message);
g_error_free (error);
}
- katze_xbel_item_unref (bookmarks);
+ g_object_unref (bookmarks);
g_free (config_file);
config_file = g_build_filename (config_path, "tabtrash.xbel", NULL);
error = NULL;
GtkAccelGroup* accel_group;
MidoriWebSettings* settings;
- KatzeXbelItem* bookmarks;
+ KatzeArray* bookmarks;
KatzeArray* trash;
KatzeArray* search_engines;
"bookmarks",
_("Bookmarks"),
_("The bookmarks folder, containing all bookmarks"),
- KATZE_TYPE_XBEL_ITEM,
+ KATZE_TYPE_ARRAY,
G_PARAM_READWRITE));
g_object_class_install_property (gobject_class,
gchar* statusbar_text;
MidoriWebSettings* settings;
- KatzeXbelItem* bookmarks;
+ KatzeArray* bookmarks;
KatzeArray* proxy_array;
KatzeArray* trash;
static void
midori_browser_edit_bookmark_dialog_new (MidoriBrowser* browser,
- KatzeXbelItem* bookmark)
+ KatzeItem* bookmark)
{
- gboolean new_bookmark = !bookmark;
- GtkWidget* dialog = gtk_dialog_new_with_buttons (
+ gboolean new_bookmark;
+ GtkWidget* dialog;
+ GtkSizeGroup* sizegroup;
+ GtkWidget* view;
+ GtkWidget* hbox;
+ GtkWidget* label;
+ const gchar* value;
+ GtkWidget* entry_title;
+ GtkWidget* entry_desc;
+ GtkWidget* entry_uri;
+ GtkWidget* combo_folder;
+ GtkTreeView* treeview;
+ GtkTreeModel* treemodel;
+ GtkTreeIter iter;
+
+ new_bookmark = bookmark == NULL;
+ dialog = gtk_dialog_new_with_buttons (
new_bookmark ? _("New bookmark") : _("Edit bookmark"),
GTK_WINDOW (browser),
GTK_DIALOG_DESTROY_WITH_PARENT | GTK_DIALOG_NO_SEPARATOR,
new_bookmark ? GTK_STOCK_ADD : GTK_STOCK_REMOVE);
gtk_container_set_border_width (GTK_CONTAINER (dialog), 5);
gtk_container_set_border_width (GTK_CONTAINER (GTK_DIALOG (dialog)->vbox), 5);
- GtkSizeGroup* sizegroup = gtk_size_group_new (GTK_SIZE_GROUP_HORIZONTAL);
+ sizegroup = gtk_size_group_new (GTK_SIZE_GROUP_HORIZONTAL);
if (new_bookmark)
{
- GtkWidget* view = midori_browser_get_current_tab (browser);
- bookmark = katze_xbel_bookmark_new ();
- katze_xbel_item_set_title (bookmark,
- midori_view_get_display_title (MIDORI_VIEW (view)));
- katze_xbel_bookmark_set_href (bookmark,
- midori_view_get_display_uri (MIDORI_VIEW (view)));
+ view = midori_browser_get_current_tab (browser);
+ bookmark = g_object_new (KATZE_TYPE_ITEM,
+ "uri", midori_view_get_display_uri (MIDORI_VIEW (view)),
+ "name", midori_view_get_display_title (MIDORI_VIEW (view)), NULL);
}
- GtkWidget* hbox = gtk_hbox_new (FALSE, 8);
+ hbox = gtk_hbox_new (FALSE, 8);
gtk_container_set_border_width (GTK_CONTAINER (hbox), 5);
- GtkWidget* label = gtk_label_new_with_mnemonic (_("_Title:"));
+ label = gtk_label_new_with_mnemonic (_("_Title:"));
gtk_size_group_add_widget (sizegroup, label);
gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 0);
- GtkWidget* entry_title = gtk_entry_new ();
+ entry_title = gtk_entry_new ();
gtk_entry_set_activates_default (GTK_ENTRY (entry_title), TRUE);
- const gchar* title = katze_xbel_item_get_title (bookmark);
- gtk_entry_set_text (GTK_ENTRY (entry_title), title ? title : "");
+ value = katze_item_get_name (bookmark);
+ gtk_entry_set_text (GTK_ENTRY (entry_title), value ? value : "");
gtk_box_pack_start (GTK_BOX (hbox), entry_title, TRUE, TRUE, 0);
gtk_container_add (GTK_CONTAINER (GTK_DIALOG (dialog)->vbox), hbox);
gtk_widget_show_all (hbox);
label = gtk_label_new_with_mnemonic (_("_Description:"));
gtk_size_group_add_widget (sizegroup, label);
gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 0);
- GtkWidget* entry_desc = gtk_entry_new ();
+ entry_desc = gtk_entry_new ();
gtk_entry_set_activates_default (GTK_ENTRY (entry_desc), TRUE);
if (!new_bookmark)
{
- const gchar* desc = katze_xbel_item_get_desc (bookmark);
- gtk_entry_set_text (GTK_ENTRY (entry_desc), desc ? desc : "");
+ value = katze_item_get_text (bookmark);
+ gtk_entry_set_text (GTK_ENTRY (entry_desc), value ? value : "");
}
gtk_box_pack_start (GTK_BOX (hbox), entry_desc, TRUE, TRUE, 0);
gtk_container_add (GTK_CONTAINER (GTK_DIALOG (dialog)->vbox), hbox);
gtk_widget_show_all (hbox);
- GtkWidget* entry_uri = NULL;
- if (katze_xbel_item_is_bookmark (bookmark))
+ entry_uri = NULL;
+ if (!KATZE_IS_ARRAY (bookmark))
{
hbox = gtk_hbox_new (FALSE, 8);
gtk_container_set_border_width (GTK_CONTAINER (hbox), 5);
gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 0);
entry_uri = gtk_entry_new ();
gtk_entry_set_activates_default (GTK_ENTRY (entry_uri), TRUE);
- gtk_entry_set_text (GTK_ENTRY (entry_uri),
- katze_xbel_bookmark_get_href (bookmark));
+ gtk_entry_set_text (GTK_ENTRY (entry_uri), katze_item_get_uri (bookmark));
gtk_box_pack_start (GTK_BOX (hbox), entry_uri, TRUE, TRUE, 0);
gtk_container_add (GTK_CONTAINER (GTK_DIALOG (dialog)->vbox), hbox);
gtk_widget_show_all (hbox);
}
- GtkWidget* combo_folder = NULL;
+ combo_folder = NULL;
if (new_bookmark)
{
hbox = gtk_hbox_new (FALSE, 8);
gtk_dialog_set_default_response (GTK_DIALOG (dialog), GTK_RESPONSE_ACCEPT);
if (gtk_dialog_run (GTK_DIALOG (dialog)) == GTK_RESPONSE_ACCEPT)
{
- katze_xbel_item_set_title (bookmark,
+ katze_item_set_name (bookmark,
gtk_entry_get_text (GTK_ENTRY (entry_title)));
- katze_xbel_item_set_desc (bookmark,
+ katze_item_set_text (bookmark,
gtk_entry_get_text (GTK_ENTRY (entry_desc)));
- if (katze_xbel_item_is_bookmark (bookmark))
- katze_xbel_bookmark_set_href (bookmark,
+ if (!KATZE_IS_ARRAY (bookmark))
+ katze_item_set_uri (bookmark,
gtk_entry_get_text (GTK_ENTRY (entry_uri)));
/* FIXME: We want to choose a folder */
if (new_bookmark)
{
- katze_xbel_folder_append_item (browser->bookmarks, bookmark);
- GtkTreeView* treeview = GTK_TREE_VIEW (browser->panel_bookmarks);
- GtkTreeModel* treemodel = gtk_tree_view_get_model (treeview);
- GtkTreeIter iter;
+ katze_array_add_item (browser->bookmarks, bookmark);
+ treeview = GTK_TREE_VIEW (browser->panel_bookmarks);
+ treemodel = gtk_tree_view_get_model (treeview);
gtk_tree_store_insert_with_values (GTK_TREE_STORE (treemodel),
&iter, NULL, G_MAXINT, 0, bookmark, -1);
- katze_xbel_item_ref (bookmark);
+ g_object_ref (bookmark);
}
- /* FIXME: update navigationbar */
+ /* FIXME: Update navigationbar */
/* FIXME: Update panel in other windows */
}
gtk_widget_destroy (dialog);
const gchar* uri,
GtkWidget* view)
{
- KatzeXbelItem* xbel_item;
+ KatzeItem* item;
MidoriBrowser* browser;
- xbel_item = katze_xbel_bookmark_new ();
- katze_xbel_bookmark_set_href (xbel_item, uri);
+ item = katze_item_new ();
+ katze_item_set_uri (item, uri);
browser = (MidoriBrowser*)gtk_widget_get_toplevel (menuitem);
- midori_browser_edit_bookmark_dialog_new (browser, xbel_item);
+ midori_browser_edit_bookmark_dialog_new (browser, item);
}
static gboolean
"bookmarks",
_("Bookmarks"),
_("The bookmarks folder, containing all bookmarks"),
- KATZE_TYPE_XBEL_ITEM,
+ KATZE_TYPE_ARRAY,
G_PARAM_READWRITE));
/**
{
gboolean show_navigationbar;
gboolean show_web_search;
+
g_object_get (browser->settings,
"show-navigationbar", &show_navigationbar,
"show-web-search", &show_web_search,
GtkTreeViewColumn* column,
MidoriBrowser* browser)
{
- GtkTreeModel* model = gtk_tree_view_get_model (treeview);
+ GtkTreeModel* model;
GtkTreeIter iter;
+ KatzeItem* item;
+ const gchar* uri;
+
+ model = gtk_tree_view_get_model (treeview);
+
if (gtk_tree_model_get_iter (model, &iter, path))
{
- KatzeXbelItem* item;
gtk_tree_model_get (model, &iter, 0, &item, -1);
- if (katze_xbel_item_is_bookmark (item))
- {
- const gchar* uri = katze_xbel_bookmark_get_href (item);
+ uri = katze_item_get_uri (item);
+ if (uri && *uri)
_midori_browser_open_uri (browser, uri);
- }
}
}
{
GtkTreeModel* model;
GtkTreeIter iter;
- KatzeXbelItem* item;
+ KatzeItem* item;
gboolean is_separator;
if (sokoke_tree_view_get_selected_iter (tree_view, &model, &iter))
{
gtk_tree_model_get (model, &iter, 0, &item, -1);
- is_separator = katze_xbel_item_is_separator (item);
+ is_separator = !KATZE_IS_ARRAY (item) && !katze_item_get_uri (item);
_action_set_sensitive (browser, "BookmarkEdit", !is_separator);
_action_set_sensitive (browser, "BookmarkDelete", TRUE);
}
static void
_midori_panel_bookmarks_popup (GtkWidget* widget,
GdkEventButton* event,
- KatzeXbelItem* item,
+ KatzeItem* item,
MidoriBrowser* browser)
{
- gboolean is_bookmark = katze_xbel_item_is_bookmark (item);
+ const gchar* uri;
+
+ uri = katze_item_get_uri (item);
- _action_set_sensitive (browser, "BookmarkOpen", is_bookmark);
- _action_set_sensitive (browser, "BookmarkOpenTab", is_bookmark);
- _action_set_sensitive (browser, "BookmarkOpenWindow", is_bookmark);
+ _action_set_sensitive (browser, "BookmarkOpen", uri != NULL);
+ _action_set_sensitive (browser, "BookmarkOpenTab", uri != NULL);
+ _action_set_sensitive (browser, "BookmarkOpenWindow", uri != NULL);
sokoke_widget_popup (widget, GTK_MENU (browser->popup_bookmark),
event, SOKOKE_MENU_POSITION_CURSOR);
{
GtkTreeModel* model;
GtkTreeIter iter;
- KatzeXbelItem* item;
+ KatzeItem* item;
+ const gchar* uri;
+ gint n;
if (event->button != 2 && event->button != 3)
return FALSE;
if (sokoke_tree_view_get_selected_iter (GTK_TREE_VIEW (widget), &model, &iter))
{
gtk_tree_model_get (model, &iter, 0, &item, -1);
- if (event->button == 2 && katze_xbel_item_is_bookmark (item))
+ uri = katze_item_get_uri (item);
+ if (event->button == 2)
{
- const gchar* uri = katze_xbel_bookmark_get_href (item);
- gint n = midori_browser_add_uri (browser, uri);
- midori_browser_set_current_page (browser, n);
+ if (uri && *uri)
+ {
+ n = midori_browser_add_uri (browser, uri);
+ midori_browser_set_current_page (browser, n);
+ }
}
else
_midori_panel_bookmarks_popup (widget, event, item, browser);
{
GtkTreeModel* model;
GtkTreeIter iter;
- KatzeXbelItem* item;
+ KatzeItem* item;
if (sokoke_tree_view_get_selected_iter (GTK_TREE_VIEW (widget), &model, &iter))
{
}
static void
-_tree_store_insert_folder (GtkTreeStore* treestore,
- GtkTreeIter* parent,
- KatzeXbelItem* folder)
+_tree_store_insert_folder (GtkTreeStore* treestore,
+ GtkTreeIter* parent,
+ KatzeArray* array)
{
- guint n = katze_xbel_folder_get_n_items (folder);
- guint i;
+ guint n, i;
+ KatzeItem* item;
+ GtkTreeIter iter;
+
+ n = katze_array_get_length (array);
for (i = 0; i < n; i++)
{
- KatzeXbelItem* item = katze_xbel_folder_get_nth_item (folder, i);
- GtkTreeIter iter;
+ item = katze_array_get_nth_item (array, i);
gtk_tree_store_insert_with_values (treestore, &iter, parent, n,
0, item, -1);
- katze_xbel_item_ref (item);
- if (katze_xbel_item_is_folder (item))
- _tree_store_insert_folder (treestore, &iter, item);
+ g_object_ref (item);
+ if (KATZE_IS_ARRAY (item))
+ _tree_store_insert_folder (treestore, &iter, KATZE_ARRAY (item));
}
}
GtkTreeIter* iter,
GtkWidget* treeview)
{
- KatzeXbelItem* item;
+ KatzeItem* item;
+ GdkPixbuf* pixbuf;
gtk_tree_model_get (model, iter, 0, &item, -1);
if (G_UNLIKELY (!item))
return;
- if (G_UNLIKELY (!katze_xbel_item_get_parent (item)))
+ if (G_UNLIKELY (!katze_item_get_parent (item)))
{
gtk_tree_store_remove (GTK_TREE_STORE (model), iter);
- katze_xbel_item_unref (item);
+ g_object_unref (item);
return;
}
/* TODO: Would it be better to not do this on every redraw? */
- GdkPixbuf* pixbuf = NULL;
- if (katze_xbel_item_is_bookmark (item))
- pixbuf = gtk_widget_render_icon (treeview, STOCK_BOOKMARK,
- GTK_ICON_SIZE_MENU, NULL);
- else if (katze_xbel_item_is_folder (item))
+ pixbuf = NULL;
+ if (KATZE_IS_ARRAY (item))
pixbuf = gtk_widget_render_icon (treeview, GTK_STOCK_DIRECTORY,
GTK_ICON_SIZE_MENU, NULL);
+ else if (katze_item_get_uri (item))
+ pixbuf = gtk_widget_render_icon (treeview, STOCK_BOOKMARK,
+ GTK_ICON_SIZE_MENU, NULL);
g_object_set (renderer, "pixbuf", pixbuf, NULL);
if (pixbuf)
g_object_unref (pixbuf);
GtkTreeIter* iter,
GtkWidget* treeview)
{
- KatzeXbelItem* item;
+ KatzeItem* item;
gtk_tree_model_get (model, iter, 0, &item, -1);
if (G_UNLIKELY (!item))
return;
- if (G_UNLIKELY (!katze_xbel_item_get_parent (item)))
+ if (G_UNLIKELY (!katze_item_get_parent (item)))
{
gtk_tree_store_remove (GTK_TREE_STORE (model), iter);
- katze_xbel_item_unref (item);
+ g_object_unref (item);
return;
}
- if (katze_xbel_item_is_separator (item))
- g_object_set (renderer, "markup", _("<i>Separator</i>"), NULL);
- else
+ if (KATZE_IS_ARRAY (item) || katze_item_get_uri (item))
g_object_set (renderer, "markup", NULL,
- "text", katze_xbel_item_get_title (item), NULL);
+ "text", katze_item_get_name (item), NULL);
+ else
+ g_object_set (renderer, "markup", _("<i>Separator</i>"), NULL);
}
static void
_midori_browser_create_bookmark_menu (MidoriBrowser* browser,
- KatzeXbelItem* folder,
+ KatzeArray* array,
GtkWidget* menu);
static void
midori_browser_bookmark_menu_folder_activate_cb (GtkWidget* menuitem,
MidoriBrowser* browser)
{
- GtkWidget* menu = gtk_menu_item_get_submenu (GTK_MENU_ITEM (menuitem));
+ GtkWidget* menu;
+ KatzeArray* array;
+
+ menu = gtk_menu_item_get_submenu (GTK_MENU_ITEM (menuitem));
gtk_container_foreach (GTK_CONTAINER (menu), (GtkCallback) gtk_widget_destroy, NULL);
- KatzeXbelItem* folder = (KatzeXbelItem*)g_object_get_data(G_OBJECT (menuitem), "KatzeXbelItem");
- _midori_browser_create_bookmark_menu (browser, folder, menu);
+ array = (KatzeArray*)g_object_get_data (G_OBJECT (menuitem), "KatzeArray");
+ _midori_browser_create_bookmark_menu (browser, array, menu);
/* Remove all menuitems when the menu is hidden.
FIXME: We really *want* the line below, but it won't work like that
g_signal_connect_after (menu, "hide", G_CALLBACK (gtk_container_foreach), gtk_widget_destroy); */
midori_browser_bookmarkbar_folder_activate_cb (GtkToolItem* toolitem,
MidoriBrowser* browser)
{
- GtkWidget* menu = gtk_menu_new ();
- KatzeXbelItem* folder = (KatzeXbelItem*)g_object_get_data (
- G_OBJECT (toolitem), "KatzeXbelItem");
- _midori_browser_create_bookmark_menu (browser, folder, menu);
+ GtkWidget* menu;
+ KatzeArray* array;
+
+ menu = gtk_menu_new ();
+ array = (KatzeArray*)g_object_get_data (G_OBJECT (toolitem), "KatzeArray");
+ _midori_browser_create_bookmark_menu (browser, array, menu);
/* Remove all menuitems when the menu is hidden.
FIXME: We really *should* run the line below, but it won't work like that
g_signal_connect (menu, "hide", G_CALLBACK (gtk_container_foreach),
midori_browser_menu_bookmarks_item_activate_cb (GtkWidget* widget,
MidoriBrowser* browser)
{
- KatzeXbelItem* item = (KatzeXbelItem*)g_object_get_data (G_OBJECT (widget),
- "KatzeXbelItem");
- _midori_browser_open_uri (browser, katze_xbel_bookmark_get_href (item));
+ KatzeItem* item;
+
+ item = (KatzeItem*)g_object_get_data (G_OBJECT (widget), "KatzeItem");
+ _midori_browser_open_uri (browser, katze_item_get_uri (item));
gtk_widget_grab_focus (midori_browser_get_current_tab (browser));
}
static void
_midori_browser_create_bookmark_menu (MidoriBrowser* browser,
- KatzeXbelItem* folder,
+ KatzeArray* array,
GtkWidget* menu)
{
guint i, n;
- KatzeXbelItem* item;
+ KatzeItem* item;
const gchar* title;
GtkWidget* menuitem;
GtkWidget* submenu;
GtkWidget* icon;
- n = katze_xbel_folder_get_n_items (folder);
+ n = katze_array_get_length (array);
for (i = 0; i < n; i++)
{
- item = katze_xbel_folder_get_nth_item (folder, i);
- title = katze_xbel_item_is_separator (item)
- ? "" : katze_xbel_item_get_title (item);
+ item = katze_array_get_nth_item (array, i);
+ title = katze_item_get_name (item);
- switch (katze_xbel_item_get_kind (item))
+ if (KATZE_IS_ARRAY (item))
{
- case KATZE_XBEL_ITEM_KIND_FOLDER:
- /* FIXME: what about katze_xbel_folder_is_folded? */
+ /* FIXME: what about the "folded" status */
menuitem = sokoke_image_menu_item_new_ellipsized (title);
gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (menuitem),
gtk_image_new_from_stock (GTK_STOCK_DIRECTORY,
g_signal_connect (menuitem, "activate",
G_CALLBACK (midori_browser_bookmark_menu_folder_activate_cb),
browser);
- g_object_set_data (G_OBJECT (menuitem), "KatzeXbelItem", item);
- break;
- case KATZE_XBEL_ITEM_KIND_BOOKMARK:
+ g_object_set_data (G_OBJECT (menuitem), "KatzeArray", item);
+ }
+ else if (katze_item_get_uri (item))
+ {
menuitem = sokoke_image_menu_item_new_ellipsized (title);
icon = gtk_image_new_from_stock (STOCK_BOOKMARK, GTK_ICON_SIZE_MENU);
gtk_widget_show (icon);
g_signal_connect (menuitem, "activate",
G_CALLBACK (midori_browser_menu_bookmarks_item_activate_cb),
browser);
- g_object_set_data (G_OBJECT (menuitem), "KatzeXbelItem", item);
- break;
- case KATZE_XBEL_ITEM_KIND_SEPARATOR:
+ g_object_set_data (G_OBJECT (menuitem), "KatzeItem", item);
+ }
+ else
menuitem = gtk_separator_menu_item_new ();
- break;
- default:
- menuitem = NULL;
- g_warning ("Unknown XBEL item kind");
- }
gtk_menu_shell_append (GTK_MENU_SHELL (menu), menuitem);
gtk_widget_show (menuitem);
}
GtkTreeView* tree_view;
GtkTreeModel* model;
GtkTreeIter iter;
- KatzeXbelItem* item;
+ KatzeItem* item;
+ const gchar* uri;
tree_view = GTK_TREE_VIEW (browser->panel_bookmarks);
if (sokoke_tree_view_get_selected_iter (tree_view, &model, &iter))
{
gtk_tree_model_get (model, &iter, 0, &item, -1);
- if (katze_xbel_item_is_bookmark (item))
- _midori_browser_open_uri (browser,
- katze_xbel_bookmark_get_href (item));
+ uri = katze_item_get_uri (item);
+ if (uri && *uri)
+ _midori_browser_open_uri (browser, uri);
}
}
GtkTreeView* tree_view;
GtkTreeModel* model;
GtkTreeIter iter;
- KatzeXbelItem* item;
+ KatzeItem* item;
+ const gchar* uri;
gint n;
tree_view = GTK_TREE_VIEW (browser->panel_bookmarks);
if (sokoke_tree_view_get_selected_iter (tree_view, &model, &iter))
{
gtk_tree_model_get (model, &iter, 0, &item, -1);
- if (katze_xbel_item_is_bookmark (item))
+ uri = katze_item_get_uri (item);
+ if (uri && *uri)
{
- n = midori_browser_add_xbel_item (browser, item);
+ n = midori_browser_add_item (browser, item);
_midori_browser_set_current_page_smartly (browser, n);
}
}
GtkTreeView* tree_view;
GtkTreeModel* model;
GtkTreeIter iter;
- KatzeXbelItem* item;
+ KatzeItem* item;
+ const gchar* uri;
gint n;
tree_view = GTK_TREE_VIEW (browser->panel_bookmarks);
if (sokoke_tree_view_get_selected_iter (tree_view, &model, &iter))
{
gtk_tree_model_get (model, &iter, 0, &item, -1);
- if (katze_xbel_item_is_bookmark (item))
+ uri = katze_item_get_uri (item);
+ if (uri && *uri)
{
- n = midori_browser_add_xbel_item (browser, item);
+ n = midori_browser_add_item (browser, item);
_midori_browser_set_current_page_smartly (browser, n);
}
}
GtkTreeView* tree_view;
GtkTreeModel* model;
GtkTreeIter iter;
- KatzeXbelItem* item;
+ KatzeItem* item;
tree_view = GTK_TREE_VIEW (browser->panel_bookmarks);
if (sokoke_tree_view_get_selected_iter (tree_view, &model, &iter))
{
gtk_tree_model_get (model, &iter, 0, &item, -1);
- if (!katze_xbel_item_is_separator (item))
+ /* if (katze_item_get_uri (item)) */
midori_browser_edit_bookmark_dialog_new (browser, item);
}
}
GtkTreeView* tree_view;
GtkTreeModel* model;
GtkTreeIter iter;
- KatzeXbelItem* item;
- KatzeXbelItem* parent;
+ KatzeItem* item;
+ KatzeArray* parent;
tree_view = GTK_TREE_VIEW (browser->panel_bookmarks);
if (sokoke_tree_view_get_selected_iter (tree_view, &model, &iter))
{
gtk_tree_model_get (model, &iter, 0, &item, -1);
- parent = katze_xbel_item_get_parent (item);
- katze_xbel_folder_remove_item (parent, item);
- /* This is a preliminary hack, until we fix it properly again */
+ parent = katze_item_get_parent (item);
+ katze_array_remove_item (parent, item);
+ /* FIXME: This is a preliminary hack, until we fix it properly again */
gtk_tree_store_remove (GTK_TREE_STORE (model), &iter);
- katze_xbel_item_unref (item);
+ g_object_unref (item);
}
}
GtkTreeViewColumn* column;
GtkCellRenderer* renderer_text;
GtkCellRenderer* renderer_pixbuf;
- GtkTreeStore* treestore = gtk_tree_store_new (1, KATZE_TYPE_XBEL_ITEM);
+ GtkTreeStore* treestore = gtk_tree_store_new (1, KATZE_TYPE_ITEM);
GtkWidget* treeview = gtk_tree_view_new_with_model (GTK_TREE_MODEL (treestore));
gtk_tree_view_set_headers_visible (GTK_TREE_VIEW (treeview), FALSE);
column = gtk_tree_view_column_new ();
midori_browser_load_bookmarks (MidoriBrowser* browser)
{
guint i, n;
- KatzeXbelItem* item;
+ KatzeItem* item;
const gchar* title;
const gchar* desc;
GtkToolItem* toolitem;
_midori_browser_create_bookmark_menu (browser, browser->bookmarks,
browser->menu_bookmarks);
- n = katze_xbel_folder_get_n_items (browser->bookmarks);
+ n = katze_array_get_length (browser->bookmarks);
for (i = 0; i < n; i++)
{
- item = katze_xbel_folder_get_nth_item (browser->bookmarks, i);
- title = katze_xbel_item_is_separator (item)
- ? "" : katze_xbel_item_get_title (item);
- desc = katze_xbel_item_is_separator (item)
- ? "" : katze_xbel_item_get_desc (item);
- switch (katze_xbel_item_get_kind (item))
+ item = katze_array_get_nth_item (browser->bookmarks, i);
+ title = katze_item_get_name (item);
+ desc = katze_item_get_text (item);
+
+ if (KATZE_IS_ARRAY (item))
{
- case KATZE_XBEL_ITEM_KIND_FOLDER:
toolitem = gtk_tool_button_new_from_stock (GTK_STOCK_DIRECTORY);
gtk_tool_button_set_label (GTK_TOOL_BUTTON (toolitem), title);
gtk_tool_item_set_is_important (toolitem, TRUE);
browser);
if (desc && *desc)
gtk_tool_item_set_tooltip_text (toolitem, desc);
- g_object_set_data (G_OBJECT (toolitem), "KatzeXbelItem", item);
- break;
- case KATZE_XBEL_ITEM_KIND_BOOKMARK:
+ g_object_set_data (G_OBJECT (toolitem), "KatzeArray", item);
+ }
+ else if (katze_item_get_uri (item))
+ {
toolitem = gtk_tool_button_new_from_stock (STOCK_BOOKMARK);
gtk_tool_button_set_label (GTK_TOOL_BUTTON (toolitem), title);
gtk_tool_item_set_is_important (toolitem, TRUE);
browser);
if (desc && *desc)
gtk_tool_item_set_tooltip_text (toolitem, desc);
- g_object_set_data (G_OBJECT (toolitem), "KatzeXbelItem", item);
- break;
- case KATZE_XBEL_ITEM_KIND_SEPARATOR:
- toolitem = gtk_separator_tool_item_new ();
- break;
- default:
- g_warning ("Unknown item kind");
+ g_object_set_data (G_OBJECT (toolitem), "KatzeItem", item);
}
+ else
+ toolitem = gtk_separator_tool_item_new ();
gtk_toolbar_insert (GTK_TOOLBAR (browser->bookmarkbar), toolitem, -1);
}
sokoke_container_show_children (GTK_CONTAINER (browser->bookmarkbar));
g_signal_emit (browser, signals[REMOVE_TAB], 0, view);
}
-/**
- * midori_browser_add_item:
- * @browser: a #MidoriBrowser
- * @xbel_item: an XBEL item
- *
- * Appends a new view as described by @item.
- *
- * Note: Currently this will always be a #MidoriWebView.
- *
- * Return value: the index of the new view, or -1 in case of an error
- **/
-gint
-midori_browser_add_xbel_item (MidoriBrowser* browser,
- KatzeXbelItem* item)
-{
- const gchar* uri;
- const gchar* title;
- GtkWidget* view;
-
- g_return_val_if_fail (katze_xbel_item_is_bookmark (item), -1);
-
- uri = katze_xbel_bookmark_get_href (item);
- title = katze_xbel_item_get_title (item);
- view = g_object_new (MIDORI_TYPE_VIEW,
- "title", title,
- "settings", browser->settings,
- NULL);
- midori_view_set_uri (MIDORI_VIEW (view), uri);
- gtk_widget_show (view);
-
- return midori_browser_add_tab (browser, view);
-}
-
/**
* midori_browser_add_item:
* @browser: a #MidoriBrowser
midori_browser_remove_tab (MidoriBrowser* browser,
GtkWidget* widget);
-gint
-midori_browser_add_xbel_item (MidoriBrowser* browser,
- KatzeXbelItem* xbel_item);
-
gint
midori_browser_add_item (MidoriBrowser* browser,
KatzeItem* item);
midori/midori-browser.c
midori/midori-panel.c
midori/midori-websettings.c
-midori/midori-webview.c
+midori/midori-view.c
+midori/midori-source.c
midori/midori-preferences.c
midori/midori-searchentry.c
midori/sokoke.c
katze/katze-item.c
katze/katze-list.c
katze/katze-array.c
-katze/katze-xbel.c