From 7a4c6ea9e29b91d2b79412a68b18598b0e30e067 Mon Sep 17 00:00:00 2001 From: "blizzard%redhat.com" Date: Wed, 8 Dec 1999 23:07:13 +0000 Subject: [PATCH] fix for bug #21169. fix problems with resizing and showing the gtkmozilla widget when embedding it. r=pavlov, a=chofmann --- .../embed/gtk/lib/GtkMozillaContainer.cpp | 12 +++++---- webshell/embed/gtk/lib/gtkmozilla.cpp | 25 +++++++++++++++---- 2 files changed, 27 insertions(+), 10 deletions(-) diff --git a/webshell/embed/gtk/lib/GtkMozillaContainer.cpp b/webshell/embed/gtk/lib/GtkMozillaContainer.cpp index e438c52b3b6e..b44f78aa7583 100644 --- a/webshell/embed/gtk/lib/GtkMozillaContainer.cpp +++ b/webshell/embed/gtk/lib/GtkMozillaContainer.cpp @@ -64,6 +64,8 @@ void GtkMozillaContainer::Show() { GtkAllocation *alloc = >K_WIDGET(mozilla)->allocation; + + // g_print("GtkMozillaContainer::Show\n"); nsresult rv = nsRepository::CreateInstance(kWebShellCID, nsnull, @@ -87,6 +89,7 @@ GtkMozillaContainer::Show() mMozArea = gtk_mozarea_new(); gtk_container_add(GTK_CONTAINER(mozilla), mMozArea); gtk_widget_realize(mMozArea); + gtk_widget_show(mMozArea); mSuperWin = GTK_MOZAREA(mMozArea)->superwin; //printf("Init, size: %d, %d\n", width, height); @@ -116,11 +119,10 @@ GtkMozillaContainer::Show() void GtkMozillaContainer::Resize(gint w, gint h) { - int new_size; GtkAllocation alloc; - // printf("GtkMozillaContainer::Resize called width: %d, %d\n", w, h); - new_size = ((width != w) || (height != h)); - if (new_size && mWebShell) { + + // g_print("GtkMozillaContainer::Resize called width: %d, %d\n", w, h); + if (mWebShell) { width = w; height = h; //printf("GtkMozillaContainer::Resize setting to: %d, %d\n", width, height); @@ -128,7 +130,7 @@ GtkMozillaContainer::Resize(gint w, gint h) alloc.y = GTK_WIDGET(mozilla)->allocation.y; alloc.width = w; alloc.height = h; - gtk_widget_size_allocate(GTK_WIDGET(mozilla), &alloc); + // gtk_widget_size_allocate(GTK_WIDGET(mozilla), &alloc); gdk_superwin_resize(mSuperWin, width, height); mWebShell->SetBounds(0, 0, width, height); } diff --git a/webshell/embed/gtk/lib/gtkmozilla.cpp b/webshell/embed/gtk/lib/gtkmozilla.cpp index 9e0956496468..17daa9647cfb 100644 --- a/webshell/embed/gtk/lib/gtkmozilla.cpp +++ b/webshell/embed/gtk/lib/gtkmozilla.cpp @@ -32,6 +32,7 @@ extern "C" void NS_SetupRegistry(); static void gtk_mozilla_realize(GtkWidget *widget); static void gtk_mozilla_finalize (GtkObject *object); +static void gtk_mozilla_size_allocate (GtkWidget *widget, GtkAllocation *allocation); typedef gboolean (*GtkSignal_BOOL__POINTER_INT) (GtkObject * object, gpointer arg1, @@ -108,6 +109,7 @@ gtk_mozilla_class_init (GtkMozillaClass *klass) object_class->finalize = gtk_mozilla_finalize; widget_class->realize = gtk_mozilla_realize; + widget_class->size_allocate = gtk_mozilla_size_allocate; klass->will_load_url = NULL; klass->begin_load_url = NULL; @@ -129,6 +131,17 @@ gtk_mozilla_realize (GtkWidget *widget) moz_container->Show(); } +static void +gtk_mozilla_size_allocate (GtkWidget *widget, GtkAllocation *allocation) +{ + g_return_if_fail(widget != NULL); + g_return_if_fail(GTK_IS_WIDGET(widget)); + g_return_if_fail(GTK_IS_MOZILLA(widget)); + if (GTK_WIDGET_CLASS(parent_class)->size_allocate) + (*GTK_WIDGET_CLASS(parent_class)->size_allocate)(widget, allocation); + gtk_mozilla_resize(GTK_MOZILLA(widget), allocation->width, allocation->height); +} + // THIS is a total hack. Needed cause mozilla wont work without prefs // no more. Having the prefs be static over here is bad and a better // fix is to make them members of some kind of structure which gets @@ -151,7 +164,7 @@ static void event_processor_callback(gpointer data, gint source, GdkInputCondition condition) { - printf("event_processor_callback()\n"); + // printf("event_processor_callback()\n"); nsIEventQueue *eventQueue = (nsIEventQueue*)data; eventQueue->ProcessPendingEvents(); } @@ -161,6 +174,7 @@ GtkType gtk_mozilla_get_type (void) { static GtkType mozilla_type = 0; + nsresult rv; if (!mozilla_type) { static const GtkTypeInfo mozilla_info = { @@ -184,9 +198,9 @@ gtk_mozilla_get_type (void) // Create the Event Queue for the UI thread... - nsresult rv = nsServiceManager::GetService(kEventQueueServiceCID, - NS_GET_IID(nsIEventQueueService), - (nsISupports **)&aEventQService); + rv = nsServiceManager::GetService(kEventQueueServiceCID, + NS_GET_IID(nsIEventQueueService), + (nsISupports **)&aEventQService); if (!NS_SUCCEEDED(rv)) { printf("Could not obtain the event queue service\n"); @@ -234,7 +248,8 @@ gtk_mozilla_get_type (void) event_processor_callback, EQueue); - nsIThread::SetMainThread(); + // XXX chris this is generating a bad warning. + // nsIThread::SetMainThread(); }