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:
parent
fde715371d
commit
c2004f984a
@ -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]);
|
||||
}
|
||||
|
||||
@ -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 */
|
||||
|
||||
@ -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");
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user