diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/bookmarks/ephy-bookmarks.c | 2 | ||||
-rw-r--r-- | src/bookmarks/ephy-new-bookmark.c | 18 | ||||
-rw-r--r-- | src/bookmarks/ephy-new-bookmark.h | 3 | ||||
-rw-r--r-- | src/popup-commands.c | 3 | ||||
-rwxr-xr-x | src/toolbar.c | 76 | ||||
-rw-r--r-- | src/window-commands.c | 3 |
6 files changed, 84 insertions, 21 deletions
diff --git a/src/bookmarks/ephy-bookmarks.c b/src/bookmarks/ephy-bookmarks.c index 7e1d2bdd5..42be2aa12 100644 --- a/src/bookmarks/ephy-bookmarks.c +++ b/src/bookmarks/ephy-bookmarks.c @@ -675,7 +675,7 @@ ephy_bookmarks_get_bookmark_id (EphyBookmarks *eb, } else { - return -1; + return 0; } } diff --git a/src/bookmarks/ephy-new-bookmark.c b/src/bookmarks/ephy-new-bookmark.c index de3cdbe80..dab846439 100644 --- a/src/bookmarks/ephy-new-bookmark.c +++ b/src/bookmarks/ephy-new-bookmark.c @@ -48,6 +48,7 @@ struct EphyNewBookmarkPrivate char *location; char *smarturl; char *icon; + gulong id; GtkWidget *title_entry; GtkWidget *keywords_entry; @@ -144,14 +145,16 @@ ephy_new_bookmark_add (EphyNewBookmark *new_bookmark) { char *title; char *keywords; + EphyNode *node; title = gtk_editable_get_chars (GTK_EDITABLE (new_bookmark->priv->title_entry), 0, -1); keywords = gtk_editable_get_chars (GTK_EDITABLE (new_bookmark->priv->keywords_entry), 0, -1); - ephy_bookmarks_add (new_bookmark->priv->bookmarks, title, - new_bookmark->priv->location, - new_bookmark->priv->smarturl, keywords); + node = ephy_bookmarks_add (new_bookmark->priv->bookmarks, title, + new_bookmark->priv->location, + new_bookmark->priv->smarturl, keywords); + new_bookmark->priv->id = ephy_node_get_id (node); if (new_bookmark->priv->icon) { @@ -174,8 +177,6 @@ ephy_new_bookmark_response_cb (GtkDialog *dialog, ephy_new_bookmark_add (new_bookmark); break; } - - gtk_widget_destroy (GTK_WIDGET (dialog)); } static GtkWidget * @@ -334,6 +335,7 @@ ephy_new_bookmark_init (EphyNewBookmark *editor) editor->priv->location = NULL; editor->priv->smarturl = NULL; editor->priv->icon = NULL; + editor->priv->id = 0; } void @@ -361,3 +363,9 @@ ephy_new_bookmark_set_icon (EphyNewBookmark *bookmark, bookmark->priv->icon = icon ? g_strdup (icon) : NULL; } +gulong +ephy_new_bookmark_get_id (EphyNewBookmark *bookmark) +{ + return bookmark->priv->id; +} + diff --git a/src/bookmarks/ephy-new-bookmark.h b/src/bookmarks/ephy-new-bookmark.h index d0219ea14..7e351dc55 100644 --- a/src/bookmarks/ephy-new-bookmark.h +++ b/src/bookmarks/ephy-new-bookmark.h @@ -63,6 +63,9 @@ void ephy_new_bookmark_set_icon (EphyNewBookmark *bookmark, void ephy_new_bookmark_set_smarturl (EphyNewBookmark *bookmark, const char *url); +gulong ephy_new_bookmark_get_id (EphyNewBookmark *bookmark); + + G_END_DECLS #endif /* EPHY_NEW_BOOKMARK_H */ diff --git a/src/popup-commands.c b/src/popup-commands.c index 84ce259c8..95e8eee78 100644 --- a/src/popup-commands.c +++ b/src/popup-commands.c @@ -162,7 +162,8 @@ popup_cmd_add_link_bookmark (EggAction *action, (EPHY_NEW_BOOKMARK (new_bookmark), title); ephy_new_bookmark_set_smarturl (EPHY_NEW_BOOKMARK (new_bookmark), rel); - gtk_widget_show (new_bookmark); + gtk_dialog_run (GTK_DIALOG (new_bookmark)); + gtk_widget_destroy (new_bookmark); } void diff --git a/src/toolbar.c b/src/toolbar.c index 826adc596..1df62677c 100755 --- a/src/toolbar.c +++ b/src/toolbar.c @@ -32,6 +32,7 @@ #include "window-commands.h" #include "ephy-string.h" #include "ephy-debug.h" +#include "ephy-new-bookmark.h" #include <string.h> @@ -111,6 +112,25 @@ go_location_cb (EggAction *action, char *location, EphyWindow *window) } static EggAction * +get_bookmark_action (Toolbar *t, EphyBookmarks *bookmarks, gulong id) +{ + char action_name[255]; + EggAction *action; + + LOG ("Creating action for bookmark id %ld", id) + + snprintf (action_name, 255, "GoBookmarkId%ld", id); + action = ephy_bookmark_action_new (action_name, id); + + g_signal_connect (action, "go_location", + G_CALLBACK (go_location_cb), t->priv->window); + egg_action_group_add_action (t->priv->action_group, action); + g_object_unref (action); + + return action; +} + +static EggAction * toolbar_get_action (EphyEditableToolbar *etoolbar, const char *type, const char *name) @@ -120,22 +140,52 @@ toolbar_get_action (EphyEditableToolbar *etoolbar, EphyBookmarks *bookmarks; gulong id = 0; + bookmarks = ephy_shell_get_bookmarks (ephy_shell); + if (type && (strcmp (type, EPHY_DND_URL_TYPE) == 0)) { - char action_name[255]; - - bookmarks = ephy_shell_get_bookmarks (ephy_shell); - id = ephy_bookmarks_get_bookmark_id (bookmarks, name); - - snprintf (action_name, 255, "GoBookmarkId%ld", id); - action = ephy_bookmark_action_new (name, id); - - g_signal_connect (action, "go_location", - G_CALLBACK (go_location_cb), t->priv->window); - egg_action_group_add_action (t->priv->action_group, action); - g_object_unref (action); + GtkWidget *new_bookmark; + const char *url; + const char *title = NULL; + GList *uris; + + uris = ephy_dnd_uri_list_extract_uris (name); + g_return_val_if_fail (uris != NULL, NULL); + url = (const char *)uris->data; + if (uris->next) + { + title = (const char *)uris->next->data; + } + + id = ephy_bookmarks_get_bookmark_id (bookmarks, url); + + if (id == 0) + { + new_bookmark = ephy_new_bookmark_new + (bookmarks, GTK_WINDOW (t->priv->window), url); + ephy_new_bookmark_set_title (EPHY_NEW_BOOKMARK (new_bookmark), + title); + gtk_dialog_run (GTK_DIALOG (new_bookmark)); + id = ephy_new_bookmark_get_id (EPHY_NEW_BOOKMARK (new_bookmark)); + gtk_widget_destroy (new_bookmark); + } + + g_return_val_if_fail (id != 0, NULL); + + action = get_bookmark_action (t, bookmarks, id); + + g_list_foreach (uris, (GFunc)g_free, NULL); + g_list_free (uris); } - else + else if (g_str_has_prefix (name, "GoBookmarkId")) + { + if (ephy_str_to_int (name + strlen ("GoBookmarkId"), &id)) + { + action = get_bookmark_action (t, bookmarks, id); + } + } + + if (action == NULL) { action = EPHY_EDITABLE_TOOLBAR_CLASS (parent_class)->get_action (etoolbar, type, name); diff --git a/src/window-commands.c b/src/window-commands.c index 11040d8e5..f83f56a89 100644 --- a/src/window-commands.c +++ b/src/window-commands.c @@ -294,7 +294,8 @@ window_cmd_file_add_bookmark (EggAction *action, (EPHY_NEW_BOOKMARK (new_bookmark), title); ephy_new_bookmark_set_icon (EPHY_NEW_BOOKMARK (new_bookmark), icon); - gtk_widget_show (new_bookmark); + gtk_dialog_run (GTK_DIALOG (new_bookmark)); + gtk_widget_destroy (new_bookmark); } void |