Bug#596094: unblock: epiphany-browser/2.30.5-1
Package: release.debian.org
Severity: normal
User: release.debian.org@packages.debian.org
Usertags: freeze-exception
Please unblock epiphany-browser for squeeze.
epiphany-browser (2.30.5-1) unstable; urgency=low
* New upstream bugfix release:
+ debian/patches/13_accept-languages.patch:
- Dropped, merged upstream.
+ debian/patches/14_download_nautilus.patch,
debian/patches/99_autoreconf.patch,
debian/patches/99_ltmain_as-needed.patch:
- Refreshed.
epiphany-browser (2.30.3-1) unstable; urgency=low
[ Josselin Mouette ]
* 14_download_nautilus.patch: don’t open nautilus every time a file is
saved. This is simply annoying.
[ Sebastian Dröge ]
* New upstream bugfix release:
+ debian/control.in:
- Build depend on WebKit >= 1.2.3.
+ debian/patches/05_libexecdir.patch,
debian/patches/14_download_nautilus.patch,
debian/patches/99_autoreconf.patch:
- Refreshed.
The upstream changes are mostly bug fixes and translation updates.
Together with the webkit update (which I hope will be unblocked too) it
fixes a lot of crashers.
===============
Epiphany 2.30.5
===============
Paperbag release!
- Don't depend on GTK 2.21.x
===============
Epiphany 2.30.4
===============
This releases tries to sync with master as much as possible. Mostly bug fixes,
cleanups and small enhancements have been cherry-picked.
Changes:
- Prevent a crasher in the download dialog
- Highlight matches on "Find again"
- Install introspection files in our own prefix, not g-i's
- Fix feeds URL for relative URIs
- Don't let ephy-favicon-cache store invalid files
- Update libegg to latest master
- Remove deprecated functions to work with GTK+ 2.22 / master
===============
Epiphany 2.30.3
===============
Changes:
- Fix middle click on back/forward buttons and its menus
- Fix a crasher when loading URIs with no path
- Adapt to GtkNotebook signal signature changes
The diff for C sources is attached.
Cheers,
--
.''`.
: :' : “You would need to ask a lawyer if you don't know
`. `' that a handshake of course makes a valid contract.”
`- -- J???rg Schilling
--- epiphany-2.30.2/embed/downloader-view.c 2010-03-24 18:14:47.000000000 +0100
+++ epiphany-2.30.5/embed/downloader-view.c 2010-08-30 22:58:42.000000000 +0200
@@ -803,7 +803,8 @@ downloader_view_add_download (Downloader
}
#endif
- dv->priv->source_id = g_timeout_add (100, (GSourceFunc) update_buttons_timeout_cb, dv);
+ if (dv->priv->source_id == 0)
+ dv->priv->source_id = g_timeout_add (100, (GSourceFunc) update_buttons_timeout_cb, dv);
}
static void
--- epiphany-2.30.2/embed/ephy-embed.c 2010-03-29 18:08:54.000000000 +0200
+++ epiphany-2.30.5/embed/ephy-embed.c 2010-08-30 22:58:42.000000000 +0200
@@ -49,9 +49,13 @@
#include <string.h>
#include <webkit/webkit.h>
-static void ephy_embed_class_init (EphyEmbedClass *klass);
-static void ephy_embed_init (EphyEmbed *gs);
-static void ephy_embed_constructed (GObject *object);
+static void ephy_embed_class_init (EphyEmbedClass *klass);
+static void ephy_embed_init (EphyEmbed *gs);
+static void ephy_embed_constructed (GObject *object);
+static gboolean ephy_embed_inspect_show_cb (WebKitWebInspector *inspector,
+ EphyEmbed *embed);
+static gboolean ephy_embed_inspect_close_cb (WebKitWebInspector *inspector,
+ EphyEmbed *embed);
#define EPHY_EMBED_GET_PRIVATE(object)(G_TYPE_INSTANCE_GET_PRIVATE ((object), EPHY_TYPE_EMBED, EphyEmbedPrivate))
@@ -59,10 +63,13 @@ struct EphyEmbedPrivate
{
GtkBox *top_widgets_vbox;
GtkScrolledWindow *scrolled_window;
+ GtkPaned *paned;
WebKitWebView *web_view;
EphyHistory *history;
GtkWidget *inspector_window;
char *loading_uri;
+ GtkWidget *inspector_scrolled_window;
+ gboolean inspector_attached;
guint is_setting_zoom : 1;
GSList *destroy_on_transition_list;
};
@@ -335,6 +342,13 @@ zoom_changed_cb (WebKitWebView *web_view
}
static void
+ephy_embed_history_cleared_cb (EphyHistory *history,
+ EphyEmbed *embed)
+{
+ ephy_web_view_clear_history (EPHY_WEB_VIEW (embed->priv->web_view));
+}
+
+static void
ephy_embed_grab_focus (GtkWidget *widget)
{
GtkWidget *child;
@@ -346,6 +360,32 @@ ephy_embed_grab_focus (GtkWidget *widget
}
static void
+ephy_embed_dispose (GObject *object)
+{
+ EphyEmbed *embed = EPHY_EMBED (object);
+
+ if (embed->priv->inspector_window)
+ {
+ WebKitWebInspector *inspector;
+
+ inspector = webkit_web_view_get_inspector (embed->priv->web_view);
+
+ g_signal_handlers_disconnect_by_func (inspector,
+ ephy_embed_inspect_show_cb,
+ embed->priv->inspector_window);
+
+ g_signal_handlers_disconnect_by_func (inspector,
+ ephy_embed_inspect_close_cb,
+ embed->priv->inspector_window);
+
+ gtk_widget_destroy (GTK_WIDGET (embed->priv->inspector_window));
+ embed->priv->inspector_window = NULL;
+ }
+
+ G_OBJECT_CLASS (ephy_embed_parent_class)->dispose (object);
+}
+
+static void
ephy_embed_finalize (GObject *object)
{
EphyEmbed *embed = EPHY_EMBED (object);
@@ -360,6 +400,10 @@ ephy_embed_finalize (GObject *object)
}
g_slist_free (embed->priv->destroy_on_transition_list);
+ g_signal_handlers_disconnect_by_func (embed->priv->history,
+ ephy_embed_history_cleared_cb,
+ embed);
+
G_OBJECT_CLASS (ephy_embed_parent_class)->finalize (object);
}
@@ -371,6 +415,7 @@ ephy_embed_class_init (EphyEmbedClass *k
object_class->constructed = ephy_embed_constructed;
object_class->finalize = ephy_embed_finalize;
+ object_class->dispose = ephy_embed_dispose;
widget_class->grab_focus = ephy_embed_grab_focus;
g_type_class_add_private (G_OBJECT_CLASS (klass), sizeof(EphyEmbedPrivate));
@@ -393,18 +438,94 @@ ephy_embed_inspect_web_view_cb (WebKitWe
}
static gboolean
+ephy_embed_attach_inspector_cb (WebKitWebInspector *inspector,
+ EphyEmbed *embed)
+{
+ GtkAllocation allocation;
+ gtk_widget_get_allocation (GTK_WIDGET (embed->priv->scrolled_window), &allocation);
+
+ embed->priv->inspector_attached = TRUE;
+
+ if (embed->priv->paned == NULL)
+ {
+ embed->priv->paned = GTK_PANED (gtk_vpaned_new ());
+ g_object_ref_sink (embed->priv->paned);
+ }
+
+ /* Main view */
+ g_object_ref (embed->priv->scrolled_window);
+ gtk_container_remove (GTK_CONTAINER (embed),
+ GTK_WIDGET (embed->priv->scrolled_window));
+ gtk_paned_pack1 (embed->priv->paned,
+ GTK_WIDGET (embed->priv->scrolled_window),
+ TRUE, FALSE);
+ g_object_unref (embed->priv->scrolled_window);
+
+ /* Set a sane position for the mover */
+ gtk_paned_set_position (embed->priv->paned, allocation.height * 0.5);
+
+ /* The inspector */
+ g_object_ref (embed->priv->inspector_scrolled_window);
+ gtk_container_remove (GTK_CONTAINER (embed->priv->inspector_window),
+ GTK_WIDGET (embed->priv->inspector_scrolled_window));
+ gtk_paned_pack2 (embed->priv->paned,
+ GTK_WIDGET (embed->priv->inspector_scrolled_window),
+ FALSE, TRUE);
+ g_object_unref (embed->priv->inspector_scrolled_window);
+
+ /* Add the paned to the embed, show it, and hide the inspector window */
+ gtk_container_add (GTK_CONTAINER (embed), GTK_WIDGET (embed->priv->paned));
+ gtk_widget_show_all (GTK_WIDGET (embed->priv->paned));
+
+ gtk_widget_hide (embed->priv->inspector_window);
+
+ return TRUE;
+}
+
+static gboolean
+ephy_embed_detach_inspector_cb (WebKitWebInspector *inspector,
+ EphyEmbed *embed)
+{
+ embed->priv->inspector_attached = FALSE;
+
+ gtk_container_remove (GTK_CONTAINER (embed),
+ GTK_WIDGET (embed->priv->paned));
+
+ /* Main view */
+ gtk_widget_reparent (GTK_WIDGET (embed->priv->scrolled_window),
+ GTK_WIDGET (embed));
+
+ /* The inspector */
+ gtk_widget_reparent (GTK_WIDGET (embed->priv->inspector_scrolled_window),
+ GTK_WIDGET (embed->priv->inspector_window));
+
+ /* Get the view and the inspector back to their places */
+ gtk_widget_destroy (GTK_WIDGET (embed->priv->paned));
+ embed->priv->paned = NULL;
+
+ gtk_widget_show_all (embed->priv->inspector_window);
+ gtk_widget_show_all (embed->priv->inspector_scrolled_window);
+
+ return TRUE;
+}
+
+static gboolean
ephy_embed_inspect_show_cb (WebKitWebInspector *inspector,
- GtkWidget *widget)
+ EphyEmbed *embed)
{
- gtk_widget_show (widget);
+ if (!embed->priv->inspector_attached)
+ gtk_window_present (GTK_WINDOW (embed->priv->inspector_window));
+
return TRUE;
}
static gboolean
ephy_embed_inspect_close_cb (WebKitWebInspector *inspector,
- GtkWidget *widget)
+ EphyEmbed *embed)
{
- gtk_widget_hide (widget);
+ if (!embed->priv->inspector_attached)
+ gtk_widget_hide (embed->priv->inspector_window);
+
return TRUE;
}
@@ -485,6 +606,7 @@ static const char*
parse_extension (const char *filename)
{
const char *compression;
+ const char *last_separator;
compression = file_is_compressed (filename);
@@ -511,7 +633,8 @@ parse_extension (const char *filename)
}
/* no compression, just look for the last dot in the filename */
- return g_strrstr (filename, ".");
+ last_separator = strrchr (filename, G_DIR_SEPARATOR);
+ return strrchr ((last_separator) ? last_separator : filename, '.');
}
static gboolean
@@ -670,7 +793,7 @@ confirm_action_from_mime (WebKitWebView
DownloadAction action)
{
GtkWidget *parent_window;
- GtkWidget *dialog, *button, *image;
+ GtkWidget *dialog;
const char *action_label;
char *mime_description;
EphyMimePermission mime_permission;
@@ -679,6 +802,9 @@ confirm_action_from_mime (WebKitWebView
int default_response;
WebKitNetworkResponse *response;
SoupMessage *message;
+ GtkMessageType mtype;
+ char *title;
+ char *secondary;
parent_window = gtk_widget_get_toplevel (GTK_WIDGET(web_view));
if (!gtk_widget_is_toplevel (parent_window))
@@ -721,58 +847,49 @@ confirm_action_from_mime (WebKitWebView
suggested_filename = webkit_download_get_suggested_filename (download);
if (mime_permission != EPHY_MIME_PERMISSION_SAFE && helper_app) {
- dialog = gtk_message_dialog_new (GTK_WINDOW (parent_window),
- GTK_DIALOG_DESTROY_WITH_PARENT,
- GTK_MESSAGE_WARNING, GTK_BUTTONS_NONE,
- _("Download this potentially unsafe file?"));
-
- gtk_message_dialog_format_secondary_text (GTK_MESSAGE_DIALOG (dialog),
- /* translators: First %s is the file type description,
- Second %s is the file name */
- _("File Type: “%s”.\n\nIt is unsafe to open “%s” as "
- "it could potentially damage your documents or "
- "invade your privacy. You can download it instead."),
- mime_description, suggested_filename);
+ title = _("Download this potentially unsafe file?");
+ mtype = GTK_MESSAGE_WARNING;
+ /* translators: First %s is the file type description, second %s is the
+ * file name */
+ secondary = g_strdup_printf (_("File Type: “%s”.\n\nIt is unsafe to open "
+ "“%s” as it could potentially damage your "
+ "documents or invade your privacy. "
+ "You can download it instead."),
+ mime_description, suggested_filename);
+
action_label = STOCK_DOWNLOAD;
} else if (action == DOWNLOAD_ACTION_OPEN && helper_app) {
- dialog = gtk_message_dialog_new (GTK_WINDOW (parent_window),
- GTK_DIALOG_DESTROY_WITH_PARENT,
- GTK_MESSAGE_QUESTION, GTK_BUTTONS_NONE,
- _("Open this file?"));
-
- gtk_message_dialog_format_secondary_text (GTK_MESSAGE_DIALOG (dialog),
- /* translators: First %s is the file type description,
- Second %s is the file name,
- Third %s is the application used to open the file */
- _("File Type: “%s”.\n\nYou can open “%s” using “%s” or save it."),
- mime_description, suggested_filename,
- g_app_info_get_name (helper_app));
+ title = _("Open this file?");
+ mtype = GTK_MESSAGE_QUESTION;
+ /* translators: First %s is the file type description, second %s is the
+ * file name, third %s is the application used to open the file */
+ secondary = g_strdup_printf (_("File Type: “%s”.\n\nYou can open “%s” "
+ "using “%s” or save it."),
+ mime_description, suggested_filename,
+ g_app_info_get_name (helper_app));
} else {
- dialog = gtk_message_dialog_new (GTK_WINDOW (parent_window),
- GTK_DIALOG_DESTROY_WITH_PARENT,
- GTK_MESSAGE_QUESTION, GTK_BUTTONS_NONE,
- _("Download this file?"));
-
- gtk_message_dialog_format_secondary_text (GTK_MESSAGE_DIALOG (dialog),
- /* translators: First %s is the file type description,
- Second %s is the file name */
- _("File Type: “%s”.\n\nYou have no application able to open “%s”. "
- "You can download it instead."),
- mime_description, suggested_filename);
+ title = _("Download this file?");
+ mtype = GTK_MESSAGE_QUESTION;
+ /* translators: First %s is the file type description, second %s is the
+ * file name */
+ secondary = g_strdup_printf (_("File Type: “%s”.\n\nYou have no "
+ "application able to open “%s”. "
+ "You can download it instead."),
+ mime_description, suggested_filename);
}
- g_free (mime_description);
+ dialog = gtk_message_dialog_new (GTK_WINDOW (parent_window),
+ GTK_DIALOG_DESTROY_WITH_PARENT,
+ mtype, GTK_BUTTONS_NONE,
+ title);
+ gtk_message_dialog_format_secondary_text (GTK_MESSAGE_DIALOG (dialog),
+ secondary, NULL);
- button = gtk_button_new_with_mnemonic (_("_Save As..."));
- image = gtk_image_new_from_stock (GTK_STOCK_SAVE_AS, GTK_ICON_SIZE_BUTTON);
- gtk_button_set_image (GTK_BUTTON (button), image);
- gtk_widget_set_can_default (button, TRUE);
- /* don't show the image! see bug #307818 */
- gtk_widget_show (button);
- gtk_dialog_add_action_widget (GTK_DIALOG (dialog),
- button, DOWNLOAD_ACTION_DOWNLOAD);
+ g_free (mime_description);
gtk_dialog_add_button (GTK_DIALOG (dialog),
+ GTK_STOCK_SAVE_AS, DOWNLOAD_ACTION_DOWNLOAD);
+ gtk_dialog_add_button (GTK_DIALOG (dialog),
GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL);
gtk_dialog_add_button (GTK_DIALOG (dialog),
action_label, action);
@@ -900,7 +1017,6 @@ ephy_embed_constructed (GObject *object)
GtkWidget *scrolled_window;
WebKitWebView *web_view;
WebKitWebInspector *inspector;
- GtkWidget *inspector_sw;
embed->priv->top_widgets_vbox = GTK_BOX (gtk_vbox_new (FALSE, 0));
gtk_box_pack_start (GTK_BOX (embed), GTK_WIDGET (embed->priv->top_widgets_vbox),
@@ -929,16 +1045,16 @@ ephy_embed_constructed (GObject *object)
embed->priv->inspector_window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
inspector = webkit_web_view_get_inspector (web_view);
- inspector_sw = gtk_scrolled_window_new (NULL, NULL);
- gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (inspector_sw),
+ embed->priv->inspector_scrolled_window = gtk_scrolled_window_new (NULL, NULL);
+ gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (embed->priv->inspector_scrolled_window),
GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
gtk_container_add (GTK_CONTAINER (embed->priv->inspector_window),
- inspector_sw);
+ embed->priv->inspector_scrolled_window);
gtk_window_set_title (GTK_WINDOW (embed->priv->inspector_window),
_("Web Inspector"));
gtk_window_set_default_size (GTK_WINDOW (embed->priv->inspector_window),
- 600, 400);
+ 800, 600);
g_signal_connect (embed->priv->inspector_window,
"delete-event", G_CALLBACK (gtk_widget_hide_on_delete),
@@ -946,16 +1062,24 @@ ephy_embed_constructed (GObject *object)
g_object_connect (inspector,
"signal::inspect-web-view", G_CALLBACK (ephy_embed_inspect_web_view_cb),
- inspector_sw,
+ embed->priv->inspector_scrolled_window,
"signal::show-window", G_CALLBACK (ephy_embed_inspect_show_cb),
- embed->priv->inspector_window,
+ embed,
"signal::close-window", G_CALLBACK (ephy_embed_inspect_close_cb),
- embed->priv->inspector_window,
+ embed,
+ "signal::attach-window", G_CALLBACK (ephy_embed_attach_inspector_cb),
+ embed,
+ "signal::detach-window", G_CALLBACK (ephy_embed_detach_inspector_cb),
+ embed,
NULL);
ephy_embed_prefs_add_embed (embed);
embed->priv->history = EPHY_HISTORY (ephy_embed_shell_get_global_history (ephy_embed_shell_get_default ()));
+
+ g_signal_connect (embed->priv->history,
+ "cleared", G_CALLBACK (ephy_embed_history_cleared_cb),
+ embed);
}
static void
@@ -964,6 +1088,7 @@ ephy_embed_init (EphyEmbed *embed)
embed->priv = EPHY_EMBED_GET_PRIVATE (embed);
embed->priv->scrolled_window = GTK_SCROLLED_WINDOW (gtk_scrolled_window_new (NULL, NULL));
+ embed->priv->paned = NULL;
gtk_scrolled_window_set_policy (embed->priv->scrolled_window,
GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
--- epiphany-2.30.2/embed/ephy-embed-persist.c 2010-03-09 22:51:28.000000000 +0100
+++ epiphany-2.30.5/embed/ephy-embed-persist.c 2010-08-30 22:58:42.000000000 +0200
@@ -763,7 +763,36 @@ ephy_embed_persist_save (EphyEmbedPersis
*/
g_object_ref (persist);
- request = webkit_network_request_new (priv->source);
+ if (priv->embed)
+ {
+ EphyWebView *web_view;
+ SoupMessage *msg;
+ gchar *referer;
+
+ /* Get the webview associated to the embed */
+ web_view = ephy_embed_get_web_view (priv->embed);
+
+ /* Create the request with a SoupMessage to allow
+ setting the 'Referer' as got from the embed */
+ msg = soup_message_new (SOUP_METHOD_GET, priv->source);
+ request = WEBKIT_NETWORK_REQUEST (
+ g_object_new (WEBKIT_TYPE_NETWORK_REQUEST,
+ "message", msg,
+ NULL));
+
+ /* Add the referer to the request headers */
+ referer = ephy_web_view_get_location (web_view, FALSE);
+ soup_message_headers_append (msg->request_headers,
+ "Referer", referer);
+ g_free (referer);
+ g_object_unref (msg);
+ }
+ else
+ {
+ /* Create a normal network request otherwise */
+ request = webkit_network_request_new (priv->source);
+ }
+
priv->download = webkit_download_new (request);
g_object_unref (request);
@@ -795,7 +824,7 @@ ephy_embed_persist_save (EphyEmbedPersis
window,
GTK_FILE_CHOOSER_ACTION_SAVE,
priv->persist_key,
- EPHY_FILE_FILTER_ALL_SUPPORTED);
+ EPHY_FILE_FILTER_ALL);
gtk_file_chooser_set_do_overwrite_confirmation
(GTK_FILE_CHOOSER (dialog), TRUE);
--- epiphany-2.30.2/embed/ephy-embed-prefs.c 2010-02-20 10:42:51.000000000 +0100
+++ epiphany-2.30.5/embed/ephy-embed-prefs.c 2010-08-30 22:58:42.000000000 +0200
@@ -278,6 +278,49 @@ webkit_pref_callback_font_family (GConfC
}
}
+/* Part of this code taken from libsoup (soup-session.c) */
+static gchar *
+build_accept_languages_header (GArray *languages)
+{
+ gchar **langs = NULL;
+ gchar *langs_str = NULL;
+ gint delta;
+ gint i;
+
+ g_return_val_if_fail (languages != NULL, NULL);
+
+ /* Calculate deltas for the quality values */
+ if (languages->len < 10)
+ delta = 10;
+ else if (languages->len < 20)
+ delta = 5;
+ else
+ delta = 1;
+
+ /* Set quality values for each language */
+ langs = (gchar **) languages->data;
+ for (i = 0; langs[i] != NULL; i++) {
+ gchar *lang = (gchar *) langs[i];
+ gint quality = 100 - i * delta;
+
+ if (quality > 0 && quality < 100) {
+ gchar buf[8];
+ g_ascii_formatd (buf, 8, "%.2f", quality/100.0);
+ langs[i] = g_strdup_printf ("%s;q=%s", lang, buf);
+ } else {
+ /* Just dup the string in this case */
+ langs[i] = g_strdup (lang);
+ }
+ g_free (lang);
+ }
+
+ /* Get the result string */
+ if (languages->len > 0)
+ langs_str = g_strjoinv (", ", langs);
+
+ return langs_str;
+}
+
/* Based on Christian Persch's code from gecko backend of epiphany
(old transform_accept_languages_list() function) */
static void
@@ -290,7 +333,7 @@ webkit_pref_callback_accept_languages (G
GConfValue *gcvalue;
GArray *array;
GSList *languages, *l;
- char **langs;
+ char **array_data;
char *langs_str;
char *webkit_pref;
@@ -318,14 +361,15 @@ webkit_pref_callback_accept_languages (G
ephy_langs_sanitise (array);
- langs = (char **) g_array_free (array, FALSE);
- langs_str = g_strjoinv (", ", langs);
+ langs_str = build_accept_languages_header (array);
/* Update Soup session */
session = webkit_get_default_session ();
g_object_set (G_OBJECT (session), webkit_pref, langs_str, NULL);
- g_strfreev (langs);
+ /* Free memory */
+ array_data = (char **) g_array_free (array, FALSE);
+ g_strfreev (array_data);
g_free (langs_str);
}
--- epiphany-2.30.2/embed/ephy-embed-single.c 2010-02-26 02:25:49.000000000 +0100
+++ epiphany-2.30.5/embed/ephy-embed-single.c 2010-08-30 22:58:42.000000000 +0200
@@ -319,26 +319,6 @@ ephy_embed_single_class_init (EphyEmbedS
G_TYPE_STRING);
/**
- * EphyEmbedSingle::add-sidebar:
- * @single:
- * @url: The url of the sidebar to be added
- * @title: The title of the sidebar to be added
- *
- * The ::add-sidebar signal is emitted when the user clicks a javascript link that
- * requests adding a url to the sidebar.
- **/
- g_signal_new ("add-sidebar",
- EPHY_TYPE_EMBED_SINGLE,
- G_SIGNAL_RUN_LAST,
- G_STRUCT_OFFSET (EphyEmbedSingleClass, add_sidebar),
- g_signal_accumulator_true_handled, NULL,
- ephy_marshal_BOOLEAN__STRING_STRING,
- G_TYPE_BOOLEAN,
- 2,
- G_TYPE_STRING | G_SIGNAL_TYPE_STATIC_SCOPE,
- G_TYPE_STRING | G_SIGNAL_TYPE_STATIC_SCOPE);
-
- /**
* EphyEmbedSingle::add-search-engine
* @single:
* @url: The url of the search engine definition file
--- epiphany-2.30.2/embed/ephy-embed-single.h 2010-01-08 19:20:59.000000000 +0100
+++ epiphany-2.30.5/embed/ephy-embed-single.h 2010-08-30 22:58:42.000000000 +0200
@@ -68,10 +68,6 @@ struct _EphyEmbedSingleClass
char *mime_type,
char *uri);
- gboolean (* add_sidebar) (EphyEmbedSingle *single,
- const char *url,
- const char *title);
-
gboolean (* add_search_engine) (EphyEmbedSingle *single,
const char *url,
const char *icon_url,
--- epiphany-2.30.2/embed/ephy-favicon-cache.c 2010-01-08 19:20:59.000000000 +0100
+++ epiphany-2.30.5/embed/ephy-favicon-cache.c 2010-08-30 22:58:42.000000000 +0200
@@ -101,7 +101,6 @@ enum
EPHY_NODE_FAVICON_PROP_FILENAME = 3,
EPHY_NODE_FAVICON_PROP_LAST_USED = 4,
EPHY_NODE_FAVICON_PROP_STATE = 5,
- EPHY_NODE_FAVICON_PROP_CHECKOLD = 6,
EPHY_NODE_FAVICON_PROP_CHECKED = 7,
};
@@ -444,13 +443,33 @@ ephy_favicon_cache_finalize (GObject *ob
G_OBJECT_CLASS (ephy_favicon_cache_parent_class)->finalize (object);
}
+static gboolean
+is_valid_mime_type (const char *mime_type)
+{
+
+ gboolean valid = FALSE;
+
+ valid = g_strcmp0 (mime_type, "image/x-ico") == 0 ||
+ g_strcmp0 (mime_type, "image/vnd.microsoft.icon") == 0 ||
+ g_strcmp0 (mime_type, "image/png") == 0 ||
+ g_strcmp0 (mime_type, "image/gif") == 0 ||
+ g_strcmp0 (mime_type, "application/octet-stream") == 0;
+
+ return valid;
+}
+
static void
favicon_download_status_changed_cb (WebKitDownload *download,
GParamSpec *spec,
EphyFaviconCache *cache)
{
WebKitDownloadStatus status = webkit_download_get_status (download);
- const char* url = webkit_download_get_uri (download);
+ const char *url = webkit_download_get_uri (download);
+ const char *destination = webkit_download_get_destination_uri (download);
+ const char *mime_type;
+ GFile *file;
+ GFileInfo *file_info;
+ gboolean valid;
switch (status) {
case WEBKIT_DOWNLOAD_STATUS_FINISHED:
@@ -458,12 +477,30 @@ favicon_download_status_changed_cb (WebK
g_hash_table_remove (cache->priv->downloads_hash, url);
- g_signal_emit (G_OBJECT (cache), signals[CHANGED], 0, url);
+ file = g_file_new_for_uri (destination);
+ file_info = g_file_query_info (file,
+ G_FILE_ATTRIBUTE_STANDARD_CONTENT_TYPE,
+ 0, NULL, NULL);
+
+ mime_type = g_file_info_get_content_type (file_info);
+ valid = is_valid_mime_type (mime_type);
+
+ if (!valid)
+ {
+ LOG ("Deleting invalid %s type", mime_type);
+ g_file_delete (file, NULL, NULL);
+ }
+ else
+ {
+ g_signal_emit (G_OBJECT (cache), signals[CHANGED], 0, url);
+ }
+
+ g_object_unref (file);
+ g_object_unref (file_info);
g_object_unref (download);
cache->priv->dirty = TRUE;
-
break;
case WEBKIT_DOWNLOAD_STATUS_ERROR:
case WEBKIT_DOWNLOAD_STATUS_CANCELLED:
@@ -471,9 +508,15 @@ favicon_download_status_changed_cb (WebK
g_hash_table_remove (cache->priv->downloads_hash, url);
- /* TODO: remove a partially downloaded file */
/* FIXME: re-schedule to try again after n days? */
+ file = g_file_new_for_uri (destination);
+ if (g_file_query_exists (file, NULL))
+ {
+ LOG ("Deleting incomplete favicon download");
+ g_file_delete (file, NULL, NULL);
+ }
+ g_object_unref (file);
g_object_unref (download);
cache->priv->dirty = TRUE;
@@ -522,7 +565,7 @@ ephy_favicon_cache_download (EphyFavicon
/**
* ephy_favicons_cache_get:
- * @cache:
+ * @cache: an #EphyFaviconCache
* @url: the URL of the icon to retrieve
*
* Note: This will always return %NULL for non-http URLs.
@@ -682,18 +725,16 @@ ephy_favicon_cache_get (EphyFaviconCache
{
return NULL;
}
- valid = strcmp (mime_type, "image/x-ico") == 0 ||
- strcmp (mime_type, "image/vnd.microsoft.icon") == 0 ||
- strcmp (mime_type, "image/png") == 0 ||
- strcmp (mime_type, "image/gif") == 0;
- is_ao = strcmp (mime_type, "application/octet-stream") == 0;
+
+ valid = is_valid_mime_type (mime_type);
+ is_ao = g_strcmp0 (mime_type, "application/octet-stream") == 0;
g_object_unref (file_info);
- g_object_unref (file);
- /* As a special measure, we try to load an application/octet-stream file
- * as an ICO file, since we cannot detect a ICO file without .ico extension
- * (the mime system has no magic for it).
+ /* As a special measure, we try to load an
+ * application/octet-stream file as an ICO file, since we
+ * cannot detect a ICO file without .ico extension (the mime
+ * system has no magic for it).
*/
if (is_ao)
{
@@ -731,16 +772,13 @@ ephy_favicon_cache_get (EphyFaviconCache
else
{
/* remove invalid file from cache */
- /* gnome_vfs_unlink (pix_file); */
+ g_file_delete (file, NULL, NULL);
}
+ g_object_unref (file);
ephy_node_set_property_int (icon,
EPHY_NODE_FAVICON_PROP_CHECKED,
(int) checklevel);
-
- /* epiphany 1.6 compat */
- ephy_node_set_property_boolean
- (icon, EPHY_NODE_FAVICON_PROP_CHECKOLD, valid);
}
/* if it still needs the check, mime type couldn't be checked. Deny! */
@@ -795,7 +833,7 @@ ephy_favicon_cache_get (EphyFaviconCache
/**
* ephy_favicons_cache_clear:
- * @cache:
+ * @cache: the #EphyFaviconCache to clear
*
* Clears the favicon cache and removes any stored icon files from disk.
*/
--- epiphany-2.30.2/embed/ephy-web-view.c 2010-04-07 10:37:25.000000000 +0200
+++ epiphany-2.30.5/embed/ephy-web-view.c 2010-08-30 22:58:42.000000000 +0200
@@ -1247,8 +1247,21 @@ do_hook_into_links (JSContextRef js_cont
char *type = js_get_element_attribute (js_context, obj, "type");
char *title = js_get_element_attribute (js_context, obj, "title");
char *address = js_get_element_attribute (js_context, obj, "href");
+ SoupURI *feed_uri, *current_uri;
- g_signal_emit_by_name (web_view, "ge-feed-link", type, title, address);
+ feed_uri = soup_uri_new (address);
+ if (!feed_uri) {
+ current_uri = soup_uri_new (ephy_web_view_get_address (web_view));
+ feed_uri = soup_uri_new_with_base (current_uri, address);
+ soup_uri_free (current_uri);
+ }
+
+ if (feed_uri) {
+ g_free (address);
+ address = soup_uri_to_string (feed_uri, FALSE);
+ g_signal_emit_by_name (web_view, "ge-feed-link", type, title, address);
+ soup_uri_free (feed_uri);
+ }
g_free (type);
g_free (title);
@@ -1623,24 +1636,6 @@ ephy_web_view_class_init (EphyWebViewCla
0);
/**
- * EphyWebView::dom-content-loaded:
- * @view: the #EphyWebView that received the signal
- *
- * The ::dom-content-loaded signal is emitted when
- * the document has been loaded (excluding images and other loads initiated by this document).
- * That's true also for frameset and all the frames within it.
- **/
- g_signal_new ("dom_content_loaded",
- EPHY_TYPE_WEB_VIEW,
- G_SIGNAL_RUN_FIRST,
- G_STRUCT_OFFSET (EphyWebViewClass, dom_content_loaded),
- NULL, NULL,
- g_cclosure_marshal_VOID__POINTER,
- G_TYPE_NONE,
- 1,
- G_TYPE_POINTER);
-
-/**
* EphyWebView::search-key-press:
* @view: the #EphyWebView that received the signal
* @event: the #GdkEventKey which triggered this signal
@@ -2045,6 +2040,32 @@ normalize_or_autosearch_url (EphyWebView
return effective_url;
}
+static void
+update_navigation_flags (EphyWebView *view)
+{
+ EphyWebViewPrivate *priv = view->priv;
+ guint flags = 0;
+ WebKitWebView *web_view = WEBKIT_WEB_VIEW (view);
+
+ if (ephy_web_view_can_go_up (view)) {
+ flags |= EPHY_WEB_VIEW_NAV_UP;
+ }
+
+ if (webkit_web_view_can_go_back (web_view)) {
+ flags |= EPHY_WEB_VIEW_NAV_BACK;
+ }
+
+ if (webkit_web_view_can_go_forward (web_view)) {
+ flags |= EPHY_WEB_VIEW_NAV_FORWARD;
+ }
+
+ if (priv->nav_flags != (EphyWebViewNavigationFlags)flags) {
+ priv->nav_flags = (EphyWebViewNavigationFlags)flags;
+
+ g_object_notify (G_OBJECT (view), "navigation");
+ }
+}
+
/**
* ephy_web_view_load_request:
* @view: the #EphyWebView in which to load the request
@@ -2150,6 +2171,36 @@ ephy_web_view_copy_back_history (EphyWeb
}
/**
+ * ephy_web_view_clear_history:
+ * @view: the #EphyWebView to clear the history from
+ *
+ * Clears history of @view.
+ **/
+void
+ephy_web_view_clear_history (EphyWebView *view)
+{
+ WebKitWebBackForwardList *history_list;
+
+ g_return_if_fail (EPHY_IS_WEB_VIEW (view));
+
+ history_list = webkit_web_view_get_back_forward_list (WEBKIT_WEB_VIEW (view));
+ if (history_list != NULL) {
+ WebKitWebHistoryItem *current_item;
+
+ /* Save a ref to the first element to add it later */
+ current_item = webkit_web_back_forward_list_get_current_item (history_list);
+ g_object_ref (current_item);
+
+ /* Clear the history and add the first element once again */
+ webkit_web_back_forward_list_clear (history_list);
+ webkit_web_back_forward_list_add_item (history_list, current_item);
+ g_object_unref (current_item);
+
+ update_navigation_flags (view);
+ }
+}
+
+/**
* ephy_web_view_set_address:
* @view: an #EphyWebView
* @address: address to set @view to
@@ -2330,32 +2381,6 @@ update_net_state_message (EphyWebView *v
g_free (host);
}
-static void
-update_navigation_flags (EphyWebView *view)
-{
- EphyWebViewPrivate *priv = view->priv;
- guint flags = 0;
- WebKitWebView *web_view = WEBKIT_WEB_VIEW (view);
-
- if (ephy_web_view_can_go_up (view)) {
- flags |= EPHY_WEB_VIEW_NAV_UP;
- }
-
- if (webkit_web_view_can_go_back (web_view)) {
- flags |= EPHY_WEB_VIEW_NAV_BACK;
- }
-
- if (webkit_web_view_can_go_forward (web_view)) {
- flags |= EPHY_WEB_VIEW_NAV_FORWARD;
- }
-
- if (priv->nav_flags != (EphyWebViewNavigationFlags)flags) {
- priv->nav_flags = (EphyWebViewNavigationFlags)flags;
-
- g_object_notify (G_OBJECT (view), "navigation");
- }
-}
-
/**
* ephy_web_view_update_from_net_state:
* @view: an #EphyWebView
@@ -2658,7 +2683,7 @@ ephy_web_view_can_go_up (EphyWebView *vi
return FALSE;
}
- result = (uri->fragment || uri->query || strlen (uri->path) > 1);
+ result = uri->fragment || uri->query || (uri->path && (strlen (uri->path) > 1));
soup_uri_free (uri);
return result;
--- epiphany-2.30.2/embed/ephy-web-view.h 2010-04-07 10:37:25.000000000 +0200
+++ epiphany-2.30.5/embed/ephy-web-view.h 2010-08-30 22:58:42.000000000 +0200
@@ -124,8 +124,6 @@ struct _EphyWebViewClass
EphyEmbedEvent *event);
gboolean (* dom_mouse_down) (EphyWebView *view,
EphyEmbedEvent *event);
- void (* dom_content_loaded) (EphyWebView *view,
- gpointer event);
void (* popup_blocked) (EphyWebView *view,
const char *address,
const char *target,
@@ -155,6 +153,7 @@ void ephy_web_view
const char *url);
void ephy_web_view_copy_back_history (EphyWebView *source,
EphyWebView *dest);
+void ephy_web_view_clear_history (EphyWebView *view);
gboolean ephy_web_view_is_loading (EphyWebView *view);
const char * ephy_web_view_get_loading_title (EphyWebView *view);
GdkPixbuf * ephy_web_view_get_icon (EphyWebView *view);
--- epiphany-2.30.2/lib/egg/eggmarshalers.h 2010-01-11 21:38:12.000000000 +0100
+++ epiphany-2.30.5/lib/egg/eggmarshalers.h 2010-08-31 00:55:51.000000000 +0200
@@ -6,7 +6,7 @@
G_BEGIN_DECLS
-/* VOID:INT,INT (../../../lib/egg/eggmarshalers.list:1) */
+/* VOID:INT,INT (./eggmarshalers.list:1) */
extern void _egg_marshal_VOID__INT_INT (GClosure *closure,
GValue *return_value,
guint n_param_values,
--- epiphany-2.30.2/lib/ephy-file-helpers.c 2010-02-27 11:26:59.000000000 +0100
+++ epiphany-2.30.5/lib/ephy-file-helpers.c 2010-08-30 22:58:42.000000000 +0200
@@ -229,7 +229,7 @@ ephy_file_tmp_filename (const char *base
int fd;
char *name = g_strdup (base);
- fd = mkstemp (name);
+ fd = g_mkstemp (name);
if (fd != -1)
{
--- epiphany-2.30.2/lib/ephy-gui.c 2010-01-08 19:21:00.000000000 +0100
+++ epiphany-2.30.5/lib/ephy-gui.c 2010-08-30 22:58:42.000000000 +0200
@@ -20,7 +20,6 @@
#include "config.h"
#include "ephy-gui.h"
-#include "eel-gconf-extensions.h"
#include "ephy-stock-icons.h"
#include "ephy-debug.h"
@@ -506,45 +505,3 @@ ephy_gui_message_dialog_get_content_box
return container;
}
-
-/* Until bug #345349 is fixed */
-void
-ephy_gui_message_dialog_set_wrap_mode (GtkMessageDialog *dialog,
- PangoWrapMode wrap_mode)
-{
- GtkContainer *container;
- GList *children, *l;
-
- container = GTK_CONTAINER (dialog->label->parent);
- g_return_if_fail (GTK_IS_CONTAINER (container));
-
- children = gtk_container_get_children (container);
- for (l = children; l != NULL; l = l->next)
- {
- GtkWidget *child = l->data;
-
- if (GTK_IS_LABEL (child))
- {
- g_print ("Setting wrap mode on label %p\n", child);
- gtk_label_set_line_wrap_mode (GTK_LABEL (child),
- wrap_mode);
- }
- }
-}
-
-static void
-checkbutton_toggled_cb (GtkToggleButton *button,
- const char *pref)
-{
- eel_gconf_set_boolean (pref, gtk_toggle_button_get_active (button));
-}
-
-void
-ephy_gui_connect_checkbutton_to_gconf (GtkWidget *widget,
- const char *pref)
-{
- gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (widget),
- eel_gconf_get_boolean (pref));
- g_signal_connect (widget, "toggled",
- G_CALLBACK (checkbutton_toggled_cb), (gpointer) pref);
-}
--- epiphany-2.30.2/lib/ephy-gui.h 2010-01-08 19:21:00.000000000 +0100
+++ epiphany-2.30.5/lib/ephy-gui.h 2010-08-30 22:58:42.000000000 +0200
@@ -72,9 +72,6 @@ void ephy_gui_window_update_user_time
GtkWidget *ephy_gui_message_dialog_get_content_box (GtkWidget *dialog);
-void ephy_gui_message_dialog_set_wrap_mode (GtkMessageDialog *dialog,
- PangoWrapMode wrap_mode);
-
void ephy_gui_connect_checkbutton_to_gconf (GtkWidget *widget,
const char *pref);
--- epiphany-2.30.2/lib/widgets/ephy-location-entry.c 2010-02-11 15:51:53.000000000 +0100
+++ epiphany-2.30.5/lib/widgets/ephy-location-entry.c 2010-08-30 22:58:42.000000000 +0200
@@ -466,8 +466,6 @@ editable_changed_cb (GtkEditable *editab
g_regex_unref (quote_regex);
}
- update_favicon (entry);
-
g_signal_emit (entry, signals[USER_CHANGED], 0);
}
@@ -736,8 +734,8 @@ each_url_get_data_binder (EphyDragEachSe
g_free (title);
}
-#define DRAG_ICON_LAYOUT_BORDER 2
-#define DRAG_ICON_ICON_SPACING DRAG_ICON_LAYOUT_BORDER * 2
+#define DRAG_ICON_LAYOUT_PADDING 2
+#define DRAG_ICON_ICON_PADDING 4
#define DRAG_ICON_MAX_WIDTH_CHARS 32
static GdkPixmap *
@@ -754,8 +752,12 @@ favicon_create_drag_pixmap (EphyLocation
PangoFontMetrics *metrics;
int pixmap_height, pixmap_width;
int layout_width, layout_height;
- int icon_width = 0, icon_height = 0, offset_x = 0;
+ int icon_width = 0, icon_height = 0, favicon_offset_x = 0;
int char_width;
+ cairo_t *cr;
+ GtkStateType state;
+
+ state = gtk_widget_get_state (widget);
g_signal_emit (entry, signals[GET_LOCATION], 0, &address);
g_signal_emit (entry, signals[GET_TITLE], 0, &title);
@@ -776,8 +778,6 @@ favicon_create_drag_pixmap (EphyLocation
g_string_append (text, address);
}
- /* Now build the pixmap */
-
if (priv->favicon != NULL)
{
icon_width = gdk_pixbuf_get_width (priv->favicon);
@@ -787,7 +787,6 @@ favicon_create_drag_pixmap (EphyLocation
context = gtk_widget_get_pango_context (widget);
layout = pango_layout_new (context);
- context = gtk_widget_get_pango_context (widget);
style = gtk_widget_get_style (widget);
metrics = pango_context_get_metrics (context,
style->font_desc,
@@ -800,64 +799,57 @@ favicon_create_drag_pixmap (EphyLocation
pango_layout_set_width (layout, char_width * DRAG_ICON_MAX_WIDTH_CHARS);
pango_layout_set_text (layout, text->str, text->len);
- pango_layout_get_size (layout, &layout_width, &layout_height);
-
- pixmap_width = layout_width / PANGO_SCALE + DRAG_ICON_LAYOUT_BORDER * 2;
+ pango_layout_get_pixel_size (layout, &layout_width, &layout_height);
if (priv->favicon != NULL)
{
- offset_x = icon_width + 2 * DRAG_ICON_ICON_SPACING;
- pixmap_width += offset_x;
- pixmap_height = MAX (layout_height / PANGO_SCALE, icon_height) + DRAG_ICON_LAYOUT_BORDER * 2;
- }
- else
- {
- pixmap_height = layout_height / PANGO_SCALE + DRAG_ICON_LAYOUT_BORDER * 2;
+ favicon_offset_x = icon_width + (2 * DRAG_ICON_ICON_PADDING);
}
+ pixmap_width = layout_width + favicon_offset_x +
+ (DRAG_ICON_LAYOUT_PADDING * 2);
+ pixmap_height = MAX (layout_height, icon_height) +
+ (DRAG_ICON_LAYOUT_PADDING * 2);
+
drawable = gdk_pixmap_new (gtk_widget_get_window (widget),
- pixmap_width + 2,
+ pixmap_width + 2,
pixmap_height + 2,
-1);
+ cr = gdk_cairo_create (drawable);
+
+ cairo_rectangle (cr, 1, 1, pixmap_width, pixmap_height);
+ cairo_set_line_width (cr, 1.0);
- gdk_draw_rectangle (drawable,
- style->base_gc [gtk_widget_get_state (widget)],
- TRUE,
- 0, 0,
- pixmap_width + 1,
- pixmap_height + 1);
+ cairo_set_source_rgb (cr, 0.0, 0.0, 0.0);
+ cairo_stroke_preserve (cr);
+ gdk_cairo_set_source_color (cr, &style->bg[state]);
+ cairo_fill (cr);
if (priv->favicon != NULL)
{
- gdk_draw_pixbuf (drawable,
- style->fg_gc[gtk_widget_get_state (widget)],
- priv->favicon,
- 0, 0,
- 1 + DRAG_ICON_LAYOUT_BORDER + DRAG_ICON_ICON_SPACING,
- 1 + DRAG_ICON_LAYOUT_BORDER + (pixmap_height - icon_height) / 2,
- -1, -1,
- GDK_RGB_DITHER_NONE, 0, 0);
- }
-
- gdk_draw_layout (drawable,
- style->text_gc [gtk_widget_get_state (widget)],
- 1 + DRAG_ICON_LAYOUT_BORDER + offset_x,
- 1 + DRAG_ICON_LAYOUT_BORDER,
- layout);
-
- gdk_draw_rectangle (drawable,
- style->black_gc,
- FALSE,
- 0, 0,
- pixmap_width + 1,
- pixmap_height + 1);
+ double x;
+ double y;
+
+ x = 1 + DRAG_ICON_LAYOUT_PADDING + DRAG_ICON_ICON_PADDING;
+ y = 1 + DRAG_ICON_LAYOUT_PADDING + (pixmap_height - icon_height) / 2;
+ gdk_cairo_set_source_pixbuf (cr, priv->favicon, x, y);
+ cairo_rectangle (cr, x, y, icon_width, icon_height);
+ cairo_fill (cr);
+ }
+
+ cairo_move_to (cr,
+ 1 + DRAG_ICON_LAYOUT_PADDING + favicon_offset_x,
+ 1 + DRAG_ICON_LAYOUT_PADDING);
+ gdk_cairo_set_source_color (cr, &style->text[state]);
+ pango_cairo_show_layout (cr, layout);
+ cairo_destroy (cr);
g_object_unref (layout);
g_free (address);
g_free (title);
- g_string_free (text,TRUE);
+ g_string_free (text, TRUE);
return drawable;
}
@@ -1253,16 +1245,11 @@ ephy_location_entry_set_completion (Ephy
g_signal_connect_after (completion, "action-activated",
G_CALLBACK (action_activated_after_cb), entry);
- /* FIXME: this works fine, but the favicons seem to be
- * added-removed the view constantly, and the visual effect is
- * very ugly */
-#if 0
cell = gtk_cell_renderer_pixbuf_new ();
gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (completion),
cell, FALSE);
gtk_cell_layout_add_attribute (GTK_CELL_LAYOUT (completion),
cell, "pixbuf", favicon_col);
-#endif
cell = gtk_cell_renderer_text_new ();
g_object_set (cell,
--- epiphany-2.30.2/lib/widgets/ephy-spinner.c 2010-02-11 15:51:53.000000000 +0100
+++ epiphany-2.30.5/lib/widgets/ephy-spinner.c 2010-08-30 22:58:42.000000000 +0200
@@ -625,8 +625,7 @@ ephy_spinner_expose (GtkWidget *widget,
EphySpinnerImages *images;
GtkAllocation allocation;
GdkPixbuf *pixbuf;
- GdkWindow *window;
- GdkGC *gc;
+ cairo_t *cr;
int x_offset, y_offset, width, height;
GdkRectangle pix_area, dest;
@@ -675,15 +674,12 @@ ephy_spinner_expose (GtkWidget *widget,
return FALSE;
}
- window = gtk_widget_get_window (widget);
- gc = gdk_gc_new (window);
- gdk_draw_pixbuf (window, gc, pixbuf,
- dest.x - x_offset - allocation.x,
- dest.y - y_offset - allocation.y,
- dest.x, dest.y,
- dest.width, dest.height,
- GDK_RGB_DITHER_MAX, 0, 0);
- g_object_unref (gc);
+ cr = gdk_cairo_create (gtk_widget_get_window (widget));
+
+ gdk_cairo_set_source_pixbuf (cr, pixbuf, dest.x, dest.y);
+ cairo_paint (cr);
+
+ cairo_destroy (cr);
return FALSE;
}
--- epiphany-2.30.2/src/ephy-action-helper.h 2010-01-08 19:21:01.000000000 +0100
+++ epiphany-2.30.5/src/ephy-action-helper.h 2010-08-19 04:44:26.000000000 +0200
@@ -28,6 +28,11 @@
G_BEGIN_DECLS
+enum
+{
+ SENS_FLAG = 1 << 0
+};
+
void ephy_action_change_sensitivity_flags (GtkAction *action,
guint flags,
gboolean set);
--- epiphany-2.30.2/src/ephy-find-toolbar.c 2010-02-08 20:18:47.000000000 +0100
+++ epiphany-2.30.5/src/ephy-find-toolbar.c 2010-08-30 22:58:42.000000000 +0200
@@ -73,10 +73,16 @@ enum
typedef enum
{
- EPHY_FIND_FOUND = 0,
- EPHY_FIND_NOTFOUND = 1,
- EPHY_FIND_FOUNDWRAPPED = 2
-} EphyEmbedFindResult;
+ EPHY_FIND_RESULT_FOUND = 0,
+ EPHY_FIND_RESULT_NOTFOUND = 1,
+ EPHY_FIND_RESULT_FOUNDWRAPPED = 2
+} EphyFindResult;
+
+typedef enum
+{
+ EPHY_FIND_DIRECTION_NEXT,
+ EPHY_FIND_DIRECTION_PREV
+} EphyFindDirection;
static guint signals[LAST_SIGNAL];
@@ -131,7 +137,7 @@ set_status_notfound_cb (EphyFindToolbar
static void
set_status (EphyFindToolbar *toolbar,
- EphyEmbedFindResult result)
+ EphyFindResult result)
{
EphyFindToolbarPrivate *priv = toolbar->priv;
char *text = NULL;
@@ -139,10 +145,10 @@ set_status (EphyFindToolbar *toolbar,
switch (result)
{
- case EPHY_FIND_FOUND:
+ case EPHY_FIND_RESULT_FOUND:
text = NULL;
break;
- case EPHY_FIND_NOTFOUND:
+ case EPHY_FIND_RESULT_NOTFOUND:
{
text = _("Not found");
@@ -155,7 +161,7 @@ set_status (EphyFindToolbar *toolbar,
priv->source_id = g_timeout_add (500, (GSourceFunc) set_status_notfound_cb, toolbar);
}
break;
- case EPHY_FIND_FOUNDWRAPPED:
+ case EPHY_FIND_RESULT_FOUNDWRAPPED:
text = _("Wrapped");
break;
}
@@ -239,15 +245,16 @@ ephy_find_toolbar_mark_matches (EphyFind
webkit_web_view_set_highlight_text_matches (web_view, TRUE);
}
-static EphyEmbedFindResult
+static EphyFindResult
real_find (EphyFindToolbarPrivate *priv,
- gboolean forward)
+ EphyFindDirection direction)
{
WebKitWebView *web_view = priv->web_view;
gboolean case_sensitive = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (priv->case_sensitive));
+ gboolean forward = (direction == EPHY_FIND_DIRECTION_NEXT);
if (!priv->find_string || !g_strcmp0 (priv->find_string, ""))
- return EPHY_FIND_NOTFOUND;
+ return EPHY_FIND_RESULT_NOTFOUND;
if (!webkit_web_view_search_text
(web_view, priv->find_string, case_sensitive, forward, FALSE)) {
@@ -255,27 +262,27 @@ real_find (EphyFindToolbarPrivate *priv,
if (!webkit_web_view_search_text
(web_view, priv->find_string, case_sensitive, forward, TRUE)) {
/* there's no result */
- return EPHY_FIND_NOTFOUND;
+ return EPHY_FIND_RESULT_NOTFOUND;
} else {
/* found wrapped */
- return EPHY_FIND_FOUNDWRAPPED;
+ return EPHY_FIND_RESULT_FOUNDWRAPPED;
}
}
- return EPHY_FIND_FOUND;
+ return EPHY_FIND_RESULT_FOUND;
}
static gboolean
do_search (EphyFindToolbar *toolbar)
{
EphyFindToolbarPrivate *priv = toolbar->priv;
- EphyEmbedFindResult result;
+ EphyFindResult result;
priv->find_source_id = 0;
ephy_find_toolbar_mark_matches (toolbar);
- result = real_find (priv, TRUE);
+ result = real_find (priv, EPHY_FIND_DIRECTION_NEXT);
set_status (toolbar, result);
return FALSE;
@@ -429,11 +436,12 @@ case_sensitive_toggled_cb (GtkWidget *ch
*/
if (case_sensitive)
{
- EphyEmbedFindResult result;
+ EphyFindResult result;
- result = real_find (toolbar->priv, FALSE);
- if (result != EPHY_FIND_NOTFOUND)
- result = real_find (toolbar->priv, TRUE);
+ result = real_find (toolbar->priv, EPHY_FIND_DIRECTION_PREV);
+ if (result != EPHY_FIND_RESULT_NOTFOUND)
+ result = real_find (toolbar->priv,
+ EPHY_FIND_DIRECTION_NEXT);
set_status (toolbar, result);
}
@@ -778,7 +786,8 @@ ephy_find_toolbar_set_embed (EphyFindToo
typedef struct
{
EphyFindToolbar *toolbar;
- gboolean next;
+ gboolean direction;
+ gboolean highlight;
} FindAgainCBStruct;
static void
@@ -787,24 +796,19 @@ find_again_data_destroy_cb (FindAgainCBS
g_slice_free (FindAgainCBStruct, data);
}
-static EphyEmbedFindResult
-ephy_find_toolbar_find_again (EphyFindToolbar *toolbar,
- gboolean forward,
- gboolean links_only)
-{
- EphyFindToolbarPrivate *priv = toolbar->priv;
-
- return real_find (priv, forward);
-}
-
static gboolean
find_again_cb (FindAgainCBStruct *data)
{
- EphyEmbedFindResult result;
+ EphyFindResult result;
EphyFindToolbarPrivate *priv = data->toolbar->priv;
- result = ephy_find_toolbar_find_again (data->toolbar, data->next,
- priv->links_only);
+ result = real_find (priv, data->direction);
+
+ /* Highlight matches again if the toolbar was hidden when the user
+ * requested find-again. */
+ if (result != EPHY_FIND_RESULT_NOTFOUND && data->highlight)
+ ephy_find_toolbar_mark_matches (data->toolbar);
+
set_status (data->toolbar, result);
priv->find_again_source_id = 0;
@@ -812,28 +816,30 @@ find_again_cb (FindAgainCBStruct *data)
return FALSE;
}
-void
-ephy_find_toolbar_find_next (EphyFindToolbar *toolbar)
+static void
+find_again (EphyFindToolbar *toolbar, EphyFindDirection direction)
{
GtkWidget *widget = GTK_WIDGET (toolbar);
EphyFindToolbarPrivate *priv = toolbar->priv;
FindAgainCBStruct *data;
+ gboolean visible;
- if (!gtk_widget_get_visible (widget)) {
+ visible = gtk_widget_get_visible (widget);
+ if (!visible) {
gtk_widget_show (widget);
gtk_widget_grab_focus (widget);
}
- /* We need to do this here (and in find_previous) to give time to the embed
- * to sync with the size change due to the toolbar being shown, otherwise
- * the toolbar can obscure the result. See GNOME bug #415074.
+ /* We need to do this to give time to the embed to sync with the size
+ * change due to the toolbar being shown, otherwise the toolbar can
+ * obscure the result. See GNOME bug #415074.
*/
-
if (priv->find_again_source_id != 0) return;
data = g_slice_new0 (FindAgainCBStruct);
data->toolbar = toolbar;
- data->next = TRUE;
+ data->direction = direction;
+ data->highlight = !visible;
priv->find_again_source_id = g_idle_add_full (G_PRIORITY_DEFAULT_IDLE,
(GSourceFunc) find_again_cb,
@@ -842,27 +848,15 @@ ephy_find_toolbar_find_next (EphyFindToo
}
void
-ephy_find_toolbar_find_previous (EphyFindToolbar *toolbar)
+ephy_find_toolbar_find_next (EphyFindToolbar *toolbar)
{
- GtkWidget *widget = GTK_WIDGET (toolbar);
- EphyFindToolbarPrivate *priv = toolbar->priv;
- FindAgainCBStruct *data;
-
- if (!gtk_widget_get_visible (widget)) {
- gtk_widget_show (widget);
- gtk_widget_grab_focus (widget);
- }
-
- if (priv->find_again_source_id != 0) return;
-
- data = g_slice_new0 (FindAgainCBStruct);
- data->toolbar = toolbar;
- data->next = FALSE;
+ find_again (toolbar, EPHY_FIND_DIRECTION_NEXT);
+}
- priv->find_again_source_id = g_idle_add_full (G_PRIORITY_DEFAULT_IDLE,
- (GSourceFunc) find_again_cb,
- data,
- (GDestroyNotify) find_again_data_destroy_cb);
+void
+ephy_find_toolbar_find_previous (EphyFindToolbar *toolbar)
+{
+ find_again (toolbar, EPHY_FIND_DIRECTION_PREV);
}
void
@@ -885,15 +879,6 @@ ephy_find_toolbar_open (EphyFindToolbar
gtk_widget_grab_focus (GTK_WIDGET (toolbar));
}
-static void
-ephy_find_toolbar_set_selection (EphyFindToolbar *toolbar,
- gboolean attention)
-{
- WebKitWebView *web_view = toolbar->priv->web_view;
-
- webkit_web_view_set_highlight_text_matches (web_view, attention);
-}
-
void
ephy_find_toolbar_close (EphyFindToolbar *toolbar)
{
@@ -902,7 +887,8 @@ ephy_find_toolbar_close (EphyFindToolbar
gtk_widget_hide (GTK_WIDGET (toolbar));
if (priv->web_view == NULL) return;
- ephy_find_toolbar_set_selection (toolbar, FALSE);
+
+ webkit_web_view_set_highlight_text_matches (priv->web_view, FALSE);
}
void
--- epiphany-2.30.2/src/ephy-location-action.c 2010-02-15 20:05:56.000000000 +0100
+++ epiphany-2.30.5/src/ephy-location-action.c 2010-08-30 22:58:42.000000000 +0200
@@ -101,7 +101,6 @@ match_func (GtkEntryCompletion *completi
char *item = NULL;
char *url = NULL;
char *keywords = NULL;
- char *extra = NULL;
gboolean ret = FALSE;
GtkTreeModel *model;
@@ -113,7 +112,6 @@ match_func (GtkEntryCompletion *completi
EPHY_COMPLETION_TEXT_COL, &item,
EPHY_COMPLETION_URL_COL, &url,
EPHY_COMPLETION_KEYWORDS_COL, &keywords,
- EPHY_COMPLETION_EXTRA_COL, &extra,
-1);
if (!key)
@@ -441,7 +439,7 @@ focus_out_event_cb (GtkWidget *entry,
static void
switch_page_cb (GtkNotebook *notebook,
- GtkNotebookPage *page,
+ GtkWidget *page,
guint page_num,
GtkAction *action)
{
--- epiphany-2.30.2/src/ephy-navigation-action.c 2010-04-07 11:47:52.000000000 +0200
+++ epiphany-2.30.5/src/ephy-navigation-action.c 2010-08-30 22:55:16.000000000 +0200
@@ -25,11 +25,8 @@
#include "ephy-navigation-action.h"
#include "ephy-debug.h"
-#include "ephy-embed-container.h"
#include "ephy-embed-shell.h"
-#include "ephy-embed-utils.h"
#include "ephy-favicon-cache.h"
-#include "ephy-gui.h"
#include "ephy-history.h"
#include "ephy-link.h"
#include "ephy-shell.h"
@@ -39,21 +36,11 @@
#include <gtk/gtk.h>
#include <webkit/webkit.h>
-#define HISTORY_ITEM_DATA_KEY "HistoryItem"
-#define URL_DATA_KEY "GoURL"
-
#define EPHY_NAVIGATION_ACTION_GET_PRIVATE(object)(G_TYPE_INSTANCE_GET_PRIVATE ((object), EPHY_TYPE_NAVIGATION_ACTION, EphyNavigationActionPrivate))
-typedef enum
-{
- WEBKIT_HISTORY_BACKWARD,
- WEBKIT_HISTORY_FORWARD
-} WebKitHistoryType;
-
struct _EphyNavigationActionPrivate
{
EphyWindow *window;
- EphyNavigationDirection direction;
char *arrow_tooltip;
guint statusbar_cid;
};
@@ -62,7 +49,6 @@ enum
{
PROP_0,
PROP_ARROW_TOOLTIP,
- PROP_DIRECTION,
PROP_WINDOW
};
@@ -71,264 +57,15 @@ static void ephy_navigation_action_class
G_DEFINE_TYPE (EphyNavigationAction, ephy_navigation_action, EPHY_TYPE_LINK_ACTION)
-#define MAX_LABEL_LENGTH 48
-
-static GtkWidget *
-new_history_menu_item (const char *origtext,
- const char *address)
-{
- EphyFaviconCache *cache;
- EphyHistory *history;
- GtkWidget *item, *image;
- GdkPixbuf *icon = NULL;
- GtkLabel *label;
- const char *icon_address;
-
- g_return_val_if_fail (address != NULL && origtext != NULL, NULL);
-
- item = gtk_image_menu_item_new_with_label (origtext);
-
- label = GTK_LABEL (gtk_bin_get_child (GTK_BIN (item)));
- gtk_label_set_ellipsize (label, PANGO_ELLIPSIZE_END);
- gtk_label_set_max_width_chars (label, MAX_LABEL_LENGTH);
-
- history = EPHY_HISTORY
- (ephy_embed_shell_get_global_history (embed_shell));
- icon_address = ephy_history_get_icon (history, address);
-
- cache = EPHY_FAVICON_CACHE
- (ephy_embed_shell_get_favicon_cache (embed_shell));
- icon = ephy_favicon_cache_get (cache, icon_address);
-
- if (icon != NULL)
- {
- image = gtk_image_new_from_pixbuf (icon);
- gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (item), image);
- gtk_widget_show (image);
- g_object_unref (icon);
- }
-
- gtk_widget_show (item);
-
- return item;
-}
-
-static void
-activate_back_or_forward_menu_item_cb (GtkWidget *menuitem,
- EphyNavigationAction *action)
-{
- WebKitWebHistoryItem *item;
- EphyEmbed *embed;
-
- embed = ephy_embed_container_get_active_child (EPHY_EMBED_CONTAINER (action->priv->window));
- g_return_if_fail (embed != NULL);
-
- if (ephy_gui_is_middle_click ())
- {
- embed = ephy_link_open (EPHY_LINK (action), "about:blank", NULL,
- EPHY_LINK_NEW_TAB);
- g_return_if_fail (embed != NULL);
- }
-
- item = (WebKitWebHistoryItem*)g_object_get_data (G_OBJECT (menuitem), HISTORY_ITEM_DATA_KEY);
- g_return_if_fail (item != NULL);
-
- webkit_web_view_go_to_back_forward_item (EPHY_GET_WEBKIT_WEB_VIEW_FROM_EMBED (embed), item);
-}
-
-static void
-select_menu_item_cb (GtkWidget *menuitem,
- EphyNavigationAction *action)
-{
- const char *url;
- GtkWidget *statusbar;
- WebKitWebHistoryItem *item;
-
- item = (WebKitWebHistoryItem*)g_object_get_data (G_OBJECT (menuitem), HISTORY_ITEM_DATA_KEY);
- if (item)
- {
- url = webkit_web_history_item_get_uri (item);
- }
- else
- {
- url = g_object_get_data (G_OBJECT (menuitem), URL_DATA_KEY);
- g_return_if_fail (url != NULL);
- }
-
- statusbar = ephy_window_get_statusbar (action->priv->window);
-
- gtk_statusbar_push (GTK_STATUSBAR (statusbar), action->priv->statusbar_cid, url);
-}
-
-static void
-deselect_menu_item_cb (GtkWidget *menuitem,
- EphyNavigationAction *action)
-{
- GtkWidget *statusbar;
-
- statusbar = ephy_window_get_statusbar (action->priv->window);
-
- gtk_statusbar_pop (GTK_STATUSBAR (statusbar), action->priv->statusbar_cid);
-}
-
-static void
-activate_up_menu_item_cb (GtkWidget *menuitem,
- EphyNavigationAction *action)
-{
- EphyEmbed *embed;
- char *url;
-
- embed = ephy_embed_container_get_active_child (EPHY_EMBED_CONTAINER (action->priv->window));
- g_return_if_fail (embed != NULL);
-
- url = g_object_get_data (G_OBJECT (menuitem), URL_DATA_KEY);
- g_return_if_fail (url != NULL);
-
- ephy_link_open (EPHY_LINK (action), url, NULL,
- ephy_gui_is_middle_click () ? EPHY_LINK_NEW_TAB : 0);
-}
-
-static GList*
-webkit_construct_history_list (WebKitWebView *web_view, WebKitHistoryType hist_type)
-{
- WebKitWebBackForwardList *web_back_forward_list;
- GList *webkit_items;
-
- web_back_forward_list = webkit_web_view_get_back_forward_list (web_view);
-
- if (hist_type == WEBKIT_HISTORY_FORWARD)
- webkit_items = g_list_reverse (webkit_web_back_forward_list_get_forward_list_with_limit (web_back_forward_list,
- EPHY_WEBKIT_BACK_FORWARD_LIMIT));
- else
- webkit_items = webkit_web_back_forward_list_get_back_list_with_limit (web_back_forward_list,
- EPHY_WEBKIT_BACK_FORWARD_LIMIT);
-
- return webkit_items;
-}
-
-static GtkWidget *
-build_back_or_forward_menu (EphyNavigationAction *action)
-{
- EphyWindow *window = action->priv->window;
- GtkMenuShell *menu;
- EphyEmbed *embed;
- GList *list, *l;
- WebKitWebView *web_view;
-
- embed = ephy_embed_container_get_active_child (EPHY_EMBED_CONTAINER (window));
- g_return_val_if_fail (embed != NULL, NULL);
-
- web_view = EPHY_GET_WEBKIT_WEB_VIEW_FROM_EMBED (embed);
- g_return_val_if_fail (web_view != NULL, NULL);
-
- if (action->priv->direction == EPHY_NAVIGATION_DIRECTION_BACK)
- list = webkit_construct_history_list (web_view,
- WEBKIT_HISTORY_BACKWARD);
- else
- list = webkit_construct_history_list (web_view,
- WEBKIT_HISTORY_FORWARD);
-
- menu = GTK_MENU_SHELL (gtk_menu_new ());
- l = list;
-
- for (l = list; l != NULL; l = l->next)
- {
- GtkWidget *item;
- WebKitWebHistoryItem *hitem;
- const char *url;
- char *title;
-
- hitem = (WebKitWebHistoryItem*)l->data;
- url = webkit_web_history_item_get_uri (hitem);
-
- title = g_strdup (webkit_web_history_item_get_title (hitem));
-
- if ((title == NULL || g_strstrip (title)[0] == '\0'))
- item = new_history_menu_item (url, url);
- else
- item = new_history_menu_item (title, url);
-
- g_free (title);
-
- g_object_set_data_full (G_OBJECT (item), HISTORY_ITEM_DATA_KEY,
- g_object_ref (hitem), g_object_unref);
-
- g_signal_connect (item, "activate",
- G_CALLBACK (activate_back_or_forward_menu_item_cb),
- action);
- g_signal_connect (item, "select",
- G_CALLBACK (select_menu_item_cb),
- action);
- g_signal_connect (item, "deselect",
- G_CALLBACK (deselect_menu_item_cb),
- action);
-
- gtk_menu_shell_append (menu, item);
- gtk_widget_show_all (item);
- }
-
- g_list_free (list);
-
- return GTK_WIDGET (menu);
-}
+#define MAX_LABEL_LENGTH 48
static GtkWidget *
-build_up_menu (EphyNavigationAction *action)
+build_dropdown_menu (EphyNavigationAction *action)
{
- EphyWindow *window = action->priv->window;
- EphyEmbed *embed;
- EphyHistory *history;
- GtkMenuShell *menu;
- GtkWidget *item;
- GSList *list, *l;
- char *url;
-
- embed = ephy_embed_container_get_active_child (EPHY_EMBED_CONTAINER (window));
- g_return_val_if_fail (embed != NULL, NULL);
-
- menu = GTK_MENU_SHELL (gtk_menu_new ());
-
- history = EPHY_HISTORY
- (ephy_embed_shell_get_global_history (embed_shell));
+ EphyNavigationActionClass *class = EPHY_NAVIGATION_ACTION_GET_CLASS (action);
- list = ephy_web_view_get_go_up_list (ephy_embed_get_web_view (embed));
-
- for (l = list; l != NULL; l = l->next)
- {
- EphyNode *node;
- const char *title = NULL;
-
- url = g_strdup (l->data);
-
- if (url == NULL) continue;
-
- node = ephy_history_get_page (history, url);
- if (node != NULL)
- {
- title = ephy_node_get_property_string (node, EPHY_NODE_PAGE_PROP_TITLE);
- }
-
- item = new_history_menu_item (title ? title : url, url);
-
- g_object_set_data_full (G_OBJECT (item), URL_DATA_KEY, url,
- (GDestroyNotify) g_free);
- g_signal_connect (item, "activate",
- G_CALLBACK (activate_up_menu_item_cb), action);
- g_signal_connect (item, "select",
- G_CALLBACK (select_menu_item_cb), action);
- g_signal_connect (item, "deselect",
- G_CALLBACK (deselect_menu_item_cb), action);
-
- gtk_menu_shell_append (menu, item);
- gtk_widget_show (item);
- }
-
- /* the list data has been consumed */
- g_slist_foreach (list, (GFunc) g_free, NULL);
- g_slist_free (list);
-
- return GTK_WIDGET (menu);
+ return class->build_dropdown_menu (action);
}
static void
@@ -337,22 +74,9 @@ menu_activated_cb (GtkMenuToolButton *bu
{
GtkWidget *menu = NULL;
- LOG ("menu_activated_cb dir %d", action->priv->direction);
-
- switch (action->priv->direction)
- {
- case EPHY_NAVIGATION_DIRECTION_UP:
- menu = build_up_menu (action);
- break;
- case EPHY_NAVIGATION_DIRECTION_FORWARD:
- case EPHY_NAVIGATION_DIRECTION_BACK:
- menu = build_back_or_forward_menu (action);
- break;
- default:
- g_assert_not_reached ();
- break;
- }
+ LOG ("menu_activated_cb");
+ menu = build_dropdown_menu (action);
gtk_menu_tool_button_set_menu (button, menu);
}
@@ -382,75 +106,6 @@ connect_proxy (GtkAction *gaction,
}
static void
-ephy_navigation_action_activate (GtkAction *gtk_action)
-{
- EphyNavigationAction *action = EPHY_NAVIGATION_ACTION (gtk_action);
- EphyWindow *window = action->priv->window;
- EphyEmbed *embed;
- WebKitWebView *web_view;
-
- embed = ephy_embed_container_get_active_child (EPHY_EMBED_CONTAINER (window));
- g_return_if_fail (embed != NULL);
-
- web_view = EPHY_GET_WEBKIT_WEB_VIEW_FROM_EMBED (embed);
-
- if (action->priv->direction == EPHY_NAVIGATION_DIRECTION_BACK)
- {
- if (ephy_gui_is_middle_click ())
- {
- embed = ephy_shell_new_tab (ephy_shell_get_default (),
- EPHY_WINDOW (gtk_widget_get_toplevel (GTK_WIDGET (embed))),
- embed,
- NULL,
- EPHY_NEW_TAB_IN_EXISTING_WINDOW);
- web_view = EPHY_GET_WEBKIT_WEB_VIEW_FROM_EMBED (embed);
- }
- webkit_web_view_go_back (web_view);
- }
- else if (action->priv->direction == EPHY_NAVIGATION_DIRECTION_FORWARD)
- {
- if (ephy_gui_is_middle_click ())
- {
- const char *forward_uri;
- WebKitWebHistoryItem *forward_item;
- WebKitWebBackForwardList *history;
-
- /* Forward history is not copied when opening
- a new tab, so get the forward URI manually
- and load it */
- history = webkit_web_view_get_back_forward_list (EPHY_GET_WEBKIT_WEB_VIEW_FROM_EMBED (embed));
- forward_item = webkit_web_back_forward_list_get_forward_item (history);
- forward_uri = webkit_web_history_item_get_original_uri (forward_item);
-
- embed = ephy_shell_new_tab (ephy_shell_get_default (),
- EPHY_WINDOW (gtk_widget_get_toplevel (GTK_WIDGET (embed))),
- embed,
- NULL,
- EPHY_NEW_TAB_IN_EXISTING_WINDOW);
-
- web_view = EPHY_GET_WEBKIT_WEB_VIEW_FROM_EMBED (embed);
- webkit_web_view_load_uri (web_view, forward_uri);
- }
- else
- {
- webkit_web_view_go_forward (web_view);
- }
- }
- else if (action->priv->direction == EPHY_NAVIGATION_DIRECTION_UP)
- {
- GSList *up_list;
-
- up_list = ephy_web_view_get_go_up_list (ephy_embed_get_web_view (embed));
- ephy_link_open (EPHY_LINK (action),
- up_list->data,
- NULL,
- ephy_gui_is_middle_click () ? EPHY_LINK_NEW_TAB : 0);
- g_slist_foreach (up_list, (GFunc) g_free, NULL);
- g_slist_free (up_list);
- }
-}
-
-static void
ephy_navigation_action_init (EphyNavigationAction *action)
{
action->priv = EPHY_NAVIGATION_ACTION_GET_PRIVATE (action);
@@ -480,9 +135,6 @@ ephy_navigation_action_set_property (GOb
nav->priv->arrow_tooltip = g_value_dup_string (value);
g_object_notify (object, "tooltip");
break;
- case PROP_DIRECTION:
- nav->priv->direction = g_value_get_int (value);
- break;
case PROP_WINDOW:
{
GtkWidget *statusbar;
@@ -513,9 +165,6 @@ ephy_navigation_action_get_property (GOb
case PROP_ARROW_TOOLTIP:
g_value_set_string (value, nav->priv->arrow_tooltip);
break;
- case PROP_DIRECTION:
- g_value_set_int (value, nav->priv->direction);
- break;
case PROP_WINDOW:
g_value_set_object (value, nav->priv->window);
break;
@@ -534,7 +183,8 @@ ephy_navigation_action_class_init (EphyN
action_class->toolbar_item_type = GTK_TYPE_MENU_TOOL_BUTTON;
action_class->connect_proxy = connect_proxy;
- action_class->activate = ephy_navigation_action_activate;
+
+ class->build_dropdown_menu = NULL;
g_object_class_install_property (object_class,
PROP_ARROW_TOOLTIP,
@@ -543,13 +193,6 @@ ephy_navigation_action_class_init (EphyN
G_PARAM_READWRITE | G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB));
g_object_class_install_property (object_class,
- PROP_DIRECTION,
- g_param_spec_int ("direction", NULL, NULL,
- 0,
- G_MAXINT,
- 0,
- G_PARAM_READWRITE | G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB));
- g_object_class_install_property (object_class,
PROP_WINDOW,
g_param_spec_object ("window", NULL, NULL,
G_TYPE_OBJECT,
@@ -557,3 +200,59 @@ ephy_navigation_action_class_init (EphyN
g_type_class_add_private (object_class, sizeof (EphyNavigationActionPrivate));
}
+
+EphyWindow *
+_ephy_navigation_action_get_window (EphyNavigationAction *action)
+{
+ g_return_val_if_fail (EPHY_IS_NAVIGATION_ACTION (action), NULL);
+
+ return action->priv->window;
+}
+
+guint
+_ephy_navigation_action_get_statusbar_context_id (EphyNavigationAction *action)
+{
+ g_return_val_if_fail (EPHY_IS_NAVIGATION_ACTION (action), 0);
+
+ return action->priv->statusbar_cid;
+}
+
+GtkWidget *
+_ephy_navigation_action_new_history_menu_item (const char *origtext,
+ const char *address)
+{
+ EphyFaviconCache *cache;
+ EphyHistory *history;
+ GtkWidget *item, *image;
+ GdkPixbuf *icon = NULL;
+ GtkLabel *label;
+ const char *icon_address;
+
+ g_return_val_if_fail (address != NULL && origtext != NULL, NULL);
+
+ item = gtk_image_menu_item_new_with_label (origtext);
+
+ label = GTK_LABEL (gtk_bin_get_child (GTK_BIN (item)));
+ gtk_label_set_ellipsize (label, PANGO_ELLIPSIZE_END);
+ gtk_label_set_max_width_chars (label, MAX_LABEL_LENGTH);
+
+ history = EPHY_HISTORY
+ (ephy_embed_shell_get_global_history (embed_shell));
+ icon_address = ephy_history_get_icon (history, address);
+
+ cache = EPHY_FAVICON_CACHE
+ (ephy_embed_shell_get_favicon_cache (embed_shell));
+ icon = ephy_favicon_cache_get (cache, icon_address);
+
+ if (icon != NULL)
+ {
+ image = gtk_image_new_from_pixbuf (icon);
+ gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (item), image);
+ gtk_widget_show (image);
+ g_object_unref (icon);
+ }
+
+ gtk_widget_show (item);
+
+ return item;
+}
--- epiphany-2.30.2/src/ephy-navigation-action.h 2010-01-08 19:21:01.000000000 +0100
+++ epiphany-2.30.5/src/ephy-navigation-action.h 2010-08-19 04:44:26.000000000 +0200
@@ -26,6 +26,7 @@
#define EPHY_NAVIGATION_ACTION_H
#include "ephy-link-action.h"
+#include "ephy-window.h"
G_BEGIN_DECLS
@@ -40,17 +41,10 @@ typedef struct _EphyNavigationAction Ep
typedef struct _EphyNavigationActionPrivate EphyNavigationActionPrivate;
typedef struct _EphyNavigationActionClass EphyNavigationActionClass;
-typedef enum
-{
- EPHY_NAVIGATION_DIRECTION_UP,
- EPHY_NAVIGATION_DIRECTION_BACK,
- EPHY_NAVIGATION_DIRECTION_FORWARD
-} EphyNavigationDirection;
-
struct _EphyNavigationAction
{
EphyLinkAction parent;
-
+
/*< private >*/
EphyNavigationActionPrivate *priv;
};
@@ -58,10 +52,21 @@ struct _EphyNavigationAction
struct _EphyNavigationActionClass
{
EphyLinkActionClass parent_class;
+
+ /*< virtual >*/
+ GtkWidget *(*build_dropdown_menu) (EphyNavigationAction *action);
};
GType ephy_navigation_action_get_type (void);
+/*< Protected >*/
+
+EphyWindow *_ephy_navigation_action_get_window (EphyNavigationAction *action);
+
+guint _ephy_navigation_action_get_statusbar_context_id (EphyNavigationAction *action);
+
+GtkWidget *_ephy_navigation_action_new_history_menu_item (const char *origtext,
+ const char *address);
G_END_DECLS
#endif
--- epiphany-2.30.2/src/ephy-navigation-history-action.c 1970-01-01 01:00:00.000000000 +0100
+++ epiphany-2.30.5/src/ephy-navigation-history-action.c 2010-08-30 22:55:16.000000000 +0200
@@ -0,0 +1,465 @@
+/*
+ * Copyright © 2003, 2004 Marco Pesenti Gritti
+ * Copyright © 2003, 2004 Christian Persch
+ * Copyright © 2008 Jan Alonzo
+ * Copyright © 2009 Igalia S.L.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2, or (at your option)
+ * any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ */
+
+#include "config.h"
+#include "ephy-navigation-history-action.h"
+
+#include "ephy-action-helper.h"
+#include "ephy-debug.h"
+#include "ephy-embed-container.h"
+#include "ephy-embed-shell.h"
+#include "ephy-embed-utils.h"
+#include "ephy-gui.h"
+#include "ephy-history.h"
+#include "ephy-link.h"
+#include "ephy-shell.h"
+#include "ephy-type-builtins.h"
+#include "ephy-window.h"
+
+#include <gtk/gtk.h>
+#include <webkit/webkit.h>
+
+#define HISTORY_ITEM_DATA_KEY "HistoryItem"
+
+#define EPHY_NAVIGATION_HISTORY_ACTION_GET_PRIVATE(object) \
+ (G_TYPE_INSTANCE_GET_PRIVATE ((object), \
+ EPHY_TYPE_NAVIGATION_HISTORY_ACTION, \
+ EphyNavigationHistoryActionPrivate))
+
+typedef enum {
+ WEBKIT_HISTORY_BACKWARD,
+ WEBKIT_HISTORY_FORWARD
+} WebKitHistoryType;
+
+struct _EphyNavigationHistoryActionPrivate {
+ EphyNavigationHistoryDirection direction;
+ EphyHistory *history;
+};
+
+enum {
+ PROP_0,
+ PROP_DIRECTION
+};
+
+static void ephy_navigation_history_action_init (EphyNavigationHistoryAction *action);
+static void ephy_navigation_history_action_class_init (EphyNavigationHistoryActionClass *klass);
+
+G_DEFINE_TYPE (EphyNavigationHistoryAction, ephy_navigation_history_action, EPHY_TYPE_NAVIGATION_ACTION)
+
+static void
+set_new_back_history (EphyEmbed *source, EphyEmbed *dest, gint offset)
+{
+ WebKitWebView *source_view, *dest_view;
+ WebKitWebBackForwardList* source_list, *dest_list;
+ WebKitWebHistoryItem *item;
+ GList *items;
+ guint limit;
+ guint i;
+
+ g_return_if_fail (EPHY_IS_EMBED (source));
+ g_return_if_fail (EPHY_IS_EMBED (dest));
+
+ source_view = EPHY_GET_WEBKIT_WEB_VIEW_FROM_EMBED (source);
+ dest_view = EPHY_GET_WEBKIT_WEB_VIEW_FROM_EMBED (dest);
+
+ source_list = webkit_web_view_get_back_forward_list (source_view);
+ dest_list = webkit_web_view_get_back_forward_list (dest_view);
+
+ if (offset >= 0) {
+ /* Copy the whole back history in this case (positive offset) */
+ ephy_web_view_copy_back_history (ephy_embed_get_web_view (source),
+ ephy_embed_get_web_view (dest));
+
+ items = webkit_web_back_forward_list_get_forward_list_with_limit (source_list,
+ EPHY_WEBKIT_BACK_FORWARD_LIMIT);
+ limit = offset - 1;
+ } else {
+ items = webkit_web_back_forward_list_get_back_list_with_limit (source_list,
+ EPHY_WEBKIT_BACK_FORWARD_LIMIT);
+ limit = g_list_length (items) + offset;
+ }
+
+ /* Add the remaining items to the BackForward list */
+ items = g_list_reverse (items);
+ for (i = 0; i < limit; i++) {
+ item = webkit_web_history_item_copy ((WebKitWebHistoryItem*)items->data);
+ webkit_web_back_forward_list_add_item (dest_list, item);
+ g_object_unref (item);
+
+ items = items->next;
+ }
+ g_list_free (items);
+}
+
+static void
+middle_click_handle_on_history_menu_item (EphyNavigationHistoryAction *action,
+ EphyEmbed *embed,
+ WebKitWebHistoryItem *item)
+{
+ EphyEmbed *new_embed = NULL;
+ WebKitWebView *web_view;
+ WebKitWebBackForwardList *history;
+ GList *list;
+ const gchar *url;
+ guint current;
+ gint offset;
+
+ web_view = EPHY_GET_WEBKIT_WEB_VIEW_FROM_EMBED (embed);
+
+ /* Save old history and item's offset from current */
+ history = webkit_web_view_get_back_forward_list (web_view);
+ if (action->priv->direction == EPHY_NAVIGATION_HISTORY_DIRECTION_BACK) {
+ list = webkit_web_back_forward_list_get_back_list_with_limit (history,
+ EPHY_WEBKIT_BACK_FORWARD_LIMIT);
+ current = -1;
+ } else {
+ list = webkit_web_back_forward_list_get_forward_list_with_limit (history,
+ EPHY_WEBKIT_BACK_FORWARD_LIMIT);
+ current = g_list_length (list);
+ }
+ offset = current - g_list_index (list, item);
+
+ new_embed = ephy_shell_new_tab (ephy_shell_get_default (),
+ EPHY_WINDOW (gtk_widget_get_toplevel (GTK_WIDGET (embed))),
+ embed,
+ NULL,
+ EPHY_NEW_TAB_IN_EXISTING_WINDOW |
+ EPHY_NEW_TAB_DONT_COPY_HISTORY);
+ g_return_if_fail (new_embed != NULL);
+
+ /* We manually set the back history instead of trusting
+ ephy_shell_new_tab because the logic is more complex than
+ usual, due to handling also the forward history */
+ set_new_back_history (embed, new_embed, offset);
+
+ /* Load the new URL */
+ url = webkit_web_history_item_get_original_uri (item);
+ ephy_web_view_load_url (ephy_embed_get_web_view (new_embed), url);
+}
+
+static void
+activate_back_or_forward_menu_item_cb (GtkWidget *menuitem,
+ EphyNavigationHistoryAction *action)
+{
+ WebKitWebHistoryItem *item;
+ EphyWindow *window;
+ EphyEmbed *embed;
+
+ window = _ephy_navigation_action_get_window (EPHY_NAVIGATION_ACTION (action));
+ embed = ephy_embed_container_get_active_child (EPHY_EMBED_CONTAINER (window));
+ g_return_if_fail (embed != NULL);
+
+ item = (WebKitWebHistoryItem*)g_object_get_data (G_OBJECT (menuitem), HISTORY_ITEM_DATA_KEY);
+ g_return_if_fail (item != NULL);
+
+ if (ephy_gui_is_middle_click ()) {
+ middle_click_handle_on_history_menu_item (action, embed, item);
+ } else {
+ WebKitWebView *web_view;
+
+ web_view = EPHY_GET_WEBKIT_WEB_VIEW_FROM_EMBED (embed);
+ webkit_web_view_go_to_back_forward_item (web_view, item);
+ }
+}
+
+static void
+select_menu_item_cb (GtkWidget *menuitem,
+ EphyNavigationHistoryAction *action)
+{
+ WebKitWebHistoryItem *item;
+
+ item = (WebKitWebHistoryItem*)g_object_get_data (G_OBJECT (menuitem),
+ HISTORY_ITEM_DATA_KEY);
+ if (item) {
+ const char *url;
+ EphyWindow *window;
+ EphyNavigationAction *nav_action;
+ GtkWidget *statusbar;
+ guint statusbar_cid;
+
+ url = webkit_web_history_item_get_uri (item);
+ window = _ephy_navigation_action_get_window (EPHY_NAVIGATION_ACTION (action));
+ statusbar = ephy_window_get_statusbar (window);
+
+ /* Update status bar */
+ nav_action = EPHY_NAVIGATION_ACTION (action);
+ statusbar_cid = _ephy_navigation_action_get_statusbar_context_id (nav_action);
+ gtk_statusbar_push (GTK_STATUSBAR (statusbar), statusbar_cid, url);
+ }
+}
+
+static void
+deselect_menu_item_cb (GtkWidget *menuitem,
+ EphyNavigationAction *action)
+{
+ GtkWidget *statusbar;
+ EphyWindow *window;
+ EphyNavigationAction *nav_action;
+ guint statusbar_cid;
+
+ window = _ephy_navigation_action_get_window (EPHY_NAVIGATION_ACTION (action));
+ statusbar = ephy_window_get_statusbar (window);
+
+ /* Update status bar */
+ nav_action = EPHY_NAVIGATION_ACTION (action);
+ statusbar_cid = _ephy_navigation_action_get_statusbar_context_id (nav_action);
+ gtk_statusbar_pop (GTK_STATUSBAR (statusbar), statusbar_cid);
+}
+
+static void
+ephy_history_cleared_cb (EphyHistory *history,
+ EphyNavigationHistoryAction *action)
+{
+ ephy_action_change_sensitivity_flags (GTK_ACTION (action), SENS_FLAG, TRUE);
+}
+
+static GList*
+webkit_construct_history_list (WebKitWebView *web_view, WebKitHistoryType hist_type)
+{
+ WebKitWebBackForwardList *web_back_forward_list;
+ GList *webkit_items;
+
+ web_back_forward_list = webkit_web_view_get_back_forward_list (web_view);
+
+ if (hist_type == WEBKIT_HISTORY_FORWARD) {
+ webkit_items =
+ g_list_reverse (webkit_web_back_forward_list_get_forward_list_with_limit (web_back_forward_list,
+ EPHY_WEBKIT_BACK_FORWARD_LIMIT));
+ } else {
+ webkit_items =
+ webkit_web_back_forward_list_get_back_list_with_limit (web_back_forward_list,
+ EPHY_WEBKIT_BACK_FORWARD_LIMIT);
+ }
+
+ return webkit_items;
+}
+
+static GtkWidget *
+build_dropdown_menu (EphyNavigationAction *nav_action)
+{
+ EphyNavigationHistoryAction *action;
+ EphyWindow *window;
+ GtkMenuShell *menu;
+ EphyEmbed *embed;
+ GList *list, *l;
+ WebKitWebView *web_view;
+
+ action = EPHY_NAVIGATION_HISTORY_ACTION (nav_action);
+ window = _ephy_navigation_action_get_window (nav_action);
+ embed = ephy_embed_container_get_active_child (EPHY_EMBED_CONTAINER (window));
+ g_return_val_if_fail (embed != NULL, NULL);
+
+ menu = GTK_MENU_SHELL (gtk_menu_new ());
+
+ web_view = EPHY_GET_WEBKIT_WEB_VIEW_FROM_EMBED (embed);
+ g_return_val_if_fail (web_view != NULL, NULL);
+
+ if (action->priv->direction == EPHY_NAVIGATION_HISTORY_DIRECTION_BACK) {
+ list = webkit_construct_history_list (web_view,
+ WEBKIT_HISTORY_BACKWARD);
+ } else {
+ list = webkit_construct_history_list (web_view,
+ WEBKIT_HISTORY_FORWARD);
+ }
+
+ for (l = list; l != NULL; l = l->next) {
+ GtkWidget *item;
+ WebKitWebHistoryItem *hitem;
+ const char *url;
+ char *title;
+
+ hitem = (WebKitWebHistoryItem*)l->data;
+ url = webkit_web_history_item_get_uri (hitem);
+
+ title = g_strdup (webkit_web_history_item_get_title (hitem));
+
+ if ((title == NULL || g_strstrip (title)[0] == '\0'))
+ item = _ephy_navigation_action_new_history_menu_item (url, url);
+ else
+ item = _ephy_navigation_action_new_history_menu_item (title, url);
+
+ g_free (title);
+
+ g_object_set_data_full (G_OBJECT (item), HISTORY_ITEM_DATA_KEY,
+ g_object_ref (hitem), g_object_unref);
+
+ g_signal_connect (item, "activate",
+ G_CALLBACK (activate_back_or_forward_menu_item_cb),
+ action);
+ g_signal_connect (item, "select",
+ G_CALLBACK (select_menu_item_cb),
+ action);
+ g_signal_connect (item, "deselect",
+ G_CALLBACK (deselect_menu_item_cb),
+ action);
+
+ gtk_menu_shell_append (menu, item);
+ gtk_widget_show_all (item);
+ }
+
+ g_list_free (list);
+
+ return GTK_WIDGET (menu);
+}
+
+static void
+action_activate (GtkAction *action)
+{
+ EphyNavigationHistoryAction *history_action;
+ EphyWindow *window;
+ EphyEmbed *embed;
+ WebKitWebView *web_view;
+
+ history_action = EPHY_NAVIGATION_HISTORY_ACTION (action);
+ window = _ephy_navigation_action_get_window (EPHY_NAVIGATION_ACTION (action));
+ embed = ephy_embed_container_get_active_child (EPHY_EMBED_CONTAINER (window));
+ g_return_if_fail (embed != NULL);
+
+ web_view = EPHY_GET_WEBKIT_WEB_VIEW_FROM_EMBED (embed);
+
+ if (history_action->priv->direction == EPHY_NAVIGATION_HISTORY_DIRECTION_BACK) {
+ if (ephy_gui_is_middle_click ()) {
+ embed = ephy_shell_new_tab (ephy_shell_get_default (),
+ EPHY_WINDOW (gtk_widget_get_toplevel (GTK_WIDGET (embed))),
+ embed,
+ NULL,
+ EPHY_NEW_TAB_IN_EXISTING_WINDOW);
+ web_view = EPHY_GET_WEBKIT_WEB_VIEW_FROM_EMBED (embed);
+ }
+ webkit_web_view_go_back (web_view);
+ } else if (history_action->priv->direction == EPHY_NAVIGATION_HISTORY_DIRECTION_FORWARD) {
+ if (ephy_gui_is_middle_click ()) {
+ const char *forward_uri;
+ WebKitWebHistoryItem *forward_item;
+ WebKitWebBackForwardList *history;
+
+ /* Forward history is not copied when opening
+ a new tab, so get the forward URI manually
+ and load it */
+ history = webkit_web_view_get_back_forward_list (EPHY_GET_WEBKIT_WEB_VIEW_FROM_EMBED (embed));
+ forward_item = webkit_web_back_forward_list_get_forward_item (history);
+ forward_uri = webkit_web_history_item_get_original_uri (forward_item);
+
+ embed = ephy_shell_new_tab (ephy_shell_get_default (),
+ EPHY_WINDOW (gtk_widget_get_toplevel (GTK_WIDGET (embed))),
+ embed,
+ NULL,
+ EPHY_NEW_TAB_IN_EXISTING_WINDOW);
+
+ web_view = EPHY_GET_WEBKIT_WEB_VIEW_FROM_EMBED (embed);
+ webkit_web_view_load_uri (web_view, forward_uri);
+ } else {
+ webkit_web_view_go_forward (web_view);
+ }
+ }
+}
+
+static void
+ephy_navigation_history_action_init (EphyNavigationHistoryAction *action)
+{
+ EphyHistory *history;
+
+ action->priv = EPHY_NAVIGATION_HISTORY_ACTION_GET_PRIVATE (action);
+
+ history = EPHY_HISTORY (ephy_embed_shell_get_global_history (embed_shell));
+ action->priv->history = EPHY_HISTORY (g_object_ref (history));
+
+ g_signal_connect (action->priv->history,
+ "cleared", G_CALLBACK (ephy_history_cleared_cb),
+ action);
+}
+
+static void
+ephy_navigation_history_action_finalize (GObject *object)
+{
+ EphyNavigationHistoryAction *action = EPHY_NAVIGATION_HISTORY_ACTION (object);
+
+ g_signal_handlers_disconnect_by_func (action->priv->history,
+ ephy_history_cleared_cb,
+ action);
+ g_object_unref (action->priv->history);
+ action->priv->history = NULL;
+
+ G_OBJECT_CLASS (ephy_navigation_history_action_parent_class)->finalize (object);
+}
+
+static void
+ephy_navigation_history_action_set_property (GObject *object,
+ guint prop_id,
+ const GValue *value,
+ GParamSpec *pspec)
+{
+ EphyNavigationHistoryAction *nav = EPHY_NAVIGATION_HISTORY_ACTION (object);
+
+ switch (prop_id) {
+ case PROP_DIRECTION:
+ nav->priv->direction = g_value_get_int (value);
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ break;
+ }
+}
+
+static void
+ephy_navigation_history_action_get_property (GObject *object,
+ guint prop_id,
+ GValue *value,
+ GParamSpec *pspec)
+{
+ EphyNavigationHistoryAction *nav = EPHY_NAVIGATION_HISTORY_ACTION (object);
+
+ switch (prop_id) {
+ case PROP_DIRECTION:
+ g_value_set_int (value, nav->priv->direction);
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ break;
+ }
+}
+
+static void
+ephy_navigation_history_action_class_init (EphyNavigationHistoryActionClass *klass)
+{
+ GObjectClass *object_class = G_OBJECT_CLASS (klass);
+ GtkActionClass *action_class = GTK_ACTION_CLASS (klass);
+ EphyNavigationActionClass *nav_action_class = EPHY_NAVIGATION_ACTION_CLASS (klass);
+
+ object_class->finalize = ephy_navigation_history_action_finalize;
+ object_class->set_property = ephy_navigation_history_action_set_property;
+ object_class->get_property = ephy_navigation_history_action_get_property;
+
+ action_class->activate = action_activate;
+
+ nav_action_class->build_dropdown_menu = build_dropdown_menu;
+
+ g_object_class_install_property (object_class,
+ PROP_DIRECTION,
+ g_param_spec_int ("direction", NULL, NULL,
+ 0,
+ G_MAXINT,
+ 0,
+ G_PARAM_READWRITE | G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB));
+
+ g_type_class_add_private (object_class, sizeof (EphyNavigationHistoryActionPrivate));
+}
--- epiphany-2.30.2/src/ephy-navigation-history-action.h 1970-01-01 01:00:00.000000000 +0100
+++ epiphany-2.30.5/src/ephy-navigation-history-action.h 2010-08-19 04:44:26.000000000 +0200
@@ -0,0 +1,67 @@
+/*
+ * Copyright © 2003, 2004 Marco Pesenti Gritti
+ * Copyright © 2003, 2004 Christian Persch
+ * Copyright © 2010, Igalia S.L.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2, or (at your option)
+ * any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ */
+
+#if !defined (__EPHY_EPIPHANY_H_INSIDE__) && !defined (EPIPHANY_COMPILATION)
+#error "Only <epiphany/epiphany.h> can be included directly."
+#endif
+
+#ifndef EPHY_NAVIGATION_HISTORY_ACTION_H
+#define EPHY_NAVIGATION_HISTORY_ACTION_H
+
+#include "ephy-navigation-action.h"
+
+G_BEGIN_DECLS
+
+#define EPHY_TYPE_NAVIGATION_HISTORY_ACTION (ephy_navigation_history_action_get_type ())
+#define EPHY_NAVIGATION_HISTORY_ACTION(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), EPHY_TYPE_NAVIGATION_HISTORY_ACTION, EphyNavigationHistoryAction))
+#define EPHY_NAVIGATION_HISTORY_ACTION_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), EPHY_TYPE_NAVIGATION_HISTORY_ACTION, EphyNavigationHistoryActionClass))
+#define EPHY_IS_NAVIGATION_HISTORY_ACTION(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), EPHY_TYPE_NAVIGATION_HISTORY_ACTION))
+#define EPHY_IS_NAVIGATION_HISTORY_ACTION_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((obj), EPHY_TYPE_NAVIGATION_HISTORY_ACTION))
+#define EPHY_NAVIGATION_HISTORY_ACTION_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), EPHY_TYPE_NAVIGATION_HISTORY_ACTION, EphyNavigationHistoryActionClass))
+
+typedef enum
+{
+ EPHY_NAVIGATION_HISTORY_DIRECTION_BACK,
+ EPHY_NAVIGATION_HISTORY_DIRECTION_FORWARD
+} EphyNavigationHistoryDirection;
+
+typedef struct _EphyNavigationHistoryAction EphyNavigationHistoryAction;
+typedef struct _EphyNavigationHistoryActionPrivate EphyNavigationHistoryActionPrivate;
+typedef struct _EphyNavigationHistoryActionClass EphyNavigationHistoryActionClass;
+
+struct _EphyNavigationHistoryAction
+{
+ EphyNavigationAction parent;
+
+ /*< private >*/
+ EphyNavigationHistoryActionPrivate *priv;
+};
+
+struct _EphyNavigationHistoryActionClass
+{
+ EphyNavigationActionClass parent_class;
+};
+
+GType ephy_navigation_history_action_get_type (void);
+
+G_END_DECLS
+
+#endif
--- epiphany-2.30.2/src/ephy-navigation-up-action.c 1970-01-01 01:00:00.000000000 +0100
+++ epiphany-2.30.5/src/ephy-navigation-up-action.c 2010-08-30 22:55:16.000000000 +0200
@@ -0,0 +1,196 @@
+/*
+ * Copyright © 2003, 2004 Marco Pesenti Gritti
+ * Copyright © 2003, 2004 Christian Persch
+ * Copyright © 2008 Jan Alonzo
+ * Copyright © 2009 Igalia S.L.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2, or (at your option)
+ * any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ */
+
+#include "config.h"
+#include "ephy-navigation-up-action.h"
+
+#include "ephy-debug.h"
+#include "ephy-embed-container.h"
+#include "ephy-embed-shell.h"
+#include "ephy-embed-utils.h"
+#include "ephy-gui.h"
+#include "ephy-history.h"
+#include "ephy-link.h"
+#include "ephy-shell.h"
+#include "ephy-type-builtins.h"
+#include "ephy-window.h"
+
+#include <gtk/gtk.h>
+#include <webkit/webkit.h>
+
+#define URL_DATA_KEY "GoURL"
+
+static void ephy_navigation_up_action_init (EphyNavigationUpAction *action);
+static void ephy_navigation_up_action_class_init (EphyNavigationUpActionClass *klass);
+
+G_DEFINE_TYPE (EphyNavigationUpAction, ephy_navigation_up_action, EPHY_TYPE_NAVIGATION_ACTION)
+
+static void
+activate_up_menu_item_cb (GtkWidget *menuitem,
+ EphyNavigationUpAction *action)
+{
+ EphyWindow *window;
+ EphyEmbed *embed;
+ char *url;
+
+ window = _ephy_navigation_action_get_window (EPHY_NAVIGATION_ACTION (action));
+ embed = ephy_embed_container_get_active_child (EPHY_EMBED_CONTAINER (window));
+ g_return_if_fail (embed != NULL);
+
+ url = g_object_get_data (G_OBJECT (menuitem), URL_DATA_KEY);
+ g_return_if_fail (url != NULL);
+
+ ephy_link_open (EPHY_LINK (action), url, NULL,
+ ephy_gui_is_middle_click () ? EPHY_LINK_NEW_TAB : 0);
+}
+
+static void
+select_menu_item_cb (GtkWidget *menuitem,
+ EphyNavigationUpAction *action)
+{
+ const char *url;
+ EphyWindow *window;
+ EphyNavigationAction *nav_action;
+ GtkWidget *statusbar;
+ guint statusbar_cid;
+
+ url = g_object_get_data (G_OBJECT (menuitem), URL_DATA_KEY);
+ window = _ephy_navigation_action_get_window (EPHY_NAVIGATION_ACTION (action));
+ statusbar = ephy_window_get_statusbar (window);
+ g_return_if_fail (url != NULL);
+
+ /* Update status bar */
+ nav_action = EPHY_NAVIGATION_ACTION (action);
+ statusbar_cid = _ephy_navigation_action_get_statusbar_context_id (nav_action);
+ gtk_statusbar_push (GTK_STATUSBAR (statusbar), statusbar_cid, url);
+}
+
+static void
+deselect_menu_item_cb (GtkWidget *menuitem,
+ EphyNavigationAction *action)
+{
+ GtkWidget *statusbar;
+ EphyWindow *window;
+ EphyNavigationAction *nav_action;
+ guint statusbar_cid;
+
+ window = _ephy_navigation_action_get_window (EPHY_NAVIGATION_ACTION (action));
+ statusbar = ephy_window_get_statusbar (window);
+
+ /* Update status bar */
+ nav_action = EPHY_NAVIGATION_ACTION (action);
+ statusbar_cid = _ephy_navigation_action_get_statusbar_context_id (nav_action);
+ gtk_statusbar_pop (GTK_STATUSBAR (statusbar), statusbar_cid);
+}
+
+static GtkWidget *
+build_dropdown_menu (EphyNavigationAction *nav_action)
+{
+ EphyNavigationUpAction *action;
+ EphyWindow *window;
+ EphyEmbed *embed;
+ EphyHistory *history;
+ GtkMenuShell *menu;
+ GtkWidget *item;
+ GSList *list, *l;
+ char *url;
+
+ action = EPHY_NAVIGATION_UP_ACTION (nav_action);
+ window = _ephy_navigation_action_get_window (nav_action);
+ embed = ephy_embed_container_get_active_child (EPHY_EMBED_CONTAINER (window));
+ g_return_val_if_fail (embed != NULL, NULL);
+
+ menu = GTK_MENU_SHELL (gtk_menu_new ());
+ history = EPHY_HISTORY (ephy_embed_shell_get_global_history (embed_shell));
+
+ list = ephy_web_view_get_go_up_list (ephy_embed_get_web_view (embed));
+ for (l = list; l != NULL; l = l->next) {
+ EphyNode *node;
+ const char *title = NULL;
+
+ url = g_strdup (l->data);
+
+ if (url == NULL) continue;
+
+ node = ephy_history_get_page (history, url);
+ if (node != NULL) {
+ title = ephy_node_get_property_string (node, EPHY_NODE_PAGE_PROP_TITLE);
+ }
+
+ item = _ephy_navigation_action_new_history_menu_item (title ? title : url, url);
+
+ g_object_set_data_full (G_OBJECT (item), URL_DATA_KEY, url,
+ (GDestroyNotify) g_free);
+ g_signal_connect (item, "activate",
+ G_CALLBACK (activate_up_menu_item_cb), action);
+ g_signal_connect (item, "select",
+ G_CALLBACK (select_menu_item_cb),
+ action);
+ g_signal_connect (item, "deselect",
+ G_CALLBACK (deselect_menu_item_cb),
+ action);
+
+ gtk_menu_shell_append (menu, item);
+ gtk_widget_show (item);
+ }
+
+ /* the list data has been consumed */
+ g_slist_foreach (list, (GFunc) g_free, NULL);
+ g_slist_free (list);
+
+ return GTK_WIDGET (menu);
+}
+
+static void
+action_activate (GtkAction *action)
+{
+ EphyWindow *window;
+ EphyEmbed *embed;
+ GSList *up_list;
+
+ window = _ephy_navigation_action_get_window (EPHY_NAVIGATION_ACTION (action));
+ embed = ephy_embed_container_get_active_child (EPHY_EMBED_CONTAINER (window));
+ g_return_if_fail (embed != NULL);
+
+ up_list = ephy_web_view_get_go_up_list (ephy_embed_get_web_view (embed));
+ ephy_link_open (EPHY_LINK (action),
+ up_list->data,
+ NULL,
+ ephy_gui_is_middle_click () ? EPHY_LINK_NEW_TAB : 0);
+ g_slist_foreach (up_list, (GFunc) g_free, NULL);
+ g_slist_free (up_list);
+}
+
+static void
+ephy_navigation_up_action_init (EphyNavigationUpAction *action)
+{
+}
+
+static void
+ephy_navigation_up_action_class_init (EphyNavigationUpActionClass *klass)
+{
+ GtkActionClass *action_class = GTK_ACTION_CLASS (klass);
+ EphyNavigationActionClass *nav_action_class = EPHY_NAVIGATION_ACTION_CLASS (klass);
+
+ action_class->activate = action_activate;
+ nav_action_class->build_dropdown_menu = build_dropdown_menu;
+}
--- epiphany-2.30.2/src/ephy-navigation-up-action.h 1970-01-01 01:00:00.000000000 +0100
+++ epiphany-2.30.5/src/ephy-navigation-up-action.h 2010-08-19 04:44:26.000000000 +0200
@@ -0,0 +1,57 @@
+/*
+ * Copyright © 2003, 2004 Marco Pesenti Gritti
+ * Copyright © 2003, 2004 Christian Persch
+ * Copyright © 2010, Igalia S.L.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2, or (at your option)
+ * any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ */
+
+#if !defined (__EPHY_EPIPHANY_H_INSIDE__) && !defined (EPIPHANY_COMPILATION)
+#error "Only <epiphany/epiphany.h> can be included directly."
+#endif
+
+#ifndef EPHY_NAVIGATION_UP_ACTION_H
+#define EPHY_NAVIGATION_UP_ACTION_H
+
+#include "ephy-navigation-action.h"
+
+G_BEGIN_DECLS
+
+#define EPHY_TYPE_NAVIGATION_UP_ACTION (ephy_navigation_up_action_get_type ())
+#define EPHY_NAVIGATION_UP_ACTION(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), EPHY_TYPE_NAVIGATION_UP_ACTION, EphyNavigationUpAction))
+#define EPHY_NAVIGATION_UP_ACTION_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), EPHY_TYPE_NAVIGATION_UP_ACTION, EphyNavigationUpActionClass))
+#define EPHY_IS_NAVIGATION_UP_ACTION(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), EPHY_TYPE_NAVIGATION_UP_ACTION))
+#define EPHY_IS_NAVIGATION_UP_ACTION_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((obj), EPHY_TYPE_NAVIGATION_UP_ACTION))
+#define EPHY_NAVIGATION_UP_ACTION_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), EPHY_TYPE_NAVIGATION_UP_ACTION, EphyNavigationUpActionClass))
+
+typedef struct _EphyNavigationUpAction EphyNavigationUpAction;
+typedef struct _EphyNavigationUpActionClass EphyNavigationUpActionClass;
+
+struct _EphyNavigationUpAction
+{
+ EphyNavigationAction parent;
+};
+
+struct _EphyNavigationUpActionClass
+{
+ EphyNavigationActionClass parent_class;
+};
+
+GType ephy_navigation_up_action_get_type (void);
+
+G_END_DECLS
+
+#endif
--- epiphany-2.30.2/src/ephy-notebook.c 2010-02-17 09:13:15.000000000 +0100
+++ epiphany-2.30.5/src/ephy-notebook.c 2010-08-19 04:44:26.000000000 +0200
@@ -329,7 +329,7 @@ button_press_cb (EphyNotebook *notebook,
static void
ephy_notebook_switch_page_cb (GtkNotebook *notebook,
- GtkNotebookPage *page,
+ GtkWidget *page,
guint page_num,
gpointer data)
{
--- epiphany-2.30.2/src/ephy-shell.c 2010-02-04 22:07:36.000000000 +0100
+++ epiphany-2.30.5/src/ephy-shell.c 2010-08-30 22:58:42.000000000 +0200
@@ -149,43 +149,6 @@ ephy_shell_new_window_cb (EphyEmbedSingl
NULL, NULL, flags, chromemask, is_popup, 0);
}
-
-static gboolean
-ephy_shell_add_sidebar_cb (EphyEmbedSingle *embed_single,
- const char *url,
- const char *title,
- EphyShell *shell)
-{
- EphySession *session;
- EphyWindow *window;
- GtkWidget *dialog;
-
- session = EPHY_SESSION (ephy_shell_get_session (shell));
- g_return_val_if_fail (EPHY_IS_SESSION (session), FALSE);
-
- window = ephy_session_get_active_window (session);
-
- dialog = gtk_message_dialog_new (GTK_WINDOW (window),
- GTK_DIALOG_DESTROY_WITH_PARENT,
- GTK_MESSAGE_ERROR,
- GTK_BUTTONS_OK,
- _("Sidebar extension required"));
-
- gtk_window_set_title (GTK_WINDOW (dialog), _("Sidebar Extension Required"));
- gtk_window_set_icon_name (GTK_WINDOW (dialog), EPHY_STOCK_EPHY);
-
- gtk_message_dialog_format_secondary_text (GTK_MESSAGE_DIALOG (dialog),
- _("The link you clicked needs the sidebar extension to be "
- "installed."));
-
- g_signal_connect_swapped (dialog, "response",
- G_CALLBACK (gtk_widget_destroy), dialog);
-
- gtk_widget_show (dialog);
-
- return TRUE;
-}
-
#ifdef ENABLE_NETWORK_MANAGER
static void
@@ -223,10 +186,6 @@ impl_get_embed_single (EphyEmbedShell *e
G_CALLBACK (ephy_shell_new_window_cb),
shell, G_CONNECT_AFTER);
- g_signal_connect_object (embed_single, "add-sidebar",
- G_CALLBACK (ephy_shell_add_sidebar_cb),
- shell, G_CONNECT_AFTER);
-
priv->embed_single_connected = TRUE;
#ifdef ENABLE_NETWORK_MANAGER
@@ -435,6 +394,7 @@ ephy_shell_new_tab_full (EphyShell *shel
gboolean open_page = FALSE;
gboolean jump_to;
gboolean active_is_blank = FALSE;
+ gboolean copy_history = TRUE;
GtkWidget *nb;
int position = -1;
gboolean is_empty = FALSE;
@@ -443,6 +403,7 @@ ephy_shell_new_tab_full (EphyShell *shel
if (flags & EPHY_NEW_TAB_OPEN_PAGE) open_page = TRUE;
if (flags & EPHY_NEW_TAB_IN_NEW_WINDOW) in_new_window = TRUE;
if (flags & EPHY_NEW_TAB_IN_EXISTING_WINDOW) in_new_window = FALSE;
+ if (flags & EPHY_NEW_TAB_DONT_COPY_HISTORY) copy_history = FALSE;
in_new_window = in_new_window && !eel_gconf_get_boolean (CONF_LOCKDOWN_FULLSCREEN);
g_return_val_if_fail (open_page == (gboolean)(request != NULL), NULL);
@@ -493,11 +454,11 @@ ephy_shell_new_tab_full (EphyShell *shel
ephy_embed_container_add_child (EPHY_EMBED_CONTAINER (window), embed, position, jump_to);
}
- if (previous_embed != NULL)
- {
+ if (copy_history && previous_embed != NULL)
+ {
ephy_web_view_copy_back_history (ephy_embed_get_web_view (previous_embed),
ephy_embed_get_web_view (embed));
- }
+ }
ephy_gui_window_update_user_time (GTK_WIDGET (window), user_time);
--- epiphany-2.30.2/src/ephy-shell.h 2010-02-15 20:05:56.000000000 +0100
+++ epiphany-2.30.5/src/ephy-shell.h 2010-08-19 04:44:26.000000000 +0200
@@ -69,6 +69,7 @@ typedef enum
/* The way to load */
EPHY_NEW_TAB_FROM_EXTERNAL = 1 << 12,
+ EPHY_NEW_TAB_DONT_COPY_HISTORY = 1 << 13,
} EphyNewTabFlags;
--- epiphany-2.30.2/src/ephy-toolbar.c 2010-01-08 19:21:01.000000000 +0100
+++ epiphany-2.30.5/src/ephy-toolbar.c 2010-08-19 04:44:26.000000000 +0200
@@ -30,6 +30,8 @@
#include "ephy-location-entry.h"
#include "ephy-location-action.h"
#include "ephy-navigation-action.h"
+#include "ephy-navigation-history-action.h"
+#include "ephy-navigation-up-action.h"
#include "ephy-topic-action.h"
#include "ephy-zoom-action.h"
#include "ephy-spinner-tool-item.h"
@@ -61,11 +63,6 @@ enum
LAST_ACTION
};
-enum
-{
- SENS_FLAG = 1 << 0
-};
-
#define EPHY_TOOLBAR_GET_PRIVATE(object)(G_TYPE_INSTANCE_GET_PRIVATE ((object), EPHY_TYPE_TOOLBAR, EphyToolbarPrivate))
struct _EphyToolbarPrivate
@@ -135,6 +132,7 @@ ephy_toolbar_update_fixed_visibility (Ep
show = priv->leave_fullscreen_visible;
g_object_set (priv->sep_item, "visible", show, NULL);
+ g_object_set (priv->exit_button, "visible", show, NULL);
g_object_set (priv->fixed_toolbar, "visible", show, NULL);
}
@@ -225,7 +223,7 @@ ephy_toolbar_set_window (EphyToolbar *to
g_object_unref (priv->action_group);
action = priv->actions[BACK_ACTION] =
- g_object_new (EPHY_TYPE_NAVIGATION_ACTION,
+ g_object_new (EPHY_TYPE_NAVIGATION_HISTORY_ACTION,
"name", "NavigationBack",
"label", _("_Back"),
"stock_id", GTK_STOCK_GO_BACK,
@@ -235,7 +233,7 @@ ephy_toolbar_set_window (EphyToolbar *to
*/
"arrow-tooltip", _("Back history"),
"window", priv->window,
- "direction", EPHY_NAVIGATION_DIRECTION_BACK,
+ "direction", EPHY_NAVIGATION_HISTORY_DIRECTION_BACK,
"is_important", TRUE,
NULL);
g_signal_connect_swapped (action, "open-link",
@@ -245,7 +243,7 @@ ephy_toolbar_set_window (EphyToolbar *to
g_object_unref (action);
action = priv->actions[FORWARD_ACTION] =
- g_object_new (EPHY_TYPE_NAVIGATION_ACTION,
+ g_object_new (EPHY_TYPE_NAVIGATION_HISTORY_ACTION,
"name", "NavigationForward",
"label", _("_Forward"),
"stock_id", GTK_STOCK_GO_FORWARD,
@@ -255,7 +253,7 @@ ephy_toolbar_set_window (EphyToolbar *to
*/
"arrow-tooltip", _("Forward history"),
"window", priv->window,
- "direction", EPHY_NAVIGATION_DIRECTION_FORWARD,
+ "direction", EPHY_NAVIGATION_HISTORY_DIRECTION_FORWARD,
NULL);
g_signal_connect_swapped (action, "open-link",
G_CALLBACK (ephy_link_open), toolbar);
@@ -264,7 +262,7 @@ ephy_toolbar_set_window (EphyToolbar *to
g_object_unref (action);
action = priv->actions[UP_ACTION] =
- g_object_new (EPHY_TYPE_NAVIGATION_ACTION,
+ g_object_new (EPHY_TYPE_NAVIGATION_UP_ACTION,
"name", "NavigationUp",
"label", _("_Up"),
"stock_id", GTK_STOCK_GO_UP,
@@ -274,7 +272,6 @@ ephy_toolbar_set_window (EphyToolbar *to
*/
"arrow-tooltip", _("List of upper levels"),
"window", priv->window,
- "direction", EPHY_NAVIGATION_DIRECTION_UP,
NULL);
g_signal_connect_swapped (action, "open-link",
G_CALLBACK (ephy_link_open), toolbar);
--- epiphany-2.30.2/src/ephy-window.c 2010-02-27 11:26:59.000000000 +0100
+++ epiphany-2.30.5/src/ephy-window.c 2010-08-30 22:55:16.000000000 +0200
@@ -87,7 +87,7 @@ static EphyEmbed *ephy_window_open_link
EphyEmbed *embed,
EphyLinkFlags flags);
static void notebook_switch_page_cb (GtkNotebook *notebook,
- GtkNotebookPage *page,
+ GtkWidget *page,
guint page_num,
EphyWindow *window);
static void ephy_window_view_statusbar_cb (GtkAction *action,
@@ -3981,7 +3981,7 @@ ephy_window_show (GtkWidget *widget)
static void
notebook_switch_page_cb (GtkNotebook *notebook,
- GtkNotebookPage *page,
+ GtkWidget *page,
guint page_num,
EphyWindow *window)
{
--- epiphany-2.30.2/src/epiphany.h 2010-04-08 16:57:23.000000000 +0200
+++ epiphany-2.30.5/src/epiphany.h 2010-08-31 00:55:35.000000000 +0200
@@ -25,7 +25,7 @@
/* From GTK_CHECK_VERSION */
#define EPHY_MAJOR_VERSION (2)
#define EPHY_MINOR_VERSION (30)
-#define EPHY_MICRO_VERSION (2)
+#define EPHY_MICRO_VERSION (5)
#define EPHY_CHECK_VERSION(major, minor, micro)\
(EPHY_MAJOR_VERSION > (major) || \
--- epiphany-2.30.2/src/pdm-dialog.c 2010-01-08 19:21:01.000000000 +0100
+++ epiphany-2.30.5/src/pdm-dialog.c 2010-08-31 00:30:35.000000000 +0200
@@ -1488,7 +1488,7 @@ pdm_dialog_password_remove (PdmActionInf
static void
sync_notebook_tab (GtkWidget *notebook,
- GtkNotebookPage *page,
+ GtkWidget *page,
int page_num,
PdmDialog *dialog)
{
--- epiphany-2.30.2/src/popup-commands.c 2010-02-04 22:07:36.000000000 +0100
+++ epiphany-2.30.5/src/popup-commands.c 2010-08-30 22:58:42.000000000 +0200
@@ -26,7 +26,6 @@
#include "ephy-embed-persist.h"
#include "ephy-embed-utils.h"
#include "ephy-prefs.h"
-#include "eel-gconf-extensions.h"
#include "ephy-file-helpers.h"
#include "ephy-bookmarks-ui.h"
#include "ephy-web-view.h"
@@ -237,6 +236,7 @@ save_property_url (GtkAction *action,
ephy_embed_persist_set_persist_key
(persist, CONF_STATE_SAVE_DIR);
ephy_embed_persist_set_source (persist, location);
+ ephy_embed_persist_set_embed (persist, embed);
g_signal_connect (persist, "completed",
G_CALLBACK (save_property_url_completed_cb), NULL);
--- epiphany-2.30.2/src/window-commands.c 2010-04-07 10:37:25.000000000 +0200
+++ epiphany-2.30.5/src/window-commands.c 2010-08-30 22:58:42.000000000 +0200
@@ -344,7 +344,7 @@ window_cmd_file_save_as (GtkAction *acti
GTK_WIDGET (window),
GTK_FILE_CHOOSER_ACTION_SAVE,
CONF_STATE_SAVE_DIR,
- EPHY_FILE_FILTER_ALL_SUPPORTED);
+ EPHY_FILE_FILTER_ALL);
gtk_file_chooser_set_do_overwrite_confirmation (GTK_FILE_CHOOSER (dialog), TRUE);
@@ -1040,7 +1040,7 @@ window_cmd_help_about (GtkAction *action
"name", _("GNOME Web Browser"),
"version", VERSION,
"copyright", "Copyright © 2002–2004 Marco Pesenti Gritti\n"
- "Copyright © 2003–2009 The GNOME Web Browser Developers",
+ "Copyright © 2003–2010 The GNOME Web Browser Developers",
"artists", artists,
"authors", authors,
"comments", comments,
Reply to: