Implementing more callbacks
This commit is contained in:
parent
29074642fb
commit
4c76ecaf78
@ -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)
|
||||
{
|
||||
|
21
src/surfer.c
21
src/surfer.c
@ -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)
|
||||
|
Loading…
Reference in New Issue
Block a user