diff options
Diffstat (limited to 'src/bookmarks')
-rw-r--r-- | src/bookmarks/ephy-bookmarks.c | 85 |
1 files changed, 74 insertions, 11 deletions
diff --git a/src/bookmarks/ephy-bookmarks.c b/src/bookmarks/ephy-bookmarks.c index 0d520f2ac..f8e9fe428 100644 --- a/src/bookmarks/ephy-bookmarks.c +++ b/src/bookmarks/ephy-bookmarks.c @@ -40,11 +40,14 @@ #include <string.h> #include <glib/gi18n.h> #include <libgnomevfs/gnome-vfs-utils.h> +#include <gtk/gtkmessagedialog.h> +#include <gtk/gtkdialog.h> #define EPHY_BOOKMARKS_XML_ROOT "ephy_bookmarks" #define EPHY_BOOKMARKS_XML_VERSION "1.03" #define BOOKMARKS_SAVE_DELAY (3 * 1000) #define MAX_FAVORITES_NUM 10 +#define UPDATE_URI_DATA_KEY "updated-uri" #define EPHY_BOOKMARKS_GET_PRIVATE(object)(G_TYPE_INSTANCE_GET_PRIVATE ((object), EPHY_TYPE_BOOKMARKS, EphyBookmarksPrivate)) @@ -476,27 +479,87 @@ history_cleared_cb (EphyHistory *history, EphyBookmarks *bookmarks) clear_favorites (bookmarks); } -#include <gtk/gtkmessagedialog.h> -#include <gtk/gtkdialog.h> - static void -redirect_cb (EphyHistory *history, - const char *from_uri, - const char *to_uri, - EphyBookmarks *eb) +update_bookmark_response_cb (GtkWidget *dialog, + int response, + EphyNode *bookmark) { - EphyNode *bookmark; GValue value = { 0, }; + char *to_uri; - bookmark = ephy_bookmarks_find_bookmark (eb, from_uri); - if (bookmark != NULL) + if (response == GTK_RESPONSE_ACCEPT) { + to_uri = (char *) g_object_steal_data (G_OBJECT (dialog), + UPDATE_URI_DATA_KEY); + g_value_init (&value, G_TYPE_STRING); - g_value_set_string (&value, to_uri); + g_value_take_string (&value, to_uri); ephy_node_set_property (bookmark, EPHY_NODE_BMK_PROP_LOCATION, &value); g_value_unset (&value); } + + gtk_widget_destroy (dialog); +} + +static void +update_bookmark_destroy_cb (EphyNode *zombie, + GtkWidget *dialog) +{ + gtk_widget_destroy (dialog); +} + +static void +redirect_cb (EphyHistory *history, + const char *from_uri, + const char *to_uri, + EphyBookmarks *eb) +{ + EphyNode *bookmark; + GtkWidget *dialog; + const char *title; + + bookmark = ephy_bookmarks_find_bookmark (eb, from_uri); + + /* FIXME check if there's another update-bookmark dialog up + * for from_uri' -> from_uri and update it accordingly + */ + if (bookmark == NULL) return; + + title = ephy_node_get_property_string (bookmark, EPHY_NODE_BMK_PROP_TITLE); + + dialog = gtk_message_dialog_new + (NULL, GTK_DIALOG_DESTROY_WITH_PARENT, + GTK_MESSAGE_QUESTION, + GTK_BUTTONS_NONE, + /* translators: the %s is the title of the bookmark */ + _("Update bookmark \"%s\"?"), + title); + gtk_message_dialog_format_secondary_markup + (GTK_MESSAGE_DIALOG (dialog), + /* translators: the %s is a URL */ + _("The bookmarked page has moved to <tt>%s</tt>."), + to_uri); + + gtk_dialog_add_button (GTK_DIALOG (dialog), + _("_Don't update bookmark"), GTK_RESPONSE_REJECT); + gtk_dialog_add_button (GTK_DIALOG (dialog), + _("_Update bookmark"), GTK_RESPONSE_ACCEPT); + gtk_dialog_set_default_response (GTK_DIALOG (dialog), GTK_RESPONSE_REJECT); + + gtk_window_set_title (GTK_WINDOW (dialog), _("Update bookmark?")); + gtk_window_set_icon_name (GTK_WINDOW (dialog), "web-browser"); + + g_object_set_data_full (G_OBJECT (dialog), UPDATE_URI_DATA_KEY, + g_strdup (to_uri), (GDestroyNotify) g_free); + g_signal_connect (dialog, "response", + G_CALLBACK (update_bookmark_response_cb), bookmark); + ephy_node_signal_connect_object (bookmark, + EPHY_NODE_DESTROY, + (EphyNodeCallback) update_bookmark_destroy_cb, + G_OBJECT (dialog)); + + gtk_window_present (GTK_WINDOW (dialog)); } static void |