зеркало из https://github.com/mozilla/gecko-dev.git
fix bug where we were returning the js status string instead of the location. remove the toplevel window handling code for now. reverse the cur + max totals for progress updates since it makes more sense that way. fix signal marshallers to assume that int != int32. fix wrong marshaler for net_status and progress signals. change prototypes from GtkWidget * to GtkMozEmbed * since that's the Gtk way. make sure to actually pass the flags during a net_status signal.
This commit is contained in:
Родитель
3dd758d1b9
Коммит
73c394b953
|
@ -196,8 +196,8 @@ NS_IMETHODIMP GtkMozEmbedChrome::GetLocation (char **retval)
|
|||
PR_LOG(mozEmbedLm, PR_LOG_DEBUG, ("GtkMozEmbedChrome::GetLocation\n"));
|
||||
NS_ENSURE_ARG_POINTER(retval);
|
||||
*retval = NULL;
|
||||
if (mJSStatus)
|
||||
*retval = nsCRT::strdup(mJSStatus);
|
||||
if (mLocation)
|
||||
*retval = nsCRT::strdup(mLocation);
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
|
@ -279,10 +279,10 @@ NS_IMETHODIMP GtkMozEmbedChrome::GetNewBrowser(PRUint32 chromeMask,
|
|||
nsIWebBrowser **_retval)
|
||||
{
|
||||
PR_LOG(mozEmbedLm, PR_LOG_DEBUG, ("GtkMozEmbedChrome::GetNewBrowser\n"));
|
||||
NS_ENSURE_STATE(mNewBrowserCB);
|
||||
if (mNewBrowserCB)
|
||||
return mNewBrowserCB(chromeMask, _retval, mNewBrowserCBData);
|
||||
return NS_ERROR_FAILURE;
|
||||
else
|
||||
return NS_ERROR_NOT_IMPLEMENTED;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP GtkMozEmbedChrome::FindNamedBrowserItem(const PRUnichar *aName,
|
||||
|
@ -392,8 +392,8 @@ NS_IMETHODIMP GtkMozEmbedChrome::OnProgressChange(nsIChannel *channel, PRInt32 c
|
|||
PRInt32 maxTotalProgress)
|
||||
{
|
||||
PR_LOG(mozEmbedLm, PR_LOG_DEBUG, ("GtkMozEmbedChrome::OnProgressChange\n"));
|
||||
PR_LOG(mozEmbedLm, PR_LOG_DEBUG, ("maxTotalProgress is %d and curTotalProgress is %d\n",
|
||||
maxTotalProgress, curTotalProgress));
|
||||
PR_LOG(mozEmbedLm, PR_LOG_DEBUG, ("curTotalProgress is %d and maxTotalProgress is %d\n",
|
||||
curTotalProgress, maxTotalProgress));
|
||||
if (maxTotalProgress >= 0)
|
||||
{
|
||||
PRUint32 percentage = (curTotalProgress * 100) / maxTotalProgress;
|
||||
|
@ -406,7 +406,7 @@ NS_IMETHODIMP GtkMozEmbedChrome::OnProgressChange(nsIChannel *channel, PRInt32 c
|
|||
|
||||
// call our callback if it's been registered
|
||||
if (mProgressCB)
|
||||
mProgressCB(mProgressCBData, maxTotalProgress, curTotalProgress);
|
||||
mProgressCB(mProgressCBData, curTotalProgress, maxTotalProgress);
|
||||
return NS_ERROR_NOT_IMPLEMENTED;
|
||||
}
|
||||
|
||||
|
|
|
@ -95,14 +95,6 @@ gtk_moz_embed_handle_show(GtkWidget *widget, gpointer user_data);
|
|||
static void
|
||||
gtk_moz_embed_handle_event_queue(gpointer data, gint source, GdkInputCondition condition);
|
||||
|
||||
/* call back to create a new toplevel window */
|
||||
static nsresult
|
||||
gtk_moz_embed_handle_new_browser(PRUint32 chromeMask, nsIWebBrowser **_retval, void *aData);
|
||||
|
||||
/* call back to track visibility changes */
|
||||
static void
|
||||
gtk_moz_embed_handle_toplevel_visibility_change(PRBool aVisibility, void *aData);
|
||||
|
||||
/* callbacks from various changes in the window */
|
||||
static void
|
||||
gtk_moz_embed_handle_link_change(GtkMozEmbed *embed);
|
||||
|
@ -117,10 +109,10 @@ static void
|
|||
gtk_moz_embed_handle_title_change(GtkMozEmbed *embed);
|
||||
|
||||
static void
|
||||
gtk_moz_embed_handle_progress(GtkMozEmbed *embed, gint32 maxprogress, gint32 curprogress);
|
||||
gtk_moz_embed_handle_progress(GtkMozEmbed *embed, gint32 curprogress, gint32 maxprogress);
|
||||
|
||||
static void
|
||||
gtk_moz_embed_handle_net(GtkMozEmbed *embed, gint32 flags);
|
||||
gtk_moz_embed_handle_net(GtkMozEmbed *embed, gint flags);
|
||||
|
||||
static GtkBinClass *parent_class;
|
||||
|
||||
|
@ -244,15 +236,15 @@ gtk_moz_embed_class_init(GtkMozEmbedClass *klass)
|
|||
GTK_RUN_FIRST,
|
||||
object_class->type,
|
||||
GTK_SIGNAL_OFFSET(GtkMozEmbedClass, progress),
|
||||
gtk_marshal_NONE__INT,
|
||||
GTK_TYPE_NONE, 1, GTK_TYPE_INT);
|
||||
gtk_marshal_NONE__INT_INT,
|
||||
GTK_TYPE_NONE, 2, GTK_TYPE_INT, GTK_TYPE_INT);
|
||||
moz_embed_signals[NET_STATUS] =
|
||||
gtk_signal_new("net_status",
|
||||
GTK_RUN_FIRST,
|
||||
object_class->type,
|
||||
GTK_SIGNAL_OFFSET(GtkMozEmbedClass, net_status),
|
||||
gtk_marshal_NONE__INT_INT,
|
||||
GTK_TYPE_NONE, 2, GTK_TYPE_INT, GTK_TYPE_INT);
|
||||
gtk_marshal_NONE__INT,
|
||||
GTK_TYPE_NONE, 1, GTK_TYPE_INT);
|
||||
moz_embed_signals[NET_START] =
|
||||
gtk_signal_new("net_start",
|
||||
GTK_RUN_FIRST,
|
||||
|
@ -308,9 +300,9 @@ gtk_moz_embed_init(GtkMozEmbed *embed)
|
|||
embed);
|
||||
embed_private->embed->SetTitleChangeCallback((generic_cb_with_data)gtk_moz_embed_handle_title_change,
|
||||
embed);
|
||||
embed_private->embed->SetProgressCallback((void (*)(void *, gint32, gint32))gtk_moz_embed_handle_progress,
|
||||
embed_private->embed->SetProgressCallback((void (*)(void *, gint, gint))gtk_moz_embed_handle_progress,
|
||||
embed);
|
||||
embed_private->embed->SetNetCallback((void (*)(void *, gint32))gtk_moz_embed_handle_net,
|
||||
embed_private->embed->SetNetCallback((void (*)(void *, gint))gtk_moz_embed_handle_net,
|
||||
embed);
|
||||
}
|
||||
|
||||
|
@ -321,20 +313,17 @@ gtk_moz_embed_new(void)
|
|||
}
|
||||
|
||||
void
|
||||
gtk_moz_embed_load_url(GtkWidget *widget, const char *url)
|
||||
gtk_moz_embed_load_url(GtkMozEmbed *embed, const char *url)
|
||||
{
|
||||
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);
|
||||
g_return_if_fail (embed != NULL);
|
||||
g_return_if_fail (GTK_IS_MOZ_EMBED(embed));
|
||||
|
||||
embed_private = (GtkMozEmbedPrivate *)embed->data;
|
||||
|
||||
// If the widget aint realized, save the url for later
|
||||
if (!GTK_WIDGET_REALIZED(widget))
|
||||
if (!GTK_WIDGET_REALIZED(embed))
|
||||
{
|
||||
embed_private->mInitialURL = url;
|
||||
return;
|
||||
|
@ -348,15 +337,12 @@ gtk_moz_embed_load_url(GtkWidget *widget, const char *url)
|
|||
}
|
||||
|
||||
void
|
||||
gtk_moz_embed_stop_load (GtkWidget *widget)
|
||||
gtk_moz_embed_stop_load (GtkMozEmbed *embed)
|
||||
{
|
||||
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);
|
||||
g_return_if_fail (embed != NULL);
|
||||
g_return_if_fail (GTK_IS_MOZ_EMBED(embed));
|
||||
|
||||
embed_private = (GtkMozEmbedPrivate *)embed->data;
|
||||
|
||||
|
@ -366,16 +352,13 @@ gtk_moz_embed_stop_load (GtkWidget *widget)
|
|||
}
|
||||
|
||||
char *
|
||||
gtk_moz_embed_get_link_message (GtkWidget *widget)
|
||||
gtk_moz_embed_get_link_message (GtkMozEmbed *embed)
|
||||
{
|
||||
GtkMozEmbed *embed;
|
||||
GtkMozEmbedPrivate *embed_private;
|
||||
char *retval = NULL;
|
||||
|
||||
g_return_val_if_fail ((widget != NULL), NULL);
|
||||
g_return_val_if_fail ((GTK_IS_MOZ_EMBED(widget)), NULL);
|
||||
|
||||
embed = GTK_MOZ_EMBED(widget);
|
||||
g_return_val_if_fail ((embed != NULL), NULL);
|
||||
g_return_val_if_fail ((GTK_IS_MOZ_EMBED(embed)), NULL);
|
||||
|
||||
embed_private = (GtkMozEmbedPrivate *)embed->data;
|
||||
|
||||
|
@ -385,16 +368,13 @@ gtk_moz_embed_get_link_message (GtkWidget *widget)
|
|||
}
|
||||
|
||||
char *
|
||||
gtk_moz_embed_get_js_status (GtkWidget *widget)
|
||||
gtk_moz_embed_get_js_status (GtkMozEmbed *embed)
|
||||
{
|
||||
GtkMozEmbed *embed;
|
||||
GtkMozEmbedPrivate *embed_private;
|
||||
char *retval = NULL;
|
||||
|
||||
g_return_val_if_fail ((widget != NULL), NULL);
|
||||
g_return_val_if_fail ((GTK_IS_MOZ_EMBED(widget)), NULL);
|
||||
|
||||
embed = GTK_MOZ_EMBED(widget);
|
||||
g_return_val_if_fail ((embed != NULL), NULL);
|
||||
g_return_val_if_fail ((GTK_IS_MOZ_EMBED(embed)), NULL);
|
||||
|
||||
embed_private = (GtkMozEmbedPrivate *)embed->data;
|
||||
|
||||
|
@ -404,16 +384,13 @@ gtk_moz_embed_get_js_status (GtkWidget *widget)
|
|||
}
|
||||
|
||||
char *
|
||||
gtk_moz_embed_get_title (GtkWidget *widget)
|
||||
gtk_moz_embed_get_title (GtkMozEmbed *embed)
|
||||
{
|
||||
GtkMozEmbed *embed;
|
||||
GtkMozEmbedPrivate *embed_private;
|
||||
char *retval = NULL;
|
||||
|
||||
g_return_val_if_fail ((widget != NULL), NULL);
|
||||
g_return_val_if_fail ((GTK_IS_MOZ_EMBED(widget)), NULL);
|
||||
|
||||
embed = GTK_MOZ_EMBED(widget);
|
||||
g_return_val_if_fail ((embed != NULL), NULL);
|
||||
g_return_val_if_fail ((GTK_IS_MOZ_EMBED(embed)), NULL);
|
||||
|
||||
embed_private = (GtkMozEmbedPrivate *)embed->data;
|
||||
|
||||
|
@ -423,16 +400,13 @@ gtk_moz_embed_get_title (GtkWidget *widget)
|
|||
}
|
||||
|
||||
char *
|
||||
gtk_moz_embed_get_location (GtkWidget *widget)
|
||||
gtk_moz_embed_get_location (GtkMozEmbed *embed)
|
||||
{
|
||||
GtkMozEmbed *embed;
|
||||
GtkMozEmbedPrivate *embed_private;
|
||||
char *retval = NULL;
|
||||
|
||||
g_return_val_if_fail ((widget != NULL), NULL);
|
||||
g_return_val_if_fail ((GTK_IS_MOZ_EMBED(widget)), NULL);
|
||||
|
||||
embed = GTK_MOZ_EMBED(widget);
|
||||
g_return_val_if_fail ((embed != NULL), NULL);
|
||||
g_return_val_if_fail ((GTK_IS_MOZ_EMBED(embed)), NULL);
|
||||
|
||||
embed_private = (GtkMozEmbedPrivate *)embed->data;
|
||||
|
||||
|
@ -494,8 +468,6 @@ gtk_moz_embed_realize(GtkWidget *widget)
|
|||
{
|
||||
webBrowserBaseWindow->SetVisibility(PR_TRUE);
|
||||
}
|
||||
// set our callback for creating new browser windows
|
||||
embed_private->embed->SetNewBrowserCallback(gtk_moz_embed_handle_new_browser, widget);
|
||||
// set our webBrowser object as the content listener object
|
||||
nsCOMPtr<nsIURIContentListener> uriListener;
|
||||
uriListener = do_QueryInterface(embed_private->embed);
|
||||
|
@ -506,7 +478,7 @@ gtk_moz_embed_realize(GtkWidget *widget)
|
|||
if (embed_private->mInitialURL.Length() > 0)
|
||||
{
|
||||
const char * foo = (const char *) embed_private->mInitialURL;
|
||||
gtk_moz_embed_load_url (widget, foo);
|
||||
gtk_moz_embed_load_url (GTK_MOZ_EMBED(widget), foo);
|
||||
embed_private->mInitialURL = "";
|
||||
}
|
||||
}
|
||||
|
@ -608,83 +580,6 @@ gtk_moz_embed_handle_event_queue(gpointer data, gint source, GdkInputCondition c
|
|||
eventQueue->ProcessPendingEvents();
|
||||
}
|
||||
|
||||
static nsresult
|
||||
gtk_moz_embed_handle_new_browser(PRUint32 chromeMask, nsIWebBrowser **_retval, void *aData)
|
||||
{
|
||||
GtkMozEmbed *embed;
|
||||
GtkMozEmbedPrivate *embed_private;
|
||||
|
||||
g_print("gtk_moz_embed_handle_new_browser\n");
|
||||
|
||||
g_return_val_if_fail ((aData != NULL), NS_ERROR_INVALID_ARG);
|
||||
g_return_val_if_fail ((GTK_IS_MOZ_EMBED(aData)), NS_ERROR_INVALID_ARG);
|
||||
|
||||
embed = GTK_MOZ_EMBED(aData);
|
||||
embed_private = (GtkMozEmbedPrivate *)embed->data;
|
||||
|
||||
// XXX what we need to do here is have a signal or something that
|
||||
// allows us to allow user defined functions to create the toplevel
|
||||
// window
|
||||
GtkWidget *newTopLevel = NULL;
|
||||
GtkWidget *newMozEmbed = NULL;
|
||||
GtkMozEmbed *newEmbed = NULL;
|
||||
GtkMozEmbedPrivate *newEmbedPrivate = NULL;
|
||||
|
||||
newTopLevel = gtk_window_new(GTK_WINDOW_TOPLEVEL);
|
||||
gtk_widget_realize(newTopLevel);
|
||||
|
||||
newMozEmbed = gtk_moz_embed_new();
|
||||
// add this new child as a container of the toplevel window before
|
||||
// we realize it
|
||||
gtk_container_add(GTK_CONTAINER(newTopLevel), newMozEmbed);
|
||||
// realize it to trigger the creation of all of the mozilla objects
|
||||
gtk_widget_realize(newMozEmbed);
|
||||
|
||||
// get our hands on the embed internals
|
||||
newEmbed = GTK_MOZ_EMBED(newMozEmbed);
|
||||
newEmbedPrivate = (GtkMozEmbedPrivate *)newEmbed->data;
|
||||
|
||||
// track visibility requests
|
||||
newEmbedPrivate->embed->SetVisibilityCallback(gtk_moz_embed_handle_toplevel_visibility_change,
|
||||
newMozEmbed);
|
||||
|
||||
*_retval = newEmbedPrivate->webBrowser;
|
||||
g_print("returning new toplevel web browser as %p\n", *_retval);
|
||||
NS_ADDREF(*_retval);
|
||||
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
static void
|
||||
gtk_moz_embed_handle_toplevel_visibility_change(PRBool aVisibility, void *aData)
|
||||
{
|
||||
GtkMozEmbed *embed;
|
||||
GtkMozEmbedPrivate *embed_private;
|
||||
GtkWidget *topLevelWidget;
|
||||
|
||||
g_print("gtk_moz_embed_handle_toplevel_visibility_change\n");
|
||||
|
||||
g_return_if_fail (aData != NULL);
|
||||
g_return_if_fail (GTK_IS_MOZ_EMBED(aData));
|
||||
|
||||
embed = GTK_MOZ_EMBED(aData);
|
||||
embed_private = (GtkMozEmbedPrivate *)embed->data;
|
||||
|
||||
// the ->parent is always going to be the GtkWindow
|
||||
if (aVisibility)
|
||||
{
|
||||
topLevelWidget = gtk_widget_get_toplevel(GTK_WIDGET(embed));
|
||||
gtk_widget_show_all(topLevelWidget);
|
||||
//gtk_widget_show(GTK_WIDGET(embed));
|
||||
//gtk_widget_show(GTK_WIDGET(embed)->parent);
|
||||
}
|
||||
else
|
||||
{
|
||||
gtk_widget_hide(GTK_WIDGET(embed)->parent);
|
||||
gtk_widget_hide(GTK_WIDGET(embed));
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
gtk_moz_embed_handle_link_change(GtkMozEmbed *embed)
|
||||
{
|
||||
|
@ -718,11 +613,11 @@ gtk_moz_embed_handle_title_change(GtkMozEmbed *embed)
|
|||
}
|
||||
|
||||
static void
|
||||
gtk_moz_embed_handle_progress(GtkMozEmbed *embed, gint32 maxprogress, gint32 curprogress)
|
||||
gtk_moz_embed_handle_progress(GtkMozEmbed *embed, gint32 curprogress, gint32 maxprogress)
|
||||
{
|
||||
g_return_if_fail (GTK_IS_MOZ_EMBED(embed));
|
||||
|
||||
gtk_signal_emit(GTK_OBJECT(embed), moz_embed_signals[PROGRESS], maxprogress, curprogress);
|
||||
gtk_signal_emit(GTK_OBJECT(embed), moz_embed_signals[PROGRESS], curprogress, maxprogress);
|
||||
}
|
||||
|
||||
static void
|
||||
|
@ -734,7 +629,7 @@ gtk_moz_embed_handle_net(GtkMozEmbed *embed, gint32 flags)
|
|||
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]);
|
||||
gtk_signal_emit(GTK_OBJECT(embed), moz_embed_signals[NET_STATUS], flags);
|
||||
// and for stop, too
|
||||
if (flags & gtk_moz_embed_flag_win_stop)
|
||||
gtk_signal_emit(GTK_OBJECT(embed), moz_embed_signals[NET_STOP]);
|
||||
|
|
|
@ -52,20 +52,20 @@ struct _GtkMozEmbedClass
|
|||
void (* js_status) (GtkMozEmbed *embed);
|
||||
void (* location) (GtkMozEmbed *embed);
|
||||
void (* title) (GtkMozEmbed *embed);
|
||||
void (* progress) (GtkMozEmbed *embed, gint32 maxprogress, gint32 curprogress);
|
||||
void (* net_status) (GtkMozEmbed *embed, gint32 status);
|
||||
void (* progress) (GtkMozEmbed *embed, gint maxprogress, gint curprogress);
|
||||
void (* net_status) (GtkMozEmbed *embed, gint 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);
|
||||
extern void gtk_moz_embed_load_url (GtkMozEmbed *embed, const char *url);
|
||||
extern void gtk_moz_embed_stop_load (GtkMozEmbed *embed);
|
||||
extern char *gtk_moz_embed_get_link_message (GtkMozEmbed *embed);
|
||||
extern char *gtk_moz_embed_get_js_status (GtkMozEmbed *embed);
|
||||
extern char *gtk_moz_embed_get_title (GtkMozEmbed *embed);
|
||||
extern char *gtk_moz_embed_get_location (GtkMozEmbed *embed);
|
||||
|
||||
/* These are straight out of nsIWebProgress.h */
|
||||
|
||||
|
|
Загрузка…
Ссылка в новой задаче