diff -ru qt-2.3.5_fresh/include/qapplication.h qt-2.3.5/include/qapplication.h
--- qt-2.3.5_fresh/include/qapplication.h	2003-05-13 15:56:10.000000000 +0200
+++ qt-2.3.5/include/qapplication.h	2003-05-13 15:58:18.000000000 +0200
@@ -61,6 +61,10 @@
 class QSemaphore;
 #endif
 
+#if !defined( QT_WEAK_SYMBOL )
+#define QT_WEAK_SYMBOL
+#endif
+
 // REMOVE IN 3.0 (just here for moc source compatibility)
 #define QNonBaseApplication QApplication
 
@@ -85,7 +89,10 @@
 
 #ifndef QT_NO_STYLE
     static QStyle  &style();
-    static void	    setStyle( QStyle* );
+    static void	    setStyle( QStyle* ) QT_WEAK_SYMBOL;
+private:
+	static void     setStyle_NonWeak( QStyle* );
+public:
 #endif
 #if 1	/* OBSOLETE */
     enum ColorMode { NormalColors, CustomColors };
@@ -106,11 +113,19 @@
 #ifndef QT_NO_PALETTE
     static QPalette  palette( const QWidget* = 0 );
     static void	     setPalette( const QPalette &, bool informWidgets=FALSE,
+				 const char* className = 0 ) QT_WEAK_SYMBOL;
+private:
+    static void	     setPalette_NonWeak( const QPalette &, bool informWidgets=FALSE,
 				 const char* className = 0 );
+public:
 #endif
     static QFont     font( const QWidget* = 0 );
     static void	     setFont( const QFont &, bool informWidgets=FALSE,
+			      const char* className = 0 ) QT_WEAK_SYMBOL;
+private:
+    static void	     setFont_NonWeak( const QFont &, bool informWidgets=FALSE,
 			      const char* className = 0 );
+public:			      
     static QFontMetrics fontMetrics();
 
     QWidget	    *mainWidget()  const;
@@ -207,7 +222,10 @@
     void             qwsSetCustomColors( QRgb *colortable, int start, int numColors );
 #ifndef QT_NO_QWS_MANAGER
     static QWSDecoration &qwsDecoration();
-    static void      qwsSetDecoration( QWSDecoration *);
+    static void      qwsSetDecoration( QWSDecoration *) QT_WEAK_SYMBOL;
+private:
+    static void      qwsSetDecoration_NonWeak( QWSDecoration *);
+public:
 #endif
 #endif
 
diff -ru qt-2.3.5_fresh/include/qfontdatabase.h qt-2.3.5/include/qfontdatabase.h
--- qt-2.3.5_fresh/include/qfontdatabase.h	2003-05-13 15:56:11.000000000 +0200
+++ qt-2.3.5/include/qfontdatabase.h	2003-05-13 15:58:18.000000000 +0200
@@ -59,6 +59,10 @@
 class QDiskFont;
 #endif
 
+#if !defined( QT_WEAK_SYMBOL )
+#define QT_WEAK_SYMBOL
+#endif
+
 class QFontDatabasePrivate;
 
 class Q_EXPORT QFontDatabase
@@ -67,9 +71,16 @@
     QFontDatabase();
 
     QStringList families( bool onlyForLocale = TRUE ) const;
