diff options
Diffstat (limited to 'src/bookmarks')
-rw-r--r-- | src/bookmarks/ephy-bookmark-properties.c | 42 | ||||
-rw-r--r-- | src/bookmarks/ephy-bookmarks-editor.c | 119 | ||||
-rw-r--r-- | src/bookmarks/ephy-bookmarks.c | 46 | ||||
-rw-r--r-- | src/bookmarks/ephy-bookmarks.h | 4 | ||||
-rw-r--r-- | src/bookmarks/ephy-new-bookmark.c | 2 | ||||
-rw-r--r-- | src/bookmarks/ephy-topics-selector.c | 16 | ||||
-rw-r--r-- | src/bookmarks/ephy-topics-selector.h | 3 |
7 files changed, 141 insertions, 91 deletions
diff --git a/src/bookmarks/ephy-bookmark-properties.c b/src/bookmarks/ephy-bookmark-properties.c index 9da4dffa8..6654ea25a 100644 --- a/src/bookmarks/ephy-bookmark-properties.c +++ b/src/bookmarks/ephy-bookmark-properties.c @@ -200,10 +200,39 @@ bookmark_properties_response_cb (GtkDialog *dialog, } static void +update_entry (EphyBookmarkProperties *props, GtkWidget *entry, guint prop) +{ + GValue value = { 0, }; + char *text; + + text = gtk_editable_get_chars (GTK_EDITABLE (entry), 0, -1); + g_value_init (&value, G_TYPE_STRING); + g_value_set_string (&value, text); + ephy_node_set_property (props->priv->bookmark, + prop, + &value); + g_value_unset (&value); + g_free (text); +} + +static void +title_entry_changed_cb (GtkWidget *entry, EphyBookmarkProperties *props) +{ + update_entry (props, entry, EPHY_NODE_BMK_PROP_TITLE); +} + +static void +location_entry_changed_cb (GtkWidget *entry, EphyBookmarkProperties *props) +{ + update_entry (props, entry, EPHY_NODE_BMK_PROP_LOCATION); +} + +static void build_ui (EphyBookmarkProperties *editor) { GtkWidget *table, *label, *entry, *topics_selector; char *str; + const char *tmp; g_signal_connect (G_OBJECT (editor), "response", @@ -229,6 +258,11 @@ build_ui (EphyBookmarkProperties *editor) g_free (str); gtk_widget_show (label); entry = gtk_entry_new (); + tmp = ephy_node_get_property_string (editor->priv->bookmark, + EPHY_NODE_BMK_PROP_TITLE); + gtk_entry_set_text (GTK_ENTRY (entry), tmp); + g_signal_connect (entry, "changed", + G_CALLBACK (title_entry_changed_cb), editor); gtk_entry_set_activates_default (GTK_ENTRY (entry), TRUE); editor->priv->title_entry = entry; gtk_widget_set_size_request (entry, 200, -1); @@ -243,6 +277,11 @@ build_ui (EphyBookmarkProperties *editor) g_free (str); gtk_widget_show (label); entry = gtk_entry_new (); + tmp = ephy_node_get_property_string (editor->priv->bookmark, + EPHY_NODE_BMK_PROP_LOCATION); + gtk_entry_set_text (GTK_ENTRY (entry), tmp); + g_signal_connect (entry, "changed", + G_CALLBACK (location_entry_changed_cb), editor); gtk_entry_set_activates_default (GTK_ENTRY (entry), TRUE); editor->priv->location_entry = entry; gtk_widget_show (entry); @@ -255,7 +294,8 @@ build_ui (EphyBookmarkProperties *editor) gtk_label_set_markup (GTK_LABEL (label), str); g_free (str); gtk_widget_show (label); - topics_selector = ephy_topics_selector_new (editor->priv->bookmarks); + topics_selector = ephy_topics_selector_new (editor->priv->bookmarks, + editor->priv->bookmark); gtk_widget_show (topics_selector); editor->priv->topics_selector = topics_selector; diff --git a/src/bookmarks/ephy-bookmarks-editor.c b/src/bookmarks/ephy-bookmarks-editor.c index 1037ada63..bb27fa619 100644 --- a/src/bookmarks/ephy-bookmarks-editor.c +++ b/src/bookmarks/ephy-bookmarks-editor.c @@ -53,14 +53,20 @@ static void ephy_bookmarks_editor_get_property (GObject *object, GValue *value, GParamSpec *pspec); -static void popup_cmd_open_bookmarks_in_tabs (EggAction *action, - EphyBookmarksEditor *editor); -static void popup_cmd_open_bookmarks_in_browser (EggAction *action, - EphyBookmarksEditor *editor); -static void popup_cmd_remove_bookmarks (EggAction *action, - EphyBookmarksEditor *editor); -static void popup_cmd_bookmark_properties (EggAction *action, - EphyBookmarksEditor *editor); +static void cmd_open_bookmarks_in_tabs (EggAction *action, + EphyBookmarksEditor *editor); +static void cmd_open_bookmarks_in_browser (EggAction *action, + EphyBookmarksEditor *editor); +static void cmd_remove_bookmarks (EggAction *action, + EphyBookmarksEditor *editor); +static void cmd_bookmark_properties (EggAction *action, + EphyBookmarksEditor *editor); +static void cmd_add_topic (EggAction *action, + EphyBookmarksEditor *editor); +static void cmd_remove_topic (EggAction *action, + EphyBookmarksEditor *editor); +static void cmd_rename_bookmark (EggAction *action, + EphyBookmarksEditor *editor); struct EphyBookmarksEditorPrivate { @@ -69,6 +75,7 @@ struct EphyBookmarksEditorPrivate EphyNodeView *key_view; EphyNodeFilter *bookmarks_filter; GtkWidget *search_entry; + GtkWidget *menu_dock; EggMenuMerge *ui_merge; EggActionGroup *action_group; }; @@ -89,25 +96,53 @@ static GObjectClass *parent_class = NULL; static EggActionGroupEntry ephy_bookmark_popup_entries [] = { /* Toplevel */ + { "File", N_("_File"), NULL, NULL, NULL, NULL, NULL }, { "FakeToplevel", (""), NULL, NULL, NULL, NULL, NULL }, - { "OpenInWindow", N_("Open In _New Window"), GTK_STOCK_OPEN, NULL, - NULL, G_CALLBACK (popup_cmd_open_bookmarks_in_browser), NULL }, + { "NewTopic", N_("_New Topic"), GTK_STOCK_NEW, NULL, + NULL, G_CALLBACK (cmd_add_topic), NULL }, + + { "OpenInWindow", N_("_Open In New Window"), GTK_STOCK_OPEN, NULL, + NULL, G_CALLBACK (cmd_open_bookmarks_in_browser), NULL }, { "OpenInTab", N_("Open In New _Tab"), NULL, NULL, - NULL, G_CALLBACK (popup_cmd_open_bookmarks_in_tabs), NULL }, + NULL, G_CALLBACK (cmd_open_bookmarks_in_tabs), NULL }, + + { "RenameBookmark", N_("_Rename Bookmark"), NULL, NULL, + NULL, G_CALLBACK (cmd_rename_bookmark), NULL }, + + { "RemoveBookmark", N_("_Delete Bookmark"), GTK_STOCK_DELETE, NULL, + NULL, G_CALLBACK (cmd_remove_bookmarks), NULL }, - { "Remove", N_("_Remove"), GTK_STOCK_REMOVE, NULL, - NULL, G_CALLBACK (popup_cmd_remove_bookmarks), NULL }, + { "RemoveTopic", N_("D_elete Topic"), NULL, NULL, + NULL, G_CALLBACK (cmd_remove_topic), NULL }, { "Properties", N_("_Properties"), GTK_STOCK_PROPERTIES, NULL, - NULL, G_CALLBACK (popup_cmd_bookmark_properties), NULL }, + NULL, G_CALLBACK (cmd_bookmark_properties), NULL }, }; static guint ephy_bookmark_popup_n_entries = G_N_ELEMENTS (ephy_bookmark_popup_entries); static void -popup_cmd_open_bookmarks_in_tabs (EggAction *action, - EphyBookmarksEditor *editor) +cmd_add_topic (EggAction *action, + EphyBookmarksEditor *editor) +{ +} + +static void +cmd_remove_topic (EggAction *action, + EphyBookmarksEditor *editor) +{ +} + +static void +cmd_rename_bookmark (EggAction *action, + EphyBookmarksEditor *editor) +{ +} + +static void +cmd_open_bookmarks_in_tabs (EggAction *action, + EphyBookmarksEditor *editor) { EphyWindow *window; GList *selection; @@ -135,8 +170,8 @@ popup_cmd_open_bookmarks_in_tabs (EggAction *action, } static void -popup_cmd_open_bookmarks_in_browser (EggAction *action, - EphyBookmarksEditor *editor) +cmd_open_bookmarks_in_browser (EggAction *action, + EphyBookmarksEditor *editor) { EphyWindow *window; GList *selection; @@ -164,15 +199,15 @@ popup_cmd_open_bookmarks_in_browser (EggAction *action, } static void -popup_cmd_remove_bookmarks (EggAction *action, - EphyBookmarksEditor *editor) +cmd_remove_bookmarks (EggAction *action, + EphyBookmarksEditor *editor) { ephy_node_view_remove (editor->priv->bm_view); } static void -popup_cmd_bookmark_properties (EggAction *action, - EphyBookmarksEditor *editor) +cmd_bookmark_properties (EggAction *action, + EphyBookmarksEditor *editor) { GtkWidget *dialog; GList *selection; @@ -355,28 +390,6 @@ ephy_bookmarks_editor_node_activated_cb (GtkWidget *view, } static void -ephy_bookmarks_editor_go_to_location (EphyBookmarksEditor *editor) -{ - GList *selection; - const char *location; - GtkWindow *window; - - selection = ephy_node_view_get_selection (editor->priv->bm_view); - if (selection != NULL) - { - EphyNode *bm = EPHY_NODE (selection->data); - - location = ephy_node_get_property_string (bm, - EPHY_NODE_BMK_PROP_LOCATION); - g_return_if_fail (location != NULL); - window = gtk_window_get_transient_for (GTK_WINDOW (editor)); - g_return_if_fail (IS_EPHY_WINDOW (window)); - ephy_window_load_url (EPHY_WINDOW (window), location); - g_list_free (selection); - } -} - -static void bookmarks_filter (EphyBookmarksEditor *editor, EphyNode *keyword) { @@ -465,6 +478,14 @@ build_search_box (EphyBookmarksEditor *editor) } static void +add_widget (EggMenuMerge *merge, GtkWidget *widget, EphyBookmarksEditor *editor) +{ + gtk_box_pack_start (GTK_BOX (editor->priv->menu_dock), + widget, FALSE, FALSE, 0); + gtk_widget_show (widget); +} + +static void ephy_bookmarks_editor_construct (EphyBookmarksEditor *editor) { GtkWidget *hbox, *vbox; @@ -482,7 +503,12 @@ ephy_bookmarks_editor_construct (EphyBookmarksEditor *editor) ephy_bookmark_popup_entries[i].user_data = editor; } + editor->priv->menu_dock = gtk_vbox_new (FALSE, 0); + gtk_widget_show (editor->priv->menu_dock); + gtk_container_add (GTK_CONTAINER (editor), editor->priv->menu_dock); + ui_merge = egg_menu_merge_new (); + g_signal_connect (ui_merge, "add_widget", G_CALLBACK (add_widget), editor); action_group = egg_action_group_new ("PopupActions"); egg_action_group_add_actions (action_group, ephy_bookmark_popup_entries, ephy_bookmark_popup_n_entries); @@ -491,17 +517,16 @@ ephy_bookmarks_editor_construct (EphyBookmarksEditor *editor) egg_menu_merge_add_ui_from_file (ui_merge, ephy_file ("epiphany-bookmark-editor-ui.xml"), NULL); + egg_menu_merge_ensure_update (ui_merge); editor->priv->ui_merge = ui_merge; editor->priv->action_group = action_group; gtk_window_set_title (GTK_WINDOW (editor), _("Bookmarks")); - - gtk_container_set_border_width (GTK_CONTAINER (editor), 6); gtk_widget_set_size_request (GTK_WIDGET (editor), 500, 450); hbox = gtk_hbox_new (FALSE, 6); gtk_container_set_border_width (GTK_CONTAINER (hbox), 6); - gtk_container_add (GTK_CONTAINER (editor), hbox); + gtk_container_add (GTK_CONTAINER (editor->priv->menu_dock), hbox); gtk_widget_show (hbox); g_assert (editor->priv->bookmarks); diff --git a/src/bookmarks/ephy-bookmarks.c b/src/bookmarks/ephy-bookmarks.c index 81a06e738..7baaf7d8f 100644 --- a/src/bookmarks/ephy-bookmarks.c +++ b/src/bookmarks/ephy-bookmarks.c @@ -163,42 +163,6 @@ ephy_bookmarks_class_init (EphyBookmarksClass *klass) object_class->finalize = ephy_bookmarks_finalize; } -static gboolean -ephy_bookmarks_clean_empty_keywords (EphyBookmarks *eb) -{ - GPtrArray *children; - int i; - GList *l = NULL, *tmp; - - children = ephy_node_get_children (eb->priv->keywords); - ephy_node_thaw (eb->priv->keywords); - for (i = 0; i < children->len; i++) - { - EphyNode *kid; - - kid = g_ptr_array_index (children, i); - - if (ephy_node_get_n_children (kid) == 0) - { - l = g_list_append (l, kid); - } - } - - if (l == NULL) return FALSE; - - for (tmp = l; tmp != NULL; tmp = tmp->next) - { - EphyNode *node = EPHY_NODE (tmp->data); - LOG ("Remove empty keyword: %s", - ephy_node_get_property_string (node, - EPHY_NODE_KEYWORD_PROP_NAME)) - g_object_unref (node); - } - g_list_free (l); - - return FALSE; -} - static void ephy_bookmarks_load (EphyBookmarks *eb) { @@ -439,7 +403,6 @@ bookmarks_removed_cb (EphyNode *node, EphyBookmarks *eb) { ephy_bookmarks_emit_data_changed (eb); - g_idle_add ((GSourceFunc)ephy_bookmarks_clean_empty_keywords, eb); } static void @@ -854,6 +817,14 @@ ephy_bookmarks_find_keyword (EphyBookmarks *eb, return node; } +gboolean +ephy_bookmarks_has_keyword (EphyBookmarks *eb, + EphyNode *keyword, + EphyNode *bookmark) +{ + return ephy_node_has_child (keyword, bookmark); +} + void ephy_bookmarks_set_keyword (EphyBookmarks *eb, EphyNode *keyword, @@ -872,7 +843,6 @@ ephy_bookmarks_unset_keyword (EphyBookmarks *eb, if (!ephy_node_has_child (keyword, bookmark)) return; ephy_node_remove_child (keyword, bookmark); - ephy_bookmarks_clean_empty_keywords (eb); } EphyNode * diff --git a/src/bookmarks/ephy-bookmarks.h b/src/bookmarks/ephy-bookmarks.h index 4811c5577..fa3232565 100644 --- a/src/bookmarks/ephy-bookmarks.h +++ b/src/bookmarks/ephy-bookmarks.h @@ -89,6 +89,10 @@ EphyNode *ephy_bookmarks_find_keyword (EphyBookmarks *eb, const char *name, gboolean partial_match); +gboolean ephy_bookmarks_has_keyword (EphyBookmarks *eb, + EphyNode *keyword, + EphyNode *bookmark); + void ephy_bookmarks_set_keyword (EphyBookmarks *eb, EphyNode *keyword, EphyNode *bookmark); diff --git a/src/bookmarks/ephy-new-bookmark.c b/src/bookmarks/ephy-new-bookmark.c index bd14eb974..7edf24d6c 100644 --- a/src/bookmarks/ephy-new-bookmark.c +++ b/src/bookmarks/ephy-new-bookmark.c @@ -213,7 +213,7 @@ build_editing_table (EphyNewBookmark *editor) gtk_label_set_markup (GTK_LABEL (label), str); g_free (str); gtk_widget_show (label); - topics_selector = ephy_topics_selector_new (editor->priv->bookmarks); + topics_selector = ephy_topics_selector_new (editor->priv->bookmarks, NULL); gtk_widget_show (topics_selector); editor->priv->topics_selector = topics_selector; diff --git a/src/bookmarks/ephy-topics-selector.c b/src/bookmarks/ephy-topics-selector.c index f0c64b59d..9ebccb97e 100644 --- a/src/bookmarks/ephy-topics-selector.c +++ b/src/bookmarks/ephy-topics-selector.c @@ -201,7 +201,7 @@ fill_model (EphyTopicsSelector *editor) { EphyNode *kid; const char *name; - gboolean has_keyword; + gboolean has_keyword = FALSE; gboolean real_topic; GtkTreeIter iter; @@ -209,7 +209,14 @@ fill_model (EphyTopicsSelector *editor) name = ephy_node_get_property_string (kid, EPHY_NODE_KEYWORD_PROP_NAME); - has_keyword = FALSE; + + if (editor->priv->bookmark != NULL) + { + has_keyword = ephy_bookmarks_has_keyword + (editor->priv->bookmarks, kid, + editor->priv->bookmark); + } + real_topic = !ephy_node_get_property_boolean (kid, EPHY_NODE_KEYWORD_PROP_ALL_PRIORITY); @@ -242,6 +249,7 @@ topic_toggled (GtkCellRendererToggle *cell, gtk_list_store_set (GTK_LIST_STORE (model), &iter, COL_HAS_TOPIC, has_topic, -1); + ephy_topics_selector_apply (selector); } void @@ -328,7 +336,8 @@ ephy_topics_selector_init (EphyTopicsSelector *editor) } GtkWidget * -ephy_topics_selector_new (EphyBookmarks *bookmarks) +ephy_topics_selector_new (EphyBookmarks *bookmarks, + EphyNode *bookmark) { EphyTopicsSelector *editor; @@ -337,6 +346,7 @@ ephy_topics_selector_new (EphyBookmarks *bookmarks) editor = EPHY_TOPICS_SELECTOR (g_object_new (EPHY_TYPE_TOPIC_SELECTOR, "bookmarks", bookmarks, + "bookmark", bookmark, "hadjustment", NULL, "vadjustment", NULL, "hscrollbar_policy", GTK_POLICY_AUTOMATIC, diff --git a/src/bookmarks/ephy-topics-selector.h b/src/bookmarks/ephy-topics-selector.h index 5af7a65af..8adfa7523 100644 --- a/src/bookmarks/ephy-topics-selector.h +++ b/src/bookmarks/ephy-topics-selector.h @@ -50,7 +50,8 @@ typedef struct GType ephy_topics_selector_get_type (void); -GtkWidget *ephy_topics_selector_new (EphyBookmarks *bookmarks); +GtkWidget *ephy_topics_selector_new (EphyBookmarks *bookmarks, + EphyNode *bookmark); void ephy_topics_selector_set_bookmark (EphyTopicsSelector *selector, EphyNode *bookmark); |