Implementing more callbacks

This commit is contained in:
Pierre Pronchery 2009-03-29 01:06:56 +00:00
parent 29074642fb
commit 4c76ecaf78
2 changed files with 54 additions and 7 deletions

View File

@ -25,7 +25,11 @@
/* callbacks */
static void _on_hovering_over_link(WebKitWebView * view, const gchar * title,
const gchar * url, gpointer data);
static void _on_progress_changed(WebKitWebView * view, gint progress,
static void _on_load_finished(WebKitWebView * view, WebKitWebFrame * frame,
gpointer data);
static void _on_load_progress_changed(WebKitWebView * view, gint progress,
gpointer data);
static void _on_load_started(WebKitWebView * view, WebKitWebFrame * frame,
gpointer data);
static void _on_title_changed(WebKitWebView * view, WebKitWebFrame * frame,
const gchar * title, gpointer data);
@ -42,16 +46,20 @@ GtkWidget * ghtml_new(Surfer * surfer)
/* widgets */
view = webkit_web_view_new();
widget = gtk_scrolled_window_new(NULL, NULL);
g_object_set_data(G_OBJECT(widget), "surfer", surfer);
g_object_set_data(G_OBJECT(widget), "view", view);
/* view */
g_signal_connect(G_OBJECT(view), "hovering-over-link", G_CALLBACK(
_on_hovering_over_link), widget);
g_signal_connect(G_OBJECT(view), "load-finished", G_CALLBACK(
_on_load_finished), widget);
g_signal_connect(G_OBJECT(view), "load-progress-changed", G_CALLBACK(
_on_progress_changed), widget);
_on_load_progress_changed), widget);
g_signal_connect(G_OBJECT(view), "load-started", G_CALLBACK(
_on_load_started), widget);
g_signal_connect(G_OBJECT(view), "title-changed", G_CALLBACK(
_on_title_changed), widget);
/* scrolled window */
g_object_set_data(G_OBJECT(widget), "surfer", surfer);
g_object_set_data(G_OBJECT(widget), "view", view);
gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(widget),
GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
gtk_container_add(GTK_CONTAINER(widget), view);
@ -219,7 +227,18 @@ static void _on_hovering_over_link(WebKitWebView * view, const gchar * title,
}
static void _on_progress_changed(WebKitWebView * view, gint progress,
static void _on_load_finished(WebKitWebView * view, WebKitWebFrame * arg1,
gpointer data)
{
Surfer * surfer;
surfer = g_object_get_data(G_OBJECT(data), "surfer");
surfer_set_progress(surfer, -1.0);
surfer_set_status(surfer, NULL);
}
static void _on_load_progress_changed(WebKitWebView * view, gint progress,
gpointer data)
{
Surfer * surfer;
@ -230,6 +249,17 @@ static void _on_progress_changed(WebKitWebView * view, gint progress,
}
static void _on_load_started(WebKitWebView * view, WebKitWebFrame * frame,
gpointer data)
{
Surfer * surfer;
surfer = g_object_get_data(G_OBJECT(data), "surfer");
surfer_set_progress(surfer, 0.0);
surfer_set_status(surfer, "Downloading...");
}
static void _on_title_changed(WebKitWebView * view, WebKitWebFrame * frame,
const gchar * title, gpointer data)
{

View File

@ -120,6 +120,7 @@ unsigned int surfer_cnt = 0;
#ifndef FOR_EMBEDDED
static GtkWidget * _new_menubar(Surfer * surfer);
#endif
static gboolean _new_idle(gpointer data);
Surfer * surfer_new(char const * url)
{
@ -212,8 +213,6 @@ Surfer * surfer_new(char const * url)
surfer_delete(surfer);
return NULL;
}
if(url != NULL)
ghtml_load_url(surfer->view, url);
gtk_box_pack_start(GTK_BOX(vbox), surfer->view, TRUE, TRUE, 0);
/* statusbar */
surfer->statusbox = gtk_hbox_new(FALSE, 0);
@ -232,6 +231,13 @@ Surfer * surfer_new(char const * url)
gtk_box_pack_start(GTK_BOX(vbox), surfer->statusbox, FALSE, FALSE, 0);
surfer_set_status(surfer, NULL);
surfer_cnt++;
/* load url as soon as we're idle */
if(url != NULL)
{
g_object_set_data(G_OBJECT(surfer->window), "url",
g_strdup(url)); /* XXX a bit ugly */
g_idle_add(_new_idle, surfer);
}
return surfer;
}
@ -297,6 +303,17 @@ static GtkWidget * _new_menubar(Surfer * surfer)
}
#endif /* !FOR_EMBEDDED */
static gboolean _new_idle(gpointer data)
{
Surfer * surfer = data;
gchar * url;
url = g_object_get_data(G_OBJECT(surfer->window), "url");
ghtml_load_url(surfer->view, url);
g_free(url);
return FALSE;
}
/* surfer_delete */
void surfer_delete(Surfer * surfer)