aboutsummaryrefslogtreecommitdiffstats
path: root/www/mozilla
diff options
context:
space:
mode:
authormarcus <marcus@FreeBSD.org>2003-04-04 15:04:20 +0800
committermarcus <marcus@FreeBSD.org>2003-04-04 15:04:20 +0800
commit488ea48034914a7539b772a518379eac4934191b (patch)
tree7d203f19ccf48da83dfdfd4c51f6b78378c73bec /www/mozilla
parentbd912bdbcf2382d728fe88d869f258a94a7cb6b1 (diff)
downloadfreebsd-ports-gnome-488ea48034914a7539b772a518379eac4934191b.tar.gz
freebsd-ports-gnome-488ea48034914a7539b772a518379eac4934191b.tar.zst
freebsd-ports-gnome-488ea48034914a7539b772a518379eac4934191b.zip
* Update to 1.3
* Default to building with -O2 optimizations [1] * Fix a bug where dead keys could not be used [2] PR: 49010 [2] Obtained from: www/phoenix [1] http://bugzilla.mozilla.org/show_bug.cgi?id=176713 [2]
Diffstat (limited to 'www/mozilla')
-rw-r--r--www/mozilla/Makefile46
-rw-r--r--www/mozilla/distinfo5
-rw-r--r--www/mozilla/files/mozilla_12b_patch953
-rw-r--r--www/mozilla/files/patch-config_rules.mk15
-rw-r--r--www/mozilla/files/patch-nsprpub_pr_src_misc_prtime.c18
-rw-r--r--www/mozilla/files/patch-other-licenses_libical_src_libical_Makefile.in11
-rw-r--r--www/mozilla/files/patch-qt16
-rw-r--r--www/mozilla/files/xim_dekita2.patch517
8 files changed, 588 insertions, 993 deletions
diff --git a/www/mozilla/Makefile b/www/mozilla/Makefile
index e5f73de8c6d5..1dbd257cf310 100644
--- a/www/mozilla/Makefile
+++ b/www/mozilla/Makefile
@@ -6,8 +6,7 @@
#
PORTNAME?= mozilla
-PORTVERSION= 1.2.1
-PORTREVISION?= 1
+PORTVERSION= 1.3
PORTEPOCH?= 2
CATEGORIES?= www
MASTER_SITES= ${MASTER_SITE_MOZILLA} \
@@ -15,7 +14,7 @@ MASTER_SITES= ${MASTER_SITE_MOZILLA} \
MASTER_SITE_SUBDIR= mozilla/releases/${PORTNAME}${PORTVERSION:S/.rc/rc/}/src \
marcus/:local
DISTFILES= ${PORTNAME}-source-${PORTVERSION:S/.rc/rc/}${EXTRACT_SUFX} \
- libart_lgpl-${PORTVERSION}${EXTRACT_SUFX}:local
+ libart_lgpl${EXTRACT_SUFX}:local
MAINTAINER= gnome@FreeBSD.org
COMMENT= The open source, standards compliant web browser
@@ -31,13 +30,12 @@ WRKSRC= ${WRKDIR}/${PORTNAME}
MOZILLA?= mozilla
-WITHOUT_CHATZILLA= "Contains a buffer overflow reported at http://online.securityfocus.com/archive/1/270249"
-
.if defined(WITH_GTK2)
LIB_DEPENDS+= gtk-x11-2.0.200:${PORTSDIR}/x11-toolkits/gtk20 \
ORBit-2.0:${PORTSDIR}/devel/ORBit2
.else
-USE_GNOME= gtk12
+USE_GNOMENG= yes
+USE_GNOME= gtk12 orbit
.endif
.if !defined(WITHOUT_XFT)
@@ -48,13 +46,17 @@ BROKEN= Mozilla and Xft2 render the mozilla-fonts \
.endif
.endif
+.if defined(WITH_CALENDAR) && (defined(WITHOUT_MAILNEWS) || \
+ defined(WITHOUT_COMPOSER))
+BROKEN= "Calendar requires Composer and Mailnews support."
+.endif
+
.if defined(WITH_CALENDAR)
-DISTFILES+= ${PORTNAME}-calendar-${PORTVERSION}${EXTRACT_SUFX}:local
LIB_DEPENDS+= ical.0:${PORTSDIR}/devel/libical
.endif
-USE_BZIP2= yes
LATEST_LINK= ${MOZILLA}
+USE_BZIP2= yes
EXTRACT_AFTER_ARGS= | ${TAR} -xf - --exclude */CVS/* \
--exclude */macbuild/*\
--exclude */package/* \
@@ -77,22 +79,19 @@ CONFIGURE_ARGS= \
--enable-mathml \
--disable-md \
--disable-pedantic \
+ --disable-bidi \
--disable-plaintext-editor-only \
--enable-strip \
--enable-svg \
--disable-tests \
--disable-xterm-updates \
--enable-xinerama \
+ --with-system-zlib \
--with-system-jpeg=${LOCALBASE} \
--with-system-mng=${LOCALBASE} \
--with-system-png=${LOCALBASE} \
--with-pthreads
-.if !defined(WITH_GTK2)
-USE_GNOMENG= yes
-USE_GNOME+= orbit
-.endif
-
PLIST= ${WRKDIR}/pkg-plist
# LDAP is only used by mail and news so disable both together
.if defined(WITHOUT_MAILNEWS)
@@ -116,6 +115,9 @@ CONFIGURE_ENV= MOZ_INTERNAL_LIBART_LGPL=1
.if defined(WITH_JAVASCRIPT_DEBUGGER)
CONFIGURE_ARGS+= --enable-jsd \
--enable-dtd-debug
+.else
+CONFIGURE_ARGS+= --disable-jsd \
+ --disable-dtd-debug
.endif
.if defined(WITH_CALENDAR)
@@ -129,9 +131,9 @@ CONFIGURE_ARGS+= --disable-composer
.if defined(WITH_GTK2)
CONFIGURE_ARGS+= --enable-default-toolkit=gtk2
-EXTRA_PATCHES= ${FILESDIR}/mozilla_12b_patch
PKGCONFIG_FILES= mozilla-gtkmozembed.pc mozilla-js.pc mozilla-xpcom.pc \
mozilla-nspr.pc mozilla-nss.pc
+EXTRA_PATCHES= ${FILESDIR}/xim_dekita2.patch
.else
CONFIGURE_ARGS+= --enable-default-toolkit=gtk
.endif
@@ -150,7 +152,12 @@ ALL_TARGET= default
CONFIGURE_ARGS+= --enable-reorder
.endif
+.if !defined(WITHOUT_OPTIMIZE) && ${ARCH} != "alpha"
+CFLAGS+= -O2
+.endif
+
.if ${ARCH} == "alpha"
+CFLAGS+= -O0
BROKEN= "core dumps on alpha during post-build"
.endif
@@ -159,6 +166,17 @@ BROKEN="You must upgrade your freetype port to 1.3.1_2 or higher before installi
.endif
pre-everything::
+ @${ECHO_MSG} ""
+ @${ECHO_MSG} "Mozilla has the following tunable option(s):"
+ @${ECHO_MSG} " WITHOUT_XFT=yes Disables Xft anti-aliasing support"
+ @${ECHO_MSG} " WITH_CALENDAR=yes Enables the Calendar module (requires Mailnews and Composer modules)"
+ @${ECHO_MSG} " WITHOUT_MAILNEWS=yes Disables the Mail and News modules"
+ @${ECHO_MSG} " WITHOUT_COMPOSER=yes Disables the HTML Composer module"
+ @${ECHO_MSG} " WITHOUT_LDAP=yes Disables LDAP support within the Mailnews module"
+ @${ECHO_MSG} " WITHOUT_CHATZILLA=yes Disable the Chatzilla IRC module"
+ @${ECHO_MSG} " WITH_JAVASCRIPT_DEBUGGER=yes Enable the DTD and JavaScript debuggers"
+ @${ECHO_MSG} " WITHOUT_OPTIMIZE=yes Disable -O2 optimization"
+ @${ECHO_MSG} ""
.if defined(WITH_CALENDAR)
@${ECHO_MSG} "Calendar is still beta software."
@${ECHO_MSG} "Use at your own risk."
diff --git a/www/mozilla/distinfo b/www/mozilla/distinfo
index bc387f0eaf53..07510d8e3686 100644
--- a/www/mozilla/distinfo
+++ b/www/mozilla/distinfo
@@ -1,3 +1,2 @@
-MD5 (mozilla-source-1.2.1.tar.bz2) = 58c37a29ef2fae2939f5be116abec32a
-MD5 (libart_lgpl-1.2.1.tar.bz2) = f332c3c026adc1c2c0ceb3ac5847d5f5
-MD5 (mozilla-calendar-1.2.1.tar.bz2) = f0ae0bb5e4d7a5b0049dd23534f86002
+MD5 (mozilla-source-1.3.tar.bz2) = 4c5a27b5ba39f16d83159d0256ad9147
+MD5 (libart_lgpl.tar.bz2) = f332c3c026adc1c2c0ceb3ac5847d5f5
diff --git a/www/mozilla/files/mozilla_12b_patch b/www/mozilla/files/mozilla_12b_patch
deleted file mode 100644
index 7ab44168c025..000000000000
--- a/www/mozilla/files/mozilla_12b_patch
+++ /dev/null
@@ -1,953 +0,0 @@
-Index: Makefile.in
-===================================================================
-RCS file: /cvsroot/mozilla/Makefile.in,v
-retrieving revision 1.197
-diff -u -r1.197 Makefile.in
---- Makefile.in 15 Oct 2002 23:34:32 -0000 1.197
-+++ Makefile.in 22 Oct 2002 17:14:59 -0000
-@@ -267,6 +267,10 @@
- tier_99_dirs += embedding/browser/gtk/tests
- endif
-
-+ifdef MOZ_ENABLE_GTK2
-+tier_99_dirs += embedding/browser/gtk/tests
-+endif
-+
- endif # BUILD_MODULES == all
-
- STATIC_MAKEFILES := nsprpub directory/c-sdk
-Index: embedding/browser/Makefile.in
-===================================================================
-RCS file: /cvsroot/mozilla/embedding/browser/Makefile.in,v
-retrieving revision 1.10
-diff -u -r1.10 Makefile.in
---- embedding/browser/Makefile.in 18 Dec 2001 09:10:33 -0000 1.10
-+++ embedding/browser/Makefile.in 22 Oct 2002 17:14:59 -0000
-@@ -31,6 +31,10 @@
- DIRS += gtk
- endif
-
-+ifdef MOZ_ENABLE_GTK2
-+DIRS += gtk
-+endif
-+
- ifdef MOZ_ENABLE_PHOTON
- DIRS += photon
- endif
-Index: embedding/browser/gtk/src/EmbedProgress.cpp
-===================================================================
-RCS file: /cvsroot/mozilla/embedding/browser/gtk/src/EmbedProgress.cpp,v
-retrieving revision 1.10
-diff -u -r1.10 EmbedProgress.cpp
---- embedding/browser/gtk/src/EmbedProgress.cpp 7 Sep 2002 17:09:12 -0000 1.10
-+++ embedding/browser/gtk/src/EmbedProgress.cpp 22 Oct 2002 17:14:59 -0000
-@@ -80,8 +80,8 @@
- }
- gtk_signal_emit(GTK_OBJECT(mOwner->mOwningWidget),
- moz_embed_signals[NET_STATE_ALL],
-- (const char *)uriString, aStateFlags, aStatus);
--
-+ (gpointer)(const char *)uriString,
-+ (gint)aStateFlags, (gint)aStatus);
- // and for stop, too
- if ((aStateFlags & GTK_MOZ_EMBED_FLAG_IS_NETWORK) &&
- (aStateFlags & GTK_MOZ_EMBED_FLAG_STOP))
-Index: embedding/browser/gtk/src/EmbedWindow.cpp
-===================================================================
-RCS file: /cvsroot/mozilla/embedding/browser/gtk/src/EmbedWindow.cpp,v
-retrieving revision 1.26
-diff -u -r1.26 EmbedWindow.cpp
---- embedding/browser/gtk/src/EmbedWindow.cpp 7 Sep 2002 17:09:12 -0000 1.26
-+++ embedding/browser/gtk/src/EmbedWindow.cpp 22 Oct 2002 17:14:59 -0000
-@@ -226,9 +226,11 @@
- {
- GtkWidget* parent = GTK_WIDGET(mOwner->mOwningWidget)->parent;
-
-+#ifdef MOZ_WIDGET_GTK
- if (GTK_IS_CONTAINER(parent))
- gtk_container_focus(GTK_CONTAINER(parent),
- GTK_DIR_TAB_FORWARD);
-+#endif
- return NS_OK;
- }
-
-@@ -237,9 +239,11 @@
- {
- GtkWidget* parent = GTK_WIDGET(mOwner->mOwningWidget)->parent;
-
-+#ifdef MOZ_WIDGET_GTK
- if (GTK_IS_CONTAINER(parent))
- gtk_container_focus(GTK_CONTAINER(parent),
- GTK_DIR_TAB_BACKWARD);
-+#endif
- return NS_OK;
- }
-
-@@ -405,7 +409,9 @@
- 0, 0,
- sTipWindow->allocation.width, sTipWindow->allocation.height);
-
-+#ifdef MOZ_WIDGET_GTK
- gtk_widget_popup(sTipWindow, aXCoords + root_x, aYCoords + root_y);
-+#endif /* MOZ_WIDGET_GTK */
-
- nsMemory::Free( (void*)tipString );
-
-Index: embedding/browser/gtk/src/Makefile.in
-===================================================================
-RCS file: /cvsroot/mozilla/embedding/browser/gtk/src/Makefile.in,v
-retrieving revision 1.36
-diff -u -r1.36 Makefile.in
---- embedding/browser/gtk/src/Makefile.in 23 Sep 2002 19:13:28 -0000 1.36
-+++ embedding/browser/gtk/src/Makefile.in 22 Oct 2002 17:14:59 -0000
-@@ -56,6 +56,11 @@
- EmbedWindowCreator.cpp \
- EmbedStream.cpp
-
-+ifdef MOZ_ENABLE_GTK2
-+CSRCS = \
-+ gtkmozembedmarshal.c
-+endif
-+
- ifdef BUILD_STATIC_LIBS
- # Static build stuff
- DEFINES += -D_BUILD_STATIC_BIN=1
-@@ -88,13 +93,21 @@
- gtkmozembed.h \
- gtkmozembed_internal.h
-
-+ifdef MOZ_ENABLE_GTK
- EXTRA_DSO_LDOPTS = \
- $(MOZ_COMPONENT_LIBS) \
- $(XPCOM_GLUE_LIBS) \
- -lgtksuperwin \
- $(NULL)
-+endif
-+
-+ifdef MOZ_ENABLE_GTK2
-+EXTRA_DSO_LDOPTS = \
-+ $(MOZ_COMPONENT_LIBS) \
-+ $(NULL)
-+endif
-
--EXTRA_DSO_LDOPTS += $(MOZ_GTK_LDFLAGS)
-+EXTRA_DSO_LDOPTS += $(MOZ_GTK_LDFLAGS) $(MOZ_GTK2_LIBS)
-
- include $(topsrcdir)/config/rules.mk
-
-@@ -109,7 +122,8 @@
- endif
- endif
-
--CXXFLAGS += $(MOZ_GTK_CFLAGS)
-+CXXFLAGS += $(MOZ_GTK_CFLAGS) $(MOZ_GTK2_CFLAGS)
-+CFLAGS += $(MOZ_GTK_CFLAGS) $(MOZ_GTK2_CFLAGS)
-
- ifdef BUILD_STATIC_LIBS
-
-Index: embedding/browser/gtk/src/gtkmozembed2.cpp
-===================================================================
-RCS file: /cvsroot/mozilla/embedding/browser/gtk/src/gtkmozembed2.cpp,v
-retrieving revision 1.23
-diff -u -r1.23 gtkmozembed2.cpp
---- embedding/browser/gtk/src/gtkmozembed2.cpp 12 Jan 2002 05:04:57 -0000 1.23
-+++ embedding/browser/gtk/src/gtkmozembed2.cpp 22 Oct 2002 17:14:59 -0000
-@@ -36,11 +36,37 @@
- #include <nsXPIDLString.h>
- #include <nsReadableUtils.h>
-
-+#ifdef MOZ_WIDGET_GTK
-+
- // so we can get callbacks from the mozarea
- #include <gtkmozarea.h>
-
-+// so we get the right marshaler for gtk 1.2
-+#define gtkmozembed_VOID__INT_UINT \
-+ gtk_marshal_NONE__INT_INT
-+#define gtkmozembed_VOID__POINTER_INT_INT \
-+ gtk_marshal_NONE__POINTER_INT_INT
-+#define gtkmozembed_VOID__POINTER_INT_UINT \
-+ gtk_marshal_NONE__POINTER_INT_INT
-+#define gtkmozembed_VOID__POINTER_INT_POINTER \
-+ gtk_marshal_NONE__POINTER_INT_POINTER
-+
-+#endif /* MOZ_WIDGET_GTK */
-+
-+#ifdef MOZ_WIDGET_GTK2
-+
-+#define GET_OBJECT_CLASS_TYPE(x) G_OBJECT_CLASS_TYPE(x)
-+
-+#include "gtkmozembedmarshal.h"
-+
-+#endif /* MOZ_WIDGET_GTK2 */
-+
- class nsIDirectoryServiceProvider;
-
-+#ifdef MOZ_WIDGET_GTK
-+
-+#define GET_OBJECT_CLASS_TYPE(x) (GTK_OBJECT_CLASS(x)->type)
-+
- // Some "massaged" enum information for the GTK Type System
- static GtkFlagValue gtk_moz_embed_progress_flags_values[] = {
- { GTK_MOZ_EMBED_FLAG_START,
-@@ -138,6 +164,7 @@
- { 0,
- NULL, NULL }
- };
-+#endif /* MOZ_WIDGET_GTK */
-
-
- // class and instance initialization
-@@ -180,6 +207,7 @@
- GdkEventFocus *aGdkFocusEvent,
- GtkMozEmbed *aEmbed);
-
-+#ifdef MOZ_WIDGET_GTK
- // signal handlers for tracking the focus and and focus out events on
- // the toplevel window.
-
-@@ -189,6 +217,7 @@
- static void
- handle_toplevel_focus_out(GtkMozArea *aArea,
- GtkMozEmbed *aEmbed);
-+#endif /* MOZ_WIDGET_GTK */
-
- // globals for this type of widget
-
-@@ -249,191 +278,193 @@
- moz_embed_signals[LINK_MESSAGE] =
- gtk_signal_new ("link_message",
- GTK_RUN_FIRST,
-- object_class->type,
-+ GET_OBJECT_CLASS_TYPE(klass),
- GTK_SIGNAL_OFFSET(GtkMozEmbedClass, link_message),
- gtk_marshal_NONE__NONE,
- GTK_TYPE_NONE, 0);
- moz_embed_signals[JS_STATUS] =
- gtk_signal_new ("js_status",
- GTK_RUN_FIRST,
-- object_class->type,
-+ GET_OBJECT_CLASS_TYPE(klass),
- GTK_SIGNAL_OFFSET(GtkMozEmbedClass, js_status),
- gtk_marshal_NONE__NONE,
- GTK_TYPE_NONE, 0);
- moz_embed_signals[LOCATION] =
- gtk_signal_new ("location",
- GTK_RUN_FIRST,
-- object_class->type,
-+ GET_OBJECT_CLASS_TYPE(klass),
- GTK_SIGNAL_OFFSET(GtkMozEmbedClass, location),
- gtk_marshal_NONE__NONE,
- GTK_TYPE_NONE, 0);
- moz_embed_signals[TITLE] =
- gtk_signal_new("title",
- GTK_RUN_FIRST,
-- object_class->type,
-+ GET_OBJECT_CLASS_TYPE(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,
-+ GET_OBJECT_CLASS_TYPE(klass),
- GTK_SIGNAL_OFFSET(GtkMozEmbedClass, progress),
- gtk_marshal_NONE__INT_INT,
- GTK_TYPE_NONE, 2, GTK_TYPE_INT, GTK_TYPE_INT);
- moz_embed_signals[PROGRESS_ALL] =
- gtk_signal_new("progress_all",
- GTK_RUN_FIRST,
-- object_class->type,
-+ GET_OBJECT_CLASS_TYPE(klass),
- GTK_SIGNAL_OFFSET(GtkMozEmbedClass, progress_all),
-- gtk_marshal_NONE__POINTER_INT_INT,
-+ gtkmozembed_VOID__POINTER_INT_INT,
- GTK_TYPE_NONE, 3, GTK_TYPE_STRING,
- GTK_TYPE_INT, GTK_TYPE_INT);
- moz_embed_signals[NET_STATE] =
- gtk_signal_new("net_state",
- GTK_RUN_FIRST,
-- object_class->type,
-+ GET_OBJECT_CLASS_TYPE(klass),
- GTK_SIGNAL_OFFSET(GtkMozEmbedClass, net_state),
-- gtk_marshal_NONE__INT_INT,
-+ gtkmozembed_VOID__INT_UINT,
- GTK_TYPE_NONE, 2, GTK_TYPE_INT, GTK_TYPE_UINT);
- moz_embed_signals[NET_STATE_ALL] =
- gtk_signal_new("net_state_all",
- GTK_RUN_FIRST,
-- object_class->type,
-+ GET_OBJECT_CLASS_TYPE(klass),
- GTK_SIGNAL_OFFSET(GtkMozEmbedClass, net_state_all),
-- gtk_marshal_NONE__POINTER_INT_INT,
-+ gtkmozembed_VOID__POINTER_INT_UINT,
- GTK_TYPE_NONE, 3, GTK_TYPE_STRING,
- GTK_TYPE_INT, GTK_TYPE_UINT);
- moz_embed_signals[NET_START] =
- gtk_signal_new("net_start",
- GTK_RUN_FIRST,
-- object_class->type,
-+ GET_OBJECT_CLASS_TYPE(klass),
- 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,
-+ GET_OBJECT_CLASS_TYPE(klass),
- GTK_SIGNAL_OFFSET(GtkMozEmbedClass, net_stop),
- gtk_marshal_NONE__NONE,
- GTK_TYPE_NONE, 0);
- moz_embed_signals[NEW_WINDOW] =
- gtk_signal_new("new_window",
- GTK_RUN_FIRST,
-- object_class->type,
-+ GET_OBJECT_CLASS_TYPE(klass),
- GTK_SIGNAL_OFFSET(GtkMozEmbedClass, new_window),
- gtk_marshal_NONE__POINTER_UINT,
- GTK_TYPE_NONE, 2, GTK_TYPE_POINTER, GTK_TYPE_UINT);
- moz_embed_signals[VISIBILITY] =
- gtk_signal_new("visibility",
- GTK_RUN_FIRST,
-- object_class->type,
-+ GET_OBJECT_CLASS_TYPE(klass),
- GTK_SIGNAL_OFFSET(GtkMozEmbedClass, visibility),
- gtk_marshal_NONE__BOOL,
- GTK_TYPE_NONE, 1, GTK_TYPE_BOOL);
- moz_embed_signals[DESTROY_BROWSER] =
- gtk_signal_new("destroy_browser",
- GTK_RUN_FIRST,
-- object_class->type,
-+ GET_OBJECT_CLASS_TYPE(klass),
- GTK_SIGNAL_OFFSET(GtkMozEmbedClass, destroy_brsr),
- gtk_marshal_NONE__NONE,
- GTK_TYPE_NONE, 0);
- moz_embed_signals[OPEN_URI] =
- gtk_signal_new("open_uri",
- GTK_RUN_LAST,
-- object_class->type,
-+ GET_OBJECT_CLASS_TYPE(klass),
- GTK_SIGNAL_OFFSET(GtkMozEmbedClass, open_uri),
- gtk_marshal_BOOL__POINTER,
- GTK_TYPE_BOOL, 1, GTK_TYPE_STRING);
- moz_embed_signals[SIZE_TO] =
- gtk_signal_new("size_to",
- GTK_RUN_LAST,
-- object_class->type,
-+ GET_OBJECT_CLASS_TYPE(klass),
- GTK_SIGNAL_OFFSET(GtkMozEmbedClass, size_to),
- gtk_marshal_NONE__INT_INT,
- GTK_TYPE_NONE, 2, GTK_TYPE_INT, GTK_TYPE_INT);
- moz_embed_signals[DOM_KEY_DOWN] =
- gtk_signal_new("dom_key_down",
- GTK_RUN_LAST,
-- object_class->type,
-+ GET_OBJECT_CLASS_TYPE(klass),
- GTK_SIGNAL_OFFSET(GtkMozEmbedClass, dom_key_down),
- gtk_marshal_BOOL__POINTER,
- GTK_TYPE_BOOL, 1, GTK_TYPE_POINTER);
- moz_embed_signals[DOM_KEY_PRESS] =
- gtk_signal_new("dom_key_press",
- GTK_RUN_LAST,
-- object_class->type,
-+ GET_OBJECT_CLASS_TYPE(klass),
- GTK_SIGNAL_OFFSET(GtkMozEmbedClass, dom_key_press),
- gtk_marshal_BOOL__POINTER,
- GTK_TYPE_BOOL, 1, GTK_TYPE_POINTER);
- moz_embed_signals[DOM_KEY_UP] =
- gtk_signal_new("dom_key_up",
- GTK_RUN_LAST,
-- object_class->type,
-+ GET_OBJECT_CLASS_TYPE(klass),
- GTK_SIGNAL_OFFSET(GtkMozEmbedClass, dom_key_up),
- gtk_marshal_BOOL__POINTER,
- GTK_TYPE_BOOL, 1, GTK_TYPE_POINTER);
- moz_embed_signals[DOM_MOUSE_DOWN] =
- gtk_signal_new("dom_mouse_down",
- GTK_RUN_LAST,
-- object_class->type,
-+ GET_OBJECT_CLASS_TYPE(klass),
- GTK_SIGNAL_OFFSET(GtkMozEmbedClass, dom_mouse_down),
- gtk_marshal_BOOL__POINTER,
- GTK_TYPE_BOOL, 1, GTK_TYPE_POINTER);
- moz_embed_signals[DOM_MOUSE_UP] =
- gtk_signal_new("dom_mouse_up",
- GTK_RUN_LAST,
-- object_class->type,
-+ GET_OBJECT_CLASS_TYPE(klass),
- GTK_SIGNAL_OFFSET(GtkMozEmbedClass, dom_mouse_up),
- gtk_marshal_BOOL__POINTER,
- GTK_TYPE_BOOL, 1, GTK_TYPE_POINTER);
- moz_embed_signals[DOM_MOUSE_CLICK] =
- gtk_signal_new("dom_mouse_click",
- GTK_RUN_LAST,
-- object_class->type,
-+ GET_OBJECT_CLASS_TYPE(klass),
- GTK_SIGNAL_OFFSET(GtkMozEmbedClass, dom_mouse_click),
- gtk_marshal_BOOL__POINTER,
- GTK_TYPE_BOOL, 1, GTK_TYPE_POINTER);
- moz_embed_signals[DOM_MOUSE_DBL_CLICK] =
- gtk_signal_new("dom_mouse_dbl_click",
- GTK_RUN_LAST,
-- object_class->type,
-+ GET_OBJECT_CLASS_TYPE(klass),
- GTK_SIGNAL_OFFSET(GtkMozEmbedClass, dom_mouse_dbl_click),
- gtk_marshal_BOOL__POINTER,
- GTK_TYPE_BOOL, 1, GTK_TYPE_POINTER);
- moz_embed_signals[DOM_MOUSE_OVER] =
- gtk_signal_new("dom_mouse_over",
- GTK_RUN_LAST,
-- object_class->type,
-+ GET_OBJECT_CLASS_TYPE(klass),
- GTK_SIGNAL_OFFSET(GtkMozEmbedClass, dom_mouse_over),
- gtk_marshal_BOOL__POINTER,
- GTK_TYPE_BOOL, 1, GTK_TYPE_POINTER);
- moz_embed_signals[DOM_MOUSE_OUT] =
- gtk_signal_new("dom_mouse_out",
- GTK_RUN_LAST,
-- object_class->type,
-+ GET_OBJECT_CLASS_TYPE(klass),
- GTK_SIGNAL_OFFSET(GtkMozEmbedClass, dom_mouse_out),
- gtk_marshal_BOOL__POINTER,
- GTK_TYPE_BOOL, 1, GTK_TYPE_POINTER);
- moz_embed_signals[SECURITY_CHANGE] =
- gtk_signal_new("security_change",
- GTK_RUN_LAST,
-- object_class->type,
-+ GET_OBJECT_CLASS_TYPE(klass),
- GTK_SIGNAL_OFFSET(GtkMozEmbedClass, security_change),
- gtk_marshal_NONE__POINTER_UINT,
- GTK_TYPE_NONE, 2, GTK_TYPE_POINTER, GTK_TYPE_UINT);
- moz_embed_signals[STATUS_CHANGE] =
- gtk_signal_new("status_change",
- GTK_RUN_LAST,
-- object_class->type,
-+ GET_OBJECT_CLASS_TYPE(klass),
- GTK_SIGNAL_OFFSET(GtkMozEmbedClass, status_change),
-- gtk_marshal_NONE__POINTER_INT_POINTER,
-+ gtkmozembed_VOID__POINTER_INT_POINTER,
- GTK_TYPE_NONE, 3,
- GTK_TYPE_POINTER, GTK_TYPE_INT, GTK_TYPE_POINTER);
-
-+#ifdef MOZ_WIDGET_GTK
- gtk_object_class_add_signals(object_class, moz_embed_signals,
- EMBED_LAST_SIGNAL);
-+#endif /* MOZ_WIDGET_GTK */
-
- }
-
-@@ -538,6 +569,7 @@
- embed,
- GTK_OBJECT(child_widget));
-
-+#ifdef MOZ_WIDGET_GTK
- // connect to the toplevel focus out events for the child
- GtkMozArea *mozarea = GTK_MOZAREA(child_widget);
- gtk_signal_connect_while_alive(GTK_OBJECT(mozarea),
-@@ -551,6 +583,7 @@
- GTK_SIGNAL_FUNC(handle_toplevel_focus_out),
- embed,
- GTK_OBJECT(mozarea));
-+#endif /* MOZ_WIDGET_GTK */
- }
-
- static void
-@@ -663,6 +696,8 @@
- return FALSE;
- }
-
-+#ifdef MOZ_WIDGET_GTK
-+
- static void
- handle_toplevel_focus_in (GtkMozArea *aArea,
- GtkMozEmbed *aEmbed)
-@@ -683,6 +718,8 @@
- embedPrivate->TopLevelFocusOut();
- }
-
-+#endif /* MOZ_WIDGET_GTK */
-+
- // Widget methods
-
- void
-@@ -1011,6 +1048,8 @@
- return embedPrivate->mChromeMask;
- }
-
-+#ifdef MOZ_WIDGET_GTK
-+
- GtkType
- gtk_moz_embed_progress_flags_get_type(void)
- {
-@@ -1059,6 +1098,8 @@
- return chrome_flags_type;
- }
-
-+#endif /* MOZ_WIDGET_GTK */
-+
- void
- gtk_moz_embed_get_nsIWebBrowser (GtkMozEmbed *embed, nsIWebBrowser **retval)
- {
-@@ -1183,14 +1224,16 @@
- moz_embed_single_signals[NEW_WINDOW_ORPHAN] =
- gtk_signal_new("new_window_orphan",
- GTK_RUN_FIRST,
-- object_class->type,
-+ GET_OBJECT_CLASS_TYPE(klass),
- GTK_SIGNAL_OFFSET(GtkMozEmbedSingleClass,
- new_window_orphan),
- gtk_marshal_NONE__POINTER_UINT,
- GTK_TYPE_NONE, 2, GTK_TYPE_POINTER, GTK_TYPE_UINT);
-
-+#ifdef MOZ_WIDGET_GTK
- gtk_object_class_add_signals(object_class, moz_embed_single_signals,
- SINGLE_LAST_SIGNAL);
-+#endif /* MOZ_WIDGET_GTK */
- }
-
- static void
-Index: embedding/browser/gtk/src/gtkmozembedmarshal.c
-===================================================================
-RCS file: embedding/browser/gtk/src/gtkmozembedmarshal.c
-diff -N embedding/browser/gtk/src/gtkmozembedmarshal.c
---- /dev/null 1 Jan 1970 00:00:00 -0000
-+++ embedding/browser/gtk/src/gtkmozembedmarshal.c 22 Oct 2002 17:14:59 -0000
-@@ -0,0 +1,203 @@
-+
-+#include <glib-object.h>
-+
-+
-+#ifdef G_ENABLE_DEBUG
-+#define g_marshal_value_peek_boolean(v) g_value_get_boolean (v)
-+#define g_marshal_value_peek_char(v) g_value_get_char (v)
-+#define g_marshal_value_peek_uchar(v) g_value_get_uchar (v)
-+#define g_marshal_value_peek_int(v) g_value_get_int (v)
-+#define g_marshal_value_peek_uint(v) g_value_get_uint (v)
-+#define g_marshal_value_peek_long(v) g_value_get_long (v)
-+#define g_marshal_value_peek_ulong(v) g_value_get_ulong (v)
-+#define g_marshal_value_peek_int64(v) g_value_get_int64 (v)
-+#define g_marshal_value_peek_uint64(v) g_value_get_uint64 (v)
-+#define g_marshal_value_peek_enum(v) g_value_get_enum (v)
-+#define g_marshal_value_peek_flags(v) g_value_get_flags (v)
-+#define g_marshal_value_peek_float(v) g_value_get_float (v)
-+#define g_marshal_value_peek_double(v) g_value_get_double (v)
-+#define g_marshal_value_peek_string(v) (char*) g_value_get_string (v)
-+#define g_marshal_value_peek_param(v) g_value_get_param (v)
-+#define g_marshal_value_peek_boxed(v) g_value_get_boxed (v)
-+#define g_marshal_value_peek_pointer(v) g_value_get_pointer (v)
-+#define g_marshal_value_peek_object(v) g_value_get_object (v)
-+#else /* !G_ENABLE_DEBUG */
-+/* WARNING: This code accesses GValues directly, which is UNSUPPORTED API.
-+ * Do not access GValues directly in your code. Instead, use the
-+ * g_value_get_*() functions
-+ */
-+#define g_marshal_value_peek_boolean(v) (v)->data[0].v_int
-+#define g_marshal_value_peek_char(v) (v)->data[0].v_int
-+#define g_marshal_value_peek_uchar(v) (v)->data[0].v_uint
-+#define g_marshal_value_peek_int(v) (v)->data[0].v_int
-+#define g_marshal_value_peek_uint(v) (v)->data[0].v_uint
-+#define g_marshal_value_peek_long(v) (v)->data[0].v_long
-+#define g_marshal_value_peek_ulong(v) (v)->data[0].v_ulong
-+#define g_marshal_value_peek_int64(v) (v)->data[0].v_int64
-+#define g_marshal_value_peek_uint64(v) (v)->data[0].v_uint64
-+#define g_marshal_value_peek_enum(v) (v)->data[0].v_int
-+#define g_marshal_value_peek_flags(v) (v)->data[0].v_uint
-+#define g_marshal_value_peek_float(v) (v)->data[0].v_float
-+#define g_marshal_value_peek_double(v) (v)->data[0].v_double
-+#define g_marshal_value_peek_string(v) (v)->data[0].v_pointer
-+#define g_marshal_value_peek_param(v) (v)->data[0].v_pointer
-+#define g_marshal_value_peek_boxed(v) (v)->data[0].v_pointer
-+#define g_marshal_value_peek_pointer(v) (v)->data[0].v_pointer
-+#define g_marshal_value_peek_object(v) (v)->data[0].v_pointer
-+#endif /* !G_ENABLE_DEBUG */
-+
-+
-+/* NONE:POINTER,INT,INT (/dev/stdin:1) */
-+void
-+gtkmozembed_VOID__POINTER_INT_INT (GClosure *closure,
-+ GValue *return_value,
-+ guint n_param_values,
-+ const GValue *param_values,
-+ gpointer invocation_hint,
-+ gpointer marshal_data)
-+{
-+ typedef void (*GMarshalFunc_VOID__POINTER_INT_INT) (gpointer data1,
-+ gpointer arg_1,
-+ gint arg_2,
-+ gint arg_3,
-+ gpointer data2);
-+ register GMarshalFunc_VOID__POINTER_INT_INT callback;
-+ register GCClosure *cc = (GCClosure*) closure;
-+ register gpointer data1, data2;
-+
-+ g_return_if_fail (n_param_values == 4);
-+
-+ if (G_CCLOSURE_SWAP_DATA (closure))
-+ {
-+ data1 = closure->data;
-+ data2 = g_value_peek_pointer (param_values + 0);
-+ }
-+ else
-+ {
-+ data1 = g_value_peek_pointer (param_values + 0);
-+ data2 = closure->data;
-+ }
-+ callback = (GMarshalFunc_VOID__POINTER_INT_INT) (marshal_data ? marshal_data : cc->callback);
-+
-+ callback (data1,
-+ g_marshal_value_peek_pointer (param_values + 1),
-+ g_marshal_value_peek_int (param_values + 2),
-+ g_marshal_value_peek_int (param_values + 3),
-+ data2);
-+}
-+
-+/* NONE:INT,UINT (/dev/stdin:2) */
-+void
-+gtkmozembed_VOID__INT_UINT (GClosure *closure,
-+ GValue *return_value,
-+ guint n_param_values,
-+ const GValue *param_values,
-+ gpointer invocation_hint,
-+ gpointer marshal_data)
-+{
-+ typedef void (*GMarshalFunc_VOID__INT_UINT) (gpointer data1,
-+ gint arg_1,
-+ guint arg_2,
-+ gpointer data2);
-+ register GMarshalFunc_VOID__INT_UINT callback;
-+ register GCClosure *cc = (GCClosure*) closure;
-+ register gpointer data1, data2;
-+
-+ g_return_if_fail (n_param_values == 3);
-+
-+ if (G_CCLOSURE_SWAP_DATA (closure))
-+ {
-+ data1 = closure->data;
-+ data2 = g_value_peek_pointer (param_values + 0);
-+ }
-+ else
-+ {
-+ data1 = g_value_peek_pointer (param_values + 0);
-+ data2 = closure->data;
-+ }
-+ callback = (GMarshalFunc_VOID__INT_UINT) (marshal_data ? marshal_data : cc->callback);
-+
-+ callback (data1,
-+ g_marshal_value_peek_int (param_values + 1),
-+ g_marshal_value_peek_uint (param_values + 2),
-+ data2);
-+}
-+
-+/* NONE:POINTER,INT,UINT (/dev/stdin:3) */
-+void
-+gtkmozembed_VOID__POINTER_INT_UINT (GClosure *closure,
-+ GValue *return_value,
-+ guint n_param_values,
-+ const GValue *param_values,
-+ gpointer invocation_hint,
-+ gpointer marshal_data)
-+{
-+ typedef void (*GMarshalFunc_VOID__POINTER_INT_UINT) (gpointer data1,
-+ gpointer arg_1,
-+ gint arg_2,
-+ guint arg_3,
-+ gpointer data2);
-+ register GMarshalFunc_VOID__POINTER_INT_UINT callback;
-+ register GCClosure *cc = (GCClosure*) closure;
-+ register gpointer data1, data2;
-+
-+ g_return_if_fail (n_param_values == 4);
-+
-+ if (G_CCLOSURE_SWAP_DATA (closure))
-+ {
-+ data1 = closure->data;
-+ data2 = g_value_peek_pointer (param_values + 0);
-+ }
-+ else
-+ {
-+ data1 = g_value_peek_pointer (param_values + 0);
-+ data2 = closure->data;
-+ }
-+ callback = (GMarshalFunc_VOID__POINTER_INT_UINT) (marshal_data ? marshal_data : cc->callback);
-+
-+ callback (data1,
-+ g_marshal_value_peek_pointer (param_values + 1),
-+ g_marshal_value_peek_int (param_values + 2),
-+ g_marshal_value_peek_uint (param_values + 3),
-+ data2);
-+}
-+
-+/* NONE:POINTER,INT,POINTER (/dev/stdin:4) */
-+void
-+gtkmozembed_VOID__POINTER_INT_POINTER (GClosure *closure,
-+ GValue *return_value,
-+ guint n_param_values,
-+ const GValue *param_values,
-+ gpointer invocation_hint,
-+ gpointer marshal_data)
-+{
-+ typedef void (*GMarshalFunc_VOID__POINTER_INT_POINTER) (gpointer data1,
-+ gpointer arg_1,
-+ gint arg_2,
-+ gpointer arg_3,
-+ gpointer data2);
-+ register GMarshalFunc_VOID__POINTER_INT_POINTER callback;
-+ register GCClosure *cc = (GCClosure*) closure;
-+ register gpointer data1, data2;
-+
-+ g_return_if_fail (n_param_values == 4);
-+
-+ if (G_CCLOSURE_SWAP_DATA (closure))
-+ {
-+ data1 = closure->data;
-+ data2 = g_value_peek_pointer (param_values + 0);
-+ }
-+ else
-+ {
-+ data1 = g_value_peek_pointer (param_values + 0);
-+ data2 = closure->data;
-+ }
-+ callback = (GMarshalFunc_VOID__POINTER_INT_POINTER) (marshal_data ? marshal_data : cc->callback);
-+
-+ callback (data1,
-+ g_marshal_value_peek_pointer (param_values + 1),
-+ g_marshal_value_peek_int (param_values + 2),
-+ g_marshal_value_peek_pointer (param_values + 3),
-+ data2);
-+}
-+
-Index: embedding/browser/gtk/src/gtkmozembedmarshal.h
-===================================================================
-RCS file: embedding/browser/gtk/src/gtkmozembedmarshal.h
-diff -N embedding/browser/gtk/src/gtkmozembedmarshal.h
---- /dev/null 1 Jan 1970 00:00:00 -0000
-+++ embedding/browser/gtk/src/gtkmozembedmarshal.h 22 Oct 2002 17:14:59 -0000
-@@ -0,0 +1,48 @@
-+
-+#ifndef __gtkmozembed_MARSHAL_H__
-+#define __gtkmozembed_MARSHAL_H__
-+
-+#include <glib-object.h>
-+
-+G_BEGIN_DECLS
-+
-+/* NONE:POINTER,INT,INT (/dev/stdin:1) */
-+extern void gtkmozembed_VOID__POINTER_INT_INT (GClosure *closure,
-+ GValue *return_value,
-+ guint n_param_values,
-+ const GValue *param_values,
-+ gpointer invocation_hint,
-+ gpointer marshal_data);
-+#define gtkmozembed_NONE__POINTER_INT_INT gtkmozembed_VOID__POINTER_INT_INT
-+
-+/* NONE:INT,UINT (/dev/stdin:2) */
-+extern void gtkmozembed_VOID__INT_UINT (GClosure *closure,
-+ GValue *return_value,
-+ guint n_param_values,
-+ const GValue *param_values,
-+ gpointer invocation_hint,
-+ gpointer marshal_data);
-+#define gtkmozembed_NONE__INT_UINT gtkmozembed_VOID__INT_UINT
-+
-+/* NONE:POINTER,INT,UINT (/dev/stdin:3) */
-+extern void gtkmozembed_VOID__POINTER_INT_UINT (GClosure *closure,
-+ GValue *return_value,
-+ guint n_param_values,
-+ const GValue *param_values,
-+ gpointer invocation_hint,
-+ gpointer marshal_data);
-+#define gtkmozembed_NONE__POINTER_INT_UINT gtkmozembed_VOID__POINTER_INT_UINT
-+
-+/* NONE:POINTER,INT,POINTER (/dev/stdin:4) */
-+extern void gtkmozembed_VOID__POINTER_INT_POINTER (GClosure *closure,
-+ GValue *return_value,
-+ guint n_param_values,
-+ const GValue *param_values,
-+ gpointer invocation_hint,
-+ gpointer marshal_data);
-+#define gtkmozembed_NONE__POINTER_INT_POINTER gtkmozembed_VOID__POINTER_INT_POINTER
-+
-+G_END_DECLS
-+
-+#endif /* __gtkmozembed_MARSHAL_H__ */
-+
-Index: embedding/browser/gtk/src/types.txt
-===================================================================
-RCS file: embedding/browser/gtk/src/types.txt
-diff -N embedding/browser/gtk/src/types.txt
---- /dev/null 1 Jan 1970 00:00:00 -0000
-+++ embedding/browser/gtk/src/types.txt 22 Oct 2002 17:14:59 -0000
-@@ -0,0 +1,4 @@
-+NONE:POINTER,INT,INT
-+NONE:INT,UINT
-+NONE:POINTER,INT,UINT
-+NONE:POINTER,INT,POINTER
-Index: embedding/browser/gtk/tests/TestGtkEmbed.cpp
-===================================================================
-RCS file: /cvsroot/mozilla/embedding/browser/gtk/tests/TestGtkEmbed.cpp,v
-retrieving revision 1.32
-diff -u -r1.32 TestGtkEmbed.cpp
---- embedding/browser/gtk/tests/TestGtkEmbed.cpp 24 Sep 2002 01:56:34 -0000 1.32
-+++ embedding/browser/gtk/tests/TestGtkEmbed.cpp 22 Oct 2002 17:14:59 -0000
-@@ -304,8 +304,19 @@
- FALSE, // fill
- 0); // padding
- // new horiz toolbar with buttons + icons
-+#ifdef MOZ_WIDGET_GTK
- browser->toolbar = gtk_toolbar_new(GTK_ORIENTATION_HORIZONTAL,
- GTK_TOOLBAR_BOTH);
-+#endif /* MOZ_WIDGET_GTK */
-+
-+#ifdef MOZ_WIDGET_GTK2
-+ browser->toolbar = gtk_toolbar_new();
-+ gtk_toolbar_set_orientation(GTK_TOOLBAR(browser->toolbar),
-+ GTK_ORIENTATION_HORIZONTAL);
-+ gtk_toolbar_set_style(GTK_TOOLBAR(browser->toolbar),
-+ GTK_TOOLBAR_BOTH);
-+#endif /* MOZ_WIDGET_GTK2 */
-+
- // add it to the hbox
- gtk_box_pack_start(GTK_BOX(browser->toolbarHBox), browser->toolbar,
- FALSE, // expand
-Index: embedding/browser/gtk/src/gtkmozembed2.cpp
-===================================================================
-RCS file: /cvsroot/mozilla/embedding/browser/gtk/src/gtkmozembed2.cpp,v
-retrieving revision 1.23
-diff -u -r1.23 gtkmozembed2.cpp
---- embedding/browser/gtk/src/gtkmozembed2.cpp 12 Jan 2002 05:04:57 -0000 1.23
-+++ embedding/browser/gtk/src/gtkmozembed2.cpp 24 Oct 2002 21:39:07 -0000
-@@ -443,6 +443,8 @@
- EmbedPrivate *priv = new EmbedPrivate();
- embed->data = priv;
- gtk_widget_set_name(GTK_WIDGET(embed), "gtkmozembed");
-+
-+ GTK_WIDGET_UNSET_FLAGS (GTK_WIDGET(embed), GTK_NO_WINDOW);
- }
-
- GtkWidget *
-Index: widget/src/gtk2/nsWindow.cpp
-===================================================================
-RCS file: /cvsroot/mozilla/widget/src/gtk2/nsWindow.cpp,v
-retrieving revision 1.38
-diff -u -r1.38 nsWindow.cpp
---- widget/src/gtk2/nsWindow.cpp 10 Aug 2002 18:21:22 -0000 1.38
-+++ widget/src/gtk2/nsWindow.cpp 26 Aug 2002 19:12:43 -0000
-@@ -145,7 +145,6 @@
-
- /* initialization static functions */
- static nsresult initialize_prefs (void);
--static nsresult initialize_default_icon (void);
-
- // this is the last window that had a drag event happen on it.
- nsWindow *nsWindow::mLastDragMotionWindow = NULL;
-@@ -216,7 +215,6 @@
-
- // It's OK if either of these fail, but it may not be one day.
- initialize_prefs();
-- initialize_default_icon();
- }
-
- if (mLastDragMotionWindow == this)
-@@ -1994,6 +1992,7 @@
- mIsTopLevel = PR_TRUE;
- if (mWindowType == eWindowType_dialog) {
- mShell = gtk_window_new(GTK_WINDOW_TOPLEVEL);
-+ SetupWindowIcon(mShell);
- gtk_window_set_type_hint(GTK_WINDOW(mShell),
- GDK_WINDOW_TYPE_HINT_DIALOG);
- gtk_window_set_transient_for(GTK_WINDOW(mShell),
-@@ -2030,6 +2029,7 @@
- }
- else { // must be eWindowType_toplevel
- mShell = gtk_window_new(GTK_WINDOW_TOPLEVEL);
-+ SetupWindowIcon(mShell);
- // each toplevel window gets its own window group
- mWindowGroup = gtk_window_group_new();
- // and add ourselves to the window group
-@@ -3147,11 +3147,10 @@
- return NS_OK;
- }
-
--/* static */
- nsresult
--initialize_default_icon(void)
-+nsWindow::SetupWindowIcon(GtkWidget *window)
- {
-- // Set up the default icon for all windows
-+ // Set up the window icon
- nsresult rv;
- nsCOMPtr<nsIFile> chromeDir;
- rv = NS_GetSpecialDirectory(NS_APP_CHROME_DIR,
-@@ -3181,7 +3180,7 @@
-
- GList *list = NULL;
- list = g_list_append(list, defaultIcon);
-- gtk_window_set_default_icon_list(list);
-+ gtk_window_set_icon_list(GTK_WINDOW(window), list);
- g_object_unref(G_OBJECT(defaultIcon));
- g_list_free(list);
-
-Index: widget/src/gtk2/nsWindow.h
-===================================================================
-RCS file: /cvsroot/mozilla/widget/src/gtk2/nsWindow.h,v
-retrieving revision 1.24
-diff -u -r1.24 nsWindow.h
---- widget/src/gtk2/nsWindow.h 10 Aug 2002 18:07:20 -0000 1.24
-+++ widget/src/gtk2/nsWindow.h 26 Aug 2002 19:12:45 -0000
-@@ -254,7 +254,8 @@
- private:
- void GetToplevelWidget(GtkWidget **aWidget);
- void *SetupPluginPort(void);
--
-+ nsresult SetupWindowIcon(GtkWidget *window);
-+
- GtkWidget *mShell;
- MozContainer *mContainer;
- MozDrawingarea *mDrawingarea;
-
-Index: build/unix/mozilla-gtkmozembed.pc.in
-===================================================================
-RCS file: /cvsroot/mozilla/build/unix/mozilla-gtkmozembed.pc.in,v
-retrieving revision 1.1
-diff -u -r1.1 mozilla-gtkmozembed.pc.in
---- build/unix/mozilla-gtkmozembed.pc.in 28 May 2002 20:20:40 -0000 1.1
-+++ build/unix/mozilla-gtkmozembed.pc.in 25 Oct 2002 09:30:19 -0000
-@@ -7,5 +7,5 @@
- Description: Mozilla Embedding Widget for Gtk+
- Version: %MOZILLA_VERSION%
- Requires: mozilla-xpcom = %MOZILLA_VERSION%
--Libs: -L${libdir} -lgtkembedmoz -lgtksuperwin
-+Libs: -L${libdir} -lgtkembedmoz
- Cflags: -I${includedir}/gtkembedmoz
---- embedding/browser/gtk/tests/Makefile.in.orig Mon Sep 23 21:56:35 2002
-+++ embedding/browser/gtk/tests/Makefile.in Tue Oct 29 03:24:44 2002
-@@ -45,10 +45,18 @@
- CPPSRCS += TestGtkEmbedMDI.cpp
- endif
-
-+ifdef MOZ_ENABLE_GTK
- LIBS += \
- -lgtkembedmoz \
- -lgtksuperwin \
- $(NULL)
-+endif
-+
-+ifdef MOZ_ENABLE_GTK2
-+LIBS += \
-+ -lgtkembedmoz \
-+ $(NULL)
-+endif
-
- include $(topsrcdir)/config/config.mk
-
-@@ -72,7 +80,7 @@
-
- include $(topsrcdir)/config/rules.mk
-
--CXXFLAGS += $(MOZ_GTK_CFLAGS)
-+CXXFLAGS += $(MOZ_GTK_CFLAGS) $(MOZ_GTK2_CFLAGS)
-
- ifdef ENABLE_GNOME
- CXXFLAGS += `gnome-config --cflags gnomeui`
diff --git a/www/mozilla/files/patch-config_rules.mk b/www/mozilla/files/patch-config_rules.mk
deleted file mode 100644
index ed83bb224d91..000000000000
--- a/www/mozilla/files/patch-config_rules.mk
+++ /dev/null
@@ -1,15 +0,0 @@
---- config/rules.mk.orig Fri Oct 25 01:59:03 2002
-+++ config/rules.mk Sat Jan 25 16:44:25 2003
-@@ -463,6 +463,12 @@
- endif
- endif
-
-+ifeq ($(OS_ARCH),FreeBSD)
-+ifdef IS_COMPONENT
-+EXTRA_DSO_LDOPTS += -Wl,-Bsymbolic
-+endif
-+endif
-+
- ifeq ($(OS_ARCH),NetBSD)
- ifneq (,$(filter arc cobalt hpcmips mipsco newsmips pmax sgimips,$(OS_TEST)))
- ifeq ($(MODULE),layout)
diff --git a/www/mozilla/files/patch-nsprpub_pr_src_misc_prtime.c b/www/mozilla/files/patch-nsprpub_pr_src_misc_prtime.c
new file mode 100644
index 000000000000..6b65ef14fbec
--- /dev/null
+++ b/www/mozilla/files/patch-nsprpub_pr_src_misc_prtime.c
@@ -0,0 +1,18 @@
+--- nsprpub/pr/src/misc/prtime.c.orig Sun Mar 31 12:17:46 2002
++++ nsprpub/pr/src/misc/prtime.c Tue Dec 17 21:30:30 2002
+@@ -1666,12 +1666,13 @@
+ * values for these two fields.
+ */
+
+-#if defined(SUNOS4) || (__GLIBC__ >= 2) || defined(XP_BEOS)
++#if defined(__FreeBSD__)|| defined(SUNOS4) \
++ || (__GLIBC__ >= 2) || defined(XP_BEOS)
+ if (mktime(&a) == -1) {
+ PR_snprintf(buf, buflen, "can't get timezone");
+ return 0;
+ }
+-#endif
++#endif /* check for __FreeBSD__, too <alane@freebsd.org> */
+
+ return strftime(buf, buflen, fmt, &a);
+ }
diff --git a/www/mozilla/files/patch-other-licenses_libical_src_libical_Makefile.in b/www/mozilla/files/patch-other-licenses_libical_src_libical_Makefile.in
new file mode 100644
index 000000000000..f7b62d4df6a2
--- /dev/null
+++ b/www/mozilla/files/patch-other-licenses_libical_src_libical_Makefile.in
@@ -0,0 +1,11 @@
+--- other-licenses/libical/src/libical/Makefile.in.orig Thu Feb 13 15:50:58 2003
++++ other-licenses/libical/src/libical/Makefile.in Thu Feb 13 15:51:07 2003
+@@ -179,7 +179,7 @@
+ $(PERL) $(ICALSCRIPTS)/mkrestrictiontable.pl -i $(srcdir)/icalrestriction.c.in \
+ $(DESIGNDATA)/restrictions.csv > icalrestriction.c
+
+-ifneq (,$(filter BeOS Darwin OpenVMS,$(OS_ARCH)))
++ifneq (,$(filter BeOS Darwin OpenVMS FreeBSD,$(OS_ARCH)))
+ DEFINES += -D__USE_BSD=1
+ endif
+
diff --git a/www/mozilla/files/patch-qt b/www/mozilla/files/patch-qt
index 9bf05f639a6c..032397d35040 100644
--- a/www/mozilla/files/patch-qt
+++ b/www/mozilla/files/patch-qt
@@ -1,15 +1,15 @@
---- configure.orig Tue Oct 15 19:39:37 2002
-+++ configure Fri Oct 18 18:20:50 2002
-@@ -10646,7 +10646,7 @@
+--- configure.orig Thu Feb 6 17:15:12 2003
++++ configure Tue Feb 11 22:52:48 2003
+@@ -10974,7 +10974,7 @@
fi
MOC=$HOST_MOC
-- QT_CFLAGS="-I${QTDIR}${QTINCDIR} -DQT_GENUINE_STR"
+- QT_CFLAGS="-I${QTDIR}${QTINCDIR} -DQT_GENUINE_STR -DQT_NO_STL"
+ QT_CFLAGS="-I${QTDIR}/include/X11/qt -DQT_GENUINE_STR"
- QT_LIBS="-L/usr/X11R6/lib -L${QTDIR}/lib -lqt -lXext -lX11"
-
- MOZ_QT_LDFLAGS=$QT_LIBS
-@@ -11402,9 +11402,9 @@
+ if test -z "$MOZ_DEBUG"; then
+ QT_CFLAGS="$QT_CFLAGS -DQT_NO_DEBUG -DNO_DEBUG"
+ fi
+@@ -11840,9 +11840,9 @@
diff --git a/www/mozilla/files/xim_dekita2.patch b/www/mozilla/files/xim_dekita2.patch
new file mode 100644
index 000000000000..87cb2ea7b108
--- /dev/null
+++ b/www/mozilla/files/xim_dekita2.patch
@@ -0,0 +1,517 @@
+Index: Makefile.in
+===================================================================
+RCS file: /cvsroot/mozilla/widget/src/gtk2/Makefile.in,v
+retrieving revision 1.24
+diff -u -r1.24 Makefile.in
+--- widget/src/gtk2/Makefile.in 28 Dec 2002 01:14:45 -0000 1.24
++++ widget/src/gtk2/Makefile.in 7 Mar 2003 07:39:24 -0000
+@@ -90,7 +90,7 @@
+ CFLAGS += $(MOZ_GTK2_CFLAGS)
+ CXXFLAGS += $(MOZ_GTK2_CFLAGS)
+
+-#DEFINES += -DUSE_XIM
++DEFINES += -DUSE_XIM
+
+ INCLUDES += \
+ -I$(srcdir)/../xpwidgets \
+Index: nsWindow.cpp
+===================================================================
+RCS file: /cvsroot/mozilla/widget/src/gtk2/nsWindow.cpp,v
+retrieving revision 1.68
+diff -u -r1.68 nsWindow.cpp
+--- widget/src/gtk2/nsWindow.cpp 5 Mar 2003 23:17:28 -0000 1.68
++++ widget/src/gtk2/nsWindow.cpp 6 Mar 2003 02:22:39 -0000
+@@ -179,6 +179,7 @@
+ nsWeakPtr gRollupWindow;
+
+ #ifdef USE_XIM
++static nsWindow *gIMEFocusWindow = NULL;
+
+ struct nsXICLookupEntry {
+ PLDHashEntryHdr mKeyHash;
+@@ -186,7 +187,9 @@
+ GtkIMContext* mXIC;
+ };
+
+-PLDHashTable nsWindow::gXICLookupTable;
++PLDHashTable nsWindow::gXICLookupTable;
++GdkEventKey* nsWindow::gIMEKeyEvent = NULL;
++PRBool nsWindow::gIMEStringCommited = PR_TRUE;
+
+ static void IM_commit_cb (GtkIMContext *context,
+ const gchar *str,
+@@ -257,61 +260,6 @@
+ #endif
+ }
+
+-#ifdef USE_XIM
+-void
+-nsWindow::IMEGetShellWindow(void)
+-{
+- GtkWidget* top_window = nsnull;
+- GetToplevelWidget(&top_window);
+- if (top_window) {
+- mIMEShellWindow = get_window_for_gtk_widget(top_window);
+- }
+-}
+-
+-GtkIMContext*
+-nsWindow::IMEGetContext()
+-{
+- if (!mIMEShellWindow) {
+- return NULL;
+- }
+- PLDHashEntryHdr* hash_entry;
+- nsXICLookupEntry* entry;
+-
+- hash_entry = PL_DHashTableOperate(&gXICLookupTable,
+- mIMEShellWindow, PL_DHASH_LOOKUP);
+-
+- if (hash_entry) {
+- entry = NS_REINTERPRET_CAST(nsXICLookupEntry *, hash_entry);
+- if (entry->mXIC) {
+- return entry->mXIC;
+- }
+- }
+- return NULL;
+-}
+-
+-void
+-nsWindow::IMECreateContext(GdkWindow* aGdkWindow)
+-{
+- PLDHashEntryHdr* hash_entry;
+- nsXICLookupEntry* entry;
+- GtkIMContext *im = gtk_im_multicontext_new();
+- if (im) {
+- hash_entry = PL_DHashTableOperate(&gXICLookupTable, this, PL_DHASH_ADD);
+- if (hash_entry) {
+- entry = NS_REINTERPRET_CAST(nsXICLookupEntry *, hash_entry);
+- entry->mShellWindow = this;
+- entry->mXIC = im;
+- }
+- gtk_im_context_set_client_window(im, aGdkWindow);
+- g_signal_connect(G_OBJECT(im), "commit",
+- G_CALLBACK(IM_commit_cb), this);
+- g_signal_connect(G_OBJECT(im), "preedit_changed",
+- G_CALLBACK(IM_preedit_changed_cb), this);
+- this->mIMEShellWindow = this;
+- }
+-}
+-#endif
+-
+ nsWindow::~nsWindow()
+ {
+ LOG(("nsWindow::~nsWindow() [%p]\n", (void *)this));
+@@ -397,22 +345,7 @@
+ }
+
+ #ifdef USE_XIM
+- GtkIMContext *im = IMEGetContext();
+- // If this is the focus window and we have an IM context we need
+- // to unset the focus on this window before we destroy the window.
+- if (im && gFocusWindow == this) {
+- LOGFOCUS((" gtk_im_context_focus_out() from Destroy()\n"));
+- gtk_im_context_focus_out(im);
+- }
+-
+- // if shell, delete GtkIMContext
+- if (im && mShell) {
+- gtk_im_context_reset(im);
+- PL_DHashTableOperate(&gXICLookupTable, this, PL_DHASH_REMOVE);
+- g_object_unref(G_OBJECT(im));
+- }
+-
+- mIMEShellWindow = nsnull;
++ IMEDestroyContext();
+ #endif
+
+ // make sure that we remove ourself as the focus window
+@@ -656,21 +589,30 @@
+ return NS_OK;
+ }
+
++#ifdef USE_XIM
++ if (mWindowType == eWindowType_child && !mIMEShellWindow) {
++ IMEGetShellWindow();
++ }
++#endif
++
+ // If there is already a focued child window, dispatch a LOSTFOCUS
+ // event from that widget and unset its got focus flag.
+- if (gFocusWindow)
++ if (gFocusWindow) {
++#ifdef USE_XIM
++ // If same ic is focused, do not call LoseFocus()
++ if (mIMEShellWindow != gFocusWindow->mIMEShellWindow) {
++ gFocusWindow->IMELoseFocus();
++ }
++#endif
+ gFocusWindow->LoseFocus();
++ }
+
+ // Set this window to be the focused child window, update our has
+ // focus flag and dispatch a GOTFOCUS event.
+ gFocusWindow = this;
+
+ #ifdef USE_XIM
+- GtkIMContext *im = IMEGetContext();
+- if (im && !mIsTopLevel) {
+- LOGFOCUS((" gtk_im_context_focus_in()\n"));
+- gtk_im_context_focus_in(im);
+- }
++ IMESetFocus();
+ #endif
+
+ LOGFOCUS((" widget now has focus - dispatching events [%p]\n",
+@@ -1165,18 +1107,6 @@
+ void
+ nsWindow::LoseFocus(void)
+ {
+-#ifdef USE_XIM
+- GtkIMContext *im = IMEGetContext();
+- if (im && !mIsTopLevel) {
+- LOGFOCUS((" gtk_im_context_focus_out()\n"));
+- gtk_im_context_focus_out(im);
+- IMEComposeStart();
+- IMEComposeText(NULL, 0, NULL, NULL);
+- IMEComposeEnd();
+- LOG(("gtk_im_context_focus_out\n"));
+- }
+-#endif
+-
+ // make sure that we reset our repeat counter so the next keypress
+ // for this widget will get the down event
+ mInKeyRepeat = PR_FALSE;
+@@ -1449,6 +1379,7 @@
+ DispatchEvent(&event, status);
+ }
+
++
+ void
+ nsWindow::OnContainerFocusInEvent(GtkWidget *aWidget, GdkEventFocus *aEvent)
+ {
+@@ -1516,6 +1447,9 @@
+
+ foundit:
+
++#ifdef USE_XIM
++ gFocusWindow->IMELoseFocus();
++#endif
+ gFocusWindow->LoseFocus();
+
+ // We only dispatch a deactivate event if we are a toplevel
+@@ -1537,7 +1471,7 @@
+ #ifdef USE_XIM
+ GtkIMContext *im = IMEGetContext();
+ if (im) {
+- if (gtk_im_context_filter_keypress(im, aEvent)) {
++ if (IMFilterKeypress(im, aEvent)) {
+ LOGFOCUS((" keypress filtered by XIM\n"));
+ return TRUE;
+ }
+@@ -1621,7 +1555,7 @@
+ #ifdef USE_XIM
+ GtkIMContext *im = IMEGetContext();
+ if (im) {
+- if (gtk_im_context_filter_keypress(im, aEvent)) {
++ if (IMFilterKeypress(im, aEvent)) {
+ LOGFOCUS((" keypress filtered by XIM\n"));
+ return TRUE;
+ }
+@@ -2155,6 +2089,15 @@
+
+ // and the drawing area
+ mDrawingarea = moz_drawingarea_new(nsnull, mContainer);
++
++#ifdef USE_XIM
++#ifndef XIM_CREATE_IC_AT_FOCUS
++ if (mWindowType != eWindowType_popup) {
++ // create im context for shell
++ IMECreateContext(mShell->window);
++ }
++#endif /* XIM_CREATE_IC_AT_FOCUS */
++#endif /* USE_XIM */
+ }
+ break;
+ case eWindowType_child: {
+@@ -2167,11 +2110,13 @@
+ gtk_widget_realize(GTK_WIDGET(mContainer));
+
+ mDrawingarea = moz_drawingarea_new(nsnull, mContainer);
+- }
+ #ifdef USE_XIM
+- // get mIMEShellWindow and keep it
+- IMEGetShellWindow();
+-#endif
++#ifndef XIM_CREATE_IC_AT_FOCUS
++ // create im context for gtk container
++ IMECreateContext(GTK_WIDGET(mContainer)->window);
++#endif /* XIM_CREATE_IC_AT_FOCUS */
++#endif /* USE_XIM */
++ }
+ }
+ break;
+ default:
+@@ -2216,13 +2161,6 @@
+ G_CALLBACK(property_notify_event_cb), NULL);
+ }
+
+-#ifdef USE_XIM
+- if (mShell) {
+- // init GtkIMContext for shell
+- IMECreateContext(mShell->window);
+- }
+-#endif
+-
+ if (mContainer) {
+ g_signal_connect_after(G_OBJECT(mContainer), "size_allocate",
+ G_CALLBACK(size_allocate_cb), NULL);
+@@ -3667,6 +3605,77 @@
+ }
+
+ #ifdef USE_XIM
++void
++nsWindow::IMEGetShellWindow(void)
++{
++ GtkWidget* top_window = nsnull;
++ GetToplevelWidget(&top_window);
++ if (top_window) {
++ mIMEShellWindow = get_window_for_gtk_widget(top_window);
++ if (mIMEShellWindow) {
++ return;
++ }
++ }
++
++ // find deepest nsWindow
++ if (!mDrawingarea) {
++ return;
++ }
++ GdkWindow *parent = gdk_window_get_parent(mDrawingarea->inner_window);
++ while (parent) {
++ nsWindow *window = get_window_for_gdk_window(parent);
++ if (window == nsnull) {
++ break;
++ }
++ if (window->mContainer) {
++ mIMEShellWindow = window;
++ }
++ parent = gdk_window_get_parent (parent);
++ }
++}
++
++GtkIMContext*
++nsWindow::IMEGetContext()
++{
++ if (!mIMEShellWindow) {
++ return NULL;
++ }
++ PLDHashEntryHdr* hash_entry;
++ nsXICLookupEntry* entry;
++
++ hash_entry = PL_DHashTableOperate(&gXICLookupTable,
++ mIMEShellWindow, PL_DHASH_LOOKUP);
++
++ if (hash_entry) {
++ entry = NS_REINTERPRET_CAST(nsXICLookupEntry *, hash_entry);
++ if (entry->mXIC) {
++ return entry->mXIC;
++ }
++ }
++ return NULL;
++}
++
++void
++nsWindow::IMECreateContext(GdkWindow* aGdkWindow)
++{
++ PLDHashEntryHdr* hash_entry;
++ nsXICLookupEntry* entry;
++ GtkIMContext *im = gtk_im_multicontext_new();
++ if (im) {
++ hash_entry = PL_DHashTableOperate(&gXICLookupTable, this, PL_DHASH_ADD);
++ if (hash_entry) {
++ entry = NS_REINTERPRET_CAST(nsXICLookupEntry *, hash_entry);
++ entry->mShellWindow = this;
++ entry->mXIC = im;
++ }
++ gtk_im_context_set_client_window(im, aGdkWindow);
++ g_signal_connect(G_OBJECT(im), "commit",
++ G_CALLBACK(IM_commit_cb), this);
++ g_signal_connect(G_OBJECT(im), "preedit_changed",
++ G_CALLBACK(IM_preedit_changed_cb), this);
++ this->mIMEShellWindow = this;
++ }
++}
+
+ void
+ nsWindow::IMEComposeStart(void)
+@@ -3737,6 +3746,26 @@
+ DispatchEvent(&compEvent, status);
+ }
+
++PRBool
++nsWindow::IMFilterKeypress (GtkIMContext *context,
++ GdkEventKey *aEvent)
++{
++ gIMEKeyEvent = aEvent;
++ if (gtk_im_context_filter_keypress(context, aEvent)) {
++ /* return true if the keyevent is commited as string and
++ ** has been dispatched as TextEvent.
++ */
++ if( gIMEStringCommited ) {
++ return TRUE;
++ }
++ gIMEStringCommited = PR_TRUE;
++ }
++ gIMEKeyEvent = NULL;
++
++ /* the Keyevent is not filtered by IME */
++ return FALSE;
++}
++
+ /* static */
+ void
+ IM_preedit_changed_cb(GtkIMContext *context,
+@@ -3747,7 +3776,8 @@
+ PangoAttrList *feedback_list;
+
+ // call for focused window
+- nsWindow *window = gFocusWindow;
++ // if gFocusWindow is null, use the last focused gIMEFocusWindow
++ nsWindow *window = gFocusWindow ? gFocusWindow : gIMEFocusWindow;
+ if (!window) return;
+
+ // Should use cursor_pos ?
+@@ -3760,6 +3790,7 @@
+ if (!preedit_string || !*preedit_string) {
+ window->IMEComposeStart();
+ window->IMEComposeText(NULL, 0, NULL, NULL);
++ window->IMEComposeEnd();
+ return;
+ }
+
+@@ -3800,9 +3831,31 @@
+ glong uniStrLen;
+
+ // call for focused window
+- nsWindow *window = gFocusWindow;
++ // if gFocusWindow is null, use the last focused gIMEFocusWindow
++ nsWindow *window = gFocusWindow ? gFocusWindow : gIMEFocusWindow;
+ if (!window) return;
+
++ /* if the IME does not change the keystrock, we won't send it
++ * through the TextEvent.
++ */
++ nsWindow::gIMEStringCommited = PR_TRUE;
++ if ( nsWindow::gIMEKeyEvent )
++ {
++ char keyval_utf8[8]; /* should have at least 6 bytes of space */
++ gint keyval_utf8_len;
++ keyval_utf8_len = g_unichar_to_utf8(
++ gdk_keyval_to_unicode(nsWindow::gIMEKeyEvent->keyval),
++ keyval_utf8);
++
++ keyval_utf8[keyval_utf8_len] = '\0';
++ if ( strcmp(utf8_str, keyval_utf8) == 0)
++ {
++ nsWindow::gIMEStringCommited = PR_FALSE;
++ return;
++ }
++ nsWindow::gIMEKeyEvent = NULL;
++ }
++
+ uniStr = NULL;
+ uniStrLen = 0;
+ uniStr = g_utf8_to_utf16(utf8_str, -1, NULL, &uniStrLen, NULL);
+@@ -3944,6 +3997,60 @@
+ *aTextRangeListLengthResult = count + 1;
+
+ pango_attr_iterator_destroy(aFeedbackIterator);
++}
++
++void
++nsWindow::IMELoseFocus(void)
++{
++ GtkIMContext *im = IMEGetContext();
++ if (!im) {
++ return;
++ }
++ gtk_im_context_focus_out(im);
++}
++
++void
++nsWindow::IMESetFocus(void)
++{
++ GtkIMContext *im = IMEGetContext();
++#ifdef XIM_CREATE_IC_AT_FOCUS
++ if (!im && mIMEShellWindow) {
++ if (mIMEShellWindow->mShell) {
++ // init GtkIMContext for shell
++ mIMEShellWindow->IMECreateContext(mIMEShellWindow->mShell->window);
++ } else if (mIMEShellWindow->mContainer) {
++ // init GtkIMContext for mContainer
++ mIMEShellWindow->IMECreateContext(GTK_WIDGET(mIMEShellWindow->mContainer)->window);
++ }
++ }
++ im = IMEGetContext();
++#endif /* XIM_CREATE_IC_AT_FOCUS */
++ if (!im) {
++ return;
++ }
++ gtk_im_context_focus_in(im);
++ gIMEFocusWindow = this;
++}
++
++void
++nsWindow::IMEDestroyContext(void)
++{
++ GtkIMContext *im = IMEGetContext();
++ if (im) {
++ // If this is the focus window and we have an IM context we need
++ // to unset the focus on this window before we destroy the window.
++ if (gIMEFocusWindow == this) {
++ gIMEFocusWindow->IMELoseFocus();
++ gIMEFocusWindow = nsnull;
++ }
++ // if shell, delete GtkIMContext
++ if (mIMEShellWindow == this) {
++ gtk_im_context_set_client_window(im, NULL);
++ PL_DHashTableOperate(&gXICLookupTable, this, PL_DHASH_REMOVE);
++ g_object_unref(G_OBJECT(im));
++ }
++ }
++ mIMEShellWindow = nsnull;
+ }
+
+ #endif
+Index: nsWindow.h
+===================================================================
+RCS file: /cvsroot/mozilla/widget/src/gtk2/nsWindow.h,v
+retrieving revision 1.32
+diff -u -r1.32 nsWindow.h
+--- widget/src/gtk2/nsWindow.h 17 Feb 2003 18:50:01 -0000 1.32
++++ widget/src/gtk2/nsWindow.h 6 Mar 2003 02:22:39 -0000
+@@ -239,6 +239,9 @@
+ static guint32 mLastButtonPressTime;
+
+ #ifdef USE_XIM
++ void IMEDestroyContext(void);
++ void IMESetFocus(void);
++ void IMELoseFocus(void);
+ void IMEComposeStart(void);
+ void IMEComposeText(const PRUnichar *aText,
+ const PRInt32 aLen,
+@@ -249,9 +252,13 @@
+ void IMEGetShellWindow(void);
+ GtkIMContext* IMEGetContext(void);
+ void IMECreateContext(GdkWindow* aGdkWindow);
+-
++ PRBool IMFilterKeypress (GtkIMContext *context,
++ GdkEventKey *aEvent);
++
+ nsWindow* mIMEShellWindow;
+ static PLDHashTable gXICLookupTable;
++ static GdkEventKey* gIMEKeyEvent;
++ static PRBool gIMEStringCommited;
+ #endif
+
+ private: