Implementing more callbacks
This commit is contained in:
parent
29074642fb
commit
4c76ecaf78
@ -25,7 +25,11 @@
|
|||||||
/* callbacks */
|
/* callbacks */
|
||||||
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);
|
||||||
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);
|
gpointer data);
|
||||||
static void _on_title_changed(WebKitWebView * view, WebKitWebFrame * frame,
|
static void _on_title_changed(WebKitWebView * view, WebKitWebFrame * frame,
|
||||||
const gchar * title, gpointer data);
|
const gchar * title, gpointer data);
|
||||||
@ -42,16 +46,20 @@ GtkWidget * ghtml_new(Surfer * surfer)
|
|||||||
/* widgets */
|
/* widgets */
|
||||||
view = webkit_web_view_new();
|
view = webkit_web_view_new();
|
||||||
widget = gtk_scrolled_window_new(NULL, NULL);
|
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 */
|
/* view */
|
||||||
g_signal_connect(G_OBJECT(view), "hovering-over-link", G_CALLBACK(
|
g_signal_connect(G_OBJECT(view), "hovering-over-link", G_CALLBACK(
|
||||||
_on_hovering_over_link), widget);
|
_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(
|
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(
|
g_signal_connect(G_OBJECT(view), "title-changed", G_CALLBACK(
|
||||||
_on_title_changed), widget);
|
_on_title_changed), widget);
|
||||||
/* scrolled window */
|
/* 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_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(widget),
|
||||||
GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
|
GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
|
||||||
gtk_container_add(GTK_CONTAINER(widget), view);
|
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)
|
gpointer data)
|
||||||
{
|
{
|
||||||
Surfer * surfer;
|
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,
|
static void _on_title_changed(WebKitWebView * view, WebKitWebFrame * frame,
|
||||||
const gchar * title, gpointer data)
|
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
|
#ifndef FOR_EMBEDDED
|
||||||
static GtkWidget * _new_menubar(Surfer * surfer);
|
static GtkWidget * _new_menubar(Surfer * surfer);
|
||||||
#endif
|
#endif
|
||||||
|
static gboolean _new_idle(gpointer data);
|
||||||
|
|
||||||
Surfer * surfer_new(char const * url)
|
Surfer * surfer_new(char const * url)
|
||||||
{
|
{
|
||||||
@ -212,8 +213,6 @@ Surfer * surfer_new(char const * url)
|
|||||||
surfer_delete(surfer);
|
surfer_delete(surfer);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
if(url != NULL)
|
|
||||||
ghtml_load_url(surfer->view, url);
|
|
||||||
gtk_box_pack_start(GTK_BOX(vbox), surfer->view, TRUE, TRUE, 0);
|
gtk_box_pack_start(GTK_BOX(vbox), surfer->view, TRUE, TRUE, 0);
|
||||||
/* statusbar */
|
/* statusbar */
|
||||||
surfer->statusbox = gtk_hbox_new(FALSE, 0);
|
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);
|
gtk_box_pack_start(GTK_BOX(vbox), surfer->statusbox, FALSE, FALSE, 0);
|
||||||
surfer_set_status(surfer, NULL);
|
surfer_set_status(surfer, NULL);
|
||||||
surfer_cnt++;
|
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;
|
return surfer;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -297,6 +303,17 @@ static GtkWidget * _new_menubar(Surfer * surfer)
|
|||||||
}
|
}
|
||||||
#endif /* !FOR_EMBEDDED */
|
#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 */
|
/* surfer_delete */
|
||||||
void surfer_delete(Surfer * surfer)
|
void surfer_delete(Surfer * surfer)
|
||||||
|
Loading…
Reference in New Issue
Block a user