diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/bookmarks/ephy-bookmarks-editor.c | 6 | ||||
-rw-r--r-- | src/bookmarks/ephy-bookmarks.c | 134 | ||||
-rw-r--r-- | src/ephy-window.c | 2 | ||||
-rwxr-xr-x | src/toolbar.c | 17 |
4 files changed, 56 insertions, 103 deletions
diff --git a/src/bookmarks/ephy-bookmarks-editor.c b/src/bookmarks/ephy-bookmarks-editor.c index 3f106fa4b..c7e5c8932 100644 --- a/src/bookmarks/ephy-bookmarks-editor.c +++ b/src/bookmarks/ephy-bookmarks-editor.c @@ -207,7 +207,7 @@ ephy_bookmarks_editor_node_selected_cb (GtkWidget *view, gtk_entry_set_text (GTK_ENTRY (editor->priv->keywords_entry), keywords ? g_strdup (keywords) : ""); gtk_entry_set_text (GTK_ENTRY (editor->priv->location_entry), - location ? g_strdup (location) : ""); + location ? g_strdup (location) : ""); gtk_widget_set_sensitive (GTK_WIDGET (editor->priv->title_entry), TRUE); gtk_widget_set_sensitive (GTK_WIDGET (editor->priv->keywords_entry), TRUE); gtk_widget_set_sensitive (GTK_WIDGET (editor->priv->location_entry), TRUE); @@ -487,7 +487,7 @@ ephy_bookmarks_editor_construct (EphyBookmarksEditor *editor) gtk_dialog_set_has_separator (GTK_DIALOG (editor), FALSE); gtk_container_set_border_width (GTK_CONTAINER (editor), 6); - gtk_widget_set_size_request (GTK_WIDGET (editor), 600, 400); + gtk_widget_set_size_request (GTK_WIDGET (editor), 550, 450); g_signal_connect (G_OBJECT (editor), "response", G_CALLBACK (ephy_bookmarks_editor_response_cb), @@ -507,7 +507,7 @@ ephy_bookmarks_editor_construct (EphyBookmarksEditor *editor) ephy_node_view_add_column (key_view, _("Keywords"), EPHY_TREE_MODEL_NODE_COL_KEYWORD, FALSE); gtk_box_pack_start (GTK_BOX (hbox), GTK_WIDGET (key_view), FALSE, TRUE, 0); - gtk_widget_set_size_request (GTK_WIDGET (key_view), 180, -1); + gtk_widget_set_size_request (GTK_WIDGET (key_view), 130, -1); gtk_widget_show (GTK_WIDGET (key_view)); editor->priv->key_view = key_view; g_signal_connect (G_OBJECT (key_view), diff --git a/src/bookmarks/ephy-bookmarks.c b/src/bookmarks/ephy-bookmarks.c index 87ae1ad03..46d3066c1 100644 --- a/src/bookmarks/ephy-bookmarks.c +++ b/src/bookmarks/ephy-bookmarks.c @@ -37,10 +37,6 @@ struct EphyBookmarksPrivate EphyNode *favorites; EphyNode *lower_fav; double lower_score; - GHashTable *bookmarks_hash; - GStaticRWLock *bookmarks_hash_lock; - GHashTable *favorites_hash; - GStaticRWLock *favorites_hash_lock; GHashTable *keywords_hash; GStaticRWLock *keywords_hash_lock; }; @@ -332,16 +328,12 @@ static gboolean add_to_favorites (EphyBookmarks *eb, EphyNode *node, EphyHistory *eh) { const char *url; - EphyNode *fav_node; gboolean full_menu; double score; - url = ephy_node_get_property_string (node, EPHY_NODE_BMK_PROP_LOCATION); - g_static_rw_lock_reader_lock (eb->priv->favorites_hash_lock); - fav_node = g_hash_table_lookup (eb->priv->favorites_hash, url); - g_static_rw_lock_reader_unlock (eb->priv->favorites_hash_lock); - if (fav_node) return FALSE; + if (ephy_node_has_child (eb->priv->favorites, node)) return FALSE; + url = ephy_node_get_property_string (node, EPHY_NODE_BMK_PROP_LOCATION); score = get_history_item_score (eh, url); full_menu = ephy_node_get_n_children (eb->priv->favorites) > MAX_FAVORITES_NUM; @@ -380,11 +372,12 @@ static void history_site_visited_cb (EphyHistory *gh, const char *url, EphyBookmarks *eb) { EphyNode *node; + guint id; - g_static_rw_lock_reader_lock (eb->priv->bookmarks_hash_lock); - node = g_hash_table_lookup (eb->priv->bookmarks_hash, url); - g_static_rw_lock_reader_unlock (eb->priv->bookmarks_hash_lock); - if (!node) return; + id = ephy_bookmarks_get_bookmark_id (eb, url); + if (id == 0) return; + + node = ephy_node_get_from_id (id); if (add_to_favorites (eb, node, gh)) { @@ -433,44 +426,11 @@ keywords_removed_cb (EphyNode *node, } static void -favorites_added_cb (EphyNode *node, - EphyNode *child, - EphyBookmarks *eb) -{ - g_static_rw_lock_writer_lock (eb->priv->favorites_hash_lock); - - g_hash_table_insert (eb->priv->favorites_hash, - (char *) ephy_node_get_property_string (child, EPHY_NODE_BMK_PROP_LOCATION), - child); - - g_static_rw_lock_writer_unlock (eb->priv->favorites_hash_lock); -} - -static void -favorites_removed_cb (EphyNode *node, +bookmarks_changed_cb (EphyNode *node, EphyNode *child, EphyBookmarks *eb) { - g_static_rw_lock_writer_lock (eb->priv->favorites_hash_lock); - - g_hash_table_remove (eb->priv->favorites_hash, - ephy_node_get_property_string (child, EPHY_NODE_BMK_PROP_LOCATION)); - - g_static_rw_lock_writer_unlock (eb->priv->favorites_hash_lock); -} - -static void -bookmarks_added_cb (EphyNode *node, - EphyNode *child, - EphyBookmarks *eb) -{ - g_static_rw_lock_writer_lock (eb->priv->bookmarks_hash_lock); - - g_hash_table_insert (eb->priv->bookmarks_hash, - (char *) ephy_node_get_property_string (child, EPHY_NODE_BMK_PROP_LOCATION), - child); - - g_static_rw_lock_writer_unlock (eb->priv->bookmarks_hash_lock); + ephy_bookmarks_emit_data_changed (eb); } static void @@ -480,13 +440,6 @@ bookmarks_removed_cb (EphyNode *node, { ephy_bookmarks_emit_data_changed (eb); g_idle_add ((GSourceFunc)ephy_bookmarks_clean_empty_keywords, eb); - - g_static_rw_lock_writer_lock (eb->priv->bookmarks_hash_lock); - - g_hash_table_remove (eb->priv->bookmarks_hash, - ephy_node_get_property_string (child, EPHY_NODE_BMK_PROP_LOCATION)); - - g_static_rw_lock_writer_unlock (eb->priv->bookmarks_hash_lock); } static void @@ -500,21 +453,11 @@ ephy_bookmarks_init (EphyBookmarks *eb) "bookmarks.xml", NULL); - eb->priv->bookmarks_hash = g_hash_table_new (g_str_hash, - g_str_equal); - eb->priv->bookmarks_hash_lock = g_new0 (GStaticRWLock, 1); - g_static_rw_lock_init (eb->priv->bookmarks_hash_lock); - eb->priv->keywords_hash = g_hash_table_new (g_str_hash, g_str_equal); eb->priv->keywords_hash_lock = g_new0 (GStaticRWLock, 1); g_static_rw_lock_init (eb->priv->keywords_hash_lock); - eb->priv->favorites_hash = g_hash_table_new (g_str_hash, - g_str_equal); - eb->priv->favorites_hash_lock = g_new0 (GStaticRWLock, 1); - g_static_rw_lock_init (eb->priv->favorites_hash_lock); - /* Bookmarks */ eb->priv->bookmarks = ephy_node_new_with_id (BOOKMARKS_NODE_ID); ephy_node_ref (eb->priv->bookmarks); @@ -525,13 +468,13 @@ ephy_bookmarks_init (EphyBookmarks *eb) &value); g_value_unset (&value); g_signal_connect_object (G_OBJECT (eb->priv->bookmarks), - "child_added", - G_CALLBACK (bookmarks_added_cb), + "child_removed", + G_CALLBACK (bookmarks_removed_cb), G_OBJECT (eb), 0); g_signal_connect_object (G_OBJECT (eb->priv->bookmarks), - "child_removed", - G_CALLBACK (bookmarks_removed_cb), + "child_changed", + G_CALLBACK (bookmarks_changed_cb), G_OBJECT (eb), 0); @@ -554,16 +497,6 @@ ephy_bookmarks_init (EphyBookmarks *eb) eb->priv->favorites = ephy_node_new_with_id (FAVORITES_NODE_ID); ephy_node_ref (eb->priv->favorites); - g_signal_connect_object (G_OBJECT (eb->priv->favorites), - "child_added", - G_CALLBACK (favorites_added_cb), - G_OBJECT (eb), - 0); - g_signal_connect_object (G_OBJECT (eb->priv->favorites), - "child_removed", - G_CALLBACK (favorites_removed_cb), - G_OBJECT (eb), - 0); ephy_bookmarks_load (eb); ephy_bookmarks_emit_data_changed (eb); @@ -589,10 +522,6 @@ ephy_bookmarks_finalize (GObject *object) ephy_node_unref (eb->priv->keywords); ephy_node_unref (eb->priv->favorites); - g_hash_table_destroy (eb->priv->bookmarks_hash); - g_static_rw_lock_free (eb->priv->bookmarks_hash_lock); - g_hash_table_destroy (eb->priv->favorites_hash); - g_static_rw_lock_free (eb->priv->favorites_hash_lock); g_hash_table_destroy (eb->priv->keywords_hash); g_static_rw_lock_free (eb->priv->keywords_hash_lock); @@ -663,20 +592,27 @@ guint ephy_bookmarks_get_bookmark_id (EphyBookmarks *eb, const char *url) { - EphyNode *node; - - g_static_rw_lock_reader_lock (eb->priv->bookmarks_hash_lock); - node = g_hash_table_lookup (eb->priv->bookmarks_hash, url); - g_static_rw_lock_reader_unlock (eb->priv->bookmarks_hash_lock); + GPtrArray *children; + int i; - if (node) - { - return ephy_node_get_id (node); - } - else + children = ephy_node_get_children (eb->priv->bookmarks); + for (i = 0; i < children->len; i++) { - return 0; + EphyNode *kid; + const char *location; + + kid = g_ptr_array_index (children, i); + location = ephy_node_get_property_string + (kid, EPHY_NODE_BMK_PROP_LOCATION); + if (strcmp (url, location) == 0) + { + ephy_node_thaw (eb->priv->bookmarks); + return ephy_node_get_id (kid); + } } + ephy_node_thaw (eb->priv->bookmarks); + + return 0; } void @@ -686,14 +622,14 @@ ephy_bookmarks_set_icon (EphyBookmarks *eb, { EphyNode *node; GValue value = { 0, }; + guint id; g_return_if_fail (icon != NULL); - g_static_rw_lock_reader_lock (eb->priv->bookmarks_hash_lock); - node = g_hash_table_lookup (eb->priv->bookmarks_hash, url); - g_static_rw_lock_reader_unlock (eb->priv->bookmarks_hash_lock); + id = ephy_bookmarks_get_bookmark_id (eb, url); + if (id == 0) return; - if (node == NULL) return; + node = ephy_node_get_from_id (id); g_value_init (&value, G_TYPE_STRING); g_value_set_string (&value, icon); diff --git a/src/ephy-window.c b/src/ephy-window.c index fb65e8e60..5bc50bf47 100644 --- a/src/ephy-window.c +++ b/src/ephy-window.c @@ -245,7 +245,7 @@ static EggActionGroupEntry ephy_popups_entries [] = { NULL, G_CALLBACK (popup_cmd_image_in_new_tab), NULL }, { "SaveImageAs", N_("Save Image As..."), GTK_STOCK_SAVE_AS, NULL, NULL, G_CALLBACK (popup_cmd_save_image_as), NULL }, - { "SetImageAsBackground", N_("Use Image as Background"), NULL, NULL, + { "SetImageAsBackground", N_("Use Image As Background"), NULL, NULL, NULL, G_CALLBACK (popup_cmd_set_image_as_background), NULL }, { "CopyImageLocation", N_("Copy Image Location"), GTK_STOCK_COPY, NULL, NULL, G_CALLBACK (popup_cmd_copy_image_location), NULL }, diff --git a/src/toolbar.c b/src/toolbar.c index 5ae01edc2..1872a86eb 100755 --- a/src/toolbar.c +++ b/src/toolbar.c @@ -33,6 +33,7 @@ #include "ephy-string.h" #include "ephy-debug.h" #include "ephy-new-bookmark.h" +#include "ephy-toolbars-group.h" #include <string.h> @@ -157,6 +158,7 @@ toolbar_get_action (EphyEditableToolbar *etoolbar, title = (const char *)uris->next->data; } + LOG ("Action for bookmark -%s-. EphyBookmarks %p", url, bookmarks) id = ephy_bookmarks_get_bookmark_id (bookmarks, url); if (id == 0) @@ -335,11 +337,26 @@ toolbar_set_window (Toolbar *t, EphyWindow *window) static void toolbar_init (Toolbar *t) { + static EphyToolbarsGroup *group = NULL; + t->priv = g_new0 (ToolbarPrivate, 1); t->priv->window = NULL; t->priv->ui_merge = NULL; t->priv->visibility = TRUE; + + if (group == NULL) + { + char *user; + + user = g_build_filename (ephy_dot_dir (), "toolbar.xml", NULL); + group = ephy_toolbars_group_new (); + ephy_toolbars_group_set_source + (group, ephy_file ("epiphany-toolbar.xml"), user); + g_free (user); + } + + g_object_set (t, "ToolbarsGroup", group, NULL); } static void |