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)
|
* - change the title (tab)
|
||||||
* - update toolbar buttons */
|
* - update toolbar buttons */
|
||||||
/* XXX the Surfer fetches the right values by himself => API change? */
|
/* XXX the Surfer fetches the right values by himself => API change? */
|
||||||
|
surfer_set_favicon(surfer, NULL);
|
||||||
surfer_set_location(surfer, NULL);
|
surfer_set_location(surfer, NULL);
|
||||||
surfer_set_progress(surfer, 0.0);
|
surfer_set_progress(surfer, 0.0);
|
||||||
surfer_set_security(surfer, SS_NONE);
|
surfer_set_security(surfer, SS_NONE);
|
||||||
|
@ -47,6 +47,10 @@ typedef struct _GHtml
|
|||||||
|
|
||||||
/* prototypes */
|
/* prototypes */
|
||||||
/* functions */
|
/* 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);
|
static void _ghtml_set_status(GtkWidget * widget, char const * status);
|
||||||
|
|
||||||
/* callbacks */
|
/* callbacks */
|
||||||
@ -60,6 +64,9 @@ static gboolean _on_download_requested(WebKitWebView * view,
|
|||||||
#endif
|
#endif
|
||||||
static void _on_hovering_over_link(WebKitWebView * view, const gchar * title,
|
static void _on_hovering_over_link(WebKitWebView * view, const gchar * title,
|
||||||
const gchar * url, gpointer data);
|
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,
|
static void _on_load_committed(WebKitWebView * view, WebKitWebFrame * frame,
|
||||||
gpointer data);
|
gpointer data);
|
||||||
static gboolean _on_load_error(WebKitWebView * view, WebKitWebFrame * frame,
|
static gboolean _on_load_error(WebKitWebView * view, WebKitWebFrame * frame,
|
||||||
@ -118,6 +125,10 @@ GtkWidget * ghtml_new(Surfer * surfer)
|
|||||||
#endif
|
#endif
|
||||||
g_signal_connect(G_OBJECT(ghtml->view), "hovering-over-link",
|
g_signal_connect(G_OBJECT(ghtml->view), "hovering-over-link",
|
||||||
G_CALLBACK(_on_hovering_over_link), widget);
|
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(
|
g_signal_connect(G_OBJECT(ghtml->view), "load-committed", G_CALLBACK(
|
||||||
_on_load_committed), widget);
|
_on_load_committed), widget);
|
||||||
g_signal_connect(G_OBJECT(ghtml->view), "load-error", G_CALLBACK(
|
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)
|
gboolean ghtml_can_go_forward(GtkWidget * widget)
|
||||||
{
|
{
|
||||||
GHtml * ghtml;
|
GHtml * ghtml;
|
||||||
@ -731,6 +762,32 @@ void ghtml_zoom_reset(GtkWidget * widget)
|
|||||||
|
|
||||||
/* private */
|
/* private */
|
||||||
/* functions */
|
/* 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)
|
static void _ghtml_set_status(GtkWidget * widget, char const * status)
|
||||||
{
|
{
|
||||||
GHtml * ghtml;
|
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 */
|
/* on_load_committed */
|
||||||
static void _on_load_committed(WebKitWebView * view, WebKitWebFrame * frame,
|
static void _on_load_committed(WebKitWebView * view, WebKitWebFrame * frame,
|
||||||
gpointer data)
|
gpointer data)
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/* $Id$ */
|
/* $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 file is part of DeforaOS Desktop Surfer */
|
||||||
/* This program is free software: you can redistribute it and/or modify
|
/* 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
|
* 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_back(GtkWidget * ghtml);
|
||||||
gboolean ghtml_can_go_forward(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_link_message(GtkWidget * ghtml);
|
||||||
char const * ghtml_get_location(GtkWidget * ghtml);
|
char const * ghtml_get_location(GtkWidget * ghtml);
|
||||||
gdouble ghtml_get_progress(GtkWidget * ghtml);
|
gdouble ghtml_get_progress(GtkWidget * ghtml);
|
||||||
|
25
src/surfer.c
25
src/surfer.c
@ -1,6 +1,6 @@
|
|||||||
/* $Id$ */
|
/* $Id$ */
|
||||||
static char const _copyright[] =
|
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 */
|
/* This file is part of DeforaOS Desktop Surfer */
|
||||||
static char const _license[] =
|
static char const _license[] =
|
||||||
"This program is free software: you can redistribute it and/or modify\n"
|
"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"
|
"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/>.";
|
"along with this program. If not, see <http://www.gnu.org/licenses/>.";
|
||||||
/* TODO:
|
/* TODO:
|
||||||
* - implement the favicon
|
|
||||||
* - support multiple profiles
|
* - support multiple profiles
|
||||||
* - implement "always ask" for the default download directory
|
* - implement "always ask" for the default download directory
|
||||||
* - provide access to SSL information in embedded mode
|
* - provide access to SSL information in embedded mode
|
||||||
@ -320,6 +319,7 @@ Surfer * _new_do(char const * url)
|
|||||||
group = gtk_accel_group_new();
|
group = gtk_accel_group_new();
|
||||||
surfer->window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
|
surfer->window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
|
||||||
gtk_window_add_accel_group(GTK_WINDOW(surfer->window), group);
|
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);
|
gtk_window_set_default_size(GTK_WINDOW(surfer->window), 1024, 768);
|
||||||
#if GTK_CHECK_VERSION(2, 6, 0)
|
#if GTK_CHECK_VERSION(2, 6, 0)
|
||||||
gtk_window_set_icon_name(GTK_WINDOW(surfer->window), "web-browser");
|
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 */
|
/* surfer_set_fullscreen */
|
||||||
void surfer_set_fullscreen(Surfer * surfer, gboolean fullscreen)
|
void surfer_set_fullscreen(Surfer * surfer, gboolean fullscreen)
|
||||||
{
|
{
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/* $Id$ */
|
/* $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 file is part of DeforaOS Desktop Surfer */
|
||||||
/* This program is free software: you can redistribute it and/or modify
|
/* 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
|
* 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);
|
GtkWidget * surfer_get_view(Surfer * surfer);
|
||||||
|
|
||||||
void surfer_set_enable_javascript(Surfer * surfer, gboolean enable);
|
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_fullscreen(Surfer * surfer, gboolean fullscreen);
|
||||||
void surfer_set_homepage(Surfer * surfer, char const * homepage);
|
void surfer_set_homepage(Surfer * surfer, char const * homepage);
|
||||||
void surfer_set_location(Surfer * surfer, char const * url);
|
void surfer_set_location(Surfer * surfer, char const * url);
|
||||||
|
Loading…
Reference in New Issue
Block a user