From fb320cc0b6cd0e94ae16d28ab4af255baff4799c Mon Sep 17 00:00:00 2001 From: Christian Dywan Date: Wed, 1 Oct 2008 04:00:16 +0200 Subject: [PATCH] Finally obsolete KatzeXbelItem --- katze/Makefile.am | 3 +- katze/katze-array.c | 14 +- katze/katze-item.c | 38 ++ katze/katze-item.h | 9 + katze/katze-xbel.c | 906 ---------------------------------------- katze/katze-xbel.h | 166 -------- katze/katze.h | 1 - midori/main.c | 303 +++++++++++--- midori/midori-app.c | 4 +- midori/midori-browser.c | 361 ++++++++-------- midori/midori-browser.h | 4 - po/POTFILES.in | 4 +- 12 files changed, 493 insertions(+), 1320 deletions(-) delete mode 100644 katze/katze-xbel.c delete mode 100644 katze/katze-xbel.h diff --git a/katze/Makefile.am b/katze/Makefile.am index 16115148..8e6caa71 100644 --- a/katze/Makefile.am +++ b/katze/Makefile.am @@ -16,5 +16,4 @@ libkatze_la_SOURCES = \ 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 diff --git a/katze/katze-array.c b/katze/katze-array.c index 6f11f010..c62121e4 100644 --- a/katze/katze-array.c +++ b/katze/katze-array.c @@ -19,7 +19,7 @@ /** * SECTION:katze-array * @short_description: A type aware item container - * @see_also: #KatzeArray + * @see_also: #KatzeList * * #KatzeArray is a type aware container for items. */ @@ -46,7 +46,11 @@ _katze_array_add_item (KatzeList* list, 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); } @@ -56,7 +60,11 @@ _katze_array_remove_item (KatzeList* list, { 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 @@ -149,6 +157,8 @@ katze_array_is_a (KatzeArray* array, * @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, @@ -167,6 +177,8 @@ 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, diff --git a/katze/katze-item.c b/katze/katze-item.c index 1e9262b6..f71d8d05 100644 --- a/katze/katze-item.c +++ b/katze/katze-item.c @@ -374,3 +374,41 @@ katze_item_set_token (KatzeItem* item, 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"); */ +} diff --git a/katze/katze-item.h b/katze/katze-item.h index 8f138592..7a921c97 100644 --- a/katze/katze-item.h +++ b/katze/katze-item.h @@ -41,6 +41,8 @@ struct _KatzeItem gchar* uri; gchar* icon; gchar* token; + + KatzeItem* parent; }; struct _KatzeItemClass @@ -89,6 +91,13 @@ void 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__ */ diff --git a/katze/katze-xbel.c b/katze/katze-xbel.c deleted file mode 100644 index 3d4a3902..00000000 --- a/katze/katze-xbel.c +++ /dev/null @@ -1,906 +0,0 @@ -/* - Copyright (C) 2007-2008 Christian Dywan - - 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 -#include -#include -#include -#include - -#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\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 ("\n%s%s%s\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 ("\n%s%s%s\n", - href, - title, desc, - ""); - g_free (href); - g_free (title); - g_free (desc); - break; - } - case KATZE_XBEL_ITEM_KIND_SEPARATOR: - markup = g_strdup ("\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\n%s%s%s\n", - "\n", - "\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; -} diff --git a/katze/katze-xbel.h b/katze/katze-xbel.h deleted file mode 100644 index 5631b217..00000000 --- a/katze/katze-xbel.h +++ /dev/null @@ -1,166 +0,0 @@ -/* - Copyright (C) 2007-2008 Christian Dywan - - 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 - -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__ */ diff --git a/katze/katze.h b/katze/katze.h index fbe418b3..d38bd99f 100644 --- a/katze/katze.h +++ b/katze/katze.h @@ -17,6 +17,5 @@ #include "katze-item.h" #include "katze-list.h" #include "katze-array.h" -#include "katze-xbel.h" #endif /* __KATZE_H__ */ diff --git a/midori/main.c b/midori/main.c index e4948b59..dfd6f602 100644 --- a/midori/main.c +++ b/midori/main.c @@ -25,6 +25,8 @@ #include #include #include +#include +#include #if ENABLE_NLS #include @@ -352,6 +354,216 @@ midori_web_list_add_item_cb (KatzeArray* trash, } } +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) @@ -510,7 +722,7 @@ midori_browser_session_cb (MidoriBrowser* browser, 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); @@ -543,10 +755,14 @@ main (int argc, 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 @@ -658,9 +874,9 @@ main (int argc, } 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, @@ -668,13 +884,13 @@ main (int argc, 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, @@ -684,9 +900,9 @@ main (int argc, 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, @@ -724,9 +940,9 @@ main (int argc, { 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; } @@ -743,47 +959,32 @@ main (int argc, 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); @@ -793,27 +994,27 @@ main (int argc, "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); @@ -870,12 +1071,12 @@ main (int argc, 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; diff --git a/midori/midori-app.c b/midori/midori-app.c index 38e3d4bf..2767ffb9 100644 --- a/midori/midori-app.c +++ b/midori/midori-app.c @@ -32,7 +32,7 @@ struct _MidoriApp GtkAccelGroup* accel_group; MidoriWebSettings* settings; - KatzeXbelItem* bookmarks; + KatzeArray* bookmarks; KatzeArray* trash; KatzeArray* search_engines; @@ -134,7 +134,7 @@ midori_app_class_init (MidoriAppClass* class) "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, diff --git a/midori/midori-browser.c b/midori/midori-browser.c index a6d52b81..07d5c5d8 100644 --- a/midori/midori-browser.c +++ b/midori/midori-browser.c @@ -72,7 +72,7 @@ struct _MidoriBrowser gchar* statusbar_text; MidoriWebSettings* settings; - KatzeXbelItem* bookmarks; + KatzeArray* bookmarks; KatzeArray* proxy_array; KatzeArray* trash; @@ -458,10 +458,25 @@ midori_view_notify_statusbar_text_cb (MidoriView* view, 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, @@ -472,27 +487,25 @@ midori_browser_edit_bookmark_dialog_new (MidoriBrowser* browser, 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); @@ -502,19 +515,19 @@ midori_browser_edit_bookmark_dialog_new (MidoriBrowser* browser, 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); @@ -523,14 +536,13 @@ midori_browser_edit_bookmark_dialog_new (MidoriBrowser* browser, 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); @@ -549,27 +561,26 @@ midori_browser_edit_bookmark_dialog_new (MidoriBrowser* browser, 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); @@ -580,13 +591,13 @@ midori_view_add_bookmark_cb (GtkWidget* menuitem, 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 @@ -1021,7 +1032,7 @@ midori_browser_class_init (MidoriBrowserClass* class) "bookmarks", _("Bookmarks"), _("The bookmarks folder, containing all bookmarks"), - KATZE_TYPE_XBEL_ITEM, + KATZE_TYPE_ARRAY, G_PARAM_READWRITE)); /** @@ -1726,6 +1737,7 @@ midori_browser_search_focus_out_event_cb (GtkWidget* widget, { gboolean show_navigationbar; gboolean show_web_search; + g_object_get (browser->settings, "show-navigationbar", &show_navigationbar, "show-web-search", &show_web_search, @@ -1743,17 +1755,19 @@ midori_panel_bookmarks_row_activated_cb (GtkTreeView* treeview, 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); - } } } @@ -1763,14 +1777,14 @@ midori_panel_bookmarks_cursor_or_row_changed_cb (GtkTreeView* tree_view, { 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); } @@ -1784,14 +1798,16 @@ midori_panel_bookmarks_cursor_or_row_changed_cb (GtkTreeView* tree_view, 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; - _action_set_sensitive (browser, "BookmarkOpen", is_bookmark); - _action_set_sensitive (browser, "BookmarkOpenTab", is_bookmark); - _action_set_sensitive (browser, "BookmarkOpenWindow", is_bookmark); + uri = katze_item_get_uri (item); + + _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); @@ -1804,7 +1820,9 @@ midori_panel_bookmarks_button_release_event_cb (GtkWidget* widget, { GtkTreeModel* model; GtkTreeIter iter; - KatzeXbelItem* item; + KatzeItem* item; + const gchar* uri; + gint n; if (event->button != 2 && event->button != 3) return FALSE; @@ -1812,11 +1830,14 @@ midori_panel_bookmarks_button_release_event_cb (GtkWidget* widget, 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); @@ -1831,7 +1852,7 @@ midori_panel_bookmarks_popup_menu_cb (GtkWidget* widget, { GtkTreeModel* model; GtkTreeIter iter; - KatzeXbelItem* item; + KatzeItem* item; if (sokoke_tree_view_get_selected_iter (GTK_TREE_VIEW (widget), &model, &iter)) { @@ -1841,21 +1862,23 @@ midori_panel_bookmarks_popup_menu_cb (GtkWidget* widget, } 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)); } } @@ -1866,27 +1889,28 @@ midori_browser_bookmarks_item_render_icon_cb (GtkTreeViewColumn* column, 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); @@ -1899,39 +1923,42 @@ midori_browser_bookmarks_item_render_text_cb (GtkTreeViewColumn* column, 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", _("Separator"), 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", _("Separator"), 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); */ @@ -1942,10 +1969,12 @@ static void 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), @@ -1958,35 +1987,34 @@ static void 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, @@ -1996,9 +2024,10 @@ _midori_browser_create_bookmark_menu (MidoriBrowser* browser, 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); @@ -2006,15 +2035,10 @@ _midori_browser_create_bookmark_menu (MidoriBrowser* browser, 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); } @@ -2187,15 +2211,16 @@ _action_bookmark_open_activate (GtkAction* action, 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); } } @@ -2206,16 +2231,18 @@ _action_bookmark_open_tab_activate (GtkAction* action, 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); } } @@ -2228,16 +2255,18 @@ _action_bookmark_open_window_activate (GtkAction* action, 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); } } @@ -2250,13 +2279,13 @@ _action_bookmark_edit_activate (GtkAction* action, 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); } } @@ -2293,18 +2322,18 @@ _action_bookmark_delete_activate (GtkAction* action, 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); } } @@ -2982,7 +3011,7 @@ midori_browser_init (MidoriBrowser* browser) 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 (); @@ -3364,7 +3393,7 @@ static void midori_browser_load_bookmarks (MidoriBrowser* browser) { guint i, n; - KatzeXbelItem* item; + KatzeItem* item; const gchar* title; const gchar* desc; GtkToolItem* toolitem; @@ -3381,17 +3410,15 @@ midori_browser_load_bookmarks (MidoriBrowser* browser) _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); @@ -3400,9 +3427,10 @@ midori_browser_load_bookmarks (MidoriBrowser* browser) 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); @@ -3411,14 +3439,10 @@ midori_browser_load_bookmarks (MidoriBrowser* browser) 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)); @@ -3600,39 +3624,6 @@ midori_browser_remove_tab (MidoriBrowser* browser, 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 diff --git a/midori/midori-browser.h b/midori/midori-browser.h index 1a79087f..535c2295 100644 --- a/midori/midori-browser.h +++ b/midori/midori-browser.h @@ -81,10 +81,6 @@ void 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); diff --git a/po/POTFILES.in b/po/POTFILES.in index e8ee9570..91045bb6 100644 --- a/po/POTFILES.in +++ b/po/POTFILES.in @@ -8,7 +8,8 @@ midori/midori-console.c 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 @@ -18,4 +19,3 @@ katze/katze-utils.c katze/katze-item.c katze/katze-list.c katze/katze-array.c -katze/katze-xbel.c