+    
+    
     QValueList<int> pointSizes( const QString &family,
 				const QString &style = QString::null,
-				const QString &charSet = QString::null );
+				const QString &charSet = QString::null ) QT_WEAK_SYMBOL;
+private:
+    QValueList<int> pointSizes_NonWeak( const QString &family,
+				const QString &style,
+				const QString &charSet );
+public:
     QStringList styles( const QString &family,
 			const QString &charSet = QString::null ) const;
     QStringList charSets( const QString &familyName,
diff -ru qt-2.3.5_fresh/src/kernel/qapplication.cpp qt-2.3.5/src/kernel/qapplication.cpp
--- qt-2.3.5_fresh/src/kernel/qapplication.cpp	2003-05-13 15:56:10.000000000 +0200
+++ qt-2.3.5/src/kernel/qapplication.cpp	2003-05-13 15:58:19.000000000 +0200
@@ -35,6 +35,8 @@
 **
 **********************************************************************/
 
+#define QT_WEAK_SYMBOL	__attribute__(( weak ))
+
 #include "qobjectlist.h"
 #include "qobjectdict.h"
 #include "qapplication.h"
@@ -933,11 +935,16 @@
 #ifndef QT_NO_STYLE
 void QApplication::setStyle( QStyle *style )
 {
+	setStyle_NonWeak ( style );
+}
+
+void QApplication::setStyle_NonWeak( QStyle *style )
+{
     QStyle* old = app_style;
-    app_style = style;
 
     if ( startingUp() ) {
 	delete old;
+	app_style = style;
 	return;
     }
 
@@ -958,6 +965,8 @@
 	old->unPolish( qApp );
     }
 
+    app_style = style;
+ 
     // take care of possible palette requirements of certain gui
     // styles. Do it before polishing the application since the style
     // might call QApplication::setStyle() itself
@@ -1184,13 +1193,30 @@
   \sa QWidget::setPalette(), palette(), QStyle::polish()
 */
 
-void QApplication::setPalette( const QPalette &palette, bool informWidgets,
+void QApplication::setPalette ( const QPalette &palette, bool informWidgets,
+			       const char* className )
+{
+	setPalette_NonWeak ( palette, informWidgets, className );
+}
+
+void QApplication::setPalette_NonWeak ( const QPalette &palette, bool informWidgets,
 			       const char* className )
 {
     QPalette pal = palette;
 #ifndef QT_NO_STYLE
-    if ( !startingUp() )
+    if ( !startingUp() ) {
 	qApp->style().polish( pal );	// NB: non-const reference
+	if ( className ) {
+	    // if we just polished a class specific palette (this normally 
+	    // only called by qt_fix_tooltips - see below), we better re-
+	    // polish the global palette. Some styles like liquid can get 
+	    // confused, because they can not detect if the polished palette 
+	    // is the global one or only a class specific one.
+	    // (liquid uses this palette to calculate blending pixmaps)
+	    QPalette p = qApp-> palette ( );
+	    qApp->style().polish ( p );
+	}
+    }
 #endif
     bool all = FALSE;
     if ( !className ) {
@@ -1275,6 +1301,12 @@
 void QApplication::setFont( const QFont &font, bool informWidgets,
 			    const char* className )
 {
+	setFont_NonWeak ( font, informWidgets, className );
+}
+
+void QApplication::setFont_NonWeak( const QFont &font, bool informWidgets,
+			    const char* className )
+{
     bool all = FALSE;
     if ( !className ) {
 	if ( !app_font ) {
Nur in qt-2.3.5/src/kernel: qapplication.cpp.orig.
diff -ru qt-2.3.5_fresh/src/kernel/qapplication.h qt-2.3.5/src/kernel/qapplication.h
--- qt-2.3.5_fresh/src/kernel/qapplication.h	2003-05-13 15:56:10.000000000 +0200
+++ qt-2.3.5/src/kernel/qapplication.h	2003-05-13 15:58:18.000000000 +0200
@@ -61,6 +61,10 @@
 class QSemaphore;
 #endif
 
+#if !defined( QT_WEAK_SYMBOL )
+#define QT_WEAK_SYMBOL
+#endif
+
 // REMOVE IN 3.0 (just here for moc source compatibility)
 #define QNonBaseApplication QApplication
 
@@ -85,7 +89,10 @@
 
 #ifndef QT_NO_STYLE
     static QStyle  &style();
-    static void	    setStyle( QStyle* );
+    static void	    setStyle( QStyle* ) QT_WEAK_SYMBOL;
+private:
+	static void     setStyle_NonWeak( QStyle* );
+public:
 #endif
 #if 1	/* OBSOLETE */
     enum ColorMode { NormalColors, CustomColors };
@@ -106,11 +113,19 @@
 #ifndef QT_NO_PALETTE
     static QPalette  palette( const QWidget* = 0 );
     static void	     setPalette( const QPalette &, bool informWidgets=FALSE,
+				 const char* className = 0 ) QT_WEAK_SYMBOL;
+private:
+    static void	     setPalette_NonWeak( const QPalette &, bool informWidgets=FALSE,
 				 const char* className = 0 );
+public:
 #endif
     static QFont     font( const QWidget* = 0 );
     static void	     setFont( const QFont &, bool informWidgets=FALSE,
+			      const char* className = 0 ) QT_WEAK_SYMBOL;
+private:
+    static void	     setFont_NonWeak( const QFont &, bool informWidgets=FALSE,
 			      const char* className = 0 );
+public:			      
     static QFontMetrics fontMetrics();
 
     QWidget	    *mainWidget()  const;
@@ -207,7 +222,10 @@
     void             qwsSetCustomColors( QRgb *colortable, int start, int numColors );
 #ifndef QT_NO_QWS_MANAGER
     static QWSDecoration &qwsDecoration();
-    static void      qwsSetDecoration( QWSDecoration *);
+    static void      qwsSetDecoration( QWSDecoration *) QT_WEAK_SYMBOL;
+private:
+    static void      qwsSetDecoration_NonWeak( QWSDecoration *);
+public:
 #endif
 #endif
 
diff -ru qt-2.3.5_fresh/src/kernel/qapplication_qws.cpp qt-2.3.5/src/kernel/qapplication_qws.cpp
--- qt-2.3.5_fresh/src/kernel/qapplication_qws.cpp	2003-05-13 15:56:10.000000000 +0200
+++ qt-2.3.5/src/kernel/qapplication_qws.cpp	2003-05-13 15:58:18.000000000 +0200
@@ -2737,6 +2737,11 @@
 */
 void QApplication::qwsSetDecoration( QWSDecoration *d )
 {
+	qwsSetDecoration_NonWeak ( d );
+}
+
+void QApplication::qwsSetDecoration_NonWeak( QWSDecoration *d )
+{
     if ( d ) {
 	delete qws_decoration;
 	qws_decoration = d;
Nur in qt-2.3.5/src/kernel: qapplication_qws.cpp.orig.
diff -ru qt-2.3.5_fresh/src/kernel/qfontdatabase.cpp qt-2.3.5/src/kernel/qfontdatabase.cpp
--- qt-2.3.5_fresh/src/kernel/qfontdatabase.cpp	2003-05-13 15:56:11.000000000 +0200
+++ qt-2.3.5/src/kernel/qfontdatabase.cpp	2003-05-13 15:58:18.000000000 +0200
@@ -35,6 +35,8 @@
 **
 **********************************************************************/
 
+#define QT_WEAK_SYMBOL  __attribute__(( weak ))
+
 #include "qfontdatabase.h"
 
 #ifndef QT_NO_FONTDATABASE
@@ -2424,6 +2426,13 @@
                                                  const QString &style,
                                                  const QString &charSet )
 {
+	return pointSizes_NonWeak ( family, style, charSet );
+}
+
+QValueList<int> QFontDatabase::pointSizes_NonWeak ( const QString &family,
+                                                 const QString &style,
+                                                 const QString &charSet )
+{
     QString cs( charSet );
     if ( charSet.isEmpty() ) {
         QStringList lst = charSets( family );
diff -ru qt-2.3.5_fresh/src/kernel/qfontdatabase.h qt-2.3.5/src/kernel/qfontdatabase.h
--- qt-2.3.5_fresh/src/kernel/qfontdatabase.h	2003-05-13 15:56:11.000000000 +0200
+++ qt-2.3.5/src/kernel/qfontdatabase.h	2003-05-13 15:58:18.000000000 +0200
@@ -59,6 +59,10 @@
 class QDiskFont;
 #endif
 
+#if !defined( QT_WEAK_SYMBOL )
+#define QT_WEAK_SYMBOL
+#endif
+
 class QFontDatabasePrivate;
 
 class Q_EXPORT QFontDatabase
@@ -67,9 +71,16 @@
     QFontDatabase();
 
     QStringList families( bool onlyForLocale = TRUE ) const;
+    
+    
     QValueList<int> pointSizes( const QString &family,
 				const QString &style = QString::null,
-				const QString &charSet = QString::null );
+				const QString &charSet = QString::null ) QT_WEAK_SYMBOL;
+private:
+    QValueList<int> pointSizes_NonWeak( const QString &family,
+				const QString &style,
+				const QString &charSet );
+public:
     QStringList styles( const QString &family,
 			const QString &charSet = QString::null ) const;
     QStringList charSets( const QString &familyName,
diff -ru qt-2.3.5_fresh/src/kernel/qgfxraster_qws.cpp qt-2.3.5/src/kernel/qgfxraster_qws.cpp
--- qt-2.3.5_fresh/src/kernel/qgfxraster_qws.cpp	2003-05-13 15:56:11.000000000 +0200
+++ qt-2.3.5/src/kernel/qgfxraster_qws.cpp	2003-05-13 15:58:18.000000000 +0200
@@ -4205,7 +4205,7 @@
     setAlphaType(IgnoreAlpha);
     if ( w <= 0 || h <= 0 || !ncliprect ) return;
     GFX_START(QRect(rx+xoffs, ry+yoffs, w+1, h+1))
-#ifdef QWS_EXPERIMENTAL_FASTPATH
+#if 0 // def QWS_EXPERIMENTAL_FASTPATH    !! this is crashing HancomWord on OZ !!
     // ### fix for 8bpp
     // This seems to be reliable now, at least for 16bpp
 
Nur in qt-2.3.5/src/kernel: qgfxraster_qws.cpp.orig.
diff -ru qt-2.3.5_fresh/src/kernel/qwindowsystem_qws.cpp qt-2.3.5/src/kernel/qwindowsystem_qws.cpp
--- qt-2.3.5_fresh/src/kernel/qwindowsystem_qws.cpp	2003-05-13 15:56:11.000000000 +0200
+++ qt-2.3.5/src/kernel/qwindowsystem_qws.cpp	2003-05-13 15:58:19.000000000 +0200
@@ -843,6 +843,18 @@
 {
 }
 
+static void catchSegvSignal( int )
+{
+#ifndef QT_NO_QWS_KEYBOARD
+    if ( qwsServer )
+	qwsServer->closeKeyboard();
+#endif
+    QWSServer::closedown();
+    fprintf(stderr, "Segmentation fault.\n");
+    exit(1);
+}
+
+
 /*!
   \class QWSServer qwindowsystem_qws.h
   \brief Server-specific functionality in Qt/Embedded
@@ -912,6 +924,7 @@
     }
 
     signal(SIGPIPE, ignoreSignal); //we get it when we read
+    signal(SIGSEGV, catchSegvSignal); //recover the keyboard on crash
 #endif
     focusw = 0;
     mouseGrabber = 0;
diff -ru qt-2.3.5_fresh/src/Makefile.in qt-2.3.5/src/Makefile.in
--- qt-2.3.5_fresh/src/Makefile.in	2003-05-13 15:56:13.000000000 +0200
+++ qt-2.3.5/src/Makefile.in	2003-05-13 15:58:18.000000000 +0200
@@ -6,7 +6,7 @@
 CXXFLAGS=	$(SYSCONF_CXXFLAGS_QT) $(SYSCONF_CXXFLAGS_X11) $(SYSCONF_CXXFLAGS) $(SYSCONF_CXXFLAGS_LIB) -DQT_NO_IMAGEIO_MNG $(QT_CXXFLAGS_OPT)
 CC	=	$(SYSCONF_CC) $(QT_C_MT)
 CFLAGS	=	$(SYSCONF_CFLAGS) $(SYSCONF_CFLAGS_LIB) -DQT_NO_IMAGEIO_MNG $(QT_CFLAGS_OPT)
-INCPATH =	-I3rdparty/freetype/src -I3rdparty/freetype/include -I3rdparty/freetype/builds/unix -I3rdparty/kernel -I3rdparty/tools
+INCPATH =	-I3rdparty/kernel -I3rdparty/tools
 LFLAGS	=	$(SYSCONF_LFLAGS) $(QT_LFLAGS_MT)
 LIBS	=	$(SUBLIBS)  $(SYSCONF_LIBS_QTLIB)
 MOC	=	$(SYSCONF_MOC)
@@ -44,26 +44,7 @@
 		3rdparty/freetype/src/type1/type1.c \
 		3rdparty/freetype/src/winfonts/winfnt.c \
 		allmoc.cpp
-OBJECTS =	3rdparty/freetype/builds/unix/ftsystem.o \
-		3rdparty/freetype/src/base/ftdebug.o \
-		3rdparty/freetype/src/base/ftinit.o \
-		3rdparty/freetype/src/base/ftbase.o \
-		3rdparty/freetype/src/base/ftglyph.o \
-		3rdparty/freetype/src/base/ftmm.o \
-		3rdparty/freetype/src/base/ftbbox.o \
-		3rdparty/freetype/src/autohint/autohint.o \
-		3rdparty/freetype/src/cache/ftcache.o \
-		3rdparty/freetype/src/cff/cff.o \
-		3rdparty/freetype/src/cid/type1cid.o \
-		3rdparty/freetype/src/psaux/psaux.o \
-		3rdparty/freetype/src/psnames/psmodule.o \
-		3rdparty/freetype/src/raster/raster.o \
-		3rdparty/freetype/src/sfnt/sfnt.o \
-		3rdparty/freetype/src/smooth/smooth.o \
-		3rdparty/freetype/src/truetype/truetype.o \
-		3rdparty/freetype/src/type1/type1.o \
-		3rdparty/freetype/src/winfonts/winfnt.o \
-		allmoc.o $(QT_MODULE_OBJ)
+OBJECTS =	allmoc.o $(QT_MODULE_OBJ)
 INTERFACES =    
 UICDECLS =      
 UICIMPLS =      
diff -ru qt-2.3.5_fresh/src/widgets/qcommonstyle.cpp qt-2.3.5/src/widgets/qcommonstyle.cpp
--- qt-2.3.5_fresh/src/widgets/qcommonstyle.cpp	2003-05-13 15:56:12.000000000 +0200
+++ qt-2.3.5/src/widgets/qcommonstyle.cpp	2003-05-13 15:58:19.000000000 +0200
@@ -566,7 +566,7 @@
 				    bool enabled, bool active )
 {
 #ifndef QT_NO_MENUBAR
-#ifndef QT_NO_STYLE_SGI
+#if 1 // #ifndef QT_NO_STYLE_SGI
     if (draw_menu_bar_impl != 0) {
 	QDrawMenuBarItemImpl impl = draw_menu_bar_impl;
 	(this->*impl)(p, x, y, w, h, mi, g, enabled, active);
Nur in qt-2.3.5/src/widgets: qcommonstyle.cpp.orig.
diff -ru qt-2.3.5_fresh/src/widgets/qlistview.cpp qt-2.3.5/src/widgets/qlistview.cpp
--- qt-2.3.5_fresh/src/widgets/qlistview.cpp	2003-05-13 15:56:12.000000000 +0200
+++ qt-2.3.5/src/widgets/qlistview.cpp	2003-05-13 15:58:18.000000000 +0200
@@ -4968,9 +4968,9 @@
 	l = l->childItem ? l->childItem : l->siblingItem;
 
     if ( l && l->height() )
-	s.setHeight( s.height() + 10 * l->height() );
-    else
-	s.setHeight( s.height() + 140 );
+	s.setHeight( s.height() + 4 /*10*/ * l->height() );
+    else                      // ^v much too big for handhelds
+	s.setHeight( s.height() + 30 /*140*/ );
 
     if ( s.width() > s.height() * 3 )
 	s.setHeight( s.width() / 3 );
diff -ru qt-2.3.5_fresh/src/widgets/qtoolbutton.cpp qt-2.3.5/src/widgets/qtoolbutton.cpp
--- qt-2.3.5_fresh/src/widgets/qtoolbutton.cpp	2003-05-13 15:56:12.000000000 +0200
+++ qt-2.3.5/src/widgets/qtoolbutton.cpp	2003-05-13 15:58:18.000000000 +0200
@@ -230,7 +230,7 @@
 	else
 	    QToolTip::add( this, textLabel );
     }
-#endif	
+#endif
 }
 
 
@@ -324,12 +324,12 @@
 	QPixmap pm = iconSet(TRUE).pixmap(QIconSet::Large, QIconSet::Normal);
 	w = pm.width();
 	h = pm.height();
-	if ( w < 32 )
-	    w = 32;
-	if ( h < 32 )
-	    h = 32;
+	if ( w < 24 )
+	    w = 24;
+	if ( h < 24 )
+	    h = 24;
     } else {
-	w = h = 16;
+	w = h = 14;
 	QPixmap pm = iconSet(TRUE).pixmap(QIconSet::Small, QIconSet::Normal);
 	w = pm.width();
 	h = pm.height();