From c2004f984a556ee0037df0d11518370666b89fbd Mon Sep 17 00:00:00 2001 From: "blizzard%redhat.com" Date: Thu, 4 May 2000 03:53:30 +0000 Subject: [PATCH] add signals to monitor loading, progress values, start and stop and the ability to stop a network load. git-svn-id: svn://10.0.0.236/trunk@68202 18797224-902f-48f8-a5cc-f745e15eee43 --- .../embedding/browser/gtk/src/gtkmozembed.cpp | 64 ++++++++++++++++++- .../embedding/browser/gtk/src/gtkmozembed.h | 24 ++++++- .../browser/gtk/tests/TestGtkEmbed.cpp | 45 +++++++++++++ 3 files changed, 131 insertions(+), 2 deletions(-) diff --git a/mozilla/embedding/browser/gtk/src/gtkmozembed.cpp b/mozilla/embedding/browser/gtk/src/gtkmozembed.cpp index 43dbe48b2c1..f9f48aa8500 100644 --- a/mozilla/embedding/browser/gtk/src/gtkmozembed.cpp +++ b/mozilla/embedding/browser/gtk/src/gtkmozembed.cpp @@ -53,7 +53,10 @@ enum { JS_STATUS, LOCATION, TITLE, + PROGRESS, NET_STATUS, + NET_START, + NET_STOP, LAST_SIGNAL }; @@ -116,6 +119,9 @@ gtk_moz_embed_handle_title_change(GtkMozEmbed *embed); static void gtk_moz_embed_handle_progress(GtkMozEmbed *embed, gint32 maxprogress, gint32 curprogress); +static void +gtk_moz_embed_handle_net(GtkMozEmbed *embed, gint32 flags); + static GtkBinClass *parent_class; static PRBool NS_SetupRegistryCalled = PR_FALSE; @@ -233,6 +239,13 @@ gtk_moz_embed_class_init(GtkMozEmbedClass *klass) GTK_SIGNAL_OFFSET(GtkMozEmbedClass, title), gtk_marshal_NONE__NONE, GTK_TYPE_NONE, 0); + moz_embed_signals[PROGRESS] = + gtk_signal_new("progress", + GTK_RUN_FIRST, + object_class->type, + GTK_SIGNAL_OFFSET(GtkMozEmbedClass, progress), + gtk_marshal_NONE__INT, + GTK_TYPE_NONE, 1, GTK_TYPE_INT); moz_embed_signals[NET_STATUS] = gtk_signal_new("net_status", GTK_RUN_FIRST, @@ -240,6 +253,20 @@ gtk_moz_embed_class_init(GtkMozEmbedClass *klass) GTK_SIGNAL_OFFSET(GtkMozEmbedClass, net_status), gtk_marshal_NONE__INT_INT, GTK_TYPE_NONE, 2, GTK_TYPE_INT, GTK_TYPE_INT); + moz_embed_signals[NET_START] = + gtk_signal_new("net_start", + GTK_RUN_FIRST, + object_class->type, + GTK_SIGNAL_OFFSET(GtkMozEmbedClass, net_start), + gtk_marshal_NONE__NONE, + GTK_TYPE_NONE, 0); + moz_embed_signals[NET_STOP] = + gtk_signal_new("net_stop", + GTK_RUN_FIRST, + object_class->type, + GTK_SIGNAL_OFFSET(GtkMozEmbedClass, net_stop), + gtk_marshal_NONE__NONE, + GTK_TYPE_NONE, 0); gtk_object_class_add_signals(object_class, moz_embed_signals, LAST_SIGNAL); @@ -283,6 +310,8 @@ gtk_moz_embed_init(GtkMozEmbed *embed) embed); embed_private->embed->SetProgressCallback((void (*)(void *, gint32, gint32))gtk_moz_embed_handle_progress, embed); + embed_private->embed->SetNetCallback((void (*)(void *, gint32))gtk_moz_embed_handle_net, + embed); } GtkWidget * @@ -318,6 +347,24 @@ gtk_moz_embed_load_url(GtkWidget *widget, const char *url) navigation->LoadURI(URLString.GetUnicode()); } +void +gtk_moz_embed_stop_load (GtkWidget *widget) +{ + GtkMozEmbed *embed; + GtkMozEmbedPrivate *embed_private; + + g_return_if_fail (widget != NULL); + g_return_if_fail (GTK_IS_MOZ_EMBED(widget)); + + embed = GTK_MOZ_EMBED(widget); + + embed_private = (GtkMozEmbedPrivate *)embed->data; + + nsCOMPtr navigation = do_QueryInterface(embed_private->webBrowser); + g_return_if_fail(navigation); + navigation->Stop(); +} + char * gtk_moz_embed_get_link_message (GtkWidget *widget) { @@ -675,5 +722,20 @@ gtk_moz_embed_handle_progress(GtkMozEmbed *embed, gint32 maxprogress, gint32 cur { g_return_if_fail (GTK_IS_MOZ_EMBED(embed)); - gtk_signal_emit(GTK_OBJECT(embed), moz_embed_signals[NET_STATUS], maxprogress, curprogress); + gtk_signal_emit(GTK_OBJECT(embed), moz_embed_signals[PROGRESS], maxprogress, curprogress); +} + +static void +gtk_moz_embed_handle_net(GtkMozEmbed *embed, gint32 flags) +{ + g_return_if_fail (GTK_IS_MOZ_EMBED(embed)); + + // if we've got the start flag, emit the signal + if (flags & gtk_moz_embed_flag_win_start) + gtk_signal_emit(GTK_OBJECT(embed), moz_embed_signals[NET_START]); + // for people who know what they are doing + gtk_signal_emit(GTK_OBJECT(embed), moz_embed_signals[NET_STATUS]); + // and for stop, too + if (flags & gtk_moz_embed_flag_win_stop) + gtk_signal_emit(GTK_OBJECT(embed), moz_embed_signals[NET_STOP]); } diff --git a/mozilla/embedding/browser/gtk/src/gtkmozembed.h b/mozilla/embedding/browser/gtk/src/gtkmozembed.h index 6574bc3b014..93a166e914e 100644 --- a/mozilla/embedding/browser/gtk/src/gtkmozembed.h +++ b/mozilla/embedding/browser/gtk/src/gtkmozembed.h @@ -52,17 +52,39 @@ struct _GtkMozEmbedClass void (* js_status) (GtkMozEmbed *embed); void (* location) (GtkMozEmbed *embed); void (* title) (GtkMozEmbed *embed); - void (* net_status) (GtkMozEmbed *embed, gint32 status, gint32 status); + void (* progress) (GtkMozEmbed *embed, gint32 maxprogress, gint32 curprogress); + void (* net_status) (GtkMozEmbed *embed, gint32 status); + void (* net_start) (GtkMozEmbed *embed); + void (* net_stop) (GtkMozEmbed *embed); }; extern GtkType gtk_moz_embed_get_type (void); extern GtkWidget *gtk_moz_embed_new (void); extern void gtk_moz_embed_load_url (GtkWidget *widget, const char *url); +extern void gtk_moz_embed_stop_load (GtkWidget *widget); extern char *gtk_moz_embed_get_link_message (GtkWidget *widget); extern char *gtk_moz_embed_get_js_status (GtkWidget *widget); extern char *gtk_moz_embed_get_title (GtkWidget *widget); extern char *gtk_moz_embed_get_location (GtkWidget *widget); +/* These are straight out of nsIWebProgress.h */ + +enum { gtk_moz_embed_flag_net_start = 1, + gtk_moz_embed_flag_net_stop = 2, + gtk_moz_embed_flag_net_dns = 4, + gtk_moz_embed_flag_net_connecting = 8, + gtk_moz_embed_flag_net_redirecting = 16, + gtk_moz_embed_flag_net_negotiating = 32, + gtk_moz_embed_flag_net_transferring = 64, + gtk_moz_embed_flag_net_failedDNS = 4096, + gtk_moz_embed_flag_net_failedConnect = 8192, + gtk_moz_embed_flag_net_failedTransfer = 16384, + gtk_moz_embed_flag_net_failedTimeout = 32768, + gtk_moz_embed_flag_net_userCancelled = 65536, + gtk_moz_embed_flag_win_start = 1048576, + gtk_moz_embed_flag_win_stop = 2097152 }; + + #ifdef __cplusplus } #endif /* __cplusplus */ diff --git a/mozilla/embedding/browser/gtk/tests/TestGtkEmbed.cpp b/mozilla/embedding/browser/gtk/tests/TestGtkEmbed.cpp index ec179e88f95..3159dbca643 100644 --- a/mozilla/embedding/browser/gtk/tests/TestGtkEmbed.cpp +++ b/mozilla/embedding/browser/gtk/tests/TestGtkEmbed.cpp @@ -24,6 +24,18 @@ location_cb(GtkMozEmbed *embed, gpointer data); void title_cb(GtkMozEmbed *embed, gpointer data); +void +progress_cb(GtkMozEmbed *embed, gint32 maxprogress, gint32 curprogress, gpointer data); + +void +net_status_cb(GtkMozEmbed *embed, gint32 flags, gpointer data); + +void +net_start_cb(GtkMozEmbed *embed, gpointer data); + +void +net_stop_cb(GtkMozEmbed *embed, gpointer data); + int main(int argc, char **argv) { @@ -57,6 +69,14 @@ main(int argc, char **argv) GTK_SIGNAL_FUNC(location_cb), NULL); gtk_signal_connect(GTK_OBJECT(moz_embed), "title", GTK_SIGNAL_FUNC(title_cb), NULL); + gtk_signal_connect(GTK_OBJECT(moz_embed), "progress", + GTK_SIGNAL_FUNC(progress_cb), NULL); + gtk_signal_connect(GTK_OBJECT(moz_embed), "net_status", + GTK_SIGNAL_FUNC(net_status_cb), NULL); + gtk_signal_connect(GTK_OBJECT(moz_embed), "net_start", + GTK_SIGNAL_FUNC(net_start_cb), NULL); + gtk_signal_connect(GTK_OBJECT(moz_embed), "net_stop", + GTK_SIGNAL_FUNC(net_stop_cb), NULL); gtk_widget_set_usize(moz_embed, 100, 100); gtk_box_pack_end(GTK_BOX(box), moz_embed, TRUE, TRUE, 1); @@ -112,3 +132,28 @@ title_cb(GtkMozEmbed *embed, gpointer data) { g_print("title_cb\n"); } + + +void +progress_cb(GtkMozEmbed *embed, gint32 maxprogress, gint32 curprogress, gpointer data) +{ + g_print("progress_cb\n"); +} + +void +net_status_cb(GtkMozEmbed *embed, gint32 flags, gpointer data) +{ + g_print("net_status\n"); +} + +void +net_start_cb(GtkMozEmbed *embed, gpointer data) +{ + g_print("net_start\n"); +} + +void +net_stop_cb(GtkMozEmbed *embed, gpointer data) +{ + g_print("net_stop\n"); +}