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
This commit is contained in:
blizzard%redhat.com 2000-05-04 03:53:30 +00:00
parent fde715371d
commit c2004f984a
3 changed files with 131 additions and 2 deletions

View File

@ -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<nsIWebNavigation> 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]);
}

View File

@ -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 */

View File

@ -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");
}