Added support for favicons (requires WebKit 1.8)
This commit is contained in:
parent
b860df5155
commit
ff56aed70b
@ -496,6 +496,7 @@ static gboolean _switch_page_idle(gpointer data)
|
||||
* - change the title (tab)
|
||||
* - update toolbar buttons */
|
||||
/* XXX the Surfer fetches the right values by himself => API change? */
|
||||
surfer_set_favicon(surfer, NULL);
|
||||
surfer_set_location(surfer, NULL);
|
||||
surfer_set_progress(surfer, 0.0);
|
||||
surfer_set_security(surfer, SS_NONE);
|
||||
|
@ -47,6 +47,10 @@ typedef struct _GHtml
|
||||
|
||||
/* prototypes */
|
||||
/* functions */
|
||||
/* accessors */
|
||||
#if WEBKIT_CHECK_VERSION(1, 1, 18)
|
||||
static void _ghtml_set_favicon(GtkWidget * widget, char const * icon);
|
||||
#endif
|
||||
static void _ghtml_set_status(GtkWidget * widget, char const * status);
|
||||
|
||||
/* callbacks */
|
||||
@ -60,6 +64,9 @@ static gboolean _on_download_requested(WebKitWebView * view,
|
||||
#endif
|
||||
static void _on_hovering_over_link(WebKitWebView * view, const gchar * title,
|
||||
const gchar * url, gpointer data);
|
||||
#if WEBKIT_CHECK_VERSION(1, 1, 18)
|
||||
static void _on_icon_load(WebKitWebView * view, gchar * icon, gpointer data);
|
||||
#endif
|
||||
static void _on_load_committed(WebKitWebView * view, WebKitWebFrame * frame,
|
||||
gpointer data);
|
||||
static gboolean _on_load_error(WebKitWebView * view, WebKitWebFrame * frame,
|
||||
@ -118,6 +125,10 @@ GtkWidget * ghtml_new(Surfer * surfer)
|
||||
#endif
|
||||
g_signal_connect(G_OBJECT(ghtml->view), "hovering-over-link",
|
||||
G_CALLBACK(_on_hovering_over_link), widget);
|
||||
#if WEBKIT_CHECK_VERSION(1, 1, 18)
|
||||
g_signal_connect(G_OBJECT(ghtml->view), "icon-loaded", G_CALLBACK(
|
||||
_on_icon_load), widget);
|
||||
#endif
|
||||
g_signal_connect(G_OBJECT(ghtml->view), "load-committed", G_CALLBACK(
|
||||
_on_load_committed), widget);
|
||||
g_signal_connect(G_OBJECT(ghtml->view), "load-error", G_CALLBACK(
|
||||
@ -212,6 +223,26 @@ gboolean ghtml_can_go_back(GtkWidget * widget)
|
||||
}
|
||||
|
||||
|
||||
/* ghtml_get_favicon */
|
||||
GdkPixbuf * ghtml_get_favicon(GtkWidget * widget)
|
||||
{
|
||||
GHtml * ghtml;
|
||||
WebKitWebFrame * frame;
|
||||
|
||||
ghtml = g_object_get_data(G_OBJECT(widget), "ghtml");
|
||||
#if WEBKIT_CHECK_VERSION(1, 8, 0)
|
||||
if((frame = webkit_web_view_get_main_frame(
|
||||
WEBKIT_WEB_VIEW(ghtml->view))) != NULL
|
||||
&& webkit_web_frame_get_uri(frame) != NULL)
|
||||
return webkit_web_view_try_get_favicon_pixbuf(
|
||||
WEBKIT_WEB_VIEW(ghtml->view), 16, 16);
|
||||
#else
|
||||
/* FIXME implement */
|
||||
#endif
|
||||
return NULL;
|
||||
}
|
||||
|
||||
|
||||
gboolean ghtml_can_go_forward(GtkWidget * widget)
|
||||
{
|
||||
GHtml * ghtml;
|
||||
@ -731,6 +762,32 @@ void ghtml_zoom_reset(GtkWidget * widget)
|
||||
|
||||
/* private */
|
||||
/* functions */
|
||||
#if WEBKIT_CHECK_VERSION(1, 1, 18)
|
||||
/* ghtml_set_favicon */
|
||||
static void _ghtml_set_favicon(GtkWidget * widget, char const * icon)
|
||||
{
|
||||
GHtml * ghtml;
|
||||
GdkPixbuf * pixbuf = NULL;
|
||||
# if WEBKIT_CHECK_VERSION(1, 8, 0)
|
||||
WebKitWebFrame * frame;
|
||||
# endif
|
||||
|
||||
ghtml = g_object_get_data(G_OBJECT(widget), "ghtml");
|
||||
# if WEBKIT_CHECK_VERSION(1, 8, 0)
|
||||
if((frame = webkit_web_view_get_main_frame(
|
||||
WEBKIT_WEB_VIEW(ghtml->view))) != NULL
|
||||
&& webkit_web_frame_get_uri(frame) != NULL)
|
||||
pixbuf = webkit_web_view_try_get_favicon_pixbuf(
|
||||
WEBKIT_WEB_VIEW(ghtml->view), 16, 16);
|
||||
# else
|
||||
/* FIXME implement */
|
||||
# endif
|
||||
surfer_set_favicon(ghtml->surfer, pixbuf);
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
/* ghtml_set_status */
|
||||
static void _ghtml_set_status(GtkWidget * widget, char const * status)
|
||||
{
|
||||
GHtml * ghtml;
|
||||
@ -816,6 +873,16 @@ static void _on_hovering_over_link(WebKitWebView * view, const gchar * title,
|
||||
}
|
||||
|
||||
|
||||
#if WEBKIT_CHECK_VERSION(1, 1, 18)
|
||||
static void _on_icon_load(WebKitWebView * view, gchar * icon, gpointer data)
|
||||
{
|
||||
GtkWidget * widget = data;
|
||||
|
||||
_ghtml_set_favicon(widget, icon);
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
/* on_load_committed */
|
||||
static void _on_load_committed(WebKitWebView * view, WebKitWebFrame * frame,
|
||||
gpointer data)
|
||||
|
@ -1,5 +1,5 @@
|
||||
/* $Id$ */
|
||||
/* Copyright (c) 2008-2012 Pierre Pronchery <khorben@defora.org> */
|
||||
/* Copyright (c) 2008-2013 Pierre Pronchery <khorben@defora.org> */
|
||||
/* This file is part of DeforaOS Desktop Surfer */
|
||||
/* 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
|
||||
@ -31,6 +31,7 @@ void ghtml_delete(GtkWidget * ghtml);
|
||||
gboolean ghtml_can_go_back(GtkWidget * ghtml);
|
||||
gboolean ghtml_can_go_forward(GtkWidget * ghtml);
|
||||
|
||||
GdkPixbuf * ghtml_get_favicon(GtkWidget * ghtml);
|
||||
char const * ghtml_get_link_message(GtkWidget * ghtml);
|
||||
char const * ghtml_get_location(GtkWidget * ghtml);
|
||||
gdouble ghtml_get_progress(GtkWidget * ghtml);
|
||||
|
25
src/surfer.c
25
src/surfer.c
@ -1,6 +1,6 @@
|
||||
/* $Id$ */
|
||||
static char const _copyright[] =
|
||||
"Copyright (c) 2006-2012 Pierre Pronchery <khorben@defora.org>";
|
||||
"Copyright (c) 2006-2013 Pierre Pronchery <khorben@defora.org>";
|
||||
/* This file is part of DeforaOS Desktop Surfer */
|
||||
static char const _license[] =
|
||||
"This program is free software: you can redistribute it and/or modify\n"
|
||||
@ -15,7 +15,6 @@ static char const _license[] =
|
||||
"You should have received a copy of the GNU General Public License\n"
|
||||
"along with this program. If not, see <http://www.gnu.org/licenses/>.";
|
||||
/* TODO:
|
||||
* - implement the favicon
|
||||
* - support multiple profiles
|
||||
* - implement "always ask" for the default download directory
|
||||
* - provide access to SSL information in embedded mode
|
||||
@ -320,6 +319,7 @@ Surfer * _new_do(char const * url)
|
||||
group = gtk_accel_group_new();
|
||||
surfer->window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
|
||||
gtk_window_add_accel_group(GTK_WINDOW(surfer->window), group);
|
||||
g_object_unref(group);
|
||||
gtk_window_set_default_size(GTK_WINDOW(surfer->window), 1024, 768);
|
||||
#if GTK_CHECK_VERSION(2, 6, 0)
|
||||
gtk_window_set_icon_name(GTK_WINDOW(surfer->window), "web-browser");
|
||||
@ -532,6 +532,27 @@ void surfer_set_enable_javascript(Surfer * surfer, gboolean enable)
|
||||
}
|
||||
|
||||
|
||||
/* surfer_set_favicon */
|
||||
void surfer_set_favicon(Surfer * surfer, GdkPixbuf * pixbuf)
|
||||
{
|
||||
GtkWidget * view;
|
||||
#if GTK_CHECK_VERSION(2, 16, 0)
|
||||
GtkWidget * widget;
|
||||
#endif
|
||||
|
||||
if((view = surfer_get_view(surfer)) == NULL)
|
||||
return; /* consider the current tab only */
|
||||
#if GTK_CHECK_VERSION(2, 16, 0)
|
||||
widget = gtk_bin_get_child(GTK_BIN(surfer->lb_path));
|
||||
pixbuf = ghtml_get_favicon(view);
|
||||
gtk_entry_set_icon_from_pixbuf(GTK_ENTRY(widget),
|
||||
GTK_ENTRY_ICON_PRIMARY, pixbuf);
|
||||
#else
|
||||
/* FIXME implement */
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
/* surfer_set_fullscreen */
|
||||
void surfer_set_fullscreen(Surfer * surfer, gboolean fullscreen)
|
||||
{
|
||||
|
@ -1,5 +1,5 @@
|
||||
/* $Id$ */
|
||||
/* Copyright (c) 2006-2012 Pierre Pronchery <khorben@defora.org> */
|
||||
/* Copyright (c) 2006-2013 Pierre Pronchery <khorben@defora.org> */
|
||||
/* This file is part of DeforaOS Desktop Surfer */
|
||||
/* 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
|
||||
@ -66,6 +66,7 @@ void surfer_delete(Surfer * surfer);
|
||||
GtkWidget * surfer_get_view(Surfer * surfer);
|
||||
|
||||
void surfer_set_enable_javascript(Surfer * surfer, gboolean enable);
|
||||
void surfer_set_favicon(Surfer * surfer, GdkPixbuf * pixbuf);
|
||||
void surfer_set_fullscreen(Surfer * surfer, gboolean fullscreen);
|
||||
void surfer_set_homepage(Surfer * surfer, char const * homepage);
|
||||
void surfer_set_location(Surfer * surfer, char const * url);
|
||||
|
Loading…
Reference in New Issue
Block a user