diff options
author | Marco Pesenti Gritti <marco@it.gnome.org> | 2003-01-12 04:12:48 +0800 |
---|---|---|
committer | Marco Pesenti Gritti <mpeseng@src.gnome.org> | 2003-01-12 04:12:48 +0800 |
commit | 594097cc0181cfea7e8205448a7b6e315e311a36 (patch) | |
tree | 8401a7431661f52e384a69bf9ce5cfc03e60a464 /src | |
parent | 67a3a6a3e873bf7972d76cee8396b8dec08fdcae (diff) | |
download | gsoc2013-epiphany-594097cc0181cfea7e8205448a7b6e315e311a36.tar gsoc2013-epiphany-594097cc0181cfea7e8205448a7b6e315e311a36.tar.gz gsoc2013-epiphany-594097cc0181cfea7e8205448a7b6e315e311a36.tar.bz2 gsoc2013-epiphany-594097cc0181cfea7e8205448a7b6e315e311a36.tar.lz gsoc2013-epiphany-594097cc0181cfea7e8205448a7b6e315e311a36.tar.xz gsoc2013-epiphany-594097cc0181cfea7e8205448a7b6e315e311a36.tar.zst gsoc2013-epiphany-594097cc0181cfea7e8205448a7b6e315e311a36.zip |
Reimplement favicons. Now all exit crashes related to connections left
2003-01-11 Marco Pesenti Gritti <marco@it.gnome.org>
* embed/Makefile.am:
* embed/ephy-embed-favicon.c:
* embed/ephy-embed-favicon.h:
* embed/ephy-embed-shell.c: (ephy_embed_shell_get_favicon_cache):
* embed/ephy-favicon-cache.c: (ephy_favicon_cache_class_init),
(ephy_favicon_cache_new), (ephy_favicon_cache_load),
(icon_is_obsolete), (icons_added_cb), (icons_removed_cb),
(remove_obsolete_icons), (ephy_favicon_cache_save),
(ephy_favicon_cache_init), (kill_download),
(cleanup_downloads_hash), (ephy_favicon_cache_finalize),
(favicon_name_build), (favicon_download_completed_cb),
(ephy_favicon_cache_download), (ephy_favicon_cache_get):
* embed/ephy-favicon-cache.h:
* embed/ephy-favicon.c:
* embed/ephy-favicon.h:
* embed/mozilla/mozilla-embed-shell.cpp:
* src/ephy-tab.c: (ephy_tab_init), (ephy_tab_favicon_cb),
(ephy_tab_location_cb), (ephy_tab_get_location),
(ephy_tab_get_favicon_url):
* src/ephy-tab.h:
* src/ephy-window.c: (update_favicon_control):
* src/toolbar.c: (toolbar_setup_favicon_ebox),
(toolbar_update_favicon):
Reimplement favicons. Now all exit crashes related
to connections left open by favicons should be fixed.
Diffstat (limited to 'src')
-rw-r--r-- | src/ephy-tab.c | 37 | ||||
-rw-r--r-- | src/ephy-tab.h | 2 | ||||
-rw-r--r-- | src/ephy-window.c | 4 | ||||
-rwxr-xr-x | src/toolbar.c | 29 |
4 files changed, 64 insertions, 8 deletions
diff --git a/src/ephy-tab.c b/src/ephy-tab.c index 170ae3846..6430f025a 100644 --- a/src/ephy-tab.c +++ b/src/ephy-tab.c @@ -53,6 +53,7 @@ struct EphyTabPrivate TabLoadStatus load_status; char status_message[255]; char link_message[255]; + char favicon_url[255]; char *title; char *location; int load_percent; @@ -77,6 +78,10 @@ enum }; static void +ephy_tab_favicon_cb (EphyEmbed *embed, + const char *url, + EphyTab *tab); +static void ephy_tab_link_message_cb (EphyEmbed *embed, const char *message, EphyTab *tab); @@ -199,6 +204,7 @@ ephy_tab_init (EphyTab *tab) tab->priv->is_active = FALSE; *tab->priv->status_message = '\0'; *tab->priv->link_message = '\0'; + *tab->priv->favicon_url = '\0'; tab->priv->load_status = TAB_LOAD_NONE; tab->priv->load_percent = 0; tab->priv->title = NULL; @@ -260,6 +266,9 @@ ephy_tab_init (EphyTab *tab) g_signal_connect (embed, "ge_security_change", GTK_SIGNAL_FUNC (ephy_tab_security_change_cb), tab); + g_signal_connect (embed, "ge_favicon", + GTK_SIGNAL_FUNC (ephy_tab_favicon_cb), + tab); } /* Destructor */ @@ -424,6 +433,20 @@ ephy_tab_set_visibility (EphyTab *tab, /* Private callbacks for embed signals */ static void +ephy_tab_favicon_cb (EphyEmbed *embed, + const char *url, + EphyTab *tab) +{ + g_strlcpy (tab->priv->favicon_url, + url, 255); + + if (!tab->priv->is_active) return; + + ephy_window_update_control (tab->priv->window, + FaviconControl); +} + +static void ephy_tab_link_message_cb (EphyEmbed *embed, const char *message, EphyTab *tab) @@ -444,6 +467,7 @@ ephy_tab_location_cb (EphyEmbed *embed, EphyTab *tab) ephy_embed_get_location (embed, TRUE, &tab->priv->location); tab->priv->link_message[0] = '\0'; + tab->priv->favicon_url[0] = '\0'; if (tab->priv->is_active) { @@ -906,6 +930,19 @@ ephy_tab_get_location (EphyTab *tab) return tab->priv->location; } +const char * +ephy_tab_get_favicon_url (EphyTab *tab) +{ + if (tab->priv->favicon_url[0] == '\0') + { + return NULL; + } + else + { + return tab->priv->favicon_url; + } +} + void ephy_tab_set_location (EphyTab *tab, char *location) diff --git a/src/ephy-tab.h b/src/ephy-tab.h index 02e06746f..fe679f553 100644 --- a/src/ephy-tab.h +++ b/src/ephy-tab.h @@ -90,6 +90,8 @@ const char *ephy_tab_get_title (EphyTab *tab); const char *ephy_tab_get_location (EphyTab *tab); +const char *ephy_tab_get_favicon_url (EphyTab *tab); + void ephy_tab_set_location (EphyTab *tab, char *location); diff --git a/src/ephy-window.c b/src/ephy-window.c index dcba93e42..9f751ea8b 100644 --- a/src/ephy-window.c +++ b/src/ephy-window.c @@ -1086,12 +1086,12 @@ update_favicon_control (EphyWindow *window) cache = ephy_embed_shell_get_favicon_cache (EPHY_EMBED_SHELL (ephy_shell)); - location = ephy_tab_get_location (window->priv->active_tab); + location = ephy_tab_get_favicon_url (window->priv->active_tab); if (location) { GdkPixbuf *pixbuf; - pixbuf = ephy_favicon_cache_lookup_direct (cache, location); + pixbuf = ephy_favicon_cache_get (cache, location); gtk_window_set_icon (GTK_WINDOW (window), pixbuf); } diff --git a/src/toolbar.c b/src/toolbar.c index 24558e4a5..695f657da 100755 --- a/src/toolbar.c +++ b/src/toolbar.c @@ -29,7 +29,6 @@ #include "ephy-gui.h" #include "ephy-location-entry.h" #include "ephy-shell.h" -#include "ephy-embed-favicon.h" #include "ephy-dnd.h" #include "ephy-toolbar-bonobo-view.h" #include "ephy-toolbar-item-factory.h" @@ -255,8 +254,7 @@ toolbar_setup_favicon_ebox (Toolbar *t, GtkWidget *w) g_return_if_fail (w == p->favicon_ebox); - p->favicon = g_object_ref (ephy_embed_favicon_new - (ephy_window_get_active_embed (p->window))); + p->favicon = g_object_ref (gtk_image_new ()); gtk_container_add (GTK_CONTAINER (p->favicon_ebox), p->favicon); gtk_container_set_border_width (GTK_CONTAINER (p->favicon_ebox), 2); @@ -667,10 +665,29 @@ toolbar_set_location (Toolbar *t, void toolbar_update_favicon (Toolbar *t) { - if (t->priv->favicon) + GdkPixbuf *pixbuf = NULL; + EphyFaviconCache *cache; + EphyTab *tab; + const char *url; + + cache = ephy_embed_shell_get_favicon_cache (EPHY_EMBED_SHELL (ephy_shell)); + tab = ephy_window_get_active_tab (t->priv->window); + url = ephy_tab_get_favicon_url (tab); + + if (url) + { + pixbuf = ephy_favicon_cache_get (cache, url); + } + + if (pixbuf) + { + gtk_image_set_from_pixbuf (GTK_IMAGE (t->priv->favicon), pixbuf); + } + else { - ephy_embed_favicon_set_embed (EPHY_EMBED_FAVICON (t->priv->favicon), - ephy_window_get_active_embed (t->priv->window)); + gtk_image_set_from_stock (GTK_IMAGE (t->priv->favicon), + GTK_STOCK_JUMP_TO, + GTK_ICON_SIZE_MENU); } } |