summaryrefslogtreecommitdiff
path: root/qte
diff options
context:
space:
mode:
Diffstat (limited to 'qte')
-rw-r--r--qte/qte-2.3.7/kernel-keymap.patch265
-rw-r--r--qte/qte-2.3.7/opie.patch562
2 files changed, 827 insertions, 0 deletions
diff --git a/qte/qte-2.3.7/kernel-keymap.patch b/qte/qte-2.3.7/kernel-keymap.patch
index e69de29bb2..7f1db803ee 100644
--- a/qte/qte-2.3.7/kernel-keymap.patch
+++ b/qte/qte-2.3.7/kernel-keymap.patch
@@ -0,0 +1,265 @@
+
+#
+# Patch managed by http://www.holgerschurig.de/patcher.html
+#
+
+--- qt-2.3.7/src/kernel/qkeyboard_qws.cpp~kernel-keymap.patch
++++ qt-2.3.7/src/kernel/qkeyboard_qws.cpp
+@@ -30,6 +30,34 @@
+ **
+ **********************************************************************/
+
++/****************************************************************************
++**
++** Keyboard Handling Redesign
++** Copyright 2003, Chris Larson <kergoth@handhelds.org>
++**
++** TODO: (key: . = in progress, x = completed)
++**
++** [.] Tty driver should load its initial keymap from the kernel,
++** thereby ensuring keymap consistency between X, console, and qt/e
++** [x] Read kernel keymappings.
++** [x] Read kernel keycode -> unicode map.
++** [x] Use them, along with the existing keyM, to push events up.
++** [ ] Create a new table, from transformed keycode -> qt keycode, rather
++** than the existing raw keycode -> qt keycode.
++** [ ] Adapt handleKey to deal with keys that have no unicode value, such as
++** keypresses that are mapped to strings in the string table. (e.g. F keys)
++** [ ] Cursor orientation change based on display rotation should not
++** be bound to Ipaq or 5xxx, but instead as a runtime choice based
++** on whether or not we're using a Transformed display driver.
++** [ ] Double check that VT handling, particularly with regard to switching,
++** is handled properly.
++** [ ] Add a generic means of dealing with additional (outside the realm of
++** ctrl, alt, shift, altgr) modifiers. Also ensure a means of binding
++** a keypress/combination to a 'lock' of said additional modifiers.
++**
++**********************************************************************/
++
++
+ #include "qwindowsystem_qws.h"
+ #include "qwsutils_qws.h"
+ #include "qgfx_qws.h"
+@@ -46,6 +74,7 @@
+ #include <unistd.h>
+ #ifdef _OS_LINUX_
+ #include <linux/kd.h>
++#include <linux/keyboard.h>
+ #endif
+ #include <sys/ioctl.h>
+ #include <sys/types.h>
+@@ -53,6 +82,7 @@
+ #include <fcntl.h>
+ #include <errno.h>
+ #include <signal.h>
++#include <termios.h>
+
+ #ifndef QT_NO_QWS_KEYBOARD
+
+@@ -74,11 +104,6 @@
+ #include <sys/vt.h>
+ #endif
+
+-#ifdef QT_QWS_SL5XXX
+-#include <asm/sharp_char.h>
+-#endif
+-
+-#if defined(QT_QWS_IPAQ) || defined(QT_QWS_SL5XXX)
+ static int dir_keyrot = -1;
+
+ static int xform_dirkey(int key)
+@@ -102,7 +127,6 @@
+ int xf = qt_screen->transformOrientation() + dir_keyrot;
+ return (key-Qt::Key_Left+xf)%4+Qt::Key_Left;
+ }
+-#endif
+
+ #define VTSWITCHSIG SIGUSR2
+
+@@ -480,12 +504,18 @@
+ public:
+ QWSTtyKeyboardHandler(const QString&);
+ virtual ~QWSTtyKeyboardHandler();
++ void readKeyboardMap();
++ void readUnicodeMap();
++ void handleKey(unsigned char code);
+
+ private slots:
+ void readKeyboardData();
+
+ private:
+ struct termios origTermData;
++ unsigned short acm[E_TABSZ];
++ unsigned char kernel_map[(1<<KG_CAPSSHIFT)][NR_KEYS];
++ int current_map;
+ };
+
+ class QWSUsbKeyboardHandler : public QWSPC101KeyboardHandler
+@@ -625,6 +655,7 @@
+ fn = FALSE;
+
+ numLock = FALSE;
++#if 0
+ sharp_kbdctl_modifstat st;
+ int dev = ::open("/dev/sharp_kbdctl", O_RDWR);
+ if( dev >= 0 ) {
+@@ -636,6 +667,7 @@
+ ::close(dev);
+ }
+ #endif
++#endif
+ #if defined(QT_QWS_IPAQ)
+ // iPAQ Action Key has ScanCode 0x60: 0x60|0x80 = 0xe0 == extended mode 1 !
+ ipaq_return_pressed = FALSE;
+@@ -1015,7 +1047,7 @@
+ // Tty keyboard
+ //
+
+-QWSTtyKeyboardHandler::QWSTtyKeyboardHandler(const QString& device)
++QWSTtyKeyboardHandler::QWSTtyKeyboardHandler(const QString& device) : current_map(0)
+ {
+ kbdFD=open(device.isEmpty() ? "/dev/tty0" : device.latin1(), O_RDWR | O_NDELAY, 0);
+
+@@ -1032,7 +1064,7 @@
+ tcgetattr( kbdFD, &termdata );
+
+ #if !defined(_OS_FREEBSD_) && !defined(_OS_SOLARIS_)
+- ioctl(kbdFD, KDSKBMODE, K_RAW);
++ ioctl(kbdFD, KDSKBMODE, K_MEDIUMRAW);
+ #endif
+
+ termdata.c_iflag = (IGNPAR | IGNBRK) & (~PARMRK) & (~ISTRIP);
+@@ -1045,6 +1077,9 @@
+ cfsetospeed(&termdata, 9600);
+ tcsetattr(kbdFD, TCSANOW, &termdata);
+
++ readUnicodeMap();
++ readKeyboardMap();
++
+ signal(VTSWITCHSIG, vtSwitchHandler);
+
+ #if !defined(_OS_FREEBSD_) && !defined(_OS_SOLARIS_)
+@@ -1100,9 +1135,122 @@
+ unsigned char buf[81];
+ int n = read(kbdFD, buf, 80 );
+ for ( int loop = 0; loop < n; loop++ )
+- doKey(buf[loop]);
++ handleKey(buf[loop]);
++}
++
++void QWSTtyKeyboardHandler::readUnicodeMap()
++{
++ if (kbdFD < 0)
++ return;
++ if (ioctl(kbdFD,GIO_UNISCRNMAP,acm) != 0)
++ return;
++}
++
++void QWSTtyKeyboardHandler::readKeyboardMap()
++{
++ struct kbentry kbe;
++ if (kbdFD < 0)
++ return;
++
++ for (int map = 0; map < (1<<KG_CAPSSHIFT); ++map)
++ {
++ unsigned short kval;
++ kbe.kb_table = map;
++
++ for (int key = 0; key < NR_KEYS; ++key)
++ {
++ kbe.kb_index = key;
++
++ if (ioctl(kbdFD, KDGKBENT, &kbe) != 0) continue;
++
++ if ((kbe.kb_value == K_HOLE) || (kbe.kb_value == K_NOSUCHMAP)) continue;
++
++ kval = KVAL(kbe.kb_value);
++ switch (KTYP(kbe.kb_value))
++ {
++ case KT_LETTER:
++ case KT_LATIN:
++ case KT_ASCII:
++ case KT_PAD:
++ case KT_SHIFT:
++ kernel_map[map][key] = kbe.kb_value;
++ //qWarning("keycode %d, map %d, type %d, val %d, acm %c\n", key, map, KTYP(kbe.kb_value), kval, acm[kval]);
++ break;
++ }
++ }
++ }
++}
++
++static inline int map_to_modif(int current_map)
++{
++ int modifiers = 0;
++
++ if (current_map & KG_ALT)
++ modifiers |= Qt::ALT;
++ else if (current_map & KG_CTRL)
++ modifiers |= Qt::CTRL;
++ else if (current_map & KG_SHIFT)
++ modifiers |= Qt::SHIFT;
++
++ return modifiers;
+ }
+
++void QWSTtyKeyboardHandler::handleKey(unsigned char code)
++{
++ struct kbentry kbe;
++
++ bool release = false;
++ if (code & 0x80)
++ {
++ release = true;
++ code &= 0x7f;
++ }
++
++ unsigned short mCode = KVAL(kernel_map[current_map][code]);
++ unsigned short unicode = acm[mCode];
++
++ const QWSServer::KeyMap *currentKey = 0;
++ int qtKeyCode = Qt::Key_unknown;
++
++ currentKey = &QWSServer::keyMap()[code];
++ if ( currentKey ) qtKeyCode = currentKey->key_code;
++
++ qDebug("code %d, mCode %d, uni %c, qtKeyCode %d\n", code, mCode, unicode, qtKeyCode);
++
++ // Handle map changes based on press/release of modifiers
++ // hardcoded for now
++ int modif = -1;
++ switch (qtKeyCode)
++ {
++ case Qt::Key_Alt:
++ case Qt::Key_F22:
++ modif = (1<<KG_ALT);
++ break;
++ case Qt::Key_Control:
++ modif = (1<<KG_CTRL);
++ break;
++ case Qt::Key_Shift:
++ modif = (1<<KG_SHIFT);
++ break;
++ case Qt::Key_Left:
++ case Qt::Key_Right:
++ case Qt::Key_Up:
++ case Qt::Key_Down:
++ if (qt_screen->isTransformed())
++ qtKeyCode = xform_dirkey(qtKeyCode);
++ break;
++ }
++
++ if (modif != -1) {
++ if (release)
++ current_map &= ~modif;
++ else
++ current_map |= modif;
++ }
++
++ unsigned int uni = unicode;
++ processKeyEvent(uni & 0xff, qtKeyCode, map_to_modif(current_map), !release, 0);
++}
+
+ /* USB driver */
+
diff --git a/qte/qte-2.3.7/opie.patch b/qte/qte-2.3.7/opie.patch
index e69de29bb2..f3272bee52 100644
--- a/qte/qte-2.3.7/opie.patch
+++ b/qte/qte-2.3.7/opie.patch
@@ -0,0 +1,562 @@
+diff -ur qt-2.3.7_clean/configs/linux-generic-g++-shared qt-2.3.7/configs/linux-generic-g++-shared
+--- qt-2.3.7_clean/configs/linux-generic-g++-shared 2004-06-04 02:17:54.000000000 +0200
++++ qt-2.3.7/configs/linux-generic-g++-shared 2004-06-04 02:22:25.000000000 +0200
+@@ -36,7 +36,7 @@
+ SYSCONF_LIBS_YACC =
+
+ # Linking applications
+-SYSCONF_LINK = gcc
++SYSCONF_LINK = g++
+ SYSCONF_LFLAGS =
+ SYSCONF_LIBS =
+
+diff -ur qt-2.3.7_clean/configs/linux-generic-g++-shared-debug qt-2.3.7/configs/linux-generic-g++-shared-debug
+--- qt-2.3.7_clean/configs/linux-generic-g++-shared-debug 2004-06-04 02:17:54.000000000 +0200
++++ qt-2.3.7/configs/linux-generic-g++-shared-debug 2004-06-04 02:22:25.000000000 +0200
+@@ -36,7 +36,7 @@
+ SYSCONF_LIBS_YACC =
+
+ # Linking applications
+-SYSCONF_LINK = gcc
++SYSCONF_LINK = g++
+ SYSCONF_LFLAGS =
+ SYSCONF_LIBS =
+
+diff -ur qt-2.3.7_clean/configs/linux-generic-g++-static qt-2.3.7/configs/linux-generic-g++-static
+--- qt-2.3.7_clean/configs/linux-generic-g++-static 2004-06-04 02:17:54.000000000 +0200
++++ qt-2.3.7/configs/linux-generic-g++-static 2004-06-04 02:22:25.000000000 +0200
+@@ -36,7 +36,7 @@
+ SYSCONF_LIBS_YACC =
+
+ # Linking applications
+-SYSCONF_LINK = gcc
++SYSCONF_LINK = g++
+ SYSCONF_LFLAGS =
+ SYSCONF_LIBS =
+
+diff -ur qt-2.3.7_clean/configs/linux-generic-g++-static-debug qt-2.3.7/configs/linux-generic-g++-static-debug
+--- qt-2.3.7_clean/configs/linux-generic-g++-static-debug 2004-06-04 02:17:54.000000000 +0200
++++ qt-2.3.7/configs/linux-generic-g++-static-debug 2004-06-04 02:22:25.000000000 +0200
+@@ -36,7 +36,7 @@
+ SYSCONF_LIBS_YACC =
+
+ # Linking applications
+-SYSCONF_LINK = gcc
++SYSCONF_LINK = g++
+ SYSCONF_LFLAGS =
+ SYSCONF_LIBS =
+
+diff -ur qt-2.3.7_clean/configs/linux-generic_rtti-g++-shared qt-2.3.7/configs/linux-generic_rtti-g++-shared
+--- qt-2.3.7_clean/configs/linux-generic_rtti-g++-shared 2004-06-04 02:17:54.000000000 +0200
++++ qt-2.3.7/configs/linux-generic_rtti-g++-shared 2004-06-04 02:22:25.000000000 +0200
+@@ -36,7 +36,7 @@
+ SYSCONF_LIBS_YACC =
+
+ # Linking applications
+-SYSCONF_LINK = gcc
++SYSCONF_LINK = g++
+ SYSCONF_LFLAGS =
+ SYSCONF_LIBS =
+
+diff -ur qt-2.3.7_clean/configs/linux-generic_rtti-g++-shared-debug qt-2.3.7/configs/linux-generic_rtti-g++-shared-debug
+--- qt-2.3.7_clean/configs/linux-generic_rtti-g++-shared-debug 2004-06-04 02:17:54.000000000 +0200
++++ qt-2.3.7/configs/linux-generic_rtti-g++-shared-debug 2004-06-04 02:22:25.000000000 +0200
+@@ -36,7 +36,7 @@
+ SYSCONF_LIBS_YACC =
+
+ # Linking applications
+-SYSCONF_LINK = gcc
++SYSCONF_LINK = g++
+ SYSCONF_LFLAGS =
+ SYSCONF_LIBS =
+
+diff -ur qt-2.3.7_clean/configs/linux-generic_rtti-g++-static qt-2.3.7/configs/linux-generic_rtti-g++-static
+--- qt-2.3.7_clean/configs/linux-generic_rtti-g++-static 2004-06-04 02:17:54.000000000 +0200
++++ qt-2.3.7/configs/linux-generic_rtti-g++-static 2004-06-04 02:22:25.000000000 +0200
+@@ -36,7 +36,7 @@
+ SYSCONF_LIBS_YACC =
+
+ # Linking applications
+-SYSCONF_LINK = gcc
++SYSCONF_LINK = g++
+ SYSCONF_LFLAGS =
+ SYSCONF_LIBS =
+
+diff -ur qt-2.3.7_clean/configs/linux-generic_rtti-g++-static-debug qt-2.3.7/configs/linux-generic_rtti-g++-static-debug
+--- qt-2.3.7_clean/configs/linux-generic_rtti-g++-static-debug 2004-06-04 02:17:54.000000000 +0200
++++ qt-2.3.7/configs/linux-generic_rtti-g++-static-debug 2004-06-04 02:22:25.000000000 +0200
+@@ -36,7 +36,7 @@
+ SYSCONF_LIBS_YACC =
+
+ # Linking applications
+-SYSCONF_LINK = gcc
++SYSCONF_LINK = g++
+ SYSCONF_LFLAGS =
+ SYSCONF_LIBS =
+
+diff -ur qt-2.3.7_clean/configs/linux-x86rtti-g++-shared qt-2.3.7/configs/linux-x86rtti-g++-shared
+--- qt-2.3.7_clean/configs/linux-x86rtti-g++-shared 2004-06-04 02:17:54.000000000 +0200
++++ qt-2.3.7/configs/linux-x86rtti-g++-shared 2004-06-04 02:22:25.000000000 +0200
+@@ -36,7 +36,7 @@
+ SYSCONF_LIBS_YACC =
+
+ # Linking applications
+-SYSCONF_LINK = gcc
++SYSCONF_LINK = g++
+ SYSCONF_LFLAGS =
+ SYSCONF_LIBS = -lm
+
+diff -ur qt-2.3.7_clean/configs/linux-x86rtti-g++-shared-debug qt-2.3.7/configs/linux-x86rtti-g++-shared-debug
+--- qt-2.3.7_clean/configs/linux-x86rtti-g++-shared-debug 2004-06-04 02:17:54.000000000 +0200
++++ qt-2.3.7/configs/linux-x86rtti-g++-shared-debug 2004-06-04 02:22:25.000000000 +0200
+@@ -36,7 +36,7 @@
+ SYSCONF_LIBS_YACC =
+
+ # Linking applications
+-SYSCONF_LINK = gcc
++SYSCONF_LINK = g++
+ SYSCONF_LFLAGS =
+ SYSCONF_LIBS = -lm
+
+diff -ur qt-2.3.7_clean/configs/linux-x86rtti-g++-static qt-2.3.7/configs/linux-x86rtti-g++-static
+--- qt-2.3.7_clean/configs/linux-x86rtti-g++-static 2004-06-04 02:17:54.000000000 +0200
++++ qt-2.3.7/configs/linux-x86rtti-g++-static 2004-06-04 02:22:25.000000000 +0200
+@@ -36,7 +36,7 @@
+ SYSCONF_LIBS_YACC =
+
+ # Linking applications
+-SYSCONF_LINK = gcc
++SYSCONF_LINK = g++
+ SYSCONF_LFLAGS =
+ SYSCONF_LIBS = -lm
+
+diff -ur qt-2.3.7_clean/configs/linux-x86rtti-g++-static-debug qt-2.3.7/configs/linux-x86rtti-g++-static-debug
+--- qt-2.3.7_clean/configs/linux-x86rtti-g++-static-debug 2004-06-04 02:17:54.000000000 +0200
++++ qt-2.3.7/configs/linux-x86rtti-g++-static-debug 2004-06-04 02:22:25.000000000 +0200
+@@ -36,7 +36,7 @@
+ SYSCONF_LIBS_YACC =
+
+ # Linking applications
+-SYSCONF_LINK = gcc
++SYSCONF_LINK = g++
+ SYSCONF_LFLAGS =
+ SYSCONF_LIBS = -lm
+
+diff -ur qt-2.3.7_clean/include/qapplication.h qt-2.3.7/include/qapplication.h
+--- qt-2.3.7_clean/include/qapplication.h 2004-06-04 02:17:53.000000000 +0200
++++ qt-2.3.7/include/qapplication.h 2004-06-04 02:22:25.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 -ur qt-2.3.7_clean/include/qfontdatabase.h qt-2.3.7/include/qfontdatabase.h
+--- qt-2.3.7_clean/include/qfontdatabase.h 2004-06-04 02:17:53.000000000 +0200
++++ qt-2.3.7/include/qfontdatabase.h 2004-06-04 02:22:25.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 -ur qt-2.3.7_clean/src/kernel/qapplication.cpp qt-2.3.7/src/kernel/qapplication.cpp
+--- qt-2.3.7_clean/src/kernel/qapplication.cpp 2004-06-04 02:17:53.000000000 +0200
++++ qt-2.3.7/src/kernel/qapplication.cpp 2004-06-04 02:22:25.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 ) {
+diff -ur qt-2.3.7_clean/src/kernel/qapplication.h qt-2.3.7/src/kernel/qapplication.h
+--- qt-2.3.7_clean/src/kernel/qapplication.h 2004-06-04 02:17:53.000000000 +0200
++++ qt-2.3.7/src/kernel/qapplication.h 2004-06-04 02:22:25.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 -ur qt-2.3.7_clean/src/kernel/qapplication_qws.cpp qt-2.3.7/src/kernel/qapplication_qws.cpp
+--- qt-2.3.7_clean/src/kernel/qapplication_qws.cpp 2004-06-04 02:17:53.000000000 +0200
++++ qt-2.3.7/src/kernel/qapplication_qws.cpp 2004-06-04 02:22:25.000000000 +0200
+@@ -2804,6 +2804,11 @@
+ */
+ void QApplication::qwsSetDecoration( QWSDecoration *d )
+ {
++ qwsSetDecoration_NonWeak ( d );
++}
++
++void QApplication::qwsSetDecoration_NonWeak( QWSDecoration *d )
++{
+ if ( d ) {
+ delete qws_decoration;
+ qws_decoration = d;
+diff -ur qt-2.3.7_clean/src/kernel/qfontdatabase.cpp qt-2.3.7/src/kernel/qfontdatabase.cpp
+--- qt-2.3.7_clean/src/kernel/qfontdatabase.cpp 2004-06-04 02:17:53.000000000 +0200
++++ qt-2.3.7/src/kernel/qfontdatabase.cpp 2004-06-04 02:22:25.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 -ur qt-2.3.7_clean/src/kernel/qfontdatabase.h qt-2.3.7/src/kernel/qfontdatabase.h
+--- qt-2.3.7_clean/src/kernel/qfontdatabase.h 2004-06-04 02:17:53.000000000 +0200
++++ qt-2.3.7/src/kernel/qfontdatabase.h 2004-06-04 02:22:25.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 -ur qt-2.3.7_clean/src/kernel/qgfxraster_qws.cpp qt-2.3.7/src/kernel/qgfxraster_qws.cpp
+--- qt-2.3.7_clean/src/kernel/qgfxraster_qws.cpp 2004-06-04 02:17:53.000000000 +0200
++++ qt-2.3.7/src/kernel/qgfxraster_qws.cpp 2004-06-04 02:22:25.000000000 +0200
+@@ -4237,7 +4237,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
+
+diff -ur qt-2.3.7_clean/src/kernel/qkeyboard_qws.cpp qt-2.3.7/src/kernel/qkeyboard_qws.cpp
+--- qt-2.3.7_clean/src/kernel/qkeyboard_qws.cpp 2004-06-04 02:17:53.000000000 +0200
++++ qt-2.3.7/src/kernel/qkeyboard_qws.cpp 2004-06-04 02:22:25.000000000 +0200
+@@ -238,7 +238,7 @@
+ { Qt::Key_unknown, 0xffff , 0xffff , 0xffff }, // 63
+ { Qt::Key_unknown, 0xffff , 0xffff , 0xffff }, // 64
+ { Qt::Key_unknown, 0xffff , 0xffff , 0xffff }, // 65
+- { Qt::Key_unknown, 0xffff , 0xffff , 0xffff }, // 66
++ { Qt::Key_F14, 0xffff , 0xffff , 0xffff }, // 66
+ { Qt::Key_Meta, 0xffff , 0xffff , 0xffff }, // 67
+ { Qt::Key_unknown, 0xffff , 0xffff , 0xffff }, // 68
+ { Qt::Key_unknown, 0xffff , 0xffff , 0xffff }, // 69
+diff -ur qt-2.3.7_clean/src/kernel/qwindowsystem_qws.cpp qt-2.3.7/src/kernel/qwindowsystem_qws.cpp
+--- qt-2.3.7_clean/src/kernel/qwindowsystem_qws.cpp 2004-06-04 02:17:53.000000000 +0200
++++ qt-2.3.7/src/kernel/qwindowsystem_qws.cpp 2004-06-04 02:22:25.000000000 +0200
+@@ -844,6 +844,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
+@@ -936,6 +948,7 @@
+ }
+
+ signal(SIGPIPE, ignoreSignal); //we get it when we read
++ signal(SIGSEGV, catchSegvSignal); //recover the keyboard on crash
+ #endif
+ focusw = 0;
+ mouseGrabber = 0;
+diff -ur qt-2.3.7_clean/src/widgets/qcommonstyle.cpp qt-2.3.7/src/widgets/qcommonstyle.cpp
+--- qt-2.3.7_clean/src/widgets/qcommonstyle.cpp 2004-06-04 02:17:53.000000000 +0200
++++ qt-2.3.7/src/widgets/qcommonstyle.cpp 2004-06-04 02:22:25.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);
+diff -ur qt-2.3.7_clean/src/widgets/qlistview.cpp qt-2.3.7/src/widgets/qlistview.cpp
+--- qt-2.3.7_clean/src/widgets/qlistview.cpp 2004-06-04 02:17:53.000000000 +0200
++++ qt-2.3.7/src/widgets/qlistview.cpp 2004-06-04 02:22:25.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 -ur qt-2.3.7_clean/src/widgets/qtoolbutton.cpp qt-2.3.7/src/widgets/qtoolbutton.cpp
+--- qt-2.3.7_clean/src/widgets/qtoolbutton.cpp 2004-06-04 02:17:53.000000000 +0200
++++ qt-2.3.7/src/widgets/qtoolbutton.cpp 2004-06-04 02:22:25.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();