summaryrefslogtreecommitdiffstats
path: root/opensuse/core
diff options
context:
space:
mode:
authorRobert Xu <robxu9@gmail.com>2011-11-12 18:13:39 -0500
committerRobert Xu <robxu9@gmail.com>2011-11-12 18:13:39 -0500
commitcd1f97695be1245ab19058d4fbc34e5697cc5383 (patch)
treeb265d96856632dc78e566d337f7eff254b6695f7 /opensuse/core
parent21fcfa3348213aa87f0e3aef62ca4720c6d31cb7 (diff)
downloadtde-packaging-cd1f97695be1245ab19058d4fbc34e5697cc5383.tar.gz
tde-packaging-cd1f97695be1245ab19058d4fbc34e5697cc5383.zip
fix up tdebase and add qt3
Diffstat (limited to 'opensuse/core')
-rw-r--r--opensuse/core/qt3/0001-dnd_optimization.patch180
-rw-r--r--opensuse/core/qt3/0002-dnd_active_window_fix.patch162
-rw-r--r--opensuse/core/qt3/0005-qpixmap_mitshm.patch569
-rw-r--r--opensuse/core/qt3/0007-qpixmap_constants.patch384
-rw-r--r--opensuse/core/qt3/0038-dragobject-dont-prefer-unknown.patch19
-rw-r--r--opensuse/core/qt3/0047-fix-kmenu-width.diff23
-rw-r--r--opensuse/core/qt3/0048-qclipboard_hack_80072.patch51
-rw-r--r--opensuse/core/qt3/0055-qtextedit_zoom.patch39
-rw-r--r--opensuse/core/qt3/0056-khotkeys_input_84434.patch22
-rw-r--r--opensuse/core/qt3/0059-qpopup_has_mouse.patch69
-rw-r--r--opensuse/core/qt3/0060-qpopup_ignore_mousepos.patch60
-rw-r--r--opensuse/core/qt3/0079-compositing-types.patch413
-rw-r--r--opensuse/core/qt3/0080-net-wm-sync-request.patch301
-rw-r--r--opensuse/core/qt3/0085-fix-buildkey.diff22
-rw-r--r--opensuse/core/qt3/add_qexport_visibility.patch63
-rw-r--r--opensuse/core/qt3/aliasing.diff11
-rw-r--r--opensuse/core/qt3/assistant3.desktop10
-rw-r--r--opensuse/core/qt3/assistant3.pngbin0 -> 2353 bytes
-rw-r--r--opensuse/core/qt3/attributes72
-rw-r--r--opensuse/core/qt3/baselibs.conf12
-rw-r--r--opensuse/core/qt3/build_script.sh99
-rw-r--r--opensuse/core/qt3/designer.desktop11
-rw-r--r--opensuse/core/qt3/designer.pngbin0 -> 324 bytes
-rw-r--r--opensuse/core/qt3/enable-designer-plugins.diff11
-rw-r--r--opensuse/core/qt3/external-libs.diff78
-rw-r--r--opensuse/core/qt3/fix-GL-loading.diff44
-rw-r--r--opensuse/core/qt3/fix-accessible.diff10
-rw-r--r--opensuse/core/qt3/fix-assistant-path.patch11
-rw-r--r--opensuse/core/qt3/fix-key-release-event-with-imm.diff55
-rw-r--r--opensuse/core/qt3/fix-qtranslator-crash.diff11
-rw-r--r--opensuse/core/qt3/fix-xinerama-dialog-placement.diff13
-rw-r--r--opensuse/core/qt3/fix-xinput-clash.diff37
-rw-r--r--opensuse/core/qt3/gcc46.diff56
-rw-r--r--opensuse/core/qt3/head.diff60
-rw-r--r--opensuse/core/qt3/kmenu-search-fix.diff10
-rw-r--r--opensuse/core/qt3/lib64-plugin-support.diff12
-rw-r--r--opensuse/core/qt3/limit-image-size.diff103
-rw-r--r--opensuse/core/qt3/linguist.desktop11
-rw-r--r--opensuse/core/qt3/linguist.pngbin0 -> 1936 bytes
-rw-r--r--opensuse/core/qt3/mng-reading-fix.patch30
-rw-r--r--opensuse/core/qt3/no-rpath.dif21
-rw-r--r--opensuse/core/qt3/parseFontName.diff18
-rw-r--r--opensuse/core/qt3/pluginmanager-fix.diff11
-rw-r--r--opensuse/core/qt3/popen-leak-fix.diff10
-rw-r--r--opensuse/core/qt3/pre_checkin.sh14
-rw-r--r--opensuse/core/qt3/qcstring-format-warnings.diff15
-rw-r--r--opensuse/core/qt3/qt-3.3.8c.diff58
-rw-r--r--opensuse/core/qt3/qt-transparency.patch49
-rw-r--r--opensuse/core/qt3/qt-x11-free-3.3.8b.tar.bz2bin0 -> 14344869 bytes
-rw-r--r--opensuse/core/qt3/qt-x11-immodule-unified-qt3.3.8-20060318.diff16169
-rw-r--r--opensuse/core/qt3/qt.patch270
-rw-r--r--opensuse/core/qt3/qt3-3.3.8b-translations.tar.bz2bin0 -> 19248 bytes
-rw-r--r--opensuse/core/qt3/qt3-arm-gcc4.patch22
-rw-r--r--opensuse/core/qt3/qt3-devel-doc.changes2475
-rw-r--r--opensuse/core/qt3/qt3-devel-doc.spec297
-rw-r--r--opensuse/core/qt3/qt3-devel-doc.spec.in93
-rw-r--r--opensuse/core/qt3/qt3-extensions.changes2475
-rw-r--r--opensuse/core/qt3/qt3-extensions.spec477
-rw-r--r--opensuse/core/qt3/qt3-extensions.spec.in358
-rw-r--r--opensuse/core/qt3/qt3-fix-cast.diff13
-rw-r--r--opensuse/core/qt3/qt3-libpng14.diff22
-rw-r--r--opensuse/core/qt3/qt3-never-strip.diff11
-rw-r--r--opensuse/core/qt3/qt3-no-date.diff65
-rw-r--r--opensuse/core/qt3/qt3-warnings.diff13
-rw-r--r--opensuse/core/qt3/qt3.changes2475
-rw-r--r--opensuse/core/qt3/qt3.csh2
-rw-r--r--opensuse/core/qt3/qt3.sh6
-rw-r--r--opensuse/core/qt3/qt3.spec415
-rw-r--r--opensuse/core/qt3/qtconfig3.desktop10
-rw-r--r--opensuse/core/qt3/qtimer-debug.diff48
-rw-r--r--opensuse/core/qt3/qtkdeintegration_x11.cpp242
-rw-r--r--opensuse/core/qt3/qtkdeintegration_x11_p.h59
-rw-r--r--opensuse/core/qt3/qtrc28
-rw-r--r--opensuse/core/qt3/qtrc-path.diff47
-rw-r--r--opensuse/core/qt3/revert-qt-3.3.8-khmer-fix.diff36
-rw-r--r--opensuse/core/qt3/rubberband.diff339
-rw-r--r--opensuse/core/qt3/shut-up.diff45
-rw-r--r--opensuse/core/qt3/update_spec.pl106
-rw-r--r--opensuse/core/qt3/use-xrandr-1.2.diff106
-rw-r--r--opensuse/core/qt3/xinerama-qpopupmenu.diff104
-rw-r--r--opensuse/core/qt3/xinerama.patch49
-rw-r--r--opensuse/core/tde-filesystem/macros.tde4
-rw-r--r--opensuse/core/tdebase/tdebase.spec2060
-rw-r--r--opensuse/core/tdelibs/tdelibs.spec6
84 files changed, 31157 insertions, 1130 deletions
diff --git a/opensuse/core/qt3/0001-dnd_optimization.patch b/opensuse/core/qt3/0001-dnd_optimization.patch
new file mode 100644
index 000000000..a464765cd
--- /dev/null
+++ b/opensuse/core/qt3/0001-dnd_optimization.patch
@@ -0,0 +1,180 @@
+--- src/kernel/qdnd_x11.cpp
++++ src/kernel/qdnd_x11.cpp
+@@ -49,13 +49,15 @@
+ #include "qdragobject.h"
+ #include "qobjectlist.h"
+ #include "qcursor.h"
++#include "qbitmap.h"
++#include "qpainter.h"
+
+ #include "qt_x11_p.h"
+
+ // conflict resolution
+
+-// unused, may be used again later: const int XKeyPress = KeyPress;
+-// unused, may be used again later: const int XKeyRelease = KeyRelease;
++const int XKeyPress = KeyPress;
++const int XKeyRelease = KeyRelease;
+ #undef KeyPress
+ #undef KeyRelease
+
+@@ -252,20 +254,47 @@
+ public:
+ QShapedPixmapWidget(int screen = -1) :
+ QWidget(QApplication::desktop()->screen( screen ),
+- 0, WStyle_Customize | WStyle_Tool | WStyle_NoBorder | WX11BypassWM )
++ 0, WStyle_Customize | WStyle_Tool | WStyle_NoBorder | WX11BypassWM ), oldpmser( 0 ), oldbmser( 0 )
+ {
+ }
+
+- void setPixmap(QPixmap pm)
++ void setPixmap(QPixmap pm, QPoint hot)
+ {
+- if ( pm.mask() ) {
++ int bmser = pm.mask() ? pm.mask()->serialNumber() : 0;
++ if( oldpmser == pm.serialNumber() && oldbmser == bmser
++ && oldhot == hot )
++ return;
++ oldpmser = pm.serialNumber();
++ oldbmser = bmser;
++ oldhot = hot;
++ bool hotspot_in = !(hot.x() < 0 || hot.y() < 0 || hot.x() >= pm.width() || hot.y() >= pm.height());
++// if the pixmap has hotspot in its area, make a "hole" in it at that position
++// this will allow XTranslateCoordinates() to find directly the window below the cursor instead
++// of finding this pixmap, and therefore there won't be needed any (slow) search for the window
++// using findRealWindow()
++ if( hotspot_in ) {
++ QBitmap mask = pm.mask() ? *pm.mask() : QBitmap( pm.width(), pm.height());
++ if( !pm.mask())
++ mask.fill( Qt::color1 );
++ QPainter p( &mask );
++ p.setPen( Qt::color0 );
++ p.drawPoint( hot.x(), hot.y());
++ p.end();
++ pm.setMask( mask );
++ setMask( mask );
++ } else if ( pm.mask() ) {
+ setMask( *pm.mask() );
+ } else {
+ clearMask();
+ }
+ resize(pm.width(),pm.height());
+ setErasePixmap(pm);
++ erase();
+ }
++private:
++ int oldpmser;
++ int oldbmser;
++ QPoint oldhot;
+ };
+
+ static QShapedPixmapWidget * qt_xdnd_deco = 0;
+@@ -862,6 +891,45 @@
+ move( QCursor::pos() );
+ }
+
++static bool qt_xdnd_was_move = false;
++static bool qt_xdnd_found = false;
++// check whole incoming X queue for move events
++// checking whole queue is done by always returning False in the predicate
++// if there's another move event in the queue, and there's not a mouse button
++// or keyboard or ClientMessage event before it, the current move event
++// may be safely discarded
++// this helps avoiding being overloaded by being flooded from many events
++// from the XServer
++static
++Bool qt_xdnd_predicate( Display*, XEvent* ev, XPointer )
++{
++ if( qt_xdnd_found )
++ return False;
++ if( ev->type == MotionNotify )
++ {
++ qt_xdnd_was_move = true;
++ qt_xdnd_found = true;
++ }
++ if( ev->type == ButtonPress || ev->type == ButtonRelease
++ || ev->type == XKeyPress || ev->type == XKeyRelease
++ || ev->type == ClientMessage )
++ {
++ qt_xdnd_was_move = false;
++ qt_xdnd_found = true;
++ }
++ return False;
++}
++
++static
++bool qt_xdnd_another_movement()
++{
++ qt_xdnd_was_move = false;
++ qt_xdnd_found = false;
++ XEvent dummy;
++ XCheckIfEvent( qt_xdisplay(), &dummy, qt_xdnd_predicate, NULL );
++ return qt_xdnd_was_move;
++}
++
+ bool QDragManager::eventFilter( QObject * o, QEvent * e)
+ {
+ if ( beingCancelled ) {
+@@ -884,8 +952,10 @@
+
+ if ( e->type() == QEvent::MouseMove ) {
+ QMouseEvent* me = (QMouseEvent *)e;
+- updateMode(me->stateAfter());
+- move( me->globalPos() );
++ if( !qt_xdnd_another_movement()) {
++ updateMode(me->stateAfter());
++ move( me->globalPos() );
++ }
+ return TRUE;
+ } else if ( e->type() == QEvent::MouseButtonRelease ) {
+ qApp->removeEventFilter( this );
+@@ -1126,7 +1196,7 @@
+ qt_xdnd_deco->grabMouse();
+ }
+ }
+- updatePixmap();
++ updatePixmap( globalPos );
+
+ if ( qt_xdnd_source_sameanswer.contains( globalPos ) &&
+ qt_xdnd_source_sameanswer.isValid() ) {
+@@ -1717,7 +1787,7 @@
+ // qt_xdnd_source_object persists until we get an xdnd_finish message
+ }
+
+-void QDragManager::updatePixmap()
++void QDragManager::updatePixmap( const QPoint& cursorPos )
+ {
+ if ( qt_xdnd_deco ) {
+ QPixmap pm;
+@@ -1732,9 +1802,8 @@
+ defaultPm = new QPixmap(default_pm);
+ pm = *defaultPm;
+ }
+- qt_xdnd_deco->setPixmap(pm);
+- qt_xdnd_deco->move(QCursor::pos()-pm_hot);
+- qt_xdnd_deco->repaint(FALSE);
++ qt_xdnd_deco->setPixmap(pm, pm_hot);
++ qt_xdnd_deco->move(cursorPos-pm_hot);
+ //if ( willDrop ) {
+ qt_xdnd_deco->show();
+ //} else {
+@@ -1743,4 +1812,9 @@
+ }
+ }
+
++void QDragManager::updatePixmap()
++{
++ updatePixmap( QCursor::pos());
++}
++
+ #endif // QT_NO_DRAGANDDROP
+--- src/kernel/qdragobject.h
++++ src/kernel/qdragobject.h
+@@ -245,6 +245,7 @@
+ void move( const QPoint & );
+ void drop();
+ void updatePixmap();
++ void updatePixmap( const QPoint& cursorPos );
+
+ private:
+ QDragObject * object;
diff --git a/opensuse/core/qt3/0002-dnd_active_window_fix.patch b/opensuse/core/qt3/0002-dnd_active_window_fix.patch
new file mode 100644
index 000000000..417c313e1
--- /dev/null
+++ b/opensuse/core/qt3/0002-dnd_active_window_fix.patch
@@ -0,0 +1,162 @@
+--- src/kernel/qapplication_x11.cpp
++++ src/kernel/qapplication_x11.cpp
+@@ -3972,7 +3972,7 @@
+ // Keyboard event translation
+ //
+
+-static int translateButtonState( int s )
++int qt_x11_translateButtonState( int s )
+ {
+ int bst = 0;
+ if ( s & Button1Mask )
+@@ -4038,7 +4038,7 @@
+ pos.ry() = lastMotion.y;
+ globalPos.rx() = lastMotion.x_root;
+ globalPos.ry() = lastMotion.y_root;
+- state = translateButtonState( lastMotion.state );
++ state = qt_x11_translateButtonState( lastMotion.state );
+ if ( qt_button_down && (state & (LeftButton |
+ MidButton |
+ RightButton ) ) == 0 )
+@@ -4062,7 +4062,7 @@
+ pos.ry() = xevent->xcrossing.y;
+ globalPos.rx() = xevent->xcrossing.x_root;
+ globalPos.ry() = xevent->xcrossing.y_root;
+- state = translateButtonState( xevent->xcrossing.state );
++ state = qt_x11_translateButtonState( xevent->xcrossing.state );
+ if ( qt_button_down && (state & (LeftButton |
+ MidButton |
+ RightButton ) ) == 0 )
+@@ -4074,7 +4074,7 @@
+ pos.ry() = event->xbutton.y;
+ globalPos.rx() = event->xbutton.x_root;
+ globalPos.ry() = event->xbutton.y_root;
+- state = translateButtonState( event->xbutton.state );
++ state = qt_x11_translateButtonState( event->xbutton.state );
+ switch ( event->xbutton.button ) {
+ case Button1: button = LeftButton; break;
+ case Button2: button = MidButton; break;
+@@ -5020,7 +5020,7 @@
+ XKeyEvent xkeyevent = event->xkey;
+
+ // save the modifier state, we will use the keystate uint later by passing
+- // it to translateButtonState
++ // it to qt_x11_translateButtonState
+ uint keystate = event->xkey.state;
+ // remove the modifiers where mode_switch exists... HPUX machines seem
+ // to have alt *AND* mode_switch both in Mod1Mask, which causes
+@@ -5134,7 +5134,7 @@
+ }
+ #endif // !QT_NO_XIM
+
+- state = translateButtonState( keystate );
++ state = qt_x11_translateButtonState( keystate );
+
+ static int directionKeyEvent = 0;
+ if ( qt_use_rtl_extensions && type == QEvent::KeyRelease ) {
+--- src/kernel/qdnd_x11.cpp
++++ src/kernel/qdnd_x11.cpp
+@@ -115,6 +115,8 @@
+ Atom qt_xdnd_type_list;
+ const int qt_xdnd_version = 4;
+
++extern int qt_x11_translateButtonState( int s );
++
+ // Actions
+ //
+ // The Xdnd spec allows for user-defined actions. This could be implemented
+@@ -199,6 +201,8 @@
+ static int qt_xdnd_current_screen = -1;
+ // state of dragging... true if dragging, false if not
+ bool qt_xdnd_dragging = FALSE;
++// need to check state of keyboard modifiers
++static bool need_modifiers_check = FALSE;
+
+ // dict of payload data, sorted by type atom
+ static QIntDict<QByteArray> * qt_xdnd_target_data = 0;
+@@ -887,8 +891,20 @@
+
+ void QDragManager::timerEvent( QTimerEvent* e )
+ {
+- if ( e->timerId() == heartbeat && qt_xdnd_source_sameanswer.isNull() )
+- move( QCursor::pos() );
++ if ( e->timerId() == heartbeat ) {
++ if( need_modifiers_check ) {
++ Window root, child;
++ int root_x, root_y, win_x, win_y;
++ unsigned int mask;
++ XQueryPointer( qt_xdisplay(), qt_xrootwin( qt_xdnd_current_screen ),
++ &root, &child, &root_x, &root_y, &win_x, &win_y, &mask );
++ if( updateMode( (ButtonState)qt_x11_translateButtonState( mask )))
++ qt_xdnd_source_sameanswer = QRect(); // force move
++ }
++ need_modifiers_check = TRUE;
++ if( qt_xdnd_source_sameanswer.isNull() )
++ move( QCursor::pos() );
++ }
+ }
+
+ static bool qt_xdnd_was_move = false;
+@@ -956,6 +972,7 @@
+ updateMode(me->stateAfter());
+ move( me->globalPos() );
+ }
++ need_modifiers_check = FALSE;
+ return TRUE;
+ } else if ( e->type() == QEvent::MouseButtonRelease ) {
+ qApp->removeEventFilter( this );
+@@ -994,9 +1011,11 @@
+ beingCancelled = FALSE;
+ qApp->exit_loop();
+ } else {
+- updateMode(ke->stateAfter());
+- qt_xdnd_source_sameanswer = QRect(); // force move
+- move( QCursor::pos() );
++ if( updateMode(ke->stateAfter())) {
++ qt_xdnd_source_sameanswer = QRect(); // force move
++ move( QCursor::pos() );
++ }
++ need_modifiers_check = FALSE;
+ }
+ return TRUE; // Eat all key events
+ }
+@@ -1023,10 +1042,10 @@
+
+
+ static Qt::ButtonState oldstate;
+-void QDragManager::updateMode( ButtonState newstate )
++bool QDragManager::updateMode( ButtonState newstate )
+ {
+ if ( newstate == oldstate )
+- return;
++ return false;
+ const int both = ShiftButton|ControlButton;
+ if ( (newstate & both) == both ) {
+ global_requested_action = QDropEvent::Link;
+@@ -1050,6 +1069,7 @@
+ }
+ }
+ oldstate = newstate;
++ return true;
+ }
+
+
+@@ -1754,6 +1774,7 @@
+ qt_xdnd_source_sameanswer = QRect();
+ move(QCursor::pos());
+ heartbeat = startTimer(200);
++ need_modifiers_check = FALSE;
+
+ #ifndef QT_NO_CURSOR
+ qApp->setOverrideCursor( arrowCursor );
+--- src/kernel/qdragobject.h
++++ src/kernel/qdragobject.h
+@@ -249,7 +249,7 @@
+
+ private:
+ QDragObject * object;
+- void updateMode( ButtonState newstate );
++ bool updateMode( ButtonState newstate );
+ void updateCursor();
+ #if defined(Q_WS_X11)
+ void createCursors();
diff --git a/opensuse/core/qt3/0005-qpixmap_mitshm.patch b/opensuse/core/qt3/0005-qpixmap_mitshm.patch
new file mode 100644
index 000000000..e6683f726
--- /dev/null
+++ b/opensuse/core/qt3/0005-qpixmap_mitshm.patch
@@ -0,0 +1,569 @@
+qt-bugs@ issue : 11790 (part of)
+applied: no
+author: Lubos Lunak <l.lunak@kde.org>
+
+NOTE: Needs #define QT_MITSHM in the matching qplatformdefs.h file. This
+ patch does so only for linux-g++ and linux-g++-distcc platforms.
+
+MITSHM extension support for QPixmap<->QImage conversions.
+
+Hello,
+
+ the review and apply the attached patches that improve performance of
+QImage->QPixmap conversions. They should be applied in order
+'mitshm','more_local' and 'fast', but they're independent from each other
+(well, besides merging problems).
+
+ Mitshm patch adds MITSHM extension support for both
+QPixmap::convertFromImage() and QPixmap::convertToImage(). I've noticed there
+was some MITSHM support already, turned off by default, but it was used only
+for QPixmap::xForm() , and it used shared pixmaps (and I'd bet nobody uses
+it). My patch adds shared ximages support for faster pixmap<->image
+conversions. Since I don't understand the xForm() code much, and I didn't
+want to do anything with it, I added three #define's:
+ - QT_MITSHM generally enabling MITSHM support, which should be set in
+qplatformsdefs.h (or wherever you setup platform specific stuff), it can be
+enabled at least on Linux
+ - QT_MITSHM_CONVERSIONS - this is for my new code
+ - QT_MITSHM_XFORM - this is for the xForm() code
+ There's one more #define, QT_MITSHM_RMID_IGNORES_REFCOUNT. Glibc
+documentation of shmctl( ... IPC_RMID ) quite clearly says that the memory
+segment is freed only after the refcount increased by shmat() and decreased
+by shmdt() is 0. However, at least according to
+http://bugs.kde.org/show_bug.cgi?id=27517 , this doesn't happen on other
+platforms for some strange reason. Such platforms should have this #define if
+you ever consider supporting MITSHM on them.
+
+ The lower limit for using MITSHM for the image is about 8KiB
+(width*height*depth > 100*100*32 ). Also, BestOptim in such case doesn't keep
+the ximage, as the shared ximage is always freed before the function returns
+(I don't know if it's worth copying it).
+
+ The second patch ('more_local'), in short, does nothing. Besides improving
+performance by about 10% by making variables more "local", making few of them
+const, and also making some of them unsigned (this help gcc for some reason).
+
+ The last one, 'fast', moves some if's out of the loops, and handles some most
+common case specially (15bpp, 16bpp and 32bpp ximage depths). 32bpp case, if
+the endianess matches, is simply uses memcpy(), for the 15/16bpp depth,
+variables are replaced directly by matching values, statements are a bit
+reordered and merged when suitable, and again, in case endianess matches,
+pixels are written simply as Q_INT16. Most probably it would also help to
+process two pixels at once and write them as Q_INT32, but I didn't want to
+complicate the code too much (later >;) ).
+
+ The last snippet of 'fast' handles case when xi->bytes_per_line is not equal
+to width for 8bpp ximage. I'm not actually sure if that can ever happen, but
+since I've already written it *shrug*.
+
+ The 'more_local' and 'fast' patches change only convertFromImage(), as I
+don't think convertToImage() is that performance critical (but it's as
+unoptimized as convertFromImage() was).
+
+ Maybe some numbers. The difference is of course mainly visible with larger
+pixmaps. The two optimizations alone reduce the time to 50% for 32bpp, to 70%
+for 16bpp. The MITSHM support, when other patches are already applied too,
+for 32bpp images saves about 33%. Together, the total time is reduced to
+about 40% for 32bpp. Imlib probably still beats that, but at least this
+obsoletes KPixmapIO.
+
+
+--- src/kernel/qpixmap_x11.cpp
++++ src/kernel/qpixmap_x11.cpp
+@@ -37,7 +37,19 @@
+
+ // NOT REVISED
+
++#include "qplatformdefs.h"
++
++#if defined(Q_OS_WIN32) && defined(QT_MITSHM)
++#undef QT_MITSHM
++#endif
++
++#ifdef QT_MITSHM
++
++// Use the MIT Shared Memory extension for pixmap<->image conversions
++#define QT_MITSHM_CONVERSIONS
++
+ // Uncomment the next line to enable the MIT Shared Memory extension
++// for QPixmap::xForm()
+ //
+ // WARNING: This has some problems:
+ //
+@@ -45,14 +57,13 @@
+ // 2. Qt does not handle the ShmCompletion message, so you will
+ // get strange effects if you xForm() repeatedly.
+ //
+-// #define QT_MITSHM
++// #define QT_MITSHM_XFORM
+
+-#if defined(Q_OS_WIN32) && defined(QT_MITSHM)
+-#undef QT_MITSHM
++#else
++#undef QT_MITSHM_CONVERSIONS
++#undef QT_MITSHM_XFORM
+ #endif
+
+-#include "qplatformdefs.h"
+-
+ #include "qbitmap.h"
+ #include "qpaintdevicemetrics.h"
+ #include "qimage.h"
+@@ -91,7 +102,7 @@ inline static void qSafeXDestroyImage( X
+ MIT Shared Memory Extension support: makes xForm noticeably (~20%) faster.
+ *****************************************************************************/
+
+-#if defined(QT_MITSHM)
++#if defined(QT_MITSHM_XFORM)
+
+ static bool xshminit = FALSE;
+ static XShmSegmentInfo xshminfo;
+@@ -173,8 +184,100 @@ static bool qt_create_mitshm_buffer( con
+ // return FALSE;
+ // }
+
+-#endif // QT_MITSHM
++#endif // QT_MITSHM_XFORM
++
++#ifdef QT_MITSHM_CONVERSIONS
++
++static bool qt_mitshm_error = false;
++static int qt_mitshm_errorhandler( Display*, XErrorEvent* )
++{
++ qt_mitshm_error = true;
++ return 0;
++}
++
++static XImage* qt_XShmCreateImage( Display* dpy, Visual* visual, unsigned int depth,
++ int format, int /*offset*/, char* /*data*/, unsigned int width, unsigned int height,
++ int /*bitmap_pad*/, int /*bytes_per_line*/, XShmSegmentInfo* shminfo )
++{
++ if( width * height * depth < 100*100*32 )
++ return NULL;
++ static int shm_inited = -1;
++ if( shm_inited == -1 ) {
++ if( XShmQueryExtension( dpy ))
++ shm_inited = 1;
++ else
++ shm_inited = 0;
++ }
++ if( shm_inited == 0 )
++ return NULL;
++ XImage* xi = XShmCreateImage( dpy, visual, depth, format, NULL, shminfo, width,
++ height );
++ if( xi == NULL )
++ return NULL;
++ shminfo->shmid = shmget( IPC_PRIVATE, xi->bytes_per_line * xi->height,
++ IPC_CREAT|0600);
++ if( shminfo->shmid < 0 ) {
++ XDestroyImage( xi );
++ return NULL;
++ }
++ shminfo->readOnly = False;
++ shminfo->shmaddr = (char*)shmat( shminfo->shmid, 0, 0 );
++ if( shminfo->shmaddr == (char*)-1 ) {
++ XDestroyImage( xi );
++ shmctl( shminfo->shmid, IPC_RMID, 0 );
++ return NULL;
++ }
++ xi->data = shminfo->shmaddr;
++#ifndef QT_MITSHM_RMID_IGNORES_REFCOUNT
++ // mark as deleted to automatically free the memory in case
++ // of a crash (but this doesn't work e.g. on Solaris)
++ shmctl( shminfo->shmid, IPC_RMID, 0 );
++#endif
++ if( shm_inited == 1 ) { // first time
++ XErrorHandler old_h = XSetErrorHandler( qt_mitshm_errorhandler );
++ XShmAttach( dpy, shminfo );
++ shm_inited = 2;
++ XSync( dpy, False );
++ XSetErrorHandler( old_h );
++ if( qt_mitshm_error ) { // oops ... perhaps we are remote?
++ shm_inited = 0;
++ XDestroyImage( xi );
++ shmdt( shminfo->shmaddr );
++#ifdef QT_MITSHM_RMID_IGNORES_REFCOUNT
++ shmctl( shminfo->shmid, IPC_RMID, 0 );
++#endif
++ return NULL;
++ }
++ } else
++ XShmAttach( dpy, shminfo );
++ return xi;
++}
++
++static void qt_XShmDestroyImage( XImage* xi, XShmSegmentInfo* shminfo )
++{
++ XShmDetach( QPaintDevice::x11AppDisplay(), shminfo );
++ XDestroyImage( xi );
++ shmdt( shminfo->shmaddr );
++#ifdef QT_MITSHM_RMID_IGNORES_REFCOUNT
++ shmctl( shminfo->shmid, IPC_RMID, 0 );
++#endif
++}
++
++static XImage* qt_XShmGetImage( const QPixmap* pix, int format,
++ XShmSegmentInfo* shminfo )
++{
++ XImage* xi = qt_XShmCreateImage( pix->x11Display(), (Visual*)pix->x11Visual(),
++ pix->depth(), format, 0, 0, pix->width(), pix->height(), 32, 0, shminfo );
++ if( xi == NULL )
++ return NULL;
++ if( XShmGetImage( pix->x11Display(), pix->handle(), xi, 0, 0, AllPlanes ) == False ) {
++ qt_XShmDestroyImage( xi, shminfo );
++ return NULL;
++ }
++ return xi;
++}
+
++#endif // QT_MITSHM_CONVERSIONS
+
+ /*****************************************************************************
+ Internal functions
+@@ -627,9 +730,20 @@ QImage QPixmap::convertToImage() const
+ d = 32; // > 8 ==> 32
+
+ XImage *xi = (XImage *)data->ximage; // any cached ximage?
+- if ( !xi ) // fetch data from X server
++#ifdef QT_MITSHM_CONVERSIONS
++ bool mitshm_ximage = false;
++ XShmSegmentInfo shminfo;
++#endif
++ if ( !xi ) { // fetch data from X server
++#ifdef QT_MITSHM_CONVERSIONS
++ xi = qt_XShmGetImage( this, mono ? XYPixmap : ZPixmap, &shminfo );
++ if( xi ) {
++ mitshm_ximage = true;
++ } else
++#endif
+ xi = XGetImage( x11Display(), hd, 0, 0, w, h, AllPlanes,
+ mono ? XYPixmap : ZPixmap );
++ }
+ Q_CHECK_PTR( xi );
+ if (!xi)
+ return image; // null image
+@@ -640,15 +754,31 @@ QImage QPixmap::convertToImage() const
+ QImage::LittleEndian : QImage::BigEndian;
+ }
+ image.create( w, h, d, 0, bitOrder );
+- if ( image.isNull() ) // could not create image
++ if ( image.isNull() ) { // could not create image
++#ifdef QT_MITSHM_CONVERSIONS
++ if( mitshm_ximage )
++ qt_XShmDestroyImage( xi, &shminfo );
++ else
++#endif
++ qSafeXDestroyImage( xi );
+ return image;
++ }
+
+ const QPixmap* msk = mask();
+ const QPixmap *alf = data->alphapm;
+
+ QImage alpha;
+ if (alf) {
+- XImage *axi = XGetImage(x11Display(), alf->hd, 0, 0, w, h, AllPlanes, ZPixmap);
++ XImage* axi;
++#ifdef QT_MITSHM_CONVERSIONS
++ bool mitshm_aximage = false;
++ XShmSegmentInfo ashminfo;
++ axi = qt_XShmGetImage( alf, ZPixmap, &ashminfo );
++ if( axi ) {
++ mitshm_aximage = true;
++ } else
++#endif
++ axi = XGetImage(x11Display(), alf->hd, 0, 0, w, h, AllPlanes, ZPixmap);
+
+ if (axi) {
+ image.setAlphaBuffer( TRUE );
+@@ -662,6 +792,11 @@ QImage QPixmap::convertToImage() const
+ src += axi->bytes_per_line;
+ }
+
++#ifdef QT_MITSHM_CONVERSIONS
++ if( mitshm_aximage )
++ qt_XShmDestroyImage( axi, &ashminfo );
++ else
++#endif
+ qSafeXDestroyImage( axi );
+ }
+ } else if (msk) {
+@@ -804,6 +939,12 @@ QImage QPixmap::convertToImage() const
+ xi->bits_per_pixel );
+ #endif
+ image.reset();
++#ifdef QT_MITSHM_CONVERSIONS
++ if( mitshm_ximage )
++ qt_XShmDestroyImage( xi, &shminfo );
++ else
++#endif
++ qSafeXDestroyImage( xi );
+ return image;
+ }
+
+@@ -909,10 +1050,22 @@ QImage QPixmap::convertToImage() const
+ delete [] carr;
+ }
+ if ( data->optim != BestOptim ) { // throw away image data
++#ifdef QT_MITSHM_CONVERSIONS
++ if( mitshm_ximage )
++ qt_XShmDestroyImage( xi, &shminfo );
++ else
++#endif
+ qSafeXDestroyImage( xi );
+ ((QPixmap*)this)->data->ximage = 0;
+- } else // keep ximage data
++ } else { // keep ximage data
++#ifdef QT_MITSHM_CONVERSIONS
++ if( mitshm_ximage ) { // copy the XImage?
++ qt_XShmDestroyImage( xi, &shminfo );
++ xi = 0;
++ }
++#endif
+ ((QPixmap*)this)->data->ximage = xi;
++ }
+
+ return image;
+ }
+@@ -1085,6 +1238,11 @@ bool QPixmap::convertFromImage( const QI
+ bool trucol = (visual->c_class == TrueColor || visual->c_class == DirectColor);
+ int nbytes = image.numBytes();
+ uchar *newbits= 0;
++ int newbits_size = 0;
++#ifdef QT_MITSHM_CONVERSIONS
++ bool mitshm_ximage = false;
++ XShmSegmentInfo shminfo;
++#endif
+
+ if ( trucol ) { // truecolor display
+ QRgb pix[256]; // pixel translation table
+@@ -1113,10 +1271,18 @@ bool QPixmap::convertFromImage( const QI
+ }
+ }
+
++#ifdef QT_MITSHM_CONVERSIONS
++ xi = qt_XShmCreateImage( dpy, visual, dd, ZPixmap, 0, 0, w, h, 32, 0, &shminfo );
++ if( xi != NULL ) {
++ mitshm_ximage = true;
++ newbits = (uchar*)xi->data;
++ }
++ else
++#endif
+ xi = XCreateImage( dpy, visual, dd, ZPixmap, 0, 0, w, h, 32, 0 );
+- Q_CHECK_PTR( xi );
+ if (!xi)
+ return false;
++ if( newbits == NULL )
+ newbits = (uchar *)malloc( xi->bytes_per_line*h );
+ Q_CHECK_PTR( newbits );
+ if ( !newbits ) // no memory
+@@ -1323,6 +1489,7 @@ bool QPixmap::convertFromImage( const QI
+ }
+
+ newbits = (uchar *)malloc( nbytes ); // copy image into newbits
++ newbits_size = nbytes;
+ Q_CHECK_PTR( newbits );
+ if ( !newbits ) // no memory
+ return FALSE;
+@@ -1440,11 +1607,18 @@ bool QPixmap::convertFromImage( const QI
+ }
+
+ if ( !xi ) { // X image not created
++#ifdef QT_MITSHM_CONVERSIONS
++ xi = qt_XShmCreateImage( dpy, visual, dd, ZPixmap, 0, 0, w, h, 32, 0, &shminfo );
++ if( xi != NULL )
++ mitshm_ximage = true;
++ else
++#endif
+ xi = XCreateImage( dpy, visual, dd, ZPixmap, 0, 0, w, h, 32, 0 );
+ if ( xi->bits_per_pixel == 16 ) { // convert 8 bpp ==> 16 bpp
+ ushort *p2;
+ int p2inc = xi->bytes_per_line/sizeof(ushort);
+ ushort *newerbits = (ushort *)malloc( xi->bytes_per_line * h );
++ newbits_size = xi->bytes_per_line * h;
+ Q_CHECK_PTR( newerbits );
+ if ( !newerbits ) // no memory
+ return FALSE;
+@@ -1462,6 +1636,14 @@ bool QPixmap::convertFromImage( const QI
+ "(bpp=%d)", xi->bits_per_pixel );
+ #endif
+ }
++#ifdef QT_MITSHM_CONVERSIONS
++ if( newbits_size > 0 && mitshm_ximage ) { // need to copy to shared memory
++ memcpy( xi->data, newbits, newbits_size );
++ free( newbits );
++ newbits = (uchar*)xi->data;
++ }
++ else
++#endif
+ xi->data = (char *)newbits;
+ }
+
+@@ -1495,19 +1677,24 @@ bool QPixmap::convertFromImage( const QI
+
+ }
+
++#ifdef QT_MITSHM_CONVERSIONS
++ if( mitshm_ximage )
++ XShmPutImage( dpy, hd, qt_xget_readonly_gc( x11Screen(), FALSE ),
++ xi, 0, 0, 0, 0, w, h, False );
++ else
++#endif
+ XPutImage( dpy, hd, qt_xget_readonly_gc( x11Screen(), FALSE ),
+ xi, 0, 0, 0, 0, w, h );
+
+- if ( data->optim != BestOptim ) { // throw away image
+- qSafeXDestroyImage( xi );
+- data->ximage = 0;
+- } else { // keep ximage that we created
+- data->ximage = xi;
+- }
+ data->w = w;
+ data->h = h;
+ data->d = dd;
+
++ XImage* axi = NULL;
++#ifdef QT_MITSHM_CONVERSIONS
++ bool mitshm_aximage = false;
++ XShmSegmentInfo ashminfo;
++#endif
+ if ( image.hasAlphaBuffer() ) {
+ QBitmap m;
+ m = image.createAlphaMask( conversion_flags );
+@@ -1543,13 +1730,22 @@ bool QPixmap::convertFromImage( const QI
+ data->alphapm->rendhd =
+ (HANDLE) XftDrawCreateAlpha( x11Display(), data->alphapm->hd, 8 );
+
+- XImage *axi = XCreateImage(x11Display(), (Visual *) x11Visual(),
++#ifdef QT_MITSHM_CONVERSIONS
++ axi = qt_XShmCreateImage( x11Display(), (Visual*)x11Visual(),
++ 8, ZPixmap, 0, 0, w, h, 8, 0, &ashminfo );
++ if( axi != NULL )
++ mitshm_aximage = true;
++ else
++#endif
++ axi = XCreateImage(x11Display(), (Visual *) x11Visual(),
+ 8, ZPixmap, 0, 0, w, h, 8, 0);
+
+ if (axi) {
++ if( axi->data==NULL ) {
+ // the data is deleted by qSafeXDestroyImage
+ axi->data = (char *) malloc(h * axi->bytes_per_line);
+ Q_CHECK_PTR( axi->data );
++ }
+ char *aptr = axi->data;
+
+ if (image.depth() == 32) {
+@@ -1567,14 +1763,48 @@ bool QPixmap::convertFromImage( const QI
+ }
+
+ GC gc = XCreateGC(x11Display(), data->alphapm->hd, 0, 0);
++ #ifdef QT_MITSHM_CONVERSIONS
++ if( mitshm_aximage )
++ XShmPutImage( dpy, data->alphapm->hd, gc, axi, 0, 0, 0, 0, w, h, False );
++ else
++#endif
+ XPutImage(dpy, data->alphapm->hd, gc, axi, 0, 0, 0, 0, w, h);
+ XFreeGC(x11Display(), gc);
+- qSafeXDestroyImage(axi);
+ }
+ }
+ #endif // QT_NO_XFTFREETYPE
+ }
+
++#ifdef QT_MITSHM_CONVERSIONS
++ if( mitshm_ximage || mitshm_aximage )
++ XSync( x11Display(), False ); // wait until processed
++#endif
++
++ if ( data->optim != BestOptim ) { // throw away image
++#ifdef QT_MITSHM_CONVERSIONS
++ if( mitshm_ximage )
++ qt_XShmDestroyImage( xi, &shminfo );
++ else
++#endif
++ qSafeXDestroyImage( xi );
++ data->ximage = 0;
++ } else { // keep ximage that we created
++#ifdef QT_MITSHM_CONVERSIONS
++ if( mitshm_ximage ) { // copy the XImage?
++ qt_XShmDestroyImage( xi, &shminfo );
++ xi = 0;
++ }
++#endif
++ data->ximage = xi;
++ }
++ if( axi ) {
++#ifdef QT_MITSHM_CONVERSIONS
++ if( mitshm_aximage )
++ qt_XShmDestroyImage( axi, &ashminfo );
++ else
++#endif
++ qSafeXDestroyImage(axi);
++ }
+ return TRUE;
+ }
+
+@@ -1737,7 +1967,7 @@ QPixmap QPixmap::xForm( const QWMatrix &
+ return pm;
+ }
+
+-#if defined(QT_MITSHM)
++#if defined(QT_MITSHM_XFORM)
+ static bool try_once = TRUE;
+ if (try_once) {
+ try_once = FALSE;
+@@ -1770,7 +2000,7 @@ QPixmap QPixmap::xForm( const QWMatrix &
+ dbpl = ((w*bpp+31)/32)*4;
+ dbytes = dbpl*h;
+
+-#if defined(QT_MITSHM)
++#if defined(QT_MITSHM_XFORM)
+ if ( use_mitshm ) {
+ dptr = (uchar *)xshmimg->data;
+ uchar fillbyte = bpp == 8 ? white.pixel() : 0xff;
+@@ -1786,7 +2016,7 @@ QPixmap QPixmap::xForm( const QWMatrix &
+ memset( dptr, Qt::white.pixel( x11Screen() ), dbytes );
+ else
+ memset( dptr, 0xff, dbytes );
+-#if defined(QT_MITSHM)
++#if defined(QT_MITSHM_XFORM)
+ }
+ #endif
+
+@@ -1817,7 +2047,7 @@ QPixmap QPixmap::xForm( const QWMatrix &
+ } else {
+ xbpl = (w*bpp)/8;
+ p_inc = dbpl - xbpl;
+-#if defined(QT_MITSHM)
++#if defined(QT_MITSHM_XFORM)
+ if ( use_mitshm )
+ p_inc = xshmimg->bytes_per_line - xbpl;
+ #endif
+@@ -1854,7 +2084,7 @@ QPixmap QPixmap::xForm( const QWMatrix &
+ QPixmap pm( w, h );
+ pm.data->uninit = FALSE;
+ pm.x11SetScreen( x11Screen() );
+-#if defined(QT_MITSHM)
++#if defined(QT_MITSHM_XFORM)
+ if ( use_mitshm ) {
+ XCopyArea( dpy, xshmpm, pm.handle(), gc, 0, 0, w, h, 0, 0 );
+ } else {
+@@ -1863,7 +2093,7 @@ QPixmap QPixmap::xForm( const QWMatrix &
+ ZPixmap, 0, (char *)dptr, w, h, 32, 0 );
+ XPutImage( dpy, pm.handle(), gc, xi, 0, 0, 0, 0, w, h);
+ qSafeXDestroyImage( xi );
+-#if defined(QT_MITSHM)
++#if defined(QT_MITSHM_XFORM)
+ }
+ #endif
+
+--- mkspecs/linux-g++/qplatformdefs.h
++++ mkspecs/linux-g++/qplatformdefs.h
+@@ -102,5 +102,6 @@
+ #define QT_VSNPRINTF ::vsnprintf
+ #endif
+
++#define QT_MITSHM
+
+ #endif // QPLATFORMDEFS_H
diff --git a/opensuse/core/qt3/0007-qpixmap_constants.patch b/opensuse/core/qt3/0007-qpixmap_constants.patch
new file mode 100644
index 000000000..65f9cd64b
--- /dev/null
+++ b/opensuse/core/qt3/0007-qpixmap_constants.patch
@@ -0,0 +1,384 @@
+qt-bugs@ issue : 11790 (part of)
+applied: no
+author: Lubos Lunak <l.lunak@kde.org>
+
+See 0005-qpixmap_mitshm.patch for details.
+
+
+--- src/kernel/qpixmap_x11.cpp
++++ src/kernel/qpixmap_x11.cpp
+@@ -1123,9 +1123,6 @@ bool QPixmap::convertFromImage( const QI
+ return FALSE;
+ int bppc = xi->bits_per_pixel;
+
+- if ( bppc > 8 && xi->byte_order == LSBFirst )
+- bppc++;
+-
+ bool contig_bits = n_bits(red_mask) == rbits &&
+ n_bits(green_mask) == gbits &&
+ n_bits(blue_mask) == bbits;
+@@ -1174,32 +1171,70 @@ bool QPixmap::convertFromImage( const QI
+ }
+ init=TRUE;
+ }
++
++ enum { BPP8,
++ BPP16_8_3_M3, BPP16_7_2_M3, BPP16_MSB, BPP16_LSB,
++ BPP24_MSB, BPP24_LSB,
++ BPP32_16_8_0, BPP32_MSB, BPP32_LSB
++ } mode = BPP8;
+
+- for ( uint y=0; y<h; y++ ) {
+- uchar* src = image.scanLine( y );
+- uchar* dst = newbits + xi->bytes_per_line*y;
+- QRgb* p = (QRgb *)src;
++ if ( bppc > 8 && xi->byte_order == LSBFirst )
++ bppc++;
+
+-#define GET_RGB \
+- int r = qRed ( *p ); \
+- int g = qGreen( *p ); \
+- int b = qBlue ( *p++ ); \
+- r = red_shift > 0 \
+- ? r << red_shift : r >> -red_shift; \
+- g = green_shift > 0 \
+- ? g << green_shift : g >> -green_shift; \
+- b = blue_shift > 0 \
+- ? b << blue_shift : b >> -blue_shift;
++ int wordsize;
++ bool bigendian;
++ qSysInfo( &wordsize, &bigendian );
++ bool same_msb_lsb = ( xi->byte_order == MSBFirst ) == ( bigendian );
++
++ if( bppc == 8 ) // 8 bit
++ mode = BPP8;
++ else if( bppc == 16 || bppc == 17 ) { // 16 bit MSB/LSB
++ if( red_shift == 8 && green_shift == 3 && blue_shift == -3
++ && !d8 && same_msb_lsb )
++ mode = BPP16_8_3_M3;
++ else if( red_shift == 7 && green_shift == 2 && blue_shift == -3
++ && !d8 && same_msb_lsb )
++ mode = BPP16_7_2_M3;
++ else
++ mode = bppc == 17 ? BPP16_LSB : BPP16_MSB;
++ } else if( bppc == 24 || bppc == 25 ) { // 24 bit MSB/LSB
++ mode = bppc == 25 ? BPP24_LSB : BPP24_MSB;
++ } else if( bppc == 32 || bppc == 33 ) { // 32 bit MSB/LSB
++ if( red_shift == 16 && green_shift == 8 && blue_shift == 0
++ && !d8 && same_msb_lsb )
++ mode = BPP32_16_8_0;
++ else
++ mode = bppc == 33 ? BPP32_LSB : BPP32_MSB;
++ } else
++ qFatal("Logic error 3");
+
+ #define GET_PIXEL \
+ int pixel; \
+ if ( d8 ) pixel = pix[*src++]; \
+ else { \
+- GET_RGB \
+- pixel = (b & blue_mask)|(g & green_mask) | (r & red_mask) \
++ int r = qRed ( *p ); \
++ int g = qGreen( *p ); \
++ int b = qBlue ( *p++ ); \
++ r = red_shift > 0 \
++ ? r << red_shift : r >> -red_shift; \
++ g = green_shift > 0 \
++ ? g << green_shift : g >> -green_shift; \
++ b = blue_shift > 0 \
++ ? b << blue_shift : b >> -blue_shift; \
++ pixel = (r & red_mask)|(g & green_mask) | (b & blue_mask) \
+ | ~(blue_mask | green_mask | red_mask); \
+ }
+
++// optimized case - no d8 case, shift only once instead of twice, mask only once instead of twice,
++// use direct values instead of variables, and use only one statement
++// (*p >> 16), (*p >> 8 ) and (*p) are qRed(),qGreen() and qBlue() without masking
++// shifts have to be passed including the shift operator (e.g. '>>3'), because of the direction
++#define GET_PIXEL_OPT(red_shift,green_shift,blue_shift,red_mask,green_mask,blue_mask) \
++ int pixel = ((( *p >> 16 ) red_shift ) & red_mask ) \
++ | ((( *p >> 8 ) green_shift ) & green_mask ) \
++ | ((( *p ) blue_shift ) & blue_mask ); \
++ ++p;
++
+ #define GET_PIXEL_DITHER_TC \
+ int r = qRed ( *p ); \
+ int g = qGreen( *p ); \
+@@ -1220,91 +1255,177 @@ bool QPixmap::convertFromImage( const QI
+ ? g << green_shift : g >> -green_shift; \
+ b = blue_shift > 0 \
+ ? b << blue_shift : b >> -blue_shift; \
+- int pixel = (b & blue_mask)|(g & green_mask) | (r & red_mask);
++ int pixel = (r & red_mask)|(g & green_mask) | (b & blue_mask);
+
+- if ( dither_tc ) {
+- uint x;
+- switch ( bppc ) {
+- case 16: // 16 bit MSB
+- for ( x=0; x<w; x++ ) {
+- GET_PIXEL_DITHER_TC
+- *dst++ = (pixel >> 8);
+- *dst++ = pixel;
+- }
++// again, optimized case
++// can't be optimized that much :(
++#define GET_PIXEL_DITHER_TC_OPT(red_shift,green_shift,blue_shift,red_mask,green_mask,blue_mask, \
++ rbits,gbits,bbits) \
++ const int thres = D[x%16][y%16]; \
++ int r = qRed ( *p ); \
++ if ( r <= (255-(1<<(8-rbits))) && ((r<<rbits) & 255) \
++ > thres) \
++ r += (1<<(8-rbits)); \
++ int g = qGreen( *p ); \
++ if ( g <= (255-(1<<(8-gbits))) && ((g<<gbits) & 255) \
++ > thres) \
++ g += (1<<(8-gbits)); \
++ int b = qBlue ( *p++ ); \
++ if ( b <= (255-(1<<(8-bbits))) && ((b<<bbits) & 255) \
++ > thres) \
++ b += (1<<(8-bbits)); \
++ int pixel = (( r red_shift ) & red_mask ) \
++ | (( g green_shift ) & green_mask ) \
++ | (( b blue_shift ) & blue_mask );
++
++#define CYCLE(body) \
++ for ( uint y=0; y<h; y++ ) { \
++ uchar* src = image.scanLine( y ); \
++ uchar* dst = newbits + xi->bytes_per_line*y; \
++ QRgb* p = (QRgb *)src; \
++ body \
++ }
++
++ if ( dither_tc ) {
++ switch ( mode ) {
++ case BPP16_8_3_M3:
++ CYCLE(
++ Q_INT16* dst16 = (Q_INT16*)dst;
++ for ( uint x=0; x<w; x++ ) {
++ GET_PIXEL_DITHER_TC_OPT(<<8,<<3,>>3,0xf800,0x7e0,0x1f,5,6,5)
++ *dst16++ = pixel;
++ }
++ )
+ break;
+- case 17: // 16 bit LSB
+- for ( x=0; x<w; x++ ) {
+- GET_PIXEL_DITHER_TC
+- *dst++ = pixel;
+- *dst++ = pixel >> 8;
+- }
++ case BPP16_7_2_M3:
++ CYCLE(
++ Q_INT16* dst16 = (Q_INT16*)dst;
++ for ( uint x=0; x<w; x++ ) {
++ GET_PIXEL_DITHER_TC_OPT(<<7,<<2,>>3,0x7c00,0x3e0,0x1f,5,5,5)
++ *dst16++ = pixel;
++ }
++ )
++ break;
++ case BPP16_MSB: // 16 bit MSB
++ CYCLE(
++ for ( uint x=0; x<w; x++ ) {
++ GET_PIXEL_DITHER_TC
++ *dst++ = (pixel >> 8);
++ *dst++ = pixel;
++ }
++ )
++ break;
++ case BPP16_LSB: // 16 bit LSB
++ CYCLE(
++ for ( uint x=0; x<w; x++ ) {
++ GET_PIXEL_DITHER_TC
++ *dst++ = pixel;
++ *dst++ = pixel >> 8;
++ }
++ )
+ break;
+ default:
+ qFatal("Logic error");
+ }
+- } else {
+- uint x;
+- switch ( bppc ) {
+- case 8: // 8 bit
+- for ( x=0; x<w; x++ ) {
+- int pixel = pix[*src++];
+- *dst++ = pixel;
+- }
++ } else {
++ switch ( mode ) {
++ case BPP8: // 8 bit
++ CYCLE(
++ Q_UNUSED(p);
++ for ( uint x=0; x<w; x++ ) {
++ int pixel = pix[*src++];
++ *dst++ = pixel;
++ }
++ )
+ break;
+- case 16: // 16 bit MSB
+- for ( x=0; x<w; x++ ) {
+- GET_PIXEL
+- *dst++ = (pixel >> 8);
+- *dst++ = pixel;
+- }
++ case BPP16_8_3_M3:
++ CYCLE(
++ Q_INT16* dst16 = (Q_INT16*)dst;
++ for ( uint x=0; x<w; x++ ) {
++ GET_PIXEL_OPT(<<8,<<3,>>3,0xf800,0x7e0,0x1f)
++ *dst16++ = pixel;
++ }
++ )
+ break;
+- case 17: // 16 bit LSB
+- for ( x=0; x<w; x++ ) {
+- GET_PIXEL
+- *dst++ = pixel;
+- *dst++ = pixel >> 8;
+- }
++ case BPP16_7_2_M3:
++ CYCLE(
++ Q_INT16* dst16 = (Q_INT16*)dst;
++ for ( uint x=0; x<w; x++ ) {
++ GET_PIXEL_OPT(<<7,<<2,>>3,0x7c00,0x3e0,0x1f)
++ *dst16++ = pixel;
++ }
++ )
+ break;
+- case 24: // 24 bit MSB
+- for ( x=0; x<w; x++ ) {
+- GET_PIXEL
+- *dst++ = pixel >> 16;
+- *dst++ = pixel >> 8;
+- *dst++ = pixel;
+- }
++ case BPP16_MSB: // 16 bit MSB
++ CYCLE(
++ for ( uint x=0; x<w; x++ ) {
++ GET_PIXEL
++ *dst++ = (pixel >> 8);
++ *dst++ = pixel;
++ }
++ )
+ break;
+- case 25: // 24 bit LSB
+- for ( x=0; x<w; x++ ) {
+- GET_PIXEL
+- *dst++ = pixel;
+- *dst++ = pixel >> 8;
+- *dst++ = pixel >> 16;
+- }
++ case BPP16_LSB: // 16 bit LSB
++ CYCLE(
++ for ( uint x=0; x<w; x++ ) {
++ GET_PIXEL
++ *dst++ = pixel;
++ *dst++ = pixel >> 8;
++ }
++ )
+ break;
+- case 32: // 32 bit MSB
+- for ( x=0; x<w; x++ ) {
+- GET_PIXEL
+- *dst++ = pixel >> 24;
+- *dst++ = pixel >> 16;
+- *dst++ = pixel >> 8;
+- *dst++ = pixel;
+- }
++ case BPP24_MSB: // 24 bit MSB
++ CYCLE(
++ for ( uint x=0; x<w; x++ ) {
++ GET_PIXEL
++ *dst++ = pixel >> 16;
++ *dst++ = pixel >> 8;
++ *dst++ = pixel;
++ }
++ )
+ break;
+- case 33: // 32 bit LSB
+- for ( x=0; x<w; x++ ) {
+- GET_PIXEL
+- *dst++ = pixel;
+- *dst++ = pixel >> 8;
+- *dst++ = pixel >> 16;
+- *dst++ = pixel >> 24;
+- }
++ case BPP24_LSB: // 24 bit LSB
++ CYCLE(
++ for ( uint x=0; x<w; x++ ) {
++ GET_PIXEL
++ *dst++ = pixel;
++ *dst++ = pixel >> 8;
++ *dst++ = pixel >> 16;
++ }
++ )
+ break;
+- default:
+- qFatal("Logic error 2");
+- }
+- }
+- }
+- xi->data = (char *)newbits;
++ case BPP32_16_8_0:
++ CYCLE(
++ memcpy( dst, p, w * 4 );
++ )
++ break;
++ case BPP32_MSB: // 32 bit MSB
++ CYCLE(
++ for ( uint x=0; x<w; x++ ) {
++ GET_PIXEL
++ *dst++ = pixel >> 24;
++ *dst++ = pixel >> 16;
++ *dst++ = pixel >> 8;
++ *dst++ = pixel;
++ }
++ )
++ break;
++ case BPP32_LSB: // 32 bit LSB
++ CYCLE(
++ for ( uint x=0; x<w; x++ ) {
++ GET_PIXEL
++ *dst++ = pixel;
++ *dst++ = pixel >> 8;
++ *dst++ = pixel >> 16;
++ *dst++ = pixel >> 24;
++ }
++ )
++ break;
++ default:
++ qFatal("Logic error 2");
++ }
++ }
++ xi->data = (char *)newbits;
+ }
+
+ if ( d == 8 && !trucol ) { // 8 bit pixmap
+@@ -1554,15 +1675,24 @@ bool QPixmap::convertFromImage( const QI
+
+ if (image.depth() == 32) {
+ const int *iptr = (const int *) image.bits();
+- int max = w * h;
+- while (max--)
+- *aptr++ = *iptr++ >> 24; // squirt
++ if( axi->bytes_per_line == (int)w ) {
++ int max = w * h;
++ while (max--)
++ *aptr++ = *iptr++ >> 24; // squirt
++ } else {
++ for (uint i = 0; i < h; ++i ) {
++ for (uint j = 0; j < w; ++j )
++ *aptr++ = *iptr++ >> 24; // squirt
++ aptr += ( axi->bytes_per_line - w );
++ }
++ }
+ } else if (image.depth() == 8) {
+ const QRgb * const rgb = image.colorTable();
+ for (uint y = 0; y < h; ++y) {
+ const uchar *iptr = image.scanLine(y);
+ for (uint x = 0; x < w; ++x)
+ *aptr++ = qAlpha(rgb[*iptr++]);
++ aptr += ( axi->bytes_per_line - w );
+ }
+ }
+
diff --git a/opensuse/core/qt3/0038-dragobject-dont-prefer-unknown.patch b/opensuse/core/qt3/0038-dragobject-dont-prefer-unknown.patch
new file mode 100644
index 000000000..d9a7275e9
--- /dev/null
+++ b/opensuse/core/qt3/0038-dragobject-dont-prefer-unknown.patch
@@ -0,0 +1,19 @@
+--- src/kernel/qdragobject.cpp
++++ src/kernel/qdragobject.cpp
+@@ -893,6 +893,16 @@
+ {
+ if(!e)
+ return FALSE;
++
++ // when subtype is not specified, try text/plain first, otherwise this may read
++ // things like text/x-moz-url even though better targets are available
++ if( subtype.isNull()) {
++ QCString subtmp = "plain";
++ if( decode( e, str, subtmp )) {
++ subtype = subtmp;
++ return true;
++ }
++ }
+
+ if ( e->cacheType == QMimeSource::Text ) {
+ str = *e->cache.txt.str;
diff --git a/opensuse/core/qt3/0047-fix-kmenu-width.diff b/opensuse/core/qt3/0047-fix-kmenu-width.diff
new file mode 100644
index 000000000..398ca0cc4
--- /dev/null
+++ b/opensuse/core/qt3/0047-fix-kmenu-width.diff
@@ -0,0 +1,23 @@
+qt-bugs@ issue: N46882
+bugs.kde.org number: 77545
+applied: no
+author: Stephan Binner <binner@kde.org>
+
+Fix wrong K menu width for the case of enabled side pixmap and a menu title
+(like "Recently Used Applications") being longer than every other entry.
+
+Solution: Respect PanelKMenu::setMaximumSize() as up to Qt 3.2.3
+
+Index: src/widgets/qpopupmenu.cpp
+================================================================================
+--- src/widgets/qpopupmenu.cpp
++++ src/widgets/qpopupmenu.cpp
+@@ -2530,7 +2530,7 @@
+ constPolish();
+ QPopupMenu* that = (QPopupMenu*) this;
+ //We do not need a resize here, just the sizeHint..
+- return that->updateSize(FALSE, FALSE).expandedTo( QApplication::globalStrut() );
++ return that->updateSize(FALSE).expandedTo( QApplication::globalStrut() );
+ }
+
+
diff --git a/opensuse/core/qt3/0048-qclipboard_hack_80072.patch b/opensuse/core/qt3/0048-qclipboard_hack_80072.patch
new file mode 100644
index 000000000..2f508019b
--- /dev/null
+++ b/opensuse/core/qt3/0048-qclipboard_hack_80072.patch
@@ -0,0 +1,51 @@
+qt-bugs@ issue : none, probably even won't be
+bugs.kde.org number : 80072
+applied: no
+author: Lubos Lunak <l.lunak@kde.org>
+
+A crude hack for KDE #80072. No good idea how to fix it properly yet :(.
+
+================================================================================
+Index: src/kernel/qclipboard_x11.cpp
+===================================================================
+--- src/kernel/qclipboard_x11.cpp.orig
++++ src/kernel/qclipboard_x11.cpp
+@@ -112,6 +112,7 @@ static int pending_timer_id = 0;
+ static bool pending_clipboard_changed = FALSE;
+ static bool pending_selection_changed = FALSE;
+
++Q_EXPORT bool qt_qclipboard_bailout_hack = false;
+
+ // event capture mechanism for qt_xclb_wait_for_event
+ static bool waiting_for_data = FALSE;
+@@ -464,6 +465,15 @@ static Bool checkForClipboardEvents(Disp
+ || e->xselectionclear.selection == qt_xa_clipboard)));
+ }
+
++static bool selection_request_pending = false;
++
++static Bool check_selection_request_pending( Display*, XEvent* e, XPointer )
++ {
++ if( e->type == SelectionRequest && e->xselectionrequest.owner == owner->winId())
++ selection_request_pending = true;
++ return False;
++ }
++
+ bool qt_xclb_wait_for_event( Display *dpy, Window win, int type, XEvent *event,
+ int timeout )
+ {
+@@ -515,6 +525,14 @@ bool qt_xclb_wait_for_event( Display *dp
+ do {
+ if ( XCheckTypedWindowEvent(dpy,win,type,event) )
+ return TRUE;
++ if( qt_qclipboard_bailout_hack ) {
++ XEvent dummy;
++ selection_request_pending = false;
++ if ( owner != NULL )
++ XCheckIfEvent(dpy,&dummy,check_selection_request_pending,NULL);
++ if( selection_request_pending )
++ return TRUE;
++ }
+
+ // process other clipboard events, since someone is probably requesting data from us
+ XEvent e;
diff --git a/opensuse/core/qt3/0055-qtextedit_zoom.patch b/opensuse/core/qt3/0055-qtextedit_zoom.patch
new file mode 100644
index 000000000..ad4174a1f
--- /dev/null
+++ b/opensuse/core/qt3/0055-qtextedit_zoom.patch
@@ -0,0 +1,39 @@
+qt-bugs@ issue :
+bugs.kde.org number :
+applied: yes
+author: Waldo Bastian <bastian@kde.org>
+
+QTextEdit::zoomIn /QTextEdit::zoomOut does not work if the original
+font had its size specified in pixels instead of points.
+pointSize() returns 0 in such case.
+
+Index: widgets/qtextedit.cpp
+================================================================================
+--- src/widgets/qtextedit.cpp
++++ src/widgets/qtextedit.cpp
+@@ -5767,7 +5767,11 @@
+ void QTextEdit::zoomIn( int range )
+ {
+ QFont f( QScrollView::font() );
+- f.setPointSize( QFontInfo(f).pointSize() + range );
++ QFontInfo fi(f);
++ if (fi.pointSize() <= 0)
++ f.setPixelSize( fi.pixelSize() + range );
++ else
++ f.setPointSize( fi.pointSize() + range );
+ setFont( f );
+ }
+
+@@ -5782,7 +5786,11 @@
+ void QTextEdit::zoomOut( int range )
+ {
+ QFont f( QScrollView::font() );
+- f.setPointSize( QMAX( 1, QFontInfo(f).pointSize() - range ) );
++ QFontInfo fi(f);
++ if (fi.pointSize() <= 0)
++ f.setPixelSize( QMAX( 1, fi.pixelSize() - range ) );
++ else
++ f.setPointSize( QMAX( 1, fi.pointSize() - range ) );
+ setFont( f );
+ }
+
diff --git a/opensuse/core/qt3/0056-khotkeys_input_84434.patch b/opensuse/core/qt3/0056-khotkeys_input_84434.patch
new file mode 100644
index 000000000..d6092c3e9
--- /dev/null
+++ b/opensuse/core/qt3/0056-khotkeys_input_84434.patch
@@ -0,0 +1,22 @@
+qt-bugs@ issue : 58251
+bugs.kde.org number : 84434
+applied: no
+author: Lubos Lunak <l.lunak@kde.org>
+
+Fixes keyboard input action in KHotKeys (see bug #84434).
+
+================================================================================
+--- src/kernel/qapplication_x11.cpp
++++ src/kernel/qapplication_x11.cpp
+@@ -5401,8 +5401,10 @@
+ qt_auto_repeat_data *d = (qt_auto_repeat_data *) arg;
+ if (d->error ||
+ event->xkey.window != d->window ||
+- event->xkey.keycode != d->keycode)
++ event->xkey.keycode != d->keycode) {
++ d->error = TRUE;
+ return FALSE;
++ }
+
+ if (event->type == XKeyPress) {
+ d->error = (! d->release || event->xkey.time - d->timestamp > 10);
diff --git a/opensuse/core/qt3/0059-qpopup_has_mouse.patch b/opensuse/core/qt3/0059-qpopup_has_mouse.patch
new file mode 100644
index 000000000..18ae0081d
--- /dev/null
+++ b/opensuse/core/qt3/0059-qpopup_has_mouse.patch
@@ -0,0 +1,69 @@
+qt-bugs@ issue : 49417
+bugs.kde.org number : 58719
+applied: no
+author: Lubos Lunak <l.lunak@kde.org>
+
+Hello,
+
+ please consider applying the two attached QPopupMenu patches fixing KDE bugs
+ #58719 and #74778 (http://bugs.kde.org/show_bug.cgi?id=58719,
+ http://bugs.kde.org/show_bug.cgi?id=74778), which complain about keyboard
+ navigation in popup menus being very uncomfortable because of being affected
+ by mouse position despite mouse not being used at all.
+
+ - hasmouse.patch - (#58719) - use keyboard to open and navigate in any popup
+ menu and "accidentally" hit your mouse. Depending on the mouse cursor
+ position either no popup entry is selected or the random popup entry
+ happening to be at the cursor position becomes highlighted. The patch
+ basically copies the 'hasmouse' code from QMenuBar which prevents the mouse
+ having any effect on the popup if it's outside the popup geometry.
+
+ [ ... #74778 ... ]
+
+================================================================================
+--- src/widgets/qpopupmenu.cpp
++++ src/widgets/qpopupmenu.cpp
+@@ -253,6 +253,7 @@
+ } scroll;
+ QSize calcSize;
+ QRegion mouseMoveBuffer;
++ uint hasmouse : 1;
+ };
+
+ static QPopupMenu* active_popup_menu = 0;
+@@ -272,6 +273,7 @@
+ d->scroll.scrollableSize = d->scroll.topScrollableIndex = 0;
+ d->scroll.scrollable = QPopupMenuPrivate::Scroll::ScrollNone;
+ d->scroll.scrolltimer = 0;
++ d->hasmouse = 0;
+ isPopupMenu = TRUE;
+ #ifndef QT_NO_ACCEL
+ autoaccel = 0;
+@@ -1741,6 +1743,11 @@
+
+ int item = itemAtPos( e->pos() );
+ if ( item == -1 ) { // no valid item
++ if( !d->hasmouse ) {
++ tryMenuBar( e );
++ return;
++ }
++ d->hasmouse = 0;
+ int lastActItem = actItem;
+ actItem = -1;
+ if ( lastActItem >= 0 )
+@@ -1752,6 +1759,7 @@
+ }
+ } else { // mouse on valid item
+ // but did not register mouse press
++ d->hasmouse = 1;
+ if ( (e->state() & Qt::MouseButtonMask) && !mouseBtDn )
+ mouseBtDn = TRUE; // so mouseReleaseEvent will pop down
+
+@@ -2160,6 +2168,7 @@
+ */
+ void QPopupMenu::leaveEvent( QEvent * )
+ {
++ d->hasmouse = 0;
+ if ( testWFlags( WStyle_Tool ) && style().styleHint(QStyle::SH_PopupMenu_MouseTracking, this) ) {
+ int lastActItem = actItem;
+ actItem = -1;
diff --git a/opensuse/core/qt3/0060-qpopup_ignore_mousepos.patch b/opensuse/core/qt3/0060-qpopup_ignore_mousepos.patch
new file mode 100644
index 000000000..50d48bd35
--- /dev/null
+++ b/opensuse/core/qt3/0060-qpopup_ignore_mousepos.patch
@@ -0,0 +1,60 @@
+qt-bugs@ issue : 49417
+bugs.kde.org number : 74778
+applied: no
+author: Lubos Lunak <l.lunak@kde.org>
+
+ Hello,
+
+ please consider applying the two attached QPopupMenu patches fixing KDE bugs
+ #58719 and #74778 (http://bugs.kde.org/show_bug.cgi?id=58719,
+ http://bugs.kde.org/show_bug.cgi?id=74778), which complain about keyboard
+ navigation in popup menus being very uncomfortable because of being affected
+ by mouse position despite mouse not being used at all.
+
+ [... #58719 ... ]
+
+ - ignoremousepos.patch - (#74778) - use keyboard to open some popup which
+ doesn't show up at mouse position (e.g. Alt+F3 with KWin or the context menu
+ key with some file selected in Konqueror). If the mouse is positioned in the
+ area where the popup shows, the random entry happening to be at the cursor
+ position becomes highlighted.
+ The patch fixes this by ignoring mouse events that happen at mouse position
+ which was current when the popup was shown, i.e. all mouse move events that
+ actually aren't triggered by mouse move are ignored. I first wanted to ignore
+ only the very first mouse move event (which should be caused by EnterNotify
+ for the popup) but I realized that Qt's event handling causes the popup to
+ possibly get more than just one initial move event, caused by LeaveNotify
+ events for normal widgets being transformed to mouse move events for the
+ popup, so I have no better idea how to solve this problem.
+
+================================================================================
+--- src/widgets/qpopupmenu.cpp
++++ src/widgets/qpopupmenu.cpp
+@@ -254,6 +254,7 @@
+ QSize calcSize;
+ QRegion mouseMoveBuffer;
+ uint hasmouse : 1;
++ QPoint ignoremousepos;
+ };
+
+ static QPopupMenu* active_popup_menu = 0;
+@@ -1356,6 +1357,7 @@
+ popupActive = -1;
+ if(style().styleHint(QStyle::SH_PopupMenu_SubMenuPopupDelay, this))
+ d->mouseMoveBuffer = QRegion();
++ d->ignoremousepos = QCursor::pos();
+ }
+
+ /*!
+@@ -1703,6 +1705,11 @@
+
+ void QPopupMenu::mouseMoveEvent( QMouseEvent *e )
+ {
++ if( e->globalPos() == d->ignoremousepos ) {
++ return;
++ }
++ d->ignoremousepos = QPoint();
++
+ motion++;
+
+ if ( parentMenu && parentMenu->isPopupMenu ) {
diff --git a/opensuse/core/qt3/0079-compositing-types.patch b/opensuse/core/qt3/0079-compositing-types.patch
new file mode 100644
index 000000000..7899cf584
--- /dev/null
+++ b/opensuse/core/qt3/0079-compositing-types.patch
@@ -0,0 +1,413 @@
+qt-bugs@ issue : none
+bugs.kde.org number : none
+applied: no
+author: Lubos Lunak <l.lunak@kde.org>
+
+This patch adds support for window types used for compositing (popup menu, dropdown menu,
+tooltip, combobox, dnd).
+
+--- src/kernel/qdnd_x11.cpp.sav 2007-05-25 18:56:23.000000000 +0200
++++ src/kernel/qdnd_x11.cpp 2007-05-31 10:30:58.000000000 +0200
+@@ -261,6 +261,7 @@ public:
+ QWidget(QApplication::desktop()->screen( screen ),
+ 0, WStyle_Customize | WStyle_Tool | WStyle_NoBorder | WX11BypassWM ), oldpmser( 0 ), oldbmser( 0 )
+ {
++ x11SetWindowType( X11WindowTypeDND );
+ }
+
+ void setPixmap(QPixmap pm, QPoint hot)
+@@ -1221,6 +1222,7 @@ void QDragManager::move( const QPoint &
+ // recreate the pixmap on the new screen...
+ delete qt_xdnd_deco;
+ qt_xdnd_deco = new QShapedPixmapWidget( screen );
++ qt_xdnd_deco->x11SetWindowTransient( dragSource->topLevelWidget());
+ if (!QWidget::mouseGrabber()) {
+ updatePixmap();
+ qt_xdnd_deco->grabMouse();
+@@ -1774,6 +1776,7 @@ bool QDragManager::drag( QDragObject * o
+
+ dragSource = (QWidget *)(object->parent());
+
++ qt_xdnd_deco->x11SetWindowTransient( dragSource->topLevelWidget());
+ qApp->installEventFilter( this );
+ qt_xdnd_source_current_time = qt_x_time;
+ XSetSelectionOwner( QPaintDevice::x11AppDisplay(), qt_xdnd_selection,
+--- src/kernel/qapplication_x11.cpp.sav 2007-05-29 16:24:58.000000000 +0200
++++ src/kernel/qapplication_x11.cpp 2007-05-31 10:30:58.000000000 +0200
+@@ -268,6 +268,11 @@ Atom qt_net_wm_window_type_menu = 0;
+ Atom qt_net_wm_window_type_utility = 0;
+ Atom qt_net_wm_window_type_splash = 0;
+ Atom qt_net_wm_window_type_override = 0; // KDE extension
++Atom qt_net_wm_window_type_dropdown_menu = 0;
++Atom qt_net_wm_window_type_popup_menu = 0;
++Atom qt_net_wm_window_type_tooltip = 0;
++Atom qt_net_wm_window_type_combo = 0;
++Atom qt_net_wm_window_type_dnd = 0;
+ Atom qt_net_wm_frame_strut = 0; // KDE extension
+ Atom qt_net_wm_state_stays_on_top = 0; // KDE extension
+ Atom qt_net_wm_pid = 0;
+@@ -1920,6 +1925,11 @@ void qt_init_internal( int *argcptr, cha
+ qt_x11_intern_atom( "_NET_WM_WINDOW_TYPE_UTILITY", &qt_net_wm_window_type_utility );
+ qt_x11_intern_atom( "_NET_WM_WINDOW_TYPE_SPLASH", &qt_net_wm_window_type_splash );
+ qt_x11_intern_atom( "_KDE_NET_WM_WINDOW_TYPE_OVERRIDE", &qt_net_wm_window_type_override );
++ qt_x11_intern_atom( "_NET_WM_WINDOW_TYPE_DROPDOWN_MENU", &qt_net_wm_window_type_dropdown_menu );
++ qt_x11_intern_atom( "_NET_WM_WINDOW_TYPE_POPUP_MENU", &qt_net_wm_window_type_popup_menu );
++ qt_x11_intern_atom( "_NET_WM_WINDOW_TYPE_TOOLTIP", &qt_net_wm_window_type_tooltip );
++ qt_x11_intern_atom( "_NET_WM_WINDOW_TYPE_COMBO", &qt_net_wm_window_type_combo );
++ qt_x11_intern_atom( "_NET_WM_WINDOW_TYPE_DND", &qt_net_wm_window_type_dnd );
+ qt_x11_intern_atom( "_KDE_NET_WM_FRAME_STRUT", &qt_net_wm_frame_strut );
+ qt_x11_intern_atom( "_NET_WM_STATE_STAYS_ON_TOP",
+ &qt_net_wm_state_stays_on_top );
+--- src/kernel/qwidget_x11.cpp.sav 2007-05-25 18:56:23.000000000 +0200
++++ src/kernel/qwidget_x11.cpp 2007-05-31 10:30:58.000000000 +0200
+@@ -125,6 +125,11 @@ extern Atom qt_net_wm_window_type_menu;
+ extern Atom qt_net_wm_window_type_utility;
+ extern Atom qt_net_wm_window_type_splash;
+ extern Atom qt_net_wm_window_type_override;
++extern Atom qt_net_wm_window_type_dropdown_menu;
++extern Atom qt_net_wm_window_type_popup_menu;
++extern Atom qt_net_wm_window_type_combo;
++extern Atom qt_net_wm_window_type_dnd;
++extern Atom qt_net_wm_window_type_tooltip;
+ extern Atom qt_net_wm_pid;
+ extern Atom qt_net_wm_user_time;
+ extern Atom qt_enlightenment_desktop;
+@@ -448,10 +453,6 @@ void QWidget::create( WId window, bool i
+ x11Colormap() );
+ #endif // QT_NO_XFTFREETYPE
+
+- // NET window types
+- long net_wintypes[7] = { 0, 0, 0, 0, 0, 0, 0 };
+- int curr_wintype = 0;
+-
+ // NET window states
+ long net_winstates[6] = { 0, 0, 0, 0, 0, 0 };
+ int curr_winstate = 0;
+@@ -473,7 +474,6 @@ void QWidget::create( WId window, bool i
+ if ( testWFlags(WStyle_Splash) ) {
+ if (qt_net_supports(qt_net_wm_window_type_splash)) {
+ clearWFlags( WX11BypassWM );
+- net_wintypes[curr_wintype++] = qt_net_wm_window_type_splash;
+ } else {
+ setWFlags( WX11BypassWM | WStyle_Tool | WStyle_NoBorder );
+ }
+@@ -482,27 +482,22 @@ void QWidget::create( WId window, bool i
+ mwmhints.decorations = 0L;
+ mwmhints.flags |= (1L << 1); // MWM_HINTS_DECORATIONS
+
+- if ( testWFlags( WStyle_NoBorder ) ) {
+- // override netwm type - quick and easy for KDE noborder
+- net_wintypes[curr_wintype++] = qt_net_wm_window_type_override;
+- } else {
+- if ( testWFlags( WStyle_NormalBorder | WStyle_DialogBorder ) ) {
+- mwmhints.decorations |= (1L << 1); // MWM_DECOR_BORDER
+- mwmhints.decorations |= (1L << 2); // MWM_DECOR_RESIZEH
+- }
++ if ( testWFlags( WStyle_NormalBorder | WStyle_DialogBorder ) ) {
++ mwmhints.decorations |= (1L << 1); // MWM_DECOR_BORDER
++ mwmhints.decorations |= (1L << 2); // MWM_DECOR_RESIZEH
++ }
+
+- if ( testWFlags( WStyle_Title ) )
+- mwmhints.decorations |= (1L << 3); // MWM_DECOR_TITLE
++ if ( testWFlags( WStyle_Title ) )
++ mwmhints.decorations |= (1L << 3); // MWM_DECOR_TITLE
+
+- if ( testWFlags( WStyle_SysMenu ) )
+- mwmhints.decorations |= (1L << 4); // MWM_DECOR_MENU
++ if ( testWFlags( WStyle_SysMenu ) )
++ mwmhints.decorations |= (1L << 4); // MWM_DECOR_MENU
+
+- if ( testWFlags( WStyle_Minimize ) )
+- mwmhints.decorations |= (1L << 5); // MWM_DECOR_MINIMIZE
++ if ( testWFlags( WStyle_Minimize ) )
++ mwmhints.decorations |= (1L << 5); // MWM_DECOR_MINIMIZE
+
+- if ( testWFlags( WStyle_Maximize ) )
+- mwmhints.decorations |= (1L << 6); // MWM_DECOR_MAXIMIZE
+- }
++ if ( testWFlags( WStyle_Maximize ) )
++ mwmhints.decorations |= (1L << 6); // MWM_DECOR_MAXIMIZE
+
+ if (testWFlags(WStyle_Tool)) {
+ wsa.save_under = True;
+@@ -522,23 +517,6 @@ void QWidget::create( WId window, bool i
+ }
+ }
+
+- // ### need a better way to do this
+- if (inherits("QPopupMenu")) {
+- // menu netwm type
+- net_wintypes[curr_wintype++] = qt_net_wm_window_type_menu;
+- } else if (inherits("QToolBar")) {
+- // toolbar netwm type
+- net_wintypes[curr_wintype++] = qt_net_wm_window_type_toolbar;
+- } else if (testWFlags(WStyle_Customize) && testWFlags(WStyle_Tool)) {
+- // utility netwm type
+- net_wintypes[curr_wintype++] = qt_net_wm_window_type_utility;
+- }
+-
+- if (dialog) // dialog netwm type
+- net_wintypes[curr_wintype++] = qt_net_wm_window_type_dialog;
+- // normal netwm type - default
+- net_wintypes[curr_wintype++] = qt_net_wm_window_type_normal;
+-
+ // stays on top
+ if (testWFlags(WStyle_StaysOnTop)) {
+ net_winstates[curr_winstate++] = qt_net_wm_state_above;
+@@ -573,6 +551,7 @@ void QWidget::create( WId window, bool i
+ wsa.save_under = True;
+ XChangeWindowAttributes( dpy, id, CWOverrideRedirect | CWSaveUnder,
+ &wsa );
++ x11SetWindowType();
+ } else if ( topLevel && !desktop ) { // top-level widget
+ QWidget *p = parentWidget(); // real parent
+ if (p)
+@@ -632,12 +611,7 @@ void QWidget::create( WId window, bool i
+ else
+ XDeleteProperty(dpy, id, qt_xa_motif_wm_hints);
+
+- // set _NET_WM_WINDOW_TYPE
+- if (curr_wintype > 0)
+- XChangeProperty(dpy, id, qt_net_wm_window_type, XA_ATOM, 32, PropModeReplace,
+- (unsigned char *) net_wintypes, curr_wintype);
+- else
+- XDeleteProperty(dpy, id, qt_net_wm_window_type);
++ x11SetWindowType();
+
+ // set _NET_WM_WINDOW_STATE
+ if (curr_winstate > 0)
+@@ -896,6 +870,64 @@ void QWidget::reparentSys( QWidget *pare
+ setMouseTracking(mouse_tracking);
+ }
+
++// Sets the EWMH (netwm) window type. Needed as a separate function
++// because create() may be too soon in some cases.
++void QWidget::x11SetWindowType( X11WindowType type )
++{
++ // NET window types
++ long net_wintypes[7] = { 0, 0, 0, 0, 0, 0, 0 };
++ int curr_wintype = 0;
++ if( testWFlags(WType_Desktop))
++ return;
++ if( type == X11WindowTypeSelect ) {
++ if ( testWFlags(WStyle_Splash)) {
++ if (qt_net_supports(qt_net_wm_window_type_splash)) {
++ net_wintypes[curr_wintype++] = qt_net_wm_window_type_splash;
++ }
++ } else if (inherits("QToolBar")) {
++ // toolbar netwm type
++ net_wintypes[curr_wintype++] = qt_net_wm_window_type_toolbar;
++ } else if (testWFlags(WStyle_Customize) && testWFlags(WStyle_Tool)) {
++ // utility netwm type
++ net_wintypes[curr_wintype++] = qt_net_wm_window_type_utility;
++ } else if (testWFlags(WType_Dialog)) {
++ // dialog netwm type
++ net_wintypes[curr_wintype++] = qt_net_wm_window_type_dialog;
++ }
++ } else if( type == X11WindowTypeCombo ) {
++ // combo netwm type
++ net_wintypes[curr_wintype++] = qt_net_wm_window_type_combo;
++ } else if( type == X11WindowTypeDND ) {
++ // dnd netwm type
++ net_wintypes[curr_wintype++] = qt_net_wm_window_type_dnd;
++ } else if( type == X11WindowTypeDropdown ) {
++ // dropdown netwm type
++ net_wintypes[curr_wintype++] = qt_net_wm_window_type_dropdown_menu;
++ } else if( type == X11WindowTypePopup ) {
++ // popup netwm type
++ net_wintypes[curr_wintype++] = qt_net_wm_window_type_popup_menu;
++ } else if( type == X11WindowTypeMenu ) {
++ // menu netwm type
++ net_wintypes[curr_wintype++] = qt_net_wm_window_type_menu;
++ } else if( type == X11WindowTypeTooltip ) {
++ // tooltip netwm type
++ net_wintypes[curr_wintype++] = qt_net_wm_window_type_tooltip;
++ }
++
++ // normal netwm type - default
++ net_wintypes[curr_wintype++] = qt_net_wm_window_type_normal;
++ // set _NET_WM_WINDOW_TYPE
++ if (curr_wintype > 0)
++ XChangeProperty(x11Display(), winId(), qt_net_wm_window_type, XA_ATOM, 32, PropModeReplace,
++ (unsigned char *) net_wintypes, curr_wintype);
++ else
++ XDeleteProperty(x11Display(), winId(), qt_net_wm_window_type);
++}
++
++void QWidget::x11SetWindowTransient( QWidget* parent )
++{
++ XSetTransientForHint( x11Display(), winId(), parent->winId());
++}
+
+ /*!
+ Translates the widget coordinate \a pos to global screen
+--- src/kernel/qwidget.h.sav 2007-05-25 18:56:23.000000000 +0200
++++ src/kernel/qwidget.h 2007-05-31 10:30:58.000000000 +0200
+@@ -464,7 +464,19 @@ public:
+ CGContextRef macCGContext(bool clipped=TRUE) const;
+ #endif
+ #endif
+-
++#if defined(Q_WS_X11)
++ enum X11WindowType {
++ X11WindowTypeSelect,
++ X11WindowTypeCombo,
++ X11WindowTypeDND,
++ X11WindowTypeTooltip,
++ X11WindowTypeMenu, // torn-off
++ X11WindowTypeDropdown,
++ X11WindowTypePopup
++ };
++ void x11SetWindowType( X11WindowType type = X11WindowTypeSelect );
++ void x11SetWindowTransient( QWidget* parent );
++#endif
+ void setWindowOpacity(double level);
+ double windowOpacity() const;
+
+--- src/dialogs/qdialog.cpp.sav 2007-05-25 18:56:23.000000000 +0200
++++ src/dialogs/qdialog.cpp 2007-05-31 10:30:58.000000000 +0200
+@@ -705,7 +701,7 @@ void QDialog::show()
+ && qApp->mainWidget() && qApp->mainWidget()->isVisible()
+ && !qApp->mainWidget()->isMinimized()) {
+ // make sure the transient for hint is set properly for modal dialogs
+- XSetTransientForHint( x11Display(), winId(), qApp->mainWidget()->winId() );
++ x11SetWindowTransient( qApp->mainWidget());
+ }
+ #endif // Q_WS_X11
+
+--- src/widgets/qtooltip.cpp.sav 2007-05-25 18:56:23.000000000 +0200
++++ src/widgets/qtooltip.cpp 2007-05-31 10:30:58.000000000 +0200
+@@ -72,6 +72,7 @@ public:
+ polish();
+ setText(text);
+ adjustSize();
++ x11SetWindowType( X11WindowTypeTooltip );
+ }
+ void setWidth( int w ) { resize( sizeForWidth( w ) ); }
+ };
+@@ -528,6 +529,10 @@ void QTipManager::showTip()
+ if (!widget)
+ return;
+
++#ifdef Q_WS_X11
++ label->x11SetWindowTransient( widget->topLevelWidget());
++#endif
++
+ #ifdef Q_WS_MAC
+ QRect screen = QApplication::desktop()->availableGeometry( scr );
+ #else
+--- src/widgets/qcombobox.cpp.sav 2007-05-25 18:56:23.000000000 +0200
++++ src/widgets/qcombobox.cpp 2007-05-31 10:49:13.000000000 +0200
+@@ -389,12 +389,8 @@ public:
+ inline QListBox * listBox() { return lBox; }
+ inline QComboBoxPopup * popup() { return pop; }
+ void updateLinedGeometry();
+-
+- void setListBox( QListBox *l ) { lBox = l ; usingLBox = TRUE;
+- l->setMouseTracking( TRUE );}
+-
+- void setPopupMenu( QComboBoxPopup * pm, bool isPopup=TRUE )
+- { pop = pm; if(isPopup) usingLBox = FALSE; }
++ void setListBox( QListBox *l );
++ void setPopupMenu( QComboBoxPopup * pm, bool isPopup=TRUE );
+
+ int current;
+ int maxCount;
+@@ -440,6 +436,30 @@ void QComboBoxData::updateLinedGeometry(
+ ed->setGeometry( r );
+ }
+
++void QComboBoxData::setListBox( QListBox *l )
++{
++ lBox = l;
++ usingLBox = TRUE;
++ l->setMouseTracking( TRUE );
++#ifdef Q_WS_X11
++ l->x11SetWindowType( QWidget::X11WindowTypeCombo );
++ l->x11SetWindowTransient( combo->topLevelWidget());
++#endif
++}
++
++void QComboBoxData::setPopupMenu( QComboBoxPopup * pm, bool isPopup )
++{
++ pop = pm;
++ if(isPopup)
++ usingLBox = FALSE;
++#ifdef Q_WS_X11
++ if( pm ) {
++ pm->x11SetWindowType( QWidget::X11WindowTypeCombo );
++ pm->x11SetWindowTransient( combo->topLevelWidget());
++ }
++#endif
++}
++
+ static inline bool checkInsertIndex( const char *method, const char * name,
+ int count, int *index)
+ {
+--- src/widgets/qpopupmenu.cpp.sav 2007-05-25 18:56:23.000000000 +0200
++++ src/widgets/qpopupmenu.cpp 2007-05-31 11:09:22.000000000 +0200
+@@ -298,6 +298,9 @@ QPopupMenu::QPopupMenu( QWidget *parent,
+ connectModalRecursionSafety = 0;
+
+ setFocusPolicy( StrongFocus );
++#ifdef Q_WS_X11
++ x11SetWindowType( X11WindowTypePopup );
++#endif
+ }
+
+ /*!
+@@ -537,6 +540,29 @@ void QPopupMenu::popup( const QPoint &po
+ emit aboutToShow();
+ updateSize(TRUE);
+ }
++#ifdef Q_WS_X11
++#ifndef QT_NO_MENUBAR
++ QMenuData *top = this; // find top level
++ while ( top->parentMenu )
++ top = top->parentMenu;
++ if( top->isMenuBar )
++ x11SetWindowType( X11WindowTypeDropdown );
++ if( parentMenu && parentMenu->isMenuBar )
++ x11SetWindowTransient( static_cast< QMenuBar* >( parentMenu )->topLevelWidget());
++#endif
++ if( parentMenu && !parentMenu->isMenuBar )
++ x11SetWindowTransient( static_cast< QPopupMenu* >( parentMenu ));
++ if( !parentMenu ) {
++ // hackish ... try to find the main window related to this popup
++ QWidget* parent = parentWidget() ? parentWidget()->topLevelWidget() : NULL;
++ if( parent == NULL )
++ parent = QApplication::widgetAt( pos );
++ if( parent == NULL )
++ parent = qApp->activeWindow();
++ if( parent != NULL )
++ x11SetWindowTransient( parent );
++ }
++#endif
+
+ int sw = screen.width(); // screen width
+ int sh = screen.height(); // screen height
+@@ -1390,6 +1416,13 @@ void QPopupMenu::hide()
+ #if defined(QT_ACCESSIBILITY_SUPPORT)
+ QAccessible::updateAccessibility( this, 0, QAccessible::PopupMenuEnd );
+ #endif
++#ifndef QT_NO_MENUBAR
++ QMenuData *top = this; // find top level
++ while ( top->parentMenu )
++ top = top->parentMenu;
++ if( top->isMenuBar )
++ x11SetWindowType( X11WindowTypePopup ); // reset
++#endif
+ parentMenu = 0;
+ hidePopups();
+ QWidget::hide();
+@@ -2713,6 +2746,9 @@ void QPopupMenu::toggleTearOff()
+ geometry().topLeft(), FALSE );
+ p->mitems->setAutoDelete( FALSE );
+ p->tornOff = TRUE;
++#ifdef Q_WS_X11
++ p->x11SetWindowType( X11WindowTypeMenu );
++#endif
+ for ( QMenuItemListIt it( *mitems ); it.current(); ++it ) {
+ if ( it.current()->id() != QMenuData::d->aInt && !it.current()->widget() )
+ p->mitems->append( it.current() );
diff --git a/opensuse/core/qt3/0080-net-wm-sync-request.patch b/opensuse/core/qt3/0080-net-wm-sync-request.patch
new file mode 100644
index 000000000..b3e23cd13
--- /dev/null
+++ b/opensuse/core/qt3/0080-net-wm-sync-request.patch
@@ -0,0 +1,301 @@
+This qt-copy patch has been slightly modified to apply to the SUSE package
+(does not apply directly because of the immodule patch).
+
+--- src/kernel/qwidget_x11.cpp.sav 2007-08-29 15:04:42.000000000 +0200
++++ src/kernel/qwidget_x11.cpp 2007-08-29 15:06:17.000000000 +0200
+@@ -85,6 +85,12 @@ static QWidget *keyboardGrb = 0;
+ extern Time qt_x_time;
+ extern Time qt_x_user_time;
+
++#ifndef QT_NO_XSYNC
++extern Atom qt_net_wm_sync_request_counter;
++extern Atom qt_net_wm_sync_request;
++extern bool qt_use_xsync;
++#endif
++
+ // defined in qfont_x11.cpp
+ extern bool qt_has_xft;
+
+@@ -593,11 +599,14 @@ void QWidget::create( WId window, bool i
+
+ XResizeWindow( dpy, id, crect.width(), crect.height() );
+ XStoreName( dpy, id, qAppName() );
+- Atom protocols[4];
++ Atom protocols[5];
+ int n = 0;
+ protocols[n++] = qt_wm_delete_window; // support del window protocol
+ protocols[n++] = qt_wm_take_focus; // support take focus window protocol
+ protocols[n++] = qt_net_wm_ping; // support _NET_WM_PING protocol
++#ifndef QT_NO_XSYNC
++ protocols[n++] = qt_net_wm_sync_request;// support the _NET_WM_SYNC_REQUEST protocol
++#endif
+ if ( testWFlags( WStyle_ContextHelp ) )
+ protocols[n++] = qt_net_wm_context_help;
+ XSetWMProtocols( dpy, id, protocols, n );
+@@ -623,6 +632,14 @@ void QWidget::create( WId window, bool i
+ XChangeProperty(dpy, id, qt_net_wm_pid, XA_CARDINAL, 32, PropModeReplace,
+ (unsigned char *) &curr_pid, 1);
+
++#ifndef QT_NO_XSYNC
++ // set _NET_WM_SYNC_COUNTER
++ createSyncCounter();
++ long counterVal = topData()->syncCounter;
++ XChangeProperty( dpy, id, qt_net_wm_sync_request_counter, XA_CARDINAL, 32, PropModeReplace,
++ (unsigned char*) &counterVal, 1);
++#endif
++
+ // when we create a toplevel widget, the frame strut should be dirty
+ fstrut_dirty = 1;
+
+@@ -722,6 +739,9 @@ void QWidget::destroy( bool destroyWindo
+ if ( destroyWindow )
+ qt_XDestroyWindow( this, x11Display(), winid );
+ }
++#ifndef QT_NO_XSYNC
++ destroySyncCounter();
++#endif
+ setWinId( 0 );
+
+ extern void qPRCleanup( QWidget *widget ); // from qapplication_x11.cpp
+@@ -781,6 +801,10 @@ void QWidget::reparentSys( QWidget *pare
+ destroyInputContext();
+ }
+
++#ifndef QT_NO_XSYNC
++ destroySyncCounter();
++#endif
++
+ if ( isTopLevel() || !parent ) // we are toplevel, or reparenting to toplevel
+ topData()->parentWinId = 0;
+
+@@ -2464,6 +2488,11 @@ void QWidget::createTLSysExtra()
+ // created lazily
+ extra->topextra->xic = 0;
+ #endif
++#ifndef QT_NO_XSYNC
++ extra->topextra->syncCounter = 0;
++ extra->topextra->syncRequestValue[0] = 0;
++ extra->topextra->syncRequestValue[1] = 0;
++#endif
+ }
+
+ void QWidget::deleteTLSysExtra()
+@@ -2510,6 +2539,51 @@ void QWidget::checkChildrenDnd()
+ }
+ }
+
++
++#ifndef QT_NO_XSYNC
++// create a window's XSyncCounter
++void QWidget::createSyncCounter()
++{
++ if( !qt_use_xsync || !isTopLevel() || topData()->syncCounter )
++ return;
++ XSyncValue zero;
++ XSyncIntToValue( &zero, 0 );
++ topData()->syncCounter = XSyncCreateCounter( x11Display(), zero );
++}
++
++// destroy a window's XSyncCounter
++void QWidget::destroySyncCounter()
++{
++ if( !qt_use_xsync || !extra || !extra->topextra
++ || !extra->topextra->syncCounter )
++ return;
++ XSyncDestroyCounter( x11Display(), extra->topextra->syncCounter );
++ extra->topextra->syncCounter = 0;
++}
++
++// increment a window's XSyncCounter
++void QWidget::incrementSyncCounter()
++{
++ if( qt_use_xsync && topData()->syncCounter &&
++ !(topData()->syncRequestValue[0] == 0 &&
++ topData()->syncRequestValue[1] == 0) ) {
++ XSyncValue val;
++ XSyncIntsToValue( &val, topData()->syncRequestValue[ 0 ], topData()->syncRequestValue[ 1 ] );
++ XSyncSetCounter( x11Display(), topData()->syncCounter, val );
++ topData()->syncRequestValue[0] = topData()->syncRequestValue[1] = 0;
++ }
++}
++
++// handle _NET_WM_SYNC_REQUEST
++void QWidget::handleSyncRequest( void* ev )
++{
++ XEvent* xev = (XEvent*)ev;
++ topData()->syncRequestValue[ 0 ] = xev->xclient.data.l[ 2 ];
++ topData()->syncRequestValue[ 1 ] = xev->xclient.data.l[ 3 ];
++}
++#endif // QT_NO_XSYNC
++
++
+ /*!
+ \property QWidget::acceptDrops
+ \brief whether drop events are enabled for this widget
+--- src/kernel/qt_x11_p.h.sav 2007-08-29 15:04:42.000000000 +0200
++++ src/kernel/qt_x11_p.h 2007-08-29 15:05:27.000000000 +0200
+@@ -174,6 +174,11 @@ extern "C" {
+ #endif // QT_NO_XRENDER
+
+
++#ifndef QT_NO_XSYNC
++# include <X11/extensions/sync.h>
++#endif // QT_NO_XSYNC
++
++
+ #ifndef QT_NO_XKB
+ # include <X11/XKBlib.h>
+ #endif // QT_NO_XKB
+--- src/kernel/qwidget.h.sav 2007-08-29 15:04:42.000000000 +0200
++++ src/kernel/qwidget.h 2007-08-29 15:05:52.000000000 +0200
+@@ -605,6 +605,14 @@ private:
+ void focusInputContext();
+ void unfocusInputContext();
+ void checkChildrenDnd();
++
++#ifndef QT_NO_XSYNC
++ void createSyncCounter();
++ void destroySyncCounter();
++ void incrementSyncCounter();
++ void handleSyncRequest( void* ev );
++#endif
++
+ #elif defined(Q_WS_MAC)
+ uint own_id : 1, macDropEnabled : 1;
+ EventHandlerRef window_event;
+@@ -986,6 +994,10 @@ struct Q_EXPORT QTLWExtra {
+ #if defined(QT_NO_IM_EXTENSIONS)
+ void *xic; // Input Context
+ #endif
++#ifndef QT_NO_XSYNC
++ ulong syncCounter;
++ uint syncRequestValue[2];
++#endif
+ #endif
+ #if defined(Q_WS_MAC)
+ WindowGroupRef group;
+--- src/kernel/qapplication_x11.cpp.sav 2007-08-29 15:04:42.000000000 +0200
++++ src/kernel/qapplication_x11.cpp 2007-08-29 15:05:27.000000000 +0200
+@@ -288,6 +288,11 @@ Atom *qt_net_supported_list = 0;
+ Window *qt_net_virtual_root_list = 0;
+
+
++// X11 SYNC support
++#ifndef QT_NO_XSYNC
++Atom qt_net_wm_sync_request_counter = 0;
++Atom qt_net_wm_sync_request = 0;
++#endif
+
+ // client leader window
+ Window qt_x11_wm_client_leader = 0;
+@@ -312,6 +317,13 @@ static int xrandr_eventbase;
+ // Display
+ Q_EXPORT bool qt_use_xrender = FALSE;
+
++#ifndef QT_NO_XSYNC
++// True if SYNC extension exists on the connected display
++bool qt_use_xsync = FALSE;
++static int xsync_eventbase;
++static int xsync_errorbase;
++#endif
++
+ // modifier masks for alt/meta - detected when the application starts
+ static long qt_alt_mask = 0;
+ static long qt_meta_mask = 0;
+@@ -2007,6 +2019,11 @@ void qt_init_internal( int *argcptr, cha
+ qt_x11_intern_atom( "UTF8_STRING", &qt_utf8_string );
+ qt_x11_intern_atom( "_SGI_DESKS_MANAGER", &qt_sgi_desks_manager );
+
++#ifndef QT_NO_XSYNC
++ qt_x11_intern_atom( "_NET_WM_SYNC_REQUEST_COUNTER", &qt_net_wm_sync_request_counter );
++ qt_x11_intern_atom( "_NET_WM_SYNC_REQUEST", &qt_net_wm_sync_request );
++#endif
++
+ qt_xdnd_setup();
+ qt_x11_motifdnd_init();
+
+@@ -2043,6 +2060,15 @@ void qt_init_internal( int *argcptr, cha
+ }
+ #endif // QT_NO_XRENDER
+
++#ifndef QT_NO_XSYNC
++ // Try to initialize SYNC extension on the connected display
++ int xsync_major, xsync_minor;
++ if ( XSyncQueryExtension( appDpy, &xsync_eventbase, &xsync_errorbase ) &&
++ XSyncInitialize( appDpy, &xsync_major, &xsync_minor ) ) {
++ qt_use_xsync = TRUE;
++ }
++#endif
++
+ #ifndef QT_NO_XKB
+ // If XKB is detected, set the GrabsUseXKBState option so input method
+ // compositions continue to work (ie. deadkeys)
+@@ -3196,6 +3222,10 @@ int QApplication::x11ClientMessage(QWidg
+ XSendEvent( event->xclient.display, event->xclient.window,
+ False, SubstructureNotifyMask|SubstructureRedirectMask, event );
+ }
++#ifndef QT_NO_XSYNC
++ } else if (a == qt_net_wm_sync_request ) {
++ widget->handleSyncRequest( event );
++#endif
+ }
+ } else if ( event->xclient.message_type == qt_qt_scrolldone ) {
+ widget->translateScrollDoneEvent(event);
+@@ -5818,6 +5848,21 @@ bool QETWidget::translateScrollDoneEvent
+ return FALSE;
+ }
+
++#if defined(Q_C_CALLBACKS)
++extern "C" {
++#endif
++#ifndef QT_NO_XSYNC
++static Bool qt_net_wm_sync_request_scanner(Display*, XEvent* event, XPointer arg)
++{
++ return (event->type == ClientMessage && event->xclient.window == *(Window*)arg
++ && event->xclient.message_type == qt_wm_protocols
++ && event->xclient.data.l[ 0 ] == qt_net_wm_sync_request );
++}
++#endif
++
++#if defined(Q_C_CALLBACKS)
++}
++#endif
+
+ //
+ // ConfigureNotify (window move and resize) event translation
+@@ -5849,6 +5894,7 @@ bool QETWidget::translateConfigEvent( co
+ if (! extra || extra->compress_events) {
+ // ConfigureNotify compression for faster opaque resizing
+ XEvent otherEvent;
++ int compressed_configs = 0;
+ while ( XCheckTypedWindowEvent( x11Display(), winId(), ConfigureNotify,
+ &otherEvent ) ) {
+ if ( qt_x11EventFilter( &otherEvent ) )
+@@ -5869,7 +5915,18 @@ bool QETWidget::translateConfigEvent( co
+ newCPos.ry() = otherEvent.xconfigure.y +
+ otherEvent.xconfigure.border_width;
+ }
++ ++compressed_configs;
++ }
++#ifndef QT_NO_XSYNC
++ // _NET_WM_SYNC_REQUEST compression
++ Window wid = winId();
++ while ( compressed_configs &&
++ XCheckIfEvent( x11Display(), &otherEvent,
++ qt_net_wm_sync_request_scanner, (XPointer)&wid ) ) {
++ handleSyncRequest( (void*)&otherEvent );
++ --compressed_configs;
+ }
++#endif
+ }
+
+ QRect cr ( geometry() );
+@@ -5923,6 +5980,8 @@ bool QETWidget::translateConfigEvent( co
+ repaint( !testWFlags(WResizeNoErase) || transbg );
+ }
+
++ incrementSyncCounter();
++
+ return TRUE;
+ }
+
diff --git a/opensuse/core/qt3/0085-fix-buildkey.diff b/opensuse/core/qt3/0085-fix-buildkey.diff
new file mode 100644
index 000000000..5891d6144
--- /dev/null
+++ b/opensuse/core/qt3/0085-fix-buildkey.diff
@@ -0,0 +1,22 @@
+--- configure
++++ configure
+@@ -3140,15 +3140,15 @@ case "$COMPILER" in
+ g++*)
+ # GNU C++
+ QMAKE_CONF_COMPILER=`grep "QMAKE_CXX[^_A-Z0-9a-z]" $QMAKESPEC/qmake.conf | sed "s,.* *= *\(.*\)$,\1,"`
+- COMPILER_VERSION=`${QMAKE_CONF_COMPILER} --version 2>/dev/null`
++ COMPILER_VERSION=`${QMAKE_CONF_COMPILER} --version 2>/dev/null | sed 's,^[^0-9]*,,g'`
+ case "$COMPILER_VERSION" in
+- *2.95.*)
++ 2.95.*)
+ COMPILER_VERSION="2.95.*"
+ ;;
+- *3.*)
++ 3.*)
+ COMPILER_VERSION="3.*"
+ ;;
+- *4.*)
++ 4.*)
+ COMPILER_VERSION="4"
+ ;;
+ *)
diff --git a/opensuse/core/qt3/add_qexport_visibility.patch b/opensuse/core/qt3/add_qexport_visibility.patch
new file mode 100644
index 000000000..da256192c
--- /dev/null
+++ b/opensuse/core/qt3/add_qexport_visibility.patch
@@ -0,0 +1,63 @@
+Index: src/kernel/qgplugin.h
+================================================================================
+--- src/kernel/qgplugin.h
++++ src/kernel/qgplugin.h
+@@ -90,35 +90,19 @@
+ return i->iface(); \
+ }
+
+-# ifdef Q_WS_WIN
+-# ifdef Q_CC_BOR
+-# define Q_EXPORT_PLUGIN(PLUGIN) \
+- Q_PLUGIN_VERIFICATION_DATA \
+- Q_EXTERN_C __declspec(dllexport) \
+- const char * __stdcall qt_ucm_query_verification_data() \
+- { return qt_ucm_verification_data; } \
+- Q_EXTERN_C __declspec(dllexport) QUnknownInterface* \
+- __stdcall ucm_instantiate() \
+- Q_PLUGIN_INSTANTIATE( PLUGIN )
+-# else
+-# define Q_EXPORT_PLUGIN(PLUGIN) \
+- Q_PLUGIN_VERIFICATION_DATA \
+- Q_EXTERN_C __declspec(dllexport) \
+- const char *qt_ucm_query_verification_data() \
+- { return qt_ucm_verification_data; } \
+- Q_EXTERN_C __declspec(dllexport) QUnknownInterface* ucm_instantiate() \
+- Q_PLUGIN_INSTANTIATE( PLUGIN )
+-# endif
+-# else
+-# define Q_EXPORT_PLUGIN(PLUGIN) \
++#if defined(Q_WS_WIN) && defined(Q_CC_BOR)
++# define Q_STDCALL __stdcall
++#else
++# define Q_STDCALL
++#endif
++
++#define Q_EXPORT_PLUGIN(PLUGIN) \
+ Q_PLUGIN_VERIFICATION_DATA \
+- Q_EXTERN_C \
+- const char *qt_ucm_query_verification_data() \
++ Q_EXTERN_C Q_EXPORT \
++ const char * Q_STDCALL qt_ucm_query_verification_data() \
+ { return qt_ucm_verification_data; } \
+- Q_EXTERN_C QUnknownInterface* ucm_instantiate() \
++ Q_EXTERN_C Q_EXPORT QUnknownInterface* Q_STDCALL ucm_instantiate() \
+ Q_PLUGIN_INSTANTIATE( PLUGIN )
+-# endif
+-
+ #endif
+
+ struct QUnknownInterface;
+--- src/tools/qglobal.h
++++ src/tools/qglobal.h
+@@ -882,6 +882,10 @@
+ # define Q_TEMPLATE_EXTERN
+ # undef Q_DISABLE_COPY /* avoid unresolved externals */
+ # endif
++#elif defined(Q_CC_GNU) && __GNUC__ - 0 >= 4
++# define Q_EXPORT __attribute__((visibility("default")))
++# undef QT_MAKEDLL /* ignore these for other platforms */
++# undef QT_DLL
+ #else
+ # undef QT_MAKEDLL /* ignore these for other platforms */
+ # undef QT_DLL
diff --git a/opensuse/core/qt3/aliasing.diff b/opensuse/core/qt3/aliasing.diff
new file mode 100644
index 000000000..88ef366b5
--- /dev/null
+++ b/opensuse/core/qt3/aliasing.diff
@@ -0,0 +1,11 @@
+--- src/qt.pro
++++ src/qt.pro
+@@ -40,6 +40,8 @@
+ XML_CPP = xml
+ STYLES_CPP = styles
+ EMBEDDED_CPP = embedded
++QMAKE_CFLAGS += -fno-strict-aliasing
++QMAKE_CFLAGS_MT += -fno-strict-aliasing
+
+ win32 {
+ contains(QT_PRODUCT,qt-internal) {
diff --git a/opensuse/core/qt3/assistant3.desktop b/opensuse/core/qt3/assistant3.desktop
new file mode 100644
index 000000000..8cb79809c
--- /dev/null
+++ b/opensuse/core/qt3/assistant3.desktop
@@ -0,0 +1,10 @@
+[Desktop Entry]
+Categories=Qt;Development;
+Encoding=UTF-8
+Exec=/usr/lib/qt3/bin/assistant
+Name=Qt Assistant
+GenericName=Document Browser
+X-KDE-StartupNotify=true
+Icon=assistant3
+Terminal=false
+Type=Application
diff --git a/opensuse/core/qt3/assistant3.png b/opensuse/core/qt3/assistant3.png
new file mode 100644
index 000000000..a50dc9ccb
--- /dev/null
+++ b/opensuse/core/qt3/assistant3.png
Binary files differ
diff --git a/opensuse/core/qt3/attributes b/opensuse/core/qt3/attributes
new file mode 100644
index 000000000..d43c40132
--- /dev/null
+++ b/opensuse/core/qt3/attributes
@@ -0,0 +1,72 @@
+summary.qt3 A library for developing applications with graphical user interfaces
+summary.qt3-devel Include Files and Libraries mandatory for Development
+summary.qt3-devel-doc Documentation for the Qt 3 Development Kit
+summary.qt3-devel-examples Programming Examples for Qt 3
+summary.qt3-devel-tools User Interface Builder and other tools (designer, assistant, linguist)
+summary.qt3-extensions Qt3 Extensions
+summary.qt3-man Qt 3 Man Pages
+summary.qt3-mysql MySQL Plug-In for Qt
+summary.qt3-postgresql A PostgreSQL Plug-In for Qt
+summary.qt3-sqlite SQLite Database Plug-In for Qt
+summary.qt3-unixODBC A UnixODBC Plug-In for Qt
++description.qt3
+Qt is a program library for developing applications with graphical user
+interfaces. It allows you to rapidly develop professional programs. The
+Qt library is available not only for Linux but for a great number of
+Unices and even for Windows. Thus it is possible to write programs that
+may be easily ported to those platforms.
+
+You need a license for using Qt with a non-GPL application, which can
+be acquired from sales@trolltech.com.
+
+See /usr/share/doc/packages/qt3 for details about the new features of
+the current Qt library!
+-description.qt3
++description.qt3-devel
+You need this package if you want to compile programs with Qt 3. It
+contains the "Qt Crossplatform Development Kit 2". Under /usr/lib/qt3
+you will find include files.
+
+You need a license for using Qt with a non-GPL application. A license
+can be acquired at sales@trolltech.com.
+-description.qt3-devel
++description.qt3-devel-doc
+This package contains the documentation for the Qt 3 Development Kit.
+
+You will find documentation, precompiled examples, and a tutorial for
+getting started with Qt in /usr/lib/qt3/doc.
+-description.qt3-devel-doc
++description.qt3-devel-examples
+This package contains small executables with code to demonstrate Qt
+programming.
+
+Have a look in /usr/share/doc/packages/qt3/examples/.
+-description.qt3-devel-examples
++description.qt3-devel-tools
+The designer creates .ui files. The uic generates C++ code from these
+files. The package also contains the Qt Assistant (Qt documentation
+browser) and the Qt Linguist (for translations).
+-description.qt3-devel-tools
++description.qt3-extensions
+This package contains extension libraries for Qt 3, such as the
+Netscape plug-in modules.
+-description.qt3-extensions
++description.qt3-man
+This package contains all the man pages for all the Qt 3 classes.
+-description.qt3-man
++description.qt3-mysql
+Plug-in for using the MySQL database with the generic Qt database
+interface.
+-description.qt3-mysql
++description.qt3-postgresql
+A Plug-in for using the PostgreSQL database with the generic Qt
+database interface.
+-description.qt3-postgresql
++description.qt3-sqlite
+The Qt database supports SQLite with this plug-in. (No configured and
+running daemon is required.)
+-description.qt3-sqlite
++description.qt3-unixODBC
+A plug-in for using UnixODBC supported databases with the generic Qt
+database interface.
+-description.qt3-unixODBC
diff --git a/opensuse/core/qt3/baselibs.conf b/opensuse/core/qt3/baselibs.conf
new file mode 100644
index 000000000..5f7a62512
--- /dev/null
+++ b/opensuse/core/qt3/baselibs.conf
@@ -0,0 +1,12 @@
+qt3
+qt3-devel
+arch ppc package qt3-devel-doc
+arch sparcv9 package qt3-devel-doc
+arch ppc package qt3-devel-tools
+arch sparcv9 package qt3-devel-tools
+arch ppc package qt3-mysql
+arch sparcv9 package qt3-mysql
+arch ppc package qt3-postgresql
+arch sparcv9 package qt3-postgresql
+arch ppc package qt3-unixODBC
+arch sparcv9 package qt3-unixODBC
diff --git a/opensuse/core/qt3/build_script.sh b/opensuse/core/qt3/build_script.sh
new file mode 100644
index 000000000..e9c47db13
--- /dev/null
+++ b/opensuse/core/qt3/build_script.sh
@@ -0,0 +1,99 @@
+
+function fix_qconfig_h {
+ mv include/qconfig.h include/qconfig.h.orig
+ sed -e '1i\
+#ifndef SuSE_QCONFIG_ALREADY_INCLUDED \
+#define SuSE_QCONFIG_ALREADY_INCLUDED 1 \
+#define PLUGIN_PATH_EXTENSION "'$PLUGIN_PATH'" \
+ ' -e s@${RPM_BUILD_ROOT}@/@ -e '$a\
+#endif' include/qconfig.h.orig \
+ > include/qconfig.h
+
+}
+
+function call_configure {
+ EXTRA_OPTIONS=$@
+ OPENGL="-dlopen-opengl"
+ case $EXTRA_OPTIONS in
+ *-static*)
+ OPENGL="-no-dlopen-opengl"
+ ;;
+ *)
+ ;;
+ esac
+
+ [ "$WLIB" == "lib64" ] && PLATFORM=linux-g++-64 || PLATFORM=linux-g++
+ LARGEFILE="-largefile"
+ XCURSOR="-xcursor"
+ XFT="-xft -xrender -I/usr/include/freetype2/ "
+ [ -e /usr/$WLIB/libmng.so ] && LIBMNG="-system-libmng -plugin-imgfmt-mng" || LIBMNG="-qt-libmng "
+ PGSQL="-plugin-sql-psql -I/usr/include -I/usr/include/pgsql/ -I/usr/include/pgsql/server"
+ ODBC="-plugin-sql-odbc"
+
+ if [ -f /.buildenv ] && grep -q BUILD_BASENAME=beta- /.buildenv ; then
+ export NO_BRP_STRIP_DEBUG=true
+ export DEBUG="-debug"
+ else
+ export DEBUG="-release"
+ fi
+
+ PREFIX=/usr/lib/qt3/
+ export LD_LIBRARY_PATH="/${PWD}/lib/"
+ ORACLE="/opt/oracle/product/8.1.6/rdbms/demo/"
+ [ -d $ORACLE ] && \
+ ORACLE="-plugin-sql-oci -I$ORACLE" || \
+ ORACLE=""
+
+ for i in mkspecs/linux-*/qmake.conf ; do
+ sed \
+-e "s,QMAKE_CFLAGS_RELEASE[\t ]*=.*,QMAKE_CFLAGS_RELEASE = $RPM_OPT_FLAGS," \
+-e "s,QMAKE_CFLAGS[\t ]*=.*,QMAKE_CFLAGS = -pipe $RPM_OPT_FLAGS," \
+-e "s,QMAKE_INCDIR[\t ]*=.*,QMAKE_INCDIR = /usr/include/," \
+-e "s,QMAKE_LIBDIR[\t ]*=.*,QMAKE_LIBDIR = /usr/$WLIB/," \
+-e "s,QMAKE_LIBDIR_X11[\t ]*=.*,QMAKE_LIBDIR_X11 = /usr/X11R6/$WLIB/," \
+-e "s,QMAKE_LIBDIR_QT[\t ]*=.*,QMAKE_LIBDIR_QT = \$(QTDIR)/$WLIB/," \
+-e "s,QMAKE_INCDIR_OPENGL[\t ]*=.*,QMAKE_INCDIR_OPENGL = /usr/include/," \
+-e "s,QMAKE_LIBDIR_OPENGL[\t ]*=.*,QMAKE_LIBDIR_OPENGL = /usr/$WLIB/," \
+ $i > ${i}.new &&\
+ mv ${i}.new $i
+ done
+ sed -e "s/^CXXFLAGS=/CXXFLAGS= $RPM_OPT_FLAGS/" < qmake/Makefile.unix > qmake/Makefile.unix.tmp && mv qmake/Makefile.unix.tmp qmake/Makefile.unix
+# ld -Bsymbolic-functions -v >& /dev/null && perl -pi -e 's/^QMAKE_VARS=$/QMAKE_VARS="QMAKE_LFLAGS=-Wl,-Bdirect QMAKE_LFLAGS+=-Wl,-Bsymbolic-functions"/' configure
+
+# png is direct linked, other picture formats are loaded at runtime
+ OPTIONS="-platform $PLATFORM -qt-gif -stl $DEBUG \
+ -system-zlib -system-libjpeg -system-libpng \
+ -plugin-imgfmt-jpeg -inputmethod \
+ -nis -cups -ipv6 $OPENGL \
+ -xkb $LIBMNG -no-g++-exceptions $LARGEFILE $XCURSOR \
+ $XFT $XINERAMA -sm -L/usr/$WLIB -L/usr/X11R6/$WLIB \
+ -plugin-sql-mysql -I/usr/include/mysql/ \
+ -tablet $ORACLE $PGSQL $ODBC -plugin-sql-sqlite $NEWABI \
+ -prefix $PREFIX -libdir $PREFIX/$WLIB"
+
+# use styles as plugins, beside platinum. leave windowsxp disabled
+# nice idea, but too many dumb apps have a hardcoded style list :(
+# for i in plugins/src/styles/* ; do
+# if [ -d $i -a ${i##*/} != "platinum" -a ${i##*/} != "windowsxp" ]
+# then OPTIONS="$OPTIONS -plugin-style-${i##*/}"
+# fi
+# done
+
+ [ -e /usr/$WLIB/mysql/ ] && OPTIONS="$OPTIONS -L/usr/$WLIB/mysql/"
+
+# get sure we use the lib from the system
+ rm -rf src/3rdparty/{libjpeg,libmng,libpng,sqlite,zlib}
+
+ export PATH=$PWD/bin:$PATH
+ echo yes|./configure $OPTIONS $EXTRA_OPTIONS
+
+# make sure we don't have a crippled qt
+ grep -q "full-config\"" include/qconfig.h || { echo "build key is wrong"; exit 42; }
+}
+
+function post_install {
+ if echo $RPM_OPT_FLAGS | grep -q -- -g ; then
+ export NO_BRP_STRIP_DEBUG=true
+ fi
+}
+
diff --git a/opensuse/core/qt3/designer.desktop b/opensuse/core/qt3/designer.desktop
new file mode 100644
index 000000000..e0026aef9
--- /dev/null
+++ b/opensuse/core/qt3/designer.desktop
@@ -0,0 +1,11 @@
+[Desktop Entry]
+Encoding=UTF-8
+Exec=designer
+Name=Qt Designer
+GenericName=Interface Designer
+X-KDE-StartupNotify=true
+MimeType=application/x-designer;
+Icon=designer
+Terminal=false
+Type=Application
+
diff --git a/opensuse/core/qt3/designer.png b/opensuse/core/qt3/designer.png
new file mode 100644
index 000000000..3f6fa7a10
--- /dev/null
+++ b/opensuse/core/qt3/designer.png
Binary files differ
diff --git a/opensuse/core/qt3/enable-designer-plugins.diff b/opensuse/core/qt3/enable-designer-plugins.diff
new file mode 100644
index 000000000..41147984d
--- /dev/null
+++ b/opensuse/core/qt3/enable-designer-plugins.diff
@@ -0,0 +1,11 @@
+--- tools/designer/plugins/plugins.pro
++++ tools/designer/plugins/plugins.pro
+@@ -4,6 +4,7 @@
+ dlg \
+ glade \
+ rc \
+- kdevdlg
++ kdevdlg \
++ glade
+ shared:SUBDIRS *= $$PLUGIN_DIRS
+ dll:SUBDIRS *= $$PLUGIN_DIRS
diff --git a/opensuse/core/qt3/external-libs.diff b/opensuse/core/qt3/external-libs.diff
new file mode 100644
index 000000000..dcf7f04ae
--- /dev/null
+++ b/opensuse/core/qt3/external-libs.diff
@@ -0,0 +1,78 @@
+--- plugins/src/sqldrivers/sqlite/sqlite.pro
++++ plugins/src/sqldrivers/sqlite/sqlite.pro
+@@ -10,6 +10,9 @@
+
+ unix {
+ OBJECTS_DIR = .obj
++ !contains( LIBS, .*sqlite.* ) {
++ LIBS *= -lsqlite
++ }
+ }
+
+ win32 {
+@@ -23,54 +26,6 @@
+ # }
+ }
+
+-!contains( LIBS, .*sqlite.* ) {
+- INCLUDEPATH += ../../../../src/3rdparty/sqlite
+-
+- HEADERS += ../../../../src/3rdparty/sqlite/btree.h \
+- ../../../../src/3rdparty/sqlite/config.h \
+- ../../../../src/3rdparty/sqlite/hash.h \
+- ../../../../src/3rdparty/sqlite/opcodes.h \
+- ../../../../src/3rdparty/sqlite/os.h \
+- ../../../../src/3rdparty/sqlite/pager.h \
+- ../../../../src/3rdparty/sqlite/parse.h \
+- ../../../../src/3rdparty/sqlite/sqlite.h \
+- ../../../../src/3rdparty/sqlite/sqliteInt.h \
+- ../../../../src/3rdparty/sqlite/vdbe.h \
+- ../../../../src/3rdparty/sqlite/vdbeInt.h
+-
+- SOURCES += ../../../../src/3rdparty/sqlite/attach.c \
+- ../../../../src/3rdparty/sqlite/auth.c \
+- ../../../../src/3rdparty/sqlite/btree.c \
+- ../../../../src/3rdparty/sqlite/btree_rb.c \
+- ../../../../src/3rdparty/sqlite/build.c \
+- ../../../../src/3rdparty/sqlite/copy.c \
+- ../../../../src/3rdparty/sqlite/date.c \
+- ../../../../src/3rdparty/sqlite/delete.c \
+- ../../../../src/3rdparty/sqlite/expr.c \
+- ../../../../src/3rdparty/sqlite/func.c \
+- ../../../../src/3rdparty/sqlite/hash.c \
+- ../../../../src/3rdparty/sqlite/insert.c \
+- ../../../../src/3rdparty/sqlite/main.c \
+- ../../../../src/3rdparty/sqlite/opcodes.c \
+- ../../../../src/3rdparty/sqlite/os.c \
+- ../../../../src/3rdparty/sqlite/pager.c \
+- ../../../../src/3rdparty/sqlite/parse.c \
+- ../../../../src/3rdparty/sqlite/pragma.c \
+- ../../../../src/3rdparty/sqlite/printf.c \
+- ../../../../src/3rdparty/sqlite/random.c \
+- ../../../../src/3rdparty/sqlite/select.c \
+- ../../../../src/3rdparty/sqlite/shell.c \
+- ../../../../src/3rdparty/sqlite/table.c \
+- ../../../../src/3rdparty/sqlite/tokenize.c \
+- ../../../../src/3rdparty/sqlite/trigger.c \
+- ../../../../src/3rdparty/sqlite/update.c \
+- ../../../../src/3rdparty/sqlite/util.c \
+- ../../../../src/3rdparty/sqlite/vacuum.c \
+- ../../../../src/3rdparty/sqlite/vdbe.c \
+- ../../../../src/3rdparty/sqlite/vdbeaux.c \
+- ../../../../src/3rdparty/sqlite/where.c
+-}
+-
+ REQUIRES = sql
+
+ target.path += $$plugins.path/sqldrivers
+--- src/tools/qcstring.cpp
++++ src/tools/qcstring.cpp
+@@ -50,7 +50,7 @@
+ #include <ctype.h>
+ #include <limits.h>
+ #ifndef QT_NO_COMPRESS
+-#include "../3rdparty/zlib/zlib.h"
++#include <zlib.h>
+ #endif
+
+ /*****************************************************************************
diff --git a/opensuse/core/qt3/fix-GL-loading.diff b/opensuse/core/qt3/fix-GL-loading.diff
new file mode 100644
index 000000000..61c2f379a
--- /dev/null
+++ b/opensuse/core/qt3/fix-GL-loading.diff
@@ -0,0 +1,44 @@
+--- src/opengl/qgl_x11.cpp
++++ src/opengl/qgl_x11.cpp 2004/04/13 14:56:00
+@@ -267,7 +267,7 @@
+ typedef Status (*_XmuLookupStandardColormap)( Display *dpy, int screen, VisualID visualid, unsigned int depth,
+ Atom property, Bool replace, Bool retain );
+ _XmuLookupStandardColormap qt_XmuLookupStandardColormap;
+- qt_XmuLookupStandardColormap = (_XmuLookupStandardColormap) QLibrary::resolve("Xmu", "XmuLookupStandardColormap");
++ qt_XmuLookupStandardColormap = (_XmuLookupStandardColormap) QLibrary::resolve("Xmu.so.6", "XmuLookupStandardColormap");
+ if (!qt_XmuLookupStandardColormap)
+ qFatal("Unable to resolve Xmu symbols - please check your Xmu library installation.");
+ #define XmuLookupStandardColormap qt_XmuLookupStandardColormap
+Index: src/tools/qlibrary.cpp
+===================================================================
+RCS file: /home/kde/qt-copy/src/tools/qlibrary.cpp,v
+retrieving revision 1.26
+diff -u -3 -p -r1.26 qlibrary.cpp
+--- src/tools/qlibrary.cpp 4 Feb 2004 14:25:02 -0000 1.26
++++ src/tools/qlibrary.cpp 2 Jun 2004 08:26:21 -0000
+@@ -424,7 +424,8 @@ QString QLibrary::library() const
+ } else {
+ tmpfilename = QString( "lib%1" ).arg( filename );
+ }
+- tmpfilename += filter;
++ if ( !filename.contains(".so") )
++ tmpfilename += filter;
+ if(QFile::exists(tmpfilename) || it == filters.end()) {
+ filename = tmpfilename;
+ break;
+Index: src/opengl/qgl_x11.cpp
+===================================================================
+RCS file: /home/kde/qt-copy/src/opengl/qgl_x11.cpp,v
+retrieving revision 1.34
+diff -u -3 -p -r1.34 qgl_x11.cpp
+--- src/opengl/qgl_x11.cpp 21 Dec 2003 00:48:09 -0000 1.34
++++ src/opengl/qgl_x11.cpp 2 Jun 2004 08:26:21 -0000
+@@ -116,7 +116,7 @@ bool qt_resolve_gl_symbols(bool fatal)
+ if (gl_syms_resolved)
+ return TRUE;
+
+- QLibrary gl("GL");
++ QLibrary gl("GL.so.1");
+ gl.setAutoUnload(FALSE);
+
+ qt_glCallLists = (_glCallLists) gl.resolve("glCallLists");
diff --git a/opensuse/core/qt3/fix-accessible.diff b/opensuse/core/qt3/fix-accessible.diff
new file mode 100644
index 000000000..9b0aca13b
--- /dev/null
+++ b/opensuse/core/qt3/fix-accessible.diff
@@ -0,0 +1,10 @@
+--- plugins/src/accessible/widgets/widgets.pro
++++ plugins/src/accessible/widgets/widgets.pro
+@@ -13,3 +13,7 @@
+
+ HEADERS += qaccessiblewidget.h \
+ qaccessiblemenu.h
++
++target.path += $$plugins.path/accessible
++INSTALLS += target
++
diff --git a/opensuse/core/qt3/fix-assistant-path.patch b/opensuse/core/qt3/fix-assistant-path.patch
new file mode 100644
index 000000000..3f30e7013
--- /dev/null
+++ b/opensuse/core/qt3/fix-assistant-path.patch
@@ -0,0 +1,11 @@
+--- tools/assistant/lib/qassistantclient.cpp
++++ tools/assistant/lib/qassistantclient.cpp
+@@ -128,7 +128,7 @@
+ : QObject( parent, name ), host ( "localhost" )
+ {
+ if ( path.isEmpty() )
+- assistantCommand = "assistant";
++ assistantCommand = "/usr/lib/qt3/bin/assistant";
+ else {
+ QFileInfo fi( path );
+ if ( fi.isDir() )
diff --git a/opensuse/core/qt3/fix-key-release-event-with-imm.diff b/opensuse/core/qt3/fix-key-release-event-with-imm.diff
new file mode 100644
index 000000000..3bd1b8da2
--- /dev/null
+++ b/opensuse/core/qt3/fix-key-release-event-with-imm.diff
@@ -0,0 +1,55 @@
+--- src/kernel/qapplication_x11.cpp
++++ src/kernel/qapplication_x11.cpp
+@@ -3294,11 +3294,7 @@
+ // filtering opportunity first to ensure all input methods work
+ // properly regardless of application design.
+
+-#ifndef QT_NO_IM_EXTENSIONS
+ if( keywidget && keywidget->isEnabled() && keywidget->isInputMethodEnabled() ) {
+-#else
+- if( keywidget && keywidget->isEnabled() ) {
+-#endif
+ if( ( event->type==XKeyPress || event->type==XKeyRelease ) &&
+ sm_blockUserInput ) // block user interaction during session management
+ return TRUE;
+@@ -5220,11 +5216,12 @@
+ } else {
+ key = (int)(long)keyDict->find( keycode );
+ if ( key )
+- if( !willRepeat ) // Take out key of dictionary only if this call.
++ if( !willRepeat && statefulTranslation ) // Take out key of dictionary only if this call.
+ keyDict->take( keycode );
+ long s = (long)textDict->find( keycode );
+ if ( s ) {
+- textDict->take( keycode );
++ if( statefulTranslation )
++ textDict->take( keycode );
+ ascii = (char)(s-256);
+ }
+ }
+--- src/kernel/qwidget_x11.cpp
++++ src/kernel/qwidget_x11.cpp
+@@ -2699,11 +2699,10 @@
+ {
+ QInputContext *qic = 0;
+
+-#if !defined(QT_NO_IM_EXTENSIONS)
+ if ( isInputMethodEnabled() ) {
++#if !defined(QT_NO_IM_EXTENSIONS)
+ qic = icHolderWidget()->ic;
+ #else
+- {
+ // icHolderWidget is always topLevelWidget
+ QTLWExtra *topdata = icHolderWidget()->topData();
+ qic = (QInputContext *)topdata->xic;
+@@ -2754,10 +2753,8 @@
+ */
+ void QWidget::createInputContext()
+ {
+-#if !defined(QT_NO_IM_EXTENSIONS)
+ if( !isInputMethodEnabled() || QApplication::closingDown() )
+ return;
+-#endif
+
+ QWidget *icWidget = icHolderWidget();
+ #ifndef QT_NO_IM
diff --git a/opensuse/core/qt3/fix-qtranslator-crash.diff b/opensuse/core/qt3/fix-qtranslator-crash.diff
new file mode 100644
index 000000000..e28d7126a
--- /dev/null
+++ b/opensuse/core/qt3/fix-qtranslator-crash.diff
@@ -0,0 +1,11 @@
+--- src/kernel/qtranslator.cpp
++++ src/kernel/qtranslator.cpp
+@@ -1012,7 +1012,7 @@
+ char con[256];
+ for ( ;; ) {
+ t >> len;
+- if ( len == 0 )
++ if ( len == 0 || t.atEnd())
+ return QTranslatorMessage();
+ t.readRawBytes( con, len );
+ con[len] = '\0';
diff --git a/opensuse/core/qt3/fix-xinerama-dialog-placement.diff b/opensuse/core/qt3/fix-xinerama-dialog-placement.diff
new file mode 100644
index 000000000..26ca37c16
--- /dev/null
+++ b/opensuse/core/qt3/fix-xinerama-dialog-placement.diff
@@ -0,0 +1,13 @@
+--- src/dialogs/qdialog.cpp
++++ src/dialogs/qdialog.cpp
+@@ -803,7 +803,9 @@
+ w = w->topLevelWidget();
+ QRect desk;
+ if ( w ) {
+- scrn = QApplication::desktop()->screenNumber( w );
++ // Use mapToGlobal rather than geometry() in case w might
++ // be embedded in another application
++ scrn = QApplication::desktop()->screenNumber( w->mapToGlobal( QPoint(0,0) ) );
+ } else if ( QApplication::desktop()->isVirtualDesktop() ) {
+ scrn = QApplication::desktop()->screenNumber( QCursor::pos() );
+ } else {
diff --git a/opensuse/core/qt3/fix-xinput-clash.diff b/opensuse/core/qt3/fix-xinput-clash.diff
new file mode 100644
index 000000000..2a7011681
--- /dev/null
+++ b/opensuse/core/qt3/fix-xinput-clash.diff
@@ -0,0 +1,37 @@
+--- src/kernel/qtaddons_x11.cpp
++++ src/kernel/qtaddons_x11.cpp
+@@ -22,6 +22,10 @@
+ * PERFORMANCE OF THIS SOFTWARE.
+ */
+
++#ifndef QT_CLEAN_NAMESPACE
++#define QT_CLEAN_NAMESPACE
++#endif
++
+ #include "qt_x11_p.h"
+
+ #if !defined(QT_NO_XFTFREETYPE) && !defined(QT_XFT2)
+--- src/kernel/qt_x11_p.h
++++ src/kernel/qt_x11_p.h
+@@ -86,7 +86,7 @@
+
+
+ // the wacom tablet (currently just the IRIX version)
+-#if defined (QT_TABLET_SUPPORT)
++#if defined (QT_TABLET_SUPPORT) && defined (QT_CLEAN_NAMESPACE)
+ # include <X11/extensions/XInput.h>
+ #if defined (Q_OS_IRIX)
+ # include <wacom.h> // wacom driver defines for IRIX (quite handy)
+--- src/kernel/qwidget_x11.cpp
++++ src/kernel/qwidget_x11.cpp
+@@ -38,6 +38,10 @@
+ **
+ **********************************************************************/
+
++#ifndef QT_CLEAN_NAMESPACE
++#define QT_CLEAN_NAMESPACE
++#endif
++
+ #include "qapplication.h"
+ #include "qapplication_p.h"
+ #include "qnamespace.h"
diff --git a/opensuse/core/qt3/gcc46.diff b/opensuse/core/qt3/gcc46.diff
new file mode 100644
index 000000000..beae96ff2
--- /dev/null
+++ b/opensuse/core/qt3/gcc46.diff
@@ -0,0 +1,56 @@
+Index: src/tools/qvaluelist.h
+===================================================================
+--- src/tools/qvaluelist.h.orig 2011-03-31 20:14:47.200973928 +0200
++++ src/tools/qvaluelist.h 2011-03-31 20:14:55.352615654 +0200
+@@ -50,6 +50,7 @@
+ #ifndef QT_NO_STL
+ #include <iterator>
+ #include <list>
++#include <cstddef>
+ #endif
+
+ //#define QT_CHECK_VALUELIST_RANGE
+Index: src/tools/qvaluevector.h
+===================================================================
+--- src/tools/qvaluevector.h.orig 2008-01-15 20:09:13.000000000 +0100
++++ src/tools/qvaluevector.h 2011-03-31 20:15:15.904712567 +0200
+@@ -244,7 +244,7 @@ public:
+ typedef const value_type& const_reference;
+ typedef size_t size_type;
+ #ifndef QT_NO_STL
+- typedef ptrdiff_t difference_type;
++ typedef std::ptrdiff_t difference_type;
+ #else
+ typedef int difference_type;
+ #endif
+Index: src/tools/qmap.h
+===================================================================
+--- src/tools/qmap.h.orig 2008-01-15 20:09:13.000000000 +0100
++++ src/tools/qmap.h 2011-03-31 20:24:35.802101605 +0200
+@@ -107,7 +107,7 @@ class QMapIterator
+ #endif
+ typedef T value_type;
+ #ifndef QT_NO_STL
+- typedef ptrdiff_t difference_type;
++ typedef std::ptrdiff_t difference_type;
+ #else
+ typedef int difference_type;
+ #endif
+@@ -223,7 +223,7 @@ class QMapConstIterator
+ #endif
+ typedef T value_type;
+ #ifndef QT_NO_STL
+- typedef ptrdiff_t difference_type;
++ typedef std::ptrdiff_t difference_type;
+ #else
+ typedef int difference_type;
+ #endif
+@@ -604,7 +604,7 @@ public:
+ typedef value_type& reference;
+ typedef const value_type& const_reference;
+ #ifndef QT_NO_STL
+- typedef ptrdiff_t difference_type;
++ typedef std::ptrdiff_t difference_type;
+ #else
+ typedef int difference_type;
+ #endif
diff --git a/opensuse/core/qt3/head.diff b/opensuse/core/qt3/head.diff
new file mode 100644
index 000000000..ccc2da0f5
--- /dev/null
+++ b/opensuse/core/qt3/head.diff
@@ -0,0 +1,60 @@
+--- src/3rdparty/libmng/aclocal.m4
++++ src/3rdparty/libmng/aclocal.m4
+@@ -1607,7 +1607,7 @@
+ # If the export-symbols file already is a .def file (1st line
+ # is EXPORTS), use it as is.
+ # If DATA tags from a recent dlltool are present, honour them!
+- archive_expsym_cmds='if test "x`head -1 $export_symbols`" = xEXPORTS; then
++ archive_expsym_cmds='if test "x`head -n 1 $export_symbols`" = xEXPORTS; then
+ cp $export_symbols $output_objdir/$soname-def;
+ else
+ echo EXPORTS > $output_objdir/$soname-def;
+@@ -3546,7 +3546,7 @@
+ lt_cv_file_magic_cmd='/usr/bin/file -L'
+ case "$host_os" in
+ rhapsody* | darwin1.[[012]])
+- lt_cv_file_magic_test_file=`echo /System/Library/Frameworks/System.framework/Versions/*/System | head -1`
++ lt_cv_file_magic_test_file=`echo /System/Library/Frameworks/System.framework/Versions/*/System | head -n 1`
+ ;;
+ *) # Darwin 1.3 on
+ lt_cv_file_magic_test_file='/usr/lib/libSystem.dylib'
+--- src/3rdparty/libmng/config.guess
++++ src/3rdparty/libmng/config.guess
+@@ -319,7 +319,7 @@
+ echo m68k-sun-sunos${UNAME_RELEASE}
+ exit 0 ;;
+ sun*:*:4.2BSD:*)
+- UNAME_RELEASE=`(head -1 /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null`
++ UNAME_RELEASE=`(head -n 1 /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null`
+ test "x${UNAME_RELEASE}" = "x" && UNAME_RELEASE=3
+ case "`/bin/arch`" in
+ sun3)
+@@ -506,7 +506,7 @@
+ fi
+ exit 0 ;;
+ *:AIX:*:[45])
+- IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | head -1 | awk '{ print $1 }'`
++ IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | head -n 1 | awk '{ print $1 }'`
+ if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then
+ IBM_ARCH=rs6000
+ else
+--- src/3rdparty/libmng/configure
++++ src/3rdparty/libmng/configure
+@@ -1956,7 +1956,7 @@
+ lt_cv_file_magic_cmd='/usr/bin/file -L'
+ case "$host_os" in
+ rhapsody* | darwin1.[012])
+- lt_cv_file_magic_test_file=`echo /System/Library/Frameworks/System.framework/Versions/*/System | head -1`
++ lt_cv_file_magic_test_file=`echo /System/Library/Frameworks/System.framework/Versions/*/System | head -n 1`
+ ;;
+ *) # Darwin 1.3 on
+ lt_cv_file_magic_test_file='/usr/lib/libSystem.dylib'
+@@ -3433,7 +3433,7 @@
+ # If the export-symbols file already is a .def file (1st line
+ # is EXPORTS), use it as is.
+ # If DATA tags from a recent dlltool are present, honour them!
+- archive_expsym_cmds='if test "x`head -1 $export_symbols`" = xEXPORTS; then
++ archive_expsym_cmds='if test "x`head -n 1 $export_symbols`" = xEXPORTS; then
+ cp $export_symbols $output_objdir/$soname-def;
+ else
+ echo EXPORTS > $output_objdir/$soname-def;
diff --git a/opensuse/core/qt3/kmenu-search-fix.diff b/opensuse/core/qt3/kmenu-search-fix.diff
new file mode 100644
index 000000000..8aff068ad
--- /dev/null
+++ b/opensuse/core/qt3/kmenu-search-fix.diff
@@ -0,0 +1,10 @@
+--- src/widgets/qpopupmenu.cpp
++++ src/widgets/qpopupmenu.cpp
+@@ -1354,6 +1354,7 @@
+ performDelayedChanges();
+ updateSize(TRUE);
+ QWidget::show();
++ updateSize();
+ popupActive = -1;
+ if(style().styleHint(QStyle::SH_PopupMenu_SubMenuPopupDelay, this))
+ d->mouseMoveBuffer = QRegion();
diff --git a/opensuse/core/qt3/lib64-plugin-support.diff b/opensuse/core/qt3/lib64-plugin-support.diff
new file mode 100644
index 000000000..384673269
--- /dev/null
+++ b/opensuse/core/qt3/lib64-plugin-support.diff
@@ -0,0 +1,12 @@
+--- src/tools/qgpluginmanager.cpp
++++ src/tools/qgpluginmanager.cpp 2004/09/25 11:46:41
+@@ -377,6 +377,9 @@
+ QString basename = (*git).left( (*git).find( QChar(0xfffd) ) );
+ ++git;
+
++ // WARNING: this line should only exist on lib64 systems !
++ basename += ".lib64";
++
+ QStringList sameBasename;
+ while( git != group.end() &&
+ basename == (*git).left( (*git).find( QChar(0xfffd) ) ) ) {
diff --git a/opensuse/core/qt3/limit-image-size.diff b/opensuse/core/qt3/limit-image-size.diff
new file mode 100644
index 000000000..dcf8d6f21
--- /dev/null
+++ b/opensuse/core/qt3/limit-image-size.diff
@@ -0,0 +1,103 @@
+Index: kernel/qasyncimageio.cpp
+================================================================================
+--- src/kernel/qasyncimageio.cpp
++++ src/kernel/qasyncimageio.cpp
+@@ -901,7 +901,12 @@
+ sheight = newtop + newheight;
+
+ if (img.isNull()) {
+- img.create(swidth, sheight, 32);
++ bool ok = img.create(swidth, sheight, 32);
++ if (!ok)
++ {
++ state = Error;
++ break;
++ }
+ memset( img.bits(), 0, img.numBytes() );
+ if (consumer) consumer->setSize(swidth, sheight);
+ }
+@@ -956,9 +961,15 @@
+ if (backingstore.width() < w
+ || backingstore.height() < h) {
+ // We just use the backing store as a byte array
+- backingstore.create( QMAX(backingstore.width(), w),
++ bool ok = backingstore.create(
++ QMAX(backingstore.width(), w),
+ QMAX(backingstore.height(), h),
+ 32);
++ if (!ok)
++ {
++ state = Error;
++ break;
++ }
+ memset( img.bits(), 0, img.numBytes() );
+ }
+ for (int ln=0; ln<h; ln++) {
+--- src/kernel/qimage.cpp
++++ src/kernel/qimage.cpp
+@@ -65,6 +65,8 @@
+ #define QT_NO_IMAGE_16_BIT
+ #endif
+
++int qt_max_image_height = 0;
++int qt_max_image_width = 0;
+
+ /*!
+ \class QImage
+@@ -1201,6 +1203,28 @@
+ data->alpha = enable;
+ }
+
++QSize QImage::maxImageSize()
++{
++ if (!qt_max_image_height || !qt_max_image_width)
++ return QSize();
++ return QSize(qt_max_image_height, qt_max_image_width);
++}
++
++void QImage::setMaxImageSize(const QSize &size)
++{
++ if (size.isValid())
++ {
++ qt_max_image_height = size.height();
++ qt_max_image_width = size.width();
++ }
++ else
++ {
++ qt_max_image_height = 0;
++ qt_max_image_width = 0;
++ }
++}
++
++
+
+ /*!
+ Sets the image \a width, \a height, \a depth, its number of colors
+@@ -1230,6 +1254,14 @@
+ reset(); // reset old data
+ if ( width <= 0 || height <= 0 || depth <= 0 || numColors < 0 )
+ return FALSE; // invalid parameter(s)
++ if ( qt_max_image_height && (height > qt_max_image_height * 4))
++ return FALSE; // Too high
++ if ( qt_max_image_width && (width > qt_max_image_width * 4))
++ return FALSE; // Too wide
++ if ( qt_max_image_height && qt_max_image_width &&
++ (height * width > qt_max_image_height * qt_max_image_width))
++ return FALSE; // Too large
++
+ if ( depth == 1 && bitOrder == IgnoreEndian ) {
+ #if defined(QT_CHECK_RANGE)
+ qWarning( "QImage::create: Bit order is required for 1 bpp images" );
+--- src/kernel/qimage.h
++++ src/kernel/qimage.h
+@@ -194,6 +194,10 @@
+ int quality=-1 ) const;
+ bool save( QIODevice * device, const char* format,
+ int quality=-1 ) const;
++
++#define QT_HAVE_MAX_IMAGE_SIZE
++ static QSize maxImageSize();
++ static void setMaxImageSize(const QSize &size);
+ #endif //QT_NO_IMAGEIO
+
+ bool valid( int x, int y ) const;
diff --git a/opensuse/core/qt3/linguist.desktop b/opensuse/core/qt3/linguist.desktop
new file mode 100644
index 000000000..7cfb9d093
--- /dev/null
+++ b/opensuse/core/qt3/linguist.desktop
@@ -0,0 +1,11 @@
+[Desktop Entry]
+Encoding=UTF-8
+Exec=linguist
+Name=Qt Linguist
+GenericName=Translation Tool
+X-KDE-StartupNotify=true
+MimeType=application/x-linguist;
+Terminal=false
+Type=Application
+Icon=linguist
+
diff --git a/opensuse/core/qt3/linguist.png b/opensuse/core/qt3/linguist.png
new file mode 100644
index 000000000..90e143b65
--- /dev/null
+++ b/opensuse/core/qt3/linguist.png
Binary files differ
diff --git a/opensuse/core/qt3/mng-reading-fix.patch b/opensuse/core/qt3/mng-reading-fix.patch
new file mode 100644
index 000000000..f0582ac6c
--- /dev/null
+++ b/opensuse/core/qt3/mng-reading-fix.patch
@@ -0,0 +1,30 @@
+--- src/kernel/qmngio.cpp.sav 2007-02-23 14:01:19.000000000 +0100
++++ src/kernel/qmngio.cpp 2007-08-28 15:27:28.000000000 +0200
+@@ -411,8 +411,11 @@ int QMNGFormat::decode( QImage& img, QIm
+ }
+
+ losttime += losingtimer.elapsed();
+- if ( ndata || !length )
+- mng_display_resume(handle);
++ bool needmore = false;
++ if ( ndata ) {
++ mng_retcode r = mng_display_resume(handle);
++ needmore = ( r == MNG_NEEDMOREDATA );
++ }
+ losingtimer.start();
+
+ image = 0;
+@@ -422,6 +425,13 @@ int QMNGFormat::decode( QImage& img, QIm
+ // Move back unused tail
+ memcpy(buffer,buffer+ubuffer,nbuffer);
+ }
++ // "The function should return without processing all the data if it reaches the end of a frame in the input."
++ if( ndata && !needmore ) {
++ length -= ndata;
++ ndata = 0;
++ if( length == 0 ) // 0 means done, process at least one byte
++ length = ndata = 1;
++ }
+ if ( ndata ) {
+ // Not all used.
+ enlargeBuffer(nbuffer+ndata);
diff --git a/opensuse/core/qt3/no-rpath.dif b/opensuse/core/qt3/no-rpath.dif
new file mode 100644
index 000000000..fa4a88215
--- /dev/null
+++ b/opensuse/core/qt3/no-rpath.dif
@@ -0,0 +1,21 @@
+--- mkspecs/linux-g++-64/qmake.conf
++++ mkspecs/linux-g++-64/qmake.conf
+@@ -58,7 +58,7 @@
+ QMAKE_LFLAGS_PLUGIN = $$QMAKE_LFLAGS_SHLIB
+ QMAKE_LFLAGS_SONAME = -Wl,-soname,
+ QMAKE_LFLAGS_THREAD =
+-QMAKE_RPATH = -Wl,-rpath,
++QMAKE_RPATH =
+
+ QMAKE_LIBS =
+ QMAKE_LIBS_DYNLOAD = -ldl
+--- mkspecs/linux-g++/qmake.conf
++++ mkspecs/linux-g++/qmake.conf
+@@ -55,7 +55,6 @@
+ QMAKE_LFLAGS_PLUGIN = $$QMAKE_LFLAGS_SHLIB
+ QMAKE_LFLAGS_SONAME = -Wl,-soname,
+ QMAKE_LFLAGS_THREAD =
+-QMAKE_RPATH = -Wl,-rpath,
+
+ QMAKE_LIBS =
+ QMAKE_LIBS_DYNLOAD = -ldl
diff --git a/opensuse/core/qt3/parseFontName.diff b/opensuse/core/qt3/parseFontName.diff
new file mode 100644
index 000000000..eb0c6cbea
--- /dev/null
+++ b/opensuse/core/qt3/parseFontName.diff
@@ -0,0 +1,18 @@
+--- src/kernel/qfontdatabase.cpp
++++ src/kernel/qfontdatabase.cpp
+@@ -2470,11 +2470,14 @@ void QFontDatabase::parseFontName(const
+ int i = name.find('[');
+ int li = name.findRev(']');
+
+- if (i < li) {
++ if (i > 0 && i + 1 < li) {
+ foundry = name.mid(i + 1, li - i - 1);
+ if (name[i - 1] == ' ')
+ i--;
+ family = name.left(i);
++ } else {
++ foundry = QString::null;
++ family = name;
+ }
+ } else {
+ foundry = QString::null;
diff --git a/opensuse/core/qt3/pluginmanager-fix.diff b/opensuse/core/qt3/pluginmanager-fix.diff
new file mode 100644
index 000000000..88ad08ae4
--- /dev/null
+++ b/opensuse/core/qt3/pluginmanager-fix.diff
@@ -0,0 +1,11 @@
+--- src/tools/qgpluginmanager.cpp
++++ src/tools/qgpluginmanager.cpp
+@@ -383,6 +383,8 @@
+ sameBasename << (*git).mid( (*git).find( QChar(0xfffd) ) + 1 );
+ ++git;
+ }
++ if( !sameBasename.isEmpty())
++ sameBasename.prepend( lib );
+
+ if ( sameBasename.isEmpty() ) {
+ that->addLibrary( new QComLibrary( lib ) );
diff --git a/opensuse/core/qt3/popen-leak-fix.diff b/opensuse/core/qt3/popen-leak-fix.diff
new file mode 100644
index 000000000..a00ab02a5
--- /dev/null
+++ b/opensuse/core/qt3/popen-leak-fix.diff
@@ -0,0 +1,10 @@
+--- tools/linguist/shared/proparser.cpp
++++ tools/linguist/shared/proparser.cpp
+@@ -207,6 +207,7 @@ QMap<QString, QString> proFileTagMap( const QString& text )
+ buff[read_in] = '\0';
+ after += buff;
+ }
++ pclose( proc );
+ (*it).replace( i, callToSystem.matchedLength(), after );
+ i += after.length();
+ }
diff --git a/opensuse/core/qt3/pre_checkin.sh b/opensuse/core/qt3/pre_checkin.sh
new file mode 100644
index 000000000..fd6f089b5
--- /dev/null
+++ b/opensuse/core/qt3/pre_checkin.sh
@@ -0,0 +1,14 @@
+#!/bin/bash
+# This script is called automatically during autobuild checkin.
+
+cp -fl qt3.changes qt3-extensions.changes
+cp -fl qt3.changes qt3-devel-doc.changes
+
+for spec in qt3-extensions.spec qt3-devel-doc.spec; do
+{ sed -n -e '1,/COMMON-BEGIN/p' $spec.in
+ sed -n -e '/COMMON-BEGIN/,/COMMON-END/p' qt3.spec
+ sed -n -e '/COMMON-END/,$p' $spec.in; } > $spec.tmp && perl update_spec.pl $spec.tmp attributes > $spec && rm $spec.tmp
+done
+
+
+osc service localrun format_spec_file
diff --git a/opensuse/core/qt3/qcstring-format-warnings.diff b/opensuse/core/qt3/qcstring-format-warnings.diff
new file mode 100644
index 000000000..a597dc578
--- /dev/null
+++ b/opensuse/core/qt3/qcstring-format-warnings.diff
@@ -0,0 +1,15 @@
+--- src/tools/qcstring.h (revision 658213)
++++ src/tools/qcstring.h (working copy)
+@@ -161,7 +161,11 @@ public:
+
+ QCString copy() const;
+
+- QCString &sprintf( const char *format, ... );
++ QCString &sprintf( const char *format, ... )
++#if defined(Q_CC_GNU) && !defined(__INSURE__)
++ __attribute__ ((format (printf, 2, 3)))
++#endif
++ ;
+
+ int find( char c, int index=0, bool cs=TRUE ) const;
+ int find( const char *str, int index=0, bool cs=TRUE ) const;
diff --git a/opensuse/core/qt3/qt-3.3.8c.diff b/opensuse/core/qt3/qt-3.3.8c.diff
new file mode 100644
index 000000000..860e99e4b
--- /dev/null
+++ b/opensuse/core/qt3/qt-3.3.8c.diff
@@ -0,0 +1,58 @@
+--- src/kernel/qobject.cpp
++++ src/kernel/qobject.cpp
+@@ -360,6 +360,30 @@
+ }
+ }
+
++/*! \internal
++ TQt compatibility function
++*/
++QObjectList QObject::childrenListObject() {
++ if (children()) return *(children());
++ else return QObjectList();
++}
++
++/*! \internal
++ TQt compatibility function
++*/
++const QObjectList QObject::childrenListObject() const {
++ if (children()) return *(children());
++ else return QObjectList();
++}
++
++/*! \internal
++ TQt compatibility function
++*/
++const QObjectList QObject::objectTreesListObject() {
++ if (objectTrees()) return *(objectTrees());
++ else return QObjectList();
++}
++
+
+ /*****************************************************************************
+ QObject member functions
+--- src/kernel/qobject.h
++++ src/kernel/qobject.h
+@@ -101,8 +101,11 @@
+
+ QObject *child( const char *objName, const char *inheritsClass = 0, bool recursiveSearch = TRUE ); //### const in 4.0
+ const QObjectList *children() const { return childObjects; }
++ QObjectList childrenListObject();
++ const QObjectList childrenListObject() const;
+
+ static const QObjectList *objectTrees();
++ static const QObjectList objectTreesListObject();
+
+ QObjectList *queryList( const char *inheritsClass = 0,
+ const char *objName = 0,
+--- src/tools/qglobal.h
++++ src/tools/qglobal.h
+@@ -41,7 +41,7 @@
+ #ifndef QGLOBAL_H
+ #define QGLOBAL_H
+
+-#define QT_VERSION_STR "3.3.8b"
++#define QT_VERSION_STR "3.3.8c"
+ /*
+ QT_VERSION is (major << 16) + (minor << 8) + patch.
+ */
diff --git a/opensuse/core/qt3/qt-transparency.patch b/opensuse/core/qt3/qt-transparency.patch
new file mode 100644
index 000000000..d2de72f0d
--- /dev/null
+++ b/opensuse/core/qt3/qt-transparency.patch
@@ -0,0 +1,49 @@
+--- src/kernel/qapplication.cpp
++++ src/kernel/qapplication.cpp
+@@ -317,6 +317,7 @@
+ void qt_cleanup();
+ #if defined(Q_WS_X11)
+ void qt_init( Display* dpy, Qt::HANDLE, Qt::HANDLE );
++void qt_init( int *, char **, Display* dpy, Qt::HANDLE, Qt::HANDLE );
+ #endif
+ Q_EXPORT bool qt_tryModalHelper( QWidget *widget, QWidget **rettop );
+
+@@ -905,7 +906,7 @@
+
+ qt_init( &argc, argv, GuiClient );
+ } else {
+- qt_init(dpy, visual, colormap);
++ qt_init( &argc, argv, dpy, visual, colormap);
+ }
+
+ process_cmdline( &argc, argv );
+--- src/kernel/qapplication_x11.cpp
++++ src/kernel/qapplication_x11.cpp
+@@ -197,6 +197,7 @@
+ static Display *appDpy = 0; // X11 application display
+ static char *appDpyName = 0; // X11 display name
+ static bool appForeignDpy = FALSE; // we didn't create display
++Q_EXPORT bool qt_no_foreign_hack = false;
+ static bool appSync = FALSE; // X11 synchronization
+ #if defined(QT_DEBUG)
+ static bool appNoGrab = FALSE; // X11 grabbing enabled
+@@ -1610,7 +1611,7 @@
+ setlocale( LC_ALL, "" ); // use correct char set mapping
+ setlocale( LC_NUMERIC, "C" ); // make sprintf()/scanf() work
+
+- if ( display ) {
++ if ( display && ! qt_no_foreign_hack ) {
+ // Qt part of other application
+
+ appForeignDpy = TRUE;
+@@ -2390,6 +2391,10 @@
+ qt_init_internal( 0, 0, display, visual, colormap );
+ }
+
++void qt_init( int *argcptr, char **argv, Display *display, Qt::HANDLE visual, Qt::HANDLE colormap )
++{
++ qt_init_internal( argcptr, argv, display, visual, colormap );
++}
+
+ /*****************************************************************************
+ qt_cleanup() - cleans up when the application is finished
diff --git a/opensuse/core/qt3/qt-x11-free-3.3.8b.tar.bz2 b/opensuse/core/qt3/qt-x11-free-3.3.8b.tar.bz2
new file mode 100644
index 000000000..44e17d392
--- /dev/null
+++ b/opensuse/core/qt3/qt-x11-free-3.3.8b.tar.bz2
Binary files differ
diff --git a/opensuse/core/qt3/qt-x11-immodule-unified-qt3.3.8-20060318.diff b/opensuse/core/qt3/qt-x11-immodule-unified-qt3.3.8-20060318.diff
new file mode 100644
index 000000000..c1ac18de3
--- /dev/null
+++ b/opensuse/core/qt3/qt-x11-immodule-unified-qt3.3.8-20060318.diff
@@ -0,0 +1,16169 @@
+--- ChangeLog.immodule
++++ ChangeLog.immodule
+@@ -0,0 +1,2027 @@
++2004-09-10 YamaKen <yamaken@bp.iij4u.or.jp>
++
++ * changes.immodule
++ - Describe a bugfix
++
++2004-09-10 YamaKen <yamaken@bp.iij4u.or.jp>
++
++ * src/inputmethod/qinputcontextinterface_p.h
++ - Update UUID of QInputContextFactory in accordance with API change
++ of QInputContext to avoid loading old invalid plugins
++
++2004-09-10 YamaKen <yamaken@bp.iij4u.or.jp>
++
++ * README.immodule
++ - Add 'About this release' section
++ - Update version information
++ - Update to follow the change of configure options
++ - Modify some English expressions
++
++ * changes.immodule
++ - Move release information to README.immodule
++ - Add differences from previous release
++ - Add description about incremental change indication
++
++ * ChangeLog.immodule
++ - Update
++
++2004-09-09 YamaKen <yamaken@bp.iij4u.or.jp>
++
++ * src/kernel/qapplication.cpp
++ - (removePostedEvents):
++ * Fix infinite loop condition
++ * delete receiver->postedEvents if the list has been empty
++
++2004-09-09 YamaKen <yamaken@bp.iij4u.or.jp>
++
++ * This commit backports some code fragments from Qt4 branch to make
++ input method plugins source compatible with Qt4.
++
++ * src/kernel/qinputcontext.cpp
++ - (QInputContext): Add 'parent' arg
++
++ * src/kernel/qinputcontext.h
++ - Exclude qptrlist.h when compile with Qt4
++ - (struct QInputContextMenu): Exclude member variables when compile
++ with Qt4
++ - (QInputContext): Add 'parent' arg
++ - (addActionsTo): New function for Qt4
++
++2004-09-08 YamaKen <yamaken@bp.iij4u.or.jp>
++
++ * This commit renames input method module from 'input' to 'inputmehod'
++ because the name 'input' is too generic to indicate its function
++
++ * configure
++ - Replace configuration options '-im' and '-im-ext' with
++ '-inputmethod' and '-inputmethod-ext' to be consistent with the
++ name of input method module subdirectory 'inputmethod'
++ - Rename the module name 'input' with 'inputmethod'
++
++ * src/qt.pro
++ - Rename the module name 'input' with 'inputmethod'
++ - Rename some variable names inaccordance with the renaming of the
++ module
++ - Replace 'qt_input.pri' with 'qt_inputmethod.pri' in accordance
++ with the renaming of the file
++
++ * src/inputmethod/qt_input.pri
++ - Rename to qt_inputmethod.pri
++ * src/inputmethod/qt_input.pri
++ - Renamed from qt_input.pri
++ - Replace module names
++ - Rename some variable names inaccordance with the renaming of the
++ module
++
++2004-09-08 YamaKen <yamaken@bp.iij4u.or.jp>
++
++ * Rename input module subdirectory from "input" to "inputmethod"
++
++2004-09-08 YamaKen <yamaken@bp.iij4u.or.jp>
++
++ * This commit contains following issues
++ - An API change. Return type of QInputContext::identifierName and
++ QInputContext::language has been changed from QCString which is
++ deprecated in Qt4 to QString to make plugins source compatible
++ with Qt4.
++ - Other backports from Qt4 branch
++ - Fix event receiving order inversion between QKeyEvent and
++ QIMEvent. The code is implemented based on Cougar's and
++ Kazuki's. Thank you the efforts. See following discussion for
++ further information.
++ http://freedesktop.org/pipermail/immodule-qt/2004-September/000447.html
++ http://freedesktop.org/pipermail/immodule-qt/2004-September/000497.html
++
++ * src/kernel/qinputcontext.h
++ - (identifierName, language): Change return type from QCString to QString
++ - (addMenusTo): Make Qt3 specific
++ * src/kernel/qinputcontext.cpp
++ - (identifierName):
++ * Change return type from QCString to QString
++ * Modify the function description comment
++ - (language): Change return type from QCString to QString
++
++ * src/kernel/qwidget.cpp
++ - (clearFocus): Enclose immodule specific code by #if
++ defined(Q_WS_X11)
++
++ * src/kernel/qapplication.h
++ - Add 'class QIMEvent' declaration
++ - (removePostedEvents): New overriding function
++ * src/kernel/qapplication_x11.cpp
++ - Remove redundant 'class QInputContext' declaration
++ - (postIMEvent): Fix the event receiving order inversion problem
++ - (x11_apply_settings): Replace QString::find() which is deprecated
++ in Qt4 with QString::startsWith()
++ - (postEvent): Fix invalid QIMEvent compression that ignores IMStart
++ boundary
++ - (removePostedEvents): Original version of the function. Replace
++ the implementation with 2-args version. The behavior is not
++ changed
++ - (removePostedEvents): New overriding function. This function only
++ removes events that has specified event type. The implementation
++ is copied from original version of the function and modified to
++ accept event_type. This function is required by postIMEvent()
++ - (setActiveWindow): Enclose immodule specific code by #if
++ defined(Q_WS_X11)
++
++ * src/input/qinputcontextinterface_p.h
++ - Modify a coding style to follow Trolltech's one for Qt3
++
++ * src/input/qinputcontextplugin.h
++ - Fix typos in comment
++ * src/input/qinputcontextplugin.cpp
++ - (keys, QInputContextPlugin, ~QInputContextPlugin): Modify the
++ function description comment
++
++ * src/input/qinputcontextfactory.h
++ - Remove #include "qinputcontext.h" to reduce compilation dependency
++ - Add 'class QWidget' declaration
++ - Remove inappropriate #ifndef QT_NO_STRINGLIST. QStringList is now
++ required feature for immodule. See also changes of qfeatures.h
++ * src/input/qinputcontextfactory.cpp
++ - Add #include "qinputcontext.h"
++ - Remove unnecessary #include "qpopupmenu.h"
++ - Remove inappropriate #ifndef QT_NO_STRINGLIST. QStringList is now
++ required feature for immodule. See also changes of qfeatures.h
++
++ * src/tools/qfeatures.h
++ - Define QT_NO_IM if QT_NO_STRINGLIST is defined
++ - Define QT_NO_IM_EXTENSIONS if QT_NO_IM or QT_NO_STRINGLIST is
++ defined
++
++ * plugins/src/inputmethods/inputmethods.pro
++ - Rename conditional configuration symbol from "im" to "inputmethod"
++ inaccordance with chanege of configure script
++
++ * plugins/src/inputmethods/simple/qsimpleinputcontext.h
++ * plugins/src/inputmethods/simple/qsimpleinputcontext.cpp
++ * plugins/src/inputmethods/imsw-multi/qmultiinputcontext.h
++ - (identifierName, language): Change return type from QCString to
++ QString
++
++ * plugins/src/inputmethods/imsw-multi/qmultiinputcontext.cpp
++ - (identifierName, language): Change return type from QCString to
++ QString
++ - (createImSelPopup): Replace QString::find() which is deprecated in
++ Qt4 with QString::startsWith()
++
++ * plugins/src/inputmethods/imsw-none/qnoneinputcontextplugin.cpp
++ - (create): Replace QString::find() which is deprecated in Qt4 with
++ QString::startsWith()
++
++ * plugins/src/inputmethods/xim/qximinputcontext.h
++ - (language): Change return type from QCString to QString
++ - (identifierName):
++ * Change return type from QCString to QString
++ * Move inline implementation to qximinputcontext_x11.cpp
++ * plugins/src/inputmethods/xim/qximinputcontext_x11.cpp
++ - (language): Change return type from QCString to QString
++ - (identifierName):
++ * Change return type from QCString to QString
++ * Move implementation from qximinputcontext.h
++ - (language): Replace QString::find() which is deprecated in Qt4 with
++ QString::startsWith()
++
++2004-08-19 YamaKen <yamaken@bp.iij4u.or.jp>
++
++ * src/input/qinputcontextfactory.cpp
++ - (keys): Modify the function description comment
++
++2004-08-18 YamaKen <yamaken@bp.iij4u.or.jp>
++
++ * src/input/qinputcontextfactory.cpp
++ - (create_manager): Fix plugin directory from "/input" to "/inputmethods"
++
++2004-08-18 YamaKen <yamaken@bp.iij4u.or.jp>
++
++ * src/kernel/qapplication_x11.cpp
++ - (KeyTbl): Add translations for Japanese and Korean alias keys
++
++2004-08-18 YamaKen <yamaken@bp.iij4u.or.jp>
++
++ * This commit disables default IM configuration feature using qtrc and
++ qtconfig in BC mode. See following discussion for further
++ information.
++ http://freedesktop.org/pipermail/immodule-qt/2004-August/000416.html
++
++ * src/kernel/qapplication_x11.cpp
++ - (x11_apply_settings):
++ * Move immodule handling into #ifndef QT_NO_IM rather than QT_NO_XIM
++ * Move qtrc handling into #ifndef QT_NO_IM_EXTENSIONS
++
++ * src/inputmethods/imsw-multi/qmultiinputcontext.cpp
++ - (QMultiInputContext): Move qtrc handling into #ifndef
++ QT_NO_IM_EXTENSIONS
++
++ * tools/qtconfig/mainwindow.cpp
++ - (MainWindow): Move qtrc handling into #ifndef QT_NO_IM_EXTENSIONS
++
++ * src/kernel/qt_x11.pri
++ - Remove unnecessary configuration
++
++2004-08-18 YamaKen <yamaken@bp.iij4u.or.jp>
++
++ Merge differences between qt-x11-free-3.3.2 and qt-x11-free-3.3.3
++
++2004-08-18 YamaKen <yamaken@bp.iij4u.or.jp>
++
++ * plugins/src/inputmethods/imsw-multi/imsw-multi.pro
++ * plugins/src/inputmethods/simple/simple.pro
++ * plugins/src/inputmethods/imsw-none/imsw-none.pro
++ * plugins/src/inputmethods/xim/xim.pro
++ - Remove inappropriate 'thread' from CONFIG. Thanks to Takumi
++ Asaki for reporting
++
++2004-08-18 YamaKen <yamaken@bp.iij4u.or.jp>
++
++ * tools/qtconfig/mainwindow.cpp
++ - (MainWindow): Modify a comment
++ - (fileSave): Fix inappropriate /qt/DefaultInputMethodSwitcher
++ overwriting. Thanks Takumi Asaki for the reporting
++
++2004-08-17 YamaKen <yamaken@bp.iij4u.or.jp>
++
++ * plugins/src/inputmethods/imsw-multi/imsw-multi.pro
++ * plugins/src/inputmethods/simple/simple.pro
++ * plugins/src/inputmethods/imsw-none/imsw-none.pro
++ * plugins/src/inputmethods/xim/xim.pro
++ - Change plugin directory from $QTDIR/plugins/input/ to
++ $QTDIR/plugins/inputmethods/
++ * changes.immodule
++ - Add a description for the change of plugin directory
++
++2004-08-17 YamaKen <yamaken@bp.iij4u.or.jp>
++
++ * src/kernel/qnamespace.h
++ - (Qt::Key) Add a comment about Korean-specific keyboard
++ support based on the information from Choe Hwanjin. Thanks
++ for the information. See following discussion for further
++ information
++ http://freedesktop.org/pipermail/immodule-qt/2004-August/000402.html
++ - (Qt::Key) Comment out some Korean-specific keys that has an
++ equivalent generic key
++
++2004-08-14 YamaKen <yamaken@bp.iij4u.or.jp>
++
++ * This is preparation for qt-x11-immodule-unified-qt3.3.2-20040814
++
++ * ChangeLog.immodule
++ - Update
++
++2004-08-14 YamaKen <yamaken@bp.iij4u.or.jp>
++
++ * changes.immodule
++ - Add and modify some descriptions
++
++ * configure
++ - Rewrite some codes to avoid patch rejection against Qt
++ 3.3.3. Logically equivalent.
++ * src/widgets/qtextedit.cpp
++ - Rewrite some codes to avoid patch rejection against Qt
++ 3.3.3. Logically equivalent.
++ * src/widgets/qlineedit.cpp
++ - Rewrite some codes to avoid patch rejection against Qt
++ 3.3.3. Logically equivalent.
++
++2004-08-13 LiuCougar <liucougar@gmail.com>
++
++ cleanup: get rid of some warnings
++2004-08-12 YamaKen <yamaken@bp.iij4u.or.jp>
++
++ * changes.immodule
++ - New file. This file has been written for both users and
++ developers to inform important changes
++
++2004-08-12 YamaKen <yamaken@bp.iij4u.or.jp>
++
++ * This is preparation for qt-x11-immodule-unified-qt3.3.2-20040812
++
++ * ChangeLog.immodule
++ - Update
++
++2004-08-12 YamaKen <yamaken@bp.iij4u.or.jp>
++
++ * src/kernel/qwidget_x11.cpp
++ - (changeInputContext, createInputContext): Fix qic location
++ - (destroyInputContext): Add safety check
++
++2004-08-12 YamaKen <yamaken@bp.iij4u.or.jp>
++
++ * configure
++ - Fix incomplete qconfig configuratoin about QT_NO_IM and
++ QT_NO_IM_EXTENSIONS
++
++ * src/kernel/qwidget_x11.cpp
++ - (changeInputContext, createInputContext, destroyInputContext): Fix
++ invalid pointer reference
++
++2004-08-12 LiuCougar <liucougar@gmail.com>
++
++ fixed a compile issue in my gentoo box (gcc 3.3.3, glibc 2.3.3
++2004-08-12 YamaKen <yamaken@bp.iij4u.or.jp>
++
++ * configure
++ - Fix option consistency handling between '-im' and '-im-ext'
++
++ * README.immodule
++ - Fix a typo
++
++2004-08-11 YamaKen <yamaken@bp.iij4u.or.jp>
++
++ * README.immodule
++ - Modify a little
++
++2004-08-11 YamaKen <yamaken@bp.iij4u.or.jp>
++
++ * README.immodule
++ - New file. Some explanation has been described
++
++ * ChangeLog.immodule
++ - New file
++
++2004-08-11 YamaKen <yamaken@bp.iij4u.or.jp>
++
++ * plugins/src/inputmethods/xim/qximinputcontext_x11.cpp
++ - (language): Remove QLocale dependency to be compiled on Qt 3.2.x
++ or earlier
++
++2004-08-11 YamaKen <yamaken@bp.iij4u.or.jp>
++
++ * This commit merges 'Binary Compatible branch' into the trunk to
++ reduce maintenance cost. Now binary compatibility is
++ configurable. Binary incompatible features are surrounded by
++ #ifndef QT_NO_IM_EXTENSIONS
++
++ * configure
++ - Add '-im' option to enable immodule feature (default yes).
++ - Add '-im-ext' option to enable more immodule extensions (default
++ no). Specify this option 'no' to keep binary compatibility with
++ standard Qt3
++
++ * src/kernel/qt_x11.pri
++ - Add conditional QT_NO_IM and QT_NO_IM_EXTENSIONS definition in
++ accordance with '-im' and '-im-ext' options
++
++ * src/kernel/qwidget.h
++ - (icHolderWidget): New function for QT_NO_IM_EXTENSIONS
++ - (ic): Add #ifndef QT_NO_IM_EXTENSIONS for binary incompatible
++ variable
++ - (xic): Add #ifdef QT_NO_IM_EXTENSIONS for binary compatible
++ variable
++ * src/kernel/qwidget_x11.cpp
++ - (create): Add #ifndef QT_NO_IM_EXTENSIONS
++ - (destroy): Make some codes QT_NO_IM_EXTENSIONS independent
++ - (createTLSysExtra): Add a code fragment for QT_NO_IM_EXTENSIONS
++ - (deleteTLSysExtra): Modify a comment
++ - (getInputContext, changeInputContext, createInputContext,
++ destroyInputContext): Merge code fragments for QT_NO_IM_EXTENSIONS
++ - (deleteExtra): Merge a comment for QT_NO_IM_EXTENSIONS
++
++ * src/kernel/qapplication.h
++ - (locateICHolderWidget, icHolderWidgets, create_xim, close_xim):
++ New functions for QT_NO_IM_EXTENSIONS
++ * src/kernel/qapplication_x11.cpp
++ - (create_im, close_im): Add #ifndef QT_NO_IM_EXTENSIONS
++ - (create_xim, close_xim): Merge functions for QT_NO_IM_EXTENSIONS
++ - (qt_init_internal, qt_cleanup): Merge code fragments for
++ QT_NO_IM_EXTENSIONS
++
++ * plugins/src/inputmethods/inputmethods.pro
++ - Make plugin compilations configurable with '-im' option
++
++2004-08-11 YamaKen <yamaken@bp.iij4u.or.jp>
++
++ * plugins/src/inputmethods/xim/qximinputcontext.h
++ - Replace QXIMINPUTCONTEXT_P_H with QXIMINPUTCONTEXT_H
++
++ * src/widgets/qlineedit.cpp
++ - (QLineEditPrivate::updateMicroFocusHint): Modify the comment a
++ little
++
++2004-08-11 YamaKen <yamaken@bp.iij4u.or.jp>
++
++ * This commit is participating with recent 'keyword static of C++'
++ discussion. See
++ http://freedesktop.org/pipermail/immodule-qt/2004-August/000344.html
++ for further information
++
++ * src/kernel/qapplication_x11.cpp
++ - (QETWidget::translateKeyEventInternal): Prevent interwidget key
++ state transition about RTL extensions. This code had been written
++ by Daisuke Kameda in qt-x11-immodule-all-qt3.3.1-20040316.diff
++
++ * src/widgets/qlineedit.cpp
++ - (QLineEditPrivate::updateMicroFocusHint): Add a comment that
++ explains that old rect variable is intentionally static
++
++2004-08-11 YamaKen <yamaken@bp.iij4u.or.jp>
++
++ * This commit turns the argument of QInputContext::filterEvent() into
++ const. See
++ http://freedesktop.org/pipermail/immodule-qt/2004-August/000335.html
++ for further information
++
++ * src/kernel/qinputcontext.h
++ - (filterEvent): Follow the API change
++ * src/kernel/qinputcontext.cpp
++ - (filterEvent): Follow the API change
++
++ * plugins/src/inputmethods/simple/qsimpleinputcontext.h
++ - (filterEvent): Follow the API change
++ * plugins/src/inputmethods/simple/qsimpleinputcontext.cpp
++ - (filterEvent): Follow the API change
++ * plugins/src/inputmethods/imsw-multi/qmultiinputcontext.h
++ - (filterEvent): Follow the API change
++ * plugins/src/inputmethods/imsw-multi/qmultiinputcontext.cpp
++ - (filterEvent): Follow the API change
++
++2004-08-10 YamaKen <yamaken@bp.iij4u.or.jp>
++
++ * plugins/src/inputmethods/simple/xcompose2q.rb
++ - Update to accept Compose flie of X.org's X11R6.7.0
++ - Accept 'XCOMM' as comment sign to accept raw source file
++ - Accept both " " and "\"" as valid RHS
++ * plugins/src/inputmethods/simple/composetable.cpp
++ - Update Compose table from XFree86 4.3.0 to X.org's X11R6.7.0
++
++2004-08-10 YamaKen <yamaken@bp.iij4u.or.jp>
++
++ * This commit replaces the invalid header words 'This file is
++ part of the kernel module' of following files with 'This file
++ is part of the input method module'
++
++ * plugins/src/inputmethods/imsw-multi/qmultiinputcontextplugin.cpp
++ * plugins/src/inputmethods/imsw-multi/qmultiinputcontext.cpp
++ * plugins/src/inputmethods/imsw-multi/qmultiinputcontextplugin.h
++ * plugins/src/inputmethods/imsw-multi/qmultiinputcontext.h
++ * plugins/src/inputmethods/simple/qsimpleinputcontextplugin.cpp
++ * plugins/src/inputmethods/simple/qsimpleinputcontext.cpp
++ * plugins/src/inputmethods/simple/qsimpleinputcontextplugin.h
++ * plugins/src/inputmethods/simple/qsimpleinputcontext.h
++ * plugins/src/inputmethods/simple/composetable.cpp
++ * plugins/src/inputmethods/imsw-none/qnoneinputcontextplugin.cpp
++ * plugins/src/inputmethods/imsw-none/qnoneinputcontextplugin.h
++ * plugins/src/inputmethods/xim/qximinputcontextplugin.cpp
++ * plugins/src/inputmethods/xim/qximinputcontextplugin.h
++ * plugins/src/inputmethods/xim/qximinputcontext.h
++ * plugins/src/inputmethods/xim/qximinputcontext_x11.cpp
++
++2004-08-10 YamaKen <yamaken@bp.iij4u.or.jp>
++
++ * plugins/src/inputmethods/simple/xcompose2q.rb
++ - Fix broken translation entries for most ASCII characters
++ * plugins/src/inputmethods/simple/composetable.cpp
++ - Translate again with fixed xcompose2q.rb. This fixes many
++ translation entries involving ascii character such as
++ "<Multi_key> <space> <minus>"
++
++2004-08-10 YamaKen <yamaken@bp.iij4u.or.jp>
++
++ * plugins/src/inputmethods/simple/xcompose2q.rb
++ - New file. This script is used for translating X's Compose
++ table into QSimpleInputContext's table
++ - Some bugs included
++ - Although I had released previous versions of this script
++ under GPL, I have released this version under another
++ license. See header
++
++2004-08-10 YamaKen <yamaken@bp.iij4u.or.jp>
++
++ * plugins/src/inputmethods/simple/qsimpleinputcontext.h
++ - Follow Trolltech's coding style for Qt3
++ - Remove unnecessary headers
++ - (UNITIZE): Moved from qsimpleinputcontext.cpp. QT_ prefix is not
++ required since a macro does not pollute symbol space
++ - (struct _ComposeTableElement): Rename to QComposeTableElement
++ - (struct QComposeTableElement): Renamed from _ComposeTableElement
++ - (struct _ComposeTable): Rename to QComposeTable
++ - (struct QComposeTable): Renamed from _ComposeTable
++ - (isPreeditRelocationEnabled): Remove unnecessary overloading
++ function
++ - (isPreeditPreservationEnabled): Remove unnecessary function
++ - (checkComposeTable): Follow the renaming of the types of args
++ - (defaultComposeTable): New static member variable
++
++ * plugins/src/inputmethods/simple/qsimpleinputcontext.cpp
++ - Separate composing table definition to composetable.cpp
++ - Remove unnecessary headers
++ - Replace 'true' and 'false' with 'TRUE' and 'FALSE' to follow
++ Trolltech's coding style for Qt3
++ - Replace _ComposeTableElement with QComposeTableElement to follow
++ the renaming
++ - Replace ComposeTable with QComposeTable to follow the renaming
++ - (UNITIZE): Move to qsimpleinputcontext.h
++ - (defaultTable): Move to composetable.cpp
++ - (qtComposeTable): Move to composetable.cpp as defaultComposeTable
++ - (filterEvent):
++ * Clean up
++ * Add a comment about key compression
++ * replace qtComposeTable with defaultComposeTable to follow the
++ renaming
++ - (unsetFocus): Remove unnecessary isPreeditPreservationEnabled()
++ check
++ - (identifierName): Remove 'FIXME' comment
++ - (isPreeditRelocationEnabled): Remove unnecessary overloading
++ function
++ - (isPreeditPreservationEnabled): Remove unnecessary function
++
++ * plugins/src/inputmethods/simple/composetable.cpp
++ - New file. This file has been separated from
++ qsimpleinputcontext.cpp to achieve following issues
++ * increase table maintenance ability
++ * ease editing code part of QSimpleInputContext
++ * ease development log tracking
++ * ease copyright tracking
++ * enclose UTF-8 comments into this file only
++ - Add original header from Compose file of XFree86 4.3.0
++ - (defaultTable) Moved from qsimpleinputcontext.cpp
++ - (defaultComposeTable): New variable definition
++
++ * plugins/src/inputmethods/simple/simple.pro
++ - Add composetable.cpp to SOURCES
++
++ * plugins/src/inputmethods/simple/qsimpleinputcontextplugin.cpp
++ - (displayName, description): Modify the descriptions appropriately
++
++2004-08-10 YamaKen <yamaken@bp.iij4u.or.jp>
++
++ * plugins/src/inputmethods/xim/qximinputcontext_x11.cpp
++ - Replace #include "qximinputcontext_p.h" with
++ "qximinputcontext.h". XIM plugin is now working properly
++
++2004-08-10 YamaKen <yamaken@bp.iij4u.or.jp>
++
++ * This commit changes the XIM input method into plugin. A little
++ modification is still required to work. See next commit information
++
++ * src/input/qinputcontextfactory.cpp
++ - Remove XIM dependency
++ - (create, keys): Remove XIM dependent codes
++
++ * src/input/qt_input.pri
++ - Remove QXIMInputContext entries
++ * src/input/qximinputcontext_p.h
++ - Moved to plugins/src/inputmethods/xim/qximinputcontext.h
++ * src/input/qximinputcontext_x11.cpp
++ - Moved to plugins/src/inputmethods/xim/qximinputcontext_x11.cpp
++
++ * plugins/src/inputmethods/inputmethods.pro
++ - Add xim to SUBDIRS
++ * plugins/src/inputmethods/xim
++ - New directory
++ * plugins/src/inputmethods/xim/xim.pro
++ - New file
++ * plugins/src/inputmethods/xim/qximinputcontextplugin.h
++ - New file
++ - (class QXIMInputContextPlugin): New class
++ - (QXIMInputContextPlugin, ~QXIMInputContextPlugin, keys, create,
++ languages, displayName, description): New function
++ * plugins/src/inputmethods/xim/qximinputcontextplugin.cpp
++ - New file
++ * plugins/src/inputmethods/xim/qximinputcontext.h
++ - Moved from src/input/qximinputcontext_p.h. No code changes have
++ been applied. A little modification is required to work. See next
++ commit information
++ * plugins/src/inputmethods/xim/qximinputcontext_x11.cpp
++ - Moved from src/input/qximinputcontext_x11.cpp. No code changes have
++ been applied
++
++2004-08-10 YamaKen <yamaken@bp.iij4u.or.jp>
++
++ * src/input/qximinputcontext_p.h
++ - (QXIMInputContext): Remove the arg 'widget' to conform to standard
++ QInputContext API
++ * src/input/qximinputcontext_x11.cpp
++ - (QXIMInputContext): Remove the arg 'widget' to conform to standard
++ QInputContext API
++ - (setHolderWidget): Add QInputContext::setHolderWidget() to fix
++ inproper overriding
++ * src/input/qinputcontextfactory.cpp
++ - (create): Remove the arg from QXIMInputContext()
++
++2004-08-10 YamaKen <yamaken@bp.iij4u.or.jp>
++
++ * src/input/qximinputcontext_p.h
++ - (setHolderWidget): New override function
++ * src/input/qximinputcontext_x11.cpp
++ - (QXIMInputContext): Split most part of the initialization code
++ into setHolderWidget() to allow null widget. This is required to
++ make imsw-none working properly
++ - (setHolderWidget): New function
++
++2004-08-10 YamaKen <yamaken@bp.iij4u.or.jp>
++
++ * src/kernel/qapplication_x11.cpp
++ - (x11_apply_settings): Restrict defaultIM to be an IM-switcher. An
++ IM-switcher has a 'imsw-' prefix
++
++2004-08-10 YamaKen <yamaken@bp.iij4u.or.jp>
++
++ * This commit adds imsw-none IM-switcher plugin according to
++ following discussion with Takumi Asaki. Thanks for the opinion.
++ http://freedesktop.org/pipermail/immodule-qt/2004-August/000320.html
++
++ * plugins/src/inputmethods/inputmethods.pro
++ - Add imsw-none to SUBDIRS
++ * plugins/src/inputmethods/imsw-none/imsw-none.pro
++ - New file
++ * plugins/src/inputmethods/imsw-none/qnoneinputcontextplugin.h
++ - New file
++ - (class QNoneInputContextPlugin): New class
++ * plugins/src/inputmethods/imsw-none/qnoneinputcontextplugin.cpp
++ - New file
++ - (QNoneInputContextPlugin, ~QNoneInputContextPlugin, keys,
++ languages, displayName, description): New function
++ - (create): New function. Read key from QT_IM_MODULE or
++ /qt/DefaultInputMethod of qtrc and creates input context with the
++ key
++
++2004-08-10 YamaKen <yamaken@bp.iij4u.or.jp>
++
++ * Rename input method plugin names to accord with other plugin names
++
++ * plugins/src/inputmethods/imsw-multi/imsw-multi.pro
++ - Rename plugin name to qimsw-multi from qmultiinputcontextplugin
++ * plugins/src/inputmethods/simple/simple.pro
++ - Rename plugin name to qsimple from qsimpleinputcontextplugin
++
++2004-08-10 YamaKen <yamaken@bp.iij4u.or.jp>
++
++ * plugins/src/inputmethods/imsw-multi/multi.pro
++ - Move to imsw-multi.pro
++ * plugins/src/inputmethods/imsw-multi/imsw-multi.pro
++ - Move from multi.pro
++
++2004-08-10 YamaKen <yamaken@bp.iij4u.or.jp>
++
++ * plugins/src/inputmethods/multi
++ - Move to imsw-multi
++ * plugins/src/inputmethods/imsw-multi
++ - Move from multi
++ * plugins/src/inputmethods/inputmethods.pro
++ - Replace 'multi' with 'imsw-multi' in SUBDIRS
++
++2004-08-10 Kazuki Ohta <mover@hct.zaq.ne.jp>
++
++ * plugins/src/inputmethods/simple/qsimpleinputcontext.cpp
++ - add full dead/multi key entries
++ - fix some bugs
++
++2004-08-10 YamaKen <yamaken@bp.iij4u.or.jp>
++
++ * This commit changes pluggable popup menu API in accordance with
++ following discussion with Lars Knoll. Thanks for the advice.
++ http://freedesktop.org/pipermail/immodule-qt/2004-August/000300.html
++
++ * src/kernel/qinputcontext.cpp
++ - (actions): New function
++ - (exportMenusInto): Remove to rename to addMenusTo()
++ - (addMenusTo):
++ * New function. Renamed from exportMenusInto()
++ * Follow introduction of enum QInputContextMenu::Action
++ * Add an explanation for this utility function to the function
++ description
++
++ * src/kernel/qinputcontext.h
++ - (QInputContextMenu::Action): New enum
++ - (menus): Restrict to use with Qt3 only
++ - (qt4menus): Remove to replace with actions()
++ - (actions): New function for Qt4
++
++ * src/widgets/qtextedit.cpp
++ - (createPopupMenu): Replace exportMenusInto() with addMenusTo()
++ * src/widgets/qlineedit.cpp
++ - (createPopupMenu): Replace exportMenusInto() with addMenusTo()
++
++2004-08-10 YamaKen <yamaken@bp.iij4u.or.jp>
++
++ * This commit changes the two input methods into plugin
++
++ * src/input/qt_input.pri
++ - Remove QSimpleInputContext and QMultiInputContext entries
++ * src/input/qmultiinputcontext.h
++ - Moved to plugins/src/inputmethods/multi/qmultiinputcontext.h
++ * src/input/qmultiinputcontext.cpp
++ - Moved to plugins/src/inputmethods/multi/qmultiinputcontext.cpp
++ * src/input/qsimpleinputcontext.h
++ - Moved to plugins/src/inputmethods/simple/qsimpleinputcontext.h
++ * src/input/qsimpleinputcontext.cpp
++ - Moved to plugins/src/inputmethods/simple/qsimpleinputcontext.cpp
++
++ * plugins/src/src.pro
++ - Add 'inputmethods' to SUBDIRS. The directory name 'inputmethods'
++ is intended to be compatible with Qt/Embedded. Install directory
++ name is still kept as 'input' for backward compatibility
++ * plugins/src/inputmethods/inputmethods.pro
++ - New file
++
++ * plugins/src/inputmethods/multi/multi.pro
++ - New file
++ * plugins/src/inputmethods/multi/qmultiinputcontextplugin.h
++ - New file
++ * plugins/src/inputmethods/multi/qmultiinputcontextplugin.cpp
++ - New file
++ * plugins/src/inputmethods/multi/qmultiinputcontext.h
++ - Moved from src/input/qmultiinputcontext.h. No code changes have
++ been applied
++ * plugins/src/inputmethods/multi/qmultiinputcontext.cpp
++ - Moved from src/input/qmultiinputcontext.cpp. No code changes have
++ been applied
++
++ * plugins/src/inputmethods/simple/simple.pro
++ - New file
++ * plugins/src/inputmethods/simple/qsimpleinputcontextplugin.h
++ - New file
++ * plugins/src/inputmethods/simple/qsimpleinputcontextplugin.cpp
++ - New file
++ * plugins/src/inputmethods/simple/qsimpleinputcontext.h
++ - Moved from src/input/qsimpleinputcontext.h. No code changes have
++ been applied
++ * plugins/src/inputmethods/simple/qsimpleinputcontext.cpp
++ - Moved from src/input/qsimpleinputcontext.cpp. No code changes have
++ been applied
++
++ * src/input/qinputcontextfactory.cpp
++ - (create): Remove dedicated instantiation handling for
++ QSimpleInputContext and QMultiInputContext
++
++ * tools/qtconfig/mainwindow.h
++ - (inputMethodIdentifiers): New member variable
++ * tools/qtconfig/mainwindow.cpp
++ - (MainWindow):
++ * Replace identifier name of input methods with displaynames
++ * Add filtering out process for IM-switchers that has "imsw-"
++ prefix
++ * Disable sorting for input method names
++ * Modify some comments
++ * Simplify setCurrentItem() handling for inputMethodCombo widget
++ * Add recorded input method name to the display name of unknown
++ input method
++ * Save recorded input method name even if unknown input method
++ - (fileSave):
++ * Save /qt/DefaultInputMethodSwitcher with default value
++ "imsw-multi"
++ * Save identifier name of the input method rather than display name
++
++ * src/kernel/qinputcontext.cpp
++ - (class QInputContext): Update the class description comment
++
++ * src/input/qinputcontextplugin.cpp
++ - (class QInputContextPlugin): Update the class description comment
++ - (keys): Update the function description comment
++ - (languages, displayName, description): Add the function
++ description comment
++
++
++2004-08-05 YamaKen <yamaken@bp.iij4u.or.jp>
++
++ * This commit adds generic pluggable popup menu feature. See
++ http://freedesktop.org/pipermail/immodule-qt/2004-August/000266.html
++ for further information. The implementation may be altered in
++ accordance with discussion in the list.
++
++ * src/kernel/qinputcontext.h
++ - (struct QInputContextMenu): New struct
++ - (qt4menus): New function. Just a placeholder for now
++ - (menus): New function
++ - (exportMenusInto): New function
++ * src/kernel/qinputcontext.cpp
++ - (class QInputContext): Add 'Text widget implementor's guide'
++ section to the class description comment
++ - (menus): New function
++ - (exportMenusInto): New function
++
++ * src/input/qmultiinputcontext.h
++ - (qt4menus): New function. Just a placeholder for now
++ - (menus): New function
++ * src/input/qmultiinputcontext.cpp
++ - (menus):
++ * New function to follow new API. The function merges slave menus
++ and QMultiInputContext's own 'Select Input Method' menu
++ * The functionality is ported from QLineEdit::createPopupMenu()
++ * An accelerator has been added as 'Select Input &Method'
++
++ * src/widgets/qtextedit.cpp
++ - Remove QMultiInputContext dependency
++ - (createPopupMenu): Replace QMultiInputContext dependent submenu
++ handling with the pluggable popup menu
++ * src/widgets/qlineedit.cpp
++ - Remove QMultiInputContext dependency
++ - (createPopupMenu): Replace QMultiInputContext dependent submenu
++ handling with the pluggable popup menu
++
++ * src/kernel/qwidget.h
++ - Remove #include "qinputcontext.h" to reduce compile time when we
++ hacked qinputcontext.h
++
++2004-08-04 Kazuki Ohta <mover@hct.zaq.ne.jp>
++
++ * src/input/qmultiinputcontext.cpp
++ - use QInputContextFactory::description and set whatsthis help
++
++2004-08-03 YamaKen <yamaken@bp.iij4u.or.jp>
++
++ * This commit adds QInputContextFactory::description() feature
++
++ * src/input/qinputcontextinterface_p.h
++ - Update the UUID because the interface has been changed
++ - (description): New function
++
++ * src/input/qinputcontextplugin.h
++ - (description): New function
++
++ * src/input/qinputcontextfactory.h
++ - (description): New function
++ - (QInputContextPluginPrivate::description): New function
++ * src/input/qinputcontextfactory.cpp
++ - (description): New function
++ - (displayName): Replace fallback value with empty string instead of
++ null
++
++2004-08-03 YamaKen <yamaken@bp.iij4u.or.jp>
++
++ * This commit alters the configuration convention about
++ IM-switcher. See
++ http://freedesktop.org/pipermail/immodule-qt/2004-August/000232.html
++ for further information. The implementation may be altered in
++ accordance with discussion in the list.
++
++ * src/kernel/qapplication_x11.cpp
++ - (defaultIM): Replace "xim" with "imsw-multi"
++ - (x11_apply_settings):
++ * Replace the environment variable name QT_IM_MODULE with
++ QT_IM_SWITCHER
++ * Replace the qtrc variable name /qt/DefaultInputMethod with
++ /qt/DefaultInputMethodSwitcher
++ * Replace "xim" with "imsw-multi" for default plugin
++
++ * src/input/qmultiinputcontext.h
++ - (lastCreatedIMKey): Remove to rename to currentIMKey
++ - (currentIMKey): New member variable. Renamed from lastCreatedIMKey
++ because the semantics of the variable has been changed by
++ introduction of QT_IM_SWITCHER
++
++ * src/input/qmultiinputcontext.cpp
++ - Replace lastCreatedIMKey with currentIMKey
++ - (QMultiInputContext): Add default input method specification
++ feature using QT_IM_MODULE and /qt/DefaultInputMethod
++ - (createImSelPopup):
++ * Add IM-switcher plugin elimination feature using "imsw-" prefix
++ * Add dispName.isNull() checking
++ * Apply some rewriting without altering logic for human readability
++
++ * src/input/qinputcontextfactory.cpp
++ - (create): Replace the identifier name "multi" with "imsw-multi"
++
++2004-08-03 Kazuki Ohta <mover@hct.zaq.ne.jp>
++
++ * This commit implements table searching suite
++
++ - QKeyEvent::text() is restricted to only one character,
++ so qsimpleic use QChar::unicode() value in case keys are
++ pressed otherwise composing keys are pressed.
++
++ - Composing Table is temporally deleted for testing.
++ Need to prepare proper entries.
++ Now qsimpleic can deal with capital letter more cleaner way
++
++ * Next, I introduce X's composing parser to qsimpleic
++
++2004-08-02 YamaKen <yamaken@bp.iij4u.or.jp>
++
++ * src/kernel/qapplication_x11.cpp
++ - (x11_apply_settings): Merge the comment about defaultIM
++ overwritten by r52 from r45
++
++2004-07-31 LiuCougar <liucougar@gmail.com>
++
++ new environment variable QT_IM_MODULE to overwrite the default inputmethod plugin
++2004-07-31 LiuCougar <liucougar@gmail.com>
++
++ "deleteLater" is safer then "delete" QObject directly
++2004-07-30 YamaKen <yamaken@bp.iij4u.or.jp>
++
++ * src/kernel/qnamespace.h
++ - (Qt::Key):
++ * Replace dead key values with new one to avoid keycode conflict
++ * Add a comment about the latin 1 keycodes
++ * Add some comments about the offset for keycode from X keycode
++ * src/kernel/qevent.cpp
++ - (key): Add a comment about latin 1 keycodes to the function
++ description.
++
++ * src/kernel/qapplication_x11.cpp
++ - Define define XK_XKB_KEYS to include dead key definitions from
++ keysymdef.h
++ - Remove XK_dead_ keys definition
++
++2004-07-29 Kazuki Ohta <mover@hct.zaq.ne.jp>
++
++ * Change to use displayName() in IM-Switch Popupmenu
++
++ * src/input/qmultiinputcontext.h
++ - (keyDict): new variable
++ * src/input/qmultiinputcontext.cpp
++ - (createImSelPopup): use displanName() on popup and store key in keyDict
++ - (changeInputMethodWithMenuId): find key from using keyDict
++
++ * Problem *
++ - if key=="XIM", displayName(key) is QString::null
++ * Wish *
++ - add "virtual QString description( const QString &key ) = 0;" for showing the description of IM on PopupMenu as a whatsthis help
++
++2004-07-28 YamaKen <yamaken@bp.iij4u.or.jp>
++
++ * src/input/qinputcontextinterface_p.h
++ - Update the UUID because the interface has been changed
++ - (languages): New function
++ - (displayName): New function
++
++ * src/input/qinputcontextplugin.h
++ - (languages): New function
++ - (displayName): New function
++ * src/input/qinputcontextplugin.cpp
++ - (QInputContextPluginPrivate::languages): New function
++ - (QInputContextPluginPrivate::displayName): New function
++
++ * src/input/qinputcontextfactory.h
++ - (languages): New function
++ - (displayName): New function
++ * src/input/qinputcontextfactory.cpp
++ - (languages): New function
++ - (displayName): New function
++
++2004-07-27 YamaKen <yamaken@bp.iij4u.or.jp>
++
++ * src/kernel/qinputcontext.h
++ - (deletionRequested): New signal. Added for fatal error handling
++ * src/kernel/qinputcontext.cpp
++ - (deletionRequested): Add the function description comment
++ * src/kernel/qwidget.h
++ - (destroyInputContext): Change ordinary function to slot to receive
++ the signal QInputContext::deletionRequested()
++ * src/kernel/qwidget_x11.cpp
++ - (changeInputContext, createInputContext):
++ * Connect deletionRequested() signal of qic to destroyInputContext()
++ * Follow renaming of QApplication::imEventReceived() to postIMEvent()
++ - (destroyInputContext): Modify the function description comment
++
++ * src/input/qximinputcontext_p.h
++ - (close): New function
++ * src/input/qximinputcontext_x11.cpp
++ - (close_xim):
++ * Remove invalid QApplication::close_im() invocation
++ * Add proper finalization using deletionRequested() signal
++ - (close): New function
++
++ * src/kernel/qapplication.h
++ - (imEventReceived): Remove this inappropriate name to rename to
++ postIMEvent()
++ - (postIMEvent): New slot. Renamed from imEventReceived()
++ * src/kernel/qapplication_x11.cpp
++ - (imEventReceived): Remove this inappropriate name to rename to
++ postIMEvent()
++ - (postIMEvent): New slot. Renamed from imEventReceived()
++ - (close_im): Remove unused commented out code. The code had already
++ been moved to qximinputcontext.cpp
++
++ * src/input/qmultiinputcontext.h
++ - (destroyInputContext): New slot
++ - (imEventReceived): Remove this inappropriate name to rename to
++ postIMEvent()
++ - (postIMEvent): New slot. Renamed from imEventReceived()
++ * src/input/qmultiinputcontext.cpp
++ - (QT_NO_IM_QMULTIINPUTCONTEXT_IMINDEX): New macro. Defined as default
++ - (filterEvent): Insert #ifdef QT_NO_IM_QMULTIINPUTCONTEXT_IMINDEX
++ - (destroyInputContext): New slot. Processes deletionRequested from slave
++ - (imEventReceived): Remove this inappropriate name to rename to
++ postIMEvent()
++ - (postIMEvent): New slot. Renamed from imEventReceived()
++ - (slave):
++ * Add proper instanciation code for popup menu mode
++ * Insert #ifdef QT_NO_IM_QMULTIINPUTCONTEXT_IMINDEX
++ - (changeInputMethod(int)):
++ * Add error handling for no available input methods
++ * Insert #ifdef QT_NO_IM_QMULTIINPUTCONTEXT_IMINDEX
++ - (changeInputMethod(QString)):
++ * Add error handling for no available input methods
++ * Add default selection for null key
++ * Connect deletionRequested() signal
++ * Fix debug message
++ * src/widgets/qtextedit.cpp
++ - (createPopupMenu):
++ * Add NULL check for input context
++ * Replace the label "SelectInputMethod" with "Select Input Method"
++ * src/widgets/qlineedit.cpp
++ - (createPopupMenu):
++ * Add NULL check for input context
++ * Replace the label "SelectInputMethod" with "Select Input Method"
++
++2004-07-27 YamaKen <yamaken@bp.iij4u.or.jp>
++
++ * src/kernel/qwidget_x11.cpp
++ - (changeInputContext):
++ * Remove unnecessary createInputContext()
++ * Reorder the code fragments to reduce temporal memory consumption
++
++2004-07-27 YamaKen <yamaken@bp.iij4u.or.jp>
++
++ * This commit is a comment and variable name update. No actual code is
++ modified.
++
++ * src/kernel/qinputcontext.cpp
++ - (class QInputContext): Modify the class description comment
++ - (filterEvent): Mark the argument as /* const */ to make it const
++ in future
++ - (reset): Add a requirement to the function description comment for
++ reimplementation
++
++ * src/kernel/qapplication_x11.cpp
++ - (locateICHolderWidget, icHolderWidgets, changeAllInputContext):
++ Modify the function description comment
++
++ * src/kernel/qwidget_x11.cpp
++ - (changeInputContext):
++ * Rename 'name' with 'identifierName' to eliminate the ambiguity
++ * Modify the function description comment
++ * Modify a comment
++ * Follow Trolltech's coding style
++ - (createInputContext):
++ * Modify the function description comment
++ * Modify a comment
++ - (resetInputContext): Modify the function description comment
++
++ * src/kernel/qapplication_x11.cpp
++ - (defaultIM): Modify the comment
++ - (changeAllInputContext):
++ * Rename 'name' with 'identifierName' to eliminate the ambiguity
++ * Follow Trolltech's coding style
++ - (defaultInputMethod): Modify the function description comment
++ - (x11_apply_settings): Modify a comment
++
++ * src/input/qinputcontextplugin.cpp
++ - (class QInputContextPlugin): Modify the class description comment
++ - (create): Modify the function description comment
++
++ * src/input/qinputcontextfactory.cpp
++ - (create): Modify the function description comment
++
++2004-07-24 YamaKen <yamaken@bp.iij4u.or.jp>
++
++ * src/kernel/qinputcontext.cpp
++ - Add #if defined(Q_WS_X11) around X11 platform specific
++ functions. these functions cannot be moved to
++ qinputcontext_x11.cpp at now since the QInputContextPrivate is
++ defined in qinputcontext.cpp. This will be fixed in porting to
++ Qt4.
++ - (filterEvent): Add the function description comment according
++ with the Simplified API (filtering precedence, key compression)
++
++ * src/kernel/qapplication_x11.cpp
++ - (locateICHolderWidget, icHolderWidgets, changeAllInputContext):
++ Modify the function description comment
++
++2004-07-24 YamaKen <yamaken@bp.iij4u.or.jp>
++
++ * This commit is a comment update. No code is modified.
++
++ * src/kernel/qinputcontext.cpp
++ - (class QInputContext): Add the class description comment according
++ with the Simplified API (preedit relocation is done, not entirely
++ completed yet)
++
++2004-07-24 YamaKen <yamaken@bp.iij4u.or.jp>
++
++ * This commit contains the fixes in response to Lars Knoll's
++ advice. Thanks for the advice.
++
++ * src/kernel/qapplication_x11.cpp
++ - (x11_apply_settings): Remove trUtf8() from "xim" to specify the
++ default input method
++
++ * src/kernel/qapplication_x11.cpp, src/input/qximinputcontext_x11.cpp
++ - (ximServer, xim_preferred_style, composingKeycode, input_mapper):
++ Add qt_ prefix to avoid symbol space pollution
++ - (qt_ximServer, qt_xim_preferred_style, qt_ximComposingKeycode,
++ qt_input_mapper): Renamed from above one
++
++2004-07-24 YamaKen <yamaken@bp.iij4u.or.jp>
++
++ * This commit is a comment update. No code is modified.
++
++ * src/kernel/qinputcontext.cpp
++ - (class QInputContext): Modify several expressions
++
++2004-07-23 YamaKen <yamaken@bp.iij4u.or.jp>
++
++ * This commit is a comment update. No code is modified.
++
++ * src/kernel/qinputcontext.cpp
++ - (class QInputContext): Add the class description comment according
++ with the Simplified API (preedit preservation is done, not
++ entirely completed yet)
++ - (QInputContext, focusWidget, setFocusWidget, isComposing,
++ setFocus, unsetFocus): Modify a typo in the function description
++ comment
++
++2004-07-23 YamaKen <yamaken@bp.iij4u.or.jp>
++
++ * src/input/qsimpleinputcontext.cpp
++ - Modify the file header description
++ * src/input/qmultiinputcontext.cpp
++ - Modify the file header description
++ * src/input/qsimpleinputcontext.h
++ - Modify the file header description
++ * src/input/qmultiinputcontext.h
++ - Modify the file header description
++
++2004-07-23 YamaKen <yamaken@bp.iij4u.or.jp>
++
++ * src/input/qsimpleinputcontext.h
++ - Add a copyright and license header
++
++ * src/input/qsimpleinputcontext.cpp
++ - Add a copyright and license header
++
++2004-07-23 YamaKen <yamaken@bp.iij4u.or.jp>
++
++ * This commit is a comment update. No code is modified.
++
++ * src/kernel/qinputcontext.cpp
++ - (class QInputContext): Add the class description comment according
++ with the Simplified API (not completed yet)
++ - (QInputContext): Modify a expression in the function description
++ comment
++ - (sendIMEventInternal, font): Modify a typo in the function
++ description comment
++
++2004-07-23 Kazuki Ohta <mover@hct.zaq.ne.jp>
++
++ * src/input/qsimpleinputcontext.cpp
++ - OOps. fix typo.
++
++2004-07-23 Kazuki Ohta <mover@hct.zaq.ne.jp>
++
++ * src/input/qsimpleinputcontext.cpp
++ - follow Qt coding rule
++ - more valid capitalize case
++
++2004-07-23 Kazuki Ohta <mover@hct.zaq.ne.jp>
++
++ * src/input/qinputcontextfactory.cpp
++ - enable QSimpleInputContext by specifying in qtrc "DefaultInputMethod=simple"
++
++2004-07-23 Kazuki Ohta <mover@hct.zaq.ne.jp>
++
++ * This commit add simple table based InputContext for dead/multi key support
++
++ * src/input/qsimpleinputcontext.h, src/input/qsimpleinputcontext.cpp
++ - simple table based InputContext
++
++2004-07-22 Kazuki Ohta <mover@hct.zaq.ne.jp>
++
++ * kernel/qapplication_x11.cpp, kernel/qnamespace.h
++ - add dead key entries
++
++2004-07-22 YamaKen <yamaken@bp.iij4u.or.jp>
++
++ * This commit is a comment update. No code is modified.
++
++ * src/kernel/qinputcontext.cpp
++ - (holderWidget, setHolderWidget, focusWidget, setFocusWidget,
++ releaseComposingWidget, isPreeditRelocationEnabled, isComposing,
++ sendIMEventInternal, sendIMEvent): Add the function description comment
++ according with the Simplified API
++ - (QInputContext, setFocus, unsetFocus): Update the function
++ description comment according with the Simplified API
++ - (~QInputContext, imEventGenerated): Add the function description
++ comment
++ - (reset, identifierName, language, filterEvent): Update the
++ function description comment
++ - (setMicroFocus, mouseHandler, reset, identifierName, language):
++ Modify a expression in the function description comment
++
++ * src/kernel/qwidget_x11.cpp
++ - (icHolderWidget, resetInputContext, focusInputContext,
++ unfocusInputContext, sendMouseEventToInputContext): Update the
++ function description comment
++
++ * src/kernel/qapplication_x11.cpp
++ - (imEventReceived): Update the function description comment
++
++2004-07-21 Kazuki Ohta <mover@hct.zaq.ne.jp>
++
++ * src/input/qmultiinputcontext.h
++ - (createImSelPopup): new function
++ - (changeInputMethodWithMenuId): new slot
++ - (changeInputMethod(QString)): new function
++ - (popup): new variable
++ - (lastCreatedIMKey): new variable
++
++ * src/input/qmultiinputcontext.cpp
++ - add #ifndef QT_NO_IM
++ - (createImSelPopup): create QPopupMenu object which can switch IM.
++ Currently selected IM is marked as checked.
++
++ * src/input/qinputcontextfactory.h
++ - remove "class QPopupMenu"
++
++ * src/widget/qtextedit.cpp
++ - add im-switch popup to the menu which is shown when widget is right-clicked.
++
++ * src/widget/qlineedit.cpp
++ - add im-switch popup to the menu which is shown when widget is right-clicked.
++
++2004-07-21 YamaKen <yamaken@bp.iij4u.or.jp>
++
++ * src/kernel/qinputcontext.cpp
++ - (filterEvent, setMicroFocus, mouseHandler): Update the function
++ description comment according with the Simplified API
++ - (reset, identifierName, language): Update the function description
++ comment
++
++2004-07-20 YamaKen <yamaken@bp.iij4u.or.jp>
++
++ * src/input/qmultiinputcontext.cpp
++ - (changeInputMethod): Fix invalid imIndex circulation. Thanks
++ to Kazuki for reporting
++
++2004-07-20 YamaKen <yamaken@bp.iij4u.or.jp>
++
++ * This commit enables a flexible signal connection
++ configuration. Default behavior is based on Cougar's
++ suggestion. Thanks.
++
++ * src/input/qmultiinputcontext.h
++ - (beIndirectlyConnected): New instance variable
++
++ * src/input/qmultiinputcontext.cpp
++ - (QMultiInputContext): Add beIndirectlyConnected to initializer list
++ - (imEventReceived): Add a function description comment
++ - (changeInputMethod): Connect imEventGenerated signal of slave
++ according with beIndirectlyConnected. The default behavior is
++ changed as directly connected to imEventGenerated signal of this
++
++2004-07-20 YamaKen <yamaken@bp.iij4u.or.jp>
++
++ * src/kernel/qwidget_x11.cpp
++ - (setMicroFocusHint): Update the comment about XIM handling
++ - (focusInputContextunfocusInputContext,
++ sendMouseEventToInputContext): Add the function description comment
++
++ * src/kernel/qinputcontext_x11.cpp
++ - (x11FilterEvent): Update the function description comment
++ according with the Simplified API
++
++2004-07-20 YamaKen <yamaken@bp.iij4u.or.jp>
++
++ * src/input/qmultiinputcontext.cpp
++ - (changeInputMethod): Fix the conversion to const char * from
++ identifierName()
++
++2004-07-20 YamaKen <yamaken@bp.iij4u.or.jp>
++
++ * src/input/qximinputcontext_p.h
++ - (identifierName): Replace the result "XIM" with "xim" to be
++ consistent with corresponding immodule of GTK+
++
++ * src/kernel/qapplication_x11.cpp
++ - (defaultIM, x11_apply_settings): Replace "XIM" with "xim"
++
++ * src/input/qinputcontextfactory.cpp
++ - (create, keys): Replace "XIM" with "xim"
++
++ * tools/qtconfig/mainwindow.cpp
++ - (MainWindow): Replace "XIM" with "xim"
++
++2004-07-20 YamaKen <yamaken@bp.iij4u.or.jp>
++
++ * This commit enables QInputContext proxying, and provide an
++ experimental immodule-switcher QMultiInputContext as its
++ examples. The changes is following.
++
++ 1. Use signal to deliver QIMEvent instead of explicit
++ postEvent(). This enables QIMEvent proxying and better platform
++ abstraction. Corresponding slot is created as
++ QApplication::imEventReceived().
++
++ 2. Move some methods of QInputContext to public from protected or
++ private. This enables that proxy-IM can access slave methods.
++
++ 3. Make some methods of QInputContext virtual. This enables
++ overriding the methods as proxy
++
++ 4. Rename QInputContext::name() to identifierName() to avoid
++ conflicting with QObject::name()
++
++ This patch does not break binary compatibility from vanilla Qt3.
++ But it costs immodule developer small modification.
++
++ * src/kernel/qinputcontext.h
++ - (class QInputContext): Inherit QObject and add Q_OBJECT macro
++ - (name): Remove to rename to identifierName() to avoid conflicting
++ with QObject::name()
++ - (identifierName): New function. Renamed from name()
++ - (isComposing, isPreeditRelocationEnabled): Move to public from
++ protected to allow proxying
++ - (setFocusWidget,setHolderWidget, releaseComposingWidget): Move to
++ public from private to allow proxying
++ - (focusWidget, holderWidget):
++ * Make public from protected
++ * Make virtual to allow overriding the method as proxy
++ - (imEventGenerated): New signal
++
++ * src/kernel/qinputcontext.cpp
++ - (QInputContext): Add QObject() to initializer list
++ - (sendIMEventInternal): Replace QApplication::postEvent with signal
++ emitting according to the change
++ - (name): Remove to rename to identifierName() to avoid conflicting
++ with QObject::name()
++ - (identifierName):
++ * New function. Renamed from name()
++ * Return type has changed to QCString from QString to avoid using
++ of i18n string and confusing this with display name for endusers
++
++ * src/kernel/qwidget_x11.cpp
++ - (changeInputContext): Add QObject::connect() to follow the change
++ of IMEvent flow
++ - (createInputContext): Add QObject::connect() to follow the change
++ of IMEvent flow
++
++ * src/kernel/qapplication.h
++ - (imEventReceived): New slot
++ * src/kernel/qapplication_x11.cpp
++ - (imEventReceived): New slot to relay QIMEvent to event queue using
++ postEvent()
++
++ * src/input/qmultiinputcontext.h
++ - New file. Copyright and licensing information is temporarily
++ adapted to our cirmumstances
++ - (QMultiInputContext): New class
++ - (QMultiInputContext): New function
++ - (~QMultiInputContext): New function
++ - (identifierName): New function
++ - (language): New function
++ - (x11FilterEvent): New function. Added based on Cougar's
++ advice. Thanks
++ - (filterEvent): New function
++ - (reset): New function
++ - (setFocus): New function
++ - (unsetFocus): New function
++ - (setMicroFocus): New function
++ - (mouseHandler): New function
++ - (font): New function
++ - (isComposing): New function
++ - (isPreeditRelocationEnabled): New function
++ - (focusWidget): New function
++ - (holderWidget): New function
++ - (setFocusWidget): New function
++ - (setHolderWidget): New function
++ - (releaseComposingWidget): New function
++ - (slave): New function
++ - (slave): New function (const QInputContext *slave() const)
++ - (changeInputMethod): New function
++ - (imEventReceived): New slot
++ * src/input/qmultiinputcontext.cpp
++ - New file. Copyright and licensing information is temporarily
++ adapted to our cirmumstances
++ - (QMultiInputContext): New function
++ - (~QMultiInputContext): New function
++ - (identifierName): New function
++ - (language): New function
++ - (x11FilterEvent): New function. Added based on Cougar's
++ advice. Thanks
++ - (filterEvent): New function. Filters Control+Alt+Key_Down and
++ Control+Alt+Key_Up as IM selection keys as temporary
++ implementation. We should show popup menu
++ - (reset): New function
++ - (setFocus): New function
++ - (unsetFocus): New function
++ - (setMicroFocus): New function
++ - (mouseHandler): New function
++ - (font): New function
++ - (isComposing): New function
++ - (isPreeditRelocationEnabled): New function
++ - (focusWidget): New function
++ - (holderWidget): New function
++ - (setFocusWidget): New function
++ - (setHolderWidget): New function
++ - (releaseComposingWidget): New function
++ - (slave): New function
++ - (slave): New function (const QInputContext *slave() const)
++ - (changeInputMethod): New function
++ - (imEventReceived): New slot
++ * src/input/qinputcontextfactory.cpp
++ - (create): Add QMultiInputContext instanciation. Use the name
++ "multi" to specify it
++ * src/input/qinputcontextfactory.h
++ - Add #include "qinputcontext.h" to avoid compilation error
++
++ * src/input/qximinputcontext_p.h
++ - (class QXIMInputContext): Add Q_OBJECT macro to follow the API change
++ - (name): Remove to follow the API change
++ - (identifierName):
++ * New function. Renamed from name()
++ * Return type has changed to QCString from QString to follow the
++ API change
++ - (isPreeditRelocationEnabled): Move to public from protected to
++ follow the API change
++ - (isComposing): Remove unnecessary access permission breaker
++ because QInputContext::isComposing() have made public
++ * src/input/qximinputcontext_x11.cpp
++ - (isComposing): Remove unnecessary access permission breaker
++ because QInputContext::isComposing() have made public
++
++ * src/input/qt_input.pri
++ - Add qmultiinputcontext.h and multiinputcontext.cpp
++
++2004-07-18 LiuCougar <liucougar@gmail.com>
++
++ use virtual insert version to make subclasses work as expected (merged from bc-branch r19)
++2004-07-16 Kazuki Ohta <mover@hct.zaq.ne.jp>
++
++ * src/input/qinputcontextfactory.h: not the definition of QInputContextPlugin
++
++2004-07-13 YamaKen <yamaken@bp.iij4u.or.jp>
++
++ * src/kernel/qapplication_x11.cpp
++ - (x11ProcessEvent): Add comment for key event filtering considerations
++ - (QETWidget::translateKeyEvent): Add comment for key compression
++ considerations
++
++2004-07-11 YamaKen <yamaken@bp.iij4u.or.jp>
++
++ * src/kernel/qwidget.h
++ - (sendMouseEventToInputContext): Move into #if defined(Q_WS_X11)
++ because it is not implemented in other platforms
++
++2004-07-11 YamaKen <yamaken@bp.iij4u.or.jp>
++
++ * This commit fixes a mismerge with my Simplified API patches
++
++ * src/kernel/qwidget_x11.cpp
++ - (destroyInputContext): Replace the code with original Simplified
++ API patch. See the comment to recognize the original intention
++ - (focusInputContext): Fix a condition to call qic->setFocus() as
++ originally written. See added comment to recognize the original
++ intention
++
++ * src/kernel/qwidget.h
++ - (changeInputContext): Move into #if defined(Q_WS_X11) as
++ originally written because it is not implemented in other
++ platforms
++
++ * src/input/qximinputcontext_p.h
++ - (mouseHandler): Fix a typo as originally written
++
++ * src/input/qximinputcontext_x11.cpp
++ - Fix a comment location to express original intention
++
++2004-07-08 LiuCougar <liucougar@gmail.com>
++
++ replace sendEvent with postEvent in qinputcontext to improve the process performance of IMCompose events
++2004-07-08 YamaKen <yamaken@bp.iij4u.or.jp>
++
++ * Insert the comment 'UPDATED COMMENT REQUIRED' into some places for future
++ modifications
++ * Modify some comments
++ * Replace 'InputMethod' in some comments with 'input method'
++ * Replace 'InputContext' in some comments with 'input context'
++
++ * src/kernel/qinputcontext.h
++ - Move description of QInputContext to qinputcontext.cpp
++ * src/kernel/qinputcontext.cpp
++ - Move description of QInputContext from qinputcontext.h
++
++2004-07-07 Daisuke Kameda <kaminmat@cc.rim.or.jp>
++
++ Adding the function which realize mapping arbitrary input context and widget:
++ QApplication::locateICHolderWidget()
++ QApplication::icHolderWidgets()
++ QWidget::icHolderWidget()
++ QWidget::getInputContext()
++
++ Adding the function which changes input method:
++ QApplication::changeAllInputContext()
++ QWidget::changeInputContext()
++ QApplication::defaultInputMethod()
++
++ change QApplication::create_xim() to QApplication::create_im()
++ change QApplication::close_xim() to QApplication::close_im()
++
++
++2004-07-06 Daisuke Kameda <kaminmat@cc.rim.or.jp>
++
++ "QLineEdit should only setMicroFocus if the cursorRect has changed" by cougar
++
++2004-07-06 Daisuke Kameda <kaminmat@cc.rim.or.jp>
++
++ Re-Creating immodule for Qt/X11 trunk
++
++2004-06-22 YamaKen <yamaken@bp.iij4u.or.jp>
++
++ * src/kernel/qinputcontext.h
++ - (sendIMEvent): Private version of sendIMEvent(). Remove to
++ rename to sendIMEventInternal
++ - (sendIMEventInternal): Rename from sendIMEvent and accept
++ discrete variables rather than QEvent *e to be adaptable
++ to Qt/Embedded
++ * src/kernel/qinputcontext.cpp
++ - (sendIMEvent): Protected version of sendIMEvent(). Move
++ QEvent construction to sendIMEventInternal()
++ - (sendIMEvent): Private version of sendIMEvent(). Remove to
++ rename to sendIMEventInternal
++ - (sendIMEventInternal):
++ * Rename from sendIMEvent
++ * accept discrete variables rather than QEvent *e to be
++ adaptable to Qt/Embedded
++ * Add placeholder for Qt/Embedded
++ - (setFocusWidget): Follow specification change of sendIMEvent()
++
++2004-06-20 YamaKen <yamaken@bp.iij4u.or.jp>
++
++ * src/kernel/qevent.h
++ - (class QIMError): Remove to rename to QIMErrorEvent
++ - (class QIMErrorEvent): Rename from QIMError
++ - (QIMErrorEvent::isDeleteIC): Remove to rename to isDeletionRequest
++ - (QIMErrorEvent::isDeletionRequest): Rename from isDelete
++
++ * src/kernel/qwidget.h
++ - (imErrorEvent): Follow renaming of QIMError
++ * src/kernel/qwidget.cpp
++ - (imErrorEvent): Follow renaming of QIMError and
++ QIMError::isDeleteIC()
++ - (event): Follow renaming of QIMError
++
++ * src/kernel/qinputcontext.h
++ - (ownerWidget): Remove to rename to holderWidget
++ - (holderWidget): Rename from ownerWidget
++ - (setOwnerWidget): Remove to rename to setHolderWidget
++ - (setHolderWidget): Rename from setOwnerWidget
++ - (releaseComposingWidget): New function.
++ * src/kernel/qinputcontext.cpp
++ - (class QInputContextPrivate): Rename ownerWidget to holderWidget
++ - (ownerWidget): Remove to rename to holderWidget
++ - (holderWidget): Rename from ownerWidget
++ - (setOwnerWidget): Remove to rename to setHolderWidget
++ - (setHolderWidget): Rename from setOwnerWidget
++ - (sendIMError): Follow renaming of QIMError and
++ QIMError::isDeleteIC()
++ - (releaseComposingWidget): New function.
++
++ * src/input/qinputcontextfactory.cpp
++ - (create): Follow renaming of QInputContext::setOwnerWidget()
++
++ * src/kernel/qwidget_x11.cpp
++ - (destroy): Add qic->releaseComposingWidget() to reset
++ preserved composing information involving this widget
++
++2004-06-15 YamaKen <yamaken@bp.iij4u.or.jp>
++
++ * src/kernel/qwidget_x11.cpp
++ - (setMicroFocusHint): Replace relative coordinate with
++ global one for qic->setMicroFocus(). This is required to
++ share particular IM plugin code with Qt/Embedded
++
++ * src/widgets/qlineedit.cpp
++ - (sendMouseEventToInputContext): Add button event sending
++ when clicking on out of preedit
++
++ * src/widgets/qtextedit.cpp
++ - (sendMouseEventToInputContext): Add button event sending
++ when clicking on out of preedit
++
++ * src/input/qximinputcontext_p.h
++ - (isComposing): New function
++ - (composing, cpos, sellen): Remove to follow API change
++ - (isPreeditRelocationEnabled): New overriding function to
++ follow API change
++ - (isPreeditPreservationEnabled): New function
++
++ * src/input/qximinputcontext_x11.cpp
++ - (xic_start_callback, xic_draw_callback, xic_done_callback,
++ x11FilterEvent, reset): Replace qic->composing with
++ qic->isComposing() to use automatic compose state tracking
++ of QInputContext
++ - (QXIMInputContext): Remove composing, cpos, sellen from
++ initializer list
++ - (sendIMEvent): Remove remembering of cpos, sellen
++ - (reset): Replace IMEnd event sending with
++ QInputContext::reset()
++ - (resetClientState): Remove cpos, sellen, composing
++ - (isComposing): Exported interface for xic callbacks to
++ access protected QInputContext::isComposing()
++ - (setMicroFocus): Follow API change that replaces relative
++ coordinate with global one
++ - (mouseHandler): Add approprate reset on clicking
++ - (setFocus, unsetFocus): Remove preedit preservation and
++ relocation to follow API change. They are moved to
++ QInputContext as generarization
++ - (isPreeditRelocationEnabled): New function to follow API
++ change.
++ - (isPreeditPreservationEnabled): New function. This
++ indicates that whether preedit state should be preserved
++ or not when focusing out the widget
++
++2004-06-14 YamaKen <yamaken@bp.iij4u.or.jp>
++
++ * src/kernel/qinputcontext.h
++ - (setFocus): Remove hasPreservedPreedit arg
++ - (unsetFocus): Remove preservePreedit arg
++ - (isPreeditRelocationEnabled): New function
++ - (isComposing): New function
++
++ * src/kernel/qinputcontext.cpp
++ - (class QInputContextPrivate): Reorganize variables for
++ preedit relocation
++ - (QInputContextPrivate::resetComposingState): New function
++ - (QInputContextPrivate::updateComposingState): New function
++ - (setFocusWidget): Add preedit relocation support. Preedit
++ state is relocated to another text widget when the shared
++ context has focused on the another text widget. This
++ feature is mainly used by Japanese input methods
++ - (isPreeditRelocationEnabled): New function. Preedit
++ relocation is enabled only if this function returned TRUE.
++ - (isComposing): New function. Returns current composing
++ state as result of automatic compose state tracking
++ through sendIMEvent(). The function is for used by
++ subclass of QInputContext to know preedit state of the
++ widget. Although QWidget and QInputContextFactory can
++ access to the function as friend, they must not use the
++ function to know composing state of contexts. Keep less
++ relationship to simplify input method development
++ - (sendIMEvent): New 1-arg overloaded function. The function
++ encupsulates platform-dependent IMEvent sending. Only
++ Q_WS_X11 is supported for now. Q_WS_QWS should be supported
++ - (sendIMEvent):
++ * 4-args version of the overloaded function
++ * Isolate platform-dependent event sending process to
++ separated function
++ * Add preedit relocation support
++ * Add compose state tracking support
++ - (unsetFocus): Add reset() for simple ephemeral input
++ contexts
++ - (mouseHandler): Add reset() when clicking for simple
++ ephemeral input contexts
++ - (reset): Add preedit finalization code. Overriding
++ function should call this function to ensure proper
++ preedit state
++
++2004-06-11 YamaKen <yamaken@bp.iij4u.or.jp>
++
++ * src/kernel/qlineedit.cpp
++ - (QLineEditPrivate::xToPosInternal, QLineEditPrivate::xToPos):
++ Fix loose placement to tail when clicking beyond the string
++
++2004-06-10 YamaKen <yamaken@bp.iij4u.or.jp>
++
++ * src/kernel/qinputcontext.h
++ - Remove several pointers to QWidget to share concrete IM
++ implementation code with Qt/Embedded. The IM model of
++ Qt/Embedded requires that widgets and input contexts are
++ existing in another process
++ - (QInputContext): Remove the QWidget * arg
++ - (focusWidget, ownerWidget):
++ * Move to protected and unrecommended
++ * Move the inline function definition to qinputcontext.cpp
++ - (filterEvent): Remove unnecessary keywidget
++ - (setFocus):
++ * Remove newFocusWidget arg
++ * Add hasPreservedPreedit arg
++ - (unsetFocus): Add preservePreedit arg
++ - (sendIMError): New function to hide ownerWidget from
++ derived QInputContext
++ - (composingWidget, setComposingWidget): New function to support
++ preedit relocation of shared context on focus transition
++ - (setFocusWidget, setOwnerWidget): New function to
++ implement internal functionality on Qt/X11 platform
++ - (d): New variable to hide ABI change
++ - (QInputContext, operator=): New function to disable copy
++ constructor and operator=
++
++ * src/kernel/qinputcontext.cpp
++ - (class QInputContextPrivate): New class to hide ABI change
++ - (QInputContext):
++ * Follow API change
++ * Follow introducing QInputContextPrivate
++ - (~QInputContext): Follow introducing QInputContextPrivate
++ - (ownerWidget):
++ * Move from qinputcontext.h
++ * Follow introducing QInputContextPrivate
++ - (setOwnerWidget): New function to complement removal of
++ the arg of QInputContext constructor
++ - (composingWidget, setComposingWidget): New function. These
++ functions are participating with preedit relocation of shared
++ context on focus transition
++ - (focusWidget):
++ * Move from qinputcontext.h
++ * Follow introducing QInputContextPrivate
++ * Follow introducing composingWidget
++ - (setFocusWidget): New function to complement removal of
++ the QWidget * arg of setFocus()
++ - (filterEvent): Follow API change of removal of keywidget
++ - (sendIMEvent): Add #ifdef to isolate Qt/X11 dependent code
++ - (sendIMError): New function to hide ownerWidget() from
++ derived QInputContext. This is required to share particular
++ IM plugin code with Qt/Embedded
++ - (setFocus, unsetFocus): Follow API change
++
++ * src/input/qinputcontextfactory.cpp
++ - (create): Add ownerWidget initialization for new context
++
++ * src/kernel/qwidget.cpp
++ - (setFocus): Remove unnecessary shared input context
++ checking
++
++ * src/kernel/qwidget_x11.cpp
++ - (setActiveWindow): Replace duplicated code with
++ focusInputContext()
++ - (getInputContext): Return input context only if
++ isInputMethodEnabled() widget, otherwise returns 0. This
++ is required for proper focus transition handling
++ - (unfocusInputContext): Follow API change of
++ QInputContext::unsetFocus()
++
++ * src/kernel/qapplication.cpp
++ - (setActiveWindow): Follow change of QWidget::unfocusInputContext()
++
++ * src/kernel/qapplication_x11.cpp
++ - (x11ProcessEvent): Follow API change of
++ QInputContext::filterEvent()
++
++ * src/input/qximinputcontext_p.h
++ - (setFocus, unsetFocus): Follow API Change
++ - (hasFocus): New function
++ - (close): New function
++
++ * src/input/qximinputcontext.cpp
++ - Remove unrecommended focusWidget() and ownerWidget()
++ - (ximWidgetList): Remove to replace with ximContextList
++ - (ximContextList): New variable
++ - (xic_draw_callback): Replace focusWidget() with hasFocus()
++ to follow API Change
++ - (QXIMInputContext):
++ * Follow API change
++ * Follow replacing to ximContextList
++ - (~QXIMInputContext):
++ * Follow replacing to ximContextList
++ * Remove unnecessary QInputContext::unsetFocus()
++ - (close_xim):
++ * Follow replacing to ximContextList
++ * Follow API change
++ - (close, hasFocus): New function. Exported interface for
++ xic_draw_callback to access protected features
++ - (setFocus, unsetFocus): Follow API change
++
++2004-06-09 YamaKen <yamaken@bp.iij4u.or.jp>
++
++ * src/kernel/qwidget.cpp
++
++ - (hide): Remove unfocusInputContext(). This caused
++ excessive invalid QInputContext::unsetFocus().
++ QWidget::deactivateWidgetCleanup() handles
++ unfocusInputContext() appropriately via
++ qApp->setActiveWindow( 0 ).
++
++2004-06-08 YamaKen <yamaken@bp.iij4u.or.jp>
++
++ * src/kernel/qrichtext_p.h
++ - (QTextCursor::place): New 5-args overloaded function
++ - (QTextCursor::place): 3-args version of the function is
++ reimplemented as inline function using new 5-args one.
++ * src/kernel/qrichtext.cpp
++ - (QTextCursor::place): Remove 3-args version of the function
++ - (QTextCursor::place): New 5-args overloaded function. This
++ is copied from 3-args one and added new args loosePlacing
++ and matchBetweenCharacters
++
++ * src/widgets/qtextedit.cpp
++ - (sendMouseEventToInputContext): Send mouse event when only
++ mouse cursor is placed within preedit area. This is
++ accomplished by new 5-args QTextCursor::place()
++ - (contentsContextMenuEvent): Disable context menu when in
++ IM composing state
++ - (drawContents): Add updateMicroFocusHint() to follow
++ dragging of active window by the showed candidate window
++ - (contentsMouseMoveEvent): Fix cursor vanishing on IM
++ composing state
++
++ * src/kernel/qlineedit.cpp
++ - (sendMouseEventToInputContext): Exclude character at
++ preedit[preeditLength] from being handled as preedit
++ - (contextMenuEvent): Disable context menu when in IM
++ composing state
++ - (focusInEvent): Fix invalid MicroFocusHint position which
++ caused that candidate window is always showed at end of
++ the preedit when active window is show() back
++
++2004-06-07 YamaKen <yamaken@bp.iij4u.or.jp>
++
++ * src/kernel/qwidget_x11.cpp
++ - (reparentSys): Fix an invalid assumption about input
++ context location involving destroyInputContext()
++ - (deleteTLSysExtra): Remove destroyInputContext() because
++ the input context is not a extra data and should be
++ destroyed in QWidget::destroy()
++ - (destroyInputContext): Remove icHolderWidget() because
++ this function is called to destroy the input context that
++ belongs to the widget itself
++ - (destroy): Replace 'this->ic' with 'ic'
++ - (create): Replace 'this->ic' with 'ic'
++
++ * src/kernel/qwidget.cpp
++ - (hide): Add unfocusInputContext()
++
++ * src/kernel/qapplication.cpp
++ - (setActiveWindow): Add unfocusInputContext()
++
++ * src/kernel/qlineedit.cpp
++ - (QLineEditPrivate::xToPosInternal): New function. Copied
++ from xToPos and Remove the safety limiter.
++ - (QLineEditPrivate::xToPos): Reimprement using xToPosInternal
++ - (sendMouseEventToInputContext):
++ * Fix position boundary as matching with character
++ boundary rather than center of character
++ * Send mouse event when only mouse cursor is placed within
++ preedit area. This is accomplished by replacing xToPos()
++ with xToPosInternal()
++
++2004-06-04 YamaKen <yamaken@bp.iij4u.or.jp>
++
++ * src/kernel/qinputcontext.h
++ - (font): New function. Returns the font of focusWidget()
++ * src/kernel/qinputcontext.cpp
++ - (font): New function
++
++ * src/kernel/qwidget_x11.cpp
++ - (setActiveWindow, focusInputContext): Avoid calling
++ qic->setFocus() if the target is identical widget
++ - (setMicroFocusHint, setActiveWindow, createInputContext,
++ destroyInputContext, resetInputContext,
++ focusInputContext): Remove obsolete comment around qic
++ retrieving
++
++ * src/input/qximinputcontext_x11.cpp
++ - (language): Return Chinese languages appropriately (such
++ as "zh_CN")
++
++2004-06-03 YamaKen <yamaken@bp.iij4u.or.jp>
++
++ * src/kernel/qinputcontext.h
++ - (getOwnerWidget): Remove to rename to ownerWidget
++ - (ownerWidget): New function. Rename from getOwnerWidget to
++ be consistent with the name focusWidget
++ - (focusWidget): New function. Add to make IM-related
++ communication with focusWidget easy. The name is imported
++ from QApplication::focusWidget to be supposed same role
++ - (language): Change return type to QCString from const char *
++ - (filterEvent): Change args. Passes QEvent *event rather than
++ preexpanded key event values. This is intended to pass other
++ IM-related events in future. The IM-related events are
++ supposed as QWheelEvent, QTabletEvent and so on
++ - (setFocusHint): Remove to be appropriate name
++ - (setMicroFocus):
++ * Rename from setFocusHint to be appropriate name. This
++ function instructs 'MicroFocus' rect within a widget that
++ is different to normal focus for widgets, so the name
++ 'setFocus' is invalid. And 'Hint' is a concept for the
++ manager of this class and loses the meaning when passed to
++ this class. The passed values are not a hint but have
++ well-defined actual effect, so the name 'Hint' is
++ invalid. Finally, Qt/Embedded 2.3.7 has a samely named
++ method in QWSInputMethod
++ * Remove the arg 'widget' to consistent with the new
++ focusWidget() method
++ - (mouseHandler): New function. The method interface is
++ imported from QWSInputMethod::mouseHandler() of Qt/Embedded
++ 2.3.7 and extended for desktop system
++ - (sendIMEvent): New function. Conventional function to send
++ QIMEvent to appropriate widget using focusWidget(). IM
++ developers can send IMEvents without tracking focuswidget by
++ themself
++ - (ownerWidget): Remove to Rename to _ownerWidget
++ - (_ownerWidget): New variable. Renamed from ownerWidget to
++ avoid name conflict with ownerWidget()
++ - (_focusWidget): New variable.
++ * src/kernel/qinputcontext.cpp
++ - (QInputContext): Follow API change
++ - (~QInputContext): Clean up
++ - (filterEvent): Follow API change
++ - (sendIMEvent): New function.
++ - (setFocusHint): Remove to follow new API
++ - (setMicroFocus): copied from setFocusHint and reimplement to
++ follow new API
++ - (mouseHandler): New function
++ - (language): Follow API change
++
++ * src/kernel/qwidget.h
++ - (sendMouseEventToInputContext): New function
++ - (unfocusInputContext): New function
++
++ * src/kernel/qwidget.cpp
++ - (setFocus): Invoke unfocusInputContext() with previous
++ focus widget to delegate reset responsibility to input
++ context instead of resetInputContext() directly. See also
++ comment for further information
++ - (clearFocus): Add unfocusInputContext();
++ - (event): Delegate reset responsibility to input context
++ instead of resetInputContext() directly. See also comment
++ for further information
++
++ * src/kernel/qwidget_x11.cpp
++ - (setMicroFocusHint): Modify to follow API change
++ - (setActiveWindow): Modify to follow API change
++ - (focusInputContext): Modify to follow API change
++ - (unfocusInputContext): New function
++ - (sendMouseEventToInputContext): New function
++
++ * src/kernel/qapplication_x11.cpp
++ - (class QETWidget): Change translateKeyEventInternal definition
++ - (x11ProcessEvent): Change QInputContext::filterEvent()
++ invocation to follow API change
++ - (translateKeyEventInternal):
++ * Add new arg statefulTranslation to enable duplicate call
++ within single event loop. This is required to support both
++ QInputContext::filterEvent() and RTL extensions
++ * Restore accidencially omitted qt_mode_switch_remove_mask
++ handling
++
++ * src/input/qximinputcontext_p.h
++ - (class QXIMInputContext): Follow API change of QInputContext
++ - (language): Change return type to follow new API
++ - (setFocus): Change arg to follow new API
++ - (setFocusHint): Remove to follow new API
++ - (setMicroFocus): New method to follow new API
++ - (mouseHandler): New method to follow new API
++ - (sendIMEvent): New method (reimp)
++ - (focusWidget): Remove to follow new API
++ - (cpos): New variable
++ - (sellen): New variable
++ * src/input/qximinputcontext_x11.cpp
++ - (qt_compose_emptied): Remove as result of optimization. It
++ has become unnecessary now
++ - (xic_start_callback): Add IMStart event sending as
++ result of optimization
++ - (xic_draw_callback): Optimize state management for IMEvent
++ sending, and simplify using sendIMEvent()
++ - (xic_done_callback): Simplify using sendIMEvent()
++ - (QXIMInputContext):
++ * Follow class definition change
++ * Follow API change
++ - (~QXIMInputContext): Modify to follow API change
++ - (x11FilterEvent): Optimize state management for IMEvent
++ sending, and simplify using sendIMEvent()
++ - (sendIMEvent): New function. Implement to remember last
++ IMEvent information
++ - (reset): Simplify using sendIMEvent()
++ - (resetClientState): Follow class definition change
++ - (setFocusHint): Remove to follow new API
++ - (setMicroFocus): copied from setFocusHint and modified to
++ follow new API
++ - (mouseHandler): New function. Implemented to reset the
++ context on MouseButtonPress except for Japanese IM. See
++ also comment for further information
++ - (setFocus): Reimplement to follow new API. Automatically
++ handles appropriate IMEvent sending on focus transition
++ - (unsetFocus): Reimplement to follow new API. Implemented to
++ reset the context on FocusOut except for Japanese IM. See
++ also comment for further information
++
++ * src/widgets/qlineedit.h
++ - (sendMouseEventToInputContext): New function
++ * src/widgets/qlineedit.cpp
++ - (QLineEditPrivate::composeMode): New function
++ - (QLineEditPrivate::hasIMSelection): New function
++ - (QLineEditPrivate::preeditLength): New function
++ - (QLineEditPrivate::imSelectionLength): New function
++ - (mousePressEvent, mouseMoveEvent, mouseReleaseEvent,
++ mouseDoubleClickEvent): Support QInputContext::mouseHandler()
++ - (sendMouseEventToInputContext): New function. Retrieve the
++ position and call QWidget::sendMouseEventToInputContext()
++ - (drawContents): Follow API change
++
++ * src/widgets/qtextedit.h
++ - (sendMouseEventToInputContext): New function
++ * src/widgets/qtextedit.cpp
++ - (QTextEditPrivate::composeMode): New function
++ - (sendMouseEventToInputContext): New function. Retrieve the
++ position and call QWidget::sendMouseEventToInputContext()
++ - (imComposeEvent, imEndEvent): Clean up with composeMode()
++ - (contentsMousePressEvent, contentsMouseMoveEvent,
++ contentsMouseReleaseEvent, contentsMouseDoubleClickEvent):
++ Support QInputContext::mouseHandler()
++
++2004-06-01 YamaKen <yamaken@bp.iij4u.or.jp>
++
++ * src/input/qximinputcontext_x11.cpp (x11FilterEvent): Fix
++ commit problem except for on-the-spot style
++
++2004-05-31 YamaKen <yamaken@bp.iij4u.or.jp>
++
++ * First 'Simplified API' patch. A lot of changes to be described
++
++2004-03-16 Daisuke Kameda <kaminmat@cc.rim.or.jp>
++
++ * A lot of changes to be described before this date. Almost
++ of code are written by Daisuke Kameda
+--- changes.immodule
++++ changes.immodule
+@@ -0,0 +1,248 @@
++This file describes significant change from
++qt-x11-immodule-bc-qt3.3.2-20040623.
++
++Differences from previous release
++(qt-x11-immodule-unified-qt3.3.3-20040819) are itemized with '+'
++sign. Search it to track incremental change.
++
++****************************************************************************
++* For users *
++****************************************************************************
++
++General
++-------
++
+++ A strange character inversion problem on some input methods has been
++ fixed
++
++
++Input methods
++-------------
++
++- Added "simple" input method which provides dead/multi key composing
++ for latin languages
++
++
++User Interface
++--------------
++
++- Added input method selection menu in the context menu of text
++ widgets
++
++
++Configuration
++-------------
++
+++ default IM configuration feature of qtconfig has been disabled in BC
++ mode. This is a political change to avoid the confusion about input
++ method configuration in accordance with GTK+ environment.
++
++ See following discussion for further information.
++
++ http://freedesktop.org/pipermail/immodule-qt/2004-August/000416.html
++
++- Added new environment variables QT_IM_SWITCHER and QT_IM_MODULE to
++ set user's favorite input method as default. See README.immodule for
++ examples.
++
++
++Build & Install
++---------------
++
+++ configure options have been changed for internal reasons. See 'How
++ to install' section of README.immodule
++
++- This version of immodule requires corresponding version of each
++ input method plugins (i.e. update your additional input method
++ plugins)
++
++- Plugin directory has been changed from $QTDIR/plugins/input/ to
++ $QTDIR/plugins/inputmethods/. Delete old directory.
++
++- Some codes have been changed to allow compiling against Qt 3.2.x or
++ earlier.
++
++
++****************************************************************************
++* For develpers *
++****************************************************************************
++
++Documents
++---------
++
++- Almost description of QInputContext and QInputContextPlugin has been
++ filled. Feel free to ask obscure things at our mailinglist.
++
++
++New features
++------------
++
++- Pluggable input method switcher
++
++ Now we can write input method switcher as an ordinary input method
++ plugin. The two plugins 'imsw-multi' and 'imsw-none' are provided as
++ default. But the architecture needs more discussion about whether
++ the design is right or not. Join the discussion.
++
++- Pluggable popup menu
++
++ Any input method can provide its own popup menu. See
++ http://freedesktop.org/pipermail/immodule-qt/2004-August/000266.html
++ for further information.
++
++- QInputContext proxying
++
++ Some methods of QInputContext have been changed to enable
++ QInputContext proxying. This feature is required to implement
++ pluggable input method switcher.
++
++
++General
++-------
++
+++ QInputContext has been source compatible with Qt4 version. Basic
++ input method plugin can be source compatible without #ifdef. Only
++ pluggable popup menu requires #ifdef'ed different code. In addition,
++ be careful about use of classes that is deprecated in Qt4.
++
++- Our two development tree for Qt3 'Binary Compatible' and 'ALL' have
++ been merged into this unified source tree. The source tree is called
++ 'Unified' patch.
++
++- 'dead keys' for latin languages have been added into Qt::Key
++
++- Added plugins/src/inputmethods directory to build input method
++ plugins within the Qt source tree. The directory name 'inputmethods'
++ is intended to be compatible with Qt/Embedded. Install directory
++ name is still kept as 'input' for backward compatibility
++
++- Changed XIM input method to a plugin instead of directly link into
++ libqt
++
++- Plugin directory has been changed from $QTDIR/plugins/input/ to
++ $QTDIR/plugins/inputmethods/. Replace install directory with new
++ one.
++
++- Fixed some bugs in previous qt-x11-immodule-bc-qt3.3.2-20040623. See
++ following log for more detail.
++
++ * src/kernel/qwidget_x11.cpp
++ - (destroyInputContext): Replace the code with original Simplified
++ API patch. See the comment to recognize the original intention
++ - (focusInputContext): Fix a condition to call qic->setFocus() as
++ originally written. See added comment to recognize the original
++ intention
++
++- QLocale dependency has been removed to be compiled on Qt 3.2.x or
++ earlier
++
++- Many internal improvements and cleanups
++
++
++API Changes in qt-x11-immodule-unified-qt3.3.3-20040910
++-------------------------------------------------------
+++ QInputContext
++
++ * QInputContext()
++
++ Added 'parent' arg to be compatible with Qt4. Since the arg
++ defaults to 0, no modification of plugins are required.
++
++ * language()
++ * identifierName()
++
++ Return type of these two methods have been changed from QCString
++ which is deprecated in Qt4 to QString to make plugins source
++ compatible with Qt4.
++
++ * addActionsTo()
++
++ New method for Qt4 text widget developer
++
++
++API Changes in qt-x11-immodule-unified-qt3.3.3-20040812
++-------------------------------------------------------
++
++- QInputContext proxying
++
++ QInputContext have been changed as follows to enable QInputContext
++ proxying.
++
++ 1. Use signal to deliver QIMEvent instead of explicit
++ postEvent(). This enables QIMEvent proxying and better platform
++ abstraction. Corresponding slot is created as
++ QApplication::imEventReceived().
++
++ 2. Move some methods of QInputContext to public from protected or
++ private. This enables that proxy-IM can access slave methods.
++
++ 3. Make some methods of QInputContext virtual. This enables
++ overriding the methods as proxy
++
++ 4. Rename QInputContext::name() to identifierName() to avoid
++ conflicting with QObject::name()
++
++
++- QInputContext
++
++ * language()
++
++ New method to indicate current language
++
++ * menus()
++
++ New method for the pluggable popup menu feature
++
++ * addMenusTo()
++
++ New method for text widget developer
++
++ * deletionRequested()
++
++ New signal to request deletion of this instance. This is added for
++ fatal error handling
++
++ * identifierName()
++
++ This replaces name() of previous API to avoid conflicting with
++ QObject::name(), and to distinguish the role from displayName()
++
++ * filterEvent()
++
++ Turn the argument into const. See
++ http://freedesktop.org/pipermail/immodule-qt/2004-August/000335.html
++ for further information
++
++ * isComposing
++ * isPreeditRelocationEnabled
++
++ Move to public from protected to allow proxying
++
++ * setFocusWidget
++ * setHolderWidget
++ * releaseComposingWidget
++
++ Move to public from private to allow proxying
++
++ * focusWidget
++ * holderWidget
++
++ - Make public from protected to allow proxying
++ - Make virtual to allow overriding the method as proxy
++
++- QInputContextPlugin
++
++ * languages()
++
++ New method which returns what languages are supported by the
++ QInputContext instance
++
++ * displayName()
++
++ New method which returns a user friendly i18n-ized name of the
++ QInputContext instance
++
++ * description()
++
++ New method which returns a i18n-ized brief description of the
++ QInputContext instance
+--- configure
++++ configure
+@@ -223,7 +223,7 @@
+ fi
+
+ # licensed modules depend on type of commercial license
+-MODULES="styles tools kernel widgets dialogs iconview workspace"
++MODULES="styles tools kernel widgets dialogs iconview workspace inputmethod"
+ [ "$PLATFORM_QWS" = "yes" ] && [ "$Products" = "qt-professional" ] && MODULES="$MODULES network"
+ [ "$Products" != "qt-professional" ] && MODULES="$MODULES network canvas table xml opengl sql"
+ CFG_MODULES_AVAILABLE=$MODULES
+@@ -270,6 +270,9 @@
+ CFG_SQL_AUTODETECTED=
+ CFG_GFX_AVAILABLE=
+ CFG_STYLE_AVAILABLE=
++#Keep this position for CFG_IM* to avoid patch rejection
++CFG_IM=yes
++CFG_IM_EXT=no
+ CFG_TABLET=auto
+ CFG_XKB=auto
+ CFG_NIS=auto
+@@ -401,6 +404,12 @@
+ VAR=fatal_error
+ VAL=no
+ ;;
++ #Qt style yes options for immodule
++ #Keep this place to avoid patch rejection
++ -inputmethod|-inputmethod-ext)
++ VAR=`echo $1 | sed "s,^-\(.*\),\1,"`
++ VAL=yes
++ ;;
+ -embedded)
+ VAR=embedded
+ # this option may or may not be followed by an argument
+@@ -1020,6 +1029,20 @@
+ dlopen-opengl)
+ CFG_DLOPEN_OPENGL="$VAL"
+ ;;
++ inputmethod)
++ if [ "$VAL" = "yes" ] || [ "$VAL" = "no" ]; then
++ CFG_IM="$VAL"
++ else
++ UNKNOWN_OPT=yes
++ fi
++ ;;
++ inputmethod-ext)
++ if [ "$VAL" = "yes" ] || [ "$VAL" = "no" ]; then
++ CFG_IM_EXT="$VAL"
++ else
++ UNKNOWN_OPT=yes
++ fi
++ ;;
+ *)
+ UNKNOWN_OPT=yes
+ ;;
+@@ -1899,6 +1922,13 @@
+ CFG_GFX_AVAILABLE=`echo $CFG_GFX_AVAILABLE`
+ fi
+
++# immodule extensions
++if [ "$CFG_IM" = "no" ]; then
++ CFG_IM_EXT=no
++fi
++if [ "$CFG_IM_EXT" = "yes" ]; then
++ CFG_IM=yes
++fi
+
+ #-------------------------------------------------------------------------------
+ # help - interactive parts of the script _after_ this section please
+@@ -2206,6 +2236,20 @@
+ XKY="*"
+ XKN=" "
+ fi
++ if [ "$CFG_IM" = "no" ]; then
++ IMY=" "
++ IMN="*"
++ else
++ IMY="*"
++ IMN=" "
++ fi
++ if [ "$CFG_IM_EXT" = "no" ]; then
++ IXY=" "
++ IXN="*"
++ else
++ IXY="*"
++ IXN=" "
++ fi
+ cat << EOF
+
+ Qt/X11 only:
+@@ -2254,6 +2298,14 @@
+ -dlopen-opengl ..... Qt uses dlopen(3) to resolve OpenGL functions
+ (instead of linking with OpenGL libraries directly).
+
++ $IMN -no-inputmethod .... Do not compile immodule (extensible input method)
++ support.
++ $IMY -inputmethod ....... Compile immodule support.
++
++ $IXN -no-inputmethod-ext Do not compile more immodule extensions support.
++ $IXY -inputmethod-ext ... Compile more immodule extensions support.
++ (breaks ABI with standard Qt3).
++
+ EOF
+ fi
+
+@@ -2983,6 +3035,16 @@
+ if [ "$CFG_XKB" = "yes" ]; then
+ QMAKE_CONFIG="$QMAKE_CONFIG xkb"
+ fi
++ if [ "$CFG_IM" = "yes" ]; then
++ QMAKE_CONFIG="$QMAKE_CONFIG inputmethod"
++ elif [ "$CFG_IM" = "no" ]; then
++ QCONFIG_FLAGS="$QCONFIG_FLAGS QT_NO_IM"
++ fi
++ if [ "$CFG_IM_EXT" = "yes" ]; then
++ QMAKE_CONFIG="$QMAKE_CONFIG inputmethod-ext"
++ elif [ "$CFG_IM_EXT" = "no" ]; then
++ QCONFIG_FLAGS="$QCONFIG_FLAGS QT_NO_IM_EXTENSIONS"
++ fi
+ elif [ "$PLATFORM_MAC" = "yes" ]; then
+ if [ "$CFG_TABLET" = "yes" ]; then
+ QMAKE_CONFIG="$QMAKE_CONFIG tablet"
+@@ -3107,7 +3169,7 @@
+ # minimal-config small-config medium-config large-config full-config
+ #
+ # Modules:
+-# styles tools kernel widgets dialogs iconview workspace
++# styles tools kernel widgets dialogs iconview workspace inputmethod
+ #
+ # Enterprise/Open Source edition modules:
+ # network canvas table xml opengl sql
+@@ -3115,6 +3177,8 @@
+ # Options:
+ # stl
+ #
++# X11 : inputmethod-ext
++#
+ # Things that do not affect the Qt API/ABI:
+ # system-jpeg no-jpeg jpeg
+ # system-mng no-mng mng
+@@ -3136,10 +3200,10 @@
+ # tablet
+ # ipv6
+ #
+-# X11 : xftnameunparse x11sm xinerama xcursor xrandr xrender xftfreetype xkb
++# X11 : xftnameunparse x11sm xinerama xcursor xrandr xrender xftfreetype xkb inputmethod
+ # Embedded: embedded ft
+ #
+-ALL_OPTIONS="styles tools kernel widgets dialogs iconview workspace network canvas table xml opengl sql stl"
++ALL_OPTIONS="styles tools kernel widgets dialogs iconview workspace inputmethod network canvas table xml opengl sql stl"
+ BUILD_CONFIG=
+ BUILD_OPTIONS=
+
+@@ -3153,7 +3217,7 @@
+ BUILD_CONFIG="$config_option"
+ ;;
+
+- styles|tools|kernel|widgets|dialogs|iconview|workspace|network|canvas|table|xml|opengl|sql|stl)
++ styles|tools|kernel|widgets|dialogs|iconview|workspace|inputmethod|network|canvas|table|xml|opengl|sql|stl)
+ # these config options affect the Qt API/ABI. they should influence
+ # the generation of the buildkey, so we don't skip them
+ SKIP="no"
+@@ -3500,6 +3564,8 @@
+ echo "XRender support ..... $CFG_XRENDER"
+ echo "Xft support ......... $CFG_FREETYPE"
+ echo "XKB Support ......... $CFG_XKB"
++ echo "immodule support .... $CFG_IM"
++ echo "immodule ext support $CFG_IM_EXT"
+ elif [ "$PLATFORM_MAC" = "yes" ]; then
+ echo "Accessibility ....... $CFG_ACCESSIBILITY"
+ echo "Tablet support ...... $CFG_TABLET"
+--- make-symlinks.sh
++++ make-symlinks.sh
+@@ -0,0 +1,12 @@
++#!/bin/sh
++cd include
++rm -f q*.h
++ln -s ../src/*/q*.h .
++ln -s ../extensions/*/src/q*.h .
++ln -s ../tools/assistant/lib/qassistantclient.h .
++ln -s ../tools/designer/uilib/qwidgetfactory.h .
++rm -f q*_p.h
++cd private
++rm -f q*_p.h
++ln -s ../../src/*/q*_p.h .
++
+--- plugins/src/inputmethods/imsw-multi/imsw-multi.pro
++++ plugins/src/inputmethods/imsw-multi/imsw-multi.pro
+@@ -0,0 +1,14 @@
++TEMPLATE = lib
++TARGET = qimsw-multi
++DESTDIR = ../../../inputmethods
++
++INCLUDEPATH += .
++CONFIG += qt warn_on debug plugin
++target.path += $$plugins.path/inputmethods
++INSTALLS += target
++
++# Input
++HEADERS += qmultiinputcontext.h \
++ qmultiinputcontextplugin.h
++SOURCES += qmultiinputcontext.cpp \
++ qmultiinputcontextplugin.cpp
+--- plugins/src/inputmethods/imsw-multi/qmultiinputcontext.cpp
++++ plugins/src/inputmethods/imsw-multi/qmultiinputcontext.cpp
+@@ -0,0 +1,379 @@
++/****************************************************************************
++** $Id$
++**
++** Implementation of QMultiInputContext class
++**
++** Copyright (C) 2004 immodule for Qt Project. All rights reserved.
++**
++** This file is written to contribute to Trolltech AS under their own
++** licence. You may use this file under your Qt license. Following
++** description is copied from their original file headers. Contact
++** immodule-qt@freedesktop.org if any conditions of this licensing are
++** not clear to you.
++**
++**
++** This file is part of the input method module of the Qt GUI Toolkit.
++**
++** This file may be distributed under the terms of the Q Public License
++** as defined by Trolltech AS of Norway and appearing in the file
++** LICENSE.QPL included in the packaging of this file.
++**
++** This file may be distributed and/or modified under the terms of the
++** GNU General Public License version 2 as published by the Free Software
++** Foundation and appearing in the file LICENSE.GPL included in the
++** packaging of this file.
++**
++** Licensees holding valid Qt Enterprise Edition or Qt Professional Edition
++** licenses may use this file in accordance with the Qt Commercial License
++** Agreement provided with the Software.
++**
++** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
++** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
++**
++** See http://www.trolltech.com/pricing.html or email sales@trolltech.com for
++** information about Qt Commercial License Agreements.
++** See http://www.trolltech.com/qpl/ for QPL licensing information.
++** See http://www.trolltech.com/gpl/ for GPL licensing information.
++**
++** Contact info@trolltech.com if any conditions of this licensing are
++** not clear to you.
++**
++**********************************************************************/
++
++#ifndef QT_NO_IM
++#include "qmultiinputcontext.h"
++#include <qinputcontextfactory.h>
++#include <qstringlist.h>
++#include <qpopupmenu.h>
++#ifndef QT_NO_IM_EXTENSIONS
++#include <qsettings.h>
++#endif
++
++#include <stdlib.h>
++
++#define QT_NO_IM_QMULTIINPUTCONTEXT_IMINDEX
++
++QMultiInputContext::QMultiInputContext()
++ : QInputContext(), _slave( 0 ), imIndex( 0 ), cachedFocus( FALSE ),
++ cachedFocusWidget( 0 ), cachedHolderWidget( 0 ),
++ beIndirectlyConnected( FALSE ), popup( NULL ), currentIMKey( QString::null )
++{
++ keyDict.setAutoDelete( true );
++ keyDict.clear();
++
++ if ( getenv( "QT_IM_MODULE" ) ) {
++ currentIMKey = getenv( "QT_IM_MODULE" );
++ } else {
++#ifndef QT_NO_IM_EXTENSIONS
++ QSettings settings;
++ currentIMKey = settings.readEntry( "/qt/DefaultInputMethod", "xim" );
++#else
++ currentIMKey = "xim";
++#endif
++ }
++}
++
++QMultiInputContext::~QMultiInputContext()
++{
++ keyDict.clear();
++}
++
++
++QString QMultiInputContext::identifierName()
++{
++ return ( slave() ) ? slave()->identifierName() : "";
++}
++
++QString QMultiInputContext::language()
++{
++ return ( slave() ) ? slave()->language() : "";
++}
++
++
++#if defined(Q_WS_X11)
++bool QMultiInputContext::x11FilterEvent( QWidget *keywidget, XEvent *event )
++{
++ return ( slave() ) ? slave()->x11FilterEvent( keywidget, event ) : FALSE;
++}
++#endif // Q_WS_X11
++
++
++bool QMultiInputContext::filterEvent( const QEvent *event )
++{
++#if !defined(QT_NO_IM_QMULTIINPUTCONTEXT_IMINDEX)
++ if ( event->type() == QEvent::KeyPress ) {
++ QKeyEvent *keyevent = (QKeyEvent *)event;
++
++ // filter selection key
++ // Control+Alt+Key_Down: change to next input method
++ // Control+Alt+Key_Up: change to previous input method
++ if ( ( keyevent->state() & Qt::ControlButton ) &&
++ ( keyevent->state() & Qt::AltButton ) ) {
++ if ( keyevent->key() == Qt::Key_Up ) {
++ changeInputMethod( --imIndex );
++ return TRUE;
++ } else if ( keyevent->key() == Qt::Key_Down ) {
++ changeInputMethod( ++imIndex );
++ return TRUE;
++ }
++ }
++ }
++#endif
++
++ return ( slave() ) ? slave()->filterEvent( event ) : FALSE;
++}
++
++void QMultiInputContext::reset()
++{
++ if ( slave() )
++ slave()->reset();
++}
++
++
++void QMultiInputContext::setFocus()
++{
++ cachedFocus = TRUE;
++ if ( slave() )
++ slave()->setFocus();
++}
++
++void QMultiInputContext::unsetFocus()
++{
++ cachedFocus = FALSE;
++ if ( slave() )
++ slave()->unsetFocus();
++}
++
++void QMultiInputContext::setMicroFocus( int x, int y, int w, int h, QFont *f )
++{
++ if ( slave() )
++ slave()->setMicroFocus( x, y, w, h, f );
++}
++
++void QMultiInputContext::mouseHandler( int x, QEvent::Type type,
++ Qt::ButtonState button,
++ Qt::ButtonState state )
++{
++ if ( slave() )
++ slave()->mouseHandler( x, type, button, state );
++}
++
++QFont QMultiInputContext::font() const
++{
++ return ( slave() ) ? slave()->font() : QInputContext::font();
++}
++
++void QMultiInputContext::destroyInputContext()
++{
++ if ( _slave ) {
++ // _slave->reset() may not properly work in the case, so we
++ // manually resets the composing state of text widget
++ if ( _slave->focusWidget() ) {
++ QIMEvent *terminator = new QIMEvent( QEvent::IMEnd, QString::null, -1 );
++ emit imEventGenerated( _slave->focusWidget(), terminator );
++ }
++ _slave->deleteLater();
++ _slave = 0;
++ }
++}
++
++
++/*!
++ This function is a placeholder for future experiment or extension
++ such as commit string snooping. set beIndirectlyConnected = TRUE
++ to activate this virtual function.
++*/
++void QMultiInputContext::postIMEvent( QObject *receiver, QIMEvent *event )
++{
++ emit imEventGenerated( receiver, event );
++}
++
++
++#if defined(Q_WS_X11)
++QWidget *QMultiInputContext::focusWidget() const
++{
++ return ( slave() ) ? slave()->focusWidget() : 0;
++}
++
++QWidget *QMultiInputContext::holderWidget() const
++{
++ return ( slave() ) ? slave()->holderWidget() : 0;
++}
++
++
++void QMultiInputContext::setFocusWidget( QWidget *w )
++{
++ cachedFocusWidget = w;
++ if ( slave() )
++ slave()->setFocusWidget( w );
++}
++
++void QMultiInputContext::setHolderWidget( QWidget *w )
++{
++ cachedHolderWidget = w;
++ if ( slave() )
++ slave()->setHolderWidget( w );
++}
++
++void QMultiInputContext::releaseComposingWidget( QWidget *w )
++{
++ if ( slave() )
++ slave()->releaseComposingWidget( w );
++}
++
++#endif
++
++bool QMultiInputContext::isComposing() const
++{
++ return ( slave() ) ? slave()->isComposing() : FALSE;
++}
++
++bool QMultiInputContext::isPreeditRelocationEnabled()
++{
++ return ( slave() ) ? slave()->isPreeditRelocationEnabled() : FALSE;
++}
++
++QInputContext *QMultiInputContext::slave()
++{
++ if ( ! _slave ) {
++#if !defined(QT_NO_IM_QMULTIINPUTCONTEXT_IMINDEX)
++ changeInputMethod( imIndex );
++#else
++ changeInputMethod( currentIMKey );
++#endif
++ }
++
++ return _slave;
++}
++
++const QInputContext *QMultiInputContext::slave() const
++{
++ return _slave;
++}
++
++void QMultiInputContext::changeInputMethod( int newIndex )
++{
++#if !defined(QT_NO_IM_QMULTIINPUTCONTEXT_IMINDEX)
++ QStringList keys = QInputContextFactory::keys();
++ if ( keys.size() == 0 )
++ return;
++
++ if ( newIndex >= (int)keys.size() ) {
++ imIndex = 0;
++ } else if ( newIndex < 0 ) {
++ imIndex = keys.size() - 1;
++ } else {
++ imIndex = newIndex;
++ }
++
++ changeInputMethod( keys[imIndex] );
++#endif
++}
++
++void QMultiInputContext::changeInputMethod( QString key )
++{
++ QStringList keys = QInputContextFactory::keys();
++ if ( keys.size() == 0 )
++ return;
++
++ if ( key.isEmpty() )
++ key = keys[0];
++
++ if ( _slave ) {
++ _slave->reset();
++ delete _slave;
++ }
++
++ _slave = QInputContextFactory::create( key, cachedHolderWidget );
++ if ( _slave ) {
++ insertChild( _slave );
++
++ const char *method;
++ if ( beIndirectlyConnected ) {
++ method = SLOT(imEventReceived(QObject *,QIMEvent *));
++ } else {
++ method = SIGNAL(imEventGenerated(QObject *,QIMEvent *));
++ }
++ connect( _slave, SIGNAL(imEventGenerated(QObject *,QIMEvent *)),
++ this, method );
++ connect( _slave, SIGNAL(deletionRequested()),
++ this, SLOT(destroyInputContext()) );
++
++ if ( cachedFocus ) {
++ _slave->setFocus();
++ _slave->setFocusWidget( cachedFocusWidget );
++ }
++
++ currentIMKey = key;
++
++ //qDebug( "QMultiInputContext::changeInputMethod(): index=%d, slave=%s",
++ // imIndex, (const char *)_slave->identifierName() );
++ }
++}
++
++QPtrList<QInputContextMenu> *QMultiInputContext::menus()
++{
++ QInputContextMenu *imSelMenu = new QInputContextMenu;
++ imSelMenu->title = tr( "Select Input &Method" );
++ imSelMenu->popup = createImSelPopup();
++
++ QPtrList<QInputContextMenu> *result = new QPtrList<QInputContextMenu>;
++ result->append( imSelMenu );
++
++ QPtrList<QInputContextMenu> *slaveMenus = ( slave() ) ? slave()->menus() : 0;
++ if ( slaveMenus ) {
++ for ( QPtrList<QInputContextMenu>::Iterator it = slaveMenus->begin();
++ it != slaveMenus->end();
++ ++it ) {
++ QInputContextMenu *slaveMenu = *it;
++ result->append( slaveMenu );
++ }
++ delete slaveMenus;
++ }
++
++ return result;
++}
++
++QPopupMenu *QMultiInputContext::createImSelPopup()
++{
++ if ( popup )
++ delete popup;
++
++ popup = new QPopupMenu();
++ keyDict.clear();
++
++ QStringList keys = QInputContextFactory::keys();
++ for ( uint i=0; i < keys.size(); i++ ) {
++ QString idName = keys[i];
++ bool isIMSwitcher = idName.startsWith( "imsw-" );
++
++ if ( ! isIMSwitcher ) {
++ QString dispName = QInputContextFactory::displayName( idName );
++ if ( dispName.isEmpty() )
++ dispName = idName;
++
++ int id = popup->insertItem( dispName );
++ keyDict.insert( (long)id, new QString( idName ) );
++
++ if ( idName == currentIMKey )
++ popup->setItemChecked( id, true );
++
++ QString descriptionStr = QInputContextFactory::description( idName );
++ if ( ! descriptionStr.isEmpty() )
++ popup->setWhatsThis( id, descriptionStr );
++ }
++ }
++
++ QObject::connect( popup, SIGNAL(activated(int)),
++ this, SLOT(changeInputMethodWithMenuId(int)) );
++
++ return popup;
++}
++
++void QMultiInputContext::changeInputMethodWithMenuId( int menuid )
++{
++ QString *key = keyDict.find( (long)menuid );
++ changeInputMethod( (*key) );
++}
++
++#endif
+--- plugins/src/inputmethods/imsw-multi/qmultiinputcontext.h
++++ plugins/src/inputmethods/imsw-multi/qmultiinputcontext.h
+@@ -0,0 +1,124 @@
++/****************************************************************************
++** $Id$
++**
++** Definition of QMultiInputContext class
++**
++** Copyright (C) 2004 immodule for Qt Project. All rights reserved.
++**
++** This file is written to contribute to Trolltech AS under their own
++** licence. You may use this file under your Qt license. Following
++** description is copied from their original file headers. Contact
++** immodule-qt@freedesktop.org if any conditions of this licensing are
++** not clear to you.
++**
++**
++** This file is part of the input method module of the Qt GUI Toolkit.
++**
++** This file may be distributed under the terms of the Q Public License
++** as defined by Trolltech AS of Norway and appearing in the file
++** LICENSE.QPL included in the packaging of this file.
++**
++** This file may be distributed and/or modified under the terms of the
++** GNU General Public License version 2 as published by the Free Software
++** Foundation and appearing in the file LICENSE.GPL included in the
++** packaging of this file.
++**
++** Licensees holding valid Qt Enterprise Edition or Qt Professional Edition
++** licenses may use this file in accordance with the Qt Commercial License
++** Agreement provided with the Software.
++**
++** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
++** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
++**
++** See http://www.trolltech.com/pricing.html or email sales@trolltech.com for
++** information about Qt Commercial License Agreements.
++** See http://www.trolltech.com/qpl/ for QPL licensing information.
++** See http://www.trolltech.com/gpl/ for GPL licensing information.
++**
++** Contact info@trolltech.com if any conditions of this licensing are
++** not clear to you.
++**
++**********************************************************************/
++
++#ifndef QMULTIINPUTCONTEXT_H
++#define QMULTIINPUTCONTEXT_H
++
++#ifndef QT_NO_IM
++
++#include <qnamespace.h>
++#include <qwidget.h>
++#include <qinputcontext.h>
++#include <qguardedptr.h>
++#include <qintdict.h>
++
++class QPopupMenu;
++
++class QMultiInputContext : public QInputContext
++{
++ Q_OBJECT
++public:
++ QMultiInputContext();
++ ~QMultiInputContext();
++
++ QString identifierName();
++ QString language();
++
++#if defined(Q_WS_X11)
++ bool x11FilterEvent( QWidget *keywidget, XEvent *event );
++#endif // Q_WS_X11
++ bool filterEvent( const QEvent *event );
++ void reset();
++
++ void setFocus();
++ void unsetFocus();
++ void setMicroFocus( int x, int y, int w, int h, QFont *f = 0 );
++ void mouseHandler( int x, QEvent::Type type,
++ Qt::ButtonState button, Qt::ButtonState state );
++ QFont font() const;
++ bool isComposing() const;
++ bool isPreeditRelocationEnabled();
++
++#if (QT_VERSION-0 >= 0x040000)
++ QPtrList<QMenu> *qt4menus();
++#endif
++ QPtrList<QInputContextMenu> *menus();
++ QPopupMenu *createImSelPopup();
++
++#if defined(Q_WS_X11)
++ QWidget *focusWidget() const;
++ QWidget *holderWidget() const;
++
++ void setFocusWidget( QWidget *w );
++ void setHolderWidget( QWidget *w );
++ void releaseComposingWidget( QWidget *w );
++#endif
++
++public slots:
++ virtual void destroyInputContext();
++ virtual void postIMEvent( QObject *receiver, QIMEvent *event );
++
++protected slots:
++ void changeInputMethodWithMenuId( int menuid );
++
++protected:
++ QInputContext *slave();
++ const QInputContext *slave() const;
++
++ void changeInputMethod( int newIndex );
++ void changeInputMethod( QString name );
++
++ QInputContext *_slave;
++ int imIndex;
++ bool cachedFocus;
++ QWidget *cachedFocusWidget;
++ QWidget *cachedHolderWidget;
++ bool beIndirectlyConnected;
++
++ QIntDict<QString> keyDict;
++ QGuardedPtr<QPopupMenu> popup;
++ QString currentIMKey;
++};
++
++#endif //Q_NO_IM
++
++#endif // QMULTIINPUTCONTEXT_H
+--- plugins/src/inputmethods/imsw-multi/qmultiinputcontextplugin.cpp
++++ plugins/src/inputmethods/imsw-multi/qmultiinputcontextplugin.cpp
+@@ -0,0 +1,88 @@
++/****************************************************************************
++** $Id$
++**
++** Implementation of QMultiInputContextPlugin class
++**
++** Copyright (C) 2004 immodule for Qt Project. All rights reserved.
++**
++** This file is written to contribute to Trolltech AS under their own
++** licence. You may use this file under your Qt license. Following
++** description is copied from their original file headers. Contact
++** immodule-qt@freedesktop.org if any conditions of this licensing are
++** not clear to you.
++**
++**
++** This file is part of the input method module of the Qt GUI Toolkit.
++**
++** This file may be distributed under the terms of the Q Public License
++** as defined by Trolltech AS of Norway and appearing in the file
++** LICENSE.QPL included in the packaging of this file.
++**
++** This file may be distributed and/or modified under the terms of the
++** GNU General Public License version 2 as published by the Free Software
++** Foundation and appearing in the file LICENSE.GPL included in the
++** packaging of this file.
++**
++** Licensees holding valid Qt Enterprise Edition or Qt Professional Edition
++** licenses may use this file in accordance with the Qt Commercial License
++** Agreement provided with the Software.
++**
++** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
++** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
++**
++** See http://www.trolltech.com/pricing.html or email sales@trolltech.com for
++** information about Qt Commercial License Agreements.
++** See http://www.trolltech.com/qpl/ for QPL licensing information.
++** See http://www.trolltech.com/gpl/ for GPL licensing information.
++**
++** Contact info@trolltech.com if any conditions of this licensing are
++** not clear to you.
++**
++**********************************************************************/
++
++#ifndef QT_NO_IM
++#include "qmultiinputcontext.h"
++#include "qmultiinputcontextplugin.h"
++#include <qinputcontextplugin.h>
++#include <qstringlist.h>
++
++
++QMultiInputContextPlugin::QMultiInputContextPlugin()
++{
++}
++
++QMultiInputContextPlugin::~QMultiInputContextPlugin()
++{
++}
++
++QStringList QMultiInputContextPlugin::keys() const
++{
++ // input method switcher should named with "imsw-" prefix to
++ // prevent to be listed in ordinary input method list.
++ return QStringList( "imsw-multi" );
++}
++
++QInputContext *QMultiInputContextPlugin::create( const QString &key )
++{
++ return new QMultiInputContext;
++}
++
++QStringList QMultiInputContextPlugin::languages( const QString &key )
++{
++ return QStringList( "" );
++}
++
++QString QMultiInputContextPlugin::displayName( const QString &key )
++{
++ return tr( "Multiple Input Method Switcher" );
++}
++
++QString QMultiInputContextPlugin::description( const QString &key )
++{
++ return tr( "Multiple input method switcher that uses the context menu of the text widgets" );
++}
++
++
++Q_EXPORT_PLUGIN( QMultiInputContextPlugin )
++
++#endif
+--- plugins/src/inputmethods/imsw-multi/qmultiinputcontextplugin.h
++++ plugins/src/inputmethods/imsw-multi/qmultiinputcontextplugin.h
+@@ -0,0 +1,63 @@
++/****************************************************************************
++** $Id$
++**
++** Definition of QMultiInputContextPlugin class
++**
++** Copyright (C) 2004 immodule for Qt Project. All rights reserved.
++**
++** This file is written to contribute to Trolltech AS under their own
++** licence. You may use this file under your Qt license. Following
++** description is copied from their original file headers. Contact
++** immodule-qt@freedesktop.org if any conditions of this licensing are
++** not clear to you.
++**
++**
++** This file is part of the input method module of the Qt GUI Toolkit.
++**
++** This file may be distributed under the terms of the Q Public License
++** as defined by Trolltech AS of Norway and appearing in the file
++** LICENSE.QPL included in the packaging of this file.
++**
++** This file may be distributed and/or modified under the terms of the
++** GNU General Public License version 2 as published by the Free Software
++** Foundation and appearing in the file LICENSE.GPL included in the
++** packaging of this file.
++**
++** Licensees holding valid Qt Enterprise Edition or Qt Professional Edition
++** licenses may use this file in accordance with the Qt Commercial License
++** Agreement provided with the Software.
++**
++** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
++** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
++**
++** See http://www.trolltech.com/pricing.html or email sales@trolltech.com for
++** information about Qt Commercial License Agreements.
++** See http://www.trolltech.com/qpl/ for QPL licensing information.
++** See http://www.trolltech.com/gpl/ for GPL licensing information.
++**
++** Contact info@trolltech.com if any conditions of this licensing are
++** not clear to you.
++**
++**********************************************************************/
++
++#ifndef QT_NO_IM
++#include "qmultiinputcontext.h"
++#include <qinputcontextplugin.h>
++#include <qstringlist.h>
++
++
++class QMultiInputContextPlugin : public QInputContextPlugin
++{
++ Q_OBJECT
++public:
++ QMultiInputContextPlugin();
++ ~QMultiInputContextPlugin();
++
++ QStringList keys() const;
++ QInputContext *create( const QString &key );
++ QStringList languages( const QString &key );
++ QString displayName( const QString &key );
++ QString description( const QString &key );
++};
++
++#endif
+--- plugins/src/inputmethods/imsw-none/imsw-none.pro
++++ plugins/src/inputmethods/imsw-none/imsw-none.pro
+@@ -0,0 +1,12 @@
++TEMPLATE = lib
++TARGET = qimsw-none
++DESTDIR = ../../../inputmethods
++
++INCLUDEPATH += .
++CONFIG += qt warn_on debug plugin
++target.path += $$plugins.path/inputmethods
++INSTALLS += target
++
++# Input
++HEADERS += qnoneinputcontextplugin.h
++SOURCES += qnoneinputcontextplugin.cpp
+--- plugins/src/inputmethods/imsw-none/qnoneinputcontextplugin.cpp
++++ plugins/src/inputmethods/imsw-none/qnoneinputcontextplugin.cpp
+@@ -0,0 +1,101 @@
++/****************************************************************************
++** $Id$
++**
++** Implementation of QNoneInputContextPlugin class
++**
++** Copyright (C) 2004 immodule for Qt Project. All rights reserved.
++**
++** This file is written to contribute to Trolltech AS under their own
++** licence. You may use this file under your Qt license. Following
++** description is copied from their original file headers. Contact
++** immodule-qt@freedesktop.org if any conditions of this licensing are
++** not clear to you.
++**
++**
++** This file is part of the input method module of the Qt GUI Toolkit.
++**
++** This file may be distributed under the terms of the Q Public License
++** as defined by Trolltech AS of Norway and appearing in the file
++** LICENSE.QPL included in the packaging of this file.
++**
++** This file may be distributed and/or modified under the terms of the
++** GNU General Public License version 2 as published by the Free Software
++** Foundation and appearing in the file LICENSE.GPL included in the
++** packaging of this file.
++**
++** Licensees holding valid Qt Enterprise Edition or Qt Professional Edition
++** licenses may use this file in accordance with the Qt Commercial License
++** Agreement provided with the Software.
++**
++** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
++** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
++**
++** See http://www.trolltech.com/pricing.html or email sales@trolltech.com for
++** information about Qt Commercial License Agreements.
++** See http://www.trolltech.com/qpl/ for QPL licensing information.
++** See http://www.trolltech.com/gpl/ for GPL licensing information.
++**
++** Contact info@trolltech.com if any conditions of this licensing are
++** not clear to you.
++**
++**********************************************************************/
++
++#ifndef QT_NO_IM
++#include "qnoneinputcontextplugin.h"
++#include <qinputcontextfactory.h>
++#include <qsettings.h>
++#include <stdlib.h>
++
++
++QNoneInputContextPlugin::QNoneInputContextPlugin()
++{
++}
++
++QNoneInputContextPlugin::~QNoneInputContextPlugin()
++{
++}
++
++QStringList QNoneInputContextPlugin::keys() const
++{
++ // input method switcher should named with "imsw-" prefix to
++ // prevent to be listed in ordinary input method list.
++ return QStringList( "imsw-none" );
++}
++
++QInputContext *QNoneInputContextPlugin::create( const QString &key )
++{
++ QString actuallySpecifiedKey;
++
++ bool isIMSwitcher = key.startsWith( "imsw-" );
++ if ( ! isIMSwitcher )
++ return 0;
++
++ if ( getenv( "QT_IM_MODULE" ) ) {
++ actuallySpecifiedKey = getenv( "QT_IM_MODULE" );
++ } else {
++ QSettings settings;
++ actuallySpecifiedKey = settings.readEntry( "/qt/DefaultInputMethod", "xim" );
++ }
++
++ return QInputContextFactory::create( actuallySpecifiedKey, 0 );
++}
++
++QStringList QNoneInputContextPlugin::languages( const QString &key )
++{
++ return QStringList( "" );
++}
++
++QString QNoneInputContextPlugin::displayName( const QString &key )
++{
++ return tr( "Dummy Input Method Switcher" );
++}
++
++QString QNoneInputContextPlugin::description( const QString &key )
++{
++ return tr( "Dummy input method switcher that uses the context menu of the text widgets" );
++}
++
++
++Q_EXPORT_PLUGIN( QNoneInputContextPlugin )
++
++#endif
+--- plugins/src/inputmethods/imsw-none/qnoneinputcontextplugin.h
++++ plugins/src/inputmethods/imsw-none/qnoneinputcontextplugin.h
+@@ -0,0 +1,62 @@
++/****************************************************************************
++** $Id$
++**
++** Definition of QNoneInputContextPlugin class
++**
++** Copyright (C) 2004 immodule for Qt Project. All rights reserved.
++**
++** This file is written to contribute to Trolltech AS under their own
++** licence. You may use this file under your Qt license. Following
++** description is copied from their original file headers. Contact
++** immodule-qt@freedesktop.org if any conditions of this licensing are
++** not clear to you.
++**
++**
++** This file is part of the input method module of the Qt GUI Toolkit.
++**
++** This file may be distributed under the terms of the Q Public License
++** as defined by Trolltech AS of Norway and appearing in the file
++** LICENSE.QPL included in the packaging of this file.
++**
++** This file may be distributed and/or modified under the terms of the
++** GNU General Public License version 2 as published by the Free Software
++** Foundation and appearing in the file LICENSE.GPL included in the
++** packaging of this file.
++**
++** Licensees holding valid Qt Enterprise Edition or Qt Professional Edition
++** licenses may use this file in accordance with the Qt Commercial License
++** Agreement provided with the Software.
++**
++** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
++** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
++**
++** See http://www.trolltech.com/pricing.html or email sales@trolltech.com for
++** information about Qt Commercial License Agreements.
++** See http://www.trolltech.com/qpl/ for QPL licensing information.
++** See http://www.trolltech.com/gpl/ for GPL licensing information.
++**
++** Contact info@trolltech.com if any conditions of this licensing are
++** not clear to you.
++**
++**********************************************************************/
++
++#ifndef QT_NO_IM
++#include <qinputcontextplugin.h>
++#include <qstringlist.h>
++
++
++class QNoneInputContextPlugin : public QInputContextPlugin
++{
++ Q_OBJECT
++public:
++ QNoneInputContextPlugin();
++ ~QNoneInputContextPlugin();
++
++ QStringList keys() const;
++ QInputContext *create( const QString &key );
++ QStringList languages( const QString &key );
++ QString displayName( const QString &key );
++ QString description( const QString &key );
++};
++
++#endif
+--- plugins/src/inputmethods/inputmethods.pro
++++ plugins/src/inputmethods/inputmethods.pro
+@@ -0,0 +1,11 @@
++TEMPLATE = subdirs
++
++unix {
++ !embedded:!mac:CONFIG += x11
++}
++# XIM should be enabled only for X11 platform, but following
++# configuration is not working properly yet
++#im:x11:SUBDIRS += xim
++
++inputmethod:SUBDIRS += imsw-none imsw-multi simple
++inputmethod:SUBDIRS += xim
+--- plugins/src/inputmethods/simple/composetable.cpp
++++ plugins/src/inputmethods/simple/composetable.cpp
+@@ -0,0 +1,5605 @@
++/****************************************************************************
++** $Id$
++**
++** Compose table for QSimpleInputContext class
++**
++** Copyright (C) 2004 immodule for Qt Project. All rights reserved.
++**
++** This file is written to contribute to Trolltech AS under their own
++** licence. You may use this file under your Qt license. Following
++** description is copied from their original file headers. Contact
++** immodule-qt@freedesktop.org if any conditions of this licensing are
++** not clear to you.
++**
++**
++** This file is part of the input method module of the Qt GUI Toolkit.
++**
++** This file may be distributed under the terms of the Q Public License
++** as defined by Trolltech AS of Norway and appearing in the file
++** LICENSE.QPL included in the packaging of this file.
++**
++** This file may be distributed and/or modified under the terms of the
++** GNU General Public License version 2 as published by the Free Software
++** Foundation and appearing in the file LICENSE.GPL included in the
++** packaging of this file.
++**
++** Licensees holding valid Qt Enterprise Edition or Qt Professional Edition
++** licenses may use this file in accordance with the Qt Commercial License
++** Agreement provided with the Software.
++**
++** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
++** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
++**
++** See http://www.trolltech.com/pricing.html or email sales@trolltech.com for
++** information about Qt Commercial License Agreements.
++** See http://www.trolltech.com/qpl/ for QPL licensing information.
++** See http://www.trolltech.com/gpl/ for GPL licensing information.
++**
++** Contact info@trolltech.com if any conditions of this licensing are
++** not clear to you.
++**
++**********************************************************************/
++
++// The compose table included in file is converted from a Compose file
++// of X.org's X11R6.7.0. Original header is follows
++
++// UTF-8 (Unicode) compose sequence
++// David.Monniaux@ens.fr
++//
++// $XFree86: xc/nls/Compose/en_US.UTF-8,v 1.11 2004/01/06 13:14:04 pascal Exp $
++
++
++#include "qsimpleinputcontext.h"
++
++#include <qnamespace.h>
++
++static const QComposeTableElement defaultTable[] = {
++// /* broken */ { {0x0000, 0x0000, 0, 0, 0, 0}, 0x1eda }, // U1EDA # LATIN CAPITAL LETTER O WITH HORN AND ACUTE
++// /* broken */ { {0x0000, 0x0000, 0, 0, 0, 0}, 0x1edb }, // U1EDB # LATIN SMALL LETTER O WITH HORN AND ACUTE
++// /* broken */ { {0x0000, 0x0000, 0, 0, 0, 0}, 0x1edc }, // U1EDC # LATIN CAPITAL LETTER O WITH HORN AND GRAVE
++// /* broken */ { {0x0000, 0x0000, 0, 0, 0, 0}, 0x1edd }, // U1EDD # LATIN SMALL LETTER O WITH HORN AND GRAVE
++// /* broken */ { {0x0000, 0x0000, 0, 0, 0, 0}, 0x1ede }, // U1EDE # LATIN CAPITAL LETTER O WITH HORN AND HOOK ABOVE
++// /* broken */ { {0x0000, 0x0000, 0, 0, 0, 0}, 0x1edf }, // U1EDF # LATIN SMALL LETTER O WITH HORN AND HOOK ABOVE
++// /* broken */ { {0x0000, 0x0000, 0, 0, 0, 0}, 0x1ee3 }, // U1EE3 # LATIN SMALL LETTER O WITH HORN AND DOT BELOW
++// /* broken */ { {0x0000, 0x0000, 0, 0, 0, 0}, 0x1ee1 }, // U1EE1 # LATIN SMALL LETTER O WITH HORN AND TILDE
++// /* broken */ { {0x0000, 0x0000, 0, 0, 0, 0}, 0x1ee2 }, // U1EE2 # LATIN CAPITAL LETTER O WITH HORN AND DOT BELOW
++// /* broken */ { {0x0000, 0x0000, 0, 0, 0, 0}, 0x1ef1 }, // U1EF1 # LATIN SMALL LETTER U WITH HORN AND DOT BELOW
++// /* broken */ { {0x0000, 0x0000, 0, 0, 0, 0}, 0x1ef0 }, // U1EF0 # LATIN CAPITAL LETTER U WITH HORN AND DOT BELOW
++// /* broken */ { {0x0000, 0x0000, 0, 0, 0, 0}, 0x1eef }, // U1EEF # LATIN SMALL LETTER U WITH HORN AND TILDE
++// /* broken */ { {0x0000, 0x0000, 0, 0, 0, 0}, 0x1eee }, // U1EEE # LATIN CAPITAL LETTER U WITH HORN AND TILDE
++// /* broken */ { {0x0000, 0x0000, 0, 0, 0, 0}, 0x1eed }, // U1EED # LATIN SMALL LETTER U WITH HORN AND HOOK ABOVE
++// /* broken */ { {0x0000, 0x0000, 0, 0, 0, 0}, 0x1eec }, // U1EEC # LATIN CAPITAL LETTER U WITH HORN AND HOOK ABOVE
++// /* broken */ { {0x0000, 0x0000, 0, 0, 0, 0}, 0x1eeb }, // U1EEB # LATIN SMALL LETTER U WITH HORN AND GRAVE
++// /* broken */ { {0x0000, 0x0000, 0, 0, 0, 0}, 0x1eea }, // U1EEA # LATIN CAPITAL LETTER U WITH HORN AND GRAVE
++// /* broken */ { {0x0000, 0x0000, 0, 0, 0, 0}, 0x1ee9 }, // U1EE9 # LATIN SMALL LETTER U WITH HORN AND ACUTE
++// /* broken */ { {0x0000, 0x0000, 0, 0, 0, 0}, 0x1ee8 }, // U1EE8 # LATIN CAPITAL LETTER U WITH HORN AND ACUTE
++// /* broken */ { {0x0000, 0x0000, 0, 0, 0, 0}, 0x1ee0 }, // U1EE0 # LATIN CAPITAL LETTER O WITH HORN AND TILDE
++// /* broken */ { {0x0000, 0x0000, 0x004f, 0, 0, 0}, 0x1e4c }, // U1E4C # LATIN CAPITAL LETTER O WITH TILDE AND ACUTE
++// /* broken */ { {0x0000, 0x0000, 0x0055, 0, 0, 0}, 0x1e78 }, // U1E78 # LATIN CAPITAL LETTER U WITH TILDE AND ACUTE
++// /* broken */ { {0x0000, 0x0000, 0x006f, 0, 0, 0}, 0x1e4d }, // U1E4D # LATIN SMALL LETTER O WITH TILDE AND ACUTE
++// /* broken */ { {0x0000, 0x0000, 0x0075, 0, 0, 0}, 0x1e79 }, // U1E79 # LATIN SMALL LETTER U WITH TILDE AND ACUTE
++// /* broken */ { {0x0000, 0x0041, 0, 0, 0, 0}, 0x00c1 }, // U00C1 # LATIN CAPITAL LETTER A WITH ACUTE
++// /* broken */ { {0x0000, 0x0041, 0, 0, 0, 0}, 0x00c0 }, // U00C0 # LATIN CAPITAL LETTER A WITH GRAVE
++// /* broken */ { {0x0000, 0x0041, 0, 0, 0, 0}, 0x00c3 }, // U00C3 # LATIN CAPITAL LETTER A WITH TILDE
++// /* broken */ { {0x0000, 0x0041, 0, 0, 0, 0}, 0x1ea2 }, // U1EA2 # LATIN CAPITAL LETTER A WITH HOOK ABOVE
++// /* broken */ { {0x0000, 0x0041, 0, 0, 0, 0}, 0x1ea0 }, // U1EA0 # LATIN CAPITAL LETTER A WITH DOT BELOW
++// /* broken */ { {0x0000, 0x0042, 0, 0, 0, 0}, 0x1e04 }, // U1E04 # LATIN CAPITAL LETTER B WITH DOT BELOW
++// /* broken */ { {0x0000, 0x0043, 0, 0, 0, 0}, 0x0106 }, // U0106 # LATIN CAPITAL LETTER C WITH ACUTE
++// /* broken */ { {0x0000, 0x0044, 0, 0, 0, 0}, 0x1e0c }, // U1E0C # LATIN CAPITAL LETTER D WITH DOT BELOW
++// /* broken */ { {0x0000, 0x0045, 0, 0, 0, 0}, 0x1ebc }, // U1EBC # LATIN CAPITAL LETTER E WITH TILDE
++// /* broken */ { {0x0000, 0x0045, 0, 0, 0, 0}, 0x1eb8 }, // U1EB8 # LATIN CAPITAL LETTER E WITH DOT BELOW
++// /* broken */ { {0x0000, 0x0045, 0, 0, 0, 0}, 0x00c9 }, // U00C9 # LATIN CAPITAL LETTER E WITH ACUTE
++// /* broken */ { {0x0000, 0x0045, 0, 0, 0, 0}, 0x00c8 }, // U00C8 # LATIN CAPITAL LETTER E WITH GRAVE
++// /* broken */ { {0x0000, 0x0045, 0, 0, 0, 0}, 0x1eba }, // U1EBA # LATIN CAPITAL LETTER E WITH HOOK ABOVE
++// /* broken */ { {0x0000, 0x0047, 0, 0, 0, 0}, 0x01f4 }, // U01F4 # LATIN CAPITAL LETTER G WITH ACUTE
++// /* broken */ { {0x0000, 0x0048, 0, 0, 0, 0}, 0x1e24 }, // U1E24 # LATIN CAPITAL LETTER H WITH DOT BELOW
++// /* broken */ { {0x0000, 0x0049, 0, 0, 0, 0}, 0x00cd }, // U00CD # LATIN CAPITAL LETTER I WITH ACUTE
++// /* broken */ { {0x0000, 0x0049, 0, 0, 0, 0}, 0x00cc }, // U00CC # LATIN CAPITAL LETTER I WITH GRAVE
++// /* broken */ { {0x0000, 0x0049, 0, 0, 0, 0}, 0x1ec8 }, // U1EC8 # LATIN CAPITAL LETTER I WITH HOOK ABOVE
++// /* broken */ { {0x0000, 0x0049, 0, 0, 0, 0}, 0x0128 }, // U0128 # LATIN CAPITAL LETTER I WITH TILDE
++// /* broken */ { {0x0000, 0x0049, 0, 0, 0, 0}, 0x1eca }, // U1ECA # LATIN CAPITAL LETTER I WITH DOT BELOW
++// /* broken */ { {0x0000, 0x004b, 0, 0, 0, 0}, 0x1e30 }, // U1E30 # LATIN CAPITAL LETTER K WITH ACUTE
++// /* broken */ { {0x0000, 0x004b, 0, 0, 0, 0}, 0x1e32 }, // U1E32 # LATIN CAPITAL LETTER K WITH DOT BELOW
++// /* broken */ { {0x0000, 0x004c, 0, 0, 0, 0}, 0x0139 }, // U0139 # LATIN CAPITAL LETTER L WITH ACUTE
++// /* broken */ { {0x0000, 0x004c, 0, 0, 0, 0}, 0x1e36 }, // U1E36 # LATIN CAPITAL LETTER L WITH DOT BELOW
++// /* broken */ { {0x0000, 0x004d, 0, 0, 0, 0}, 0x1e42 }, // U1E42 # LATIN CAPITAL LETTER M WITH DOT BELOW
++// /* broken */ { {0x0000, 0x004d, 0, 0, 0, 0}, 0x1e3e }, // U1E3E # LATIN CAPITAL LETTER M WITH ACUTE
++// /* broken */ { {0x0000, 0x004e, 0, 0, 0, 0}, 0x1e46 }, // U1E46 # LATIN CAPITAL LETTER N WITH DOT BELOW
++// /* broken */ { {0x0000, 0x004e, 0, 0, 0, 0}, 0x0143 }, // U0143 # LATIN CAPITAL LETTER N WITH ACUTE
++// /* broken */ { {0x0000, 0x004e, 0, 0, 0, 0}, 0x01f8 }, // U01F8 # LATIN CAPITAL LETTER N WITH GRAVE
++// /* broken */ { {0x0000, 0x004e, 0, 0, 0, 0}, 0x00d1 }, // U00D1 # LATIN CAPITAL LETTER N WITH TILDE
++// /* broken */ { {0x0000, 0x004f, 0, 0, 0, 0}, 0x00d5 }, // U00D5 # LATIN CAPITAL LETTER O WITH TILDE
++// /* broken */ { {0x0000, 0x004f, 0, 0, 0, 0}, 0x00d3 }, // U00D3 # LATIN CAPITAL LETTER O WITH ACUTE
++// /* broken */ { {0x0000, 0x004f, 0, 0, 0, 0}, 0x1ecc }, // U1ECC # LATIN CAPITAL LETTER O WITH DOT BELOW
++// /* broken */ { {0x0000, 0x004f, 0, 0, 0, 0}, 0x00d2 }, // U00D2 # LATIN CAPITAL LETTER O WITH GRAVE
++// /* broken */ { {0x0000, 0x004f, 0, 0, 0, 0}, 0x1ece }, // U1ECE # LATIN CAPITAL LETTER O WITH HOOK ABOVE
++// /* broken */ { {0x0000, 0x0050, 0, 0, 0, 0}, 0x1e54 }, // U1E54 # LATIN CAPITAL LETTER P WITH ACUTE
++// /* broken */ { {0x0000, 0x0052, 0, 0, 0, 0}, 0x1e5a }, // U1E5A # LATIN CAPITAL LETTER R WITH DOT BELOW
++// /* broken */ { {0x0000, 0x0052, 0, 0, 0, 0}, 0x0154 }, // U0154 # LATIN CAPITAL LETTER R WITH ACUTE
++// /* broken */ { {0x0000, 0x0053, 0, 0, 0, 0}, 0x015a }, // U015A # LATIN CAPITAL LETTER S WITH ACUTE
++// /* broken */ { {0x0000, 0x0053, 0, 0, 0, 0}, 0x1e62 }, // U1E62 # LATIN CAPITAL LETTER S WITH DOT BELOW
++// /* broken */ { {0x0000, 0x0054, 0, 0, 0, 0}, 0x1e6c }, // U1E6C # LATIN CAPITAL LETTER T WITH DOT BELOW
++// /* broken */ { {0x0000, 0x0055, 0, 0, 0, 0}, 0x00da }, // U00DA # LATIN CAPITAL LETTER U WITH ACUTE
++// /* broken */ { {0x0000, 0x0055, 0, 0, 0, 0}, 0x00d9 }, // U00D9 # LATIN CAPITAL LETTER U WITH GRAVE
++// /* broken */ { {0x0000, 0x0055, 0, 0, 0, 0}, 0x0168 }, // U0168 # LATIN CAPITAL LETTER U WITH TILDE
++// /* broken */ { {0x0000, 0x0055, 0, 0, 0, 0}, 0x1ee4 }, // U1EE4 # LATIN CAPITAL LETTER U WITH DOT BELOW
++// /* broken */ { {0x0000, 0x0055, 0, 0, 0, 0}, 0x1ee6 }, // U1EE6 # LATIN CAPITAL LETTER U WITH HOOK ABOVE
++// /* broken */ { {0x0000, 0x0056, 0, 0, 0, 0}, 0x1e7e }, // U1E7E # LATIN CAPITAL LETTER V WITH DOT BELOW
++// /* broken */ { {0x0000, 0x0056, 0, 0, 0, 0}, 0x1e7c }, // U1E7C # LATIN CAPITAL LETTER V WITH TILDE
++// /* broken */ { {0x0000, 0x0057, 0, 0, 0, 0}, 0x1e82 }, // U1E82 # LATIN CAPITAL LETTER W WITH ACUTE
++// /* broken */ { {0x0000, 0x0057, 0, 0, 0, 0}, 0x1e88 }, // U1E88 # LATIN CAPITAL LETTER W WITH DOT BELOW
++// /* broken */ { {0x0000, 0x0057, 0, 0, 0, 0}, 0x1e80 }, // U1E80 # LATIN CAPITAL LETTER W WITH GRAVE
++// /* broken */ { {0x0000, 0x0059, 0, 0, 0, 0}, 0x1ef8 }, // U1EF8 # LATIN CAPITAL LETTER Y WITH TILDE
++// /* broken */ { {0x0000, 0x0059, 0, 0, 0, 0}, 0x1ef2 }, // U1EF2 # LATIN CAPITAL LETTER Y WITH GRAVE
++// /* broken */ { {0x0000, 0x0059, 0, 0, 0, 0}, 0x00dd }, // U00DD # LATIN CAPITAL LETTER Y WITH ACUTE
++// /* broken */ { {0x0000, 0x0059, 0, 0, 0, 0}, 0x1ef6 }, // U1EF6 # LATIN CAPITAL LETTER Y WITH HOOK ABOVE
++// /* broken */ { {0x0000, 0x0059, 0, 0, 0, 0}, 0x1ef4 }, // U1EF4 # LATIN CAPITAL LETTER Y WITH DOT BELOW
++// /* broken */ { {0x0000, 0x005a, 0, 0, 0, 0}, 0x0179 }, // U0179 # LATIN CAPITAL LETTER Z WITH ACUTE
++// /* broken */ { {0x0000, 0x005a, 0, 0, 0, 0}, 0x1e92 }, // U1E92 # LATIN CAPITAL LETTER Z WITH DOT BELOW
++// /* broken */ { {0x0000, 0x0061, 0, 0, 0, 0}, 0x1ea1 }, // U1EA1 # LATIN SMALL LETTER A WITH DOT BELOW
++// /* broken */ { {0x0000, 0x0061, 0, 0, 0, 0}, 0x1ea3 }, // U1EA3 # LATIN SMALL LETTER A WITH HOOK ABOVE
++// /* broken */ { {0x0000, 0x0061, 0, 0, 0, 0}, 0x00e0 }, // U00E0 # LATIN SMALL LETTER A WITH GRAVE
++// /* broken */ { {0x0000, 0x0061, 0, 0, 0, 0}, 0x00e3 }, // U00E3 # LATIN SMALL LETTER A WITH TILDE
++// /* broken */ { {0x0000, 0x0061, 0, 0, 0, 0}, 0x00e1 }, // U00E1 # LATIN SMALL LETTER A WITH ACUTE
++// /* broken */ { {0x0000, 0x0062, 0, 0, 0, 0}, 0x1e05 }, // U1E05 # LATIN SMALL LETTER B WITH DOT BELOW
++// /* broken */ { {0x0000, 0x0063, 0, 0, 0, 0}, 0x0107 }, // U0107 # LATIN SMALL LETTER C WITH ACUTE
++// /* broken */ { {0x0000, 0x0064, 0, 0, 0, 0}, 0x1e0d }, // U1E0D # LATIN SMALL LETTER D WITH DOT BELOW
++// /* broken */ { {0x0000, 0x0065, 0, 0, 0, 0}, 0x00e8 }, // U00E8 # LATIN SMALL LETTER E WITH GRAVE
++// /* broken */ { {0x0000, 0x0065, 0, 0, 0, 0}, 0x1ebb }, // U1EBB # LATIN SMALL LETTER E WITH HOOK ABOVE
++// /* broken */ { {0x0000, 0x0065, 0, 0, 0, 0}, 0x1eb9 }, // U1EB9 # LATIN SMALL LETTER E WITH DOT BELOW
++// /* broken */ { {0x0000, 0x0065, 0, 0, 0, 0}, 0x00e9 }, // U00E9 # LATIN SMALL LETTER E WITH ACUTE
++// /* broken */ { {0x0000, 0x0065, 0, 0, 0, 0}, 0x1ebd }, // U1EBD # LATIN SMALL LETTER E WITH TILDE
++// /* broken */ { {0x0000, 0x0067, 0, 0, 0, 0}, 0x01f5 }, // U01F5 # LATIN SMALL LETTER G WITH ACUTE
++// /* broken */ { {0x0000, 0x0068, 0, 0, 0, 0}, 0x1e25 }, // U1E25 # LATIN SMALL LETTER H WITH DOT BELOW
++// /* broken */ { {0x0000, 0x0069, 0, 0, 0, 0}, 0x00ec }, // U00EC # LATIN SMALL LETTER I WITH GRAVE
++// /* broken */ { {0x0000, 0x0069, 0, 0, 0, 0}, 0x0129 }, // U0129 # LATIN SMALL LETTER I WITH TILDE
++// /* broken */ { {0x0000, 0x0069, 0, 0, 0, 0}, 0x1ecb }, // U1ECB # LATIN SMALL LETTER I WITH DOT BELOW
++// /* broken */ { {0x0000, 0x0069, 0, 0, 0, 0}, 0x00ed }, // U00ED # LATIN SMALL LETTER I WITH ACUTE
++// /* broken */ { {0x0000, 0x0069, 0, 0, 0, 0}, 0x1ec9 }, // U1EC9 # LATIN SMALL LETTER I WITH HOOK ABOVE
++// /* broken */ { {0x0000, 0x006b, 0, 0, 0, 0}, 0x1e33 }, // U1E33 # LATIN SMALL LETTER K WITH DOT BELOW
++// /* broken */ { {0x0000, 0x006b, 0, 0, 0, 0}, 0x1e31 }, // U1E31 # LATIN SMALL LETTER K WITH ACUTE
++// /* broken */ { {0x0000, 0x006c, 0, 0, 0, 0}, 0x1e37 }, // U1E37 # LATIN SMALL LETTER L WITH DOT BELOW
++// /* broken */ { {0x0000, 0x006c, 0, 0, 0, 0}, 0x013a }, // U013A # LATIN SMALL LETTER L WITH ACUTE
++// /* broken */ { {0x0000, 0x006d, 0, 0, 0, 0}, 0x1e43 }, // U1E43 # LATIN SMALL LETTER M WITH DOT BELOW
++// /* broken */ { {0x0000, 0x006d, 0, 0, 0, 0}, 0x1e3f }, // U1E3F # LATIN SMALL LETTER M WITH ACUTE
++// /* broken */ { {0x0000, 0x006e, 0, 0, 0, 0}, 0x00f1 }, // U00F1 # LATIN SMALL LETTER N WITH TILDE
++// /* broken */ { {0x0000, 0x006e, 0, 0, 0, 0}, 0x0144 }, // U0144 # LATIN SMALL LETTER N WITH ACUTE
++// /* broken */ { {0x0000, 0x006e, 0, 0, 0, 0}, 0x01f9 }, // U01F9 # LATIN SMALL LETTER N WITH GRAVE
++// /* broken */ { {0x0000, 0x006e, 0, 0, 0, 0}, 0x1e47 }, // U1E47 # LATIN SMALL LETTER N WITH DOT BELOW
++// /* broken */ { {0x0000, 0x006f, 0, 0, 0, 0}, 0x00f5 }, // U00F5 # LATIN SMALL LETTER O WITH TILDE
++// /* broken */ { {0x0000, 0x006f, 0, 0, 0, 0}, 0x00f2 }, // U00F2 # LATIN SMALL LETTER O WITH GRAVE
++// /* broken */ { {0x0000, 0x006f, 0, 0, 0, 0}, 0x1ecf }, // U1ECF # LATIN SMALL LETTER O WITH HOOK ABOVE
++// /* broken */ { {0x0000, 0x006f, 0, 0, 0, 0}, 0x00f3 }, // U00F3 # LATIN SMALL LETTER O WITH ACUTE
++// /* broken */ { {0x0000, 0x006f, 0, 0, 0, 0}, 0x1ecd }, // U1ECD # LATIN SMALL LETTER O WITH DOT BELOW
++// /* broken */ { {0x0000, 0x0070, 0, 0, 0, 0}, 0x1e55 }, // U1E55 # LATIN SMALL LETTER P WITH ACUTE
++// /* broken */ { {0x0000, 0x0072, 0, 0, 0, 0}, 0x0155 }, // U0155 # LATIN SMALL LETTER R WITH ACUTE
++// /* broken */ { {0x0000, 0x0072, 0, 0, 0, 0}, 0x1e5b }, // U1E5B # LATIN SMALL LETTER R WITH DOT BELOW
++// /* broken */ { {0x0000, 0x0073, 0, 0, 0, 0}, 0x1e63 }, // U1E63 # LATIN SMALL LETTER S WITH DOT BELOW
++// /* broken */ { {0x0000, 0x0073, 0, 0, 0, 0}, 0x015b }, // U015B # LATIN SMALL LETTER S WITH ACUTE
++// /* broken */ { {0x0000, 0x0074, 0, 0, 0, 0}, 0x1e6d }, // U1E6D # LATIN SMALL LETTER T WITH DOT BELOW
++// /* broken */ { {0x0000, 0x0075, 0, 0, 0, 0}, 0x0169 }, // U0169 # LATIN SMALL LETTER U WITH TILDE
++// /* broken */ { {0x0000, 0x0075, 0, 0, 0, 0}, 0x1ee7 }, // U1EE7 # LATIN SMALL LETTER U WITH HOOK ABOVE
++// /* broken */ { {0x0000, 0x0075, 0, 0, 0, 0}, 0x00f9 }, // U00F9 # LATIN SMALL LETTER U WITH GRAVE
++// /* broken */ { {0x0000, 0x0075, 0, 0, 0, 0}, 0x00fa }, // U00FA # LATIN SMALL LETTER U WITH ACUTE
++// /* broken */ { {0x0000, 0x0075, 0, 0, 0, 0}, 0x1ee5 }, // U1EE5 # LATIN SMALL LETTER U WITH DOT BELOW
++// /* broken */ { {0x0000, 0x0076, 0, 0, 0, 0}, 0x1e7d }, // U1E7D # LATIN SMALL LETTER V WITH TILDE
++// /* broken */ { {0x0000, 0x0076, 0, 0, 0, 0}, 0x1e7f }, // U1E7F # LATIN SMALL LETTER V WITH DOT BELOW
++// /* broken */ { {0x0000, 0x0077, 0, 0, 0, 0}, 0x1e81 }, // U1E81 # LATIN SMALL LETTER W WITH GRAVE
++// /* broken */ { {0x0000, 0x0077, 0, 0, 0, 0}, 0x1e83 }, // U1E83 # LATIN SMALL LETTER W WITH ACUTE
++// /* broken */ { {0x0000, 0x0077, 0, 0, 0, 0}, 0x1e89 }, // U1E89 # LATIN SMALL LETTER W WITH DOT BELOW
++// /* broken */ { {0x0000, 0x0079, 0, 0, 0, 0}, 0x1ef5 }, // U1EF5 # LATIN SMALL LETTER Y WITH DOT BELOW
++// /* broken */ { {0x0000, 0x0079, 0, 0, 0, 0}, 0x1ef9 }, // U1EF9 # LATIN SMALL LETTER Y WITH TILDE
++// /* broken */ { {0x0000, 0x0079, 0, 0, 0, 0}, 0x1ef7 }, // U1EF7 # LATIN SMALL LETTER Y WITH HOOK ABOVE
++// /* broken */ { {0x0000, 0x0079, 0, 0, 0, 0}, 0x1ef3 }, // U1EF3 # LATIN SMALL LETTER Y WITH GRAVE
++// /* broken */ { {0x0000, 0x0079, 0, 0, 0, 0}, 0x00fd }, // U00FD # LATIN SMALL LETTER Y WITH ACUTE
++// /* broken */ { {0x0000, 0x007a, 0, 0, 0, 0}, 0x1e93 }, // U1E93 # LATIN SMALL LETTER Z WITH DOT BELOW
++// /* broken */ { {0x0000, 0x007a, 0, 0, 0, 0}, 0x017a }, // U017A # LATIN SMALL LETTER Z WITH ACUTE
++// /* broken */ { {0x0000, 0x00c2, 0, 0, 0, 0}, 0x1ea6 }, // U1EA6 # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND GRAVE
++// /* broken */ { {0x0000, 0x00c2, 0, 0, 0, 0}, 0x1ea8 }, // U1EA8 # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE
++// /* broken */ { {0x0000, 0x00c2, 0, 0, 0, 0}, 0x1eaa }, // U1EAA # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND TILDE
++// /* broken */ { {0x0000, 0x00c2, 0, 0, 0, 0}, 0x1ea4 }, // U1EA4 # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND ACUTE
++// /* broken */ { {0x0000, 0x00c5, 0, 0, 0, 0}, 0x01fa }, // U01FA # LATIN CAPITAL LETTER A WITH RING ABOVE AND ACUTE
++// /* broken */ { {0x0000, 0x00c6, 0, 0, 0, 0}, 0x01fc }, // U01FC # LATIN CAPITAL LETTER AE WITH ACUTE
++// /* broken */ { {0x0000, 0x00c7, 0, 0, 0, 0}, 0x1e08 }, // U1E08 # LATIN CAPITAL LETTER C WITH CEDILLA AND ACUTE
++// /* broken */ { {0x0000, 0x00ca, 0, 0, 0, 0}, 0x1ec0 }, // U1EC0 # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND GRAVE
++// /* broken */ { {0x0000, 0x00ca, 0, 0, 0, 0}, 0x1ebe }, // U1EBE # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND ACUTE
++// /* broken */ { {0x0000, 0x00ca, 0, 0, 0, 0}, 0x1ec2 }, // U1EC2 # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE
++// /* broken */ { {0x0000, 0x00ca, 0, 0, 0, 0}, 0x1ec4 }, // U1EC4 # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND TILDE
++// /* broken */ { {0x0000, 0x00cf, 0, 0, 0, 0}, 0x1e2e }, // U1E2E # LATIN CAPITAL LETTER I WITH DIAERESIS AND ACUTE
++// /* broken */ { {0x0000, 0x00d4, 0, 0, 0, 0}, 0x1ed4 }, // U1ED4 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE
++// /* broken */ { {0x0000, 0x00d4, 0, 0, 0, 0}, 0x1ed0 }, // U1ED0 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND ACUTE
++// /* broken */ { {0x0000, 0x00d4, 0, 0, 0, 0}, 0x1ed2 }, // U1ED2 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND GRAVE
++// /* broken */ { {0x0000, 0x00d4, 0, 0, 0, 0}, 0x1ed6 }, // U1ED6 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND TILDE
++// /* broken */ { {0x0000, 0x00d5, 0, 0, 0, 0}, 0x1e4c }, // U1E4C # LATIN CAPITAL LETTER O WITH TILDE AND ACUTE
++// /* broken */ { {0x0000, 0x00d8, 0, 0, 0, 0}, 0x01fe }, // U01FE # LATIN CAPITAL LETTER O WITH STROKE AND ACUTE
++// /* broken */ { {0x0000, 0x00dc, 0, 0, 0, 0}, 0x01d7 }, // U01D7 # LATIN CAPITAL LETTER U WITH DIAERESIS AND ACUTE
++// /* broken */ { {0x0000, 0x00dc, 0, 0, 0, 0}, 0x01db }, // U01DB # LATIN CAPITAL LETTER U WITH DIAERESIS AND GRAVE
++// /* broken */ { {0x0000, 0x00e2, 0, 0, 0, 0}, 0x1eab }, // U1EAB # LATIN SMALL LETTER A WITH CIRCUMFLEX AND TILDE
++// /* broken */ { {0x0000, 0x00e2, 0, 0, 0, 0}, 0x1ea5 }, // U1EA5 # LATIN SMALL LETTER A WITH CIRCUMFLEX AND ACUTE
++// /* broken */ { {0x0000, 0x00e2, 0, 0, 0, 0}, 0x1ea9 }, // U1EA9 # LATIN SMALL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE
++// /* broken */ { {0x0000, 0x00e2, 0, 0, 0, 0}, 0x1ea7 }, // U1EA7 # LATIN SMALL LETTER A WITH CIRCUMFLEX AND GRAVE
++// /* broken */ { {0x0000, 0x00e5, 0, 0, 0, 0}, 0x01fb }, // U01FB # LATIN SMALL LETTER A WITH RING ABOVE AND ACUTE
++// /* broken */ { {0x0000, 0x00e6, 0, 0, 0, 0}, 0x01fd }, // U01FD # LATIN SMALL LETTER AE WITH ACUTE
++// /* broken */ { {0x0000, 0x00e7, 0, 0, 0, 0}, 0x1e09 }, // U1E09 # LATIN SMALL LETTER C WITH CEDILLA AND ACUTE
++// /* broken */ { {0x0000, 0x00ea, 0, 0, 0, 0}, 0x1ec5 }, // U1EC5 # LATIN SMALL LETTER E WITH CIRCUMFLEX AND TILDE
++// /* broken */ { {0x0000, 0x00ea, 0, 0, 0, 0}, 0x1ec1 }, // U1EC1 # LATIN SMALL LETTER E WITH CIRCUMFLEX AND GRAVE
++// /* broken */ { {0x0000, 0x00ea, 0, 0, 0, 0}, 0x1ec3 }, // U1EC3 # LATIN SMALL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE
++// /* broken */ { {0x0000, 0x00ea, 0, 0, 0, 0}, 0x1ebf }, // U1EBF # LATIN SMALL LETTER E WITH CIRCUMFLEX AND ACUTE
++// /* broken */ { {0x0000, 0x00ef, 0, 0, 0, 0}, 0x1e2f }, // U1E2F # LATIN SMALL LETTER I WITH DIAERESIS AND ACUTE
++// /* broken */ { {0x0000, 0x00f4, 0, 0, 0, 0}, 0x1ed3 }, // U1ED3 # LATIN SMALL LETTER O WITH CIRCUMFLEX AND GRAVE
++// /* broken */ { {0x0000, 0x00f4, 0, 0, 0, 0}, 0x1ed1 }, // U1ED1 # LATIN SMALL LETTER O WITH CIRCUMFLEX AND ACUTE
++// /* broken */ { {0x0000, 0x00f4, 0, 0, 0, 0}, 0x1ed5 }, // U1ED5 # LATIN SMALL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE
++// /* broken */ { {0x0000, 0x00f4, 0, 0, 0, 0}, 0x1ed7 }, // U1ED7 # LATIN SMALL LETTER O WITH CIRCUMFLEX AND TILDE
++// /* broken */ { {0x0000, 0x00f5, 0, 0, 0, 0}, 0x1e4d }, // U1E4D # LATIN SMALL LETTER O WITH TILDE AND ACUTE
++// /* broken */ { {0x0000, 0x00f8, 0, 0, 0, 0}, 0x01ff }, // U01FF # LATIN SMALL LETTER O WITH STROKE AND ACUTE
++// /* broken */ { {0x0000, 0x00fc, 0, 0, 0, 0}, 0x01dc }, // U01DC # LATIN SMALL LETTER U WITH DIAERESIS AND GRAVE
++// /* broken */ { {0x0000, 0x00fc, 0, 0, 0, 0}, 0x01d8 }, // U01D8 # LATIN SMALL LETTER U WITH DIAERESIS AND ACUTE
++// /* broken */ { {0x0000, 0x0102, 0, 0, 0, 0}, 0x1eb0 }, // U1EB0 # LATIN CAPITAL LETTER A WITH BREVE AND GRAVE
++// /* broken */ { {0x0000, 0x0102, 0, 0, 0, 0}, 0x1eb4 }, // U1EB4 # LATIN CAPITAL LETTER A WITH BREVE AND TILDE
++// /* broken */ { {0x0000, 0x0102, 0, 0, 0, 0}, 0x1eb2 }, // U1EB2 # LATIN CAPITAL LETTER A WITH BREVE AND HOOK ABOVE
++// /* broken */ { {0x0000, 0x0102, 0, 0, 0, 0}, 0x1eae }, // U1EAE # LATIN CAPITAL LETTER A WITH BREVE AND ACUTE
++// /* broken */ { {0x0000, 0x0103, 0, 0, 0, 0}, 0x1eb5 }, // U1EB5 # LATIN SMALL LETTER A WITH BREVE AND TILDE
++// /* broken */ { {0x0000, 0x0103, 0, 0, 0, 0}, 0x1eaf }, // U1EAF # LATIN SMALL LETTER A WITH BREVE AND ACUTE
++// /* broken */ { {0x0000, 0x0103, 0, 0, 0, 0}, 0x1eb3 }, // U1EB3 # LATIN SMALL LETTER A WITH BREVE AND HOOK ABOVE
++// /* broken */ { {0x0000, 0x0103, 0, 0, 0, 0}, 0x1eb1 }, // U1EB1 # LATIN SMALL LETTER A WITH BREVE AND GRAVE
++// /* broken */ { {0x0000, 0x0112, 0, 0, 0, 0}, 0x1e16 }, // U1E16 # LATIN CAPITAL LETTER E WITH MACRON AND ACUTE
++// /* broken */ { {0x0000, 0x0112, 0, 0, 0, 0}, 0x1e14 }, // U1E14 # LATIN CAPITAL LETTER E WITH MACRON AND GRAVE
++// /* broken */ { {0x0000, 0x0113, 0, 0, 0, 0}, 0x1e15 }, // U1E15 # LATIN SMALL LETTER E WITH MACRON AND GRAVE
++// /* broken */ { {0x0000, 0x0113, 0, 0, 0, 0}, 0x1e17 }, // U1E17 # LATIN SMALL LETTER E WITH MACRON AND ACUTE
++// /* broken */ { {0x0000, 0x014c, 0, 0, 0, 0}, 0x1e52 }, // U1E52 # LATIN CAPITAL LETTER O WITH MACRON AND ACUTE
++// /* broken */ { {0x0000, 0x014c, 0, 0, 0, 0}, 0x1e50 }, // U1E50 # LATIN CAPITAL LETTER O WITH MACRON AND GRAVE
++// /* broken */ { {0x0000, 0x014d, 0, 0, 0, 0}, 0x1e51 }, // U1E51 # LATIN SMALL LETTER O WITH MACRON AND GRAVE
++// /* broken */ { {0x0000, 0x014d, 0, 0, 0, 0}, 0x1e53 }, // U1E53 # LATIN SMALL LETTER O WITH MACRON AND ACUTE
++// /* broken */ { {0x0000, 0x0168, 0, 0, 0, 0}, 0x1e78 }, // U1E78 # LATIN CAPITAL LETTER U WITH TILDE AND ACUTE
++// /* broken */ { {0x0000, 0x0169, 0, 0, 0, 0}, 0x1e79 }, // U1E79 # LATIN SMALL LETTER U WITH TILDE AND ACUTE
++// /* broken */ { {0x0000, 0x0313, 0x0391, 0, 0, 0}, 0x1f0a }, // U1F0A # GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA
++// /* broken */ { {0x0000, 0x0313, 0x0391, 0, 0, 0}, 0x1f0c }, // U1F0C # GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA
++// /* broken */ { {0x0000, 0x0313, 0x0395, 0, 0, 0}, 0x1f1a }, // U1F1A # GREEK CAPITAL LETTER EPSILON WITH PSILI AND VARIA
++// /* broken */ { {0x0000, 0x0313, 0x0395, 0, 0, 0}, 0x1f1c }, // U1F1C # GREEK CAPITAL LETTER EPSILON WITH PSILI AND OXIA
++// /* broken */ { {0x0000, 0x0313, 0x0397, 0, 0, 0}, 0x1f2c }, // U1F2C # GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA
++// /* broken */ { {0x0000, 0x0313, 0x0397, 0, 0, 0}, 0x1f2a }, // U1F2A # GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA
++// /* broken */ { {0x0000, 0x0313, 0x0399, 0, 0, 0}, 0x1f3c }, // U1F3C # GREEK CAPITAL LETTER IOTA WITH PSILI AND OXIA
++// /* broken */ { {0x0000, 0x0313, 0x0399, 0, 0, 0}, 0x1f3a }, // U1F3A # GREEK CAPITAL LETTER IOTA WITH PSILI AND VARIA
++// /* broken */ { {0x0000, 0x0313, 0x039f, 0, 0, 0}, 0x1f4a }, // U1F4A # GREEK CAPITAL LETTER OMICRON WITH PSILI AND VARIA
++// /* broken */ { {0x0000, 0x0313, 0x039f, 0, 0, 0}, 0x1f4c }, // U1F4C # GREEK CAPITAL LETTER OMICRON WITH PSILI AND OXIA
++// /* broken */ { {0x0000, 0x0313, 0x03a9, 0, 0, 0}, 0x1f6a }, // U1F6A # GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA
++// /* broken */ { {0x0000, 0x0313, 0x03a9, 0, 0, 0}, 0x1f6c }, // U1F6C # GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA
++// /* broken */ { {0x0000, 0x0313, 0x03b1, 0, 0, 0}, 0x1f04 }, // U1F04 # GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA
++// /* broken */ { {0x0000, 0x0313, 0x03b1, 0, 0, 0}, 0x1f02 }, // U1F02 # GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA
++// /* broken */ { {0x0000, 0x0313, 0x03b5, 0, 0, 0}, 0x1f14 }, // U1F14 # GREEK SMALL LETTER EPSILON WITH PSILI AND OXIA
++// /* broken */ { {0x0000, 0x0313, 0x03b5, 0, 0, 0}, 0x1f12 }, // U1F12 # GREEK SMALL LETTER EPSILON WITH PSILI AND VARIA
++// /* broken */ { {0x0000, 0x0313, 0x03b7, 0, 0, 0}, 0x1f24 }, // U1F24 # GREEK SMALL LETTER ETA WITH PSILI AND OXIA
++// /* broken */ { {0x0000, 0x0313, 0x03b7, 0, 0, 0}, 0x1f22 }, // U1F22 # GREEK SMALL LETTER ETA WITH PSILI AND VARIA
++// /* broken */ { {0x0000, 0x0313, 0x03b9, 0, 0, 0}, 0x1f32 }, // U1F32 # GREEK SMALL LETTER IOTA WITH PSILI AND VARIA
++// /* broken */ { {0x0000, 0x0313, 0x03b9, 0, 0, 0}, 0x1f34 }, // U1F34 # GREEK SMALL LETTER IOTA WITH PSILI AND OXIA
++// /* broken */ { {0x0000, 0x0313, 0x03bf, 0, 0, 0}, 0x1f42 }, // U1F42 # GREEK SMALL LETTER OMICRON WITH PSILI AND VARIA
++// /* broken */ { {0x0000, 0x0313, 0x03bf, 0, 0, 0}, 0x1f44 }, // U1F44 # GREEK SMALL LETTER OMICRON WITH PSILI AND OXIA
++// /* broken */ { {0x0000, 0x0313, 0x03c5, 0, 0, 0}, 0x1f52 }, // U1F52 # GREEK SMALL LETTER UPSILON WITH PSILI AND VARIA
++// /* broken */ { {0x0000, 0x0313, 0x03c5, 0, 0, 0}, 0x1f54 }, // U1F54 # GREEK SMALL LETTER UPSILON WITH PSILI AND OXIA
++// /* broken */ { {0x0000, 0x0313, 0x03c9, 0, 0, 0}, 0x1f62 }, // U1F62 # GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA
++// /* broken */ { {0x0000, 0x0313, 0x03c9, 0, 0, 0}, 0x1f64 }, // U1F64 # GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA
++// /* broken */ { {0x0000, 0x0314, 0x0391, 0, 0, 0}, 0x1f0b }, // U1F0B # GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA
++// /* broken */ { {0x0000, 0x0314, 0x0391, 0, 0, 0}, 0x1f0d }, // U1F0D # GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA
++// /* broken */ { {0x0000, 0x0314, 0x0395, 0, 0, 0}, 0x1f1d }, // U1F1D # GREEK CAPITAL LETTER EPSILON WITH DASIA AND OXIA
++// /* broken */ { {0x0000, 0x0314, 0x0395, 0, 0, 0}, 0x1f1b }, // U1F1B # GREEK CAPITAL LETTER EPSILON WITH DASIA AND VARIA
++// /* broken */ { {0x0000, 0x0314, 0x0397, 0, 0, 0}, 0x1f2d }, // U1F2D # GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA
++// /* broken */ { {0x0000, 0x0314, 0x0397, 0, 0, 0}, 0x1f2b }, // U1F2B # GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA
++// /* broken */ { {0x0000, 0x0314, 0x0399, 0, 0, 0}, 0x1f3b }, // U1F3B # GREEK CAPITAL LETTER IOTA WITH DASIA AND VARIA
++// /* broken */ { {0x0000, 0x0314, 0x0399, 0, 0, 0}, 0x1f3d }, // U1F3D # GREEK CAPITAL LETTER IOTA WITH DASIA AND OXIA
++// /* broken */ { {0x0000, 0x0314, 0x039f, 0, 0, 0}, 0x1f4b }, // U1F4B # GREEK CAPITAL LETTER OMICRON WITH DASIA AND VARIA
++// /* broken */ { {0x0000, 0x0314, 0x039f, 0, 0, 0}, 0x1f4d }, // U1F4D # GREEK CAPITAL LETTER OMICRON WITH DASIA AND OXIA
++// /* broken */ { {0x0000, 0x0314, 0x03a5, 0, 0, 0}, 0x1f5b }, // U1F5B # GREEK CAPITAL LETTER UPSILON WITH DASIA AND VARIA
++// /* broken */ { {0x0000, 0x0314, 0x03a5, 0, 0, 0}, 0x1f5d }, // U1F5D # GREEK CAPITAL LETTER UPSILON WITH DASIA AND OXIA
++// /* broken */ { {0x0000, 0x0314, 0x03a9, 0, 0, 0}, 0x1f6d }, // U1F6D # GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA
++// /* broken */ { {0x0000, 0x0314, 0x03a9, 0, 0, 0}, 0x1f6b }, // U1F6B # GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA
++// /* broken */ { {0x0000, 0x0314, 0x03b1, 0, 0, 0}, 0x1f03 }, // U1F03 # GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA
++// /* broken */ { {0x0000, 0x0314, 0x03b1, 0, 0, 0}, 0x1f05 }, // U1F05 # GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA
++// /* broken */ { {0x0000, 0x0314, 0x03b5, 0, 0, 0}, 0x1f13 }, // U1F13 # GREEK SMALL LETTER EPSILON WITH DASIA AND VARIA
++// /* broken */ { {0x0000, 0x0314, 0x03b5, 0, 0, 0}, 0x1f15 }, // U1F15 # GREEK SMALL LETTER EPSILON WITH DASIA AND OXIA
++// /* broken */ { {0x0000, 0x0314, 0x03b7, 0, 0, 0}, 0x1f23 }, // U1F23 # GREEK SMALL LETTER ETA WITH DASIA AND VARIA
++// /* broken */ { {0x0000, 0x0314, 0x03b7, 0, 0, 0}, 0x1f25 }, // U1F25 # GREEK SMALL LETTER ETA WITH DASIA AND OXIA
++// /* broken */ { {0x0000, 0x0314, 0x03b9, 0, 0, 0}, 0x1f33 }, // U1F33 # GREEK SMALL LETTER IOTA WITH DASIA AND VARIA
++// /* broken */ { {0x0000, 0x0314, 0x03b9, 0, 0, 0}, 0x1f35 }, // U1F35 # GREEK SMALL LETTER IOTA WITH DASIA AND OXIA
++// /* broken */ { {0x0000, 0x0314, 0x03bf, 0, 0, 0}, 0x1f45 }, // U1F45 # GREEK SMALL LETTER OMICRON WITH DASIA AND OXIA
++// /* broken */ { {0x0000, 0x0314, 0x03bf, 0, 0, 0}, 0x1f43 }, // U1F43 # GREEK SMALL LETTER OMICRON WITH DASIA AND VARIA
++// /* broken */ { {0x0000, 0x0314, 0x03c5, 0, 0, 0}, 0x1f53 }, // U1F53 # GREEK SMALL LETTER UPSILON WITH DASIA AND VARIA
++// /* broken */ { {0x0000, 0x0314, 0x03c5, 0, 0, 0}, 0x1f55 }, // U1F55 # GREEK SMALL LETTER UPSILON WITH DASIA AND OXIA
++// /* broken */ { {0x0000, 0x0314, 0x03c9, 0, 0, 0}, 0x1f63 }, // U1F63 # GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA
++// /* broken */ { {0x0000, 0x0314, 0x03c9, 0, 0, 0}, 0x1f65 }, // U1F65 # GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA
++// /* broken */ { {0x0000, 0x0391, 0, 0, 0, 0}, 0x0386 }, // U0386 # GREEK CAPITAL LETTER ALPHA WITH TONOS
++// /* broken */ { {0x0000, 0x0391, 0, 0, 0, 0}, 0x1fba }, // U1FBA # GREEK CAPITAL LETTER ALPHA WITH VARIA
++// /* broken */ { {0x0000, 0x0395, 0, 0, 0, 0}, 0x0388 }, // U0388 # GREEK CAPITAL LETTER EPSILON WITH TONOS
++// /* broken */ { {0x0000, 0x0395, 0, 0, 0, 0}, 0x1fc8 }, // U1FC8 # GREEK CAPITAL LETTER EPSILON WITH VARIA
++// /* broken */ { {0x0000, 0x0397, 0, 0, 0, 0}, 0x1fca }, // U1FCA # GREEK CAPITAL LETTER ETA WITH VARIA
++// /* broken */ { {0x0000, 0x0397, 0, 0, 0, 0}, 0x0389 }, // U0389 # GREEK CAPITAL LETTER ETA WITH TONOS
++// /* broken */ { {0x0000, 0x0399, 0, 0, 0, 0}, 0x038a }, // U038A # GREEK CAPITAL LETTER IOTA WITH TONOS
++// /* broken */ { {0x0000, 0x0399, 0, 0, 0, 0}, 0x1fda }, // U1FDA # GREEK CAPITAL LETTER IOTA WITH VARIA
++// /* broken */ { {0x0000, 0x039f, 0, 0, 0, 0}, 0x038c }, // U038C # GREEK CAPITAL LETTER OMICRON WITH TONOS
++// /* broken */ { {0x0000, 0x039f, 0, 0, 0, 0}, 0x1ff8 }, // U1FF8 # GREEK CAPITAL LETTER OMICRON WITH VARIA
++// /* broken */ { {0x0000, 0x03a5, 0, 0, 0, 0}, 0x038e }, // U038E # GREEK CAPITAL LETTER UPSILON WITH TONOS
++// /* broken */ { {0x0000, 0x03a5, 0, 0, 0, 0}, 0x1fea }, // U1FEA # GREEK CAPITAL LETTER UPSILON WITH VARIA
++// /* broken */ { {0x0000, 0x03a9, 0, 0, 0, 0}, 0x038f }, // U038F # GREEK CAPITAL LETTER OMEGA WITH TONOS
++// /* broken */ { {0x0000, 0x03a9, 0, 0, 0, 0}, 0x1ffa }, // U1FFA # GREEK CAPITAL LETTER OMEGA WITH VARIA
++// /* broken */ { {0x0000, 0x03b1, 0, 0, 0, 0}, 0x03ac }, // U03AC # GREEK SMALL LETTER ALPHA WITH TONOS
++// /* broken */ { {0x0000, 0x03b1, 0, 0, 0, 0}, 0x1f70 }, // U1F70 # GREEK SMALL LETTER ALPHA WITH VARIA
++// /* broken */ { {0x0000, 0x03b5, 0, 0, 0, 0}, 0x03ad }, // U03AD # GREEK SMALL LETTER EPSILON WITH TONOS
++// /* broken */ { {0x0000, 0x03b5, 0, 0, 0, 0}, 0x1f72 }, // U1F72 # GREEK SMALL LETTER EPSILON WITH VARIA
++// /* broken */ { {0x0000, 0x03b7, 0, 0, 0, 0}, 0x03ae }, // U03AE # GREEK SMALL LETTER ETA WITH TONOS
++// /* broken */ { {0x0000, 0x03b7, 0, 0, 0, 0}, 0x1f74 }, // U1F74 # GREEK SMALL LETTER ETA WITH VARIA
++// /* broken */ { {0x0000, 0x03b9, 0, 0, 0, 0}, 0x03af }, // U03AF # GREEK SMALL LETTER IOTA WITH TONOS
++// /* broken */ { {0x0000, 0x03b9, 0, 0, 0, 0}, 0x1f76 }, // U1F76 # GREEK SMALL LETTER IOTA WITH VARIA
++// /* broken */ { {0x0000, 0x03bf, 0, 0, 0, 0}, 0x03cc }, // U03CC # GREEK SMALL LETTER OMICRON WITH TONOS
++// /* broken */ { {0x0000, 0x03bf, 0, 0, 0, 0}, 0x1f78 }, // U1F78 # GREEK SMALL LETTER OMICRON WITH VARIA
++// /* broken */ { {0x0000, 0x03c5, 0, 0, 0, 0}, 0x03cd }, // U03CD # GREEK SMALL LETTER UPSILON WITH TONOS
++// /* broken */ { {0x0000, 0x03c5, 0, 0, 0, 0}, 0x1f7a }, // U1F7A # GREEK SMALL LETTER UPSILON WITH VARIA
++// /* broken */ { {0x0000, 0x03c9, 0, 0, 0, 0}, 0x03ce }, // U03CE # GREEK SMALL LETTER OMEGA WITH TONOS
++// /* broken */ { {0x0000, 0x03c9, 0, 0, 0, 0}, 0x1f7c }, // U1F7C # GREEK SMALL LETTER OMEGA WITH VARIA
++// /* broken */ { {0x0000, 0x03ca, 0, 0, 0, 0}, 0x0390 }, // U0390 # GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS
++// /* broken */ { {0x0000, 0x03ca, 0, 0, 0, 0}, 0x1fd2 }, // U1FD2 # GREEK SMALL LETTER IOTA WITH DIALYTIKA AND VARIA
++// /* broken */ { {0x0000, 0x03cb, 0, 0, 0, 0}, 0x1fe2 }, // U1FE2 # GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND VARIA
++// /* broken */ { {0x0000, 0x03cb, 0, 0, 0, 0}, 0x03b0 }, // U03B0 # GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS
++// /* broken */ { {0x0000, 0x0413, 0, 0, 0, 0}, 0x0403 }, // U0403 # CYRILLIC CAPITAL LETTER GJE
++// /* broken */ { {0x0000, 0x0415, 0, 0, 0, 0}, 0x0400 }, // U0400 # CYRILLIC CAPITAL LETTER IE WITH GRAVE
++// /* broken */ { {0x0000, 0x0418, 0, 0, 0, 0}, 0x040d }, // U040D # CYRILLIC CAPITAL LETTER I WITH GRAVE
++// /* broken */ { {0x0000, 0x041a, 0, 0, 0, 0}, 0x040c }, // U040C # CYRILLIC CAPITAL LETTER KJE
++// /* broken */ { {0x0000, 0x0433, 0, 0, 0, 0}, 0x0453 }, // U0453 # CYRILLIC SMALL LETTER GJE
++// /* broken */ { {0x0000, 0x0435, 0, 0, 0, 0}, 0x0450 }, // U0450 # CYRILLIC SMALL LETTER IE WITH GRAVE
++// /* broken */ { {0x0000, 0x0438, 0, 0, 0, 0}, 0x045d }, // U045D # CYRILLIC SMALL LETTER I WITH GRAVE
++// /* broken */ { {0x0000, 0x043a, 0, 0, 0, 0}, 0x045c }, // U045C # CYRILLIC SMALL LETTER KJE
++// /* broken */ { {0x0000, 0x1f00, 0, 0, 0, 0}, 0x1f02 }, // U1F02 # GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA
++// /* broken */ { {0x0000, 0x1f00, 0, 0, 0, 0}, 0x1f04 }, // U1F04 # GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA
++// /* broken */ { {0x0000, 0x1f01, 0, 0, 0, 0}, 0x1f03 }, // U1F03 # GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA
++// /* broken */ { {0x0000, 0x1f01, 0, 0, 0, 0}, 0x1f05 }, // U1F05 # GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA
++// /* broken */ { {0x0000, 0x1f08, 0, 0, 0, 0}, 0x1f0c }, // U1F0C # GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA
++// /* broken */ { {0x0000, 0x1f08, 0, 0, 0, 0}, 0x1f0a }, // U1F0A # GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA
++// /* broken */ { {0x0000, 0x1f09, 0, 0, 0, 0}, 0x1f0b }, // U1F0B # GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA
++// /* broken */ { {0x0000, 0x1f09, 0, 0, 0, 0}, 0x1f0d }, // U1F0D # GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA
++// /* broken */ { {0x0000, 0x1f10, 0, 0, 0, 0}, 0x1f12 }, // U1F12 # GREEK SMALL LETTER EPSILON WITH PSILI AND VARIA
++// /* broken */ { {0x0000, 0x1f10, 0, 0, 0, 0}, 0x1f14 }, // U1F14 # GREEK SMALL LETTER EPSILON WITH PSILI AND OXIA
++// /* broken */ { {0x0000, 0x1f11, 0, 0, 0, 0}, 0x1f13 }, // U1F13 # GREEK SMALL LETTER EPSILON WITH DASIA AND VARIA
++// /* broken */ { {0x0000, 0x1f11, 0, 0, 0, 0}, 0x1f15 }, // U1F15 # GREEK SMALL LETTER EPSILON WITH DASIA AND OXIA
++// /* broken */ { {0x0000, 0x1f18, 0, 0, 0, 0}, 0x1f1c }, // U1F1C # GREEK CAPITAL LETTER EPSILON WITH PSILI AND OXIA
++// /* broken */ { {0x0000, 0x1f18, 0, 0, 0, 0}, 0x1f1a }, // U1F1A # GREEK CAPITAL LETTER EPSILON WITH PSILI AND VARIA
++// /* broken */ { {0x0000, 0x1f19, 0, 0, 0, 0}, 0x1f1b }, // U1F1B # GREEK CAPITAL LETTER EPSILON WITH DASIA AND VARIA
++// /* broken */ { {0x0000, 0x1f19, 0, 0, 0, 0}, 0x1f1d }, // U1F1D # GREEK CAPITAL LETTER EPSILON WITH DASIA AND OXIA
++// /* broken */ { {0x0000, 0x1f20, 0, 0, 0, 0}, 0x1f22 }, // U1F22 # GREEK SMALL LETTER ETA WITH PSILI AND VARIA
++// /* broken */ { {0x0000, 0x1f20, 0, 0, 0, 0}, 0x1f24 }, // U1F24 # GREEK SMALL LETTER ETA WITH PSILI AND OXIA
++// /* broken */ { {0x0000, 0x1f21, 0, 0, 0, 0}, 0x1f23 }, // U1F23 # GREEK SMALL LETTER ETA WITH DASIA AND VARIA
++// /* broken */ { {0x0000, 0x1f21, 0, 0, 0, 0}, 0x1f25 }, // U1F25 # GREEK SMALL LETTER ETA WITH DASIA AND OXIA
++// /* broken */ { {0x0000, 0x1f28, 0, 0, 0, 0}, 0x1f2a }, // U1F2A # GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA
++// /* broken */ { {0x0000, 0x1f28, 0, 0, 0, 0}, 0x1f2c }, // U1F2C # GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA
++// /* broken */ { {0x0000, 0x1f29, 0, 0, 0, 0}, 0x1f2d }, // U1F2D # GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA
++// /* broken */ { {0x0000, 0x1f29, 0, 0, 0, 0}, 0x1f2b }, // U1F2B # GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA
++// /* broken */ { {0x0000, 0x1f30, 0, 0, 0, 0}, 0x1f32 }, // U1F32 # GREEK SMALL LETTER IOTA WITH PSILI AND VARIA
++// /* broken */ { {0x0000, 0x1f30, 0, 0, 0, 0}, 0x1f34 }, // U1F34 # GREEK SMALL LETTER IOTA WITH PSILI AND OXIA
++// /* broken */ { {0x0000, 0x1f31, 0, 0, 0, 0}, 0x1f33 }, // U1F33 # GREEK SMALL LETTER IOTA WITH DASIA AND VARIA
++// /* broken */ { {0x0000, 0x1f31, 0, 0, 0, 0}, 0x1f35 }, // U1F35 # GREEK SMALL LETTER IOTA WITH DASIA AND OXIA
++// /* broken */ { {0x0000, 0x1f38, 0, 0, 0, 0}, 0x1f3a }, // U1F3A # GREEK CAPITAL LETTER IOTA WITH PSILI AND VARIA
++// /* broken */ { {0x0000, 0x1f38, 0, 0, 0, 0}, 0x1f3c }, // U1F3C # GREEK CAPITAL LETTER IOTA WITH PSILI AND OXIA
++// /* broken */ { {0x0000, 0x1f39, 0, 0, 0, 0}, 0x1f3b }, // U1F3B # GREEK CAPITAL LETTER IOTA WITH DASIA AND VARIA
++// /* broken */ { {0x0000, 0x1f39, 0, 0, 0, 0}, 0x1f3d }, // U1F3D # GREEK CAPITAL LETTER IOTA WITH DASIA AND OXIA
++// /* broken */ { {0x0000, 0x1f40, 0, 0, 0, 0}, 0x1f44 }, // U1F44 # GREEK SMALL LETTER OMICRON WITH PSILI AND OXIA
++// /* broken */ { {0x0000, 0x1f40, 0, 0, 0, 0}, 0x1f42 }, // U1F42 # GREEK SMALL LETTER OMICRON WITH PSILI AND VARIA
++// /* broken */ { {0x0000, 0x1f41, 0, 0, 0, 0}, 0x1f43 }, // U1F43 # GREEK SMALL LETTER OMICRON WITH DASIA AND VARIA
++// /* broken */ { {0x0000, 0x1f41, 0, 0, 0, 0}, 0x1f45 }, // U1F45 # GREEK SMALL LETTER OMICRON WITH DASIA AND OXIA
++// /* broken */ { {0x0000, 0x1f48, 0, 0, 0, 0}, 0x1f4a }, // U1F4A # GREEK CAPITAL LETTER OMICRON WITH PSILI AND VARIA
++// /* broken */ { {0x0000, 0x1f48, 0, 0, 0, 0}, 0x1f4c }, // U1F4C # GREEK CAPITAL LETTER OMICRON WITH PSILI AND OXIA
++// /* broken */ { {0x0000, 0x1f49, 0, 0, 0, 0}, 0x1f4d }, // U1F4D # GREEK CAPITAL LETTER OMICRON WITH DASIA AND OXIA
++// /* broken */ { {0x0000, 0x1f49, 0, 0, 0, 0}, 0x1f4b }, // U1F4B # GREEK CAPITAL LETTER OMICRON WITH DASIA AND VARIA
++// /* broken */ { {0x0000, 0x1f50, 0, 0, 0, 0}, 0x1f52 }, // U1F52 # GREEK SMALL LETTER UPSILON WITH PSILI AND VARIA
++// /* broken */ { {0x0000, 0x1f50, 0, 0, 0, 0}, 0x1f54 }, // U1F54 # GREEK SMALL LETTER UPSILON WITH PSILI AND OXIA
++// /* broken */ { {0x0000, 0x1f51, 0, 0, 0, 0}, 0x1f53 }, // U1F53 # GREEK SMALL LETTER UPSILON WITH DASIA AND VARIA
++// /* broken */ { {0x0000, 0x1f51, 0, 0, 0, 0}, 0x1f55 }, // U1F55 # GREEK SMALL LETTER UPSILON WITH DASIA AND OXIA
++// /* broken */ { {0x0000, 0x1f59, 0, 0, 0, 0}, 0x1f5b }, // U1F5B # GREEK CAPITAL LETTER UPSILON WITH DASIA AND VARIA
++// /* broken */ { {0x0000, 0x1f59, 0, 0, 0, 0}, 0x1f5d }, // U1F5D # GREEK CAPITAL LETTER UPSILON WITH DASIA AND OXIA
++// /* broken */ { {0x0000, 0x1f60, 0, 0, 0, 0}, 0x1f64 }, // U1F64 # GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA
++// /* broken */ { {0x0000, 0x1f60, 0, 0, 0, 0}, 0x1f62 }, // U1F62 # GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA
++// /* broken */ { {0x0000, 0x1f61, 0, 0, 0, 0}, 0x1f63 }, // U1F63 # GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA
++// /* broken */ { {0x0000, 0x1f61, 0, 0, 0, 0}, 0x1f65 }, // U1F65 # GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA
++// /* broken */ { {0x0000, 0x1f68, 0, 0, 0, 0}, 0x1f6a }, // U1F6A # GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA
++// /* broken */ { {0x0000, 0x1f68, 0, 0, 0, 0}, 0x1f6c }, // U1F6C # GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA
++// /* broken */ { {0x0000, 0x1f69, 0, 0, 0, 0}, 0x1f6b }, // U1F6B # GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA
++// /* broken */ { {0x0000, 0x1f69, 0, 0, 0, 0}, 0x1f6d }, // U1F6D # GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA
++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x0000, 0x004f, 0, 0}, 0x01fe }, // U01FE # LATIN CAPITAL LETTER O WITH STROKE AND ACUTE
++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x0000, 0x006f, 0, 0}, 0x01ff }, // U01FF # LATIN SMALL LETTER O WITH STROKE AND ACUTE
++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x0022, 0x0049, 0, 0}, 0x1e2e }, // U1E2E # LATIN CAPITAL LETTER I WITH DIAERESIS AND ACUTE
++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x0022, 0x0055, 0, 0}, 0x01d7 }, // U01D7 # LATIN CAPITAL LETTER U WITH DIAERESIS AND ACUTE
++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x0022, 0x0055, 0, 0}, 0x01db }, // U01DB # LATIN CAPITAL LETTER U WITH DIAERESIS AND GRAVE
++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x0022, 0x0069, 0, 0}, 0x1e2f }, // U1E2F # LATIN SMALL LETTER I WITH DIAERESIS AND ACUTE
++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x0022, 0x0075, 0, 0}, 0x01dc }, // U01DC # LATIN SMALL LETTER U WITH DIAERESIS AND GRAVE
++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x0022, 0x0075, 0, 0}, 0x01d8 }, // U01D8 # LATIN SMALL LETTER U WITH DIAERESIS AND ACUTE
++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x0022, 0x03b9, 0, 0}, 0x1fd2 }, // U1FD2 # GREEK SMALL LETTER IOTA WITH DIALYTIKA AND VARIA
++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x0022, 0x03b9, 0, 0}, 0x0390 }, // U0390 # GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS
++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x0022, 0x03c5, 0, 0}, 0x1fe2 }, // U1FE2 # GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND VARIA
++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x0022, 0x03c5, 0, 0}, 0x03b0 }, // U03B0 # GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS
++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0391, 0, 0}, 0x1f0b }, // U1F0B # GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA
++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0391, 0, 0}, 0x1f0d }, // U1F0D # GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA
++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0395, 0, 0}, 0x1f1d }, // U1F1D # GREEK CAPITAL LETTER EPSILON WITH DASIA AND OXIA
++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0395, 0, 0}, 0x1f1b }, // U1F1B # GREEK CAPITAL LETTER EPSILON WITH DASIA AND VARIA
++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0397, 0, 0}, 0x1f2b }, // U1F2B # GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA
++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0397, 0, 0}, 0x1f2d }, // U1F2D # GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA
++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0399, 0, 0}, 0x1f3b }, // U1F3B # GREEK CAPITAL LETTER IOTA WITH DASIA AND VARIA
++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0399, 0, 0}, 0x1f3d }, // U1F3D # GREEK CAPITAL LETTER IOTA WITH DASIA AND OXIA
++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x0028, 0x039f, 0, 0}, 0x1f4b }, // U1F4B # GREEK CAPITAL LETTER OMICRON WITH DASIA AND VARIA
++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x0028, 0x039f, 0, 0}, 0x1f4d }, // U1F4D # GREEK CAPITAL LETTER OMICRON WITH DASIA AND OXIA
++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x0028, 0x03a5, 0, 0}, 0x1f5b }, // U1F5B # GREEK CAPITAL LETTER UPSILON WITH DASIA AND VARIA
++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x0028, 0x03a5, 0, 0}, 0x1f5d }, // U1F5D # GREEK CAPITAL LETTER UPSILON WITH DASIA AND OXIA
++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x0028, 0x03a9, 0, 0}, 0x1f6d }, // U1F6D # GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA
++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x0028, 0x03a9, 0, 0}, 0x1f6b }, // U1F6B # GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA
++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x0028, 0x03b1, 0, 0}, 0x1f03 }, // U1F03 # GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA
++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x0028, 0x03b1, 0, 0}, 0x1f05 }, // U1F05 # GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA
++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x0028, 0x03b5, 0, 0}, 0x1f15 }, // U1F15 # GREEK SMALL LETTER EPSILON WITH DASIA AND OXIA
++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x0028, 0x03b5, 0, 0}, 0x1f13 }, // U1F13 # GREEK SMALL LETTER EPSILON WITH DASIA AND VARIA
++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x0028, 0x03b7, 0, 0}, 0x1f23 }, // U1F23 # GREEK SMALL LETTER ETA WITH DASIA AND VARIA
++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x0028, 0x03b7, 0, 0}, 0x1f25 }, // U1F25 # GREEK SMALL LETTER ETA WITH DASIA AND OXIA
++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x0028, 0x03b9, 0, 0}, 0x1f35 }, // U1F35 # GREEK SMALL LETTER IOTA WITH DASIA AND OXIA
++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x0028, 0x03b9, 0, 0}, 0x1f33 }, // U1F33 # GREEK SMALL LETTER IOTA WITH DASIA AND VARIA
++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x0028, 0x03bf, 0, 0}, 0x1f45 }, // U1F45 # GREEK SMALL LETTER OMICRON WITH DASIA AND OXIA
++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x0028, 0x03bf, 0, 0}, 0x1f43 }, // U1F43 # GREEK SMALL LETTER OMICRON WITH DASIA AND VARIA
++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x0028, 0x03c5, 0, 0}, 0x1f55 }, // U1F55 # GREEK SMALL LETTER UPSILON WITH DASIA AND OXIA
++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x0028, 0x03c5, 0, 0}, 0x1f53 }, // U1F53 # GREEK SMALL LETTER UPSILON WITH DASIA AND VARIA
++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x0028, 0x03c9, 0, 0}, 0x1f65 }, // U1F65 # GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA
++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x0028, 0x03c9, 0, 0}, 0x1f63 }, // U1F63 # GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA
++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x0029, 0x0391, 0, 0}, 0x1f0c }, // U1F0C # GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA
++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x0029, 0x0391, 0, 0}, 0x1f0a }, // U1F0A # GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA
++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x0029, 0x0395, 0, 0}, 0x1f1c }, // U1F1C # GREEK CAPITAL LETTER EPSILON WITH PSILI AND OXIA
++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x0029, 0x0395, 0, 0}, 0x1f1a }, // U1F1A # GREEK CAPITAL LETTER EPSILON WITH PSILI AND VARIA
++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x0029, 0x0397, 0, 0}, 0x1f2c }, // U1F2C # GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA
++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x0029, 0x0397, 0, 0}, 0x1f2a }, // U1F2A # GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA
++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x0029, 0x0399, 0, 0}, 0x1f3c }, // U1F3C # GREEK CAPITAL LETTER IOTA WITH PSILI AND OXIA
++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x0029, 0x0399, 0, 0}, 0x1f3a }, // U1F3A # GREEK CAPITAL LETTER IOTA WITH PSILI AND VARIA
++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x0029, 0x039f, 0, 0}, 0x1f4c }, // U1F4C # GREEK CAPITAL LETTER OMICRON WITH PSILI AND OXIA
++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x0029, 0x039f, 0, 0}, 0x1f4a }, // U1F4A # GREEK CAPITAL LETTER OMICRON WITH PSILI AND VARIA
++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x0029, 0x03a9, 0, 0}, 0x1f6c }, // U1F6C # GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA
++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x0029, 0x03a9, 0, 0}, 0x1f6a }, // U1F6A # GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA
++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x0029, 0x03b1, 0, 0}, 0x1f04 }, // U1F04 # GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA
++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x0029, 0x03b1, 0, 0}, 0x1f02 }, // U1F02 # GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA
++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x0029, 0x03b5, 0, 0}, 0x1f12 }, // U1F12 # GREEK SMALL LETTER EPSILON WITH PSILI AND VARIA
++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x0029, 0x03b5, 0, 0}, 0x1f14 }, // U1F14 # GREEK SMALL LETTER EPSILON WITH PSILI AND OXIA
++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x0029, 0x03b7, 0, 0}, 0x1f22 }, // U1F22 # GREEK SMALL LETTER ETA WITH PSILI AND VARIA
++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x0029, 0x03b7, 0, 0}, 0x1f24 }, // U1F24 # GREEK SMALL LETTER ETA WITH PSILI AND OXIA
++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x0029, 0x03b9, 0, 0}, 0x1f32 }, // U1F32 # GREEK SMALL LETTER IOTA WITH PSILI AND VARIA
++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x0029, 0x03b9, 0, 0}, 0x1f34 }, // U1F34 # GREEK SMALL LETTER IOTA WITH PSILI AND OXIA
++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x0029, 0x03bf, 0, 0}, 0x1f44 }, // U1F44 # GREEK SMALL LETTER OMICRON WITH PSILI AND OXIA
++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x0029, 0x03bf, 0, 0}, 0x1f42 }, // U1F42 # GREEK SMALL LETTER OMICRON WITH PSILI AND VARIA
++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x0029, 0x03c5, 0, 0}, 0x1f54 }, // U1F54 # GREEK SMALL LETTER UPSILON WITH PSILI AND OXIA
++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x0029, 0x03c5, 0, 0}, 0x1f52 }, // U1F52 # GREEK SMALL LETTER UPSILON WITH PSILI AND VARIA
++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x0029, 0x03c9, 0, 0}, 0x1f64 }, // U1F64 # GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA
++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x0029, 0x03c9, 0, 0}, 0x1f62 }, // U1F62 # GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA
++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x002b, 0x004f, 0, 0}, 0x1ee0 }, // U1EE0 # LATIN CAPITAL LETTER O WITH HORN AND TILDE
++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x002b, 0x004f, 0, 0}, 0x1ede }, // U1EDE # LATIN CAPITAL LETTER O WITH HORN AND HOOK ABOVE
++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x002b, 0x004f, 0, 0}, 0x1ee2 }, // U1EE2 # LATIN CAPITAL LETTER O WITH HORN AND DOT BELOW
++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x002b, 0x004f, 0, 0}, 0x1eda }, // U1EDA # LATIN CAPITAL LETTER O WITH HORN AND ACUTE
++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x002b, 0x004f, 0, 0}, 0x1edc }, // U1EDC # LATIN CAPITAL LETTER O WITH HORN AND GRAVE
++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x002b, 0x0055, 0, 0}, 0x1eea }, // U1EEA # LATIN CAPITAL LETTER U WITH HORN AND GRAVE
++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x002b, 0x0055, 0, 0}, 0x1ef0 }, // U1EF0 # LATIN CAPITAL LETTER U WITH HORN AND DOT BELOW
++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x002b, 0x0055, 0, 0}, 0x1eee }, // U1EEE # LATIN CAPITAL LETTER U WITH HORN AND TILDE
++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x002b, 0x0055, 0, 0}, 0x1ee8 }, // U1EE8 # LATIN CAPITAL LETTER U WITH HORN AND ACUTE
++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x002b, 0x0055, 0, 0}, 0x1eec }, // U1EEC # LATIN CAPITAL LETTER U WITH HORN AND HOOK ABOVE
++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x002b, 0x006f, 0, 0}, 0x1edb }, // U1EDB # LATIN SMALL LETTER O WITH HORN AND ACUTE
++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x002b, 0x006f, 0, 0}, 0x1ee1 }, // U1EE1 # LATIN SMALL LETTER O WITH HORN AND TILDE
++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x002b, 0x006f, 0, 0}, 0x1edf }, // U1EDF # LATIN SMALL LETTER O WITH HORN AND HOOK ABOVE
++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x002b, 0x006f, 0, 0}, 0x1ee3 }, // U1EE3 # LATIN SMALL LETTER O WITH HORN AND DOT BELOW
++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x002b, 0x006f, 0, 0}, 0x1edd }, // U1EDD # LATIN SMALL LETTER O WITH HORN AND GRAVE
++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x002b, 0x0075, 0, 0}, 0x1eeb }, // U1EEB # LATIN SMALL LETTER U WITH HORN AND GRAVE
++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x002b, 0x0075, 0, 0}, 0x1ef1 }, // U1EF1 # LATIN SMALL LETTER U WITH HORN AND DOT BELOW
++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x002b, 0x0075, 0, 0}, 0x1eed }, // U1EED # LATIN SMALL LETTER U WITH HORN AND HOOK ABOVE
++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x002b, 0x0075, 0, 0}, 0x1ee9 }, // U1EE9 # LATIN SMALL LETTER U WITH HORN AND ACUTE
++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x002b, 0x0075, 0, 0}, 0x1eef }, // U1EEF # LATIN SMALL LETTER U WITH HORN AND TILDE
++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x002c, 0x0043, 0, 0}, 0x1e08 }, // U1E08 # LATIN CAPITAL LETTER C WITH CEDILLA AND ACUTE
++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x002c, 0x0063, 0, 0}, 0x1e09 }, // U1E09 # LATIN SMALL LETTER C WITH CEDILLA AND ACUTE
++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x002f, 0x004f, 0, 0}, 0x01fe }, // U01FE # LATIN CAPITAL LETTER O WITH STROKE AND ACUTE
++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x002f, 0x006f, 0, 0}, 0x01ff }, // U01FF # LATIN SMALL LETTER O WITH STROKE AND ACUTE
++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x0055, 0x0041, 0, 0}, 0x1eb2 }, // U1EB2 # LATIN CAPITAL LETTER A WITH BREVE AND HOOK ABOVE
++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x0055, 0x0041, 0, 0}, 0x1eb4 }, // U1EB4 # LATIN CAPITAL LETTER A WITH BREVE AND TILDE
++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x0055, 0x0041, 0, 0}, 0x1eae }, // U1EAE # LATIN CAPITAL LETTER A WITH BREVE AND ACUTE
++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x0055, 0x0041, 0, 0}, 0x1eb0 }, // U1EB0 # LATIN CAPITAL LETTER A WITH BREVE AND GRAVE
++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x0055, 0x0061, 0, 0}, 0x1eb5 }, // U1EB5 # LATIN SMALL LETTER A WITH BREVE AND TILDE
++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x0055, 0x0061, 0, 0}, 0x1eaf }, // U1EAF # LATIN SMALL LETTER A WITH BREVE AND ACUTE
++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x0055, 0x0061, 0, 0}, 0x1eb3 }, // U1EB3 # LATIN SMALL LETTER A WITH BREVE AND HOOK ABOVE
++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x0055, 0x0061, 0, 0}, 0x1eb1 }, // U1EB1 # LATIN SMALL LETTER A WITH BREVE AND GRAVE
++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x005e, 0x0041, 0, 0}, 0x1ea8 }, // U1EA8 # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE
++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x005e, 0x0041, 0, 0}, 0x1ea6 }, // U1EA6 # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND GRAVE
++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x005e, 0x0041, 0, 0}, 0x1eaa }, // U1EAA # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND TILDE
++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x005e, 0x0041, 0, 0}, 0x1ea4 }, // U1EA4 # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND ACUTE
++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x005e, 0x0045, 0, 0}, 0x1ec4 }, // U1EC4 # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND TILDE
++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x005e, 0x0045, 0, 0}, 0x1ec2 }, // U1EC2 # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE
++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x005e, 0x0045, 0, 0}, 0x1ec0 }, // U1EC0 # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND GRAVE
++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x005e, 0x0045, 0, 0}, 0x1ebe }, // U1EBE # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND ACUTE
++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x005e, 0x004f, 0, 0}, 0x1ed6 }, // U1ED6 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND TILDE
++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x005e, 0x004f, 0, 0}, 0x1ed4 }, // U1ED4 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE
++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x005e, 0x004f, 0, 0}, 0x1ed0 }, // U1ED0 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND ACUTE
++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x005e, 0x004f, 0, 0}, 0x1ed2 }, // U1ED2 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND GRAVE
++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x005e, 0x0061, 0, 0}, 0x1ea9 }, // U1EA9 # LATIN SMALL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE
++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x005e, 0x0061, 0, 0}, 0x1ea7 }, // U1EA7 # LATIN SMALL LETTER A WITH CIRCUMFLEX AND GRAVE
++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x005e, 0x0061, 0, 0}, 0x1ea5 }, // U1EA5 # LATIN SMALL LETTER A WITH CIRCUMFLEX AND ACUTE
++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x005e, 0x0061, 0, 0}, 0x1eab }, // U1EAB # LATIN SMALL LETTER A WITH CIRCUMFLEX AND TILDE
++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x005e, 0x0065, 0, 0}, 0x1ec5 }, // U1EC5 # LATIN SMALL LETTER E WITH CIRCUMFLEX AND TILDE
++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x005e, 0x0065, 0, 0}, 0x1ec1 }, // U1EC1 # LATIN SMALL LETTER E WITH CIRCUMFLEX AND GRAVE
++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x005e, 0x0065, 0, 0}, 0x1ebf }, // U1EBF # LATIN SMALL LETTER E WITH CIRCUMFLEX AND ACUTE
++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x005e, 0x0065, 0, 0}, 0x1ec3 }, // U1EC3 # LATIN SMALL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE
++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x005e, 0x006f, 0, 0}, 0x1ed7 }, // U1ED7 # LATIN SMALL LETTER O WITH CIRCUMFLEX AND TILDE
++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x005e, 0x006f, 0, 0}, 0x1ed5 }, // U1ED5 # LATIN SMALL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE
++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x005e, 0x006f, 0, 0}, 0x1ed1 }, // U1ED1 # LATIN SMALL LETTER O WITH CIRCUMFLEX AND ACUTE
++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x005e, 0x006f, 0, 0}, 0x1ed3 }, // U1ED3 # LATIN SMALL LETTER O WITH CIRCUMFLEX AND GRAVE
++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0045, 0, 0}, 0x1e16 }, // U1E16 # LATIN CAPITAL LETTER E WITH MACRON AND ACUTE
++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0045, 0, 0}, 0x1e14 }, // U1E14 # LATIN CAPITAL LETTER E WITH MACRON AND GRAVE
++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x005f, 0x004f, 0, 0}, 0x1e52 }, // U1E52 # LATIN CAPITAL LETTER O WITH MACRON AND ACUTE
++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x005f, 0x004f, 0, 0}, 0x1e50 }, // U1E50 # LATIN CAPITAL LETTER O WITH MACRON AND GRAVE
++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0065, 0, 0}, 0x1e15 }, // U1E15 # LATIN SMALL LETTER E WITH MACRON AND GRAVE
++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0065, 0, 0}, 0x1e17 }, // U1E17 # LATIN SMALL LETTER E WITH MACRON AND ACUTE
++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x005f, 0x006f, 0, 0}, 0x1e51 }, // U1E51 # LATIN SMALL LETTER O WITH MACRON AND GRAVE
++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x005f, 0x006f, 0, 0}, 0x1e53 }, // U1E53 # LATIN SMALL LETTER O WITH MACRON AND ACUTE
++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x0062, 0x0041, 0, 0}, 0x1eae }, // U1EAE # LATIN CAPITAL LETTER A WITH BREVE AND ACUTE
++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x0062, 0x0041, 0, 0}, 0x1eb4 }, // U1EB4 # LATIN CAPITAL LETTER A WITH BREVE AND TILDE
++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x0062, 0x0041, 0, 0}, 0x1eb0 }, // U1EB0 # LATIN CAPITAL LETTER A WITH BREVE AND GRAVE
++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x0062, 0x0041, 0, 0}, 0x1eb2 }, // U1EB2 # LATIN CAPITAL LETTER A WITH BREVE AND HOOK ABOVE
++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x0062, 0x0061, 0, 0}, 0x1eb1 }, // U1EB1 # LATIN SMALL LETTER A WITH BREVE AND GRAVE
++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x0062, 0x0061, 0, 0}, 0x1eaf }, // U1EAF # LATIN SMALL LETTER A WITH BREVE AND ACUTE
++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x0062, 0x0061, 0, 0}, 0x1eb5 }, // U1EB5 # LATIN SMALL LETTER A WITH BREVE AND TILDE
++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x0062, 0x0061, 0, 0}, 0x1eb3 }, // U1EB3 # LATIN SMALL LETTER A WITH BREVE AND HOOK ABOVE
++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x006f, 0x0041, 0, 0}, 0x01fa }, // U01FA # LATIN CAPITAL LETTER A WITH RING ABOVE AND ACUTE
++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x006f, 0x0061, 0, 0}, 0x01fb }, // U01FB # LATIN SMALL LETTER A WITH RING ABOVE AND ACUTE
++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x007e, 0x004f, 0, 0}, 0x1e4c }, // U1E4C # LATIN CAPITAL LETTER O WITH TILDE AND ACUTE
++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x007e, 0x0055, 0, 0}, 0x1e78 }, // U1E78 # LATIN CAPITAL LETTER U WITH TILDE AND ACUTE
++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x007e, 0x006f, 0, 0}, 0x1e4d }, // U1E4D # LATIN SMALL LETTER O WITH TILDE AND ACUTE
++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x007e, 0x0075, 0, 0}, 0x1e79 }, // U1E79 # LATIN SMALL LETTER U WITH TILDE AND ACUTE
++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x00af, 0x0045, 0, 0}, 0x1e16 }, // U1E16 # LATIN CAPITAL LETTER E WITH MACRON AND ACUTE
++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x00af, 0x0045, 0, 0}, 0x1e14 }, // U1E14 # LATIN CAPITAL LETTER E WITH MACRON AND GRAVE
++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x00af, 0x004f, 0, 0}, 0x1e52 }, // U1E52 # LATIN CAPITAL LETTER O WITH MACRON AND ACUTE
++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x00af, 0x004f, 0, 0}, 0x1e50 }, // U1E50 # LATIN CAPITAL LETTER O WITH MACRON AND GRAVE
++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x00af, 0x0065, 0, 0}, 0x1e15 }, // U1E15 # LATIN SMALL LETTER E WITH MACRON AND GRAVE
++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x00af, 0x0065, 0, 0}, 0x1e17 }, // U1E17 # LATIN SMALL LETTER E WITH MACRON AND ACUTE
++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x00af, 0x006f, 0, 0}, 0x1e53 }, // U1E53 # LATIN SMALL LETTER O WITH MACRON AND ACUTE
++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x00af, 0x006f, 0, 0}, 0x1e51 }, // U1E51 # LATIN SMALL LETTER O WITH MACRON AND GRAVE
++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Dead_Circumflex), 0x0041, 0, 0, 0}, 0x1eaa }, // U1EAA # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND TILDE
++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Dead_Circumflex), 0x0041, 0, 0, 0}, 0x1ea6 }, // U1EA6 # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND GRAVE
++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Dead_Circumflex), 0x0041, 0, 0, 0}, 0x1ea4 }, // U1EA4 # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND ACUTE
++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Dead_Circumflex), 0x0041, 0, 0, 0}, 0x1ea8 }, // U1EA8 # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE
++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Dead_Circumflex), 0x0045, 0, 0, 0}, 0x1ec4 }, // U1EC4 # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND TILDE
++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Dead_Circumflex), 0x0045, 0, 0, 0}, 0x1ec0 }, // U1EC0 # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND GRAVE
++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Dead_Circumflex), 0x0045, 0, 0, 0}, 0x1ec2 }, // U1EC2 # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE
++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Dead_Circumflex), 0x0045, 0, 0, 0}, 0x1ebe }, // U1EBE # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND ACUTE
++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Dead_Circumflex), 0x004f, 0, 0, 0}, 0x1ed0 }, // U1ED0 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND ACUTE
++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Dead_Circumflex), 0x004f, 0, 0, 0}, 0x1ed2 }, // U1ED2 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND GRAVE
++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Dead_Circumflex), 0x004f, 0, 0, 0}, 0x1ed4 }, // U1ED4 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE
++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Dead_Circumflex), 0x004f, 0, 0, 0}, 0x1ed6 }, // U1ED6 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND TILDE
++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Dead_Circumflex), 0x0061, 0, 0, 0}, 0x1eab }, // U1EAB # LATIN SMALL LETTER A WITH CIRCUMFLEX AND TILDE
++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Dead_Circumflex), 0x0061, 0, 0, 0}, 0x1ea5 }, // U1EA5 # LATIN SMALL LETTER A WITH CIRCUMFLEX AND ACUTE
++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Dead_Circumflex), 0x0061, 0, 0, 0}, 0x1ea9 }, // U1EA9 # LATIN SMALL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE
++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Dead_Circumflex), 0x0061, 0, 0, 0}, 0x1ea7 }, // U1EA7 # LATIN SMALL LETTER A WITH CIRCUMFLEX AND GRAVE
++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Dead_Circumflex), 0x0065, 0, 0, 0}, 0x1ebf }, // U1EBF # LATIN SMALL LETTER E WITH CIRCUMFLEX AND ACUTE
++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Dead_Circumflex), 0x0065, 0, 0, 0}, 0x1ec3 }, // U1EC3 # LATIN SMALL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE
++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Dead_Circumflex), 0x0065, 0, 0, 0}, 0x1ec1 }, // U1EC1 # LATIN SMALL LETTER E WITH CIRCUMFLEX AND GRAVE
++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Dead_Circumflex), 0x0065, 0, 0, 0}, 0x1ec5 }, // U1EC5 # LATIN SMALL LETTER E WITH CIRCUMFLEX AND TILDE
++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Dead_Circumflex), 0x006f, 0, 0, 0}, 0x1ed3 }, // U1ED3 # LATIN SMALL LETTER O WITH CIRCUMFLEX AND GRAVE
++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Dead_Circumflex), 0x006f, 0, 0, 0}, 0x1ed7 }, // U1ED7 # LATIN SMALL LETTER O WITH CIRCUMFLEX AND TILDE
++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Dead_Circumflex), 0x006f, 0, 0, 0}, 0x1ed1 }, // U1ED1 # LATIN SMALL LETTER O WITH CIRCUMFLEX AND ACUTE
++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Dead_Circumflex), 0x006f, 0, 0, 0}, 0x1ed5 }, // U1ED5 # LATIN SMALL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE
++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Dead_Tilde), 0x004f, 0, 0, 0}, 0x1e4c }, // U1E4C # LATIN CAPITAL LETTER O WITH TILDE AND ACUTE
++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Dead_Tilde), 0x0055, 0, 0, 0}, 0x1e78 }, // U1E78 # LATIN CAPITAL LETTER U WITH TILDE AND ACUTE
++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Dead_Tilde), 0x006f, 0, 0, 0}, 0x1e4d }, // U1E4D # LATIN SMALL LETTER O WITH TILDE AND ACUTE
++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Dead_Tilde), 0x0075, 0, 0, 0}, 0x1e79 }, // U1E79 # LATIN SMALL LETTER U WITH TILDE AND ACUTE
++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Dead_Macron), 0x0045, 0, 0, 0}, 0x1e16 }, // U1E16 # LATIN CAPITAL LETTER E WITH MACRON AND ACUTE
++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Dead_Macron), 0x0045, 0, 0, 0}, 0x1e14 }, // U1E14 # LATIN CAPITAL LETTER E WITH MACRON AND GRAVE
++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Dead_Macron), 0x004f, 0, 0, 0}, 0x1e52 }, // U1E52 # LATIN CAPITAL LETTER O WITH MACRON AND ACUTE
++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Dead_Macron), 0x004f, 0, 0, 0}, 0x1e50 }, // U1E50 # LATIN CAPITAL LETTER O WITH MACRON AND GRAVE
++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Dead_Macron), 0x0065, 0, 0, 0}, 0x1e17 }, // U1E17 # LATIN SMALL LETTER E WITH MACRON AND ACUTE
++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Dead_Macron), 0x0065, 0, 0, 0}, 0x1e15 }, // U1E15 # LATIN SMALL LETTER E WITH MACRON AND GRAVE
++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Dead_Macron), 0x006f, 0, 0, 0}, 0x1e53 }, // U1E53 # LATIN SMALL LETTER O WITH MACRON AND ACUTE
++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Dead_Macron), 0x006f, 0, 0, 0}, 0x1e51 }, // U1E51 # LATIN SMALL LETTER O WITH MACRON AND GRAVE
++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Dead_Breve), 0x0041, 0, 0, 0}, 0x1eb4 }, // U1EB4 # LATIN CAPITAL LETTER A WITH BREVE AND TILDE
++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Dead_Breve), 0x0041, 0, 0, 0}, 0x1eb0 }, // U1EB0 # LATIN CAPITAL LETTER A WITH BREVE AND GRAVE
++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Dead_Breve), 0x0041, 0, 0, 0}, 0x1eae }, // U1EAE # LATIN CAPITAL LETTER A WITH BREVE AND ACUTE
++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Dead_Breve), 0x0041, 0, 0, 0}, 0x1eb2 }, // U1EB2 # LATIN CAPITAL LETTER A WITH BREVE AND HOOK ABOVE
++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Dead_Breve), 0x0061, 0, 0, 0}, 0x1eb1 }, // U1EB1 # LATIN SMALL LETTER A WITH BREVE AND GRAVE
++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Dead_Breve), 0x0061, 0, 0, 0}, 0x1eb3 }, // U1EB3 # LATIN SMALL LETTER A WITH BREVE AND HOOK ABOVE
++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Dead_Breve), 0x0061, 0, 0, 0}, 0x1eaf }, // U1EAF # LATIN SMALL LETTER A WITH BREVE AND ACUTE
++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Dead_Breve), 0x0061, 0, 0, 0}, 0x1eb5 }, // U1EB5 # LATIN SMALL LETTER A WITH BREVE AND TILDE
++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Dead_Diaeresis), 0x0049, 0, 0, 0}, 0x1e2e }, // U1E2E # LATIN CAPITAL LETTER I WITH DIAERESIS AND ACUTE
++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Dead_Diaeresis), 0x0055, 0, 0, 0}, 0x01db }, // U01DB # LATIN CAPITAL LETTER U WITH DIAERESIS AND GRAVE
++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Dead_Diaeresis), 0x0055, 0, 0, 0}, 0x01d7 }, // U01D7 # LATIN CAPITAL LETTER U WITH DIAERESIS AND ACUTE
++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Dead_Diaeresis), 0x0069, 0, 0, 0}, 0x1e2f }, // U1E2F # LATIN SMALL LETTER I WITH DIAERESIS AND ACUTE
++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Dead_Diaeresis), 0x0075, 0, 0, 0}, 0x01dc }, // U01DC # LATIN SMALL LETTER U WITH DIAERESIS AND GRAVE
++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Dead_Diaeresis), 0x0075, 0, 0, 0}, 0x01d8 }, // U01D8 # LATIN SMALL LETTER U WITH DIAERESIS AND ACUTE
++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Dead_Diaeresis), 0x03b9, 0, 0, 0}, 0x0390 }, // U0390 # GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS
++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Dead_Diaeresis), 0x03b9, 0, 0, 0}, 0x1fd2 }, // U1FD2 # GREEK SMALL LETTER IOTA WITH DIALYTIKA AND VARIA
++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Dead_Diaeresis), 0x03c5, 0, 0, 0}, 0x1fe2 }, // U1FE2 # GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND VARIA
++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Dead_Diaeresis), 0x03c5, 0, 0, 0}, 0x03b0 }, // U03B0 # GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS
++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Dead_Abovering), 0x0041, 0, 0, 0}, 0x01fa }, // U01FA # LATIN CAPITAL LETTER A WITH RING ABOVE AND ACUTE
++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Dead_Abovering), 0x0061, 0, 0, 0}, 0x01fb }, // U01FB # LATIN SMALL LETTER A WITH RING ABOVE AND ACUTE
++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Dead_Cedilla), 0x0043, 0, 0, 0}, 0x1e08 }, // U1E08 # LATIN CAPITAL LETTER C WITH CEDILLA AND ACUTE
++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Dead_Cedilla), 0x0063, 0, 0, 0}, 0x1e09 }, // U1E09 # LATIN SMALL LETTER C WITH CEDILLA AND ACUTE
++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Dead_Horn), 0x004f, 0, 0, 0}, 0x1ede }, // U1EDE # LATIN CAPITAL LETTER O WITH HORN AND HOOK ABOVE
++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Dead_Horn), 0x004f, 0, 0, 0}, 0x1ee2 }, // U1EE2 # LATIN CAPITAL LETTER O WITH HORN AND DOT BELOW
++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Dead_Horn), 0x004f, 0, 0, 0}, 0x1edc }, // U1EDC # LATIN CAPITAL LETTER O WITH HORN AND GRAVE
++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Dead_Horn), 0x004f, 0, 0, 0}, 0x1ee0 }, // U1EE0 # LATIN CAPITAL LETTER O WITH HORN AND TILDE
++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Dead_Horn), 0x004f, 0, 0, 0}, 0x1eda }, // U1EDA # LATIN CAPITAL LETTER O WITH HORN AND ACUTE
++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Dead_Horn), 0x0055, 0, 0, 0}, 0x1eea }, // U1EEA # LATIN CAPITAL LETTER U WITH HORN AND GRAVE
++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Dead_Horn), 0x0055, 0, 0, 0}, 0x1ee8 }, // U1EE8 # LATIN CAPITAL LETTER U WITH HORN AND ACUTE
++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Dead_Horn), 0x0055, 0, 0, 0}, 0x1ef0 }, // U1EF0 # LATIN CAPITAL LETTER U WITH HORN AND DOT BELOW
++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Dead_Horn), 0x0055, 0, 0, 0}, 0x1eec }, // U1EEC # LATIN CAPITAL LETTER U WITH HORN AND HOOK ABOVE
++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Dead_Horn), 0x0055, 0, 0, 0}, 0x1eee }, // U1EEE # LATIN CAPITAL LETTER U WITH HORN AND TILDE
++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Dead_Horn), 0x006f, 0, 0, 0}, 0x1edf }, // U1EDF # LATIN SMALL LETTER O WITH HORN AND HOOK ABOVE
++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Dead_Horn), 0x006f, 0, 0, 0}, 0x1ee3 }, // U1EE3 # LATIN SMALL LETTER O WITH HORN AND DOT BELOW
++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Dead_Horn), 0x006f, 0, 0, 0}, 0x1edd }, // U1EDD # LATIN SMALL LETTER O WITH HORN AND GRAVE
++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Dead_Horn), 0x006f, 0, 0, 0}, 0x1edb }, // U1EDB # LATIN SMALL LETTER O WITH HORN AND ACUTE
++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Dead_Horn), 0x006f, 0, 0, 0}, 0x1ee1 }, // U1EE1 # LATIN SMALL LETTER O WITH HORN AND TILDE
++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Dead_Horn), 0x0075, 0, 0, 0}, 0x1eed }, // U1EED # LATIN SMALL LETTER U WITH HORN AND HOOK ABOVE
++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Dead_Horn), 0x0075, 0, 0, 0}, 0x1eef }, // U1EEF # LATIN SMALL LETTER U WITH HORN AND TILDE
++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Dead_Horn), 0x0075, 0, 0, 0}, 0x1ef1 }, // U1EF1 # LATIN SMALL LETTER U WITH HORN AND DOT BELOW
++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Dead_Horn), 0x0075, 0, 0, 0}, 0x1eeb }, // U1EEB # LATIN SMALL LETTER U WITH HORN AND GRAVE
++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Dead_Horn), 0x0075, 0, 0, 0}, 0x1ee9 }, // U1EE9 # LATIN SMALL LETTER U WITH HORN AND ACUTE
++ { {0x030f, 0x0041, 0, 0, 0, 0}, 0x0200 }, // U0200 # LATIN CAPITAL LETTER A WITH DOUBLE GRAVE
++ { {0x030f, 0x0045, 0, 0, 0, 0}, 0x0204 }, // U0204 # LATIN CAPITAL LETTER E WITH DOUBLE GRAVE
++ { {0x030f, 0x0049, 0, 0, 0, 0}, 0x0208 }, // U0208 # LATIN CAPITAL LETTER I WITH DOUBLE GRAVE
++ { {0x030f, 0x004f, 0, 0, 0, 0}, 0x020c }, // U020C # LATIN CAPITAL LETTER O WITH DOUBLE GRAVE
++ { {0x030f, 0x0052, 0, 0, 0, 0}, 0x0210 }, // U0210 # LATIN CAPITAL LETTER R WITH DOUBLE GRAVE
++ { {0x030f, 0x0055, 0, 0, 0, 0}, 0x0214 }, // U0214 # LATIN CAPITAL LETTER U WITH DOUBLE GRAVE
++ { {0x030f, 0x0061, 0, 0, 0, 0}, 0x0201 }, // U0201 # LATIN SMALL LETTER A WITH DOUBLE GRAVE
++ { {0x030f, 0x0065, 0, 0, 0, 0}, 0x0205 }, // U0205 # LATIN SMALL LETTER E WITH DOUBLE GRAVE
++ { {0x030f, 0x0069, 0, 0, 0, 0}, 0x0209 }, // U0209 # LATIN SMALL LETTER I WITH DOUBLE GRAVE
++ { {0x030f, 0x006f, 0, 0, 0, 0}, 0x020d }, // U020D # LATIN SMALL LETTER O WITH DOUBLE GRAVE
++ { {0x030f, 0x0072, 0, 0, 0, 0}, 0x0211 }, // U0211 # LATIN SMALL LETTER R WITH DOUBLE GRAVE
++ { {0x030f, 0x0075, 0, 0, 0, 0}, 0x0215 }, // U0215 # LATIN SMALL LETTER U WITH DOUBLE GRAVE
++ { {0x030f, 0x0474, 0, 0, 0, 0}, 0x0476 }, // U0476 # CYRILLIC CAPITAL LETTER IZHITSA WITH DOUBLE GRAVE ACCENT
++ { {0x030f, 0x0475, 0, 0, 0, 0}, 0x0477 }, // U0477 # CYRILLIC SMALL LETTER IZHITSA WITH DOUBLE GRAVE ACCENT
++ { {0x0311, 0x0041, 0, 0, 0, 0}, 0x0202 }, // U0202 # LATIN CAPITAL LETTER A WITH INVERTED BREVE
++ { {0x0311, 0x0045, 0, 0, 0, 0}, 0x0206 }, // U0206 # LATIN CAPITAL LETTER E WITH INVERTED BREVE
++ { {0x0311, 0x0049, 0, 0, 0, 0}, 0x020a }, // U020A # LATIN CAPITAL LETTER I WITH INVERTED BREVE
++ { {0x0311, 0x004f, 0, 0, 0, 0}, 0x020e }, // U020E # LATIN CAPITAL LETTER O WITH INVERTED BREVE
++ { {0x0311, 0x0052, 0, 0, 0, 0}, 0x0212 }, // U0212 # LATIN CAPITAL LETTER R WITH INVERTED BREVE
++ { {0x0311, 0x0055, 0, 0, 0, 0}, 0x0216 }, // U0216 # LATIN CAPITAL LETTER U WITH INVERTED BREVE
++ { {0x0311, 0x0061, 0, 0, 0, 0}, 0x0203 }, // U0203 # LATIN SMALL LETTER A WITH INVERTED BREVE
++ { {0x0311, 0x0065, 0, 0, 0, 0}, 0x0207 }, // U0207 # LATIN SMALL LETTER E WITH INVERTED BREVE
++ { {0x0311, 0x0069, 0, 0, 0, 0}, 0x020b }, // U020B # LATIN SMALL LETTER I WITH INVERTED BREVE
++ { {0x0311, 0x006f, 0, 0, 0, 0}, 0x020f }, // U020F # LATIN SMALL LETTER O WITH INVERTED BREVE
++ { {0x0311, 0x0072, 0, 0, 0, 0}, 0x0213 }, // U0213 # LATIN SMALL LETTER R WITH INVERTED BREVE
++ { {0x0311, 0x0075, 0, 0, 0, 0}, 0x0217 }, // U0217 # LATIN SMALL LETTER U WITH INVERTED BREVE
++ { {0x0313, 0x0391, 0, 0, 0, 0}, 0x1f08 }, // U1F08 # GREEK CAPITAL LETTER ALPHA WITH PSILI
++ { {0x0313, 0x0395, 0, 0, 0, 0}, 0x1f18 }, // U1F18 # GREEK CAPITAL LETTER EPSILON WITH PSILI
++ { {0x0313, 0x0397, 0, 0, 0, 0}, 0x1f28 }, // U1F28 # GREEK CAPITAL LETTER ETA WITH PSILI
++ { {0x0313, 0x0399, 0, 0, 0, 0}, 0x1f38 }, // U1F38 # GREEK CAPITAL LETTER IOTA WITH PSILI
++ { {0x0313, 0x039f, 0, 0, 0, 0}, 0x1f48 }, // U1F48 # GREEK CAPITAL LETTER OMICRON WITH PSILI
++ { {0x0313, 0x03a9, 0, 0, 0, 0}, 0x1f68 }, // U1F68 # GREEK CAPITAL LETTER OMEGA WITH PSILI
++ { {0x0313, 0x03b1, 0, 0, 0, 0}, 0x1f00 }, // U1F00 # GREEK SMALL LETTER ALPHA WITH PSILI
++ { {0x0313, 0x03b5, 0, 0, 0, 0}, 0x1f10 }, // U1F10 # GREEK SMALL LETTER EPSILON WITH PSILI
++ { {0x0313, 0x03b7, 0, 0, 0, 0}, 0x1f20 }, // U1F20 # GREEK SMALL LETTER ETA WITH PSILI
++ { {0x0313, 0x03b9, 0, 0, 0, 0}, 0x1f30 }, // U1F30 # GREEK SMALL LETTER IOTA WITH PSILI
++ { {0x0313, 0x03bf, 0, 0, 0, 0}, 0x1f40 }, // U1F40 # GREEK SMALL LETTER OMICRON WITH PSILI
++ { {0x0313, 0x03c1, 0, 0, 0, 0}, 0x1fe4 }, // U1FE4 # GREEK SMALL LETTER RHO WITH PSILI
++ { {0x0313, 0x03c5, 0, 0, 0, 0}, 0x1f50 }, // U1F50 # GREEK SMALL LETTER UPSILON WITH PSILI
++ { {0x0313, 0x03c9, 0, 0, 0, 0}, 0x1f60 }, // U1F60 # GREEK SMALL LETTER OMEGA WITH PSILI
++ { {0x0314, 0x0391, 0, 0, 0, 0}, 0x1f09 }, // U1F09 # GREEK CAPITAL LETTER ALPHA WITH DASIA
++ { {0x0314, 0x0395, 0, 0, 0, 0}, 0x1f19 }, // U1F19 # GREEK CAPITAL LETTER EPSILON WITH DASIA
++ { {0x0314, 0x0397, 0, 0, 0, 0}, 0x1f29 }, // U1F29 # GREEK CAPITAL LETTER ETA WITH DASIA
++ { {0x0314, 0x0399, 0, 0, 0, 0}, 0x1f39 }, // U1F39 # GREEK CAPITAL LETTER IOTA WITH DASIA
++ { {0x0314, 0x039f, 0, 0, 0, 0}, 0x1f49 }, // U1F49 # GREEK CAPITAL LETTER OMICRON WITH DASIA
++ { {0x0314, 0x03a1, 0, 0, 0, 0}, 0x1fec }, // U1FEC # GREEK CAPITAL LETTER RHO WITH DASIA
++ { {0x0314, 0x03a5, 0, 0, 0, 0}, 0x1f59 }, // U1F59 # GREEK CAPITAL LETTER UPSILON WITH DASIA
++ { {0x0314, 0x03a9, 0, 0, 0, 0}, 0x1f69 }, // U1F69 # GREEK CAPITAL LETTER OMEGA WITH DASIA
++ { {0x0314, 0x03b1, 0, 0, 0, 0}, 0x1f01 }, // U1F01 # GREEK SMALL LETTER ALPHA WITH DASIA
++ { {0x0314, 0x03b5, 0, 0, 0, 0}, 0x1f11 }, // U1F11 # GREEK SMALL LETTER EPSILON WITH DASIA
++ { {0x0314, 0x03b7, 0, 0, 0, 0}, 0x1f21 }, // U1F21 # GREEK SMALL LETTER ETA WITH DASIA
++ { {0x0314, 0x03b9, 0, 0, 0, 0}, 0x1f31 }, // U1F31 # GREEK SMALL LETTER IOTA WITH DASIA
++ { {0x0314, 0x03bf, 0, 0, 0, 0}, 0x1f41 }, // U1F41 # GREEK SMALL LETTER OMICRON WITH DASIA
++ { {0x0314, 0x03c1, 0, 0, 0, 0}, 0x1fe5 }, // U1FE5 # GREEK SMALL LETTER RHO WITH DASIA
++ { {0x0314, 0x03c5, 0, 0, 0, 0}, 0x1f51 }, // U1F51 # GREEK SMALL LETTER UPSILON WITH DASIA
++ { {0x0314, 0x03c9, 0, 0, 0, 0}, 0x1f61 }, // U1F61 # GREEK SMALL LETTER OMEGA WITH DASIA
++ { {0x0324, 0x0055, 0, 0, 0, 0}, 0x1e72 }, // U1E72 # LATIN CAPITAL LETTER U WITH DIAERESIS BELOW
++ { {0x0324, 0x0075, 0, 0, 0, 0}, 0x1e73 }, // U1E73 # LATIN SMALL LETTER U WITH DIAERESIS BELOW
++ { {0x0325, 0x0041, 0, 0, 0, 0}, 0x1e00 }, // U1E00 # LATIN CAPITAL LETTER A WITH RING BELOW
++ { {0x0325, 0x0061, 0, 0, 0, 0}, 0x1e01 }, // U1E01 # LATIN SMALL LETTER A WITH RING BELOW
++ { {0x0326, 0x0053, 0, 0, 0, 0}, 0x0218 }, // U0218 # LATIN CAPITAL LETTER S WITH COMMA BELOW
++ { {0x0326, 0x0054, 0, 0, 0, 0}, 0x021a }, // U021A # LATIN CAPITAL LETTER T WITH COMMA BELOW
++ { {0x0326, 0x0073, 0, 0, 0, 0}, 0x0219 }, // U0219 # LATIN SMALL LETTER S WITH COMMA BELOW
++ { {0x0326, 0x0074, 0, 0, 0, 0}, 0x021b }, // U021B # LATIN SMALL LETTER T WITH COMMA BELOW
++ { {0x032d, 0x0044, 0, 0, 0, 0}, 0x1e12 }, // U1E12 # LATIN CAPITAL LETTER D WITH CIRCUMFLEX BELOW
++ { {0x032d, 0x0045, 0, 0, 0, 0}, 0x1e18 }, // U1E18 # LATIN CAPITAL LETTER E WITH CIRCUMFLEX BELOW
++ { {0x032d, 0x004c, 0, 0, 0, 0}, 0x1e3c }, // U1E3C # LATIN CAPITAL LETTER L WITH CIRCUMFLEX BELOW
++ { {0x032d, 0x004e, 0, 0, 0, 0}, 0x1e4a }, // U1E4A # LATIN CAPITAL LETTER N WITH CIRCUMFLEX BELOW
++ { {0x032d, 0x0054, 0, 0, 0, 0}, 0x1e70 }, // U1E70 # LATIN CAPITAL LETTER T WITH CIRCUMFLEX BELOW
++ { {0x032d, 0x0055, 0, 0, 0, 0}, 0x1e76 }, // U1E76 # LATIN CAPITAL LETTER U WITH CIRCUMFLEX BELOW
++ { {0x032d, 0x0064, 0, 0, 0, 0}, 0x1e13 }, // U1E13 # LATIN SMALL LETTER D WITH CIRCUMFLEX BELOW
++ { {0x032d, 0x0065, 0, 0, 0, 0}, 0x1e19 }, // U1E19 # LATIN SMALL LETTER E WITH CIRCUMFLEX BELOW
++ { {0x032d, 0x006c, 0, 0, 0, 0}, 0x1e3d }, // U1E3D # LATIN SMALL LETTER L WITH CIRCUMFLEX BELOW
++ { {0x032d, 0x006e, 0, 0, 0, 0}, 0x1e4b }, // U1E4B # LATIN SMALL LETTER N WITH CIRCUMFLEX BELOW
++ { {0x032d, 0x0074, 0, 0, 0, 0}, 0x1e71 }, // U1E71 # LATIN SMALL LETTER T WITH CIRCUMFLEX BELOW
++ { {0x032d, 0x0075, 0, 0, 0, 0}, 0x1e77 }, // U1E77 # LATIN SMALL LETTER U WITH CIRCUMFLEX BELOW
++ { {0x032e, 0x0048, 0, 0, 0, 0}, 0x1e2a }, // U1E2A # LATIN CAPITAL LETTER H WITH BREVE BELOW
++ { {0x032e, 0x0068, 0, 0, 0, 0}, 0x1e2b }, // U1E2B # LATIN SMALL LETTER H WITH BREVE BELOW
++ { {0x0330, 0x0045, 0, 0, 0, 0}, 0x1e1a }, // U1E1A # LATIN CAPITAL LETTER E WITH TILDE BELOW
++ { {0x0330, 0x0049, 0, 0, 0, 0}, 0x1e2c }, // U1E2C # LATIN CAPITAL LETTER I WITH TILDE BELOW
++ { {0x0330, 0x0055, 0, 0, 0, 0}, 0x1e74 }, // U1E74 # LATIN CAPITAL LETTER U WITH TILDE BELOW
++ { {0x0330, 0x0065, 0, 0, 0, 0}, 0x1e1b }, // U1E1B # LATIN SMALL LETTER E WITH TILDE BELOW
++ { {0x0330, 0x0069, 0, 0, 0, 0}, 0x1e2d }, // U1E2D # LATIN SMALL LETTER I WITH TILDE BELOW
++ { {0x0330, 0x0075, 0, 0, 0, 0}, 0x1e75 }, // U1E75 # LATIN SMALL LETTER U WITH TILDE BELOW
++ { {0x0331, 0x0042, 0, 0, 0, 0}, 0x1e06 }, // U1E06 # LATIN CAPITAL LETTER B WITH LINE BELOW
++ { {0x0331, 0x0044, 0, 0, 0, 0}, 0x1e0e }, // U1E0E # LATIN CAPITAL LETTER D WITH LINE BELOW
++ { {0x0331, 0x004b, 0, 0, 0, 0}, 0x1e34 }, // U1E34 # LATIN CAPITAL LETTER K WITH LINE BELOW
++ { {0x0331, 0x004c, 0, 0, 0, 0}, 0x1e3a }, // U1E3A # LATIN CAPITAL LETTER L WITH LINE BELOW
++ { {0x0331, 0x004e, 0, 0, 0, 0}, 0x1e48 }, // U1E48 # LATIN CAPITAL LETTER N WITH LINE BELOW
++ { {0x0331, 0x0052, 0, 0, 0, 0}, 0x1e5e }, // U1E5E # LATIN CAPITAL LETTER R WITH LINE BELOW
++ { {0x0331, 0x0054, 0, 0, 0, 0}, 0x1e6e }, // U1E6E # LATIN CAPITAL LETTER T WITH LINE BELOW
++ { {0x0331, 0x005a, 0, 0, 0, 0}, 0x1e94 }, // U1E94 # LATIN CAPITAL LETTER Z WITH LINE BELOW
++ { {0x0331, 0x0062, 0, 0, 0, 0}, 0x1e07 }, // U1E07 # LATIN SMALL LETTER B WITH LINE BELOW
++ { {0x0331, 0x0064, 0, 0, 0, 0}, 0x1e0f }, // U1E0F # LATIN SMALL LETTER D WITH LINE BELOW
++ { {0x0331, 0x0068, 0, 0, 0, 0}, 0x1e96 }, // U1E96 # LATIN SMALL LETTER H WITH LINE BELOW
++ { {0x0331, 0x006b, 0, 0, 0, 0}, 0x1e35 }, // U1E35 # LATIN SMALL LETTER K WITH LINE BELOW
++ { {0x0331, 0x006c, 0, 0, 0, 0}, 0x1e3b }, // U1E3B # LATIN SMALL LETTER L WITH LINE BELOW
++ { {0x0331, 0x006e, 0, 0, 0, 0}, 0x1e49 }, // U1E49 # LATIN SMALL LETTER N WITH LINE BELOW
++ { {0x0331, 0x0072, 0, 0, 0, 0}, 0x1e5f }, // U1E5F # LATIN SMALL LETTER R WITH LINE BELOW
++ { {0x0331, 0x0074, 0, 0, 0, 0}, 0x1e6f }, // U1E6F # LATIN SMALL LETTER T WITH LINE BELOW
++ { {0x0331, 0x007a, 0, 0, 0, 0}, 0x1e95 }, // U1E95 # LATIN SMALL LETTER Z WITH LINE BELOW
++ { {0x0342, 0x0313, 0x0391, 0, 0, 0}, 0x1f0e }, // U1F0E # GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI
++ { {0x0342, 0x0313, 0x0397, 0, 0, 0}, 0x1f2e }, // U1F2E # GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI
++ { {0x0342, 0x0313, 0x0399, 0, 0, 0}, 0x1f3e }, // U1F3E # GREEK CAPITAL LETTER IOTA WITH PSILI AND PERISPOMENI
++ { {0x0342, 0x0313, 0x03a9, 0, 0, 0}, 0x1f6e }, // U1F6E # GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI
++ { {0x0342, 0x0313, 0x03b1, 0, 0, 0}, 0x1f06 }, // U1F06 # GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI
++ { {0x0342, 0x0313, 0x03b7, 0, 0, 0}, 0x1f26 }, // U1F26 # GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI
++ { {0x0342, 0x0313, 0x03b9, 0, 0, 0}, 0x1f36 }, // U1F36 # GREEK SMALL LETTER IOTA WITH PSILI AND PERISPOMENI
++ { {0x0342, 0x0313, 0x03c5, 0, 0, 0}, 0x1f56 }, // U1F56 # GREEK SMALL LETTER UPSILON WITH PSILI AND PERISPOMENI
++ { {0x0342, 0x0313, 0x03c9, 0, 0, 0}, 0x1f66 }, // U1F66 # GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI
++ { {0x0342, 0x0314, 0x0391, 0, 0, 0}, 0x1f0f }, // U1F0F # GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI
++ { {0x0342, 0x0314, 0x0397, 0, 0, 0}, 0x1f2f }, // U1F2F # GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI
++ { {0x0342, 0x0314, 0x0399, 0, 0, 0}, 0x1f3f }, // U1F3F # GREEK CAPITAL LETTER IOTA WITH DASIA AND PERISPOMENI
++ { {0x0342, 0x0314, 0x03a5, 0, 0, 0}, 0x1f5f }, // U1F5F # GREEK CAPITAL LETTER UPSILON WITH DASIA AND PERISPOMENI
++ { {0x0342, 0x0314, 0x03a9, 0, 0, 0}, 0x1f6f }, // U1F6F # GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI
++ { {0x0342, 0x0314, 0x03b1, 0, 0, 0}, 0x1f07 }, // U1F07 # GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI
++ { {0x0342, 0x0314, 0x03b7, 0, 0, 0}, 0x1f27 }, // U1F27 # GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI
++ { {0x0342, 0x0314, 0x03b9, 0, 0, 0}, 0x1f37 }, // U1F37 # GREEK SMALL LETTER IOTA WITH DASIA AND PERISPOMENI
++ { {0x0342, 0x0314, 0x03c5, 0, 0, 0}, 0x1f57 }, // U1F57 # GREEK SMALL LETTER UPSILON WITH DASIA AND PERISPOMENI
++ { {0x0342, 0x0314, 0x03c9, 0, 0, 0}, 0x1f67 }, // U1F67 # GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI
++ { {0x0342, 0x03b1, 0, 0, 0, 0}, 0x1fb6 }, // U1FB6 # GREEK SMALL LETTER ALPHA WITH PERISPOMENI
++ { {0x0342, 0x03b7, 0, 0, 0, 0}, 0x1fc6 }, // U1FC6 # GREEK SMALL LETTER ETA WITH PERISPOMENI
++ { {0x0342, 0x03b9, 0, 0, 0, 0}, 0x1fd6 }, // U1FD6 # GREEK SMALL LETTER IOTA WITH PERISPOMENI
++ { {0x0342, 0x03c5, 0, 0, 0, 0}, 0x1fe6 }, // U1FE6 # GREEK SMALL LETTER UPSILON WITH PERISPOMENI
++ { {0x0342, 0x03c9, 0, 0, 0, 0}, 0x1ff6 }, // U1FF6 # GREEK SMALL LETTER OMEGA WITH PERISPOMENI
++ { {0x0342, 0x03ca, 0, 0, 0, 0}, 0x1fd7 }, // U1FD7 # GREEK SMALL LETTER IOTA WITH DIALYTIKA AND PERISPOMENI
++ { {0x0342, 0x03cb, 0, 0, 0, 0}, 0x1fe7 }, // U1FE7 # GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND PERISPOMENI
++ { {0x0342, 0x1f00, 0, 0, 0, 0}, 0x1f06 }, // U1F06 # GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI
++ { {0x0342, 0x1f01, 0, 0, 0, 0}, 0x1f07 }, // U1F07 # GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI
++ { {0x0342, 0x1f08, 0, 0, 0, 0}, 0x1f0e }, // U1F0E # GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI
++ { {0x0342, 0x1f09, 0, 0, 0, 0}, 0x1f0f }, // U1F0F # GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI
++ { {0x0342, 0x1f20, 0, 0, 0, 0}, 0x1f26 }, // U1F26 # GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI
++ { {0x0342, 0x1f21, 0, 0, 0, 0}, 0x1f27 }, // U1F27 # GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI
++ { {0x0342, 0x1f28, 0, 0, 0, 0}, 0x1f2e }, // U1F2E # GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI
++ { {0x0342, 0x1f29, 0, 0, 0, 0}, 0x1f2f }, // U1F2F # GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI
++ { {0x0342, 0x1f30, 0, 0, 0, 0}, 0x1f36 }, // U1F36 # GREEK SMALL LETTER IOTA WITH PSILI AND PERISPOMENI
++ { {0x0342, 0x1f31, 0, 0, 0, 0}, 0x1f37 }, // U1F37 # GREEK SMALL LETTER IOTA WITH DASIA AND PERISPOMENI
++ { {0x0342, 0x1f38, 0, 0, 0, 0}, 0x1f3e }, // U1F3E # GREEK CAPITAL LETTER IOTA WITH PSILI AND PERISPOMENI
++ { {0x0342, 0x1f39, 0, 0, 0, 0}, 0x1f3f }, // U1F3F # GREEK CAPITAL LETTER IOTA WITH DASIA AND PERISPOMENI
++ { {0x0342, 0x1f50, 0, 0, 0, 0}, 0x1f56 }, // U1F56 # GREEK SMALL LETTER UPSILON WITH PSILI AND PERISPOMENI
++ { {0x0342, 0x1f51, 0, 0, 0, 0}, 0x1f57 }, // U1F57 # GREEK SMALL LETTER UPSILON WITH DASIA AND PERISPOMENI
++ { {0x0342, 0x1f59, 0, 0, 0, 0}, 0x1f5f }, // U1F5F # GREEK CAPITAL LETTER UPSILON WITH DASIA AND PERISPOMENI
++ { {0x0342, 0x1f60, 0, 0, 0, 0}, 0x1f66 }, // U1F66 # GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI
++ { {0x0342, 0x1f61, 0, 0, 0, 0}, 0x1f67 }, // U1F67 # GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI
++ { {0x0342, 0x1f68, 0, 0, 0, 0}, 0x1f6e }, // U1F6E # GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI
++ { {0x0342, 0x1f69, 0, 0, 0, 0}, 0x1f6f }, // U1F6F # GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI
++ { {0x0342, UNITIZE(Qt::Key_Multi_key), 0x0022, 0x03b9, 0, 0}, 0x1fd7 }, // U1FD7 # GREEK SMALL LETTER IOTA WITH DIALYTIKA AND PERISPOMENI
++ { {0x0342, UNITIZE(Qt::Key_Multi_key), 0x0022, 0x03c5, 0, 0}, 0x1fe7 }, // U1FE7 # GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND PERISPOMENI
++ { {0x0342, UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0391, 0, 0}, 0x1f0f }, // U1F0F # GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI
++ { {0x0342, UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0397, 0, 0}, 0x1f2f }, // U1F2F # GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI
++ { {0x0342, UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0399, 0, 0}, 0x1f3f }, // U1F3F # GREEK CAPITAL LETTER IOTA WITH DASIA AND PERISPOMENI
++ { {0x0342, UNITIZE(Qt::Key_Multi_key), 0x0028, 0x03a5, 0, 0}, 0x1f5f }, // U1F5F # GREEK CAPITAL LETTER UPSILON WITH DASIA AND PERISPOMENI
++ { {0x0342, UNITIZE(Qt::Key_Multi_key), 0x0028, 0x03a9, 0, 0}, 0x1f6f }, // U1F6F # GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI
++ { {0x0342, UNITIZE(Qt::Key_Multi_key), 0x0028, 0x03b1, 0, 0}, 0x1f07 }, // U1F07 # GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI
++ { {0x0342, UNITIZE(Qt::Key_Multi_key), 0x0028, 0x03b7, 0, 0}, 0x1f27 }, // U1F27 # GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI
++ { {0x0342, UNITIZE(Qt::Key_Multi_key), 0x0028, 0x03b9, 0, 0}, 0x1f37 }, // U1F37 # GREEK SMALL LETTER IOTA WITH DASIA AND PERISPOMENI
++ { {0x0342, UNITIZE(Qt::Key_Multi_key), 0x0028, 0x03c5, 0, 0}, 0x1f57 }, // U1F57 # GREEK SMALL LETTER UPSILON WITH DASIA AND PERISPOMENI
++ { {0x0342, UNITIZE(Qt::Key_Multi_key), 0x0028, 0x03c9, 0, 0}, 0x1f67 }, // U1F67 # GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI
++ { {0x0342, UNITIZE(Qt::Key_Multi_key), 0x0029, 0x0391, 0, 0}, 0x1f0e }, // U1F0E # GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI
++ { {0x0342, UNITIZE(Qt::Key_Multi_key), 0x0029, 0x0397, 0, 0}, 0x1f2e }, // U1F2E # GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI
++ { {0x0342, UNITIZE(Qt::Key_Multi_key), 0x0029, 0x0399, 0, 0}, 0x1f3e }, // U1F3E # GREEK CAPITAL LETTER IOTA WITH PSILI AND PERISPOMENI
++ { {0x0342, UNITIZE(Qt::Key_Multi_key), 0x0029, 0x03a9, 0, 0}, 0x1f6e }, // U1F6E # GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI
++ { {0x0342, UNITIZE(Qt::Key_Multi_key), 0x0029, 0x03b1, 0, 0}, 0x1f06 }, // U1F06 # GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI
++ { {0x0342, UNITIZE(Qt::Key_Multi_key), 0x0029, 0x03b7, 0, 0}, 0x1f26 }, // U1F26 # GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI
++ { {0x0342, UNITIZE(Qt::Key_Multi_key), 0x0029, 0x03b9, 0, 0}, 0x1f36 }, // U1F36 # GREEK SMALL LETTER IOTA WITH PSILI AND PERISPOMENI
++ { {0x0342, UNITIZE(Qt::Key_Multi_key), 0x0029, 0x03c5, 0, 0}, 0x1f56 }, // U1F56 # GREEK SMALL LETTER UPSILON WITH PSILI AND PERISPOMENI
++ { {0x0342, UNITIZE(Qt::Key_Multi_key), 0x0029, 0x03c9, 0, 0}, 0x1f66 }, // U1F66 # GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI
++ { {0x0342, UNITIZE(Qt::Key_Dead_Diaeresis), 0x03b9, 0, 0, 0}, 0x1fd7 }, // U1FD7 # GREEK SMALL LETTER IOTA WITH DIALYTIKA AND PERISPOMENI
++ { {0x0342, UNITIZE(Qt::Key_Dead_Diaeresis), 0x03c5, 0, 0, 0}, 0x1fe7 }, // U1FE7 # GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND PERISPOMENI
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0000, 0x0044, 0, 0, 0}, 0x0110 }, // U0110 # LATIN CAPITAL LETTER D WITH STROKE
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0000, 0x0047, 0, 0, 0}, 0x01e4 }, // U01E4 # LATIN CAPITAL LETTER G WITH STROKE
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0000, 0x0048, 0, 0, 0}, 0x0126 }, // U0126 # LATIN CAPITAL LETTER H WITH STROKE
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0000, 0x0049, 0, 0, 0}, 0x0197 }, // U0197 # LATIN CAPITAL LETTER I WITH STROKE
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0000, 0x004c, 0, 0, 0}, 0x0141 }, // U0141 # LATIN CAPITAL LETTER L WITH STROKE
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0000, 0x004f, 0, 0, 0}, 0x00d8 }, // U00D8 # LATIN CAPITAL LETTER O WITH STROKE
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0000, 0x0054, 0, 0, 0}, 0x0166 }, // U0166 # LATIN CAPITAL LETTER T WITH STROKE
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0000, 0x005a, 0, 0, 0}, 0x01b5 }, // U01B5 # LATIN CAPITAL LETTER Z WITH STROKE
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0000, 0x0062, 0, 0, 0}, 0x0180 }, // U0180 # LATIN SMALL LETTER B WITH STROKE
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0000, 0x0064, 0, 0, 0}, 0x0111 }, // U0111 # LATIN SMALL LETTER D WITH STROKE
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0000, 0x0067, 0, 0, 0}, 0x01e5 }, // U01E5 # LATIN SMALL LETTER G WITH STROKE
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0000, 0x0068, 0, 0, 0}, 0x0127 }, // U0127 # LATIN SMALL LETTER H WITH STROKE
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0000, 0x0069, 0, 0, 0}, 0x0268 }, // U0268 # LATIN SMALL LETTER I WITH STROKE
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0000, 0x006c, 0, 0, 0}, 0x0142 }, // U0142 # LATIN SMALL LETTER L WITH STROKE
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0000, 0x006f, 0, 0, 0}, 0x00f8 }, // U00F8 # LATIN SMALL LETTER O WITH STROKE
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0000, 0x0074, 0, 0, 0}, 0x0167 }, // U0167 # LATIN SMALL LETTER T WITH STROKE
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0000, 0x007a, 0, 0, 0}, 0x01b6 }, // U01B6 # LATIN SMALL LETTER Z WITH STROKE
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0000, 0x0294, 0, 0, 0}, 0x02a1 }, // U02A1 # LATIN LETTER GLOTTAL STOP WITH STROKE
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0000, 0x0338, 0, 0, 0}, 0x2260 }, // U2260 # NOT EQUAL TO
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0000, 0x0413, 0, 0, 0}, 0x0492 }, // U0492 # CYRILLIC CAPITAL LETTER GHE WITH STROKE
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0000, 0x041a, 0, 0, 0}, 0x049e }, // U049E # CYRILLIC CAPITAL LETTER KA WITH STROKE
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0000, 0x0433, 0, 0, 0}, 0x0493 }, // U0493 # CYRILLIC SMALL LETTER GHE WITH STROKE
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0000, 0x043a, 0, 0, 0}, 0x049f }, // U049F # CYRILLIC SMALL LETTER KA WITH STROKE
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0000, 0x04ae, 0, 0, 0}, 0x04b0 }, // U04B0 # CYRILLIC CAPITAL LETTER STRAIGHT U WITH STROKE
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0000, 0x04af, 0, 0, 0}, 0x04b1 }, // U04B1 # CYRILLIC SMALL LETTER STRAIGHT U WITH STROKE
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0000, 0x2190, 0, 0, 0}, 0x219a }, // U219A # LEFTWARDS ARROW WITH STROKE
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0000, 0x2192, 0, 0, 0}, 0x219b }, // U219B # RIGHTWARDS ARROW WITH STROKE
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0000, 0x2194, 0, 0, 0}, 0x21ae }, // U21AE # LEFT RIGHT ARROW WITH STROKE
++ { {UNITIZE(Qt::Key_Multi_key), 0x0020, 0x0020, 0, 0, 0}, 0x00a0 }, // nobreakspace # NO-BREAK SPACE
++ { {UNITIZE(Qt::Key_Multi_key), 0x0020, 0x0027, 0, 0, 0}, 0x0027 }, // apostrophe
++ { {UNITIZE(Qt::Key_Multi_key), 0x0020, 0x002c, 0, 0, 0}, 0x00b8 }, // cedilla
++ { {UNITIZE(Qt::Key_Multi_key), 0x0020, 0x002d, 0, 0, 0}, 0x007e }, // asciitilde
++ { {UNITIZE(Qt::Key_Multi_key), 0x0020, 0x002e, 0, 0, 0}, 0x2008 }, // U2008 # PUNCTUATION SPACE
++ { {UNITIZE(Qt::Key_Multi_key), 0x0020, 0x003e, 0, 0, 0}, 0x005e }, // asciicircum
++ { {UNITIZE(Qt::Key_Multi_key), 0x0020, 0x005e, 0, 0, 0}, 0x005e }, // asciicircum
++ { {UNITIZE(Qt::Key_Multi_key), 0x0020, 0x0060, 0, 0, 0}, 0x0060 }, // grave
++ { {UNITIZE(Qt::Key_Multi_key), 0x0020, 0x007e, 0, 0, 0}, 0x007e }, // asciitilde
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0021, 0x0000, 0, 0, 0}, 0x1ef0 }, // U1EF0 # LATIN CAPITAL LETTER U WITH HORN AND DOT BELOW
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0021, 0x0000, 0, 0, 0}, 0x1ee3 }, // U1EE3 # LATIN SMALL LETTER O WITH HORN AND DOT BELOW
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0021, 0x0000, 0, 0, 0}, 0x1ee2 }, // U1EE2 # LATIN CAPITAL LETTER O WITH HORN AND DOT BELOW
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0021, 0x0000, 0, 0, 0}, 0x1ef1 }, // U1EF1 # LATIN SMALL LETTER U WITH HORN AND DOT BELOW
++ { {UNITIZE(Qt::Key_Multi_key), 0x0021, 0x0021, 0, 0, 0}, 0x00a1 }, // exclamdown
++ { {UNITIZE(Qt::Key_Multi_key), 0x0021, 0x002b, 0x004f, 0, 0}, 0x1ee2 }, // U1EE2 # LATIN CAPITAL LETTER O WITH HORN AND DOT BELOW
++ { {UNITIZE(Qt::Key_Multi_key), 0x0021, 0x002b, 0x0055, 0, 0}, 0x1ef0 }, // U1EF0 # LATIN CAPITAL LETTER U WITH HORN AND DOT BELOW
++ { {UNITIZE(Qt::Key_Multi_key), 0x0021, 0x002b, 0x006f, 0, 0}, 0x1ee3 }, // U1EE3 # LATIN SMALL LETTER O WITH HORN AND DOT BELOW
++ { {UNITIZE(Qt::Key_Multi_key), 0x0021, 0x002b, 0x0075, 0, 0}, 0x1ef1 }, // U1EF1 # LATIN SMALL LETTER U WITH HORN AND DOT BELOW
++ { {UNITIZE(Qt::Key_Multi_key), 0x0021, 0x0041, 0, 0, 0}, 0x1ea0 }, // U1EA0 # LATIN CAPITAL LETTER A WITH DOT BELOW
++ { {UNITIZE(Qt::Key_Multi_key), 0x0021, 0x0042, 0, 0, 0}, 0x1e04 }, // U1E04 # LATIN CAPITAL LETTER B WITH DOT BELOW
++ { {UNITIZE(Qt::Key_Multi_key), 0x0021, 0x0044, 0, 0, 0}, 0x1e0c }, // U1E0C # LATIN CAPITAL LETTER D WITH DOT BELOW
++ { {UNITIZE(Qt::Key_Multi_key), 0x0021, 0x0045, 0, 0, 0}, 0x1eb8 }, // U1EB8 # LATIN CAPITAL LETTER E WITH DOT BELOW
++ { {UNITIZE(Qt::Key_Multi_key), 0x0021, 0x0048, 0, 0, 0}, 0x1e24 }, // U1E24 # LATIN CAPITAL LETTER H WITH DOT BELOW
++ { {UNITIZE(Qt::Key_Multi_key), 0x0021, 0x0049, 0, 0, 0}, 0x1eca }, // U1ECA # LATIN CAPITAL LETTER I WITH DOT BELOW
++ { {UNITIZE(Qt::Key_Multi_key), 0x0021, 0x004b, 0, 0, 0}, 0x1e32 }, // U1E32 # LATIN CAPITAL LETTER K WITH DOT BELOW
++ { {UNITIZE(Qt::Key_Multi_key), 0x0021, 0x004c, 0, 0, 0}, 0x1e36 }, // U1E36 # LATIN CAPITAL LETTER L WITH DOT BELOW
++ { {UNITIZE(Qt::Key_Multi_key), 0x0021, 0x004d, 0, 0, 0}, 0x1e42 }, // U1E42 # LATIN CAPITAL LETTER M WITH DOT BELOW
++ { {UNITIZE(Qt::Key_Multi_key), 0x0021, 0x004e, 0, 0, 0}, 0x1e46 }, // U1E46 # LATIN CAPITAL LETTER N WITH DOT BELOW
++ { {UNITIZE(Qt::Key_Multi_key), 0x0021, 0x004f, 0, 0, 0}, 0x1ecc }, // U1ECC # LATIN CAPITAL LETTER O WITH DOT BELOW
++ { {UNITIZE(Qt::Key_Multi_key), 0x0021, 0x0052, 0, 0, 0}, 0x1e5a }, // U1E5A # LATIN CAPITAL LETTER R WITH DOT BELOW
++ { {UNITIZE(Qt::Key_Multi_key), 0x0021, 0x0053, 0, 0, 0}, 0x1e62 }, // U1E62 # LATIN CAPITAL LETTER S WITH DOT BELOW
++ { {UNITIZE(Qt::Key_Multi_key), 0x0021, 0x0054, 0, 0, 0}, 0x1e6c }, // U1E6C # LATIN CAPITAL LETTER T WITH DOT BELOW
++ { {UNITIZE(Qt::Key_Multi_key), 0x0021, 0x0055, 0, 0, 0}, 0x1ee4 }, // U1EE4 # LATIN CAPITAL LETTER U WITH DOT BELOW
++ { {UNITIZE(Qt::Key_Multi_key), 0x0021, 0x0056, 0, 0, 0}, 0x1e7e }, // U1E7E # LATIN CAPITAL LETTER V WITH DOT BELOW
++ { {UNITIZE(Qt::Key_Multi_key), 0x0021, 0x0057, 0, 0, 0}, 0x1e88 }, // U1E88 # LATIN CAPITAL LETTER W WITH DOT BELOW
++ { {UNITIZE(Qt::Key_Multi_key), 0x0021, 0x0059, 0, 0, 0}, 0x1ef4 }, // U1EF4 # LATIN CAPITAL LETTER Y WITH DOT BELOW
++ { {UNITIZE(Qt::Key_Multi_key), 0x0021, 0x005a, 0, 0, 0}, 0x1e92 }, // U1E92 # LATIN CAPITAL LETTER Z WITH DOT BELOW
++ { {UNITIZE(Qt::Key_Multi_key), 0x0021, 0x005e, 0, 0, 0}, 0x00a6 }, // brokenbar
++ { {UNITIZE(Qt::Key_Multi_key), 0x0021, 0x0061, 0, 0, 0}, 0x1ea1 }, // U1EA1 # LATIN SMALL LETTER A WITH DOT BELOW
++ { {UNITIZE(Qt::Key_Multi_key), 0x0021, 0x0062, 0, 0, 0}, 0x1e05 }, // U1E05 # LATIN SMALL LETTER B WITH DOT BELOW
++ { {UNITIZE(Qt::Key_Multi_key), 0x0021, 0x0064, 0, 0, 0}, 0x1e0d }, // U1E0D # LATIN SMALL LETTER D WITH DOT BELOW
++ { {UNITIZE(Qt::Key_Multi_key), 0x0021, 0x0065, 0, 0, 0}, 0x1eb9 }, // U1EB9 # LATIN SMALL LETTER E WITH DOT BELOW
++ { {UNITIZE(Qt::Key_Multi_key), 0x0021, 0x0068, 0, 0, 0}, 0x1e25 }, // U1E25 # LATIN SMALL LETTER H WITH DOT BELOW
++ { {UNITIZE(Qt::Key_Multi_key), 0x0021, 0x0069, 0, 0, 0}, 0x1ecb }, // U1ECB # LATIN SMALL LETTER I WITH DOT BELOW
++ { {UNITIZE(Qt::Key_Multi_key), 0x0021, 0x006b, 0, 0, 0}, 0x1e33 }, // U1E33 # LATIN SMALL LETTER K WITH DOT BELOW
++ { {UNITIZE(Qt::Key_Multi_key), 0x0021, 0x006c, 0, 0, 0}, 0x1e37 }, // U1E37 # LATIN SMALL LETTER L WITH DOT BELOW
++ { {UNITIZE(Qt::Key_Multi_key), 0x0021, 0x006d, 0, 0, 0}, 0x1e43 }, // U1E43 # LATIN SMALL LETTER M WITH DOT BELOW
++ { {UNITIZE(Qt::Key_Multi_key), 0x0021, 0x006e, 0, 0, 0}, 0x1e47 }, // U1E47 # LATIN SMALL LETTER N WITH DOT BELOW
++ { {UNITIZE(Qt::Key_Multi_key), 0x0021, 0x006f, 0, 0, 0}, 0x1ecd }, // U1ECD # LATIN SMALL LETTER O WITH DOT BELOW
++ { {UNITIZE(Qt::Key_Multi_key), 0x0021, 0x0072, 0, 0, 0}, 0x1e5b }, // U1E5B # LATIN SMALL LETTER R WITH DOT BELOW
++ { {UNITIZE(Qt::Key_Multi_key), 0x0021, 0x0073, 0, 0, 0}, 0x1e63 }, // U1E63 # LATIN SMALL LETTER S WITH DOT BELOW
++ { {UNITIZE(Qt::Key_Multi_key), 0x0021, 0x0074, 0, 0, 0}, 0x1e6d }, // U1E6D # LATIN SMALL LETTER T WITH DOT BELOW
++ { {UNITIZE(Qt::Key_Multi_key), 0x0021, 0x0075, 0, 0, 0}, 0x1ee5 }, // U1EE5 # LATIN SMALL LETTER U WITH DOT BELOW
++ { {UNITIZE(Qt::Key_Multi_key), 0x0021, 0x0076, 0, 0, 0}, 0x1e7f }, // U1E7F # LATIN SMALL LETTER V WITH DOT BELOW
++ { {UNITIZE(Qt::Key_Multi_key), 0x0021, 0x0077, 0, 0, 0}, 0x1e89 }, // U1E89 # LATIN SMALL LETTER W WITH DOT BELOW
++ { {UNITIZE(Qt::Key_Multi_key), 0x0021, 0x0079, 0, 0, 0}, 0x1ef5 }, // U1EF5 # LATIN SMALL LETTER Y WITH DOT BELOW
++ { {UNITIZE(Qt::Key_Multi_key), 0x0021, 0x007a, 0, 0, 0}, 0x1e93 }, // U1E93 # LATIN SMALL LETTER Z WITH DOT BELOW
++ { {UNITIZE(Qt::Key_Multi_key), 0x0021, UNITIZE(Qt::Key_Dead_Horn), 0x004f, 0, 0}, 0x1ee2 }, // U1EE2 # LATIN CAPITAL LETTER O WITH HORN AND DOT BELOW
++ { {UNITIZE(Qt::Key_Multi_key), 0x0021, UNITIZE(Qt::Key_Dead_Horn), 0x0055, 0, 0}, 0x1ef0 }, // U1EF0 # LATIN CAPITAL LETTER U WITH HORN AND DOT BELOW
++ { {UNITIZE(Qt::Key_Multi_key), 0x0021, UNITIZE(Qt::Key_Dead_Horn), 0x006f, 0, 0}, 0x1ee3 }, // U1EE3 # LATIN SMALL LETTER O WITH HORN AND DOT BELOW
++ { {UNITIZE(Qt::Key_Multi_key), 0x0021, UNITIZE(Qt::Key_Dead_Horn), 0x0075, 0, 0}, 0x1ef1 }, // U1EF1 # LATIN SMALL LETTER U WITH HORN AND DOT BELOW
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0022, 0x0000, 0, 0, 0}, 0x0344 }, // U0344 # COMBINING GREEK DIALYTIKA TONOS
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0022, 0x0000, 0x004f, 0, 0}, 0x1e4e }, // U1E4E # LATIN CAPITAL LETTER O WITH TILDE AND DIAERESIS
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0022, 0x0000, 0x006f, 0, 0}, 0x1e4f }, // U1E4F # LATIN SMALL LETTER O WITH TILDE AND DIAERESIS
++ { {UNITIZE(Qt::Key_Multi_key), 0x0022, 0x0027, 0, 0, 0}, 0x0344 }, // U0344 # COMBINING GREEK DIALYTIKA TONOS
++ { {UNITIZE(Qt::Key_Multi_key), 0x0022, 0x002c, 0, 0, 0}, 0x201e }, // U201e # DOUBLE LOW-9 QUOTATION MARK
++ { {UNITIZE(Qt::Key_Multi_key), 0x0022, 0x002f, 0, 0, 0}, 0x301e }, // U301e # DOUBLE PRIME QUOTATION MARK
++ { {UNITIZE(Qt::Key_Multi_key), 0x0022, 0x003c, 0, 0, 0}, 0x201c }, // U201c # LEFT DOUBLE QUOTATION MARK
++ { {UNITIZE(Qt::Key_Multi_key), 0x0022, 0x003e, 0, 0, 0}, 0x201d }, // U201d # RIGHT DOUBLE QUOTATION MARK
++ { {UNITIZE(Qt::Key_Multi_key), 0x0022, 0x0041, 0, 0, 0}, 0x00c4 }, // U00C4 # LATIN CAPITAL LETTER A WITH DIAERESIS
++ { {UNITIZE(Qt::Key_Multi_key), 0x0022, 0x0045, 0, 0, 0}, 0x00cb }, // U00CB # LATIN CAPITAL LETTER E WITH DIAERESIS
++ { {UNITIZE(Qt::Key_Multi_key), 0x0022, 0x0048, 0, 0, 0}, 0x1e26 }, // U1E26 # LATIN CAPITAL LETTER H WITH DIAERESIS
++ { {UNITIZE(Qt::Key_Multi_key), 0x0022, 0x0049, 0, 0, 0}, 0x00cf }, // U00CF # LATIN CAPITAL LETTER I WITH DIAERESIS
++ { {UNITIZE(Qt::Key_Multi_key), 0x0022, 0x004f, 0, 0, 0}, 0x00d6 }, // U00D6 # LATIN CAPITAL LETTER O WITH DIAERESIS
++ { {UNITIZE(Qt::Key_Multi_key), 0x0022, 0x0055, 0, 0, 0}, 0x00dc }, // U00DC # LATIN CAPITAL LETTER U WITH DIAERESIS
++ { {UNITIZE(Qt::Key_Multi_key), 0x0022, 0x0057, 0, 0, 0}, 0x1e84 }, // U1E84 # LATIN CAPITAL LETTER W WITH DIAERESIS
++ { {UNITIZE(Qt::Key_Multi_key), 0x0022, 0x0058, 0, 0, 0}, 0x1e8c }, // U1E8C # LATIN CAPITAL LETTER X WITH DIAERESIS
++ { {UNITIZE(Qt::Key_Multi_key), 0x0022, 0x0059, 0, 0, 0}, 0x0178 }, // U0178 # LATIN CAPITAL LETTER Y WITH DIAERESIS
++ { {UNITIZE(Qt::Key_Multi_key), 0x0022, 0x005c, 0, 0, 0}, 0x301d }, // U301d # REVERSED DOUBLE PRIME QUOTATION MARK
++ { {UNITIZE(Qt::Key_Multi_key), 0x0022, 0x005f, 0x0055, 0, 0}, 0x1e7a }, // U1E7A # LATIN CAPITAL LETTER U WITH MACRON AND DIAERESIS
++ { {UNITIZE(Qt::Key_Multi_key), 0x0022, 0x005f, 0x0075, 0, 0}, 0x1e7b }, // U1E7B # LATIN SMALL LETTER U WITH MACRON AND DIAERESIS
++ { {UNITIZE(Qt::Key_Multi_key), 0x0022, 0x0061, 0, 0, 0}, 0x00e4 }, // U00E4 # LATIN SMALL LETTER A WITH DIAERESIS
++ { {UNITIZE(Qt::Key_Multi_key), 0x0022, 0x0065, 0, 0, 0}, 0x00eb }, // U00EB # LATIN SMALL LETTER E WITH DIAERESIS
++ { {UNITIZE(Qt::Key_Multi_key), 0x0022, 0x0068, 0, 0, 0}, 0x1e27 }, // U1E27 # LATIN SMALL LETTER H WITH DIAERESIS
++ { {UNITIZE(Qt::Key_Multi_key), 0x0022, 0x0069, 0, 0, 0}, 0x00ef }, // U00EF # LATIN SMALL LETTER I WITH DIAERESIS
++ { {UNITIZE(Qt::Key_Multi_key), 0x0022, 0x006f, 0, 0, 0}, 0x00f6 }, // U00F6 # LATIN SMALL LETTER O WITH DIAERESIS
++ { {UNITIZE(Qt::Key_Multi_key), 0x0022, 0x0074, 0, 0, 0}, 0x1e97 }, // U1E97 # LATIN SMALL LETTER T WITH DIAERESIS
++ { {UNITIZE(Qt::Key_Multi_key), 0x0022, 0x0075, 0, 0, 0}, 0x00fc }, // U00FC # LATIN SMALL LETTER U WITH DIAERESIS
++ { {UNITIZE(Qt::Key_Multi_key), 0x0022, 0x0077, 0, 0, 0}, 0x1e85 }, // U1E85 # LATIN SMALL LETTER W WITH DIAERESIS
++ { {UNITIZE(Qt::Key_Multi_key), 0x0022, 0x0078, 0, 0, 0}, 0x1e8d }, // U1E8D # LATIN SMALL LETTER X WITH DIAERESIS
++ { {UNITIZE(Qt::Key_Multi_key), 0x0022, 0x0079, 0, 0, 0}, 0x00ff }, // U00FF # LATIN SMALL LETTER Y WITH DIAERESIS
++ { {UNITIZE(Qt::Key_Multi_key), 0x0022, 0x007e, 0x004f, 0, 0}, 0x1e4e }, // U1E4E # LATIN CAPITAL LETTER O WITH TILDE AND DIAERESIS
++ { {UNITIZE(Qt::Key_Multi_key), 0x0022, 0x007e, 0x006f, 0, 0}, 0x1e4f }, // U1E4F # LATIN SMALL LETTER O WITH TILDE AND DIAERESIS
++ { {UNITIZE(Qt::Key_Multi_key), 0x0022, 0x00af, 0x0055, 0, 0}, 0x1e7a }, // U1E7A # LATIN CAPITAL LETTER U WITH MACRON AND DIAERESIS
++ { {UNITIZE(Qt::Key_Multi_key), 0x0022, 0x00af, 0x0075, 0, 0}, 0x1e7b }, // U1E7B # LATIN SMALL LETTER U WITH MACRON AND DIAERESIS
++ { {UNITIZE(Qt::Key_Multi_key), 0x0022, 0x00b4, 0, 0, 0}, 0x0344 }, // U0344 # COMBINING GREEK DIALYTIKA TONOS
++ { {UNITIZE(Qt::Key_Multi_key), 0x0022, 0x00d5, 0, 0, 0}, 0x1e4e }, // U1E4E # LATIN CAPITAL LETTER O WITH TILDE AND DIAERESIS
++ { {UNITIZE(Qt::Key_Multi_key), 0x0022, 0x00f5, 0, 0, 0}, 0x1e4f }, // U1E4F # LATIN SMALL LETTER O WITH TILDE AND DIAERESIS
++ { {UNITIZE(Qt::Key_Multi_key), 0x0022, 0x016a, 0, 0, 0}, 0x1e7a }, // U1E7A # LATIN CAPITAL LETTER U WITH MACRON AND DIAERESIS
++ { {UNITIZE(Qt::Key_Multi_key), 0x0022, 0x016b, 0, 0, 0}, 0x1e7b }, // U1E7B # LATIN SMALL LETTER U WITH MACRON AND DIAERESIS
++ { {UNITIZE(Qt::Key_Multi_key), 0x0022, 0x0399, 0, 0, 0}, 0x03aa }, // U03AA # GREEK CAPITAL LETTER IOTA WITH DIALYTIKA
++ { {UNITIZE(Qt::Key_Multi_key), 0x0022, 0x03a5, 0, 0, 0}, 0x03ab }, // U03AB # GREEK CAPITAL LETTER UPSILON WITH DIALYTIKA
++ { {UNITIZE(Qt::Key_Multi_key), 0x0022, 0x03b9, 0, 0, 0}, 0x03ca }, // U03CA # GREEK SMALL LETTER IOTA WITH DIALYTIKA
++ { {UNITIZE(Qt::Key_Multi_key), 0x0022, 0x03c5, 0, 0, 0}, 0x03cb }, // U03CB # GREEK SMALL LETTER UPSILON WITH DIALYTIKA
++ { {UNITIZE(Qt::Key_Multi_key), 0x0022, 0x03d2, 0, 0, 0}, 0x03d4 }, // U03D4 # GREEK UPSILON WITH DIAERESIS AND HOOK SYMBOL
++ { {UNITIZE(Qt::Key_Multi_key), 0x0022, 0x0406, 0, 0, 0}, 0x0407 }, // U0407 # CYRILLIC CAPITAL LETTER YI
++ { {UNITIZE(Qt::Key_Multi_key), 0x0022, 0x0410, 0, 0, 0}, 0x04d2 }, // U04D2 # CYRILLIC CAPITAL LETTER A WITH DIAERESIS
++ { {UNITIZE(Qt::Key_Multi_key), 0x0022, 0x0415, 0, 0, 0}, 0x0401 }, // U0401 # CYRILLIC CAPITAL LETTER IO
++ { {UNITIZE(Qt::Key_Multi_key), 0x0022, 0x0416, 0, 0, 0}, 0x04dc }, // U04DC # CYRILLIC CAPITAL LETTER ZHE WITH DIAERESIS
++ { {UNITIZE(Qt::Key_Multi_key), 0x0022, 0x0417, 0, 0, 0}, 0x04de }, // U04DE # CYRILLIC CAPITAL LETTER ZE WITH DIAERESIS
++ { {UNITIZE(Qt::Key_Multi_key), 0x0022, 0x0418, 0, 0, 0}, 0x04e4 }, // U04E4 # CYRILLIC CAPITAL LETTER I WITH DIAERESIS
++ { {UNITIZE(Qt::Key_Multi_key), 0x0022, 0x041e, 0, 0, 0}, 0x04e6 }, // U04E6 # CYRILLIC CAPITAL LETTER O WITH DIAERESIS
++ { {UNITIZE(Qt::Key_Multi_key), 0x0022, 0x0423, 0, 0, 0}, 0x04f0 }, // U04F0 # CYRILLIC CAPITAL LETTER U WITH DIAERESIS
++ { {UNITIZE(Qt::Key_Multi_key), 0x0022, 0x0427, 0, 0, 0}, 0x04f4 }, // U04F4 # CYRILLIC CAPITAL LETTER CHE WITH DIAERESIS
++ { {UNITIZE(Qt::Key_Multi_key), 0x0022, 0x042b, 0, 0, 0}, 0x04f8 }, // U04F8 # CYRILLIC CAPITAL LETTER YERU WITH DIAERESIS
++ { {UNITIZE(Qt::Key_Multi_key), 0x0022, 0x042d, 0, 0, 0}, 0x04ec }, // U04EC # CYRILLIC CAPITAL LETTER E WITH DIAERESIS
++ { {UNITIZE(Qt::Key_Multi_key), 0x0022, 0x0430, 0, 0, 0}, 0x04d3 }, // U04D3 # CYRILLIC SMALL LETTER A WITH DIAERESIS
++ { {UNITIZE(Qt::Key_Multi_key), 0x0022, 0x0435, 0, 0, 0}, 0x0451 }, // U0451 # CYRILLIC SMALL LETTER IO
++ { {UNITIZE(Qt::Key_Multi_key), 0x0022, 0x0436, 0, 0, 0}, 0x04dd }, // U04DD # CYRILLIC SMALL LETTER ZHE WITH DIAERESIS
++ { {UNITIZE(Qt::Key_Multi_key), 0x0022, 0x0437, 0, 0, 0}, 0x04df }, // U04DF # CYRILLIC SMALL LETTER ZE WITH DIAERESIS
++ { {UNITIZE(Qt::Key_Multi_key), 0x0022, 0x0438, 0, 0, 0}, 0x04e5 }, // U04E5 # CYRILLIC SMALL LETTER I WITH DIAERESIS
++ { {UNITIZE(Qt::Key_Multi_key), 0x0022, 0x043e, 0, 0, 0}, 0x04e7 }, // U04E7 # CYRILLIC SMALL LETTER O WITH DIAERESIS
++ { {UNITIZE(Qt::Key_Multi_key), 0x0022, 0x0443, 0, 0, 0}, 0x04f1 }, // U04F1 # CYRILLIC SMALL LETTER U WITH DIAERESIS
++ { {UNITIZE(Qt::Key_Multi_key), 0x0022, 0x0447, 0, 0, 0}, 0x04f5 }, // U04F5 # CYRILLIC SMALL LETTER CHE WITH DIAERESIS
++ { {UNITIZE(Qt::Key_Multi_key), 0x0022, 0x044b, 0, 0, 0}, 0x04f9 }, // U04F9 # CYRILLIC SMALL LETTER YERU WITH DIAERESIS
++ { {UNITIZE(Qt::Key_Multi_key), 0x0022, 0x044d, 0, 0, 0}, 0x04ed }, // U04ED # CYRILLIC SMALL LETTER E WITH DIAERESIS
++ { {UNITIZE(Qt::Key_Multi_key), 0x0022, 0x0456, 0, 0, 0}, 0x0457 }, // U0457 # CYRILLIC SMALL LETTER YI
++ { {UNITIZE(Qt::Key_Multi_key), 0x0022, 0x04d8, 0, 0, 0}, 0x04da }, // U04DA # CYRILLIC CAPITAL LETTER SCHWA WITH DIAERESIS
++ { {UNITIZE(Qt::Key_Multi_key), 0x0022, 0x04d9, 0, 0, 0}, 0x04db }, // U04DB # CYRILLIC SMALL LETTER SCHWA WITH DIAERESIS
++ { {UNITIZE(Qt::Key_Multi_key), 0x0022, 0x04e8, 0, 0, 0}, 0x04ea }, // U04EA # CYRILLIC CAPITAL LETTER BARRED O WITH DIAERESIS
++ { {UNITIZE(Qt::Key_Multi_key), 0x0022, 0x04e9, 0, 0, 0}, 0x04eb }, // U04EB # CYRILLIC SMALL LETTER BARRED O WITH DIAERESIS
++ { {UNITIZE(Qt::Key_Multi_key), 0x0022, UNITIZE(Qt::Key_Dead_Acute), 0, 0, 0}, 0x0344 }, // U0344 # COMBINING GREEK DIALYTIKA TONOS
++ { {UNITIZE(Qt::Key_Multi_key), 0x0022, UNITIZE(Qt::Key_Dead_Tilde), 0x004f, 0, 0}, 0x1e4e }, // U1E4E # LATIN CAPITAL LETTER O WITH TILDE AND DIAERESIS
++ { {UNITIZE(Qt::Key_Multi_key), 0x0022, UNITIZE(Qt::Key_Dead_Tilde), 0x006f, 0, 0}, 0x1e4f }, // U1E4F # LATIN SMALL LETTER O WITH TILDE AND DIAERESIS
++ { {UNITIZE(Qt::Key_Multi_key), 0x0022, UNITIZE(Qt::Key_Dead_Macron), 0x0055, 0, 0}, 0x1e7a }, // U1E7A # LATIN CAPITAL LETTER U WITH MACRON AND DIAERESIS
++ { {UNITIZE(Qt::Key_Multi_key), 0x0022, UNITIZE(Qt::Key_Dead_Macron), 0x0075, 0, 0}, 0x1e7b }, // U1E7B # LATIN SMALL LETTER U WITH MACRON AND DIAERESIS
++ { {UNITIZE(Qt::Key_Multi_key), 0x0023, 0x0023, 0, 0, 0}, 0x266f }, // U266f # MUSIC SHARP SIGN
++ { {UNITIZE(Qt::Key_Multi_key), 0x0023, 0x0062, 0, 0, 0}, 0x266d }, // U266d # MUSIC FLAT SIGN
++ { {UNITIZE(Qt::Key_Multi_key), 0x0023, 0x0066, 0, 0, 0}, 0x266e }, // U266e # MUSIC NATURAL SIGN
++ { {UNITIZE(Qt::Key_Multi_key), 0x0025, 0x006f, 0, 0, 0}, 0x2030 }, // U2030 # PER MILLE SIGN
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0000, 0, 0, 0}, 0x1eda }, // U1EDA # LATIN CAPITAL LETTER O WITH HORN AND ACUTE
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0000, 0, 0, 0}, 0x1ee9 }, // U1EE9 # LATIN SMALL LETTER U WITH HORN AND ACUTE
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0000, 0, 0, 0}, 0x1ee8 }, // U1EE8 # LATIN CAPITAL LETTER U WITH HORN AND ACUTE
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0000, 0, 0, 0}, 0x1edb }, // U1EDB # LATIN SMALL LETTER O WITH HORN AND ACUTE
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0000, 0x004f, 0, 0}, 0x1e4c }, // U1E4C # LATIN CAPITAL LETTER O WITH TILDE AND ACUTE
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0000, 0x004f, 0, 0}, 0x01fe }, // U01FE # LATIN CAPITAL LETTER O WITH STROKE AND ACUTE
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0000, 0x0055, 0, 0}, 0x1e78 }, // U1E78 # LATIN CAPITAL LETTER U WITH TILDE AND ACUTE
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0000, 0x006f, 0, 0}, 0x1e4d }, // U1E4D # LATIN SMALL LETTER O WITH TILDE AND ACUTE
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0000, 0x006f, 0, 0}, 0x01ff }, // U01FF # LATIN SMALL LETTER O WITH STROKE AND ACUTE
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0000, 0x0075, 0, 0}, 0x1e79 }, // U1E79 # LATIN SMALL LETTER U WITH TILDE AND ACUTE
++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0020, 0, 0, 0}, 0x0027 }, // apostrophe
++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0022, 0x0049, 0, 0}, 0x1e2e }, // U1E2E # LATIN CAPITAL LETTER I WITH DIAERESIS AND ACUTE
++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0022, 0x0055, 0, 0}, 0x01d7 }, // U01D7 # LATIN CAPITAL LETTER U WITH DIAERESIS AND ACUTE
++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0022, 0x0069, 0, 0}, 0x1e2f }, // U1E2F # LATIN SMALL LETTER I WITH DIAERESIS AND ACUTE
++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0022, 0x0075, 0, 0}, 0x01d8 }, // U01D8 # LATIN SMALL LETTER U WITH DIAERESIS AND ACUTE
++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0022, 0x03b9, 0, 0}, 0x0390 }, // U0390 # GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS
++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0022, 0x03c5, 0, 0}, 0x03b0 }, // U03B0 # GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS
++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0028, 0x0391, 0, 0}, 0x1f0d }, // U1F0D # GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA
++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0028, 0x0395, 0, 0}, 0x1f1d }, // U1F1D # GREEK CAPITAL LETTER EPSILON WITH DASIA AND OXIA
++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0028, 0x0397, 0, 0}, 0x1f2d }, // U1F2D # GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA
++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0028, 0x0399, 0, 0}, 0x1f3d }, // U1F3D # GREEK CAPITAL LETTER IOTA WITH DASIA AND OXIA
++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0028, 0x039f, 0, 0}, 0x1f4d }, // U1F4D # GREEK CAPITAL LETTER OMICRON WITH DASIA AND OXIA
++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0028, 0x03a5, 0, 0}, 0x1f5d }, // U1F5D # GREEK CAPITAL LETTER UPSILON WITH DASIA AND OXIA
++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0028, 0x03a9, 0, 0}, 0x1f6d }, // U1F6D # GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA
++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0028, 0x03b1, 0, 0}, 0x1f05 }, // U1F05 # GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA
++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0028, 0x03b5, 0, 0}, 0x1f15 }, // U1F15 # GREEK SMALL LETTER EPSILON WITH DASIA AND OXIA
++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0028, 0x03b7, 0, 0}, 0x1f25 }, // U1F25 # GREEK SMALL LETTER ETA WITH DASIA AND OXIA
++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0028, 0x03b9, 0, 0}, 0x1f35 }, // U1F35 # GREEK SMALL LETTER IOTA WITH DASIA AND OXIA
++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0028, 0x03bf, 0, 0}, 0x1f45 }, // U1F45 # GREEK SMALL LETTER OMICRON WITH DASIA AND OXIA
++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0028, 0x03c5, 0, 0}, 0x1f55 }, // U1F55 # GREEK SMALL LETTER UPSILON WITH DASIA AND OXIA
++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0028, 0x03c9, 0, 0}, 0x1f65 }, // U1F65 # GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA
++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0029, 0x0391, 0, 0}, 0x1f0c }, // U1F0C # GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA
++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0029, 0x0395, 0, 0}, 0x1f1c }, // U1F1C # GREEK CAPITAL LETTER EPSILON WITH PSILI AND OXIA
++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0029, 0x0397, 0, 0}, 0x1f2c }, // U1F2C # GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA
++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0029, 0x0399, 0, 0}, 0x1f3c }, // U1F3C # GREEK CAPITAL LETTER IOTA WITH PSILI AND OXIA
++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0029, 0x039f, 0, 0}, 0x1f4c }, // U1F4C # GREEK CAPITAL LETTER OMICRON WITH PSILI AND OXIA
++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0029, 0x03a9, 0, 0}, 0x1f6c }, // U1F6C # GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA
++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0029, 0x03b1, 0, 0}, 0x1f04 }, // U1F04 # GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA
++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0029, 0x03b5, 0, 0}, 0x1f14 }, // U1F14 # GREEK SMALL LETTER EPSILON WITH PSILI AND OXIA
++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0029, 0x03b7, 0, 0}, 0x1f24 }, // U1F24 # GREEK SMALL LETTER ETA WITH PSILI AND OXIA
++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0029, 0x03b9, 0, 0}, 0x1f34 }, // U1F34 # GREEK SMALL LETTER IOTA WITH PSILI AND OXIA
++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0029, 0x03bf, 0, 0}, 0x1f44 }, // U1F44 # GREEK SMALL LETTER OMICRON WITH PSILI AND OXIA
++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0029, 0x03c5, 0, 0}, 0x1f54 }, // U1F54 # GREEK SMALL LETTER UPSILON WITH PSILI AND OXIA
++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0029, 0x03c9, 0, 0}, 0x1f64 }, // U1F64 # GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA
++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x002b, 0x004f, 0, 0}, 0x1eda }, // U1EDA # LATIN CAPITAL LETTER O WITH HORN AND ACUTE
++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x002b, 0x0055, 0, 0}, 0x1ee8 }, // U1EE8 # LATIN CAPITAL LETTER U WITH HORN AND ACUTE
++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x002b, 0x006f, 0, 0}, 0x1edb }, // U1EDB # LATIN SMALL LETTER O WITH HORN AND ACUTE
++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x002b, 0x0075, 0, 0}, 0x1ee9 }, // U1EE9 # LATIN SMALL LETTER U WITH HORN AND ACUTE
++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x002c, 0, 0, 0}, 0x201a }, // U201a # SINGLE LOW-9 QUOTATION MARK
++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x002c, 0x0043, 0, 0}, 0x1e08 }, // U1E08 # LATIN CAPITAL LETTER C WITH CEDILLA AND ACUTE
++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x002c, 0x0063, 0, 0}, 0x1e09 }, // U1E09 # LATIN SMALL LETTER C WITH CEDILLA AND ACUTE
++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x002f, 0x004f, 0, 0}, 0x01fe }, // U01FE # LATIN CAPITAL LETTER O WITH STROKE AND ACUTE
++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x002f, 0x006f, 0, 0}, 0x01ff }, // U01FF # LATIN SMALL LETTER O WITH STROKE AND ACUTE
++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x003c, 0, 0, 0}, 0x2018 }, // U2018 # LEFT SINGLE QUOTATION MARK
++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x003e, 0, 0, 0}, 0x2019 }, // U2019 # RIGHT SINGLE QUOTATION MARK
++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0041, 0, 0, 0}, 0x00c1 }, // U00C1 # LATIN CAPITAL LETTER A WITH ACUTE
++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0043, 0, 0, 0}, 0x0106 }, // U0106 # LATIN CAPITAL LETTER C WITH ACUTE
++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0045, 0, 0, 0}, 0x00c9 }, // U00C9 # LATIN CAPITAL LETTER E WITH ACUTE
++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0047, 0, 0, 0}, 0x01f4 }, // U01F4 # LATIN CAPITAL LETTER G WITH ACUTE
++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0049, 0, 0, 0}, 0x00cd }, // U00CD # LATIN CAPITAL LETTER I WITH ACUTE
++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x004b, 0, 0, 0}, 0x1e30 }, // U1E30 # LATIN CAPITAL LETTER K WITH ACUTE
++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x004c, 0, 0, 0}, 0x0139 }, // U0139 # LATIN CAPITAL LETTER L WITH ACUTE
++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x004d, 0, 0, 0}, 0x1e3e }, // U1E3E # LATIN CAPITAL LETTER M WITH ACUTE
++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x004e, 0, 0, 0}, 0x0143 }, // U0143 # LATIN CAPITAL LETTER N WITH ACUTE
++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x004f, 0, 0, 0}, 0x00d3 }, // U00D3 # LATIN CAPITAL LETTER O WITH ACUTE
++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0050, 0, 0, 0}, 0x1e54 }, // U1E54 # LATIN CAPITAL LETTER P WITH ACUTE
++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0052, 0, 0, 0}, 0x0154 }, // U0154 # LATIN CAPITAL LETTER R WITH ACUTE
++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0053, 0, 0, 0}, 0x015a }, // U015A # LATIN CAPITAL LETTER S WITH ACUTE
++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0055, 0, 0, 0}, 0x00da }, // U00DA # LATIN CAPITAL LETTER U WITH ACUTE
++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0055, 0x0041, 0, 0}, 0x1eae }, // U1EAE # LATIN CAPITAL LETTER A WITH BREVE AND ACUTE
++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0055, 0x0061, 0, 0}, 0x1eaf }, // U1EAF # LATIN SMALL LETTER A WITH BREVE AND ACUTE
++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0057, 0, 0, 0}, 0x1e82 }, // U1E82 # LATIN CAPITAL LETTER W WITH ACUTE
++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0059, 0, 0, 0}, 0x00dd }, // U00DD # LATIN CAPITAL LETTER Y WITH ACUTE
++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x005a, 0, 0, 0}, 0x0179 }, // U0179 # LATIN CAPITAL LETTER Z WITH ACUTE
++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x005e, 0x0041, 0, 0}, 0x1ea4 }, // U1EA4 # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND ACUTE
++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x005e, 0x0045, 0, 0}, 0x1ebe }, // U1EBE # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND ACUTE
++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x005e, 0x004f, 0, 0}, 0x1ed0 }, // U1ED0 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND ACUTE
++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x005e, 0x0061, 0, 0}, 0x1ea5 }, // U1EA5 # LATIN SMALL LETTER A WITH CIRCUMFLEX AND ACUTE
++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x005e, 0x0065, 0, 0}, 0x1ebf }, // U1EBF # LATIN SMALL LETTER E WITH CIRCUMFLEX AND ACUTE
++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x005e, 0x006f, 0, 0}, 0x1ed1 }, // U1ED1 # LATIN SMALL LETTER O WITH CIRCUMFLEX AND ACUTE
++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x005f, 0x0045, 0, 0}, 0x1e16 }, // U1E16 # LATIN CAPITAL LETTER E WITH MACRON AND ACUTE
++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x005f, 0x004f, 0, 0}, 0x1e52 }, // U1E52 # LATIN CAPITAL LETTER O WITH MACRON AND ACUTE
++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x005f, 0x0065, 0, 0}, 0x1e17 }, // U1E17 # LATIN SMALL LETTER E WITH MACRON AND ACUTE
++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x005f, 0x006f, 0, 0}, 0x1e53 }, // U1E53 # LATIN SMALL LETTER O WITH MACRON AND ACUTE
++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0061, 0, 0, 0}, 0x00e1 }, // U00E1 # LATIN SMALL LETTER A WITH ACUTE
++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0062, 0x0041, 0, 0}, 0x1eae }, // U1EAE # LATIN CAPITAL LETTER A WITH BREVE AND ACUTE
++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0062, 0x0061, 0, 0}, 0x1eaf }, // U1EAF # LATIN SMALL LETTER A WITH BREVE AND ACUTE
++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0063, 0, 0, 0}, 0x0107 }, // U0107 # LATIN SMALL LETTER C WITH ACUTE
++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0065, 0, 0, 0}, 0x00e9 }, // U00E9 # LATIN SMALL LETTER E WITH ACUTE
++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0067, 0, 0, 0}, 0x01f5 }, // U01F5 # LATIN SMALL LETTER G WITH ACUTE
++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0069, 0, 0, 0}, 0x00ed }, // U00ED # LATIN SMALL LETTER I WITH ACUTE
++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x006b, 0, 0, 0}, 0x1e31 }, // U1E31 # LATIN SMALL LETTER K WITH ACUTE
++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x006c, 0, 0, 0}, 0x013a }, // U013A # LATIN SMALL LETTER L WITH ACUTE
++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x006d, 0, 0, 0}, 0x1e3f }, // U1E3F # LATIN SMALL LETTER M WITH ACUTE
++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x006e, 0, 0, 0}, 0x0144 }, // U0144 # LATIN SMALL LETTER N WITH ACUTE
++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x006f, 0, 0, 0}, 0x00f3 }, // U00F3 # LATIN SMALL LETTER O WITH ACUTE
++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0070, 0, 0, 0}, 0x1e55 }, // U1E55 # LATIN SMALL LETTER P WITH ACUTE
++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0072, 0, 0, 0}, 0x0155 }, // U0155 # LATIN SMALL LETTER R WITH ACUTE
++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0073, 0, 0, 0}, 0x015b }, // U015B # LATIN SMALL LETTER S WITH ACUTE
++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0075, 0, 0, 0}, 0x00fa }, // U00FA # LATIN SMALL LETTER U WITH ACUTE
++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0077, 0, 0, 0}, 0x1e83 }, // U1E83 # LATIN SMALL LETTER W WITH ACUTE
++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0079, 0, 0, 0}, 0x00fd }, // U00FD # LATIN SMALL LETTER Y WITH ACUTE
++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x007a, 0, 0, 0}, 0x017a }, // U017A # LATIN SMALL LETTER Z WITH ACUTE
++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x007e, 0x004f, 0, 0}, 0x1e4c }, // U1E4C # LATIN CAPITAL LETTER O WITH TILDE AND ACUTE
++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x007e, 0x0055, 0, 0}, 0x1e78 }, // U1E78 # LATIN CAPITAL LETTER U WITH TILDE AND ACUTE
++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x007e, 0x006f, 0, 0}, 0x1e4d }, // U1E4D # LATIN SMALL LETTER O WITH TILDE AND ACUTE
++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x007e, 0x0075, 0, 0}, 0x1e79 }, // U1E79 # LATIN SMALL LETTER U WITH TILDE AND ACUTE
++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x00af, 0x0045, 0, 0}, 0x1e16 }, // U1E16 # LATIN CAPITAL LETTER E WITH MACRON AND ACUTE
++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x00af, 0x004f, 0, 0}, 0x1e52 }, // U1E52 # LATIN CAPITAL LETTER O WITH MACRON AND ACUTE
++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x00af, 0x0065, 0, 0}, 0x1e17 }, // U1E17 # LATIN SMALL LETTER E WITH MACRON AND ACUTE
++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x00af, 0x006f, 0, 0}, 0x1e53 }, // U1E53 # LATIN SMALL LETTER O WITH MACRON AND ACUTE
++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x00c2, 0, 0, 0}, 0x1ea4 }, // U1EA4 # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND ACUTE
++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x00c5, 0, 0, 0}, 0x01fa }, // U01FA # LATIN CAPITAL LETTER A WITH RING ABOVE AND ACUTE
++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x00c6, 0, 0, 0}, 0x01fc }, // U01FC # LATIN CAPITAL LETTER AE WITH ACUTE
++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x00c7, 0, 0, 0}, 0x1e08 }, // U1E08 # LATIN CAPITAL LETTER C WITH CEDILLA AND ACUTE
++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x00ca, 0, 0, 0}, 0x1ebe }, // U1EBE # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND ACUTE
++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x00cf, 0, 0, 0}, 0x1e2e }, // U1E2E # LATIN CAPITAL LETTER I WITH DIAERESIS AND ACUTE
++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x00d4, 0, 0, 0}, 0x1ed0 }, // U1ED0 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND ACUTE
++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x00d5, 0, 0, 0}, 0x1e4c }, // U1E4C # LATIN CAPITAL LETTER O WITH TILDE AND ACUTE
++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x00d8, 0, 0, 0}, 0x01fe }, // U01FE # LATIN CAPITAL LETTER O WITH STROKE AND ACUTE
++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x00dc, 0, 0, 0}, 0x01d7 }, // U01D7 # LATIN CAPITAL LETTER U WITH DIAERESIS AND ACUTE
++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x00e2, 0, 0, 0}, 0x1ea5 }, // U1EA5 # LATIN SMALL LETTER A WITH CIRCUMFLEX AND ACUTE
++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x00e5, 0, 0, 0}, 0x01fb }, // U01FB # LATIN SMALL LETTER A WITH RING ABOVE AND ACUTE
++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x00e6, 0, 0, 0}, 0x01fd }, // U01FD # LATIN SMALL LETTER AE WITH ACUTE
++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x00e7, 0, 0, 0}, 0x1e09 }, // U1E09 # LATIN SMALL LETTER C WITH CEDILLA AND ACUTE
++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x00ea, 0, 0, 0}, 0x1ebf }, // U1EBF # LATIN SMALL LETTER E WITH CIRCUMFLEX AND ACUTE
++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x00ef, 0, 0, 0}, 0x1e2f }, // U1E2F # LATIN SMALL LETTER I WITH DIAERESIS AND ACUTE
++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x00f4, 0, 0, 0}, 0x1ed1 }, // U1ED1 # LATIN SMALL LETTER O WITH CIRCUMFLEX AND ACUTE
++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x00f5, 0, 0, 0}, 0x1e4d }, // U1E4D # LATIN SMALL LETTER O WITH TILDE AND ACUTE
++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x00f8, 0, 0, 0}, 0x01ff }, // U01FF # LATIN SMALL LETTER O WITH STROKE AND ACUTE
++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x00fc, 0, 0, 0}, 0x01d8 }, // U01D8 # LATIN SMALL LETTER U WITH DIAERESIS AND ACUTE
++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0102, 0, 0, 0}, 0x1eae }, // U1EAE # LATIN CAPITAL LETTER A WITH BREVE AND ACUTE
++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0103, 0, 0, 0}, 0x1eaf }, // U1EAF # LATIN SMALL LETTER A WITH BREVE AND ACUTE
++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0112, 0, 0, 0}, 0x1e16 }, // U1E16 # LATIN CAPITAL LETTER E WITH MACRON AND ACUTE
++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0113, 0, 0, 0}, 0x1e17 }, // U1E17 # LATIN SMALL LETTER E WITH MACRON AND ACUTE
++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x014c, 0, 0, 0}, 0x1e52 }, // U1E52 # LATIN CAPITAL LETTER O WITH MACRON AND ACUTE
++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x014d, 0, 0, 0}, 0x1e53 }, // U1E53 # LATIN SMALL LETTER O WITH MACRON AND ACUTE
++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0168, 0, 0, 0}, 0x1e78 }, // U1E78 # LATIN CAPITAL LETTER U WITH TILDE AND ACUTE
++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0169, 0, 0, 0}, 0x1e79 }, // U1E79 # LATIN SMALL LETTER U WITH TILDE AND ACUTE
++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0313, 0x0391, 0, 0}, 0x1f0c }, // U1F0C # GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA
++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0313, 0x0395, 0, 0}, 0x1f1c }, // U1F1C # GREEK CAPITAL LETTER EPSILON WITH PSILI AND OXIA
++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0313, 0x0397, 0, 0}, 0x1f2c }, // U1F2C # GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA
++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0313, 0x0399, 0, 0}, 0x1f3c }, // U1F3C # GREEK CAPITAL LETTER IOTA WITH PSILI AND OXIA
++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0313, 0x039f, 0, 0}, 0x1f4c }, // U1F4C # GREEK CAPITAL LETTER OMICRON WITH PSILI AND OXIA
++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0313, 0x03a9, 0, 0}, 0x1f6c }, // U1F6C # GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA
++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0313, 0x03b1, 0, 0}, 0x1f04 }, // U1F04 # GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA
++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0313, 0x03b5, 0, 0}, 0x1f14 }, // U1F14 # GREEK SMALL LETTER EPSILON WITH PSILI AND OXIA
++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0313, 0x03b7, 0, 0}, 0x1f24 }, // U1F24 # GREEK SMALL LETTER ETA WITH PSILI AND OXIA
++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0313, 0x03b9, 0, 0}, 0x1f34 }, // U1F34 # GREEK SMALL LETTER IOTA WITH PSILI AND OXIA
++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0313, 0x03bf, 0, 0}, 0x1f44 }, // U1F44 # GREEK SMALL LETTER OMICRON WITH PSILI AND OXIA
++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0313, 0x03c5, 0, 0}, 0x1f54 }, // U1F54 # GREEK SMALL LETTER UPSILON WITH PSILI AND OXIA
++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0313, 0x03c9, 0, 0}, 0x1f64 }, // U1F64 # GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA
++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0314, 0x0391, 0, 0}, 0x1f0d }, // U1F0D # GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA
++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0314, 0x0395, 0, 0}, 0x1f1d }, // U1F1D # GREEK CAPITAL LETTER EPSILON WITH DASIA AND OXIA
++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0314, 0x0397, 0, 0}, 0x1f2d }, // U1F2D # GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA
++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0314, 0x0399, 0, 0}, 0x1f3d }, // U1F3D # GREEK CAPITAL LETTER IOTA WITH DASIA AND OXIA
++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0314, 0x039f, 0, 0}, 0x1f4d }, // U1F4D # GREEK CAPITAL LETTER OMICRON WITH DASIA AND OXIA
++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0314, 0x03a5, 0, 0}, 0x1f5d }, // U1F5D # GREEK CAPITAL LETTER UPSILON WITH DASIA AND OXIA
++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0314, 0x03a9, 0, 0}, 0x1f6d }, // U1F6D # GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA
++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0314, 0x03b1, 0, 0}, 0x1f05 }, // U1F05 # GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA
++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0314, 0x03b5, 0, 0}, 0x1f15 }, // U1F15 # GREEK SMALL LETTER EPSILON WITH DASIA AND OXIA
++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0314, 0x03b7, 0, 0}, 0x1f25 }, // U1F25 # GREEK SMALL LETTER ETA WITH DASIA AND OXIA
++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0314, 0x03b9, 0, 0}, 0x1f35 }, // U1F35 # GREEK SMALL LETTER IOTA WITH DASIA AND OXIA
++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0314, 0x03bf, 0, 0}, 0x1f45 }, // U1F45 # GREEK SMALL LETTER OMICRON WITH DASIA AND OXIA
++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0314, 0x03c5, 0, 0}, 0x1f55 }, // U1F55 # GREEK SMALL LETTER UPSILON WITH DASIA AND OXIA
++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0314, 0x03c9, 0, 0}, 0x1f65 }, // U1F65 # GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA
++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0391, 0, 0, 0}, 0x0386 }, // U0386 # GREEK CAPITAL LETTER ALPHA WITH TONOS
++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0395, 0, 0, 0}, 0x0388 }, // U0388 # GREEK CAPITAL LETTER EPSILON WITH TONOS
++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0397, 0, 0, 0}, 0x0389 }, // U0389 # GREEK CAPITAL LETTER ETA WITH TONOS
++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0399, 0, 0, 0}, 0x038a }, // U038A # GREEK CAPITAL LETTER IOTA WITH TONOS
++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x039f, 0, 0, 0}, 0x038c }, // U038C # GREEK CAPITAL LETTER OMICRON WITH TONOS
++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x03a5, 0, 0, 0}, 0x038e }, // U038E # GREEK CAPITAL LETTER UPSILON WITH TONOS
++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x03a9, 0, 0, 0}, 0x038f }, // U038F # GREEK CAPITAL LETTER OMEGA WITH TONOS
++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x03b1, 0, 0, 0}, 0x03ac }, // U03AC # GREEK SMALL LETTER ALPHA WITH TONOS
++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x03b5, 0, 0, 0}, 0x03ad }, // U03AD # GREEK SMALL LETTER EPSILON WITH TONOS
++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x03b7, 0, 0, 0}, 0x03ae }, // U03AE # GREEK SMALL LETTER ETA WITH TONOS
++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x03b9, 0, 0, 0}, 0x03af }, // U03AF # GREEK SMALL LETTER IOTA WITH TONOS
++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x03bf, 0, 0, 0}, 0x03cc }, // U03CC # GREEK SMALL LETTER OMICRON WITH TONOS
++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x03c5, 0, 0, 0}, 0x03cd }, // U03CD # GREEK SMALL LETTER UPSILON WITH TONOS
++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x03c9, 0, 0, 0}, 0x03ce }, // U03CE # GREEK SMALL LETTER OMEGA WITH TONOS
++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x03ca, 0, 0, 0}, 0x0390 }, // U0390 # GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS
++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x03cb, 0, 0, 0}, 0x03b0 }, // U03B0 # GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS
++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x03d2, 0, 0, 0}, 0x03d3 }, // U03D3 # GREEK UPSILON WITH ACUTE AND HOOK SYMBOL
++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0413, 0, 0, 0}, 0x0403 }, // U0403 # CYRILLIC CAPITAL LETTER GJE
++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x041a, 0, 0, 0}, 0x040c }, // U040C # CYRILLIC CAPITAL LETTER KJE
++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0433, 0, 0, 0}, 0x0453 }, // U0453 # CYRILLIC SMALL LETTER GJE
++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x043a, 0, 0, 0}, 0x045c }, // U045C # CYRILLIC SMALL LETTER KJE
++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x1f00, 0, 0, 0}, 0x1f04 }, // U1F04 # GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA
++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x1f01, 0, 0, 0}, 0x1f05 }, // U1F05 # GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA
++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x1f08, 0, 0, 0}, 0x1f0c }, // U1F0C # GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA
++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x1f09, 0, 0, 0}, 0x1f0d }, // U1F0D # GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA
++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x1f10, 0, 0, 0}, 0x1f14 }, // U1F14 # GREEK SMALL LETTER EPSILON WITH PSILI AND OXIA
++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x1f11, 0, 0, 0}, 0x1f15 }, // U1F15 # GREEK SMALL LETTER EPSILON WITH DASIA AND OXIA
++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x1f18, 0, 0, 0}, 0x1f1c }, // U1F1C # GREEK CAPITAL LETTER EPSILON WITH PSILI AND OXIA
++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x1f19, 0, 0, 0}, 0x1f1d }, // U1F1D # GREEK CAPITAL LETTER EPSILON WITH DASIA AND OXIA
++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x1f20, 0, 0, 0}, 0x1f24 }, // U1F24 # GREEK SMALL LETTER ETA WITH PSILI AND OXIA
++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x1f21, 0, 0, 0}, 0x1f25 }, // U1F25 # GREEK SMALL LETTER ETA WITH DASIA AND OXIA
++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x1f28, 0, 0, 0}, 0x1f2c }, // U1F2C # GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA
++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x1f29, 0, 0, 0}, 0x1f2d }, // U1F2D # GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA
++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x1f30, 0, 0, 0}, 0x1f34 }, // U1F34 # GREEK SMALL LETTER IOTA WITH PSILI AND OXIA
++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x1f31, 0, 0, 0}, 0x1f35 }, // U1F35 # GREEK SMALL LETTER IOTA WITH DASIA AND OXIA
++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x1f38, 0, 0, 0}, 0x1f3c }, // U1F3C # GREEK CAPITAL LETTER IOTA WITH PSILI AND OXIA
++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x1f39, 0, 0, 0}, 0x1f3d }, // U1F3D # GREEK CAPITAL LETTER IOTA WITH DASIA AND OXIA
++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x1f40, 0, 0, 0}, 0x1f44 }, // U1F44 # GREEK SMALL LETTER OMICRON WITH PSILI AND OXIA
++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x1f41, 0, 0, 0}, 0x1f45 }, // U1F45 # GREEK SMALL LETTER OMICRON WITH DASIA AND OXIA
++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x1f48, 0, 0, 0}, 0x1f4c }, // U1F4C # GREEK CAPITAL LETTER OMICRON WITH PSILI AND OXIA
++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x1f49, 0, 0, 0}, 0x1f4d }, // U1F4D # GREEK CAPITAL LETTER OMICRON WITH DASIA AND OXIA
++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x1f50, 0, 0, 0}, 0x1f54 }, // U1F54 # GREEK SMALL LETTER UPSILON WITH PSILI AND OXIA
++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x1f51, 0, 0, 0}, 0x1f55 }, // U1F55 # GREEK SMALL LETTER UPSILON WITH DASIA AND OXIA
++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x1f59, 0, 0, 0}, 0x1f5d }, // U1F5D # GREEK CAPITAL LETTER UPSILON WITH DASIA AND OXIA
++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x1f60, 0, 0, 0}, 0x1f64 }, // U1F64 # GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA
++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x1f61, 0, 0, 0}, 0x1f65 }, // U1F65 # GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA
++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x1f68, 0, 0, 0}, 0x1f6c }, // U1F6C # GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA
++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x1f69, 0, 0, 0}, 0x1f6d }, // U1F6D # GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA
++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, UNITIZE(Qt::Key_Dead_Circumflex), 0x0041, 0, 0}, 0x1ea4 }, // U1EA4 # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND ACUTE
++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, UNITIZE(Qt::Key_Dead_Circumflex), 0x0045, 0, 0}, 0x1ebe }, // U1EBE # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND ACUTE
++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, UNITIZE(Qt::Key_Dead_Circumflex), 0x004f, 0, 0}, 0x1ed0 }, // U1ED0 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND ACUTE
++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, UNITIZE(Qt::Key_Dead_Circumflex), 0x0061, 0, 0}, 0x1ea5 }, // U1EA5 # LATIN SMALL LETTER A WITH CIRCUMFLEX AND ACUTE
++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, UNITIZE(Qt::Key_Dead_Circumflex), 0x0065, 0, 0}, 0x1ebf }, // U1EBF # LATIN SMALL LETTER E WITH CIRCUMFLEX AND ACUTE
++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, UNITIZE(Qt::Key_Dead_Circumflex), 0x006f, 0, 0}, 0x1ed1 }, // U1ED1 # LATIN SMALL LETTER O WITH CIRCUMFLEX AND ACUTE
++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, UNITIZE(Qt::Key_Dead_Tilde), 0x004f, 0, 0}, 0x1e4c }, // U1E4C # LATIN CAPITAL LETTER O WITH TILDE AND ACUTE
++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, UNITIZE(Qt::Key_Dead_Tilde), 0x0055, 0, 0}, 0x1e78 }, // U1E78 # LATIN CAPITAL LETTER U WITH TILDE AND ACUTE
++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, UNITIZE(Qt::Key_Dead_Tilde), 0x006f, 0, 0}, 0x1e4d }, // U1E4D # LATIN SMALL LETTER O WITH TILDE AND ACUTE
++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, UNITIZE(Qt::Key_Dead_Tilde), 0x0075, 0, 0}, 0x1e79 }, // U1E79 # LATIN SMALL LETTER U WITH TILDE AND ACUTE
++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, UNITIZE(Qt::Key_Dead_Macron), 0x0045, 0, 0}, 0x1e16 }, // U1E16 # LATIN CAPITAL LETTER E WITH MACRON AND ACUTE
++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, UNITIZE(Qt::Key_Dead_Macron), 0x004f, 0, 0}, 0x1e52 }, // U1E52 # LATIN CAPITAL LETTER O WITH MACRON AND ACUTE
++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, UNITIZE(Qt::Key_Dead_Macron), 0x0065, 0, 0}, 0x1e17 }, // U1E17 # LATIN SMALL LETTER E WITH MACRON AND ACUTE
++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, UNITIZE(Qt::Key_Dead_Macron), 0x006f, 0, 0}, 0x1e53 }, // U1E53 # LATIN SMALL LETTER O WITH MACRON AND ACUTE
++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, UNITIZE(Qt::Key_Dead_Breve), 0x0041, 0, 0}, 0x1eae }, // U1EAE # LATIN CAPITAL LETTER A WITH BREVE AND ACUTE
++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, UNITIZE(Qt::Key_Dead_Breve), 0x0061, 0, 0}, 0x1eaf }, // U1EAF # LATIN SMALL LETTER A WITH BREVE AND ACUTE
++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, UNITIZE(Qt::Key_Dead_Diaeresis), 0x0049, 0, 0}, 0x1e2e }, // U1E2E # LATIN CAPITAL LETTER I WITH DIAERESIS AND ACUTE
++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, UNITIZE(Qt::Key_Dead_Diaeresis), 0x0055, 0, 0}, 0x01d7 }, // U01D7 # LATIN CAPITAL LETTER U WITH DIAERESIS AND ACUTE
++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, UNITIZE(Qt::Key_Dead_Diaeresis), 0x0069, 0, 0}, 0x1e2f }, // U1E2F # LATIN SMALL LETTER I WITH DIAERESIS AND ACUTE
++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, UNITIZE(Qt::Key_Dead_Diaeresis), 0x0075, 0, 0}, 0x01d8 }, // U01D8 # LATIN SMALL LETTER U WITH DIAERESIS AND ACUTE
++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, UNITIZE(Qt::Key_Dead_Diaeresis), 0x03b9, 0, 0}, 0x0390 }, // U0390 # GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS
++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, UNITIZE(Qt::Key_Dead_Diaeresis), 0x03c5, 0, 0}, 0x03b0 }, // U03B0 # GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS
++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, UNITIZE(Qt::Key_Dead_Abovering), 0x0041, 0, 0}, 0x01fa }, // U01FA # LATIN CAPITAL LETTER A WITH RING ABOVE AND ACUTE
++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, UNITIZE(Qt::Key_Dead_Abovering), 0x0061, 0, 0}, 0x01fb }, // U01FB # LATIN SMALL LETTER A WITH RING ABOVE AND ACUTE
++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, UNITIZE(Qt::Key_Dead_Cedilla), 0x0043, 0, 0}, 0x1e08 }, // U1E08 # LATIN CAPITAL LETTER C WITH CEDILLA AND ACUTE
++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, UNITIZE(Qt::Key_Dead_Cedilla), 0x0063, 0, 0}, 0x1e09 }, // U1E09 # LATIN SMALL LETTER C WITH CEDILLA AND ACUTE
++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, UNITIZE(Qt::Key_Dead_Horn), 0x004f, 0, 0}, 0x1eda }, // U1EDA # LATIN CAPITAL LETTER O WITH HORN AND ACUTE
++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, UNITIZE(Qt::Key_Dead_Horn), 0x0055, 0, 0}, 0x1ee8 }, // U1EE8 # LATIN CAPITAL LETTER U WITH HORN AND ACUTE
++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, UNITIZE(Qt::Key_Dead_Horn), 0x006f, 0, 0}, 0x1edb }, // U1EDB # LATIN SMALL LETTER O WITH HORN AND ACUTE
++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, UNITIZE(Qt::Key_Dead_Horn), 0x0075, 0, 0}, 0x1ee9 }, // U1EE9 # LATIN SMALL LETTER U WITH HORN AND ACUTE
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0000, 0x0029, 0}, 0x246b }, // U246B # CIRCLED NUMBER TWELVE
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0000, 0x0029, 0}, 0x32b7 }, // U32B7 # CIRCLED NUMBER FORTY TWO
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0000, 0x0029, 0}, 0x3253 }, // U3253 # CIRCLED NUMBER TWENTY THREE
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0000, 0x0029, 0}, 0x3252 }, // U3252 # CIRCLED NUMBER TWENTY TWO
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0000, 0x0029, 0}, 0x3253 }, // U3253 # CIRCLED NUMBER TWENTY THREE
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0000, 0x0029, 0}, 0x2473 }, // U2473 # CIRCLED NUMBER TWENTY
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0000, 0x0029, 0}, 0x32b2 }, // U32B2 # CIRCLED NUMBER THIRTY SEVEN
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0000, 0x0029, 0}, 0x32b7 }, // U32B7 # CIRCLED NUMBER FORTY TWO
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0000, 0x0029, 0}, 0x3252 }, // U3252 # CIRCLED NUMBER TWENTY TWO
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0000, 0x0029, 0}, 0x246d }, // U246D # CIRCLED NUMBER FOURTEEN
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0000, 0x0029, 0}, 0x32be }, // U32BE # CIRCLED NUMBER FORTY NINE
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0000, 0x0029, 0}, 0x3254 }, // U3254 # CIRCLED NUMBER TWENTY FOUR
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0000, 0x0029, 0}, 0x2470 }, // U2470 # CIRCLED NUMBER SEVENTEEN
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0000, 0x0029, 0}, 0x3252 }, // U3252 # CIRCLED NUMBER TWENTY TWO
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0000, 0x0029, 0}, 0x32bc }, // U32BC # CIRCLED NUMBER FORTY SEVEN
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0000, 0x0029, 0}, 0x3254 }, // U3254 # CIRCLED NUMBER TWENTY FOUR
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0000, 0x0029, 0}, 0x246f }, // U246F # CIRCLED NUMBER SIXTEEN
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0000, 0x0029, 0}, 0x3252 }, // U3252 # CIRCLED NUMBER TWENTY TWO
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0000, 0x0029, 0}, 0x32bb }, // U32BB # CIRCLED NUMBER FORTY SIX
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0000, 0x0029, 0}, 0x32b3 }, // U32B3 # CIRCLED NUMBER THIRTY EIGHT
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0000, 0x0029, 0}, 0x32b6 }, // U32B6 # CIRCLED NUMBER FORTY ONE
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0000, 0x0029, 0}, 0x2469 }, // U2469 # CIRCLED NUMBER TEN
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0000, 0x0029, 0}, 0x3255 }, // U3255 # CIRCLED NUMBER TWENTY FIVE
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0000, 0x0029, 0}, 0x3251 }, // U3251 # CIRCLED NUMBER TWENTY ONE
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0000, 0x0029, 0}, 0x3257 }, // U3257 # CIRCLED NUMBER TWENTY SEVEN
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0000, 0x0029, 0}, 0x3255 }, // U3255 # CIRCLED NUMBER TWENTY FIVE
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0000, 0x0029, 0}, 0x325f }, // U325F # CIRCLED NUMBER THIRTY FIVE
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0000, 0x0029, 0}, 0x325e }, // U325E # CIRCLED NUMBER THIRTY FOUR
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0000, 0x0029, 0}, 0x3251 }, // U3251 # CIRCLED NUMBER TWENTY ONE
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0000, 0x0029, 0}, 0x32b8 }, // U32B8 # CIRCLED NUMBER FORTY THREE
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0000, 0x0029, 0}, 0x32b1 }, // U32B1 # CIRCLED NUMBER THIRTY SIX
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0000, 0x0029, 0}, 0x325d }, // U325D # CIRCLED NUMBER THIRTY THREE
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0000, 0x0029, 0}, 0x2471 }, // U2471 # CIRCLED NUMBER EIGHTEEN
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0000, 0x0029, 0}, 0x325c }, // U325C # CIRCLED NUMBER THIRTY TWO
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0000, 0x0029, 0}, 0x3256 }, // U3256 # CIRCLED NUMBER TWENTY SIX
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0000, 0x0029, 0}, 0x325c }, // U325C # CIRCLED NUMBER THIRTY TWO
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0000, 0x0029, 0}, 0x3256 }, // U3256 # CIRCLED NUMBER TWENTY SIX
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0000, 0x0029, 0}, 0x325b }, // U325B # CIRCLED NUMBER THIRTY ONE
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0000, 0x0029, 0}, 0x2473 }, // U2473 # CIRCLED NUMBER TWENTY
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0000, 0x0029, 0}, 0x2472 }, // U2472 # CIRCLED NUMBER NINETEEN
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0000, 0x0029, 0}, 0x246c }, // U246C # CIRCLED NUMBER THIRTEEN
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0000, 0x0029, 0}, 0x32b9 }, // U32B9 # CIRCLED NUMBER FORTY FOUR
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0000, 0x0029, 0}, 0x32ba }, // U32BA # CIRCLED NUMBER FORTY FIVE
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0000, 0x0029, 0}, 0x325a }, // U325A # CIRCLED NUMBER THIRTY
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0000, 0x0029, 0}, 0x32b5 }, // U32B5 # CIRCLED NUMBER FORTY
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0000, 0x0029, 0}, 0x3257 }, // U3257 # CIRCLED NUMBER TWENTY SEVEN
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0000, 0x0029, 0}, 0x3259 }, // U3259 # CIRCLED NUMBER TWENTY NINE
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0000, 0x0029, 0}, 0x3259 }, // U3259 # CIRCLED NUMBER TWENTY NINE
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0000, 0x0029, 0}, 0x32b4 }, // U32B4 # CIRCLED NUMBER THIRTY NINE
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0000, 0x0029, 0}, 0x3258 }, // U3258 # CIRCLED NUMBER TWENTY EIGHT
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0000, 0x0029, 0}, 0x3258 }, // U3258 # CIRCLED NUMBER TWENTY EIGHT
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0000, 0x0029, 0}, 0x246b }, // U246B # CIRCLED NUMBER TWELVE
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0000, 0x0029, 0}, 0x246a }, // U246A # CIRCLED NUMBER ELEVEN
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0000, 0x0029, 0}, 0x246e }, // U246E # CIRCLED NUMBER FIFTEEN
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0000, 0x0029, 0}, 0x32bd }, // U32BD # CIRCLED NUMBER FORTY EIGHT
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0000, 0x0029, 0}, 0x32bf }, // U32BF # CIRCLED NUMBER FIFTY
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0029, 0, 0}, 0x2461 }, // U2461 # CIRCLED DIGIT TWO
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0029, 0, 0}, 0x2461 }, // U2461 # CIRCLED DIGIT TWO
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0029, 0, 0}, 0x2462 }, // U2462 # CIRCLED DIGIT THREE
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0029, 0, 0}, 0x2468 }, // U2468 # CIRCLED DIGIT NINE
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0029, 0, 0}, 0x2463 }, // U2463 # CIRCLED DIGIT FOUR
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0029, 0, 0}, 0x2460 }, // U2460 # CIRCLED DIGIT ONE
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0029, 0, 0}, 0x2467 }, // U2467 # CIRCLED DIGIT EIGHT
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0029, 0, 0}, 0x24ea }, // U24EA # CIRCLED DIGIT ZERO
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0029, 0, 0}, 0x2466 }, // U2466 # CIRCLED DIGIT SEVEN
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0029, 0, 0}, 0x2465 }, // U2465 # CIRCLED DIGIT SIX
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0029, 0, 0}, 0x2464 }, // U2464 # CIRCLED DIGIT FIVE
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0030, 0x0029, 0}, 0x32b5 }, // U32B5 # CIRCLED NUMBER FORTY
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0030, 0x0029, 0}, 0x2473 }, // U2473 # CIRCLED NUMBER TWENTY
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0030, 0x0029, 0}, 0x2469 }, // U2469 # CIRCLED NUMBER TEN
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0030, 0x0029, 0}, 0x32bf }, // U32BF # CIRCLED NUMBER FIFTY
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0030, 0x0029, 0}, 0x325a }, // U325A # CIRCLED NUMBER THIRTY
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0030, 0x0029, 0}, 0x2473 }, // U2473 # CIRCLED NUMBER TWENTY
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0031, 0x0029, 0}, 0x32b6 }, // U32B6 # CIRCLED NUMBER FORTY ONE
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0031, 0x0029, 0}, 0x246a }, // U246A # CIRCLED NUMBER ELEVEN
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0031, 0x0029, 0}, 0x3251 }, // U3251 # CIRCLED NUMBER TWENTY ONE
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0031, 0x0029, 0}, 0x325b }, // U325B # CIRCLED NUMBER THIRTY ONE
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0031, 0x0029, 0}, 0x3251 }, // U3251 # CIRCLED NUMBER TWENTY ONE
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0032, 0x0029, 0}, 0x3252 }, // U3252 # CIRCLED NUMBER TWENTY TWO
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0032, 0x0029, 0}, 0x32b7 }, // U32B7 # CIRCLED NUMBER FORTY TWO
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0032, 0x0029, 0}, 0x246b }, // U246B # CIRCLED NUMBER TWELVE
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0032, 0x0029, 0}, 0x325c }, // U325C # CIRCLED NUMBER THIRTY TWO
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0032, 0x0029, 0}, 0x3252 }, // U3252 # CIRCLED NUMBER TWENTY TWO
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0033, 0x0029, 0}, 0x246c }, // U246C # CIRCLED NUMBER THIRTEEN
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0033, 0x0029, 0}, 0x3253 }, // U3253 # CIRCLED NUMBER TWENTY THREE
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0033, 0x0029, 0}, 0x325d }, // U325D # CIRCLED NUMBER THIRTY THREE
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0033, 0x0029, 0}, 0x32b8 }, // U32B8 # CIRCLED NUMBER FORTY THREE
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0033, 0x0029, 0}, 0x3253 }, // U3253 # CIRCLED NUMBER TWENTY THREE
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0034, 0x0029, 0}, 0x246d }, // U246D # CIRCLED NUMBER FOURTEEN
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0034, 0x0029, 0}, 0x3254 }, // U3254 # CIRCLED NUMBER TWENTY FOUR
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0034, 0x0029, 0}, 0x32b9 }, // U32B9 # CIRCLED NUMBER FORTY FOUR
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0034, 0x0029, 0}, 0x3254 }, // U3254 # CIRCLED NUMBER TWENTY FOUR
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0034, 0x0029, 0}, 0x325e }, // U325E # CIRCLED NUMBER THIRTY FOUR
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0035, 0x0029, 0}, 0x3255 }, // U3255 # CIRCLED NUMBER TWENTY FIVE
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0035, 0x0029, 0}, 0x325f }, // U325F # CIRCLED NUMBER THIRTY FIVE
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0035, 0x0029, 0}, 0x32ba }, // U32BA # CIRCLED NUMBER FORTY FIVE
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0035, 0x0029, 0}, 0x3255 }, // U3255 # CIRCLED NUMBER TWENTY FIVE
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0035, 0x0029, 0}, 0x246e }, // U246E # CIRCLED NUMBER FIFTEEN
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0036, 0x0029, 0}, 0x3256 }, // U3256 # CIRCLED NUMBER TWENTY SIX
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0036, 0x0029, 0}, 0x32bb }, // U32BB # CIRCLED NUMBER FORTY SIX
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0036, 0x0029, 0}, 0x32b1 }, // U32B1 # CIRCLED NUMBER THIRTY SIX
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0036, 0x0029, 0}, 0x246f }, // U246F # CIRCLED NUMBER SIXTEEN
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0036, 0x0029, 0}, 0x3256 }, // U3256 # CIRCLED NUMBER TWENTY SIX
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0037, 0x0029, 0}, 0x32bc }, // U32BC # CIRCLED NUMBER FORTY SEVEN
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0037, 0x0029, 0}, 0x3257 }, // U3257 # CIRCLED NUMBER TWENTY SEVEN
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0037, 0x0029, 0}, 0x32b2 }, // U32B2 # CIRCLED NUMBER THIRTY SEVEN
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0037, 0x0029, 0}, 0x2470 }, // U2470 # CIRCLED NUMBER SEVENTEEN
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0037, 0x0029, 0}, 0x3257 }, // U3257 # CIRCLED NUMBER TWENTY SEVEN
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0038, 0x0029, 0}, 0x2471 }, // U2471 # CIRCLED NUMBER EIGHTEEN
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0038, 0x0029, 0}, 0x32b3 }, // U32B3 # CIRCLED NUMBER THIRTY EIGHT
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0038, 0x0029, 0}, 0x32bd }, // U32BD # CIRCLED NUMBER FORTY EIGHT
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0038, 0x0029, 0}, 0x3258 }, // U3258 # CIRCLED NUMBER TWENTY EIGHT
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0038, 0x0029, 0}, 0x3258 }, // U3258 # CIRCLED NUMBER TWENTY EIGHT
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0039, 0x0029, 0}, 0x32b4 }, // U32B4 # CIRCLED NUMBER THIRTY NINE
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0039, 0x0029, 0}, 0x3259 }, // U3259 # CIRCLED NUMBER TWENTY NINE
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0039, 0x0029, 0}, 0x32be }, // U32BE # CIRCLED NUMBER FORTY NINE
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0039, 0x0029, 0}, 0x3259 }, // U3259 # CIRCLED NUMBER TWENTY NINE
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0039, 0x0029, 0}, 0x2472 }, // U2472 # CIRCLED NUMBER NINETEEN
++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0028, 0, 0, 0}, 0x005b }, // bracketleft
++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x002d, 0, 0, 0}, 0x007b }, // braceleft
++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0030, 0x0029, 0, 0}, 0x24ea }, // U24EA # CIRCLED DIGIT ZERO
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0031, 0x0000, 0x0029, 0}, 0x2472 }, // U2472 # CIRCLED NUMBER NINETEEN
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0031, 0x0000, 0x0029, 0}, 0x246e }, // U246E # CIRCLED NUMBER FIFTEEN
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0031, 0x0000, 0x0029, 0}, 0x2469 }, // U2469 # CIRCLED NUMBER TEN
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0031, 0x0000, 0x0029, 0}, 0x246c }, // U246C # CIRCLED NUMBER THIRTEEN
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0031, 0x0000, 0x0029, 0}, 0x246b }, // U246B # CIRCLED NUMBER TWELVE
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0031, 0x0000, 0x0029, 0}, 0x2470 }, // U2470 # CIRCLED NUMBER SEVENTEEN
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0031, 0x0000, 0x0029, 0}, 0x246a }, // U246A # CIRCLED NUMBER ELEVEN
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0031, 0x0000, 0x0029, 0}, 0x246d }, // U246D # CIRCLED NUMBER FOURTEEN
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0031, 0x0000, 0x0029, 0}, 0x2471 }, // U2471 # CIRCLED NUMBER EIGHTEEN
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0031, 0x0000, 0x0029, 0}, 0x246f }, // U246F # CIRCLED NUMBER SIXTEEN
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0031, 0x0000, 0x0029, 0}, 0x246b }, // U246B # CIRCLED NUMBER TWELVE
++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0031, 0x0029, 0, 0}, 0x2460 }, // U2460 # CIRCLED DIGIT ONE
++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0031, 0x0030, 0x0029, 0}, 0x2469 }, // U2469 # CIRCLED NUMBER TEN
++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0031, 0x0031, 0x0029, 0}, 0x246a }, // U246A # CIRCLED NUMBER ELEVEN
++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0031, 0x0032, 0x0029, 0}, 0x246b }, // U246B # CIRCLED NUMBER TWELVE
++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0031, 0x0033, 0x0029, 0}, 0x246c }, // U246C # CIRCLED NUMBER THIRTEEN
++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0031, 0x0034, 0x0029, 0}, 0x246d }, // U246D # CIRCLED NUMBER FOURTEEN
++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0031, 0x0035, 0x0029, 0}, 0x246e }, // U246E # CIRCLED NUMBER FIFTEEN
++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0031, 0x0036, 0x0029, 0}, 0x246f }, // U246F # CIRCLED NUMBER SIXTEEN
++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0031, 0x0037, 0x0029, 0}, 0x2470 }, // U2470 # CIRCLED NUMBER SEVENTEEN
++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0031, 0x0038, 0x0029, 0}, 0x2471 }, // U2471 # CIRCLED NUMBER EIGHTEEN
++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0031, 0x0039, 0x0029, 0}, 0x2472 }, // U2472 # CIRCLED NUMBER NINETEEN
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0032, 0x0000, 0x0029, 0}, 0x2473 }, // U2473 # CIRCLED NUMBER TWENTY
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0032, 0x0000, 0x0029, 0}, 0x3257 }, // U3257 # CIRCLED NUMBER TWENTY SEVEN
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0032, 0x0000, 0x0029, 0}, 0x3259 }, // U3259 # CIRCLED NUMBER TWENTY NINE
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0032, 0x0000, 0x0029, 0}, 0x3258 }, // U3258 # CIRCLED NUMBER TWENTY EIGHT
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0032, 0x0000, 0x0029, 0}, 0x3253 }, // U3253 # CIRCLED NUMBER TWENTY THREE
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0032, 0x0000, 0x0029, 0}, 0x3255 }, // U3255 # CIRCLED NUMBER TWENTY FIVE
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0032, 0x0000, 0x0029, 0}, 0x3252 }, // U3252 # CIRCLED NUMBER TWENTY TWO
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0032, 0x0000, 0x0029, 0}, 0x3256 }, // U3256 # CIRCLED NUMBER TWENTY SIX
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0032, 0x0000, 0x0029, 0}, 0x3251 }, // U3251 # CIRCLED NUMBER TWENTY ONE
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0032, 0x0000, 0x0029, 0}, 0x3252 }, // U3252 # CIRCLED NUMBER TWENTY TWO
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0032, 0x0000, 0x0029, 0}, 0x3254 }, // U3254 # CIRCLED NUMBER TWENTY FOUR
++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0032, 0x0029, 0, 0}, 0x2461 }, // U2461 # CIRCLED DIGIT TWO
++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0032, 0x0030, 0x0029, 0}, 0x2473 }, // U2473 # CIRCLED NUMBER TWENTY
++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0032, 0x0031, 0x0029, 0}, 0x3251 }, // U3251 # CIRCLED NUMBER TWENTY ONE
++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0032, 0x0032, 0x0029, 0}, 0x3252 }, // U3252 # CIRCLED NUMBER TWENTY TWO
++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0032, 0x0033, 0x0029, 0}, 0x3253 }, // U3253 # CIRCLED NUMBER TWENTY THREE
++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0032, 0x0034, 0x0029, 0}, 0x3254 }, // U3254 # CIRCLED NUMBER TWENTY FOUR
++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0032, 0x0035, 0x0029, 0}, 0x3255 }, // U3255 # CIRCLED NUMBER TWENTY FIVE
++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0032, 0x0036, 0x0029, 0}, 0x3256 }, // U3256 # CIRCLED NUMBER TWENTY SIX
++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0032, 0x0037, 0x0029, 0}, 0x3257 }, // U3257 # CIRCLED NUMBER TWENTY SEVEN
++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0032, 0x0038, 0x0029, 0}, 0x3258 }, // U3258 # CIRCLED NUMBER TWENTY EIGHT
++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0032, 0x0039, 0x0029, 0}, 0x3259 }, // U3259 # CIRCLED NUMBER TWENTY NINE
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0033, 0x0000, 0x0029, 0}, 0x32b4 }, // U32B4 # CIRCLED NUMBER THIRTY NINE
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0033, 0x0000, 0x0029, 0}, 0x325a }, // U325A # CIRCLED NUMBER THIRTY
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0033, 0x0000, 0x0029, 0}, 0x325b }, // U325B # CIRCLED NUMBER THIRTY ONE
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0033, 0x0000, 0x0029, 0}, 0x32b3 }, // U32B3 # CIRCLED NUMBER THIRTY EIGHT
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0033, 0x0000, 0x0029, 0}, 0x32b2 }, // U32B2 # CIRCLED NUMBER THIRTY SEVEN
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0033, 0x0000, 0x0029, 0}, 0x325c }, // U325C # CIRCLED NUMBER THIRTY TWO
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0033, 0x0000, 0x0029, 0}, 0x325c }, // U325C # CIRCLED NUMBER THIRTY TWO
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0033, 0x0000, 0x0029, 0}, 0x325f }, // U325F # CIRCLED NUMBER THIRTY FIVE
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0033, 0x0000, 0x0029, 0}, 0x325e }, // U325E # CIRCLED NUMBER THIRTY FOUR
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0033, 0x0000, 0x0029, 0}, 0x32b1 }, // U32B1 # CIRCLED NUMBER THIRTY SIX
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0033, 0x0000, 0x0029, 0}, 0x325d }, // U325D # CIRCLED NUMBER THIRTY THREE
++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0033, 0x0029, 0, 0}, 0x2462 }, // U2462 # CIRCLED DIGIT THREE
++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0033, 0x0030, 0x0029, 0}, 0x325a }, // U325A # CIRCLED NUMBER THIRTY
++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0033, 0x0031, 0x0029, 0}, 0x325b }, // U325B # CIRCLED NUMBER THIRTY ONE
++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0033, 0x0032, 0x0029, 0}, 0x325c }, // U325C # CIRCLED NUMBER THIRTY TWO
++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0033, 0x0033, 0x0029, 0}, 0x325d }, // U325D # CIRCLED NUMBER THIRTY THREE
++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0033, 0x0034, 0x0029, 0}, 0x325e }, // U325E # CIRCLED NUMBER THIRTY FOUR
++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0033, 0x0035, 0x0029, 0}, 0x325f }, // U325F # CIRCLED NUMBER THIRTY FIVE
++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0033, 0x0036, 0x0029, 0}, 0x32b1 }, // U32B1 # CIRCLED NUMBER THIRTY SIX
++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0033, 0x0037, 0x0029, 0}, 0x32b2 }, // U32B2 # CIRCLED NUMBER THIRTY SEVEN
++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0033, 0x0038, 0x0029, 0}, 0x32b3 }, // U32B3 # CIRCLED NUMBER THIRTY EIGHT
++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0033, 0x0039, 0x0029, 0}, 0x32b4 }, // U32B4 # CIRCLED NUMBER THIRTY NINE
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0034, 0x0000, 0x0029, 0}, 0x32b7 }, // U32B7 # CIRCLED NUMBER FORTY TWO
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0034, 0x0000, 0x0029, 0}, 0x32b5 }, // U32B5 # CIRCLED NUMBER FORTY
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0034, 0x0000, 0x0029, 0}, 0x32b6 }, // U32B6 # CIRCLED NUMBER FORTY ONE
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0034, 0x0000, 0x0029, 0}, 0x32bc }, // U32BC # CIRCLED NUMBER FORTY SEVEN
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0034, 0x0000, 0x0029, 0}, 0x32b7 }, // U32B7 # CIRCLED NUMBER FORTY TWO
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0034, 0x0000, 0x0029, 0}, 0x32b9 }, // U32B9 # CIRCLED NUMBER FORTY FOUR
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0034, 0x0000, 0x0029, 0}, 0x32b8 }, // U32B8 # CIRCLED NUMBER FORTY THREE
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0034, 0x0000, 0x0029, 0}, 0x32bb }, // U32BB # CIRCLED NUMBER FORTY SIX
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0034, 0x0000, 0x0029, 0}, 0x32be }, // U32BE # CIRCLED NUMBER FORTY NINE
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0034, 0x0000, 0x0029, 0}, 0x32ba }, // U32BA # CIRCLED NUMBER FORTY FIVE
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0034, 0x0000, 0x0029, 0}, 0x32bd }, // U32BD # CIRCLED NUMBER FORTY EIGHT
++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0034, 0x0029, 0, 0}, 0x2463 }, // U2463 # CIRCLED DIGIT FOUR
++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0034, 0x0030, 0x0029, 0}, 0x32b5 }, // U32B5 # CIRCLED NUMBER FORTY
++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0034, 0x0031, 0x0029, 0}, 0x32b6 }, // U32B6 # CIRCLED NUMBER FORTY ONE
++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0034, 0x0032, 0x0029, 0}, 0x32b7 }, // U32B7 # CIRCLED NUMBER FORTY TWO
++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0034, 0x0033, 0x0029, 0}, 0x32b8 }, // U32B8 # CIRCLED NUMBER FORTY THREE
++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0034, 0x0034, 0x0029, 0}, 0x32b9 }, // U32B9 # CIRCLED NUMBER FORTY FOUR
++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0034, 0x0035, 0x0029, 0}, 0x32ba }, // U32BA # CIRCLED NUMBER FORTY FIVE
++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0034, 0x0036, 0x0029, 0}, 0x32bb }, // U32BB # CIRCLED NUMBER FORTY SIX
++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0034, 0x0037, 0x0029, 0}, 0x32bc }, // U32BC # CIRCLED NUMBER FORTY SEVEN
++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0034, 0x0038, 0x0029, 0}, 0x32bd }, // U32BD # CIRCLED NUMBER FORTY EIGHT
++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0034, 0x0039, 0x0029, 0}, 0x32be }, // U32BE # CIRCLED NUMBER FORTY NINE
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0035, 0x0000, 0x0029, 0}, 0x32bf }, // U32BF # CIRCLED NUMBER FIFTY
++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0035, 0x0029, 0, 0}, 0x2464 }, // U2464 # CIRCLED DIGIT FIVE
++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0035, 0x0030, 0x0029, 0}, 0x32bf }, // U32BF # CIRCLED NUMBER FIFTY
++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0036, 0x0029, 0, 0}, 0x2465 }, // U2465 # CIRCLED DIGIT SIX
++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0037, 0x0029, 0, 0}, 0x2466 }, // U2466 # CIRCLED DIGIT SEVEN
++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0038, 0x0029, 0, 0}, 0x2467 }, // U2467 # CIRCLED DIGIT EIGHT
++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0039, 0x0029, 0, 0}, 0x2468 }, // U2468 # CIRCLED DIGIT NINE
++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0041, 0x0029, 0, 0}, 0x24b6 }, // U24B6 # CIRCLED LATIN CAPITAL LETTER A
++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0042, 0x0029, 0, 0}, 0x24b7 }, // U24B7 # CIRCLED LATIN CAPITAL LETTER B
++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0043, 0x0029, 0, 0}, 0x24b8 }, // U24B8 # CIRCLED LATIN CAPITAL LETTER C
++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0044, 0x0029, 0, 0}, 0x24b9 }, // U24B9 # CIRCLED LATIN CAPITAL LETTER D
++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0045, 0x0029, 0, 0}, 0x24ba }, // U24BA # CIRCLED LATIN CAPITAL LETTER E
++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0046, 0x0029, 0, 0}, 0x24bb }, // U24BB # CIRCLED LATIN CAPITAL LETTER F
++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0047, 0x0029, 0, 0}, 0x24bc }, // U24BC # CIRCLED LATIN CAPITAL LETTER G
++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0048, 0x0029, 0, 0}, 0x24bd }, // U24BD # CIRCLED LATIN CAPITAL LETTER H
++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0049, 0x0029, 0, 0}, 0x24be }, // U24BE # CIRCLED LATIN CAPITAL LETTER I
++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x004a, 0x0029, 0, 0}, 0x24bf }, // U24BF # CIRCLED LATIN CAPITAL LETTER J
++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x004b, 0x0029, 0, 0}, 0x24c0 }, // U24C0 # CIRCLED LATIN CAPITAL LETTER K
++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x004c, 0x0029, 0, 0}, 0x24c1 }, // U24C1 # CIRCLED LATIN CAPITAL LETTER L
++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x004d, 0x0029, 0, 0}, 0x24c2 }, // U24C2 # CIRCLED LATIN CAPITAL LETTER M
++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x004e, 0x0029, 0, 0}, 0x24c3 }, // U24C3 # CIRCLED LATIN CAPITAL LETTER N
++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x004f, 0x0029, 0, 0}, 0x24c4 }, // U24C4 # CIRCLED LATIN CAPITAL LETTER O
++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0050, 0x0029, 0, 0}, 0x24c5 }, // U24C5 # CIRCLED LATIN CAPITAL LETTER P
++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0051, 0x0029, 0, 0}, 0x24c6 }, // U24C6 # CIRCLED LATIN CAPITAL LETTER Q
++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0052, 0x0029, 0, 0}, 0x24c7 }, // U24C7 # CIRCLED LATIN CAPITAL LETTER R
++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0053, 0x0029, 0, 0}, 0x24c8 }, // U24C8 # CIRCLED LATIN CAPITAL LETTER S
++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0054, 0x0029, 0, 0}, 0x24c9 }, // U24C9 # CIRCLED LATIN CAPITAL LETTER T
++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0055, 0x0029, 0, 0}, 0x24ca }, // U24CA # CIRCLED LATIN CAPITAL LETTER U
++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0056, 0x0029, 0, 0}, 0x24cb }, // U24CB # CIRCLED LATIN CAPITAL LETTER V
++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0057, 0x0029, 0, 0}, 0x24cc }, // U24CC # CIRCLED LATIN CAPITAL LETTER W
++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0058, 0x0029, 0, 0}, 0x24cd }, // U24CD # CIRCLED LATIN CAPITAL LETTER X
++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0059, 0x0029, 0, 0}, 0x24ce }, // U24CE # CIRCLED LATIN CAPITAL LETTER Y
++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x005a, 0x0029, 0, 0}, 0x24cf }, // U24CF # CIRCLED LATIN CAPITAL LETTER Z
++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0061, 0x0029, 0, 0}, 0x24d0 }, // U24D0 # CIRCLED LATIN SMALL LETTER A
++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0062, 0x0029, 0, 0}, 0x24d1 }, // U24D1 # CIRCLED LATIN SMALL LETTER B
++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0063, 0x0029, 0, 0}, 0x24d2 }, // U24D2 # CIRCLED LATIN SMALL LETTER C
++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0064, 0x0029, 0, 0}, 0x24d3 }, // U24D3 # CIRCLED LATIN SMALL LETTER D
++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0065, 0x0029, 0, 0}, 0x24d4 }, // U24D4 # CIRCLED LATIN SMALL LETTER E
++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0066, 0x0029, 0, 0}, 0x24d5 }, // U24D5 # CIRCLED LATIN SMALL LETTER F
++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0067, 0x0029, 0, 0}, 0x24d6 }, // U24D6 # CIRCLED LATIN SMALL LETTER G
++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0068, 0x0029, 0, 0}, 0x24d7 }, // U24D7 # CIRCLED LATIN SMALL LETTER H
++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0069, 0x0029, 0, 0}, 0x24d8 }, // U24D8 # CIRCLED LATIN SMALL LETTER I
++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x006a, 0x0029, 0, 0}, 0x24d9 }, // U24D9 # CIRCLED LATIN SMALL LETTER J
++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x006b, 0x0029, 0, 0}, 0x24da }, // U24DA # CIRCLED LATIN SMALL LETTER K
++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x006c, 0x0029, 0, 0}, 0x24db }, // U24DB # CIRCLED LATIN SMALL LETTER L
++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x006d, 0x0029, 0, 0}, 0x24dc }, // U24DC # CIRCLED LATIN SMALL LETTER M
++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x006e, 0x0029, 0, 0}, 0x24dd }, // U24DD # CIRCLED LATIN SMALL LETTER N
++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x006f, 0x0029, 0, 0}, 0x24de }, // U24DE # CIRCLED LATIN SMALL LETTER O
++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0070, 0x0029, 0, 0}, 0x24df }, // U24DF # CIRCLED LATIN SMALL LETTER P
++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0071, 0x0029, 0, 0}, 0x24e0 }, // U24E0 # CIRCLED LATIN SMALL LETTER Q
++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0072, 0x0029, 0, 0}, 0x24e1 }, // U24E1 # CIRCLED LATIN SMALL LETTER R
++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0073, 0x0029, 0, 0}, 0x24e2 }, // U24E2 # CIRCLED LATIN SMALL LETTER S
++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0074, 0x0029, 0, 0}, 0x24e3 }, // U24E3 # CIRCLED LATIN SMALL LETTER T
++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0075, 0x0029, 0, 0}, 0x24e4 }, // U24E4 # CIRCLED LATIN SMALL LETTER U
++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0076, 0x0029, 0, 0}, 0x24e5 }, // U24E5 # CIRCLED LATIN SMALL LETTER V
++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0077, 0x0029, 0, 0}, 0x24e6 }, // U24E6 # CIRCLED LATIN SMALL LETTER W
++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0078, 0x0029, 0, 0}, 0x24e7 }, // U24E7 # CIRCLED LATIN SMALL LETTER X
++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0079, 0x0029, 0, 0}, 0x24e8 }, // U24E8 # CIRCLED LATIN SMALL LETTER Y
++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x007a, 0x0029, 0, 0}, 0x24e9 }, // U24E9 # CIRCLED LATIN SMALL LETTER Z
++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0391, 0, 0, 0}, 0x1f09 }, // U1F09 # GREEK CAPITAL LETTER ALPHA WITH DASIA
++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0395, 0, 0, 0}, 0x1f19 }, // U1F19 # GREEK CAPITAL LETTER EPSILON WITH DASIA
++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0397, 0, 0, 0}, 0x1f29 }, // U1F29 # GREEK CAPITAL LETTER ETA WITH DASIA
++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0399, 0, 0, 0}, 0x1f39 }, // U1F39 # GREEK CAPITAL LETTER IOTA WITH DASIA
++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x039f, 0, 0, 0}, 0x1f49 }, // U1F49 # GREEK CAPITAL LETTER OMICRON WITH DASIA
++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x03a1, 0, 0, 0}, 0x1fec }, // U1FEC # GREEK CAPITAL LETTER RHO WITH DASIA
++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x03a5, 0, 0, 0}, 0x1f59 }, // U1F59 # GREEK CAPITAL LETTER UPSILON WITH DASIA
++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x03a9, 0, 0, 0}, 0x1f69 }, // U1F69 # GREEK CAPITAL LETTER OMEGA WITH DASIA
++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x03b1, 0, 0, 0}, 0x1f01 }, // U1F01 # GREEK SMALL LETTER ALPHA WITH DASIA
++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x03b5, 0, 0, 0}, 0x1f11 }, // U1F11 # GREEK SMALL LETTER EPSILON WITH DASIA
++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x03b7, 0, 0, 0}, 0x1f21 }, // U1F21 # GREEK SMALL LETTER ETA WITH DASIA
++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x03b9, 0, 0, 0}, 0x1f31 }, // U1F31 # GREEK SMALL LETTER IOTA WITH DASIA
++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x03bf, 0, 0, 0}, 0x1f41 }, // U1F41 # GREEK SMALL LETTER OMICRON WITH DASIA
++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x03c1, 0, 0, 0}, 0x1fe5 }, // U1FE5 # GREEK SMALL LETTER RHO WITH DASIA
++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x03c5, 0, 0, 0}, 0x1f51 }, // U1F51 # GREEK SMALL LETTER UPSILON WITH DASIA
++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x03c9, 0, 0, 0}, 0x1f61 }, // U1F61 # GREEK SMALL LETTER OMEGA WITH DASIA
++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x1100, 0x0029, 0, 0}, 0x3260 }, // U3260 # CIRCLED HANGUL KIYEOK
++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x1100, 0x1161, 0x0029, 0}, 0x326e }, // U326E # CIRCLED HANGUL KIYEOK A
++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x1102, 0x0029, 0, 0}, 0x3261 }, // U3261 # CIRCLED HANGUL NIEUN
++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x1102, 0x1161, 0x0029, 0}, 0x326f }, // U326F # CIRCLED HANGUL NIEUN A
++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x1103, 0x0029, 0, 0}, 0x3262 }, // U3262 # CIRCLED HANGUL TIKEUT
++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x1103, 0x1161, 0x0029, 0}, 0x3270 }, // U3270 # CIRCLED HANGUL TIKEUT A
++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x1105, 0x0029, 0, 0}, 0x3263 }, // U3263 # CIRCLED HANGUL RIEUL
++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x1105, 0x1161, 0x0029, 0}, 0x3271 }, // U3271 # CIRCLED HANGUL RIEUL A
++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x1106, 0x0029, 0, 0}, 0x3264 }, // U3264 # CIRCLED HANGUL MIEUM
++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x1106, 0x1161, 0x0029, 0}, 0x3272 }, // U3272 # CIRCLED HANGUL MIEUM A
++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x1107, 0x0029, 0, 0}, 0x3265 }, // U3265 # CIRCLED HANGUL PIEUP
++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x1107, 0x1161, 0x0029, 0}, 0x3273 }, // U3273 # CIRCLED HANGUL PIEUP A
++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x1109, 0x0029, 0, 0}, 0x3266 }, // U3266 # CIRCLED HANGUL SIOS
++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x1109, 0x1161, 0x0029, 0}, 0x3274 }, // U3274 # CIRCLED HANGUL SIOS A
++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x110b, 0x0029, 0, 0}, 0x3267 }, // U3267 # CIRCLED HANGUL IEUNG
++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x110b, 0x1161, 0x0029, 0}, 0x3275 }, // U3275 # CIRCLED HANGUL IEUNG A
++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x110c, 0x0029, 0, 0}, 0x3268 }, // U3268 # CIRCLED HANGUL CIEUC
++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x110c, 0x1161, 0x0029, 0}, 0x3276 }, // U3276 # CIRCLED HANGUL CIEUC A
++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x110e, 0x0029, 0, 0}, 0x3269 }, // U3269 # CIRCLED HANGUL CHIEUCH
++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x110e, 0x1161, 0x0029, 0}, 0x3277 }, // U3277 # CIRCLED HANGUL CHIEUCH A
++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x110f, 0x0029, 0, 0}, 0x326a }, // U326A # CIRCLED HANGUL KHIEUKH
++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x110f, 0x1161, 0x0029, 0}, 0x3278 }, // U3278 # CIRCLED HANGUL KHIEUKH A
++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x1110, 0x0029, 0, 0}, 0x326b }, // U326B # CIRCLED HANGUL THIEUTH
++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x1110, 0x1161, 0x0029, 0}, 0x3279 }, // U3279 # CIRCLED HANGUL THIEUTH A
++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x1111, 0x0029, 0, 0}, 0x326c }, // U326C # CIRCLED HANGUL PHIEUPH
++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x1111, 0x1161, 0x0029, 0}, 0x327a }, // U327A # CIRCLED HANGUL PHIEUPH A
++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x1112, 0x0029, 0, 0}, 0x326d }, // U326D # CIRCLED HANGUL HIEUH
++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x1112, 0x1161, 0x0029, 0}, 0x327b }, // U327B # CIRCLED HANGUL HIEUH A
++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x30a2, 0x0029, 0, 0}, 0x32d0 }, // U32D0 # CIRCLED KATAKANA A
++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x30a4, 0x0029, 0, 0}, 0x32d1 }, // U32D1 # CIRCLED KATAKANA I
++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x30a6, 0x0029, 0, 0}, 0x32d2 }, // U32D2 # CIRCLED KATAKANA U
++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x30a8, 0x0029, 0, 0}, 0x32d3 }, // U32D3 # CIRCLED KATAKANA E
++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x30aa, 0x0029, 0, 0}, 0x32d4 }, // U32D4 # CIRCLED KATAKANA O
++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x30ab, 0x0029, 0, 0}, 0x32d5 }, // U32D5 # CIRCLED KATAKANA KA
++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x30ad, 0x0029, 0, 0}, 0x32d6 }, // U32D6 # CIRCLED KATAKANA KI
++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x30af, 0x0029, 0, 0}, 0x32d7 }, // U32D7 # CIRCLED KATAKANA KU
++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x30b1, 0x0029, 0, 0}, 0x32d8 }, // U32D8 # CIRCLED KATAKANA KE
++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x30b3, 0x0029, 0, 0}, 0x32d9 }, // U32D9 # CIRCLED KATAKANA KO
++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x30b5, 0x0029, 0, 0}, 0x32da }, // U32DA # CIRCLED KATAKANA SA
++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x30b7, 0x0029, 0, 0}, 0x32db }, // U32DB # CIRCLED KATAKANA SI
++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x30b9, 0x0029, 0, 0}, 0x32dc }, // U32DC # CIRCLED KATAKANA SU
++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x30bb, 0x0029, 0, 0}, 0x32dd }, // U32DD # CIRCLED KATAKANA SE
++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x30bd, 0x0029, 0, 0}, 0x32de }, // U32DE # CIRCLED KATAKANA SO
++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x30bf, 0x0029, 0, 0}, 0x32df }, // U32DF # CIRCLED KATAKANA TA
++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x30c1, 0x0029, 0, 0}, 0x32e0 }, // U32E0 # CIRCLED KATAKANA TI
++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x30c4, 0x0029, 0, 0}, 0x32e1 }, // U32E1 # CIRCLED KATAKANA TU
++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x30c6, 0x0029, 0, 0}, 0x32e2 }, // U32E2 # CIRCLED KATAKANA TE
++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x30c8, 0x0029, 0, 0}, 0x32e3 }, // U32E3 # CIRCLED KATAKANA TO
++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x30ca, 0x0029, 0, 0}, 0x32e4 }, // U32E4 # CIRCLED KATAKANA NA
++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x30cb, 0x0029, 0, 0}, 0x32e5 }, // U32E5 # CIRCLED KATAKANA NI
++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x30cc, 0x0029, 0, 0}, 0x32e6 }, // U32E6 # CIRCLED KATAKANA NU
++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x30cd, 0x0029, 0, 0}, 0x32e7 }, // U32E7 # CIRCLED KATAKANA NE
++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x30ce, 0x0029, 0, 0}, 0x32e8 }, // U32E8 # CIRCLED KATAKANA NO
++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x30cf, 0x0029, 0, 0}, 0x32e9 }, // U32E9 # CIRCLED KATAKANA HA
++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x30d2, 0x0029, 0, 0}, 0x32ea }, // U32EA # CIRCLED KATAKANA HI
++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x30d5, 0x0029, 0, 0}, 0x32eb }, // U32EB # CIRCLED KATAKANA HU
++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x30d8, 0x0029, 0, 0}, 0x32ec }, // U32EC # CIRCLED KATAKANA HE
++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x30db, 0x0029, 0, 0}, 0x32ed }, // U32ED # CIRCLED KATAKANA HO
++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x30de, 0x0029, 0, 0}, 0x32ee }, // U32EE # CIRCLED KATAKANA MA
++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x30df, 0x0029, 0, 0}, 0x32ef }, // U32EF # CIRCLED KATAKANA MI
++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x30e0, 0x0029, 0, 0}, 0x32f0 }, // U32F0 # CIRCLED KATAKANA MU
++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x30e1, 0x0029, 0, 0}, 0x32f1 }, // U32F1 # CIRCLED KATAKANA ME
++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x30e2, 0x0029, 0, 0}, 0x32f2 }, // U32F2 # CIRCLED KATAKANA MO
++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x30e4, 0x0029, 0, 0}, 0x32f3 }, // U32F3 # CIRCLED KATAKANA YA
++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x30e6, 0x0029, 0, 0}, 0x32f4 }, // U32F4 # CIRCLED KATAKANA YU
++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x30e8, 0x0029, 0, 0}, 0x32f5 }, // U32F5 # CIRCLED KATAKANA YO
++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x30e9, 0x0029, 0, 0}, 0x32f6 }, // U32F6 # CIRCLED KATAKANA RA
++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x30ea, 0x0029, 0, 0}, 0x32f7 }, // U32F7 # CIRCLED KATAKANA RI
++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x30eb, 0x0029, 0, 0}, 0x32f8 }, // U32F8 # CIRCLED KATAKANA RU
++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x30ec, 0x0029, 0, 0}, 0x32f9 }, // U32F9 # CIRCLED KATAKANA RE
++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x30ed, 0x0029, 0, 0}, 0x32fa }, // U32FA # CIRCLED KATAKANA RO
++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x30ef, 0x0029, 0, 0}, 0x32fb }, // U32FB # CIRCLED KATAKANA WA
++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x30f0, 0x0029, 0, 0}, 0x32fc }, // U32FC # CIRCLED KATAKANA WI
++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x30f1, 0x0029, 0, 0}, 0x32fd }, // U32FD # CIRCLED KATAKANA WE
++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x30f2, 0x0029, 0, 0}, 0x32fe }, // U32FE # CIRCLED KATAKANA WO
++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x4e00, 0x0029, 0, 0}, 0x3280 }, // U3280 # CIRCLED IDEOGRAPH ONE
++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x4e03, 0x0029, 0, 0}, 0x3286 }, // U3286 # CIRCLED IDEOGRAPH SEVEN
++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x4e09, 0x0029, 0, 0}, 0x3282 }, // U3282 # CIRCLED IDEOGRAPH THREE
++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x4e0a, 0x0029, 0, 0}, 0x32a4 }, // U32A4 # CIRCLED IDEOGRAPH HIGH
++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x4e0b, 0x0029, 0, 0}, 0x32a6 }, // U32A6 # CIRCLED IDEOGRAPH LOW
++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x4e2d, 0x0029, 0, 0}, 0x32a5 }, // U32A5 # CIRCLED IDEOGRAPH CENTRE
++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x4e5d, 0x0029, 0, 0}, 0x3288 }, // U3288 # CIRCLED IDEOGRAPH NINE
++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x4e8c, 0x0029, 0, 0}, 0x3281 }, // U3281 # CIRCLED IDEOGRAPH TWO
++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x4e94, 0x0029, 0, 0}, 0x3284 }, // U3284 # CIRCLED IDEOGRAPH FIVE
++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x4f01, 0x0029, 0, 0}, 0x32ad }, // U32AD # CIRCLED IDEOGRAPH ENTERPRISE
++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x4f11, 0x0029, 0, 0}, 0x32a1 }, // U32A1 # CIRCLED IDEOGRAPH REST
++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x512a, 0x0029, 0, 0}, 0x329d }, // U329D # CIRCLED IDEOGRAPH EXCELLENT
++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x516b, 0x0029, 0, 0}, 0x3287 }, // U3287 # CIRCLED IDEOGRAPH EIGHT
++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x516d, 0x0029, 0, 0}, 0x3285 }, // U3285 # CIRCLED IDEOGRAPH SIX
++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x5199, 0x0029, 0, 0}, 0x32a2 }, // U32A2 # CIRCLED IDEOGRAPH COPY
++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x52b4, 0x0029, 0, 0}, 0x3298 }, // U3298 # CIRCLED IDEOGRAPH LABOR
++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x533b, 0x0029, 0, 0}, 0x32a9 }, // U32A9 # CIRCLED IDEOGRAPH MEDICINE
++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x5341, 0x0029, 0, 0}, 0x3289 }, // U3289 # CIRCLED IDEOGRAPH TEN
++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x5354, 0x0029, 0, 0}, 0x32af }, // U32AF # CIRCLED IDEOGRAPH ALLIANCE
++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x5370, 0x0029, 0, 0}, 0x329e }, // U329E # CIRCLED IDEOGRAPH PRINT
++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x53f3, 0x0029, 0, 0}, 0x32a8 }, // U32A8 # CIRCLED IDEOGRAPH RIGHT
++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x540d, 0x0029, 0, 0}, 0x3294 }, // U3294 # CIRCLED IDEOGRAPH NAME
++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x56db, 0x0029, 0, 0}, 0x3283 }, // U3283 # CIRCLED IDEOGRAPH FOUR
++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x571f, 0x0029, 0, 0}, 0x328f }, // U328F # CIRCLED IDEOGRAPH EARTH
++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x591c, 0x0029, 0, 0}, 0x32b0 }, // U32B0 # CIRCLED IDEOGRAPH NIGHT
++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x5973, 0x0029, 0, 0}, 0x329b }, // U329B # CIRCLED IDEOGRAPH FEMALE
++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x5b66, 0x0029, 0, 0}, 0x32ab }, // U32AB # CIRCLED IDEOGRAPH STUDY
++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x5b97, 0x0029, 0, 0}, 0x32aa }, // U32AA # CIRCLED IDEOGRAPH RELIGION
++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x5de6, 0x0029, 0, 0}, 0x32a7 }, // U32A7 # CIRCLED IDEOGRAPH LEFT
++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x65e5, 0x0029, 0, 0}, 0x3290 }, // U3290 # CIRCLED IDEOGRAPH SUN
++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x6708, 0x0029, 0, 0}, 0x328a }, // U328A # CIRCLED IDEOGRAPH MOON
++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x6709, 0x0029, 0, 0}, 0x3292 }, // U3292 # CIRCLED IDEOGRAPH HAVE
++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x6728, 0x0029, 0, 0}, 0x328d }, // U328D # CIRCLED IDEOGRAPH WOOD
++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x682a, 0x0029, 0, 0}, 0x3291 }, // U3291 # CIRCLED IDEOGRAPH STOCK
++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x6b63, 0x0029, 0, 0}, 0x32a3 }, // U32A3 # CIRCLED IDEOGRAPH CORRECT
++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x6c34, 0x0029, 0, 0}, 0x328c }, // U328C # CIRCLED IDEOGRAPH WATER
++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x6ce8, 0x0029, 0, 0}, 0x329f }, // U329F # CIRCLED IDEOGRAPH ATTENTION
++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x706b, 0x0029, 0, 0}, 0x328b }, // U328B # CIRCLED IDEOGRAPH FIRE
++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x7279, 0x0029, 0, 0}, 0x3295 }, // U3295 # CIRCLED IDEOGRAPH SPECIAL
++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x7537, 0x0029, 0, 0}, 0x329a }, // U329A # CIRCLED IDEOGRAPH MALE
++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x76e3, 0x0029, 0, 0}, 0x32ac }, // U32AC # CIRCLED IDEOGRAPH SUPERVISE
++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x793e, 0x0029, 0, 0}, 0x3293 }, // U3293 # CIRCLED IDEOGRAPH SOCIETY
++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x795d, 0x0029, 0, 0}, 0x3297 }, // U3297 # CIRCLED IDEOGRAPH CONGRATULATION
++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x79d8, 0x0029, 0, 0}, 0x3299 }, // U3299 # CIRCLED IDEOGRAPH SECRET
++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x8ca1, 0x0029, 0, 0}, 0x3296 }, // U3296 # CIRCLED IDEOGRAPH FINANCIAL
++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x8cc7, 0x0029, 0, 0}, 0x32ae }, // U32AE # CIRCLED IDEOGRAPH RESOURCE
++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x9069, 0x0029, 0, 0}, 0x329c }, // U329C # CIRCLED IDEOGRAPH SUITABLE
++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x91d1, 0x0029, 0, 0}, 0x328e }, // U328E # CIRCLED IDEOGRAPH METAL
++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x9805, 0x0029, 0, 0}, 0x32a0 }, // U32A0 # CIRCLED IDEOGRAPH ITEM
++ { {UNITIZE(Qt::Key_Multi_key), 0x0029, 0x0029, 0, 0, 0}, 0x005d }, // bracketright
++ { {UNITIZE(Qt::Key_Multi_key), 0x0029, 0x002d, 0, 0, 0}, 0x007d }, // braceright
++ { {UNITIZE(Qt::Key_Multi_key), 0x0029, 0x0391, 0, 0, 0}, 0x1f08 }, // U1F08 # GREEK CAPITAL LETTER ALPHA WITH PSILI
++ { {UNITIZE(Qt::Key_Multi_key), 0x0029, 0x0395, 0, 0, 0}, 0x1f18 }, // U1F18 # GREEK CAPITAL LETTER EPSILON WITH PSILI
++ { {UNITIZE(Qt::Key_Multi_key), 0x0029, 0x0397, 0, 0, 0}, 0x1f28 }, // U1F28 # GREEK CAPITAL LETTER ETA WITH PSILI
++ { {UNITIZE(Qt::Key_Multi_key), 0x0029, 0x0399, 0, 0, 0}, 0x1f38 }, // U1F38 # GREEK CAPITAL LETTER IOTA WITH PSILI
++ { {UNITIZE(Qt::Key_Multi_key), 0x0029, 0x039f, 0, 0, 0}, 0x1f48 }, // U1F48 # GREEK CAPITAL LETTER OMICRON WITH PSILI
++ { {UNITIZE(Qt::Key_Multi_key), 0x0029, 0x03a9, 0, 0, 0}, 0x1f68 }, // U1F68 # GREEK CAPITAL LETTER OMEGA WITH PSILI
++ { {UNITIZE(Qt::Key_Multi_key), 0x0029, 0x03b1, 0, 0, 0}, 0x1f00 }, // U1F00 # GREEK SMALL LETTER ALPHA WITH PSILI
++ { {UNITIZE(Qt::Key_Multi_key), 0x0029, 0x03b5, 0, 0, 0}, 0x1f10 }, // U1F10 # GREEK SMALL LETTER EPSILON WITH PSILI
++ { {UNITIZE(Qt::Key_Multi_key), 0x0029, 0x03b7, 0, 0, 0}, 0x1f20 }, // U1F20 # GREEK SMALL LETTER ETA WITH PSILI
++ { {UNITIZE(Qt::Key_Multi_key), 0x0029, 0x03b9, 0, 0, 0}, 0x1f30 }, // U1F30 # GREEK SMALL LETTER IOTA WITH PSILI
++ { {UNITIZE(Qt::Key_Multi_key), 0x0029, 0x03bf, 0, 0, 0}, 0x1f40 }, // U1F40 # GREEK SMALL LETTER OMICRON WITH PSILI
++ { {UNITIZE(Qt::Key_Multi_key), 0x0029, 0x03c1, 0, 0, 0}, 0x1fe4 }, // U1FE4 # GREEK SMALL LETTER RHO WITH PSILI
++ { {UNITIZE(Qt::Key_Multi_key), 0x0029, 0x03c5, 0, 0, 0}, 0x1f50 }, // U1F50 # GREEK SMALL LETTER UPSILON WITH PSILI
++ { {UNITIZE(Qt::Key_Multi_key), 0x0029, 0x03c9, 0, 0, 0}, 0x1f60 }, // U1F60 # GREEK SMALL LETTER OMEGA WITH PSILI
++ { {UNITIZE(Qt::Key_Multi_key), 0x002b, 0x002b, 0, 0, 0}, 0x0023 }, // numbersign
++ { {UNITIZE(Qt::Key_Multi_key), 0x002b, 0x002d, 0, 0, 0}, 0x00b1 }, // plusminus
++ { {UNITIZE(Qt::Key_Multi_key), 0x002b, 0x004f, 0, 0, 0}, 0x01a0 }, // U01A0 # LATIN CAPITAL LETTER O WITH HORN
++ { {UNITIZE(Qt::Key_Multi_key), 0x002b, 0x0055, 0, 0, 0}, 0x01af }, // U01AF # LATIN CAPITAL LETTER U WITH HORN
++ { {UNITIZE(Qt::Key_Multi_key), 0x002b, 0x006f, 0, 0, 0}, 0x01a1 }, // U01A1 # LATIN SMALL LETTER O WITH HORN
++ { {UNITIZE(Qt::Key_Multi_key), 0x002b, 0x0075, 0, 0, 0}, 0x01b0 }, // U01B0 # LATIN SMALL LETTER U WITH HORN
++ { {UNITIZE(Qt::Key_Multi_key), 0x002c, 0x0020, 0, 0, 0}, 0x00b8 }, // cedilla
++ { {UNITIZE(Qt::Key_Multi_key), 0x002c, 0x0022, 0, 0, 0}, 0x201e }, // U201e # DOUBLE LOW-9 QUOTATION MARK
++ { {UNITIZE(Qt::Key_Multi_key), 0x002c, 0x0027, 0, 0, 0}, 0x201a }, // U201a # SINGLE LOW-9 QUOTATION MARK
++ { {UNITIZE(Qt::Key_Multi_key), 0x002c, 0x002d, 0, 0, 0}, 0x00ac }, // U00AC # NOT SIGN
++ { {UNITIZE(Qt::Key_Multi_key), 0x002c, 0x0043, 0, 0, 0}, 0x00c7 }, // U00C7 # LATIN CAPITAL LETTER C WITH CEDILLA
++ { {UNITIZE(Qt::Key_Multi_key), 0x002c, 0x0044, 0, 0, 0}, 0x1e10 }, // U1E10 # LATIN CAPITAL LETTER D WITH CEDILLA
++ { {UNITIZE(Qt::Key_Multi_key), 0x002c, 0x0045, 0, 0, 0}, 0x0228 }, // U0228 # LATIN CAPITAL LETTER E WITH CEDILLA
++ { {UNITIZE(Qt::Key_Multi_key), 0x002c, 0x0047, 0, 0, 0}, 0x0122 }, // U0122 # LATIN CAPITAL LETTER G WITH CEDILLA
++ { {UNITIZE(Qt::Key_Multi_key), 0x002c, 0x0048, 0, 0, 0}, 0x1e28 }, // U1E28 # LATIN CAPITAL LETTER H WITH CEDILLA
++ { {UNITIZE(Qt::Key_Multi_key), 0x002c, 0x004b, 0, 0, 0}, 0x0136 }, // U0136 # LATIN CAPITAL LETTER K WITH CEDILLA
++ { {UNITIZE(Qt::Key_Multi_key), 0x002c, 0x004c, 0, 0, 0}, 0x013b }, // U013B # LATIN CAPITAL LETTER L WITH CEDILLA
++ { {UNITIZE(Qt::Key_Multi_key), 0x002c, 0x004e, 0, 0, 0}, 0x0145 }, // U0145 # LATIN CAPITAL LETTER N WITH CEDILLA
++ { {UNITIZE(Qt::Key_Multi_key), 0x002c, 0x0052, 0, 0, 0}, 0x0156 }, // U0156 # LATIN CAPITAL LETTER R WITH CEDILLA
++ { {UNITIZE(Qt::Key_Multi_key), 0x002c, 0x0053, 0, 0, 0}, 0x015e }, // U015E # LATIN CAPITAL LETTER S WITH CEDILLA
++ { {UNITIZE(Qt::Key_Multi_key), 0x002c, 0x0054, 0, 0, 0}, 0x0162 }, // U0162 # LATIN CAPITAL LETTER T WITH CEDILLA
++ { {UNITIZE(Qt::Key_Multi_key), 0x002c, 0x0063, 0, 0, 0}, 0x00e7 }, // U00E7 # LATIN SMALL LETTER C WITH CEDILLA
++ { {UNITIZE(Qt::Key_Multi_key), 0x002c, 0x0064, 0, 0, 0}, 0x1e11 }, // U1E11 # LATIN SMALL LETTER D WITH CEDILLA
++ { {UNITIZE(Qt::Key_Multi_key), 0x002c, 0x0065, 0, 0, 0}, 0x0229 }, // U0229 # LATIN SMALL LETTER E WITH CEDILLA
++ { {UNITIZE(Qt::Key_Multi_key), 0x002c, 0x0067, 0, 0, 0}, 0x0123 }, // U0123 # LATIN SMALL LETTER G WITH CEDILLA
++ { {UNITIZE(Qt::Key_Multi_key), 0x002c, 0x0068, 0, 0, 0}, 0x1e29 }, // U1E29 # LATIN SMALL LETTER H WITH CEDILLA
++ { {UNITIZE(Qt::Key_Multi_key), 0x002c, 0x006b, 0, 0, 0}, 0x0137 }, // U0137 # LATIN SMALL LETTER K WITH CEDILLA
++ { {UNITIZE(Qt::Key_Multi_key), 0x002c, 0x006c, 0, 0, 0}, 0x013c }, // U013C # LATIN SMALL LETTER L WITH CEDILLA
++ { {UNITIZE(Qt::Key_Multi_key), 0x002c, 0x006e, 0, 0, 0}, 0x0146 }, // U0146 # LATIN SMALL LETTER N WITH CEDILLA
++ { {UNITIZE(Qt::Key_Multi_key), 0x002c, 0x0072, 0, 0, 0}, 0x0157 }, // U0157 # LATIN SMALL LETTER R WITH CEDILLA
++ { {UNITIZE(Qt::Key_Multi_key), 0x002c, 0x0073, 0, 0, 0}, 0x015f }, // U015F # LATIN SMALL LETTER S WITH CEDILLA
++ { {UNITIZE(Qt::Key_Multi_key), 0x002c, 0x0074, 0, 0, 0}, 0x0163 }, // U0163 # LATIN SMALL LETTER T WITH CEDILLA
++ { {UNITIZE(Qt::Key_Multi_key), 0x002d, 0x0020, 0, 0, 0}, 0x007e }, // asciitilde
++ { {UNITIZE(Qt::Key_Multi_key), 0x002d, 0x0028, 0, 0, 0}, 0x007b }, // braceleft
++ { {UNITIZE(Qt::Key_Multi_key), 0x002d, 0x0029, 0, 0, 0}, 0x007d }, // braceright
++ { {UNITIZE(Qt::Key_Multi_key), 0x002d, 0x002c, 0, 0, 0}, 0x00ac }, // U00AC # NOT SIGN
++ { {UNITIZE(Qt::Key_Multi_key), 0x002d, 0x002d, 0x002d, 0, 0}, 0x2014 }, // U2014 # EM DASH
++ { {UNITIZE(Qt::Key_Multi_key), 0x002d, 0x002d, 0x002e, 0, 0}, 0x2013 }, // U2013 # EN DASH
++ { {UNITIZE(Qt::Key_Multi_key), 0x002d, 0x003a, 0, 0, 0}, 0x00f7 }, // U00F7 # DIVISION SIGN
++ { {UNITIZE(Qt::Key_Multi_key), 0x002d, 0x0044, 0, 0, 0}, 0x0110 }, // Dstroke
++ { {UNITIZE(Qt::Key_Multi_key), 0x002d, 0x004c, 0, 0, 0}, 0x00a3 }, // U00a3 # POUND SIGN
++ { {UNITIZE(Qt::Key_Multi_key), 0x002d, 0x0064, 0, 0, 0}, 0x0111 }, // dstroke
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x002e, 0x0000, 0x0053, 0, 0}, 0x1e68 }, // U1E68 # LATIN CAPITAL LETTER S WITH DOT BELOW AND DOT ABOVE
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x002e, 0x0000, 0x0053, 0, 0}, 0x1e64 }, // U1E64 # LATIN CAPITAL LETTER S WITH ACUTE AND DOT ABOVE
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x002e, 0x0000, 0x0073, 0, 0}, 0x1e69 }, // U1E69 # LATIN SMALL LETTER S WITH DOT BELOW AND DOT ABOVE
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x002e, 0x0000, 0x0073, 0, 0}, 0x1e65 }, // U1E65 # LATIN SMALL LETTER S WITH ACUTE AND DOT ABOVE
++ { {UNITIZE(Qt::Key_Multi_key), 0x002e, 0x0021, 0x0053, 0, 0}, 0x1e68 }, // U1E68 # LATIN CAPITAL LETTER S WITH DOT BELOW AND DOT ABOVE
++ { {UNITIZE(Qt::Key_Multi_key), 0x002e, 0x0021, 0x0073, 0, 0}, 0x1e69 }, // U1E69 # LATIN SMALL LETTER S WITH DOT BELOW AND DOT ABOVE
++ { {UNITIZE(Qt::Key_Multi_key), 0x002e, 0x0027, 0x0053, 0, 0}, 0x1e64 }, // U1E64 # LATIN CAPITAL LETTER S WITH ACUTE AND DOT ABOVE
++ { {UNITIZE(Qt::Key_Multi_key), 0x002e, 0x0027, 0x0073, 0, 0}, 0x1e65 }, // U1E65 # LATIN SMALL LETTER S WITH ACUTE AND DOT ABOVE
++ { {UNITIZE(Qt::Key_Multi_key), 0x002e, 0x002e, 0, 0, 0}, 0x00b7 }, // U00B7
++ { {UNITIZE(Qt::Key_Multi_key), 0x002e, 0x003c, 0, 0, 0}, 0x2039 }, // U2039
++ { {UNITIZE(Qt::Key_Multi_key), 0x002e, 0x003e, 0, 0, 0}, 0x203a }, // U203a
++ { {UNITIZE(Qt::Key_Multi_key), 0x002e, 0x0041, 0, 0, 0}, 0x0226 }, // U0226 # LATIN CAPITAL LETTER A WITH DOT ABOVE
++ { {UNITIZE(Qt::Key_Multi_key), 0x002e, 0x0042, 0, 0, 0}, 0x1e02 }, // U1E02 # LATIN CAPITAL LETTER B WITH DOT ABOVE
++ { {UNITIZE(Qt::Key_Multi_key), 0x002e, 0x0043, 0, 0, 0}, 0x010a }, // U010A # LATIN CAPITAL LETTER C WITH DOT ABOVE
++ { {UNITIZE(Qt::Key_Multi_key), 0x002e, 0x0044, 0, 0, 0}, 0x1e0a }, // U1E0A # LATIN CAPITAL LETTER D WITH DOT ABOVE
++ { {UNITIZE(Qt::Key_Multi_key), 0x002e, 0x0045, 0, 0, 0}, 0x0116 }, // U0116 # LATIN CAPITAL LETTER E WITH DOT ABOVE
++ { {UNITIZE(Qt::Key_Multi_key), 0x002e, 0x0046, 0, 0, 0}, 0x1e1e }, // U1E1E # LATIN CAPITAL LETTER F WITH DOT ABOVE
++ { {UNITIZE(Qt::Key_Multi_key), 0x002e, 0x0047, 0, 0, 0}, 0x0120 }, // U0120 # LATIN CAPITAL LETTER G WITH DOT ABOVE
++ { {UNITIZE(Qt::Key_Multi_key), 0x002e, 0x0048, 0, 0, 0}, 0x1e22 }, // U1E22 # LATIN CAPITAL LETTER H WITH DOT ABOVE
++ { {UNITIZE(Qt::Key_Multi_key), 0x002e, 0x0049, 0, 0, 0}, 0x0130 }, // U0130 # LATIN CAPITAL LETTER I WITH DOT ABOVE
++ { {UNITIZE(Qt::Key_Multi_key), 0x002e, 0x004d, 0, 0, 0}, 0x1e40 }, // U1E40 # LATIN CAPITAL LETTER M WITH DOT ABOVE
++ { {UNITIZE(Qt::Key_Multi_key), 0x002e, 0x004e, 0, 0, 0}, 0x1e44 }, // U1E44 # LATIN CAPITAL LETTER N WITH DOT ABOVE
++ { {UNITIZE(Qt::Key_Multi_key), 0x002e, 0x004f, 0, 0, 0}, 0x022e }, // U022E # LATIN CAPITAL LETTER O WITH DOT ABOVE
++ { {UNITIZE(Qt::Key_Multi_key), 0x002e, 0x0050, 0, 0, 0}, 0x1e56 }, // U1E56 # LATIN CAPITAL LETTER P WITH DOT ABOVE
++ { {UNITIZE(Qt::Key_Multi_key), 0x002e, 0x0052, 0, 0, 0}, 0x1e58 }, // U1E58 # LATIN CAPITAL LETTER R WITH DOT ABOVE
++ { {UNITIZE(Qt::Key_Multi_key), 0x002e, 0x0053, 0, 0, 0}, 0x1e60 }, // U1E60 # LATIN CAPITAL LETTER S WITH DOT ABOVE
++ { {UNITIZE(Qt::Key_Multi_key), 0x002e, 0x0054, 0, 0, 0}, 0x1e6a }, // U1E6A # LATIN CAPITAL LETTER T WITH DOT ABOVE
++ { {UNITIZE(Qt::Key_Multi_key), 0x002e, 0x0057, 0, 0, 0}, 0x1e86 }, // U1E86 # LATIN CAPITAL LETTER W WITH DOT ABOVE
++ { {UNITIZE(Qt::Key_Multi_key), 0x002e, 0x0058, 0, 0, 0}, 0x1e8a }, // U1E8A # LATIN CAPITAL LETTER X WITH DOT ABOVE
++ { {UNITIZE(Qt::Key_Multi_key), 0x002e, 0x0059, 0, 0, 0}, 0x1e8e }, // U1E8E # LATIN CAPITAL LETTER Y WITH DOT ABOVE
++ { {UNITIZE(Qt::Key_Multi_key), 0x002e, 0x005a, 0, 0, 0}, 0x017b }, // U017B # LATIN CAPITAL LETTER Z WITH DOT ABOVE
++ { {UNITIZE(Qt::Key_Multi_key), 0x002e, 0x0061, 0, 0, 0}, 0x0227 }, // U0227 # LATIN SMALL LETTER A WITH DOT ABOVE
++ { {UNITIZE(Qt::Key_Multi_key), 0x002e, 0x0062, 0, 0, 0}, 0x1e03 }, // U1E03 # LATIN SMALL LETTER B WITH DOT ABOVE
++ { {UNITIZE(Qt::Key_Multi_key), 0x002e, 0x0063, 0, 0, 0}, 0x010b }, // U010B # LATIN SMALL LETTER C WITH DOT ABOVE
++ { {UNITIZE(Qt::Key_Multi_key), 0x002e, 0x0063, 0x0053, 0, 0}, 0x1e66 }, // U1E66 # LATIN CAPITAL LETTER S WITH CARON AND DOT ABOVE
++ { {UNITIZE(Qt::Key_Multi_key), 0x002e, 0x0063, 0x0073, 0, 0}, 0x1e67 }, // U1E67 # LATIN SMALL LETTER S WITH CARON AND DOT ABOVE
++ { {UNITIZE(Qt::Key_Multi_key), 0x002e, 0x0064, 0, 0, 0}, 0x1e0b }, // U1E0B # LATIN SMALL LETTER D WITH DOT ABOVE
++ { {UNITIZE(Qt::Key_Multi_key), 0x002e, 0x0065, 0, 0, 0}, 0x0117 }, // U0117 # LATIN SMALL LETTER E WITH DOT ABOVE
++ { {UNITIZE(Qt::Key_Multi_key), 0x002e, 0x0066, 0, 0, 0}, 0x1e1f }, // U1E1F # LATIN SMALL LETTER F WITH DOT ABOVE
++ { {UNITIZE(Qt::Key_Multi_key), 0x002e, 0x0067, 0, 0, 0}, 0x0121 }, // U0121 # LATIN SMALL LETTER G WITH DOT ABOVE
++ { {UNITIZE(Qt::Key_Multi_key), 0x002e, 0x0068, 0, 0, 0}, 0x1e23 }, // U1E23 # LATIN SMALL LETTER H WITH DOT ABOVE
++ { {UNITIZE(Qt::Key_Multi_key), 0x002e, 0x006d, 0, 0, 0}, 0x1e41 }, // U1E41 # LATIN SMALL LETTER M WITH DOT ABOVE
++ { {UNITIZE(Qt::Key_Multi_key), 0x002e, 0x006e, 0, 0, 0}, 0x1e45 }, // U1E45 # LATIN SMALL LETTER N WITH DOT ABOVE
++ { {UNITIZE(Qt::Key_Multi_key), 0x002e, 0x006f, 0, 0, 0}, 0x022f }, // U022F # LATIN SMALL LETTER O WITH DOT ABOVE
++ { {UNITIZE(Qt::Key_Multi_key), 0x002e, 0x0070, 0, 0, 0}, 0x1e57 }, // U1E57 # LATIN SMALL LETTER P WITH DOT ABOVE
++ { {UNITIZE(Qt::Key_Multi_key), 0x002e, 0x0072, 0, 0, 0}, 0x1e59 }, // U1E59 # LATIN SMALL LETTER R WITH DOT ABOVE
++ { {UNITIZE(Qt::Key_Multi_key), 0x002e, 0x0073, 0, 0, 0}, 0x1e61 }, // U1E61 # LATIN SMALL LETTER S WITH DOT ABOVE
++ { {UNITIZE(Qt::Key_Multi_key), 0x002e, 0x0074, 0, 0, 0}, 0x1e6b }, // U1E6B # LATIN SMALL LETTER T WITH DOT ABOVE
++ { {UNITIZE(Qt::Key_Multi_key), 0x002e, 0x0077, 0, 0, 0}, 0x1e87 }, // U1E87 # LATIN SMALL LETTER W WITH DOT ABOVE
++ { {UNITIZE(Qt::Key_Multi_key), 0x002e, 0x0078, 0, 0, 0}, 0x1e8b }, // U1E8B # LATIN SMALL LETTER X WITH DOT ABOVE
++ { {UNITIZE(Qt::Key_Multi_key), 0x002e, 0x0079, 0, 0, 0}, 0x1e8f }, // U1E8F # LATIN SMALL LETTER Y WITH DOT ABOVE
++ { {UNITIZE(Qt::Key_Multi_key), 0x002e, 0x007a, 0, 0, 0}, 0x017c }, // U017C # LATIN SMALL LETTER Z WITH DOT ABOVE
++ { {UNITIZE(Qt::Key_Multi_key), 0x002e, 0x00b4, 0x0053, 0, 0}, 0x1e64 }, // U1E64 # LATIN CAPITAL LETTER S WITH ACUTE AND DOT ABOVE
++ { {UNITIZE(Qt::Key_Multi_key), 0x002e, 0x00b4, 0x0073, 0, 0}, 0x1e65 }, // U1E65 # LATIN SMALL LETTER S WITH ACUTE AND DOT ABOVE
++ { {UNITIZE(Qt::Key_Multi_key), 0x002e, 0x015a, 0, 0, 0}, 0x1e64 }, // U1E64 # LATIN CAPITAL LETTER S WITH ACUTE AND DOT ABOVE
++ { {UNITIZE(Qt::Key_Multi_key), 0x002e, 0x015b, 0, 0, 0}, 0x1e65 }, // U1E65 # LATIN SMALL LETTER S WITH ACUTE AND DOT ABOVE
++ { {UNITIZE(Qt::Key_Multi_key), 0x002e, 0x0160, 0, 0, 0}, 0x1e66 }, // U1E66 # LATIN CAPITAL LETTER S WITH CARON AND DOT ABOVE
++ { {UNITIZE(Qt::Key_Multi_key), 0x002e, 0x0161, 0, 0, 0}, 0x1e67 }, // U1E67 # LATIN SMALL LETTER S WITH CARON AND DOT ABOVE
++ { {UNITIZE(Qt::Key_Multi_key), 0x002e, 0x017f, 0, 0, 0}, 0x1e9b }, // U1E9B # LATIN SMALL LETTER LONG S WITH DOT ABOVE
++ { {UNITIZE(Qt::Key_Multi_key), 0x002e, 0x1e62, 0, 0, 0}, 0x1e68 }, // U1E68 # LATIN CAPITAL LETTER S WITH DOT BELOW AND DOT ABOVE
++ { {UNITIZE(Qt::Key_Multi_key), 0x002e, 0x1e63, 0, 0, 0}, 0x1e69 }, // U1E69 # LATIN SMALL LETTER S WITH DOT BELOW AND DOT ABOVE
++ { {UNITIZE(Qt::Key_Multi_key), 0x002e, UNITIZE(Qt::Key_Dead_Acute), 0x0053, 0, 0}, 0x1e64 }, // U1E64 # LATIN CAPITAL LETTER S WITH ACUTE AND DOT ABOVE
++ { {UNITIZE(Qt::Key_Multi_key), 0x002e, UNITIZE(Qt::Key_Dead_Acute), 0x0073, 0, 0}, 0x1e65 }, // U1E65 # LATIN SMALL LETTER S WITH ACUTE AND DOT ABOVE
++ { {UNITIZE(Qt::Key_Multi_key), 0x002e, UNITIZE(Qt::Key_Dead_Caron), 0x0053, 0, 0}, 0x1e66 }, // U1E66 # LATIN CAPITAL LETTER S WITH CARON AND DOT ABOVE
++ { {UNITIZE(Qt::Key_Multi_key), 0x002e, UNITIZE(Qt::Key_Dead_Caron), 0x0073, 0, 0}, 0x1e67 }, // U1E67 # LATIN SMALL LETTER S WITH CARON AND DOT ABOVE
++ { {UNITIZE(Qt::Key_Multi_key), 0x002e, UNITIZE(Qt::Key_Dead_Belowdot), 0x0053, 0, 0}, 0x1e68 }, // U1E68 # LATIN CAPITAL LETTER S WITH DOT BELOW AND DOT ABOVE
++ { {UNITIZE(Qt::Key_Multi_key), 0x002e, UNITIZE(Qt::Key_Dead_Belowdot), 0x0073, 0, 0}, 0x1e69 }, // U1E69 # LATIN SMALL LETTER S WITH DOT BELOW AND DOT ABOVE
++ { {UNITIZE(Qt::Key_Multi_key), 0x002f, 0x002f, 0, 0, 0}, 0x005c }, // backslash
++ { {UNITIZE(Qt::Key_Multi_key), 0x002f, 0x003c, 0, 0, 0}, 0x005c }, // backslash
++ { {UNITIZE(Qt::Key_Multi_key), 0x002f, 0x0043, 0, 0, 0}, 0x20a1 }, // U20a1 # COLON SIGN
++ { {UNITIZE(Qt::Key_Multi_key), 0x002f, 0x0043, 0, 0, 0}, 0x00a2 }, // U00A2 # CENT SIGN
++ { {UNITIZE(Qt::Key_Multi_key), 0x002f, 0x0044, 0, 0, 0}, 0x0110 }, // U0110 # LATIN CAPITAL LETTER D WITH STROKE
++ { {UNITIZE(Qt::Key_Multi_key), 0x002f, 0x0047, 0, 0, 0}, 0x01e4 }, // U01E4 # LATIN CAPITAL LETTER G WITH STROKE
++ { {UNITIZE(Qt::Key_Multi_key), 0x002f, 0x0048, 0, 0, 0}, 0x0126 }, // U0126 # LATIN CAPITAL LETTER H WITH STROKE
++ { {UNITIZE(Qt::Key_Multi_key), 0x002f, 0x0049, 0, 0, 0}, 0x0197 }, // U0197 # LATIN CAPITAL LETTER I WITH STROKE
++ { {UNITIZE(Qt::Key_Multi_key), 0x002f, 0x004c, 0, 0, 0}, 0x0141 }, // U0141 # LATIN CAPITAL LETTER L WITH STROKE
++ { {UNITIZE(Qt::Key_Multi_key), 0x002f, 0x004f, 0, 0, 0}, 0x00d8 }, // U00D8 # LATIN CAPITAL LETTER O WITH STROKE
++ { {UNITIZE(Qt::Key_Multi_key), 0x002f, 0x0054, 0, 0, 0}, 0x0166 }, // U0166 # LATIN CAPITAL LETTER T WITH STROKE
++ { {UNITIZE(Qt::Key_Multi_key), 0x002f, 0x005a, 0, 0, 0}, 0x01b5 }, // U01B5 # LATIN CAPITAL LETTER Z WITH STROKE
++ { {UNITIZE(Qt::Key_Multi_key), 0x002f, 0x005e, 0, 0, 0}, 0x007c }, // bar
++ { {UNITIZE(Qt::Key_Multi_key), 0x002f, 0x0062, 0, 0, 0}, 0x0180 }, // U0180 # LATIN SMALL LETTER B WITH STROKE
++ { {UNITIZE(Qt::Key_Multi_key), 0x002f, 0x0063, 0, 0, 0}, 0x00a2 }, // U00A2 # CENT SIGN
++ { {UNITIZE(Qt::Key_Multi_key), 0x002f, 0x0064, 0, 0, 0}, 0x0111 }, // U0111 # LATIN SMALL LETTER D WITH STROKE
++ { {UNITIZE(Qt::Key_Multi_key), 0x002f, 0x0067, 0, 0, 0}, 0x01e5 }, // U01E5 # LATIN SMALL LETTER G WITH STROKE
++ { {UNITIZE(Qt::Key_Multi_key), 0x002f, 0x0068, 0, 0, 0}, 0x0127 }, // U0127 # LATIN SMALL LETTER H WITH STROKE
++ { {UNITIZE(Qt::Key_Multi_key), 0x002f, 0x0069, 0, 0, 0}, 0x0268 }, // U0268 # LATIN SMALL LETTER I WITH STROKE
++ { {UNITIZE(Qt::Key_Multi_key), 0x002f, 0x006c, 0, 0, 0}, 0x0142 }, // U0142 # LATIN SMALL LETTER L WITH STROKE
++ { {UNITIZE(Qt::Key_Multi_key), 0x002f, 0x006d, 0, 0, 0}, 0x20a5 }, // U20a5 # MILL SIGN
++ { {UNITIZE(Qt::Key_Multi_key), 0x002f, 0x006f, 0, 0, 0}, 0x00f8 }, // U00F8 # LATIN SMALL LETTER O WITH STROKE
++ { {UNITIZE(Qt::Key_Multi_key), 0x002f, 0x0074, 0, 0, 0}, 0x0167 }, // U0167 # LATIN SMALL LETTER T WITH STROKE
++ { {UNITIZE(Qt::Key_Multi_key), 0x002f, 0x007a, 0, 0, 0}, 0x01b6 }, // U01B6 # LATIN SMALL LETTER Z WITH STROKE
++ { {UNITIZE(Qt::Key_Multi_key), 0x002f, 0x0294, 0, 0, 0}, 0x02a1 }, // U02A1 # LATIN LETTER GLOTTAL STOP WITH STROKE
++ { {UNITIZE(Qt::Key_Multi_key), 0x002f, 0x0413, 0, 0, 0}, 0x0492 }, // U0492 # CYRILLIC CAPITAL LETTER GHE WITH STROKE
++ { {UNITIZE(Qt::Key_Multi_key), 0x002f, 0x041a, 0, 0, 0}, 0x049e }, // U049E # CYRILLIC CAPITAL LETTER KA WITH STROKE
++ { {UNITIZE(Qt::Key_Multi_key), 0x002f, 0x0433, 0, 0, 0}, 0x0493 }, // U0493 # CYRILLIC SMALL LETTER GHE WITH STROKE
++ { {UNITIZE(Qt::Key_Multi_key), 0x002f, 0x043a, 0, 0, 0}, 0x049f }, // U049F # CYRILLIC SMALL LETTER KA WITH STROKE
++ { {UNITIZE(Qt::Key_Multi_key), 0x002f, 0x04ae, 0, 0, 0}, 0x04b0 }, // U04B0 # CYRILLIC CAPITAL LETTER STRAIGHT U WITH STROKE
++ { {UNITIZE(Qt::Key_Multi_key), 0x002f, 0x04af, 0, 0, 0}, 0x04b1 }, // U04B1 # CYRILLIC SMALL LETTER STRAIGHT U WITH STROKE
++ { {UNITIZE(Qt::Key_Multi_key), 0x002f, 0x2190, 0, 0, 0}, 0x219a }, // U219A # LEFTWARDS ARROW WITH STROKE
++ { {UNITIZE(Qt::Key_Multi_key), 0x002f, 0x2192, 0, 0, 0}, 0x219b }, // U219B # RIGHTWARDS ARROW WITH STROKE
++ { {UNITIZE(Qt::Key_Multi_key), 0x002f, 0x2194, 0, 0, 0}, 0x21ae }, // U21AE # LEFT RIGHT ARROW WITH STROKE
++ { {UNITIZE(Qt::Key_Multi_key), 0x0031, 0x0032, 0, 0, 0}, 0x00bd }, // U00BD # VULGAR FRACTION ONE HALF
++ { {UNITIZE(Qt::Key_Multi_key), 0x0031, 0x0034, 0, 0, 0}, 0x00bc }, // U00BC # VULGAR FRACTION ONE QUARTER
++ { {UNITIZE(Qt::Key_Multi_key), 0x0033, 0x0034, 0, 0, 0}, 0x00be }, // U00BE # VULGAR FRACTION THREE QUARTERS
++ { {UNITIZE(Qt::Key_Multi_key), 0x003a, 0x002d, 0, 0, 0}, 0x00f7 }, // U00F7 # DIVISION SIGN
++ { {UNITIZE(Qt::Key_Multi_key), 0x003b, 0x0041, 0, 0, 0}, 0x0104 }, // U0104 # LATIN CAPITAL LETTER A WITH OGONEK
++ { {UNITIZE(Qt::Key_Multi_key), 0x003b, 0x0045, 0, 0, 0}, 0x0118 }, // U0118 # LATIN CAPITAL LETTER E WITH OGONEK
++ { {UNITIZE(Qt::Key_Multi_key), 0x003b, 0x0049, 0, 0, 0}, 0x012e }, // U012E # LATIN CAPITAL LETTER I WITH OGONEK
++ { {UNITIZE(Qt::Key_Multi_key), 0x003b, 0x004f, 0, 0, 0}, 0x01ea }, // U01EA # LATIN CAPITAL LETTER O WITH OGONEK
++ { {UNITIZE(Qt::Key_Multi_key), 0x003b, 0x0055, 0, 0, 0}, 0x0172 }, // U0172 # LATIN CAPITAL LETTER U WITH OGONEK
++ { {UNITIZE(Qt::Key_Multi_key), 0x003b, 0x0061, 0, 0, 0}, 0x0105 }, // U0105 # LATIN SMALL LETTER A WITH OGONEK
++ { {UNITIZE(Qt::Key_Multi_key), 0x003b, 0x0065, 0, 0, 0}, 0x0119 }, // U0119 # LATIN SMALL LETTER E WITH OGONEK
++ { {UNITIZE(Qt::Key_Multi_key), 0x003b, 0x0069, 0, 0, 0}, 0x012f }, // U012F # LATIN SMALL LETTER I WITH OGONEK
++ { {UNITIZE(Qt::Key_Multi_key), 0x003b, 0x006f, 0, 0, 0}, 0x01eb }, // U01EB # LATIN SMALL LETTER O WITH OGONEK
++ { {UNITIZE(Qt::Key_Multi_key), 0x003b, 0x0075, 0, 0, 0}, 0x0173 }, // U0173 # LATIN SMALL LETTER U WITH OGONEK
++ { {UNITIZE(Qt::Key_Multi_key), 0x003c, 0x0022, 0, 0, 0}, 0x201c }, // U201c # LEFT DOUBLE QUOTATION MARK
++ { {UNITIZE(Qt::Key_Multi_key), 0x003c, 0x0027, 0, 0, 0}, 0x2018 }, // U2018 # LEFT SINGLE QUOTATION MARK
++ { {UNITIZE(Qt::Key_Multi_key), 0x003c, 0x002f, 0, 0, 0}, 0x005c }, // backslash
++ { {UNITIZE(Qt::Key_Multi_key), 0x003c, 0x003c, 0, 0, 0}, 0x00ab }, // guillemotleft # LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
++ { {UNITIZE(Qt::Key_Multi_key), 0x003c, 0x0338, 0, 0, 0}, 0x226e }, // U226E # NOT LESS-THAN
++ { {UNITIZE(Qt::Key_Multi_key), 0x003c, 0x0338, 0, 0, 0}, 0x226e }, // U226E # NOT LESS-THAN
++ { {UNITIZE(Qt::Key_Multi_key), 0x003d, 0x0043, 0, 0, 0}, 0x20ac }, // EuroSign # EURO SIGN
++ { {UNITIZE(Qt::Key_Multi_key), 0x003d, 0x0045, 0, 0, 0}, 0x20ac }, // EuroSign # EURO SIGN
++ { {UNITIZE(Qt::Key_Multi_key), 0x003d, 0x004c, 0, 0, 0}, 0x20a4 }, // U20a4 # LIRA SIGN
++ { {UNITIZE(Qt::Key_Multi_key), 0x003d, 0x004e, 0, 0, 0}, 0x20a6 }, // U20a6 # NAIRA SIGN
++ { {UNITIZE(Qt::Key_Multi_key), 0x003d, 0x004f, 0, 0, 0}, 0x0150 }, // U0150 # LATIN CAPITAL LETTER O WITH DOUBLE ACUTE
++ { {UNITIZE(Qt::Key_Multi_key), 0x003d, 0x0055, 0, 0, 0}, 0x0170 }, // U0170 # LATIN CAPITAL LETTER U WITH DOUBLE ACUTE
++ { {UNITIZE(Qt::Key_Multi_key), 0x003d, 0x0057, 0, 0, 0}, 0x20a9 }, // U20a9 # WON SIGN
++ { {UNITIZE(Qt::Key_Multi_key), 0x003d, 0x0059, 0, 0, 0}, 0x00a5 }, // yen
++ { {UNITIZE(Qt::Key_Multi_key), 0x003d, 0x006f, 0, 0, 0}, 0x0151 }, // U0151 # LATIN SMALL LETTER O WITH DOUBLE ACUTE
++ { {UNITIZE(Qt::Key_Multi_key), 0x003d, 0x0075, 0, 0, 0}, 0x0171 }, // U0171 # LATIN SMALL LETTER U WITH DOUBLE ACUTE
++ { {UNITIZE(Qt::Key_Multi_key), 0x003d, 0x0338, 0, 0, 0}, 0x2260 }, // U2260 # NOT EQUAL TO
++ { {UNITIZE(Qt::Key_Multi_key), 0x003d, 0x0423, 0, 0, 0}, 0x04f2 }, // U04F2 # CYRILLIC CAPITAL LETTER U WITH DOUBLE ACUTE
++ { {UNITIZE(Qt::Key_Multi_key), 0x003d, 0x0443, 0, 0, 0}, 0x04f3 }, // U04F3 # CYRILLIC SMALL LETTER U WITH DOUBLE ACUTE
++ { {UNITIZE(Qt::Key_Multi_key), 0x003e, 0x0020, 0, 0, 0}, 0x005e }, // asciicircum
++ { {UNITIZE(Qt::Key_Multi_key), 0x003e, 0x0022, 0, 0, 0}, 0x201d }, // U201d # RIGHT DOUBLE QUOTATION MARK
++ { {UNITIZE(Qt::Key_Multi_key), 0x003e, 0x0027, 0, 0, 0}, 0x2019 }, // U2019 # RIGHT SINGLE QUOTATION MARK
++ { {UNITIZE(Qt::Key_Multi_key), 0x003e, 0x003e, 0, 0, 0}, 0x00bb }, // guillemotright # RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
++ { {UNITIZE(Qt::Key_Multi_key), 0x003e, 0x0338, 0, 0, 0}, 0x226f }, // U226F # NOT GREATER-THAN
++ { {UNITIZE(Qt::Key_Multi_key), 0x003e, 0x0338, 0, 0, 0}, 0x226f }, // U226F # NOT GREATER-THAN
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x003f, 0x0000, 0, 0, 0}, 0x1eed }, // U1EED # LATIN SMALL LETTER U WITH HORN AND HOOK ABOVE
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x003f, 0x0000, 0, 0, 0}, 0x1eec }, // U1EEC # LATIN CAPITAL LETTER U WITH HORN AND HOOK ABOVE
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x003f, 0x0000, 0, 0, 0}, 0x1edf }, // U1EDF # LATIN SMALL LETTER O WITH HORN AND HOOK ABOVE
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x003f, 0x0000, 0, 0, 0}, 0x1ede }, // U1EDE # LATIN CAPITAL LETTER O WITH HORN AND HOOK ABOVE
++ { {UNITIZE(Qt::Key_Multi_key), 0x003f, 0x002b, 0x004f, 0, 0}, 0x1ede }, // U1EDE # LATIN CAPITAL LETTER O WITH HORN AND HOOK ABOVE
++ { {UNITIZE(Qt::Key_Multi_key), 0x003f, 0x002b, 0x0055, 0, 0}, 0x1eec }, // U1EEC # LATIN CAPITAL LETTER U WITH HORN AND HOOK ABOVE
++ { {UNITIZE(Qt::Key_Multi_key), 0x003f, 0x002b, 0x006f, 0, 0}, 0x1edf }, // U1EDF # LATIN SMALL LETTER O WITH HORN AND HOOK ABOVE
++ { {UNITIZE(Qt::Key_Multi_key), 0x003f, 0x002b, 0x0075, 0, 0}, 0x1eed }, // U1EED # LATIN SMALL LETTER U WITH HORN AND HOOK ABOVE
++ { {UNITIZE(Qt::Key_Multi_key), 0x003f, 0x003f, 0, 0, 0}, 0x00bf }, // questiondown
++ { {UNITIZE(Qt::Key_Multi_key), 0x003f, 0x0041, 0, 0, 0}, 0x1ea2 }, // U1EA2 # LATIN CAPITAL LETTER A WITH HOOK ABOVE
++ { {UNITIZE(Qt::Key_Multi_key), 0x003f, 0x0045, 0, 0, 0}, 0x1eba }, // U1EBA # LATIN CAPITAL LETTER E WITH HOOK ABOVE
++ { {UNITIZE(Qt::Key_Multi_key), 0x003f, 0x0049, 0, 0, 0}, 0x1ec8 }, // U1EC8 # LATIN CAPITAL LETTER I WITH HOOK ABOVE
++ { {UNITIZE(Qt::Key_Multi_key), 0x003f, 0x004f, 0, 0, 0}, 0x1ece }, // U1ECE # LATIN CAPITAL LETTER O WITH HOOK ABOVE
++ { {UNITIZE(Qt::Key_Multi_key), 0x003f, 0x0055, 0, 0, 0}, 0x1ee6 }, // U1EE6 # LATIN CAPITAL LETTER U WITH HOOK ABOVE
++ { {UNITIZE(Qt::Key_Multi_key), 0x003f, 0x0055, 0x0041, 0, 0}, 0x1eb2 }, // U1EB2 # LATIN CAPITAL LETTER A WITH BREVE AND HOOK ABOVE
++ { {UNITIZE(Qt::Key_Multi_key), 0x003f, 0x0055, 0x0061, 0, 0}, 0x1eb3 }, // U1EB3 # LATIN SMALL LETTER A WITH BREVE AND HOOK ABOVE
++ { {UNITIZE(Qt::Key_Multi_key), 0x003f, 0x0059, 0, 0, 0}, 0x1ef6 }, // U1EF6 # LATIN CAPITAL LETTER Y WITH HOOK ABOVE
++ { {UNITIZE(Qt::Key_Multi_key), 0x003f, 0x005e, 0x0041, 0, 0}, 0x1ea8 }, // U1EA8 # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE
++ { {UNITIZE(Qt::Key_Multi_key), 0x003f, 0x005e, 0x0045, 0, 0}, 0x1ec2 }, // U1EC2 # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE
++ { {UNITIZE(Qt::Key_Multi_key), 0x003f, 0x005e, 0x004f, 0, 0}, 0x1ed4 }, // U1ED4 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE
++ { {UNITIZE(Qt::Key_Multi_key), 0x003f, 0x005e, 0x0061, 0, 0}, 0x1ea9 }, // U1EA9 # LATIN SMALL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE
++ { {UNITIZE(Qt::Key_Multi_key), 0x003f, 0x005e, 0x0065, 0, 0}, 0x1ec3 }, // U1EC3 # LATIN SMALL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE
++ { {UNITIZE(Qt::Key_Multi_key), 0x003f, 0x005e, 0x006f, 0, 0}, 0x1ed5 }, // U1ED5 # LATIN SMALL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE
++ { {UNITIZE(Qt::Key_Multi_key), 0x003f, 0x0061, 0, 0, 0}, 0x1ea3 }, // U1EA3 # LATIN SMALL LETTER A WITH HOOK ABOVE
++ { {UNITIZE(Qt::Key_Multi_key), 0x003f, 0x0062, 0x0041, 0, 0}, 0x1eb2 }, // U1EB2 # LATIN CAPITAL LETTER A WITH BREVE AND HOOK ABOVE
++ { {UNITIZE(Qt::Key_Multi_key), 0x003f, 0x0062, 0x0061, 0, 0}, 0x1eb3 }, // U1EB3 # LATIN SMALL LETTER A WITH BREVE AND HOOK ABOVE
++ { {UNITIZE(Qt::Key_Multi_key), 0x003f, 0x0065, 0, 0, 0}, 0x1ebb }, // U1EBB # LATIN SMALL LETTER E WITH HOOK ABOVE
++ { {UNITIZE(Qt::Key_Multi_key), 0x003f, 0x0069, 0, 0, 0}, 0x1ec9 }, // U1EC9 # LATIN SMALL LETTER I WITH HOOK ABOVE
++ { {UNITIZE(Qt::Key_Multi_key), 0x003f, 0x006f, 0, 0, 0}, 0x1ecf }, // U1ECF # LATIN SMALL LETTER O WITH HOOK ABOVE
++ { {UNITIZE(Qt::Key_Multi_key), 0x003f, 0x0075, 0, 0, 0}, 0x1ee7 }, // U1EE7 # LATIN SMALL LETTER U WITH HOOK ABOVE
++ { {UNITIZE(Qt::Key_Multi_key), 0x003f, 0x0079, 0, 0, 0}, 0x1ef7 }, // U1EF7 # LATIN SMALL LETTER Y WITH HOOK ABOVE
++ { {UNITIZE(Qt::Key_Multi_key), 0x003f, 0x00c2, 0, 0, 0}, 0x1ea8 }, // U1EA8 # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE
++ { {UNITIZE(Qt::Key_Multi_key), 0x003f, 0x00ca, 0, 0, 0}, 0x1ec2 }, // U1EC2 # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE
++ { {UNITIZE(Qt::Key_Multi_key), 0x003f, 0x00d4, 0, 0, 0}, 0x1ed4 }, // U1ED4 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE
++ { {UNITIZE(Qt::Key_Multi_key), 0x003f, 0x00e2, 0, 0, 0}, 0x1ea9 }, // U1EA9 # LATIN SMALL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE
++ { {UNITIZE(Qt::Key_Multi_key), 0x003f, 0x00ea, 0, 0, 0}, 0x1ec3 }, // U1EC3 # LATIN SMALL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE
++ { {UNITIZE(Qt::Key_Multi_key), 0x003f, 0x00f4, 0, 0, 0}, 0x1ed5 }, // U1ED5 # LATIN SMALL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE
++ { {UNITIZE(Qt::Key_Multi_key), 0x003f, 0x0102, 0, 0, 0}, 0x1eb2 }, // U1EB2 # LATIN CAPITAL LETTER A WITH BREVE AND HOOK ABOVE
++ { {UNITIZE(Qt::Key_Multi_key), 0x003f, 0x0103, 0, 0, 0}, 0x1eb3 }, // U1EB3 # LATIN SMALL LETTER A WITH BREVE AND HOOK ABOVE
++ { {UNITIZE(Qt::Key_Multi_key), 0x003f, UNITIZE(Qt::Key_Dead_Circumflex), 0x0041, 0, 0}, 0x1ea8 }, // U1EA8 # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE
++ { {UNITIZE(Qt::Key_Multi_key), 0x003f, UNITIZE(Qt::Key_Dead_Circumflex), 0x0045, 0, 0}, 0x1ec2 }, // U1EC2 # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE
++ { {UNITIZE(Qt::Key_Multi_key), 0x003f, UNITIZE(Qt::Key_Dead_Circumflex), 0x004f, 0, 0}, 0x1ed4 }, // U1ED4 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE
++ { {UNITIZE(Qt::Key_Multi_key), 0x003f, UNITIZE(Qt::Key_Dead_Circumflex), 0x0061, 0, 0}, 0x1ea9 }, // U1EA9 # LATIN SMALL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE
++ { {UNITIZE(Qt::Key_Multi_key), 0x003f, UNITIZE(Qt::Key_Dead_Circumflex), 0x0065, 0, 0}, 0x1ec3 }, // U1EC3 # LATIN SMALL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE
++ { {UNITIZE(Qt::Key_Multi_key), 0x003f, UNITIZE(Qt::Key_Dead_Circumflex), 0x006f, 0, 0}, 0x1ed5 }, // U1ED5 # LATIN SMALL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE
++ { {UNITIZE(Qt::Key_Multi_key), 0x003f, UNITIZE(Qt::Key_Dead_Breve), 0x0041, 0, 0}, 0x1eb2 }, // U1EB2 # LATIN CAPITAL LETTER A WITH BREVE AND HOOK ABOVE
++ { {UNITIZE(Qt::Key_Multi_key), 0x003f, UNITIZE(Qt::Key_Dead_Breve), 0x0061, 0, 0}, 0x1eb3 }, // U1EB3 # LATIN SMALL LETTER A WITH BREVE AND HOOK ABOVE
++ { {UNITIZE(Qt::Key_Multi_key), 0x003f, UNITIZE(Qt::Key_Dead_Horn), 0x004f, 0, 0}, 0x1ede }, // U1EDE # LATIN CAPITAL LETTER O WITH HORN AND HOOK ABOVE
++ { {UNITIZE(Qt::Key_Multi_key), 0x003f, UNITIZE(Qt::Key_Dead_Horn), 0x0055, 0, 0}, 0x1eec }, // U1EEC # LATIN CAPITAL LETTER U WITH HORN AND HOOK ABOVE
++ { {UNITIZE(Qt::Key_Multi_key), 0x003f, UNITIZE(Qt::Key_Dead_Horn), 0x006f, 0, 0}, 0x1edf }, // U1EDF # LATIN SMALL LETTER O WITH HORN AND HOOK ABOVE
++ { {UNITIZE(Qt::Key_Multi_key), 0x003f, UNITIZE(Qt::Key_Dead_Horn), 0x0075, 0, 0}, 0x1eed }, // U1EED # LATIN SMALL LETTER U WITH HORN AND HOOK ABOVE
++ { {UNITIZE(Qt::Key_Multi_key), 0x0041, 0x0045, 0, 0, 0}, 0x00c6 }, // AE
++ { {UNITIZE(Qt::Key_Multi_key), 0x0041, 0x0054, 0, 0, 0}, 0x0040 }, // at
++ { {UNITIZE(Qt::Key_Multi_key), 0x0043, 0x002f, 0, 0, 0}, 0x20a1 }, // U20a1 # COLON SIGN
++ { {UNITIZE(Qt::Key_Multi_key), 0x0043, 0x002f, 0, 0, 0}, 0x00a2 }, // U00A2 # CENT SIGN
++ { {UNITIZE(Qt::Key_Multi_key), 0x0043, 0x003d, 0, 0, 0}, 0x20ac }, // EuroSign # EURO SIGN
++ { {UNITIZE(Qt::Key_Multi_key), 0x0043, 0x0045, 0, 0, 0}, 0x20a0 }, // U20a0 # EURO-CURRENCY SIGN
++ { {UNITIZE(Qt::Key_Multi_key), 0x0043, 0x0072, 0, 0, 0}, 0x20a2 }, // U20a2 # CRUZEIRO SIGN
++ { {UNITIZE(Qt::Key_Multi_key), 0x0043, 0x007c, 0, 0, 0}, 0x00a2 }, // U00A2 # CENT SIGN
++ { {UNITIZE(Qt::Key_Multi_key), 0x0044, 0x0048, 0, 0, 0}, 0x00d0 }, // U00D0 # LATIN CAPITAL LETTER ETH
++ { {UNITIZE(Qt::Key_Multi_key), 0x0045, 0x003d, 0, 0, 0}, 0x20ac }, // EuroSign # EURO SIGN
++ { {UNITIZE(Qt::Key_Multi_key), 0x0046, 0x0072, 0, 0, 0}, 0x20a3 }, // U20a3 # FRENCH FRANC SIGN
++ { {UNITIZE(Qt::Key_Multi_key), 0x004c, 0x002d, 0, 0, 0}, 0x00a3 }, // U00a3 # POUND SIGN
++ { {UNITIZE(Qt::Key_Multi_key), 0x004c, 0x003d, 0, 0, 0}, 0x20a4 }, // U20a4 # LIRA SIGN
++ { {UNITIZE(Qt::Key_Multi_key), 0x004c, 0x0056, 0, 0, 0}, 0x007c }, // bar
++ { {UNITIZE(Qt::Key_Multi_key), 0x004e, 0x003d, 0, 0, 0}, 0x20a6 }, // U20a6 # NAIRA SIGN
++ { {UNITIZE(Qt::Key_Multi_key), 0x004e, 0x0047, 0, 0, 0}, 0x014a }, // U014A # LATIN CAPITAL LETTER ENG
++ { {UNITIZE(Qt::Key_Multi_key), 0x004f, 0x0043, 0, 0, 0}, 0x00a9 }, // copyright
++ { {UNITIZE(Qt::Key_Multi_key), 0x004f, 0x0045, 0, 0, 0}, 0x0152 }, // OE
++ { {UNITIZE(Qt::Key_Multi_key), 0x004f, 0x0052, 0, 0, 0}, 0x00ae }, // registered
++ { {UNITIZE(Qt::Key_Multi_key), 0x004f, 0x0063, 0, 0, 0}, 0x00a9 }, // copyright
++ { {UNITIZE(Qt::Key_Multi_key), 0x004f, 0x0072, 0, 0, 0}, 0x00ae }, // registered
++ { {UNITIZE(Qt::Key_Multi_key), 0x0050, 0x0021, 0, 0, 0}, 0x00b6 }, // paragraph
++ { {UNITIZE(Qt::Key_Multi_key), 0x0050, 0x0050, 0, 0, 0}, 0x00b6 }, // paragraph # PILCROW SIGN (PARAGRAPH SIGN)
++ { {UNITIZE(Qt::Key_Multi_key), 0x0050, 0x0074, 0, 0, 0}, 0x20a7 }, // U20a7 # PESETA SIGN
++ { {UNITIZE(Qt::Key_Multi_key), 0x0052, 0x0073, 0, 0, 0}, 0x20a8 }, // U20a8 # RUPEE SIGN
++ { {UNITIZE(Qt::Key_Multi_key), 0x0054, 0x0048, 0, 0, 0}, 0x00de }, // U00DE # LATIN CAPITAL LETTER THORN
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0055, 0x0000, 0x0041, 0, 0}, 0x1eb6 }, // U1EB6 # LATIN CAPITAL LETTER A WITH BREVE AND DOT BELOW
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0055, 0x0000, 0x0061, 0, 0}, 0x1eb7 }, // U1EB7 # LATIN SMALL LETTER A WITH BREVE AND DOT BELOW
++ { {UNITIZE(Qt::Key_Multi_key), 0x0055, 0x0021, 0x0041, 0, 0}, 0x1eb6 }, // U1EB6 # LATIN CAPITAL LETTER A WITH BREVE AND DOT BELOW
++ { {UNITIZE(Qt::Key_Multi_key), 0x0055, 0x0021, 0x0061, 0, 0}, 0x1eb7 }, // U1EB7 # LATIN SMALL LETTER A WITH BREVE AND DOT BELOW
++ { {UNITIZE(Qt::Key_Multi_key), 0x0055, 0x002c, 0x0045, 0, 0}, 0x1e1c }, // U1E1C # LATIN CAPITAL LETTER E WITH CEDILLA AND BREVE
++ { {UNITIZE(Qt::Key_Multi_key), 0x0055, 0x002c, 0x0065, 0, 0}, 0x1e1d }, // U1E1D # LATIN SMALL LETTER E WITH CEDILLA AND BREVE
++ { {UNITIZE(Qt::Key_Multi_key), 0x0055, 0x0041, 0, 0, 0}, 0x0102 }, // U0102 # LATIN CAPITAL LETTER A WITH BREVE
++ { {UNITIZE(Qt::Key_Multi_key), 0x0055, 0x0045, 0, 0, 0}, 0x0114 }, // U0114 # LATIN CAPITAL LETTER E WITH BREVE
++ { {UNITIZE(Qt::Key_Multi_key), 0x0055, 0x0047, 0, 0, 0}, 0x011e }, // U011E # LATIN CAPITAL LETTER G WITH BREVE
++ { {UNITIZE(Qt::Key_Multi_key), 0x0055, 0x0049, 0, 0, 0}, 0x012c }, // U012C # LATIN CAPITAL LETTER I WITH BREVE
++ { {UNITIZE(Qt::Key_Multi_key), 0x0055, 0x004f, 0, 0, 0}, 0x014e }, // U014E # LATIN CAPITAL LETTER O WITH BREVE
++ { {UNITIZE(Qt::Key_Multi_key), 0x0055, 0x0055, 0, 0, 0}, 0x016c }, // U016C # LATIN CAPITAL LETTER U WITH BREVE
++ { {UNITIZE(Qt::Key_Multi_key), 0x0055, 0x0061, 0, 0, 0}, 0x0103 }, // U0103 # LATIN SMALL LETTER A WITH BREVE
++ { {UNITIZE(Qt::Key_Multi_key), 0x0055, 0x0065, 0, 0, 0}, 0x0115 }, // U0115 # LATIN SMALL LETTER E WITH BREVE
++ { {UNITIZE(Qt::Key_Multi_key), 0x0055, 0x0067, 0, 0, 0}, 0x011f }, // U011F # LATIN SMALL LETTER G WITH BREVE
++ { {UNITIZE(Qt::Key_Multi_key), 0x0055, 0x0069, 0, 0, 0}, 0x012d }, // U012D # LATIN SMALL LETTER I WITH BREVE
++ { {UNITIZE(Qt::Key_Multi_key), 0x0055, 0x006f, 0, 0, 0}, 0x014f }, // U014F # LATIN SMALL LETTER O WITH BREVE
++ { {UNITIZE(Qt::Key_Multi_key), 0x0055, 0x0075, 0, 0, 0}, 0x016d }, // U016D # LATIN SMALL LETTER U WITH BREVE
++ { {UNITIZE(Qt::Key_Multi_key), 0x0055, 0x0228, 0, 0, 0}, 0x1e1c }, // U1E1C # LATIN CAPITAL LETTER E WITH CEDILLA AND BREVE
++ { {UNITIZE(Qt::Key_Multi_key), 0x0055, 0x0229, 0, 0, 0}, 0x1e1d }, // U1E1D # LATIN SMALL LETTER E WITH CEDILLA AND BREVE
++ { {UNITIZE(Qt::Key_Multi_key), 0x0055, 0x0391, 0, 0, 0}, 0x1fb8 }, // U1FB8 # GREEK CAPITAL LETTER ALPHA WITH VRACHY
++ { {UNITIZE(Qt::Key_Multi_key), 0x0055, 0x0399, 0, 0, 0}, 0x1fd8 }, // U1FD8 # GREEK CAPITAL LETTER IOTA WITH VRACHY
++ { {UNITIZE(Qt::Key_Multi_key), 0x0055, 0x03a5, 0, 0, 0}, 0x1fe8 }, // U1FE8 # GREEK CAPITAL LETTER UPSILON WITH VRACHY
++ { {UNITIZE(Qt::Key_Multi_key), 0x0055, 0x03b1, 0, 0, 0}, 0x1fb0 }, // U1FB0 # GREEK SMALL LETTER ALPHA WITH VRACHY
++ { {UNITIZE(Qt::Key_Multi_key), 0x0055, 0x03b9, 0, 0, 0}, 0x1fd0 }, // U1FD0 # GREEK SMALL LETTER IOTA WITH VRACHY
++ { {UNITIZE(Qt::Key_Multi_key), 0x0055, 0x03c5, 0, 0, 0}, 0x1fe0 }, // U1FE0 # GREEK SMALL LETTER UPSILON WITH VRACHY
++ { {UNITIZE(Qt::Key_Multi_key), 0x0055, 0x0410, 0, 0, 0}, 0x04d0 }, // U04D0 # CYRILLIC CAPITAL LETTER A WITH BREVE
++ { {UNITIZE(Qt::Key_Multi_key), 0x0055, 0x0415, 0, 0, 0}, 0x04d6 }, // U04D6 # CYRILLIC CAPITAL LETTER IE WITH BREVE
++ { {UNITIZE(Qt::Key_Multi_key), 0x0055, 0x0416, 0, 0, 0}, 0x04c1 }, // U04C1 # CYRILLIC CAPITAL LETTER ZHE WITH BREVE
++ { {UNITIZE(Qt::Key_Multi_key), 0x0055, 0x0418, 0, 0, 0}, 0x0419 }, // U0419 # CYRILLIC CAPITAL LETTER SHORT I
++ { {UNITIZE(Qt::Key_Multi_key), 0x0055, 0x0423, 0, 0, 0}, 0x040e }, // U040E # CYRILLIC CAPITAL LETTER SHORT U
++ { {UNITIZE(Qt::Key_Multi_key), 0x0055, 0x0430, 0, 0, 0}, 0x04d1 }, // U04D1 # CYRILLIC SMALL LETTER A WITH BREVE
++ { {UNITIZE(Qt::Key_Multi_key), 0x0055, 0x0435, 0, 0, 0}, 0x04d7 }, // U04D7 # CYRILLIC SMALL LETTER IE WITH BREVE
++ { {UNITIZE(Qt::Key_Multi_key), 0x0055, 0x0436, 0, 0, 0}, 0x04c2 }, // U04C2 # CYRILLIC SMALL LETTER ZHE WITH BREVE
++ { {UNITIZE(Qt::Key_Multi_key), 0x0055, 0x0438, 0, 0, 0}, 0x0439 }, // U0439 # CYRILLIC SMALL LETTER SHORT I
++ { {UNITIZE(Qt::Key_Multi_key), 0x0055, 0x0443, 0, 0, 0}, 0x045e }, // U045E # CYRILLIC SMALL LETTER SHORT U
++ { {UNITIZE(Qt::Key_Multi_key), 0x0055, 0x1ea0, 0, 0, 0}, 0x1eb6 }, // U1EB6 # LATIN CAPITAL LETTER A WITH BREVE AND DOT BELOW
++ { {UNITIZE(Qt::Key_Multi_key), 0x0055, 0x1ea1, 0, 0, 0}, 0x1eb7 }, // U1EB7 # LATIN SMALL LETTER A WITH BREVE AND DOT BELOW
++ { {UNITIZE(Qt::Key_Multi_key), 0x0055, UNITIZE(Qt::Key_Dead_Cedilla), 0x0045, 0, 0}, 0x1e1c }, // U1E1C # LATIN CAPITAL LETTER E WITH CEDILLA AND BREVE
++ { {UNITIZE(Qt::Key_Multi_key), 0x0055, UNITIZE(Qt::Key_Dead_Cedilla), 0x0065, 0, 0}, 0x1e1d }, // U1E1D # LATIN SMALL LETTER E WITH CEDILLA AND BREVE
++ { {UNITIZE(Qt::Key_Multi_key), 0x0055, UNITIZE(Qt::Key_Dead_Belowdot), 0x0041, 0, 0}, 0x1eb6 }, // U1EB6 # LATIN CAPITAL LETTER A WITH BREVE AND DOT BELOW
++ { {UNITIZE(Qt::Key_Multi_key), 0x0055, UNITIZE(Qt::Key_Dead_Belowdot), 0x0061, 0, 0}, 0x1eb7 }, // U1EB7 # LATIN SMALL LETTER A WITH BREVE AND DOT BELOW
++ { {UNITIZE(Qt::Key_Multi_key), 0x0056, 0x004c, 0, 0, 0}, 0x007c }, // bar
++ { {UNITIZE(Qt::Key_Multi_key), 0x0057, 0x003d, 0, 0, 0}, 0x20a9 }, // U20a9 # WON SIGN
++ { {UNITIZE(Qt::Key_Multi_key), 0x0059, 0x003d, 0, 0, 0}, 0x00a5 }, // yen
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x0000, 0, 0, 0}, 0x00b2 }, // U00B2 # SUPERSCRIPT TWO
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x0000, 0, 0, 0}, 0x2076 }, // U2076 # SUPERSCRIPT SIX
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x0000, 0, 0, 0}, 0x2070 }, // U2070 # SUPERSCRIPT ZERO
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x0000, 0, 0, 0}, 0x00b9 }, // U00B9 # SUPERSCRIPT ONE
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x0000, 0, 0, 0}, 0x2078 }, // U2078 # SUPERSCRIPT EIGHT
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x0000, 0, 0, 0}, 0x2074 }, // U2074 # SUPERSCRIPT FOUR
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x0000, 0, 0, 0}, 0x00b3 }, // U00B3 # SUPERSCRIPT THREE
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x0000, 0, 0, 0}, 0x2077 }, // U2077 # SUPERSCRIPT SEVEN
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x0000, 0, 0, 0}, 0x207c }, // U207C # SUPERSCRIPT EQUALS SIGN
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x0000, 0, 0, 0}, 0x207a }, // U207A # SUPERSCRIPT PLUS SIGN
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x0000, 0, 0, 0}, 0x00b2 }, // U00B2 # SUPERSCRIPT TWO
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x0000, 0, 0, 0}, 0x2079 }, // U2079 # SUPERSCRIPT NINE
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x0000, 0, 0, 0}, 0x2075 }, // U2075 # SUPERSCRIPT FIVE
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x0000, 0x0041, 0, 0}, 0x1eac }, // U1EAC # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND DOT BELOW
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x0000, 0x0045, 0, 0}, 0x1ec6 }, // U1EC6 # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND DOT BELOW
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x0000, 0x004f, 0, 0}, 0x1ed8 }, // U1ED8 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND DOT BELOW
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x0000, 0x0061, 0, 0}, 0x1ead }, // U1EAD # LATIN SMALL LETTER A WITH CIRCUMFLEX AND DOT BELOW
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x0000, 0x0065, 0, 0}, 0x1ec7 }, // U1EC7 # LATIN SMALL LETTER E WITH CIRCUMFLEX AND DOT BELOW
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x0000, 0x006f, 0, 0}, 0x1ed9 }, // U1ED9 # LATIN SMALL LETTER O WITH CIRCUMFLEX AND DOT BELOW
++ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x0020, 0, 0, 0}, 0x005e }, // asciicircum
++ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x0021, 0x0041, 0, 0}, 0x1eac }, // U1EAC # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND DOT BELOW
++ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x0021, 0x0045, 0, 0}, 0x1ec6 }, // U1EC6 # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND DOT BELOW
++ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x0021, 0x004f, 0, 0}, 0x1ed8 }, // U1ED8 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND DOT BELOW
++ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x0021, 0x0061, 0, 0}, 0x1ead }, // U1EAD # LATIN SMALL LETTER A WITH CIRCUMFLEX AND DOT BELOW
++ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x0021, 0x0065, 0, 0}, 0x1ec7 }, // U1EC7 # LATIN SMALL LETTER E WITH CIRCUMFLEX AND DOT BELOW
++ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x0021, 0x006f, 0, 0}, 0x1ed9 }, // U1ED9 # LATIN SMALL LETTER O WITH CIRCUMFLEX AND DOT BELOW
++ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x0028, 0, 0, 0}, 0x207d }, // U207D # SUPERSCRIPT LEFT PARENTHESIS
++ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x0029, 0, 0, 0}, 0x207e }, // U207E # SUPERSCRIPT RIGHT PARENTHESIS
++ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x002b, 0, 0, 0}, 0x207a }, // U207A # SUPERSCRIPT PLUS SIGN
++ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x002f, 0, 0, 0}, 0x007c }, // bar
++ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x0030, 0, 0, 0}, 0x2070 }, // U2070 # SUPERSCRIPT ZERO
++ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x0031, 0, 0, 0}, 0x00b9 }, // U00B9 # SUPERSCRIPT ONE
++ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x0032, 0, 0, 0}, 0x00b2 }, // U00B2 # SUPERSCRIPT TWO
++ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x0033, 0, 0, 0}, 0x00b3 }, // U00B3 # SUPERSCRIPT THREE
++ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x0034, 0, 0, 0}, 0x2074 }, // U2074 # SUPERSCRIPT FOUR
++ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x0035, 0, 0, 0}, 0x2075 }, // U2075 # SUPERSCRIPT FIVE
++ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x0036, 0, 0, 0}, 0x2076 }, // U2076 # SUPERSCRIPT SIX
++ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x0037, 0, 0, 0}, 0x2077 }, // U2077 # SUPERSCRIPT SEVEN
++ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x0038, 0, 0, 0}, 0x2078 }, // U2078 # SUPERSCRIPT EIGHT
++ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x0039, 0, 0, 0}, 0x2079 }, // U2079 # SUPERSCRIPT NINE
++ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x003d, 0, 0, 0}, 0x207c }, // U207C # SUPERSCRIPT EQUALS SIGN
++ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x0041, 0, 0, 0}, 0x00c2 }, // U00C2 # LATIN CAPITAL LETTER A WITH CIRCUMFLEX
++ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x0043, 0, 0, 0}, 0x0108 }, // U0108 # LATIN CAPITAL LETTER C WITH CIRCUMFLEX
++ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x0045, 0, 0, 0}, 0x00ca }, // U00CA # LATIN CAPITAL LETTER E WITH CIRCUMFLEX
++ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x0047, 0, 0, 0}, 0x011c }, // U011C # LATIN CAPITAL LETTER G WITH CIRCUMFLEX
++ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x0048, 0, 0, 0}, 0x0124 }, // U0124 # LATIN CAPITAL LETTER H WITH CIRCUMFLEX
++ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x0049, 0, 0, 0}, 0x00ce }, // U00CE # LATIN CAPITAL LETTER I WITH CIRCUMFLEX
++ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x004a, 0, 0, 0}, 0x0134 }, // U0134 # LATIN CAPITAL LETTER J WITH CIRCUMFLEX
++ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x004f, 0, 0, 0}, 0x00d4 }, // U00D4 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX
++ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x0053, 0, 0, 0}, 0x015c }, // U015C # LATIN CAPITAL LETTER S WITH CIRCUMFLEX
++ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x0053, 0x004d, 0, 0}, 0x2120 }, // U2120 # SERVICE MARK
++ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x0054, 0x004d, 0, 0}, 0x2122 }, // U2122 # TRADE MARK SIGN
++ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x0055, 0, 0, 0}, 0x00db }, // U00DB # LATIN CAPITAL LETTER U WITH CIRCUMFLEX
++ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x0057, 0, 0, 0}, 0x0174 }, // U0174 # LATIN CAPITAL LETTER W WITH CIRCUMFLEX
++ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x0059, 0, 0, 0}, 0x0176 }, // U0176 # LATIN CAPITAL LETTER Y WITH CIRCUMFLEX
++ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x005a, 0, 0, 0}, 0x1e90 }, // U1E90 # LATIN CAPITAL LETTER Z WITH CIRCUMFLEX
++ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x005f, 0x0061, 0, 0}, 0x00aa }, // U00AA # FEMININE ORDINAL INDICATOR
++ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x005f, 0x0061, 0, 0}, 0x00aa }, // U00AA # FEMININE ORDINAL INDICATOR
++ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x005f, 0x0068, 0, 0}, 0x02b0 }, // U02B0 # MODIFIER LETTER SMALL H
++ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x005f, 0x0068, 0, 0}, 0x02b0 }, // U02B0 # MODIFIER LETTER SMALL H
++ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x005f, 0x0069, 0, 0}, 0x2071 }, // U2071 # SUPERSCRIPT LATIN SMALL LETTER I
++ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x005f, 0x0069, 0, 0}, 0x2071 }, // U2071 # SUPERSCRIPT LATIN SMALL LETTER I
++ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x005f, 0x006a, 0, 0}, 0x02b2 }, // U02B2 # MODIFIER LETTER SMALL J
++ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x005f, 0x006a, 0, 0}, 0x02b2 }, // U02B2 # MODIFIER LETTER SMALL J
++ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x005f, 0x006c, 0, 0}, 0x02e1 }, // U02E1 # MODIFIER LETTER SMALL L
++ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x005f, 0x006c, 0, 0}, 0x02e1 }, // U02E1 # MODIFIER LETTER SMALL L
++ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x005f, 0x006e, 0, 0}, 0x207f }, // U207F # SUPERSCRIPT LATIN SMALL LETTER N
++ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x005f, 0x006e, 0, 0}, 0x207f }, // U207F # SUPERSCRIPT LATIN SMALL LETTER N
++ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x005f, 0x006f, 0, 0}, 0x00ba }, // U00BA # MASCULINE ORDINAL INDICATOR
++ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x005f, 0x006f, 0, 0}, 0x00ba }, // U00BA # MASCULINE ORDINAL INDICATOR
++ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x005f, 0x0072, 0, 0}, 0x02b3 }, // U02B3 # MODIFIER LETTER SMALL R
++ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x005f, 0x0072, 0, 0}, 0x02b3 }, // U02B3 # MODIFIER LETTER SMALL R
++ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x005f, 0x0073, 0, 0}, 0x02e2 }, // U02E2 # MODIFIER LETTER SMALL S
++ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x005f, 0x0073, 0, 0}, 0x02e2 }, // U02E2 # MODIFIER LETTER SMALL S
++ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x005f, 0x0077, 0, 0}, 0x02b7 }, // U02B7 # MODIFIER LETTER SMALL W
++ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x005f, 0x0077, 0, 0}, 0x02b7 }, // U02B7 # MODIFIER LETTER SMALL W
++ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x005f, 0x0078, 0, 0}, 0x02e3 }, // U02E3 # MODIFIER LETTER SMALL X
++ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x005f, 0x0078, 0, 0}, 0x02e3 }, // U02E3 # MODIFIER LETTER SMALL X
++ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x005f, 0x0079, 0, 0}, 0x02b8 }, // U02B8 # MODIFIER LETTER SMALL Y
++ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x005f, 0x0079, 0, 0}, 0x02b8 }, // U02B8 # MODIFIER LETTER SMALL Y
++ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x005f, 0x0263, 0, 0}, 0x02e0 }, // U02E0 # MODIFIER LETTER SMALL GAMMA
++ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x005f, 0x0263, 0, 0}, 0x02e0 }, // U02E0 # MODIFIER LETTER SMALL GAMMA
++ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x005f, 0x0266, 0, 0}, 0x02b1 }, // U02B1 # MODIFIER LETTER SMALL H WITH HOOK
++ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x005f, 0x0266, 0, 0}, 0x02b1 }, // U02B1 # MODIFIER LETTER SMALL H WITH HOOK
++ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x005f, 0x0279, 0, 0}, 0x02b4 }, // U02B4 # MODIFIER LETTER SMALL TURNED R
++ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x005f, 0x0279, 0, 0}, 0x02b4 }, // U02B4 # MODIFIER LETTER SMALL TURNED R
++ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x005f, 0x027b, 0, 0}, 0x02b5 }, // U02B5 # MODIFIER LETTER SMALL TURNED R WITH HOOK
++ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x005f, 0x027b, 0, 0}, 0x02b5 }, // U02B5 # MODIFIER LETTER SMALL TURNED R WITH HOOK
++ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x005f, 0x0281, 0, 0}, 0x02b6 }, // U02B6 # MODIFIER LETTER SMALL CAPITAL INVERTED R
++ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x005f, 0x0281, 0, 0}, 0x02b6 }, // U02B6 # MODIFIER LETTER SMALL CAPITAL INVERTED R
++ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x005f, 0x0295, 0, 0}, 0x02e4 }, // U02E4 # MODIFIER LETTER SMALL REVERSED GLOTTAL STOP
++ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x005f, 0x0295, 0, 0}, 0x02e4 }, // U02E4 # MODIFIER LETTER SMALL REVERSED GLOTTAL STOP
++ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x0061, 0, 0, 0}, 0x00e2 }, // U00E2 # LATIN SMALL LETTER A WITH CIRCUMFLEX
++ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x0063, 0, 0, 0}, 0x0109 }, // U0109 # LATIN SMALL LETTER C WITH CIRCUMFLEX
++ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x0065, 0, 0, 0}, 0x00ea }, // U00EA # LATIN SMALL LETTER E WITH CIRCUMFLEX
++ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x0067, 0, 0, 0}, 0x011d }, // U011D # LATIN SMALL LETTER G WITH CIRCUMFLEX
++ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x0068, 0, 0, 0}, 0x0125 }, // U0125 # LATIN SMALL LETTER H WITH CIRCUMFLEX
++ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x0069, 0, 0, 0}, 0x00ee }, // U00EE # LATIN SMALL LETTER I WITH CIRCUMFLEX
++ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x006a, 0, 0, 0}, 0x0135 }, // U0135 # LATIN SMALL LETTER J WITH CIRCUMFLEX
++ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x006f, 0, 0, 0}, 0x00f4 }, // U00F4 # LATIN SMALL LETTER O WITH CIRCUMFLEX
++ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x0073, 0, 0, 0}, 0x015d }, // U015D # LATIN SMALL LETTER S WITH CIRCUMFLEX
++ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x0075, 0, 0, 0}, 0x00fb }, // U00FB # LATIN SMALL LETTER U WITH CIRCUMFLEX
++ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x0077, 0, 0, 0}, 0x0175 }, // U0175 # LATIN SMALL LETTER W WITH CIRCUMFLEX
++ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x0079, 0, 0, 0}, 0x0177 }, // U0177 # LATIN SMALL LETTER Y WITH CIRCUMFLEX
++ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x007a, 0, 0, 0}, 0x1e91 }, // U1E91 # LATIN SMALL LETTER Z WITH CIRCUMFLEX
++ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x1ea0, 0, 0, 0}, 0x1eac }, // U1EAC # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND DOT BELOW
++ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x1ea1, 0, 0, 0}, 0x1ead }, // U1EAD # LATIN SMALL LETTER A WITH CIRCUMFLEX AND DOT BELOW
++ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x1eb8, 0, 0, 0}, 0x1ec6 }, // U1EC6 # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND DOT BELOW
++ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x1eb9, 0, 0, 0}, 0x1ec7 }, // U1EC7 # LATIN SMALL LETTER E WITH CIRCUMFLEX AND DOT BELOW
++ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x1ecc, 0, 0, 0}, 0x1ed8 }, // U1ED8 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND DOT BELOW
++ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x1ecd, 0, 0, 0}, 0x1ed9 }, // U1ED9 # LATIN SMALL LETTER O WITH CIRCUMFLEX AND DOT BELOW
++ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x2212, 0, 0, 0}, 0x207b }, // U207B # SUPERSCRIPT MINUS
++ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x4e00, 0, 0, 0}, 0x3192 }, // U3192 # IDEOGRAPHIC ANNOTATION ONE MARK
++ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x4e01, 0, 0, 0}, 0x319c }, // U319C # IDEOGRAPHIC ANNOTATION FOURTH MARK
++ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x4e09, 0, 0, 0}, 0x3194 }, // U3194 # IDEOGRAPHIC ANNOTATION THREE MARK
++ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x4e0a, 0, 0, 0}, 0x3196 }, // U3196 # IDEOGRAPHIC ANNOTATION TOP MARK
++ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x4e0b, 0, 0, 0}, 0x3198 }, // U3198 # IDEOGRAPHIC ANNOTATION BOTTOM MARK
++ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x4e19, 0, 0, 0}, 0x319b }, // U319B # IDEOGRAPHIC ANNOTATION THIRD MARK
++ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x4e2d, 0, 0, 0}, 0x3197 }, // U3197 # IDEOGRAPHIC ANNOTATION MIDDLE MARK
++ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x4e59, 0, 0, 0}, 0x319a }, // U319A # IDEOGRAPHIC ANNOTATION SECOND MARK
++ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x4e8c, 0, 0, 0}, 0x3193 }, // U3193 # IDEOGRAPHIC ANNOTATION TWO MARK
++ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x4eba, 0, 0, 0}, 0x319f }, // U319F # IDEOGRAPHIC ANNOTATION MAN MARK
++ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x56db, 0, 0, 0}, 0x3195 }, // U3195 # IDEOGRAPHIC ANNOTATION FOUR MARK
++ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x5730, 0, 0, 0}, 0x319e }, // U319E # IDEOGRAPHIC ANNOTATION EARTH MARK
++ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x5929, 0, 0, 0}, 0x319d }, // U319D # IDEOGRAPHIC ANNOTATION HEAVEN MARK
++ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x7532, 0, 0, 0}, 0x3199 }, // U3199 # IDEOGRAPHIC ANNOTATION FIRST MARK
++ { {UNITIZE(Qt::Key_Multi_key), 0x005e, UNITIZE(Qt::Key_Dead_Belowdot), 0x0041, 0, 0}, 0x1eac }, // U1EAC # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND DOT BELOW
++ { {UNITIZE(Qt::Key_Multi_key), 0x005e, UNITIZE(Qt::Key_Dead_Belowdot), 0x0045, 0, 0}, 0x1ec6 }, // U1EC6 # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND DOT BELOW
++ { {UNITIZE(Qt::Key_Multi_key), 0x005e, UNITIZE(Qt::Key_Dead_Belowdot), 0x004f, 0, 0}, 0x1ed8 }, // U1ED8 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND DOT BELOW
++ { {UNITIZE(Qt::Key_Multi_key), 0x005e, UNITIZE(Qt::Key_Dead_Belowdot), 0x0061, 0, 0}, 0x1ead }, // U1EAD # LATIN SMALL LETTER A WITH CIRCUMFLEX AND DOT BELOW
++ { {UNITIZE(Qt::Key_Multi_key), 0x005e, UNITIZE(Qt::Key_Dead_Belowdot), 0x0065, 0, 0}, 0x1ec7 }, // U1EC7 # LATIN SMALL LETTER E WITH CIRCUMFLEX AND DOT BELOW
++ { {UNITIZE(Qt::Key_Multi_key), 0x005e, UNITIZE(Qt::Key_Dead_Belowdot), 0x006f, 0, 0}, 0x1ed9 }, // U1ED9 # LATIN SMALL LETTER O WITH CIRCUMFLEX AND DOT BELOW
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0000, 0, 0, 0}, 0x2085 }, // U2085 # SUBSCRIPT FIVE
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0000, 0, 0, 0}, 0x2087 }, // U2087 # SUBSCRIPT SEVEN
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0000, 0, 0, 0}, 0x2082 }, // U2082 # SUBSCRIPT TWO
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0000, 0, 0, 0}, 0x2085 }, // U2085 # SUBSCRIPT FIVE
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0000, 0, 0, 0}, 0x2084 }, // U2084 # SUBSCRIPT FOUR
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0000, 0, 0, 0}, 0x2084 }, // U2084 # SUBSCRIPT FOUR
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0000, 0, 0, 0}, 0x2086 }, // U2086 # SUBSCRIPT SIX
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0000, 0, 0, 0}, 0x2081 }, // U2081 # SUBSCRIPT ONE
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0000, 0, 0, 0}, 0x208a }, // U208A # SUBSCRIPT PLUS SIGN
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0000, 0, 0, 0}, 0x2088 }, // U2088 # SUBSCRIPT EIGHT
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0000, 0, 0, 0}, 0x2087 }, // U2087 # SUBSCRIPT SEVEN
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0000, 0, 0, 0}, 0x208a }, // U208A # SUBSCRIPT PLUS SIGN
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0000, 0, 0, 0}, 0x2080 }, // U2080 # SUBSCRIPT ZERO
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0000, 0, 0, 0}, 0x2083 }, // U2083 # SUBSCRIPT THREE
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0000, 0, 0, 0}, 0x2082 }, // U2082 # SUBSCRIPT TWO
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0000, 0, 0, 0}, 0x2083 }, // U2083 # SUBSCRIPT THREE
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0000, 0, 0, 0}, 0x2086 }, // U2086 # SUBSCRIPT SIX
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0000, 0, 0, 0}, 0x2088 }, // U2088 # SUBSCRIPT EIGHT
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0000, 0, 0, 0}, 0x2089 }, // U2089 # SUBSCRIPT NINE
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0000, 0, 0, 0}, 0x2089 }, // U2089 # SUBSCRIPT NINE
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0000, 0, 0, 0}, 0x2080 }, // U2080 # SUBSCRIPT ZERO
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0000, 0, 0, 0}, 0x2082 }, // U2082 # SUBSCRIPT TWO
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0000, 0, 0, 0}, 0x2081 }, // U2081 # SUBSCRIPT ONE
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0000, 0, 0, 0}, 0x2082 }, // U2082 # SUBSCRIPT TWO
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0000, 0, 0, 0}, 0x208c }, // U208C # SUBSCRIPT EQUALS SIGN
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0000, 0, 0, 0}, 0x208c }, // U208C # SUBSCRIPT EQUALS SIGN
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0000, 0x004c, 0, 0}, 0x1e38 }, // U1E38 # LATIN CAPITAL LETTER L WITH DOT BELOW AND MACRON
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0000, 0x004f, 0, 0}, 0x022c }, // U022C # LATIN CAPITAL LETTER O WITH TILDE AND MACRON
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0000, 0x0052, 0, 0}, 0x1e5c }, // U1E5C # LATIN CAPITAL LETTER R WITH DOT BELOW AND MACRON
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0000, 0x006c, 0, 0}, 0x1e39 }, // U1E39 # LATIN SMALL LETTER L WITH DOT BELOW AND MACRON
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0000, 0x006f, 0, 0}, 0x022d }, // U022D # LATIN SMALL LETTER O WITH TILDE AND MACRON
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0000, 0x0072, 0, 0}, 0x1e5d }, // U1E5D # LATIN SMALL LETTER R WITH DOT BELOW AND MACRON
++ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0021, 0x004c, 0, 0}, 0x1e38 }, // U1E38 # LATIN CAPITAL LETTER L WITH DOT BELOW AND MACRON
++ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0021, 0x0052, 0, 0}, 0x1e5c }, // U1E5C # LATIN CAPITAL LETTER R WITH DOT BELOW AND MACRON
++ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0021, 0x006c, 0, 0}, 0x1e39 }, // U1E39 # LATIN SMALL LETTER L WITH DOT BELOW AND MACRON
++ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0021, 0x0072, 0, 0}, 0x1e5d }, // U1E5D # LATIN SMALL LETTER R WITH DOT BELOW AND MACRON
++ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0022, 0x0041, 0, 0}, 0x01de }, // U01DE # LATIN CAPITAL LETTER A WITH DIAERESIS AND MACRON
++ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0022, 0x004f, 0, 0}, 0x022a }, // U022A # LATIN CAPITAL LETTER O WITH DIAERESIS AND MACRON
++ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0022, 0x0055, 0, 0}, 0x01d5 }, // U01D5 # LATIN CAPITAL LETTER U WITH DIAERESIS AND MACRON
++ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0022, 0x0061, 0, 0}, 0x01df }, // U01DF # LATIN SMALL LETTER A WITH DIAERESIS AND MACRON
++ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0022, 0x006f, 0, 0}, 0x022b }, // U022B # LATIN SMALL LETTER O WITH DIAERESIS AND MACRON
++ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0022, 0x0075, 0, 0}, 0x01d6 }, // U01D6 # LATIN SMALL LETTER U WITH DIAERESIS AND MACRON
++ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0028, 0, 0, 0}, 0x208d }, // U208D # SUBSCRIPT LEFT PARENTHESIS
++ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0028, 0, 0, 0}, 0x208d }, // U208D # SUBSCRIPT LEFT PARENTHESIS
++ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0029, 0, 0, 0}, 0x208e }, // U208E # SUBSCRIPT RIGHT PARENTHESIS
++ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0029, 0, 0, 0}, 0x208e }, // U208E # SUBSCRIPT RIGHT PARENTHESIS
++ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x002b, 0, 0, 0}, 0x208a }, // U208A # SUBSCRIPT PLUS SIGN
++ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x002b, 0, 0, 0}, 0x208a }, // U208A # SUBSCRIPT PLUS SIGN
++ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x002e, 0x0041, 0, 0}, 0x01e0 }, // U01E0 # LATIN CAPITAL LETTER A WITH DOT ABOVE AND MACRON
++ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x002e, 0x004f, 0, 0}, 0x0230 }, // U0230 # LATIN CAPITAL LETTER O WITH DOT ABOVE AND MACRON
++ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x002e, 0x0061, 0, 0}, 0x01e1 }, // U01E1 # LATIN SMALL LETTER A WITH DOT ABOVE AND MACRON
++ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x002e, 0x006f, 0, 0}, 0x0231 }, // U0231 # LATIN SMALL LETTER O WITH DOT ABOVE AND MACRON
++ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0030, 0, 0, 0}, 0x2080 }, // U2080 # SUBSCRIPT ZERO
++ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0030, 0, 0, 0}, 0x2080 }, // U2080 # SUBSCRIPT ZERO
++ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0031, 0, 0, 0}, 0x2081 }, // U2081 # SUBSCRIPT ONE
++ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0031, 0, 0, 0}, 0x2081 }, // U2081 # SUBSCRIPT ONE
++ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0032, 0, 0, 0}, 0x2082 }, // U2082 # SUBSCRIPT TWO
++ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0032, 0, 0, 0}, 0x2082 }, // U2082 # SUBSCRIPT TWO
++ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0033, 0, 0, 0}, 0x2083 }, // U2083 # SUBSCRIPT THREE
++ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0033, 0, 0, 0}, 0x2083 }, // U2083 # SUBSCRIPT THREE
++ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0034, 0, 0, 0}, 0x2084 }, // U2084 # SUBSCRIPT FOUR
++ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0034, 0, 0, 0}, 0x2084 }, // U2084 # SUBSCRIPT FOUR
++ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0035, 0, 0, 0}, 0x2085 }, // U2085 # SUBSCRIPT FIVE
++ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0035, 0, 0, 0}, 0x2085 }, // U2085 # SUBSCRIPT FIVE
++ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0036, 0, 0, 0}, 0x2086 }, // U2086 # SUBSCRIPT SIX
++ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0036, 0, 0, 0}, 0x2086 }, // U2086 # SUBSCRIPT SIX
++ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0037, 0, 0, 0}, 0x2087 }, // U2087 # SUBSCRIPT SEVEN
++ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0037, 0, 0, 0}, 0x2087 }, // U2087 # SUBSCRIPT SEVEN
++ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0038, 0, 0, 0}, 0x2088 }, // U2088 # SUBSCRIPT EIGHT
++ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0038, 0, 0, 0}, 0x2088 }, // U2088 # SUBSCRIPT EIGHT
++ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0039, 0, 0, 0}, 0x2089 }, // U2089 # SUBSCRIPT NINE
++ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0039, 0, 0, 0}, 0x2089 }, // U2089 # SUBSCRIPT NINE
++ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x003b, 0x004f, 0, 0}, 0x01ec }, // U01EC # LATIN CAPITAL LETTER O WITH OGONEK AND MACRON
++ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x003b, 0x006f, 0, 0}, 0x01ed }, // U01ED # LATIN SMALL LETTER O WITH OGONEK AND MACRON
++ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x003d, 0, 0, 0}, 0x208c }, // U208C # SUBSCRIPT EQUALS SIGN
++ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x003d, 0, 0, 0}, 0x208c }, // U208C # SUBSCRIPT EQUALS SIGN
++ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0041, 0, 0, 0}, 0x0100 }, // U0100 # LATIN CAPITAL LETTER A WITH MACRON
++ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0045, 0, 0, 0}, 0x0112 }, // U0112 # LATIN CAPITAL LETTER E WITH MACRON
++ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0047, 0, 0, 0}, 0x1e20 }, // U1E20 # LATIN CAPITAL LETTER G WITH MACRON
++ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0049, 0, 0, 0}, 0x012a }, // U012A # LATIN CAPITAL LETTER I WITH MACRON
++ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x004f, 0, 0, 0}, 0x014c }, // U014C # LATIN CAPITAL LETTER O WITH MACRON
++ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0055, 0, 0, 0}, 0x016a }, // U016A # LATIN CAPITAL LETTER U WITH MACRON
++ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0059, 0, 0, 0}, 0x0232 }, // U0232 # LATIN CAPITAL LETTER Y WITH MACRON
++ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0061, 0, 0, 0}, 0x0101 }, // U0101 # LATIN SMALL LETTER A WITH MACRON
++ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0065, 0, 0, 0}, 0x0113 }, // U0113 # LATIN SMALL LETTER E WITH MACRON
++ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0067, 0, 0, 0}, 0x1e21 }, // U1E21 # LATIN SMALL LETTER G WITH MACRON
++ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0069, 0, 0, 0}, 0x012b }, // U012B # LATIN SMALL LETTER I WITH MACRON
++ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x006f, 0, 0, 0}, 0x014d }, // U014D # LATIN SMALL LETTER O WITH MACRON
++ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0075, 0, 0, 0}, 0x016b }, // U016B # LATIN SMALL LETTER U WITH MACRON
++ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0079, 0, 0, 0}, 0x0233 }, // U0233 # LATIN SMALL LETTER Y WITH MACRON
++ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x007e, 0x004f, 0, 0}, 0x022c }, // U022C # LATIN CAPITAL LETTER O WITH TILDE AND MACRON
++ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x007e, 0x006f, 0, 0}, 0x022d }, // U022D # LATIN SMALL LETTER O WITH TILDE AND MACRON
++ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x00c4, 0, 0, 0}, 0x01de }, // U01DE # LATIN CAPITAL LETTER A WITH DIAERESIS AND MACRON
++ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x00c6, 0, 0, 0}, 0x01e2 }, // U01E2 # LATIN CAPITAL LETTER AE WITH MACRON
++ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x00d5, 0, 0, 0}, 0x022c }, // U022C # LATIN CAPITAL LETTER O WITH TILDE AND MACRON
++ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x00d6, 0, 0, 0}, 0x022a }, // U022A # LATIN CAPITAL LETTER O WITH DIAERESIS AND MACRON
++ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x00dc, 0, 0, 0}, 0x01d5 }, // U01D5 # LATIN CAPITAL LETTER U WITH DIAERESIS AND MACRON
++ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x00e4, 0, 0, 0}, 0x01df }, // U01DF # LATIN SMALL LETTER A WITH DIAERESIS AND MACRON
++ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x00e6, 0, 0, 0}, 0x01e3 }, // U01E3 # LATIN SMALL LETTER AE WITH MACRON
++ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x00f5, 0, 0, 0}, 0x022d }, // U022D # LATIN SMALL LETTER O WITH TILDE AND MACRON
++ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x00f6, 0, 0, 0}, 0x022b }, // U022B # LATIN SMALL LETTER O WITH DIAERESIS AND MACRON
++ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x00fc, 0, 0, 0}, 0x01d6 }, // U01D6 # LATIN SMALL LETTER U WITH DIAERESIS AND MACRON
++ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x01ea, 0, 0, 0}, 0x01ec }, // U01EC # LATIN CAPITAL LETTER O WITH OGONEK AND MACRON
++ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x01eb, 0, 0, 0}, 0x01ed }, // U01ED # LATIN SMALL LETTER O WITH OGONEK AND MACRON
++ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0226, 0, 0, 0}, 0x01e0 }, // U01E0 # LATIN CAPITAL LETTER A WITH DOT ABOVE AND MACRON
++ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0227, 0, 0, 0}, 0x01e1 }, // U01E1 # LATIN SMALL LETTER A WITH DOT ABOVE AND MACRON
++ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x022e, 0, 0, 0}, 0x0230 }, // U0230 # LATIN CAPITAL LETTER O WITH DOT ABOVE AND MACRON
++ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x022f, 0, 0, 0}, 0x0231 }, // U0231 # LATIN SMALL LETTER O WITH DOT ABOVE AND MACRON
++ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0391, 0, 0, 0}, 0x1fb9 }, // U1FB9 # GREEK CAPITAL LETTER ALPHA WITH MACRON
++ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0399, 0, 0, 0}, 0x1fd9 }, // U1FD9 # GREEK CAPITAL LETTER IOTA WITH MACRON
++ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x03a5, 0, 0, 0}, 0x1fe9 }, // U1FE9 # GREEK CAPITAL LETTER UPSILON WITH MACRON
++ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x03b1, 0, 0, 0}, 0x1fb1 }, // U1FB1 # GREEK SMALL LETTER ALPHA WITH MACRON
++ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x03b9, 0, 0, 0}, 0x1fd1 }, // U1FD1 # GREEK SMALL LETTER IOTA WITH MACRON
++ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x03c5, 0, 0, 0}, 0x1fe1 }, // U1FE1 # GREEK SMALL LETTER UPSILON WITH MACRON
++ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0418, 0, 0, 0}, 0x04e2 }, // U04E2 # CYRILLIC CAPITAL LETTER I WITH MACRON
++ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0423, 0, 0, 0}, 0x04ee }, // U04EE # CYRILLIC CAPITAL LETTER U WITH MACRON
++ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0438, 0, 0, 0}, 0x04e3 }, // U04E3 # CYRILLIC SMALL LETTER I WITH MACRON
++ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0443, 0, 0, 0}, 0x04ef }, // U04EF # CYRILLIC SMALL LETTER U WITH MACRON
++ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x1e36, 0, 0, 0}, 0x1e38 }, // U1E38 # LATIN CAPITAL LETTER L WITH DOT BELOW AND MACRON
++ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x1e37, 0, 0, 0}, 0x1e39 }, // U1E39 # LATIN SMALL LETTER L WITH DOT BELOW AND MACRON
++ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x1e5a, 0, 0, 0}, 0x1e5c }, // U1E5C # LATIN CAPITAL LETTER R WITH DOT BELOW AND MACRON
++ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x1e5b, 0, 0, 0}, 0x1e5d }, // U1E5D # LATIN SMALL LETTER R WITH DOT BELOW AND MACRON
++ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x2212, 0, 0, 0}, 0x208b }, // U208B # SUBSCRIPT MINUS
++ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x2212, 0, 0, 0}, 0x208b }, // U208B # SUBSCRIPT MINUS
++ { {UNITIZE(Qt::Key_Multi_key), 0x005f, UNITIZE(Qt::Key_Dead_Tilde), 0x004f, 0, 0}, 0x022c }, // U022C # LATIN CAPITAL LETTER O WITH TILDE AND MACRON
++ { {UNITIZE(Qt::Key_Multi_key), 0x005f, UNITIZE(Qt::Key_Dead_Tilde), 0x006f, 0, 0}, 0x022d }, // U022D # LATIN SMALL LETTER O WITH TILDE AND MACRON
++ { {UNITIZE(Qt::Key_Multi_key), 0x005f, UNITIZE(Qt::Key_Dead_Abovedot), 0x0041, 0, 0}, 0x01e0 }, // U01E0 # LATIN CAPITAL LETTER A WITH DOT ABOVE AND MACRON
++ { {UNITIZE(Qt::Key_Multi_key), 0x005f, UNITIZE(Qt::Key_Dead_Abovedot), 0x004f, 0, 0}, 0x0230 }, // U0230 # LATIN CAPITAL LETTER O WITH DOT ABOVE AND MACRON
++ { {UNITIZE(Qt::Key_Multi_key), 0x005f, UNITIZE(Qt::Key_Dead_Abovedot), 0x0061, 0, 0}, 0x01e1 }, // U01E1 # LATIN SMALL LETTER A WITH DOT ABOVE AND MACRON
++ { {UNITIZE(Qt::Key_Multi_key), 0x005f, UNITIZE(Qt::Key_Dead_Abovedot), 0x006f, 0, 0}, 0x0231 }, // U0231 # LATIN SMALL LETTER O WITH DOT ABOVE AND MACRON
++ { {UNITIZE(Qt::Key_Multi_key), 0x005f, UNITIZE(Qt::Key_Dead_Diaeresis), 0x0041, 0, 0}, 0x01de }, // U01DE # LATIN CAPITAL LETTER A WITH DIAERESIS AND MACRON
++ { {UNITIZE(Qt::Key_Multi_key), 0x005f, UNITIZE(Qt::Key_Dead_Diaeresis), 0x004f, 0, 0}, 0x022a }, // U022A # LATIN CAPITAL LETTER O WITH DIAERESIS AND MACRON
++ { {UNITIZE(Qt::Key_Multi_key), 0x005f, UNITIZE(Qt::Key_Dead_Diaeresis), 0x0055, 0, 0}, 0x01d5 }, // U01D5 # LATIN CAPITAL LETTER U WITH DIAERESIS AND MACRON
++ { {UNITIZE(Qt::Key_Multi_key), 0x005f, UNITIZE(Qt::Key_Dead_Diaeresis), 0x0061, 0, 0}, 0x01df }, // U01DF # LATIN SMALL LETTER A WITH DIAERESIS AND MACRON
++ { {UNITIZE(Qt::Key_Multi_key), 0x005f, UNITIZE(Qt::Key_Dead_Diaeresis), 0x006f, 0, 0}, 0x022b }, // U022B # LATIN SMALL LETTER O WITH DIAERESIS AND MACRON
++ { {UNITIZE(Qt::Key_Multi_key), 0x005f, UNITIZE(Qt::Key_Dead_Diaeresis), 0x0075, 0, 0}, 0x01d6 }, // U01D6 # LATIN SMALL LETTER U WITH DIAERESIS AND MACRON
++ { {UNITIZE(Qt::Key_Multi_key), 0x005f, UNITIZE(Qt::Key_Dead_Ogonek), 0x004f, 0, 0}, 0x01ec }, // U01EC # LATIN CAPITAL LETTER O WITH OGONEK AND MACRON
++ { {UNITIZE(Qt::Key_Multi_key), 0x005f, UNITIZE(Qt::Key_Dead_Ogonek), 0x006f, 0, 0}, 0x01ed }, // U01ED # LATIN SMALL LETTER O WITH OGONEK AND MACRON
++ { {UNITIZE(Qt::Key_Multi_key), 0x005f, UNITIZE(Qt::Key_Dead_Belowdot), 0x004c, 0, 0}, 0x1e38 }, // U1E38 # LATIN CAPITAL LETTER L WITH DOT BELOW AND MACRON
++ { {UNITIZE(Qt::Key_Multi_key), 0x005f, UNITIZE(Qt::Key_Dead_Belowdot), 0x0052, 0, 0}, 0x1e5c }, // U1E5C # LATIN CAPITAL LETTER R WITH DOT BELOW AND MACRON
++ { {UNITIZE(Qt::Key_Multi_key), 0x005f, UNITIZE(Qt::Key_Dead_Belowdot), 0x006c, 0, 0}, 0x1e39 }, // U1E39 # LATIN SMALL LETTER L WITH DOT BELOW AND MACRON
++ { {UNITIZE(Qt::Key_Multi_key), 0x005f, UNITIZE(Qt::Key_Dead_Belowdot), 0x0072, 0, 0}, 0x1e5d }, // U1E5D # LATIN SMALL LETTER R WITH DOT BELOW AND MACRON
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0000, 0, 0, 0}, 0x1edd }, // U1EDD # LATIN SMALL LETTER O WITH HORN AND GRAVE
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0000, 0, 0, 0}, 0x1eea }, // U1EEA # LATIN CAPITAL LETTER U WITH HORN AND GRAVE
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0000, 0, 0, 0}, 0x1edc }, // U1EDC # LATIN CAPITAL LETTER O WITH HORN AND GRAVE
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0000, 0, 0, 0}, 0x1eeb }, // U1EEB # LATIN SMALL LETTER U WITH HORN AND GRAVE
++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0020, 0, 0, 0}, 0x0060 }, // grave
++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0022, 0x0055, 0, 0}, 0x01db }, // U01DB # LATIN CAPITAL LETTER U WITH DIAERESIS AND GRAVE
++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0022, 0x0075, 0, 0}, 0x01dc }, // U01DC # LATIN SMALL LETTER U WITH DIAERESIS AND GRAVE
++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0022, 0x03b9, 0, 0}, 0x1fd2 }, // U1FD2 # GREEK SMALL LETTER IOTA WITH DIALYTIKA AND VARIA
++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0022, 0x03c5, 0, 0}, 0x1fe2 }, // U1FE2 # GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND VARIA
++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0028, 0x0391, 0, 0}, 0x1f0b }, // U1F0B # GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA
++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0028, 0x0395, 0, 0}, 0x1f1b }, // U1F1B # GREEK CAPITAL LETTER EPSILON WITH DASIA AND VARIA
++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0028, 0x0397, 0, 0}, 0x1f2b }, // U1F2B # GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA
++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0028, 0x0399, 0, 0}, 0x1f3b }, // U1F3B # GREEK CAPITAL LETTER IOTA WITH DASIA AND VARIA
++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0028, 0x039f, 0, 0}, 0x1f4b }, // U1F4B # GREEK CAPITAL LETTER OMICRON WITH DASIA AND VARIA
++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0028, 0x03a5, 0, 0}, 0x1f5b }, // U1F5B # GREEK CAPITAL LETTER UPSILON WITH DASIA AND VARIA
++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0028, 0x03a9, 0, 0}, 0x1f6b }, // U1F6B # GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA
++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0028, 0x03b1, 0, 0}, 0x1f03 }, // U1F03 # GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA
++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0028, 0x03b5, 0, 0}, 0x1f13 }, // U1F13 # GREEK SMALL LETTER EPSILON WITH DASIA AND VARIA
++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0028, 0x03b7, 0, 0}, 0x1f23 }, // U1F23 # GREEK SMALL LETTER ETA WITH DASIA AND VARIA
++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0028, 0x03b9, 0, 0}, 0x1f33 }, // U1F33 # GREEK SMALL LETTER IOTA WITH DASIA AND VARIA
++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0028, 0x03bf, 0, 0}, 0x1f43 }, // U1F43 # GREEK SMALL LETTER OMICRON WITH DASIA AND VARIA
++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0028, 0x03c5, 0, 0}, 0x1f53 }, // U1F53 # GREEK SMALL LETTER UPSILON WITH DASIA AND VARIA
++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0028, 0x03c9, 0, 0}, 0x1f63 }, // U1F63 # GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA
++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0029, 0x0391, 0, 0}, 0x1f0a }, // U1F0A # GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA
++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0029, 0x0395, 0, 0}, 0x1f1a }, // U1F1A # GREEK CAPITAL LETTER EPSILON WITH PSILI AND VARIA
++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0029, 0x0397, 0, 0}, 0x1f2a }, // U1F2A # GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA
++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0029, 0x0399, 0, 0}, 0x1f3a }, // U1F3A # GREEK CAPITAL LETTER IOTA WITH PSILI AND VARIA
++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0029, 0x039f, 0, 0}, 0x1f4a }, // U1F4A # GREEK CAPITAL LETTER OMICRON WITH PSILI AND VARIA
++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0029, 0x03a9, 0, 0}, 0x1f6a }, // U1F6A # GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA
++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0029, 0x03b1, 0, 0}, 0x1f02 }, // U1F02 # GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA
++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0029, 0x03b5, 0, 0}, 0x1f12 }, // U1F12 # GREEK SMALL LETTER EPSILON WITH PSILI AND VARIA
++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0029, 0x03b7, 0, 0}, 0x1f22 }, // U1F22 # GREEK SMALL LETTER ETA WITH PSILI AND VARIA
++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0029, 0x03b9, 0, 0}, 0x1f32 }, // U1F32 # GREEK SMALL LETTER IOTA WITH PSILI AND VARIA
++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0029, 0x03bf, 0, 0}, 0x1f42 }, // U1F42 # GREEK SMALL LETTER OMICRON WITH PSILI AND VARIA
++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0029, 0x03c5, 0, 0}, 0x1f52 }, // U1F52 # GREEK SMALL LETTER UPSILON WITH PSILI AND VARIA
++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0029, 0x03c9, 0, 0}, 0x1f62 }, // U1F62 # GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA
++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x002b, 0x004f, 0, 0}, 0x1edc }, // U1EDC # LATIN CAPITAL LETTER O WITH HORN AND GRAVE
++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x002b, 0x0055, 0, 0}, 0x1eea }, // U1EEA # LATIN CAPITAL LETTER U WITH HORN AND GRAVE
++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x002b, 0x006f, 0, 0}, 0x1edd }, // U1EDD # LATIN SMALL LETTER O WITH HORN AND GRAVE
++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x002b, 0x0075, 0, 0}, 0x1eeb }, // U1EEB # LATIN SMALL LETTER U WITH HORN AND GRAVE
++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0041, 0, 0, 0}, 0x00c0 }, // U00C0 # LATIN CAPITAL LETTER A WITH GRAVE
++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0045, 0, 0, 0}, 0x00c8 }, // U00C8 # LATIN CAPITAL LETTER E WITH GRAVE
++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0049, 0, 0, 0}, 0x00cc }, // U00CC # LATIN CAPITAL LETTER I WITH GRAVE
++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x004e, 0, 0, 0}, 0x01f8 }, // U01F8 # LATIN CAPITAL LETTER N WITH GRAVE
++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x004f, 0, 0, 0}, 0x00d2 }, // U00D2 # LATIN CAPITAL LETTER O WITH GRAVE
++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0055, 0, 0, 0}, 0x00d9 }, // U00D9 # LATIN CAPITAL LETTER U WITH GRAVE
++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0055, 0x0041, 0, 0}, 0x1eb0 }, // U1EB0 # LATIN CAPITAL LETTER A WITH BREVE AND GRAVE
++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0055, 0x0061, 0, 0}, 0x1eb1 }, // U1EB1 # LATIN SMALL LETTER A WITH BREVE AND GRAVE
++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0057, 0, 0, 0}, 0x1e80 }, // U1E80 # LATIN CAPITAL LETTER W WITH GRAVE
++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0059, 0, 0, 0}, 0x1ef2 }, // U1EF2 # LATIN CAPITAL LETTER Y WITH GRAVE
++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x005e, 0x0041, 0, 0}, 0x1ea6 }, // U1EA6 # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND GRAVE
++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x005e, 0x0045, 0, 0}, 0x1ec0 }, // U1EC0 # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND GRAVE
++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x005e, 0x004f, 0, 0}, 0x1ed2 }, // U1ED2 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND GRAVE
++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x005e, 0x0061, 0, 0}, 0x1ea7 }, // U1EA7 # LATIN SMALL LETTER A WITH CIRCUMFLEX AND GRAVE
++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x005e, 0x0065, 0, 0}, 0x1ec1 }, // U1EC1 # LATIN SMALL LETTER E WITH CIRCUMFLEX AND GRAVE
++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x005e, 0x006f, 0, 0}, 0x1ed3 }, // U1ED3 # LATIN SMALL LETTER O WITH CIRCUMFLEX AND GRAVE
++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x005f, 0x0045, 0, 0}, 0x1e14 }, // U1E14 # LATIN CAPITAL LETTER E WITH MACRON AND GRAVE
++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x005f, 0x004f, 0, 0}, 0x1e50 }, // U1E50 # LATIN CAPITAL LETTER O WITH MACRON AND GRAVE
++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x005f, 0x0065, 0, 0}, 0x1e15 }, // U1E15 # LATIN SMALL LETTER E WITH MACRON AND GRAVE
++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x005f, 0x006f, 0, 0}, 0x1e51 }, // U1E51 # LATIN SMALL LETTER O WITH MACRON AND GRAVE
++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0061, 0, 0, 0}, 0x00e0 }, // U00E0 # LATIN SMALL LETTER A WITH GRAVE
++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0062, 0x0041, 0, 0}, 0x1eb0 }, // U1EB0 # LATIN CAPITAL LETTER A WITH BREVE AND GRAVE
++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0062, 0x0061, 0, 0}, 0x1eb1 }, // U1EB1 # LATIN SMALL LETTER A WITH BREVE AND GRAVE
++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0065, 0, 0, 0}, 0x00e8 }, // U00E8 # LATIN SMALL LETTER E WITH GRAVE
++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0069, 0, 0, 0}, 0x00ec }, // U00EC # LATIN SMALL LETTER I WITH GRAVE
++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x006e, 0, 0, 0}, 0x01f9 }, // U01F9 # LATIN SMALL LETTER N WITH GRAVE
++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x006f, 0, 0, 0}, 0x00f2 }, // U00F2 # LATIN SMALL LETTER O WITH GRAVE
++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0075, 0, 0, 0}, 0x00f9 }, // U00F9 # LATIN SMALL LETTER U WITH GRAVE
++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0077, 0, 0, 0}, 0x1e81 }, // U1E81 # LATIN SMALL LETTER W WITH GRAVE
++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0079, 0, 0, 0}, 0x1ef3 }, // U1EF3 # LATIN SMALL LETTER Y WITH GRAVE
++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x00af, 0x0045, 0, 0}, 0x1e14 }, // U1E14 # LATIN CAPITAL LETTER E WITH MACRON AND GRAVE
++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x00af, 0x004f, 0, 0}, 0x1e50 }, // U1E50 # LATIN CAPITAL LETTER O WITH MACRON AND GRAVE
++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x00af, 0x0065, 0, 0}, 0x1e15 }, // U1E15 # LATIN SMALL LETTER E WITH MACRON AND GRAVE
++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x00af, 0x006f, 0, 0}, 0x1e51 }, // U1E51 # LATIN SMALL LETTER O WITH MACRON AND GRAVE
++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x00c2, 0, 0, 0}, 0x1ea6 }, // U1EA6 # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND GRAVE
++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x00ca, 0, 0, 0}, 0x1ec0 }, // U1EC0 # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND GRAVE
++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x00d4, 0, 0, 0}, 0x1ed2 }, // U1ED2 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND GRAVE
++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x00dc, 0, 0, 0}, 0x01db }, // U01DB # LATIN CAPITAL LETTER U WITH DIAERESIS AND GRAVE
++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x00e2, 0, 0, 0}, 0x1ea7 }, // U1EA7 # LATIN SMALL LETTER A WITH CIRCUMFLEX AND GRAVE
++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x00ea, 0, 0, 0}, 0x1ec1 }, // U1EC1 # LATIN SMALL LETTER E WITH CIRCUMFLEX AND GRAVE
++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x00f4, 0, 0, 0}, 0x1ed3 }, // U1ED3 # LATIN SMALL LETTER O WITH CIRCUMFLEX AND GRAVE
++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x00fc, 0, 0, 0}, 0x01dc }, // U01DC # LATIN SMALL LETTER U WITH DIAERESIS AND GRAVE
++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0102, 0, 0, 0}, 0x1eb0 }, // U1EB0 # LATIN CAPITAL LETTER A WITH BREVE AND GRAVE
++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0103, 0, 0, 0}, 0x1eb1 }, // U1EB1 # LATIN SMALL LETTER A WITH BREVE AND GRAVE
++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0112, 0, 0, 0}, 0x1e14 }, // U1E14 # LATIN CAPITAL LETTER E WITH MACRON AND GRAVE
++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0113, 0, 0, 0}, 0x1e15 }, // U1E15 # LATIN SMALL LETTER E WITH MACRON AND GRAVE
++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x014c, 0, 0, 0}, 0x1e50 }, // U1E50 # LATIN CAPITAL LETTER O WITH MACRON AND GRAVE
++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x014d, 0, 0, 0}, 0x1e51 }, // U1E51 # LATIN SMALL LETTER O WITH MACRON AND GRAVE
++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0313, 0x0391, 0, 0}, 0x1f0a }, // U1F0A # GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA
++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0313, 0x0395, 0, 0}, 0x1f1a }, // U1F1A # GREEK CAPITAL LETTER EPSILON WITH PSILI AND VARIA
++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0313, 0x0397, 0, 0}, 0x1f2a }, // U1F2A # GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA
++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0313, 0x0399, 0, 0}, 0x1f3a }, // U1F3A # GREEK CAPITAL LETTER IOTA WITH PSILI AND VARIA
++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0313, 0x039f, 0, 0}, 0x1f4a }, // U1F4A # GREEK CAPITAL LETTER OMICRON WITH PSILI AND VARIA
++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0313, 0x03a9, 0, 0}, 0x1f6a }, // U1F6A # GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA
++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0313, 0x03b1, 0, 0}, 0x1f02 }, // U1F02 # GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA
++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0313, 0x03b5, 0, 0}, 0x1f12 }, // U1F12 # GREEK SMALL LETTER EPSILON WITH PSILI AND VARIA
++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0313, 0x03b7, 0, 0}, 0x1f22 }, // U1F22 # GREEK SMALL LETTER ETA WITH PSILI AND VARIA
++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0313, 0x03b9, 0, 0}, 0x1f32 }, // U1F32 # GREEK SMALL LETTER IOTA WITH PSILI AND VARIA
++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0313, 0x03bf, 0, 0}, 0x1f42 }, // U1F42 # GREEK SMALL LETTER OMICRON WITH PSILI AND VARIA
++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0313, 0x03c5, 0, 0}, 0x1f52 }, // U1F52 # GREEK SMALL LETTER UPSILON WITH PSILI AND VARIA
++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0313, 0x03c9, 0, 0}, 0x1f62 }, // U1F62 # GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA
++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0314, 0x0391, 0, 0}, 0x1f0b }, // U1F0B # GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA
++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0314, 0x0395, 0, 0}, 0x1f1b }, // U1F1B # GREEK CAPITAL LETTER EPSILON WITH DASIA AND VARIA
++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0314, 0x0397, 0, 0}, 0x1f2b }, // U1F2B # GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA
++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0314, 0x0399, 0, 0}, 0x1f3b }, // U1F3B # GREEK CAPITAL LETTER IOTA WITH DASIA AND VARIA
++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0314, 0x039f, 0, 0}, 0x1f4b }, // U1F4B # GREEK CAPITAL LETTER OMICRON WITH DASIA AND VARIA
++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0314, 0x03a5, 0, 0}, 0x1f5b }, // U1F5B # GREEK CAPITAL LETTER UPSILON WITH DASIA AND VARIA
++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0314, 0x03a9, 0, 0}, 0x1f6b }, // U1F6B # GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA
++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0314, 0x03b1, 0, 0}, 0x1f03 }, // U1F03 # GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA
++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0314, 0x03b5, 0, 0}, 0x1f13 }, // U1F13 # GREEK SMALL LETTER EPSILON WITH DASIA AND VARIA
++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0314, 0x03b7, 0, 0}, 0x1f23 }, // U1F23 # GREEK SMALL LETTER ETA WITH DASIA AND VARIA
++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0314, 0x03b9, 0, 0}, 0x1f33 }, // U1F33 # GREEK SMALL LETTER IOTA WITH DASIA AND VARIA
++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0314, 0x03bf, 0, 0}, 0x1f43 }, // U1F43 # GREEK SMALL LETTER OMICRON WITH DASIA AND VARIA
++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0314, 0x03c5, 0, 0}, 0x1f53 }, // U1F53 # GREEK SMALL LETTER UPSILON WITH DASIA AND VARIA
++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0314, 0x03c9, 0, 0}, 0x1f63 }, // U1F63 # GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA
++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0391, 0, 0, 0}, 0x1fba }, // U1FBA # GREEK CAPITAL LETTER ALPHA WITH VARIA
++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0395, 0, 0, 0}, 0x1fc8 }, // U1FC8 # GREEK CAPITAL LETTER EPSILON WITH VARIA
++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0397, 0, 0, 0}, 0x1fca }, // U1FCA # GREEK CAPITAL LETTER ETA WITH VARIA
++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0399, 0, 0, 0}, 0x1fda }, // U1FDA # GREEK CAPITAL LETTER IOTA WITH VARIA
++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x039f, 0, 0, 0}, 0x1ff8 }, // U1FF8 # GREEK CAPITAL LETTER OMICRON WITH VARIA
++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x03a5, 0, 0, 0}, 0x1fea }, // U1FEA # GREEK CAPITAL LETTER UPSILON WITH VARIA
++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x03a9, 0, 0, 0}, 0x1ffa }, // U1FFA # GREEK CAPITAL LETTER OMEGA WITH VARIA
++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x03b1, 0, 0, 0}, 0x1f70 }, // U1F70 # GREEK SMALL LETTER ALPHA WITH VARIA
++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x03b5, 0, 0, 0}, 0x1f72 }, // U1F72 # GREEK SMALL LETTER EPSILON WITH VARIA
++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x03b7, 0, 0, 0}, 0x1f74 }, // U1F74 # GREEK SMALL LETTER ETA WITH VARIA
++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x03b9, 0, 0, 0}, 0x1f76 }, // U1F76 # GREEK SMALL LETTER IOTA WITH VARIA
++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x03bf, 0, 0, 0}, 0x1f78 }, // U1F78 # GREEK SMALL LETTER OMICRON WITH VARIA
++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x03c5, 0, 0, 0}, 0x1f7a }, // U1F7A # GREEK SMALL LETTER UPSILON WITH VARIA
++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x03c9, 0, 0, 0}, 0x1f7c }, // U1F7C # GREEK SMALL LETTER OMEGA WITH VARIA
++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x03ca, 0, 0, 0}, 0x1fd2 }, // U1FD2 # GREEK SMALL LETTER IOTA WITH DIALYTIKA AND VARIA
++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x03cb, 0, 0, 0}, 0x1fe2 }, // U1FE2 # GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND VARIA
++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0415, 0, 0, 0}, 0x0400 }, // U0400 # CYRILLIC CAPITAL LETTER IE WITH GRAVE
++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0418, 0, 0, 0}, 0x040d }, // U040D # CYRILLIC CAPITAL LETTER I WITH GRAVE
++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0435, 0, 0, 0}, 0x0450 }, // U0450 # CYRILLIC SMALL LETTER IE WITH GRAVE
++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0438, 0, 0, 0}, 0x045d }, // U045D # CYRILLIC SMALL LETTER I WITH GRAVE
++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x1f00, 0, 0, 0}, 0x1f02 }, // U1F02 # GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA
++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x1f01, 0, 0, 0}, 0x1f03 }, // U1F03 # GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA
++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x1f08, 0, 0, 0}, 0x1f0a }, // U1F0A # GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA
++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x1f09, 0, 0, 0}, 0x1f0b }, // U1F0B # GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA
++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x1f10, 0, 0, 0}, 0x1f12 }, // U1F12 # GREEK SMALL LETTER EPSILON WITH PSILI AND VARIA
++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x1f11, 0, 0, 0}, 0x1f13 }, // U1F13 # GREEK SMALL LETTER EPSILON WITH DASIA AND VARIA
++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x1f18, 0, 0, 0}, 0x1f1a }, // U1F1A # GREEK CAPITAL LETTER EPSILON WITH PSILI AND VARIA
++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x1f19, 0, 0, 0}, 0x1f1b }, // U1F1B # GREEK CAPITAL LETTER EPSILON WITH DASIA AND VARIA
++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x1f20, 0, 0, 0}, 0x1f22 }, // U1F22 # GREEK SMALL LETTER ETA WITH PSILI AND VARIA
++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x1f21, 0, 0, 0}, 0x1f23 }, // U1F23 # GREEK SMALL LETTER ETA WITH DASIA AND VARIA
++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x1f28, 0, 0, 0}, 0x1f2a }, // U1F2A # GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA
++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x1f29, 0, 0, 0}, 0x1f2b }, // U1F2B # GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA
++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x1f30, 0, 0, 0}, 0x1f32 }, // U1F32 # GREEK SMALL LETTER IOTA WITH PSILI AND VARIA
++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x1f31, 0, 0, 0}, 0x1f33 }, // U1F33 # GREEK SMALL LETTER IOTA WITH DASIA AND VARIA
++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x1f38, 0, 0, 0}, 0x1f3a }, // U1F3A # GREEK CAPITAL LETTER IOTA WITH PSILI AND VARIA
++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x1f39, 0, 0, 0}, 0x1f3b }, // U1F3B # GREEK CAPITAL LETTER IOTA WITH DASIA AND VARIA
++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x1f40, 0, 0, 0}, 0x1f42 }, // U1F42 # GREEK SMALL LETTER OMICRON WITH PSILI AND VARIA
++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x1f41, 0, 0, 0}, 0x1f43 }, // U1F43 # GREEK SMALL LETTER OMICRON WITH DASIA AND VARIA
++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x1f48, 0, 0, 0}, 0x1f4a }, // U1F4A # GREEK CAPITAL LETTER OMICRON WITH PSILI AND VARIA
++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x1f49, 0, 0, 0}, 0x1f4b }, // U1F4B # GREEK CAPITAL LETTER OMICRON WITH DASIA AND VARIA
++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x1f50, 0, 0, 0}, 0x1f52 }, // U1F52 # GREEK SMALL LETTER UPSILON WITH PSILI AND VARIA
++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x1f51, 0, 0, 0}, 0x1f53 }, // U1F53 # GREEK SMALL LETTER UPSILON WITH DASIA AND VARIA
++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x1f59, 0, 0, 0}, 0x1f5b }, // U1F5B # GREEK CAPITAL LETTER UPSILON WITH DASIA AND VARIA
++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x1f60, 0, 0, 0}, 0x1f62 }, // U1F62 # GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA
++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x1f61, 0, 0, 0}, 0x1f63 }, // U1F63 # GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA
++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x1f68, 0, 0, 0}, 0x1f6a }, // U1F6A # GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA
++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x1f69, 0, 0, 0}, 0x1f6b }, // U1F6B # GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA
++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, UNITIZE(Qt::Key_Dead_Circumflex), 0x0041, 0, 0}, 0x1ea6 }, // U1EA6 # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND GRAVE
++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, UNITIZE(Qt::Key_Dead_Circumflex), 0x0045, 0, 0}, 0x1ec0 }, // U1EC0 # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND GRAVE
++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, UNITIZE(Qt::Key_Dead_Circumflex), 0x004f, 0, 0}, 0x1ed2 }, // U1ED2 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND GRAVE
++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, UNITIZE(Qt::Key_Dead_Circumflex), 0x0061, 0, 0}, 0x1ea7 }, // U1EA7 # LATIN SMALL LETTER A WITH CIRCUMFLEX AND GRAVE
++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, UNITIZE(Qt::Key_Dead_Circumflex), 0x0065, 0, 0}, 0x1ec1 }, // U1EC1 # LATIN SMALL LETTER E WITH CIRCUMFLEX AND GRAVE
++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, UNITIZE(Qt::Key_Dead_Circumflex), 0x006f, 0, 0}, 0x1ed3 }, // U1ED3 # LATIN SMALL LETTER O WITH CIRCUMFLEX AND GRAVE
++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, UNITIZE(Qt::Key_Dead_Macron), 0x0045, 0, 0}, 0x1e14 }, // U1E14 # LATIN CAPITAL LETTER E WITH MACRON AND GRAVE
++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, UNITIZE(Qt::Key_Dead_Macron), 0x004f, 0, 0}, 0x1e50 }, // U1E50 # LATIN CAPITAL LETTER O WITH MACRON AND GRAVE
++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, UNITIZE(Qt::Key_Dead_Macron), 0x0065, 0, 0}, 0x1e15 }, // U1E15 # LATIN SMALL LETTER E WITH MACRON AND GRAVE
++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, UNITIZE(Qt::Key_Dead_Macron), 0x006f, 0, 0}, 0x1e51 }, // U1E51 # LATIN SMALL LETTER O WITH MACRON AND GRAVE
++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, UNITIZE(Qt::Key_Dead_Breve), 0x0041, 0, 0}, 0x1eb0 }, // U1EB0 # LATIN CAPITAL LETTER A WITH BREVE AND GRAVE
++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, UNITIZE(Qt::Key_Dead_Breve), 0x0061, 0, 0}, 0x1eb1 }, // U1EB1 # LATIN SMALL LETTER A WITH BREVE AND GRAVE
++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, UNITIZE(Qt::Key_Dead_Diaeresis), 0x0055, 0, 0}, 0x01db }, // U01DB # LATIN CAPITAL LETTER U WITH DIAERESIS AND GRAVE
++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, UNITIZE(Qt::Key_Dead_Diaeresis), 0x0075, 0, 0}, 0x01dc }, // U01DC # LATIN SMALL LETTER U WITH DIAERESIS AND GRAVE
++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, UNITIZE(Qt::Key_Dead_Diaeresis), 0x03b9, 0, 0}, 0x1fd2 }, // U1FD2 # GREEK SMALL LETTER IOTA WITH DIALYTIKA AND VARIA
++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, UNITIZE(Qt::Key_Dead_Diaeresis), 0x03c5, 0, 0}, 0x1fe2 }, // U1FE2 # GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND VARIA
++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, UNITIZE(Qt::Key_Dead_Horn), 0x004f, 0, 0}, 0x1edc }, // U1EDC # LATIN CAPITAL LETTER O WITH HORN AND GRAVE
++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, UNITIZE(Qt::Key_Dead_Horn), 0x0055, 0, 0}, 0x1eea }, // U1EEA # LATIN CAPITAL LETTER U WITH HORN AND GRAVE
++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, UNITIZE(Qt::Key_Dead_Horn), 0x006f, 0, 0}, 0x1edd }, // U1EDD # LATIN SMALL LETTER O WITH HORN AND GRAVE
++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, UNITIZE(Qt::Key_Dead_Horn), 0x0075, 0, 0}, 0x1eeb }, // U1EEB # LATIN SMALL LETTER U WITH HORN AND GRAVE
++ { {UNITIZE(Qt::Key_Multi_key), 0x0061, 0x0065, 0, 0, 0}, 0x00e6 }, // ae
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0062, 0x0000, 0x0041, 0, 0}, 0x1eb6 }, // U1EB6 # LATIN CAPITAL LETTER A WITH BREVE AND DOT BELOW
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0062, 0x0000, 0x0061, 0, 0}, 0x1eb7 }, // U1EB7 # LATIN SMALL LETTER A WITH BREVE AND DOT BELOW
++ { {UNITIZE(Qt::Key_Multi_key), 0x0062, 0x0021, 0x0041, 0, 0}, 0x1eb6 }, // U1EB6 # LATIN CAPITAL LETTER A WITH BREVE AND DOT BELOW
++ { {UNITIZE(Qt::Key_Multi_key), 0x0062, 0x0021, 0x0061, 0, 0}, 0x1eb7 }, // U1EB7 # LATIN SMALL LETTER A WITH BREVE AND DOT BELOW
++ { {UNITIZE(Qt::Key_Multi_key), 0x0062, 0x002c, 0x0045, 0, 0}, 0x1e1c }, // U1E1C # LATIN CAPITAL LETTER E WITH CEDILLA AND BREVE
++ { {UNITIZE(Qt::Key_Multi_key), 0x0062, 0x002c, 0x0065, 0, 0}, 0x1e1d }, // U1E1D # LATIN SMALL LETTER E WITH CEDILLA AND BREVE
++ { {UNITIZE(Qt::Key_Multi_key), 0x0062, 0x0041, 0, 0, 0}, 0x0102 }, // U0102 # LATIN CAPITAL LETTER A WITH BREVE
++ { {UNITIZE(Qt::Key_Multi_key), 0x0062, 0x0045, 0, 0, 0}, 0x0114 }, // U0114 # LATIN CAPITAL LETTER E WITH BREVE
++ { {UNITIZE(Qt::Key_Multi_key), 0x0062, 0x0047, 0, 0, 0}, 0x011e }, // U011E # LATIN CAPITAL LETTER G WITH BREVE
++ { {UNITIZE(Qt::Key_Multi_key), 0x0062, 0x0049, 0, 0, 0}, 0x012c }, // U012C # LATIN CAPITAL LETTER I WITH BREVE
++ { {UNITIZE(Qt::Key_Multi_key), 0x0062, 0x004f, 0, 0, 0}, 0x014e }, // U014E # LATIN CAPITAL LETTER O WITH BREVE
++ { {UNITIZE(Qt::Key_Multi_key), 0x0062, 0x0055, 0, 0, 0}, 0x016c }, // U016C # LATIN CAPITAL LETTER U WITH BREVE
++ { {UNITIZE(Qt::Key_Multi_key), 0x0062, 0x0061, 0, 0, 0}, 0x0103 }, // U0103 # LATIN SMALL LETTER A WITH BREVE
++ { {UNITIZE(Qt::Key_Multi_key), 0x0062, 0x0065, 0, 0, 0}, 0x0115 }, // U0115 # LATIN SMALL LETTER E WITH BREVE
++ { {UNITIZE(Qt::Key_Multi_key), 0x0062, 0x0067, 0, 0, 0}, 0x011f }, // U011F # LATIN SMALL LETTER G WITH BREVE
++ { {UNITIZE(Qt::Key_Multi_key), 0x0062, 0x0069, 0, 0, 0}, 0x012d }, // U012D # LATIN SMALL LETTER I WITH BREVE
++ { {UNITIZE(Qt::Key_Multi_key), 0x0062, 0x006f, 0, 0, 0}, 0x014f }, // U014F # LATIN SMALL LETTER O WITH BREVE
++ { {UNITIZE(Qt::Key_Multi_key), 0x0062, 0x0075, 0, 0, 0}, 0x016d }, // U016D # LATIN SMALL LETTER U WITH BREVE
++ { {UNITIZE(Qt::Key_Multi_key), 0x0062, 0x0228, 0, 0, 0}, 0x1e1c }, // U1E1C # LATIN CAPITAL LETTER E WITH CEDILLA AND BREVE
++ { {UNITIZE(Qt::Key_Multi_key), 0x0062, 0x0229, 0, 0, 0}, 0x1e1d }, // U1E1D # LATIN SMALL LETTER E WITH CEDILLA AND BREVE
++ { {UNITIZE(Qt::Key_Multi_key), 0x0062, 0x0391, 0, 0, 0}, 0x1fb8 }, // U1FB8 # GREEK CAPITAL LETTER ALPHA WITH VRACHY
++ { {UNITIZE(Qt::Key_Multi_key), 0x0062, 0x0399, 0, 0, 0}, 0x1fd8 }, // U1FD8 # GREEK CAPITAL LETTER IOTA WITH VRACHY
++ { {UNITIZE(Qt::Key_Multi_key), 0x0062, 0x03a5, 0, 0, 0}, 0x1fe8 }, // U1FE8 # GREEK CAPITAL LETTER UPSILON WITH VRACHY
++ { {UNITIZE(Qt::Key_Multi_key), 0x0062, 0x03b1, 0, 0, 0}, 0x1fb0 }, // U1FB0 # GREEK SMALL LETTER ALPHA WITH VRACHY
++ { {UNITIZE(Qt::Key_Multi_key), 0x0062, 0x03b9, 0, 0, 0}, 0x1fd0 }, // U1FD0 # GREEK SMALL LETTER IOTA WITH VRACHY
++ { {UNITIZE(Qt::Key_Multi_key), 0x0062, 0x03c5, 0, 0, 0}, 0x1fe0 }, // U1FE0 # GREEK SMALL LETTER UPSILON WITH VRACHY
++ { {UNITIZE(Qt::Key_Multi_key), 0x0062, 0x0410, 0, 0, 0}, 0x04d0 }, // U04D0 # CYRILLIC CAPITAL LETTER A WITH BREVE
++ { {UNITIZE(Qt::Key_Multi_key), 0x0062, 0x0415, 0, 0, 0}, 0x04d6 }, // U04D6 # CYRILLIC CAPITAL LETTER IE WITH BREVE
++ { {UNITIZE(Qt::Key_Multi_key), 0x0062, 0x0416, 0, 0, 0}, 0x04c1 }, // U04C1 # CYRILLIC CAPITAL LETTER ZHE WITH BREVE
++ { {UNITIZE(Qt::Key_Multi_key), 0x0062, 0x0418, 0, 0, 0}, 0x0419 }, // U0419 # CYRILLIC CAPITAL LETTER SHORT I
++ { {UNITIZE(Qt::Key_Multi_key), 0x0062, 0x0423, 0, 0, 0}, 0x040e }, // U040E # CYRILLIC CAPITAL LETTER SHORT U
++ { {UNITIZE(Qt::Key_Multi_key), 0x0062, 0x0430, 0, 0, 0}, 0x04d1 }, // U04D1 # CYRILLIC SMALL LETTER A WITH BREVE
++ { {UNITIZE(Qt::Key_Multi_key), 0x0062, 0x0435, 0, 0, 0}, 0x04d7 }, // U04D7 # CYRILLIC SMALL LETTER IE WITH BREVE
++ { {UNITIZE(Qt::Key_Multi_key), 0x0062, 0x0436, 0, 0, 0}, 0x04c2 }, // U04C2 # CYRILLIC SMALL LETTER ZHE WITH BREVE
++ { {UNITIZE(Qt::Key_Multi_key), 0x0062, 0x0438, 0, 0, 0}, 0x0439 }, // U0439 # CYRILLIC SMALL LETTER SHORT I
++ { {UNITIZE(Qt::Key_Multi_key), 0x0062, 0x0443, 0, 0, 0}, 0x045e }, // U045E # CYRILLIC SMALL LETTER SHORT U
++ { {UNITIZE(Qt::Key_Multi_key), 0x0062, 0x1ea0, 0, 0, 0}, 0x1eb6 }, // U1EB6 # LATIN CAPITAL LETTER A WITH BREVE AND DOT BELOW
++ { {UNITIZE(Qt::Key_Multi_key), 0x0062, 0x1ea1, 0, 0, 0}, 0x1eb7 }, // U1EB7 # LATIN SMALL LETTER A WITH BREVE AND DOT BELOW
++ { {UNITIZE(Qt::Key_Multi_key), 0x0062, UNITIZE(Qt::Key_Dead_Cedilla), 0x0045, 0, 0}, 0x1e1c }, // U1E1C # LATIN CAPITAL LETTER E WITH CEDILLA AND BREVE
++ { {UNITIZE(Qt::Key_Multi_key), 0x0062, UNITIZE(Qt::Key_Dead_Cedilla), 0x0065, 0, 0}, 0x1e1d }, // U1E1D # LATIN SMALL LETTER E WITH CEDILLA AND BREVE
++ { {UNITIZE(Qt::Key_Multi_key), 0x0062, UNITIZE(Qt::Key_Dead_Belowdot), 0x0041, 0, 0}, 0x1eb6 }, // U1EB6 # LATIN CAPITAL LETTER A WITH BREVE AND DOT BELOW
++ { {UNITIZE(Qt::Key_Multi_key), 0x0062, UNITIZE(Qt::Key_Dead_Belowdot), 0x0061, 0, 0}, 0x1eb7 }, // U1EB7 # LATIN SMALL LETTER A WITH BREVE AND DOT BELOW
++ { {UNITIZE(Qt::Key_Multi_key), 0x0063, 0x0022, 0x0055, 0, 0}, 0x01d9 }, // U01D9 # LATIN CAPITAL LETTER U WITH DIAERESIS AND CARON
++ { {UNITIZE(Qt::Key_Multi_key), 0x0063, 0x0022, 0x0075, 0, 0}, 0x01da }, // U01DA # LATIN SMALL LETTER U WITH DIAERESIS AND CARON
++ { {UNITIZE(Qt::Key_Multi_key), 0x0063, 0x002f, 0, 0, 0}, 0x00a2 }, // U00A2 # CENT SIGN
++ { {UNITIZE(Qt::Key_Multi_key), 0x0063, 0x0041, 0, 0, 0}, 0x01cd }, // U01CD # LATIN CAPITAL LETTER A WITH CARON
++ { {UNITIZE(Qt::Key_Multi_key), 0x0063, 0x0043, 0, 0, 0}, 0x010c }, // U010C # LATIN CAPITAL LETTER C WITH CARON
++ { {UNITIZE(Qt::Key_Multi_key), 0x0063, 0x0044, 0, 0, 0}, 0x010e }, // U010E # LATIN CAPITAL LETTER D WITH CARON
++ { {UNITIZE(Qt::Key_Multi_key), 0x0063, 0x0045, 0, 0, 0}, 0x011a }, // U011A # LATIN CAPITAL LETTER E WITH CARON
++ { {UNITIZE(Qt::Key_Multi_key), 0x0063, 0x0047, 0, 0, 0}, 0x01e6 }, // U01E6 # LATIN CAPITAL LETTER G WITH CARON
++ { {UNITIZE(Qt::Key_Multi_key), 0x0063, 0x0048, 0, 0, 0}, 0x021e }, // U021E # LATIN CAPITAL LETTER H WITH CARON
++ { {UNITIZE(Qt::Key_Multi_key), 0x0063, 0x0049, 0, 0, 0}, 0x01cf }, // U01CF # LATIN CAPITAL LETTER I WITH CARON
++ { {UNITIZE(Qt::Key_Multi_key), 0x0063, 0x004b, 0, 0, 0}, 0x01e8 }, // U01E8 # LATIN CAPITAL LETTER K WITH CARON
++ { {UNITIZE(Qt::Key_Multi_key), 0x0063, 0x004c, 0, 0, 0}, 0x013d }, // U013D # LATIN CAPITAL LETTER L WITH CARON
++ { {UNITIZE(Qt::Key_Multi_key), 0x0063, 0x004e, 0, 0, 0}, 0x0147 }, // U0147 # LATIN CAPITAL LETTER N WITH CARON
++ { {UNITIZE(Qt::Key_Multi_key), 0x0063, 0x004f, 0, 0, 0}, 0x01d1 }, // U01D1 # LATIN CAPITAL LETTER O WITH CARON
++ { {UNITIZE(Qt::Key_Multi_key), 0x0063, 0x0052, 0, 0, 0}, 0x0158 }, // U0158 # LATIN CAPITAL LETTER R WITH CARON
++ { {UNITIZE(Qt::Key_Multi_key), 0x0063, 0x0053, 0, 0, 0}, 0x0160 }, // U0160 # LATIN CAPITAL LETTER S WITH CARON
++ { {UNITIZE(Qt::Key_Multi_key), 0x0063, 0x0054, 0, 0, 0}, 0x0164 }, // U0164 # LATIN CAPITAL LETTER T WITH CARON
++ { {UNITIZE(Qt::Key_Multi_key), 0x0063, 0x0055, 0, 0, 0}, 0x01d3 }, // U01D3 # LATIN CAPITAL LETTER U WITH CARON
++ { {UNITIZE(Qt::Key_Multi_key), 0x0063, 0x005a, 0, 0, 0}, 0x017d }, // U017D # LATIN CAPITAL LETTER Z WITH CARON
++ { {UNITIZE(Qt::Key_Multi_key), 0x0063, 0x0061, 0, 0, 0}, 0x01ce }, // U01CE # LATIN SMALL LETTER A WITH CARON
++ { {UNITIZE(Qt::Key_Multi_key), 0x0063, 0x0063, 0, 0, 0}, 0x010d }, // U010D # LATIN SMALL LETTER C WITH CARON
++ { {UNITIZE(Qt::Key_Multi_key), 0x0063, 0x0064, 0, 0, 0}, 0x010f }, // U010F # LATIN SMALL LETTER D WITH CARON
++ { {UNITIZE(Qt::Key_Multi_key), 0x0063, 0x0065, 0, 0, 0}, 0x011b }, // U011B # LATIN SMALL LETTER E WITH CARON
++ { {UNITIZE(Qt::Key_Multi_key), 0x0063, 0x0067, 0, 0, 0}, 0x01e7 }, // U01E7 # LATIN SMALL LETTER G WITH CARON
++ { {UNITIZE(Qt::Key_Multi_key), 0x0063, 0x0068, 0, 0, 0}, 0x021f }, // U021F # LATIN SMALL LETTER H WITH CARON
++ { {UNITIZE(Qt::Key_Multi_key), 0x0063, 0x0069, 0, 0, 0}, 0x01d0 }, // U01D0 # LATIN SMALL LETTER I WITH CARON
++ { {UNITIZE(Qt::Key_Multi_key), 0x0063, 0x006a, 0, 0, 0}, 0x01f0 }, // U01F0 # LATIN SMALL LETTER J WITH CARON
++ { {UNITIZE(Qt::Key_Multi_key), 0x0063, 0x006b, 0, 0, 0}, 0x01e9 }, // U01E9 # LATIN SMALL LETTER K WITH CARON
++ { {UNITIZE(Qt::Key_Multi_key), 0x0063, 0x006c, 0, 0, 0}, 0x013e }, // U013E # LATIN SMALL LETTER L WITH CARON
++ { {UNITIZE(Qt::Key_Multi_key), 0x0063, 0x006e, 0, 0, 0}, 0x0148 }, // U0148 # LATIN SMALL LETTER N WITH CARON
++ { {UNITIZE(Qt::Key_Multi_key), 0x0063, 0x006f, 0, 0, 0}, 0x01d2 }, // U01D2 # LATIN SMALL LETTER O WITH CARON
++ { {UNITIZE(Qt::Key_Multi_key), 0x0063, 0x0072, 0, 0, 0}, 0x0159 }, // U0159 # LATIN SMALL LETTER R WITH CARON
++ { {UNITIZE(Qt::Key_Multi_key), 0x0063, 0x0073, 0, 0, 0}, 0x0161 }, // U0161 # LATIN SMALL LETTER S WITH CARON
++ { {UNITIZE(Qt::Key_Multi_key), 0x0063, 0x0074, 0, 0, 0}, 0x0165 }, // U0165 # LATIN SMALL LETTER T WITH CARON
++ { {UNITIZE(Qt::Key_Multi_key), 0x0063, 0x0075, 0, 0, 0}, 0x01d4 }, // U01D4 # LATIN SMALL LETTER U WITH CARON
++ { {UNITIZE(Qt::Key_Multi_key), 0x0063, 0x007a, 0, 0, 0}, 0x017e }, // U017E # LATIN SMALL LETTER Z WITH CARON
++ { {UNITIZE(Qt::Key_Multi_key), 0x0063, 0x007c, 0, 0, 0}, 0x00a2 }, // U00A2 # CENT SIGN
++ { {UNITIZE(Qt::Key_Multi_key), 0x0063, 0x00dc, 0, 0, 0}, 0x01d9 }, // U01D9 # LATIN CAPITAL LETTER U WITH DIAERESIS AND CARON
++ { {UNITIZE(Qt::Key_Multi_key), 0x0063, 0x00fc, 0, 0, 0}, 0x01da }, // U01DA # LATIN SMALL LETTER U WITH DIAERESIS AND CARON
++ { {UNITIZE(Qt::Key_Multi_key), 0x0063, 0x01b7, 0, 0, 0}, 0x01ee }, // U01EE # LATIN CAPITAL LETTER EZH WITH CARON
++ { {UNITIZE(Qt::Key_Multi_key), 0x0063, 0x0292, 0, 0, 0}, 0x01ef }, // U01EF # LATIN SMALL LETTER EZH WITH CARON
++ { {UNITIZE(Qt::Key_Multi_key), 0x0063, UNITIZE(Qt::Key_Dead_Diaeresis), 0x0055, 0, 0}, 0x01d9 }, // U01D9 # LATIN CAPITAL LETTER U WITH DIAERESIS AND CARON
++ { {UNITIZE(Qt::Key_Multi_key), 0x0063, UNITIZE(Qt::Key_Dead_Diaeresis), 0x0075, 0, 0}, 0x01da }, // U01DA # LATIN SMALL LETTER U WITH DIAERESIS AND CARON
++ { {UNITIZE(Qt::Key_Multi_key), 0x0064, 0x002d, 0, 0, 0}, 0x20ab }, // U20ab # DONG SIGN
++ { {UNITIZE(Qt::Key_Multi_key), 0x0064, 0x0068, 0, 0, 0}, 0x00f0 }, // U00F0 # LATIN SMALL LETTER ETH
++ { {UNITIZE(Qt::Key_Multi_key), 0x0065, 0x0065, 0, 0, 0}, 0x0259 }, // U0259 # LATIN SMALL LETTER SCHWA
++ { {UNITIZE(Qt::Key_Multi_key), 0x0066, 0x0053, 0, 0, 0}, 0x017f }, // U017f # LONG S
++ { {UNITIZE(Qt::Key_Multi_key), 0x0066, 0x0073, 0, 0, 0}, 0x017f }, // U017f # LONG S
++ { {UNITIZE(Qt::Key_Multi_key), 0x0069, 0x002e, 0, 0, 0}, 0x0131 }, // U0131 # LATIN SMALL LETTER DOTLESS I
++ { {UNITIZE(Qt::Key_Multi_key), 0x006b, 0x006b, 0, 0, 0}, 0x0138 }, // U0138 # LATIN SMALL LETTER KRA
++ { {UNITIZE(Qt::Key_Multi_key), 0x006c, 0x0076, 0, 0, 0}, 0x007c }, // bar
++ { {UNITIZE(Qt::Key_Multi_key), 0x006d, 0x002f, 0, 0, 0}, 0x20a5 }, // U20a5 # MILL SIGN
++ { {UNITIZE(Qt::Key_Multi_key), 0x006d, 0x0075, 0, 0, 0}, 0x00b5 }, // U00B5 # MICRO SIGN
++ { {UNITIZE(Qt::Key_Multi_key), 0x006e, 0x0067, 0, 0, 0}, 0x014b }, // U014B # LATIN SMALL LETTER ENG
++ { {UNITIZE(Qt::Key_Multi_key), 0x006f, 0x0027, 0x0041, 0, 0}, 0x01fa }, // U01FA # LATIN CAPITAL LETTER A WITH RING ABOVE AND ACUTE
++ { {UNITIZE(Qt::Key_Multi_key), 0x006f, 0x0027, 0x0061, 0, 0}, 0x01fb }, // U01FB # LATIN SMALL LETTER A WITH RING ABOVE AND ACUTE
++ { {UNITIZE(Qt::Key_Multi_key), 0x006f, 0x0041, 0, 0, 0}, 0x00c5 }, // U00C5 # LATIN CAPITAL LETTER A WITH RING ABOVE
++ { {UNITIZE(Qt::Key_Multi_key), 0x006f, 0x0043, 0, 0, 0}, 0x00a9 }, // copyright
++ { {UNITIZE(Qt::Key_Multi_key), 0x006f, 0x0052, 0, 0, 0}, 0x00ae }, // registered
++ { {UNITIZE(Qt::Key_Multi_key), 0x006f, 0x0055, 0, 0, 0}, 0x016e }, // U016E # LATIN CAPITAL LETTER U WITH RING ABOVE
++ { {UNITIZE(Qt::Key_Multi_key), 0x006f, 0x0061, 0, 0, 0}, 0x00e5 }, // U00E5 # LATIN SMALL LETTER A WITH RING ABOVE
++ { {UNITIZE(Qt::Key_Multi_key), 0x006f, 0x0063, 0, 0, 0}, 0x00a9 }, // copyright
++ { {UNITIZE(Qt::Key_Multi_key), 0x006f, 0x0065, 0, 0, 0}, 0x0153 }, // oe
++ { {UNITIZE(Qt::Key_Multi_key), 0x006f, 0x006f, 0, 0, 0}, 0x00b0 }, // degree # ^0 already taken
++ { {UNITIZE(Qt::Key_Multi_key), 0x006f, 0x0072, 0, 0, 0}, 0x00ae }, // registered
++ { {UNITIZE(Qt::Key_Multi_key), 0x006f, 0x0073, 0, 0, 0}, 0x00a7 }, // section # SECTION SIGN
++ { {UNITIZE(Qt::Key_Multi_key), 0x006f, 0x0075, 0, 0, 0}, 0x016f }, // U016F # LATIN SMALL LETTER U WITH RING ABOVE
++ { {UNITIZE(Qt::Key_Multi_key), 0x006f, 0x0077, 0, 0, 0}, 0x1e98 }, // U1E98 # LATIN SMALL LETTER W WITH RING ABOVE
++ { {UNITIZE(Qt::Key_Multi_key), 0x006f, 0x0078, 0, 0, 0}, 0x00a4 }, // currency
++ { {UNITIZE(Qt::Key_Multi_key), 0x006f, 0x0079, 0, 0, 0}, 0x1e99 }, // U1E99 # LATIN SMALL LETTER Y WITH RING ABOVE
++ { {UNITIZE(Qt::Key_Multi_key), 0x0070, 0x0021, 0, 0, 0}, 0x00b6 }, // paragraph
++ { {UNITIZE(Qt::Key_Multi_key), 0x0073, 0x006f, 0, 0, 0}, 0x00a7 }, // section # SECTION SIGN
++ { {UNITIZE(Qt::Key_Multi_key), 0x0073, 0x0073, 0, 0, 0}, 0x00df }, // ssharp
++ { {UNITIZE(Qt::Key_Multi_key), 0x0074, 0x0068, 0, 0, 0}, 0x00fe }, // U00FE # LATIN SMALL LETTER THORN
++ { {UNITIZE(Qt::Key_Multi_key), 0x0076, 0x006c, 0, 0, 0}, 0x007c }, // bar
++ { {UNITIZE(Qt::Key_Multi_key), 0x0078, 0x006f, 0, 0, 0}, 0x00a4 }, // currency
++ { {UNITIZE(Qt::Key_Multi_key), 0x0078, 0x0078, 0, 0, 0}, 0x00d7 }, // U00D7 # MULTIPLICATION SIGN
++ { {UNITIZE(Qt::Key_Multi_key), 0x007c, 0x0043, 0, 0, 0}, 0x00a2 }, // U00A2 # CENT SIGN
++ { {UNITIZE(Qt::Key_Multi_key), 0x007c, 0x0063, 0, 0, 0}, 0x00a2 }, // U00A2 # CENT SIGN
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x0000, 0, 0, 0}, 0x1eee }, // U1EEE # LATIN CAPITAL LETTER U WITH HORN AND TILDE
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x0000, 0, 0, 0}, 0x1ee1 }, // U1EE1 # LATIN SMALL LETTER O WITH HORN AND TILDE
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x0000, 0, 0, 0}, 0x1eef }, // U1EEF # LATIN SMALL LETTER U WITH HORN AND TILDE
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x0000, 0, 0, 0}, 0x1ee0 }, // U1EE0 # LATIN CAPITAL LETTER O WITH HORN AND TILDE
++ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x0020, 0, 0, 0}, 0x007e }, // asciitilde
++ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x0022, 0x03b9, 0, 0}, 0x1fd7 }, // U1FD7 # GREEK SMALL LETTER IOTA WITH DIALYTIKA AND PERISPOMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x0022, 0x03c5, 0, 0}, 0x1fe7 }, // U1FE7 # GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND PERISPOMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x0028, 0x0391, 0, 0}, 0x1f0f }, // U1F0F # GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x0028, 0x0397, 0, 0}, 0x1f2f }, // U1F2F # GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x0028, 0x0399, 0, 0}, 0x1f3f }, // U1F3F # GREEK CAPITAL LETTER IOTA WITH DASIA AND PERISPOMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x0028, 0x03a5, 0, 0}, 0x1f5f }, // U1F5F # GREEK CAPITAL LETTER UPSILON WITH DASIA AND PERISPOMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x0028, 0x03a9, 0, 0}, 0x1f6f }, // U1F6F # GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x0028, 0x03b1, 0, 0}, 0x1f07 }, // U1F07 # GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x0028, 0x03b7, 0, 0}, 0x1f27 }, // U1F27 # GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x0028, 0x03b9, 0, 0}, 0x1f37 }, // U1F37 # GREEK SMALL LETTER IOTA WITH DASIA AND PERISPOMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x0028, 0x03c5, 0, 0}, 0x1f57 }, // U1F57 # GREEK SMALL LETTER UPSILON WITH DASIA AND PERISPOMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x0028, 0x03c9, 0, 0}, 0x1f67 }, // U1F67 # GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x0029, 0x0391, 0, 0}, 0x1f0e }, // U1F0E # GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x0029, 0x0397, 0, 0}, 0x1f2e }, // U1F2E # GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x0029, 0x0399, 0, 0}, 0x1f3e }, // U1F3E # GREEK CAPITAL LETTER IOTA WITH PSILI AND PERISPOMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x0029, 0x03a9, 0, 0}, 0x1f6e }, // U1F6E # GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x0029, 0x03b1, 0, 0}, 0x1f06 }, // U1F06 # GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x0029, 0x03b7, 0, 0}, 0x1f26 }, // U1F26 # GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x0029, 0x03b9, 0, 0}, 0x1f36 }, // U1F36 # GREEK SMALL LETTER IOTA WITH PSILI AND PERISPOMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x0029, 0x03c5, 0, 0}, 0x1f56 }, // U1F56 # GREEK SMALL LETTER UPSILON WITH PSILI AND PERISPOMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x0029, 0x03c9, 0, 0}, 0x1f66 }, // U1F66 # GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x002b, 0x004f, 0, 0}, 0x1ee0 }, // U1EE0 # LATIN CAPITAL LETTER O WITH HORN AND TILDE
++ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x002b, 0x0055, 0, 0}, 0x1eee }, // U1EEE # LATIN CAPITAL LETTER U WITH HORN AND TILDE
++ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x002b, 0x006f, 0, 0}, 0x1ee1 }, // U1EE1 # LATIN SMALL LETTER O WITH HORN AND TILDE
++ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x002b, 0x0075, 0, 0}, 0x1eef }, // U1EEF # LATIN SMALL LETTER U WITH HORN AND TILDE
++ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x0041, 0, 0, 0}, 0x00c3 }, // U00C3 # LATIN CAPITAL LETTER A WITH TILDE
++ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x0045, 0, 0, 0}, 0x1ebc }, // U1EBC # LATIN CAPITAL LETTER E WITH TILDE
++ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x0049, 0, 0, 0}, 0x0128 }, // U0128 # LATIN CAPITAL LETTER I WITH TILDE
++ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x004e, 0, 0, 0}, 0x00d1 }, // U00D1 # LATIN CAPITAL LETTER N WITH TILDE
++ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x004f, 0, 0, 0}, 0x00d5 }, // U00D5 # LATIN CAPITAL LETTER O WITH TILDE
++ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x0055, 0, 0, 0}, 0x0168 }, // U0168 # LATIN CAPITAL LETTER U WITH TILDE
++ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x0055, 0x0041, 0, 0}, 0x1eb4 }, // U1EB4 # LATIN CAPITAL LETTER A WITH BREVE AND TILDE
++ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x0055, 0x0061, 0, 0}, 0x1eb5 }, // U1EB5 # LATIN SMALL LETTER A WITH BREVE AND TILDE
++ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x0056, 0, 0, 0}, 0x1e7c }, // U1E7C # LATIN CAPITAL LETTER V WITH TILDE
++ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x0059, 0, 0, 0}, 0x1ef8 }, // U1EF8 # LATIN CAPITAL LETTER Y WITH TILDE
++ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x005e, 0x0041, 0, 0}, 0x1eaa }, // U1EAA # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND TILDE
++ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x005e, 0x0045, 0, 0}, 0x1ec4 }, // U1EC4 # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND TILDE
++ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x005e, 0x004f, 0, 0}, 0x1ed6 }, // U1ED6 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND TILDE
++ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x005e, 0x0061, 0, 0}, 0x1eab }, // U1EAB # LATIN SMALL LETTER A WITH CIRCUMFLEX AND TILDE
++ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x005e, 0x0065, 0, 0}, 0x1ec5 }, // U1EC5 # LATIN SMALL LETTER E WITH CIRCUMFLEX AND TILDE
++ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x005e, 0x006f, 0, 0}, 0x1ed7 }, // U1ED7 # LATIN SMALL LETTER O WITH CIRCUMFLEX AND TILDE
++ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x0061, 0, 0, 0}, 0x00e3 }, // U00E3 # LATIN SMALL LETTER A WITH TILDE
++ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x0062, 0x0041, 0, 0}, 0x1eb4 }, // U1EB4 # LATIN CAPITAL LETTER A WITH BREVE AND TILDE
++ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x0062, 0x0061, 0, 0}, 0x1eb5 }, // U1EB5 # LATIN SMALL LETTER A WITH BREVE AND TILDE
++ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x0065, 0, 0, 0}, 0x1ebd }, // U1EBD # LATIN SMALL LETTER E WITH TILDE
++ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x0069, 0, 0, 0}, 0x0129 }, // U0129 # LATIN SMALL LETTER I WITH TILDE
++ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x006e, 0, 0, 0}, 0x00f1 }, // U00F1 # LATIN SMALL LETTER N WITH TILDE
++ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x006f, 0, 0, 0}, 0x00f5 }, // U00F5 # LATIN SMALL LETTER O WITH TILDE
++ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x0075, 0, 0, 0}, 0x0169 }, // U0169 # LATIN SMALL LETTER U WITH TILDE
++ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x0076, 0, 0, 0}, 0x1e7d }, // U1E7D # LATIN SMALL LETTER V WITH TILDE
++ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x0079, 0, 0, 0}, 0x1ef9 }, // U1EF9 # LATIN SMALL LETTER Y WITH TILDE
++ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x00c2, 0, 0, 0}, 0x1eaa }, // U1EAA # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND TILDE
++ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x00ca, 0, 0, 0}, 0x1ec4 }, // U1EC4 # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND TILDE
++ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x00d4, 0, 0, 0}, 0x1ed6 }, // U1ED6 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND TILDE
++ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x00e2, 0, 0, 0}, 0x1eab }, // U1EAB # LATIN SMALL LETTER A WITH CIRCUMFLEX AND TILDE
++ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x00ea, 0, 0, 0}, 0x1ec5 }, // U1EC5 # LATIN SMALL LETTER E WITH CIRCUMFLEX AND TILDE
++ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x00f4, 0, 0, 0}, 0x1ed7 }, // U1ED7 # LATIN SMALL LETTER O WITH CIRCUMFLEX AND TILDE
++ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x0102, 0, 0, 0}, 0x1eb4 }, // U1EB4 # LATIN CAPITAL LETTER A WITH BREVE AND TILDE
++ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x0103, 0, 0, 0}, 0x1eb5 }, // U1EB5 # LATIN SMALL LETTER A WITH BREVE AND TILDE
++ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x0313, 0x0391, 0, 0}, 0x1f0e }, // U1F0E # GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x0313, 0x0397, 0, 0}, 0x1f2e }, // U1F2E # GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x0313, 0x0399, 0, 0}, 0x1f3e }, // U1F3E # GREEK CAPITAL LETTER IOTA WITH PSILI AND PERISPOMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x0313, 0x03a9, 0, 0}, 0x1f6e }, // U1F6E # GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x0313, 0x03b1, 0, 0}, 0x1f06 }, // U1F06 # GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x0313, 0x03b7, 0, 0}, 0x1f26 }, // U1F26 # GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x0313, 0x03b9, 0, 0}, 0x1f36 }, // U1F36 # GREEK SMALL LETTER IOTA WITH PSILI AND PERISPOMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x0313, 0x03c5, 0, 0}, 0x1f56 }, // U1F56 # GREEK SMALL LETTER UPSILON WITH PSILI AND PERISPOMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x0313, 0x03c9, 0, 0}, 0x1f66 }, // U1F66 # GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x0314, 0x0391, 0, 0}, 0x1f0f }, // U1F0F # GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x0314, 0x0397, 0, 0}, 0x1f2f }, // U1F2F # GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x0314, 0x0399, 0, 0}, 0x1f3f }, // U1F3F # GREEK CAPITAL LETTER IOTA WITH DASIA AND PERISPOMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x0314, 0x03a5, 0, 0}, 0x1f5f }, // U1F5F # GREEK CAPITAL LETTER UPSILON WITH DASIA AND PERISPOMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x0314, 0x03a9, 0, 0}, 0x1f6f }, // U1F6F # GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x0314, 0x03b1, 0, 0}, 0x1f07 }, // U1F07 # GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x0314, 0x03b7, 0, 0}, 0x1f27 }, // U1F27 # GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x0314, 0x03b9, 0, 0}, 0x1f37 }, // U1F37 # GREEK SMALL LETTER IOTA WITH DASIA AND PERISPOMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x0314, 0x03c5, 0, 0}, 0x1f57 }, // U1F57 # GREEK SMALL LETTER UPSILON WITH DASIA AND PERISPOMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x0314, 0x03c9, 0, 0}, 0x1f67 }, // U1F67 # GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x03b1, 0, 0, 0}, 0x1fb6 }, // U1FB6 # GREEK SMALL LETTER ALPHA WITH PERISPOMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x03b7, 0, 0, 0}, 0x1fc6 }, // U1FC6 # GREEK SMALL LETTER ETA WITH PERISPOMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x03b9, 0, 0, 0}, 0x1fd6 }, // U1FD6 # GREEK SMALL LETTER IOTA WITH PERISPOMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x03c5, 0, 0, 0}, 0x1fe6 }, // U1FE6 # GREEK SMALL LETTER UPSILON WITH PERISPOMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x03c9, 0, 0, 0}, 0x1ff6 }, // U1FF6 # GREEK SMALL LETTER OMEGA WITH PERISPOMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x03ca, 0, 0, 0}, 0x1fd7 }, // U1FD7 # GREEK SMALL LETTER IOTA WITH DIALYTIKA AND PERISPOMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x03cb, 0, 0, 0}, 0x1fe7 }, // U1FE7 # GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND PERISPOMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x1f00, 0, 0, 0}, 0x1f06 }, // U1F06 # GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x1f01, 0, 0, 0}, 0x1f07 }, // U1F07 # GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x1f08, 0, 0, 0}, 0x1f0e }, // U1F0E # GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x1f09, 0, 0, 0}, 0x1f0f }, // U1F0F # GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x1f20, 0, 0, 0}, 0x1f26 }, // U1F26 # GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x1f21, 0, 0, 0}, 0x1f27 }, // U1F27 # GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x1f28, 0, 0, 0}, 0x1f2e }, // U1F2E # GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x1f29, 0, 0, 0}, 0x1f2f }, // U1F2F # GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x1f30, 0, 0, 0}, 0x1f36 }, // U1F36 # GREEK SMALL LETTER IOTA WITH PSILI AND PERISPOMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x1f31, 0, 0, 0}, 0x1f37 }, // U1F37 # GREEK SMALL LETTER IOTA WITH DASIA AND PERISPOMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x1f38, 0, 0, 0}, 0x1f3e }, // U1F3E # GREEK CAPITAL LETTER IOTA WITH PSILI AND PERISPOMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x1f39, 0, 0, 0}, 0x1f3f }, // U1F3F # GREEK CAPITAL LETTER IOTA WITH DASIA AND PERISPOMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x1f50, 0, 0, 0}, 0x1f56 }, // U1F56 # GREEK SMALL LETTER UPSILON WITH PSILI AND PERISPOMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x1f51, 0, 0, 0}, 0x1f57 }, // U1F57 # GREEK SMALL LETTER UPSILON WITH DASIA AND PERISPOMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x1f59, 0, 0, 0}, 0x1f5f }, // U1F5F # GREEK CAPITAL LETTER UPSILON WITH DASIA AND PERISPOMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x1f60, 0, 0, 0}, 0x1f66 }, // U1F66 # GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x1f61, 0, 0, 0}, 0x1f67 }, // U1F67 # GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x1f68, 0, 0, 0}, 0x1f6e }, // U1F6E # GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x1f69, 0, 0, 0}, 0x1f6f }, // U1F6F # GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x007e, UNITIZE(Qt::Key_Dead_Circumflex), 0x0041, 0, 0}, 0x1eaa }, // U1EAA # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND TILDE
++ { {UNITIZE(Qt::Key_Multi_key), 0x007e, UNITIZE(Qt::Key_Dead_Circumflex), 0x0045, 0, 0}, 0x1ec4 }, // U1EC4 # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND TILDE
++ { {UNITIZE(Qt::Key_Multi_key), 0x007e, UNITIZE(Qt::Key_Dead_Circumflex), 0x004f, 0, 0}, 0x1ed6 }, // U1ED6 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND TILDE
++ { {UNITIZE(Qt::Key_Multi_key), 0x007e, UNITIZE(Qt::Key_Dead_Circumflex), 0x0061, 0, 0}, 0x1eab }, // U1EAB # LATIN SMALL LETTER A WITH CIRCUMFLEX AND TILDE
++ { {UNITIZE(Qt::Key_Multi_key), 0x007e, UNITIZE(Qt::Key_Dead_Circumflex), 0x0065, 0, 0}, 0x1ec5 }, // U1EC5 # LATIN SMALL LETTER E WITH CIRCUMFLEX AND TILDE
++ { {UNITIZE(Qt::Key_Multi_key), 0x007e, UNITIZE(Qt::Key_Dead_Circumflex), 0x006f, 0, 0}, 0x1ed7 }, // U1ED7 # LATIN SMALL LETTER O WITH CIRCUMFLEX AND TILDE
++ { {UNITIZE(Qt::Key_Multi_key), 0x007e, UNITIZE(Qt::Key_Dead_Breve), 0x0041, 0, 0}, 0x1eb4 }, // U1EB4 # LATIN CAPITAL LETTER A WITH BREVE AND TILDE
++ { {UNITIZE(Qt::Key_Multi_key), 0x007e, UNITIZE(Qt::Key_Dead_Breve), 0x0061, 0, 0}, 0x1eb5 }, // U1EB5 # LATIN SMALL LETTER A WITH BREVE AND TILDE
++ { {UNITIZE(Qt::Key_Multi_key), 0x007e, UNITIZE(Qt::Key_Dead_Diaeresis), 0x03b9, 0, 0}, 0x1fd7 }, // U1FD7 # GREEK SMALL LETTER IOTA WITH DIALYTIKA AND PERISPOMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x007e, UNITIZE(Qt::Key_Dead_Diaeresis), 0x03c5, 0, 0}, 0x1fe7 }, // U1FE7 # GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND PERISPOMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x007e, UNITIZE(Qt::Key_Dead_Horn), 0x004f, 0, 0}, 0x1ee0 }, // U1EE0 # LATIN CAPITAL LETTER O WITH HORN AND TILDE
++ { {UNITIZE(Qt::Key_Multi_key), 0x007e, UNITIZE(Qt::Key_Dead_Horn), 0x0055, 0, 0}, 0x1eee }, // U1EEE # LATIN CAPITAL LETTER U WITH HORN AND TILDE
++ { {UNITIZE(Qt::Key_Multi_key), 0x007e, UNITIZE(Qt::Key_Dead_Horn), 0x006f, 0, 0}, 0x1ee1 }, // U1EE1 # LATIN SMALL LETTER O WITH HORN AND TILDE
++ { {UNITIZE(Qt::Key_Multi_key), 0x007e, UNITIZE(Qt::Key_Dead_Horn), 0x0075, 0, 0}, 0x1eef }, // U1EEF # LATIN SMALL LETTER U WITH HORN AND TILDE
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x00a8, 0x0000, 0, 0, 0}, 0x0385 }, // U0385 # GREEK DIALYTIKA TONOS
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x00a8, 0x0000, 0, 0, 0}, 0x1fed }, // U1FED # GREEK DIALYTIKA AND VARIA
++ { {UNITIZE(Qt::Key_Multi_key), 0x00a8, 0x0027, 0, 0, 0}, 0x0385 }, // U0385 # GREEK DIALYTIKA TONOS
++ { {UNITIZE(Qt::Key_Multi_key), 0x00a8, 0x0060, 0, 0, 0}, 0x1fed }, // U1FED # GREEK DIALYTIKA AND VARIA
++ { {UNITIZE(Qt::Key_Multi_key), 0x00a8, 0x007e, 0, 0, 0}, 0x1fc1 }, // U1FC1 # GREEK DIALYTIKA AND PERISPOMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x00a8, 0x00b4, 0, 0, 0}, 0x0385 }, // U0385 # GREEK DIALYTIKA TONOS
++ { {UNITIZE(Qt::Key_Multi_key), 0x00a8, 0x0342, 0, 0, 0}, 0x1fc1 }, // U1FC1 # GREEK DIALYTIKA AND PERISPOMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x00a8, UNITIZE(Qt::Key_Dead_Grave), 0, 0, 0}, 0x1fed }, // U1FED # GREEK DIALYTIKA AND VARIA
++ { {UNITIZE(Qt::Key_Multi_key), 0x00a8, UNITIZE(Qt::Key_Dead_Acute), 0, 0, 0}, 0x0385 }, // U0385 # GREEK DIALYTIKA TONOS
++ { {UNITIZE(Qt::Key_Multi_key), 0x00a8, UNITIZE(Qt::Key_Dead_Tilde), 0, 0, 0}, 0x1fc1 }, // U1FC1 # GREEK DIALYTIKA AND PERISPOMENI
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x00af, 0x0000, 0x004c, 0, 0}, 0x1e38 }, // U1E38 # LATIN CAPITAL LETTER L WITH DOT BELOW AND MACRON
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x00af, 0x0000, 0x004f, 0, 0}, 0x022c }, // U022C # LATIN CAPITAL LETTER O WITH TILDE AND MACRON
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x00af, 0x0000, 0x0052, 0, 0}, 0x1e5c }, // U1E5C # LATIN CAPITAL LETTER R WITH DOT BELOW AND MACRON
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x00af, 0x0000, 0x006c, 0, 0}, 0x1e39 }, // U1E39 # LATIN SMALL LETTER L WITH DOT BELOW AND MACRON
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x00af, 0x0000, 0x006f, 0, 0}, 0x022d }, // U022D # LATIN SMALL LETTER O WITH TILDE AND MACRON
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x00af, 0x0000, 0x0072, 0, 0}, 0x1e5d }, // U1E5D # LATIN SMALL LETTER R WITH DOT BELOW AND MACRON
++ { {UNITIZE(Qt::Key_Multi_key), 0x00af, 0x0021, 0x004c, 0, 0}, 0x1e38 }, // U1E38 # LATIN CAPITAL LETTER L WITH DOT BELOW AND MACRON
++ { {UNITIZE(Qt::Key_Multi_key), 0x00af, 0x0021, 0x0052, 0, 0}, 0x1e5c }, // U1E5C # LATIN CAPITAL LETTER R WITH DOT BELOW AND MACRON
++ { {UNITIZE(Qt::Key_Multi_key), 0x00af, 0x0021, 0x006c, 0, 0}, 0x1e39 }, // U1E39 # LATIN SMALL LETTER L WITH DOT BELOW AND MACRON
++ { {UNITIZE(Qt::Key_Multi_key), 0x00af, 0x0021, 0x0072, 0, 0}, 0x1e5d }, // U1E5D # LATIN SMALL LETTER R WITH DOT BELOW AND MACRON
++ { {UNITIZE(Qt::Key_Multi_key), 0x00af, 0x0022, 0x0041, 0, 0}, 0x01de }, // U01DE # LATIN CAPITAL LETTER A WITH DIAERESIS AND MACRON
++ { {UNITIZE(Qt::Key_Multi_key), 0x00af, 0x0022, 0x004f, 0, 0}, 0x022a }, // U022A # LATIN CAPITAL LETTER O WITH DIAERESIS AND MACRON
++ { {UNITIZE(Qt::Key_Multi_key), 0x00af, 0x0022, 0x0055, 0, 0}, 0x01d5 }, // U01D5 # LATIN CAPITAL LETTER U WITH DIAERESIS AND MACRON
++ { {UNITIZE(Qt::Key_Multi_key), 0x00af, 0x0022, 0x0061, 0, 0}, 0x01df }, // U01DF # LATIN SMALL LETTER A WITH DIAERESIS AND MACRON
++ { {UNITIZE(Qt::Key_Multi_key), 0x00af, 0x0022, 0x006f, 0, 0}, 0x022b }, // U022B # LATIN SMALL LETTER O WITH DIAERESIS AND MACRON
++ { {UNITIZE(Qt::Key_Multi_key), 0x00af, 0x0022, 0x0075, 0, 0}, 0x01d6 }, // U01D6 # LATIN SMALL LETTER U WITH DIAERESIS AND MACRON
++ { {UNITIZE(Qt::Key_Multi_key), 0x00af, 0x002e, 0x0041, 0, 0}, 0x01e0 }, // U01E0 # LATIN CAPITAL LETTER A WITH DOT ABOVE AND MACRON
++ { {UNITIZE(Qt::Key_Multi_key), 0x00af, 0x002e, 0x004f, 0, 0}, 0x0230 }, // U0230 # LATIN CAPITAL LETTER O WITH DOT ABOVE AND MACRON
++ { {UNITIZE(Qt::Key_Multi_key), 0x00af, 0x002e, 0x0061, 0, 0}, 0x01e1 }, // U01E1 # LATIN SMALL LETTER A WITH DOT ABOVE AND MACRON
++ { {UNITIZE(Qt::Key_Multi_key), 0x00af, 0x002e, 0x006f, 0, 0}, 0x0231 }, // U0231 # LATIN SMALL LETTER O WITH DOT ABOVE AND MACRON
++ { {UNITIZE(Qt::Key_Multi_key), 0x00af, 0x003b, 0x004f, 0, 0}, 0x01ec }, // U01EC # LATIN CAPITAL LETTER O WITH OGONEK AND MACRON
++ { {UNITIZE(Qt::Key_Multi_key), 0x00af, 0x003b, 0x006f, 0, 0}, 0x01ed }, // U01ED # LATIN SMALL LETTER O WITH OGONEK AND MACRON
++ { {UNITIZE(Qt::Key_Multi_key), 0x00af, 0x0041, 0, 0, 0}, 0x0100 }, // U0100 # LATIN CAPITAL LETTER A WITH MACRON
++ { {UNITIZE(Qt::Key_Multi_key), 0x00af, 0x0045, 0, 0, 0}, 0x0112 }, // U0112 # LATIN CAPITAL LETTER E WITH MACRON
++ { {UNITIZE(Qt::Key_Multi_key), 0x00af, 0x0047, 0, 0, 0}, 0x1e20 }, // U1E20 # LATIN CAPITAL LETTER G WITH MACRON
++ { {UNITIZE(Qt::Key_Multi_key), 0x00af, 0x0049, 0, 0, 0}, 0x012a }, // U012A # LATIN CAPITAL LETTER I WITH MACRON
++ { {UNITIZE(Qt::Key_Multi_key), 0x00af, 0x004f, 0, 0, 0}, 0x014c }, // U014C # LATIN CAPITAL LETTER O WITH MACRON
++ { {UNITIZE(Qt::Key_Multi_key), 0x00af, 0x0055, 0, 0, 0}, 0x016a }, // U016A # LATIN CAPITAL LETTER U WITH MACRON
++ { {UNITIZE(Qt::Key_Multi_key), 0x00af, 0x0059, 0, 0, 0}, 0x0232 }, // U0232 # LATIN CAPITAL LETTER Y WITH MACRON
++ { {UNITIZE(Qt::Key_Multi_key), 0x00af, 0x0061, 0, 0, 0}, 0x0101 }, // U0101 # LATIN SMALL LETTER A WITH MACRON
++ { {UNITIZE(Qt::Key_Multi_key), 0x00af, 0x0065, 0, 0, 0}, 0x0113 }, // U0113 # LATIN SMALL LETTER E WITH MACRON
++ { {UNITIZE(Qt::Key_Multi_key), 0x00af, 0x0067, 0, 0, 0}, 0x1e21 }, // U1E21 # LATIN SMALL LETTER G WITH MACRON
++ { {UNITIZE(Qt::Key_Multi_key), 0x00af, 0x0069, 0, 0, 0}, 0x012b }, // U012B # LATIN SMALL LETTER I WITH MACRON
++ { {UNITIZE(Qt::Key_Multi_key), 0x00af, 0x006f, 0, 0, 0}, 0x014d }, // U014D # LATIN SMALL LETTER O WITH MACRON
++ { {UNITIZE(Qt::Key_Multi_key), 0x00af, 0x0075, 0, 0, 0}, 0x016b }, // U016B # LATIN SMALL LETTER U WITH MACRON
++ { {UNITIZE(Qt::Key_Multi_key), 0x00af, 0x0079, 0, 0, 0}, 0x0233 }, // U0233 # LATIN SMALL LETTER Y WITH MACRON
++ { {UNITIZE(Qt::Key_Multi_key), 0x00af, 0x007e, 0x004f, 0, 0}, 0x022c }, // U022C # LATIN CAPITAL LETTER O WITH TILDE AND MACRON
++ { {UNITIZE(Qt::Key_Multi_key), 0x00af, 0x007e, 0x006f, 0, 0}, 0x022d }, // U022D # LATIN SMALL LETTER O WITH TILDE AND MACRON
++ { {UNITIZE(Qt::Key_Multi_key), 0x00af, 0x00c4, 0, 0, 0}, 0x01de }, // U01DE # LATIN CAPITAL LETTER A WITH DIAERESIS AND MACRON
++ { {UNITIZE(Qt::Key_Multi_key), 0x00af, 0x00c6, 0, 0, 0}, 0x01e2 }, // U01E2 # LATIN CAPITAL LETTER AE WITH MACRON
++ { {UNITIZE(Qt::Key_Multi_key), 0x00af, 0x00d5, 0, 0, 0}, 0x022c }, // U022C # LATIN CAPITAL LETTER O WITH TILDE AND MACRON
++ { {UNITIZE(Qt::Key_Multi_key), 0x00af, 0x00d6, 0, 0, 0}, 0x022a }, // U022A # LATIN CAPITAL LETTER O WITH DIAERESIS AND MACRON
++ { {UNITIZE(Qt::Key_Multi_key), 0x00af, 0x00dc, 0, 0, 0}, 0x01d5 }, // U01D5 # LATIN CAPITAL LETTER U WITH DIAERESIS AND MACRON
++ { {UNITIZE(Qt::Key_Multi_key), 0x00af, 0x00e4, 0, 0, 0}, 0x01df }, // U01DF # LATIN SMALL LETTER A WITH DIAERESIS AND MACRON
++ { {UNITIZE(Qt::Key_Multi_key), 0x00af, 0x00e6, 0, 0, 0}, 0x01e3 }, // U01E3 # LATIN SMALL LETTER AE WITH MACRON
++ { {UNITIZE(Qt::Key_Multi_key), 0x00af, 0x00f5, 0, 0, 0}, 0x022d }, // U022D # LATIN SMALL LETTER O WITH TILDE AND MACRON
++ { {UNITIZE(Qt::Key_Multi_key), 0x00af, 0x00f6, 0, 0, 0}, 0x022b }, // U022B # LATIN SMALL LETTER O WITH DIAERESIS AND MACRON
++ { {UNITIZE(Qt::Key_Multi_key), 0x00af, 0x00fc, 0, 0, 0}, 0x01d6 }, // U01D6 # LATIN SMALL LETTER U WITH DIAERESIS AND MACRON
++ { {UNITIZE(Qt::Key_Multi_key), 0x00af, 0x01ea, 0, 0, 0}, 0x01ec }, // U01EC # LATIN CAPITAL LETTER O WITH OGONEK AND MACRON
++ { {UNITIZE(Qt::Key_Multi_key), 0x00af, 0x01eb, 0, 0, 0}, 0x01ed }, // U01ED # LATIN SMALL LETTER O WITH OGONEK AND MACRON
++ { {UNITIZE(Qt::Key_Multi_key), 0x00af, 0x0226, 0, 0, 0}, 0x01e0 }, // U01E0 # LATIN CAPITAL LETTER A WITH DOT ABOVE AND MACRON
++ { {UNITIZE(Qt::Key_Multi_key), 0x00af, 0x0227, 0, 0, 0}, 0x01e1 }, // U01E1 # LATIN SMALL LETTER A WITH DOT ABOVE AND MACRON
++ { {UNITIZE(Qt::Key_Multi_key), 0x00af, 0x022e, 0, 0, 0}, 0x0230 }, // U0230 # LATIN CAPITAL LETTER O WITH DOT ABOVE AND MACRON
++ { {UNITIZE(Qt::Key_Multi_key), 0x00af, 0x022f, 0, 0, 0}, 0x0231 }, // U0231 # LATIN SMALL LETTER O WITH DOT ABOVE AND MACRON
++ { {UNITIZE(Qt::Key_Multi_key), 0x00af, 0x0391, 0, 0, 0}, 0x1fb9 }, // U1FB9 # GREEK CAPITAL LETTER ALPHA WITH MACRON
++ { {UNITIZE(Qt::Key_Multi_key), 0x00af, 0x0399, 0, 0, 0}, 0x1fd9 }, // U1FD9 # GREEK CAPITAL LETTER IOTA WITH MACRON
++ { {UNITIZE(Qt::Key_Multi_key), 0x00af, 0x03a5, 0, 0, 0}, 0x1fe9 }, // U1FE9 # GREEK CAPITAL LETTER UPSILON WITH MACRON
++ { {UNITIZE(Qt::Key_Multi_key), 0x00af, 0x03b1, 0, 0, 0}, 0x1fb1 }, // U1FB1 # GREEK SMALL LETTER ALPHA WITH MACRON
++ { {UNITIZE(Qt::Key_Multi_key), 0x00af, 0x03b9, 0, 0, 0}, 0x1fd1 }, // U1FD1 # GREEK SMALL LETTER IOTA WITH MACRON
++ { {UNITIZE(Qt::Key_Multi_key), 0x00af, 0x03c5, 0, 0, 0}, 0x1fe1 }, // U1FE1 # GREEK SMALL LETTER UPSILON WITH MACRON
++ { {UNITIZE(Qt::Key_Multi_key), 0x00af, 0x0418, 0, 0, 0}, 0x04e2 }, // U04E2 # CYRILLIC CAPITAL LETTER I WITH MACRON
++ { {UNITIZE(Qt::Key_Multi_key), 0x00af, 0x0423, 0, 0, 0}, 0x04ee }, // U04EE # CYRILLIC CAPITAL LETTER U WITH MACRON
++ { {UNITIZE(Qt::Key_Multi_key), 0x00af, 0x0438, 0, 0, 0}, 0x04e3 }, // U04E3 # CYRILLIC SMALL LETTER I WITH MACRON
++ { {UNITIZE(Qt::Key_Multi_key), 0x00af, 0x0443, 0, 0, 0}, 0x04ef }, // U04EF # CYRILLIC SMALL LETTER U WITH MACRON
++ { {UNITIZE(Qt::Key_Multi_key), 0x00af, 0x1e36, 0, 0, 0}, 0x1e38 }, // U1E38 # LATIN CAPITAL LETTER L WITH DOT BELOW AND MACRON
++ { {UNITIZE(Qt::Key_Multi_key), 0x00af, 0x1e37, 0, 0, 0}, 0x1e39 }, // U1E39 # LATIN SMALL LETTER L WITH DOT BELOW AND MACRON
++ { {UNITIZE(Qt::Key_Multi_key), 0x00af, 0x1e5a, 0, 0, 0}, 0x1e5c }, // U1E5C # LATIN CAPITAL LETTER R WITH DOT BELOW AND MACRON
++ { {UNITIZE(Qt::Key_Multi_key), 0x00af, 0x1e5b, 0, 0, 0}, 0x1e5d }, // U1E5D # LATIN SMALL LETTER R WITH DOT BELOW AND MACRON
++ { {UNITIZE(Qt::Key_Multi_key), 0x00af, UNITIZE(Qt::Key_Dead_Tilde), 0x004f, 0, 0}, 0x022c }, // U022C # LATIN CAPITAL LETTER O WITH TILDE AND MACRON
++ { {UNITIZE(Qt::Key_Multi_key), 0x00af, UNITIZE(Qt::Key_Dead_Tilde), 0x006f, 0, 0}, 0x022d }, // U022D # LATIN SMALL LETTER O WITH TILDE AND MACRON
++ { {UNITIZE(Qt::Key_Multi_key), 0x00af, UNITIZE(Qt::Key_Dead_Abovedot), 0x0041, 0, 0}, 0x01e0 }, // U01E0 # LATIN CAPITAL LETTER A WITH DOT ABOVE AND MACRON
++ { {UNITIZE(Qt::Key_Multi_key), 0x00af, UNITIZE(Qt::Key_Dead_Abovedot), 0x004f, 0, 0}, 0x0230 }, // U0230 # LATIN CAPITAL LETTER O WITH DOT ABOVE AND MACRON
++ { {UNITIZE(Qt::Key_Multi_key), 0x00af, UNITIZE(Qt::Key_Dead_Abovedot), 0x0061, 0, 0}, 0x01e1 }, // U01E1 # LATIN SMALL LETTER A WITH DOT ABOVE AND MACRON
++ { {UNITIZE(Qt::Key_Multi_key), 0x00af, UNITIZE(Qt::Key_Dead_Abovedot), 0x006f, 0, 0}, 0x0231 }, // U0231 # LATIN SMALL LETTER O WITH DOT ABOVE AND MACRON
++ { {UNITIZE(Qt::Key_Multi_key), 0x00af, UNITIZE(Qt::Key_Dead_Diaeresis), 0x0041, 0, 0}, 0x01de }, // U01DE # LATIN CAPITAL LETTER A WITH DIAERESIS AND MACRON
++ { {UNITIZE(Qt::Key_Multi_key), 0x00af, UNITIZE(Qt::Key_Dead_Diaeresis), 0x004f, 0, 0}, 0x022a }, // U022A # LATIN CAPITAL LETTER O WITH DIAERESIS AND MACRON
++ { {UNITIZE(Qt::Key_Multi_key), 0x00af, UNITIZE(Qt::Key_Dead_Diaeresis), 0x0055, 0, 0}, 0x01d5 }, // U01D5 # LATIN CAPITAL LETTER U WITH DIAERESIS AND MACRON
++ { {UNITIZE(Qt::Key_Multi_key), 0x00af, UNITIZE(Qt::Key_Dead_Diaeresis), 0x0061, 0, 0}, 0x01df }, // U01DF # LATIN SMALL LETTER A WITH DIAERESIS AND MACRON
++ { {UNITIZE(Qt::Key_Multi_key), 0x00af, UNITIZE(Qt::Key_Dead_Diaeresis), 0x006f, 0, 0}, 0x022b }, // U022B # LATIN SMALL LETTER O WITH DIAERESIS AND MACRON
++ { {UNITIZE(Qt::Key_Multi_key), 0x00af, UNITIZE(Qt::Key_Dead_Diaeresis), 0x0075, 0, 0}, 0x01d6 }, // U01D6 # LATIN SMALL LETTER U WITH DIAERESIS AND MACRON
++ { {UNITIZE(Qt::Key_Multi_key), 0x00af, UNITIZE(Qt::Key_Dead_Ogonek), 0x004f, 0, 0}, 0x01ec }, // U01EC # LATIN CAPITAL LETTER O WITH OGONEK AND MACRON
++ { {UNITIZE(Qt::Key_Multi_key), 0x00af, UNITIZE(Qt::Key_Dead_Ogonek), 0x006f, 0, 0}, 0x01ed }, // U01ED # LATIN SMALL LETTER O WITH OGONEK AND MACRON
++ { {UNITIZE(Qt::Key_Multi_key), 0x00af, UNITIZE(Qt::Key_Dead_Belowdot), 0x004c, 0, 0}, 0x1e38 }, // U1E38 # LATIN CAPITAL LETTER L WITH DOT BELOW AND MACRON
++ { {UNITIZE(Qt::Key_Multi_key), 0x00af, UNITIZE(Qt::Key_Dead_Belowdot), 0x0052, 0, 0}, 0x1e5c }, // U1E5C # LATIN CAPITAL LETTER R WITH DOT BELOW AND MACRON
++ { {UNITIZE(Qt::Key_Multi_key), 0x00af, UNITIZE(Qt::Key_Dead_Belowdot), 0x006c, 0, 0}, 0x1e39 }, // U1E39 # LATIN SMALL LETTER L WITH DOT BELOW AND MACRON
++ { {UNITIZE(Qt::Key_Multi_key), 0x00af, UNITIZE(Qt::Key_Dead_Belowdot), 0x0072, 0, 0}, 0x1e5d }, // U1E5D # LATIN SMALL LETTER R WITH DOT BELOW AND MACRON
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0000, 0, 0, 0}, 0x1edb }, // U1EDB # LATIN SMALL LETTER O WITH HORN AND ACUTE
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0000, 0, 0, 0}, 0x1ee9 }, // U1EE9 # LATIN SMALL LETTER U WITH HORN AND ACUTE
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0000, 0, 0, 0}, 0x1ee8 }, // U1EE8 # LATIN CAPITAL LETTER U WITH HORN AND ACUTE
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0000, 0, 0, 0}, 0x1eda }, // U1EDA # LATIN CAPITAL LETTER O WITH HORN AND ACUTE
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0000, 0x004f, 0, 0}, 0x01fe }, // U01FE # LATIN CAPITAL LETTER O WITH STROKE AND ACUTE
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0000, 0x004f, 0, 0}, 0x1e4c }, // U1E4C # LATIN CAPITAL LETTER O WITH TILDE AND ACUTE
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0000, 0x0055, 0, 0}, 0x1e78 }, // U1E78 # LATIN CAPITAL LETTER U WITH TILDE AND ACUTE
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0000, 0x006f, 0, 0}, 0x01ff }, // U01FF # LATIN SMALL LETTER O WITH STROKE AND ACUTE
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0000, 0x006f, 0, 0}, 0x1e4d }, // U1E4D # LATIN SMALL LETTER O WITH TILDE AND ACUTE
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0000, 0x0075, 0, 0}, 0x1e79 }, // U1E79 # LATIN SMALL LETTER U WITH TILDE AND ACUTE
++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0022, 0x0049, 0, 0}, 0x1e2e }, // U1E2E # LATIN CAPITAL LETTER I WITH DIAERESIS AND ACUTE
++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0022, 0x0055, 0, 0}, 0x01d7 }, // U01D7 # LATIN CAPITAL LETTER U WITH DIAERESIS AND ACUTE
++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0022, 0x0069, 0, 0}, 0x1e2f }, // U1E2F # LATIN SMALL LETTER I WITH DIAERESIS AND ACUTE
++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0022, 0x0075, 0, 0}, 0x01d8 }, // U01D8 # LATIN SMALL LETTER U WITH DIAERESIS AND ACUTE
++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0022, 0x03b9, 0, 0}, 0x0390 }, // U0390 # GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS
++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0022, 0x03c5, 0, 0}, 0x03b0 }, // U03B0 # GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS
++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0028, 0x0391, 0, 0}, 0x1f0d }, // U1F0D # GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA
++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0028, 0x0395, 0, 0}, 0x1f1d }, // U1F1D # GREEK CAPITAL LETTER EPSILON WITH DASIA AND OXIA
++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0028, 0x0397, 0, 0}, 0x1f2d }, // U1F2D # GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA
++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0028, 0x0399, 0, 0}, 0x1f3d }, // U1F3D # GREEK CAPITAL LETTER IOTA WITH DASIA AND OXIA
++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0028, 0x039f, 0, 0}, 0x1f4d }, // U1F4D # GREEK CAPITAL LETTER OMICRON WITH DASIA AND OXIA
++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0028, 0x03a5, 0, 0}, 0x1f5d }, // U1F5D # GREEK CAPITAL LETTER UPSILON WITH DASIA AND OXIA
++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0028, 0x03a9, 0, 0}, 0x1f6d }, // U1F6D # GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA
++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0028, 0x03b1, 0, 0}, 0x1f05 }, // U1F05 # GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA
++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0028, 0x03b5, 0, 0}, 0x1f15 }, // U1F15 # GREEK SMALL LETTER EPSILON WITH DASIA AND OXIA
++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0028, 0x03b7, 0, 0}, 0x1f25 }, // U1F25 # GREEK SMALL LETTER ETA WITH DASIA AND OXIA
++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0028, 0x03b9, 0, 0}, 0x1f35 }, // U1F35 # GREEK SMALL LETTER IOTA WITH DASIA AND OXIA
++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0028, 0x03bf, 0, 0}, 0x1f45 }, // U1F45 # GREEK SMALL LETTER OMICRON WITH DASIA AND OXIA
++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0028, 0x03c5, 0, 0}, 0x1f55 }, // U1F55 # GREEK SMALL LETTER UPSILON WITH DASIA AND OXIA
++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0028, 0x03c9, 0, 0}, 0x1f65 }, // U1F65 # GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA
++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0029, 0x0391, 0, 0}, 0x1f0c }, // U1F0C # GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA
++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0029, 0x0395, 0, 0}, 0x1f1c }, // U1F1C # GREEK CAPITAL LETTER EPSILON WITH PSILI AND OXIA
++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0029, 0x0397, 0, 0}, 0x1f2c }, // U1F2C # GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA
++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0029, 0x0399, 0, 0}, 0x1f3c }, // U1F3C # GREEK CAPITAL LETTER IOTA WITH PSILI AND OXIA
++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0029, 0x039f, 0, 0}, 0x1f4c }, // U1F4C # GREEK CAPITAL LETTER OMICRON WITH PSILI AND OXIA
++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0029, 0x03a9, 0, 0}, 0x1f6c }, // U1F6C # GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA
++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0029, 0x03b1, 0, 0}, 0x1f04 }, // U1F04 # GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA
++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0029, 0x03b5, 0, 0}, 0x1f14 }, // U1F14 # GREEK SMALL LETTER EPSILON WITH PSILI AND OXIA
++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0029, 0x03b7, 0, 0}, 0x1f24 }, // U1F24 # GREEK SMALL LETTER ETA WITH PSILI AND OXIA
++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0029, 0x03b9, 0, 0}, 0x1f34 }, // U1F34 # GREEK SMALL LETTER IOTA WITH PSILI AND OXIA
++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0029, 0x03bf, 0, 0}, 0x1f44 }, // U1F44 # GREEK SMALL LETTER OMICRON WITH PSILI AND OXIA
++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0029, 0x03c5, 0, 0}, 0x1f54 }, // U1F54 # GREEK SMALL LETTER UPSILON WITH PSILI AND OXIA
++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0029, 0x03c9, 0, 0}, 0x1f64 }, // U1F64 # GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA
++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x002b, 0x004f, 0, 0}, 0x1eda }, // U1EDA # LATIN CAPITAL LETTER O WITH HORN AND ACUTE
++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x002b, 0x0055, 0, 0}, 0x1ee8 }, // U1EE8 # LATIN CAPITAL LETTER U WITH HORN AND ACUTE
++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x002b, 0x006f, 0, 0}, 0x1edb }, // U1EDB # LATIN SMALL LETTER O WITH HORN AND ACUTE
++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x002b, 0x0075, 0, 0}, 0x1ee9 }, // U1EE9 # LATIN SMALL LETTER U WITH HORN AND ACUTE
++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x002c, 0x0043, 0, 0}, 0x1e08 }, // U1E08 # LATIN CAPITAL LETTER C WITH CEDILLA AND ACUTE
++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x002c, 0x0063, 0, 0}, 0x1e09 }, // U1E09 # LATIN SMALL LETTER C WITH CEDILLA AND ACUTE
++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x002f, 0x004f, 0, 0}, 0x01fe }, // U01FE # LATIN CAPITAL LETTER O WITH STROKE AND ACUTE
++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x002f, 0x006f, 0, 0}, 0x01ff }, // U01FF # LATIN SMALL LETTER O WITH STROKE AND ACUTE
++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0041, 0, 0, 0}, 0x00c1 }, // U00C1 # LATIN CAPITAL LETTER A WITH ACUTE
++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0043, 0, 0, 0}, 0x0106 }, // U0106 # LATIN CAPITAL LETTER C WITH ACUTE
++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0045, 0, 0, 0}, 0x00c9 }, // U00C9 # LATIN CAPITAL LETTER E WITH ACUTE
++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0047, 0, 0, 0}, 0x01f4 }, // U01F4 # LATIN CAPITAL LETTER G WITH ACUTE
++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0049, 0, 0, 0}, 0x00cd }, // U00CD # LATIN CAPITAL LETTER I WITH ACUTE
++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x004b, 0, 0, 0}, 0x1e30 }, // U1E30 # LATIN CAPITAL LETTER K WITH ACUTE
++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x004c, 0, 0, 0}, 0x0139 }, // U0139 # LATIN CAPITAL LETTER L WITH ACUTE
++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x004d, 0, 0, 0}, 0x1e3e }, // U1E3E # LATIN CAPITAL LETTER M WITH ACUTE
++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x004e, 0, 0, 0}, 0x0143 }, // U0143 # LATIN CAPITAL LETTER N WITH ACUTE
++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x004f, 0, 0, 0}, 0x00d3 }, // U00D3 # LATIN CAPITAL LETTER O WITH ACUTE
++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0050, 0, 0, 0}, 0x1e54 }, // U1E54 # LATIN CAPITAL LETTER P WITH ACUTE
++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0052, 0, 0, 0}, 0x0154 }, // U0154 # LATIN CAPITAL LETTER R WITH ACUTE
++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0053, 0, 0, 0}, 0x015a }, // U015A # LATIN CAPITAL LETTER S WITH ACUTE
++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0055, 0, 0, 0}, 0x00da }, // U00DA # LATIN CAPITAL LETTER U WITH ACUTE
++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0055, 0x0041, 0, 0}, 0x1eae }, // U1EAE # LATIN CAPITAL LETTER A WITH BREVE AND ACUTE
++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0055, 0x0061, 0, 0}, 0x1eaf }, // U1EAF # LATIN SMALL LETTER A WITH BREVE AND ACUTE
++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0057, 0, 0, 0}, 0x1e82 }, // U1E82 # LATIN CAPITAL LETTER W WITH ACUTE
++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0059, 0, 0, 0}, 0x00dd }, // U00DD # LATIN CAPITAL LETTER Y WITH ACUTE
++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x005a, 0, 0, 0}, 0x0179 }, // U0179 # LATIN CAPITAL LETTER Z WITH ACUTE
++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x005e, 0x0041, 0, 0}, 0x1ea4 }, // U1EA4 # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND ACUTE
++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x005e, 0x0045, 0, 0}, 0x1ebe }, // U1EBE # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND ACUTE
++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x005e, 0x004f, 0, 0}, 0x1ed0 }, // U1ED0 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND ACUTE
++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x005e, 0x0061, 0, 0}, 0x1ea5 }, // U1EA5 # LATIN SMALL LETTER A WITH CIRCUMFLEX AND ACUTE
++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x005e, 0x0065, 0, 0}, 0x1ebf }, // U1EBF # LATIN SMALL LETTER E WITH CIRCUMFLEX AND ACUTE
++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x005e, 0x006f, 0, 0}, 0x1ed1 }, // U1ED1 # LATIN SMALL LETTER O WITH CIRCUMFLEX AND ACUTE
++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x005f, 0x0045, 0, 0}, 0x1e16 }, // U1E16 # LATIN CAPITAL LETTER E WITH MACRON AND ACUTE
++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x005f, 0x004f, 0, 0}, 0x1e52 }, // U1E52 # LATIN CAPITAL LETTER O WITH MACRON AND ACUTE
++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x005f, 0x0065, 0, 0}, 0x1e17 }, // U1E17 # LATIN SMALL LETTER E WITH MACRON AND ACUTE
++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x005f, 0x006f, 0, 0}, 0x1e53 }, // U1E53 # LATIN SMALL LETTER O WITH MACRON AND ACUTE
++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0061, 0, 0, 0}, 0x00e1 }, // U00E1 # LATIN SMALL LETTER A WITH ACUTE
++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0062, 0x0041, 0, 0}, 0x1eae }, // U1EAE # LATIN CAPITAL LETTER A WITH BREVE AND ACUTE
++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0062, 0x0061, 0, 0}, 0x1eaf }, // U1EAF # LATIN SMALL LETTER A WITH BREVE AND ACUTE
++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0063, 0, 0, 0}, 0x0107 }, // U0107 # LATIN SMALL LETTER C WITH ACUTE
++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0065, 0, 0, 0}, 0x00e9 }, // U00E9 # LATIN SMALL LETTER E WITH ACUTE
++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0067, 0, 0, 0}, 0x01f5 }, // U01F5 # LATIN SMALL LETTER G WITH ACUTE
++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0069, 0, 0, 0}, 0x00ed }, // U00ED # LATIN SMALL LETTER I WITH ACUTE
++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x006b, 0, 0, 0}, 0x1e31 }, // U1E31 # LATIN SMALL LETTER K WITH ACUTE
++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x006c, 0, 0, 0}, 0x013a }, // U013A # LATIN SMALL LETTER L WITH ACUTE
++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x006d, 0, 0, 0}, 0x1e3f }, // U1E3F # LATIN SMALL LETTER M WITH ACUTE
++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x006e, 0, 0, 0}, 0x0144 }, // U0144 # LATIN SMALL LETTER N WITH ACUTE
++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x006f, 0, 0, 0}, 0x00f3 }, // U00F3 # LATIN SMALL LETTER O WITH ACUTE
++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x006f, 0x0041, 0, 0}, 0x01fa }, // U01FA # LATIN CAPITAL LETTER A WITH RING ABOVE AND ACUTE
++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x006f, 0x0061, 0, 0}, 0x01fb }, // U01FB # LATIN SMALL LETTER A WITH RING ABOVE AND ACUTE
++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0070, 0, 0, 0}, 0x1e55 }, // U1E55 # LATIN SMALL LETTER P WITH ACUTE
++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0072, 0, 0, 0}, 0x0155 }, // U0155 # LATIN SMALL LETTER R WITH ACUTE
++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0073, 0, 0, 0}, 0x015b }, // U015B # LATIN SMALL LETTER S WITH ACUTE
++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0075, 0, 0, 0}, 0x00fa }, // U00FA # LATIN SMALL LETTER U WITH ACUTE
++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0077, 0, 0, 0}, 0x1e83 }, // U1E83 # LATIN SMALL LETTER W WITH ACUTE
++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0079, 0, 0, 0}, 0x00fd }, // U00FD # LATIN SMALL LETTER Y WITH ACUTE
++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x007a, 0, 0, 0}, 0x017a }, // U017A # LATIN SMALL LETTER Z WITH ACUTE
++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x007e, 0x004f, 0, 0}, 0x1e4c }, // U1E4C # LATIN CAPITAL LETTER O WITH TILDE AND ACUTE
++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x007e, 0x0055, 0, 0}, 0x1e78 }, // U1E78 # LATIN CAPITAL LETTER U WITH TILDE AND ACUTE
++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x007e, 0x006f, 0, 0}, 0x1e4d }, // U1E4D # LATIN SMALL LETTER O WITH TILDE AND ACUTE
++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x007e, 0x0075, 0, 0}, 0x1e79 }, // U1E79 # LATIN SMALL LETTER U WITH TILDE AND ACUTE
++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x00af, 0x0045, 0, 0}, 0x1e16 }, // U1E16 # LATIN CAPITAL LETTER E WITH MACRON AND ACUTE
++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x00af, 0x004f, 0, 0}, 0x1e52 }, // U1E52 # LATIN CAPITAL LETTER O WITH MACRON AND ACUTE
++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x00af, 0x0065, 0, 0}, 0x1e17 }, // U1E17 # LATIN SMALL LETTER E WITH MACRON AND ACUTE
++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x00af, 0x006f, 0, 0}, 0x1e53 }, // U1E53 # LATIN SMALL LETTER O WITH MACRON AND ACUTE
++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x00c2, 0, 0, 0}, 0x1ea4 }, // U1EA4 # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND ACUTE
++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x00c5, 0, 0, 0}, 0x01fa }, // U01FA # LATIN CAPITAL LETTER A WITH RING ABOVE AND ACUTE
++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x00c6, 0, 0, 0}, 0x01fc }, // U01FC # LATIN CAPITAL LETTER AE WITH ACUTE
++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x00c7, 0, 0, 0}, 0x1e08 }, // U1E08 # LATIN CAPITAL LETTER C WITH CEDILLA AND ACUTE
++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x00ca, 0, 0, 0}, 0x1ebe }, // U1EBE # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND ACUTE
++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x00cf, 0, 0, 0}, 0x1e2e }, // U1E2E # LATIN CAPITAL LETTER I WITH DIAERESIS AND ACUTE
++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x00d4, 0, 0, 0}, 0x1ed0 }, // U1ED0 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND ACUTE
++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x00d5, 0, 0, 0}, 0x1e4c }, // U1E4C # LATIN CAPITAL LETTER O WITH TILDE AND ACUTE
++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x00d8, 0, 0, 0}, 0x01fe }, // U01FE # LATIN CAPITAL LETTER O WITH STROKE AND ACUTE
++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x00dc, 0, 0, 0}, 0x01d7 }, // U01D7 # LATIN CAPITAL LETTER U WITH DIAERESIS AND ACUTE
++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x00e2, 0, 0, 0}, 0x1ea5 }, // U1EA5 # LATIN SMALL LETTER A WITH CIRCUMFLEX AND ACUTE
++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x00e5, 0, 0, 0}, 0x01fb }, // U01FB # LATIN SMALL LETTER A WITH RING ABOVE AND ACUTE
++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x00e6, 0, 0, 0}, 0x01fd }, // U01FD # LATIN SMALL LETTER AE WITH ACUTE
++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x00e7, 0, 0, 0}, 0x1e09 }, // U1E09 # LATIN SMALL LETTER C WITH CEDILLA AND ACUTE
++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x00ea, 0, 0, 0}, 0x1ebf }, // U1EBF # LATIN SMALL LETTER E WITH CIRCUMFLEX AND ACUTE
++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x00ef, 0, 0, 0}, 0x1e2f }, // U1E2F # LATIN SMALL LETTER I WITH DIAERESIS AND ACUTE
++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x00f4, 0, 0, 0}, 0x1ed1 }, // U1ED1 # LATIN SMALL LETTER O WITH CIRCUMFLEX AND ACUTE
++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x00f5, 0, 0, 0}, 0x1e4d }, // U1E4D # LATIN SMALL LETTER O WITH TILDE AND ACUTE
++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x00f8, 0, 0, 0}, 0x01ff }, // U01FF # LATIN SMALL LETTER O WITH STROKE AND ACUTE
++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x00fc, 0, 0, 0}, 0x01d8 }, // U01D8 # LATIN SMALL LETTER U WITH DIAERESIS AND ACUTE
++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0102, 0, 0, 0}, 0x1eae }, // U1EAE # LATIN CAPITAL LETTER A WITH BREVE AND ACUTE
++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0103, 0, 0, 0}, 0x1eaf }, // U1EAF # LATIN SMALL LETTER A WITH BREVE AND ACUTE
++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0112, 0, 0, 0}, 0x1e16 }, // U1E16 # LATIN CAPITAL LETTER E WITH MACRON AND ACUTE
++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0113, 0, 0, 0}, 0x1e17 }, // U1E17 # LATIN SMALL LETTER E WITH MACRON AND ACUTE
++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x014c, 0, 0, 0}, 0x1e52 }, // U1E52 # LATIN CAPITAL LETTER O WITH MACRON AND ACUTE
++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x014d, 0, 0, 0}, 0x1e53 }, // U1E53 # LATIN SMALL LETTER O WITH MACRON AND ACUTE
++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0168, 0, 0, 0}, 0x1e78 }, // U1E78 # LATIN CAPITAL LETTER U WITH TILDE AND ACUTE
++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0169, 0, 0, 0}, 0x1e79 }, // U1E79 # LATIN SMALL LETTER U WITH TILDE AND ACUTE
++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0313, 0x0391, 0, 0}, 0x1f0c }, // U1F0C # GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA
++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0313, 0x0395, 0, 0}, 0x1f1c }, // U1F1C # GREEK CAPITAL LETTER EPSILON WITH PSILI AND OXIA
++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0313, 0x0397, 0, 0}, 0x1f2c }, // U1F2C # GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA
++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0313, 0x0399, 0, 0}, 0x1f3c }, // U1F3C # GREEK CAPITAL LETTER IOTA WITH PSILI AND OXIA
++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0313, 0x039f, 0, 0}, 0x1f4c }, // U1F4C # GREEK CAPITAL LETTER OMICRON WITH PSILI AND OXIA
++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0313, 0x03a9, 0, 0}, 0x1f6c }, // U1F6C # GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA
++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0313, 0x03b1, 0, 0}, 0x1f04 }, // U1F04 # GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA
++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0313, 0x03b5, 0, 0}, 0x1f14 }, // U1F14 # GREEK SMALL LETTER EPSILON WITH PSILI AND OXIA
++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0313, 0x03b7, 0, 0}, 0x1f24 }, // U1F24 # GREEK SMALL LETTER ETA WITH PSILI AND OXIA
++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0313, 0x03b9, 0, 0}, 0x1f34 }, // U1F34 # GREEK SMALL LETTER IOTA WITH PSILI AND OXIA
++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0313, 0x03bf, 0, 0}, 0x1f44 }, // U1F44 # GREEK SMALL LETTER OMICRON WITH PSILI AND OXIA
++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0313, 0x03c5, 0, 0}, 0x1f54 }, // U1F54 # GREEK SMALL LETTER UPSILON WITH PSILI AND OXIA
++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0313, 0x03c9, 0, 0}, 0x1f64 }, // U1F64 # GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA
++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0314, 0x0391, 0, 0}, 0x1f0d }, // U1F0D # GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA
++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0314, 0x0395, 0, 0}, 0x1f1d }, // U1F1D # GREEK CAPITAL LETTER EPSILON WITH DASIA AND OXIA
++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0314, 0x0397, 0, 0}, 0x1f2d }, // U1F2D # GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA
++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0314, 0x0399, 0, 0}, 0x1f3d }, // U1F3D # GREEK CAPITAL LETTER IOTA WITH DASIA AND OXIA
++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0314, 0x039f, 0, 0}, 0x1f4d }, // U1F4D # GREEK CAPITAL LETTER OMICRON WITH DASIA AND OXIA
++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0314, 0x03a5, 0, 0}, 0x1f5d }, // U1F5D # GREEK CAPITAL LETTER UPSILON WITH DASIA AND OXIA
++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0314, 0x03a9, 0, 0}, 0x1f6d }, // U1F6D # GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA
++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0314, 0x03b1, 0, 0}, 0x1f05 }, // U1F05 # GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA
++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0314, 0x03b5, 0, 0}, 0x1f15 }, // U1F15 # GREEK SMALL LETTER EPSILON WITH DASIA AND OXIA
++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0314, 0x03b7, 0, 0}, 0x1f25 }, // U1F25 # GREEK SMALL LETTER ETA WITH DASIA AND OXIA
++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0314, 0x03b9, 0, 0}, 0x1f35 }, // U1F35 # GREEK SMALL LETTER IOTA WITH DASIA AND OXIA
++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0314, 0x03bf, 0, 0}, 0x1f45 }, // U1F45 # GREEK SMALL LETTER OMICRON WITH DASIA AND OXIA
++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0314, 0x03c5, 0, 0}, 0x1f55 }, // U1F55 # GREEK SMALL LETTER UPSILON WITH DASIA AND OXIA
++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0314, 0x03c9, 0, 0}, 0x1f65 }, // U1F65 # GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA
++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0391, 0, 0, 0}, 0x0386 }, // U0386 # GREEK CAPITAL LETTER ALPHA WITH TONOS
++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0395, 0, 0, 0}, 0x0388 }, // U0388 # GREEK CAPITAL LETTER EPSILON WITH TONOS
++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0397, 0, 0, 0}, 0x0389 }, // U0389 # GREEK CAPITAL LETTER ETA WITH TONOS
++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0399, 0, 0, 0}, 0x038a }, // U038A # GREEK CAPITAL LETTER IOTA WITH TONOS
++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x039f, 0, 0, 0}, 0x038c }, // U038C # GREEK CAPITAL LETTER OMICRON WITH TONOS
++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x03a5, 0, 0, 0}, 0x038e }, // U038E # GREEK CAPITAL LETTER UPSILON WITH TONOS
++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x03a9, 0, 0, 0}, 0x038f }, // U038F # GREEK CAPITAL LETTER OMEGA WITH TONOS
++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x03b1, 0, 0, 0}, 0x03ac }, // U03AC # GREEK SMALL LETTER ALPHA WITH TONOS
++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x03b5, 0, 0, 0}, 0x03ad }, // U03AD # GREEK SMALL LETTER EPSILON WITH TONOS
++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x03b7, 0, 0, 0}, 0x03ae }, // U03AE # GREEK SMALL LETTER ETA WITH TONOS
++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x03b9, 0, 0, 0}, 0x03af }, // U03AF # GREEK SMALL LETTER IOTA WITH TONOS
++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x03bf, 0, 0, 0}, 0x03cc }, // U03CC # GREEK SMALL LETTER OMICRON WITH TONOS
++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x03c5, 0, 0, 0}, 0x03cd }, // U03CD # GREEK SMALL LETTER UPSILON WITH TONOS
++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x03c9, 0, 0, 0}, 0x03ce }, // U03CE # GREEK SMALL LETTER OMEGA WITH TONOS
++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x03ca, 0, 0, 0}, 0x0390 }, // U0390 # GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS
++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x03cb, 0, 0, 0}, 0x03b0 }, // U03B0 # GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS
++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x03d2, 0, 0, 0}, 0x03d3 }, // U03D3 # GREEK UPSILON WITH ACUTE AND HOOK SYMBOL
++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0413, 0, 0, 0}, 0x0403 }, // U0403 # CYRILLIC CAPITAL LETTER GJE
++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x041a, 0, 0, 0}, 0x040c }, // U040C # CYRILLIC CAPITAL LETTER KJE
++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0433, 0, 0, 0}, 0x0453 }, // U0453 # CYRILLIC SMALL LETTER GJE
++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x043a, 0, 0, 0}, 0x045c }, // U045C # CYRILLIC SMALL LETTER KJE
++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x1f00, 0, 0, 0}, 0x1f04 }, // U1F04 # GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA
++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x1f01, 0, 0, 0}, 0x1f05 }, // U1F05 # GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA
++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x1f08, 0, 0, 0}, 0x1f0c }, // U1F0C # GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA
++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x1f09, 0, 0, 0}, 0x1f0d }, // U1F0D # GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA
++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x1f10, 0, 0, 0}, 0x1f14 }, // U1F14 # GREEK SMALL LETTER EPSILON WITH PSILI AND OXIA
++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x1f11, 0, 0, 0}, 0x1f15 }, // U1F15 # GREEK SMALL LETTER EPSILON WITH DASIA AND OXIA
++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x1f18, 0, 0, 0}, 0x1f1c }, // U1F1C # GREEK CAPITAL LETTER EPSILON WITH PSILI AND OXIA
++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x1f19, 0, 0, 0}, 0x1f1d }, // U1F1D # GREEK CAPITAL LETTER EPSILON WITH DASIA AND OXIA
++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x1f20, 0, 0, 0}, 0x1f24 }, // U1F24 # GREEK SMALL LETTER ETA WITH PSILI AND OXIA
++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x1f21, 0, 0, 0}, 0x1f25 }, // U1F25 # GREEK SMALL LETTER ETA WITH DASIA AND OXIA
++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x1f28, 0, 0, 0}, 0x1f2c }, // U1F2C # GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA
++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x1f29, 0, 0, 0}, 0x1f2d }, // U1F2D # GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA
++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x1f30, 0, 0, 0}, 0x1f34 }, // U1F34 # GREEK SMALL LETTER IOTA WITH PSILI AND OXIA
++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x1f31, 0, 0, 0}, 0x1f35 }, // U1F35 # GREEK SMALL LETTER IOTA WITH DASIA AND OXIA
++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x1f38, 0, 0, 0}, 0x1f3c }, // U1F3C # GREEK CAPITAL LETTER IOTA WITH PSILI AND OXIA
++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x1f39, 0, 0, 0}, 0x1f3d }, // U1F3D # GREEK CAPITAL LETTER IOTA WITH DASIA AND OXIA
++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x1f40, 0, 0, 0}, 0x1f44 }, // U1F44 # GREEK SMALL LETTER OMICRON WITH PSILI AND OXIA
++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x1f41, 0, 0, 0}, 0x1f45 }, // U1F45 # GREEK SMALL LETTER OMICRON WITH DASIA AND OXIA
++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x1f48, 0, 0, 0}, 0x1f4c }, // U1F4C # GREEK CAPITAL LETTER OMICRON WITH PSILI AND OXIA
++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x1f49, 0, 0, 0}, 0x1f4d }, // U1F4D # GREEK CAPITAL LETTER OMICRON WITH DASIA AND OXIA
++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x1f50, 0, 0, 0}, 0x1f54 }, // U1F54 # GREEK SMALL LETTER UPSILON WITH PSILI AND OXIA
++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x1f51, 0, 0, 0}, 0x1f55 }, // U1F55 # GREEK SMALL LETTER UPSILON WITH DASIA AND OXIA
++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x1f59, 0, 0, 0}, 0x1f5d }, // U1F5D # GREEK CAPITAL LETTER UPSILON WITH DASIA AND OXIA
++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x1f60, 0, 0, 0}, 0x1f64 }, // U1F64 # GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA
++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x1f61, 0, 0, 0}, 0x1f65 }, // U1F65 # GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA
++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x1f68, 0, 0, 0}, 0x1f6c }, // U1F6C # GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA
++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x1f69, 0, 0, 0}, 0x1f6d }, // U1F6D # GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA
++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, UNITIZE(Qt::Key_Dead_Circumflex), 0x0041, 0, 0}, 0x1ea4 }, // U1EA4 # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND ACUTE
++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, UNITIZE(Qt::Key_Dead_Circumflex), 0x0045, 0, 0}, 0x1ebe }, // U1EBE # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND ACUTE
++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, UNITIZE(Qt::Key_Dead_Circumflex), 0x004f, 0, 0}, 0x1ed0 }, // U1ED0 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND ACUTE
++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, UNITIZE(Qt::Key_Dead_Circumflex), 0x0061, 0, 0}, 0x1ea5 }, // U1EA5 # LATIN SMALL LETTER A WITH CIRCUMFLEX AND ACUTE
++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, UNITIZE(Qt::Key_Dead_Circumflex), 0x0065, 0, 0}, 0x1ebf }, // U1EBF # LATIN SMALL LETTER E WITH CIRCUMFLEX AND ACUTE
++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, UNITIZE(Qt::Key_Dead_Circumflex), 0x006f, 0, 0}, 0x1ed1 }, // U1ED1 # LATIN SMALL LETTER O WITH CIRCUMFLEX AND ACUTE
++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, UNITIZE(Qt::Key_Dead_Tilde), 0x004f, 0, 0}, 0x1e4c }, // U1E4C # LATIN CAPITAL LETTER O WITH TILDE AND ACUTE
++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, UNITIZE(Qt::Key_Dead_Tilde), 0x0055, 0, 0}, 0x1e78 }, // U1E78 # LATIN CAPITAL LETTER U WITH TILDE AND ACUTE
++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, UNITIZE(Qt::Key_Dead_Tilde), 0x006f, 0, 0}, 0x1e4d }, // U1E4D # LATIN SMALL LETTER O WITH TILDE AND ACUTE
++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, UNITIZE(Qt::Key_Dead_Tilde), 0x0075, 0, 0}, 0x1e79 }, // U1E79 # LATIN SMALL LETTER U WITH TILDE AND ACUTE
++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, UNITIZE(Qt::Key_Dead_Macron), 0x0045, 0, 0}, 0x1e16 }, // U1E16 # LATIN CAPITAL LETTER E WITH MACRON AND ACUTE
++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, UNITIZE(Qt::Key_Dead_Macron), 0x004f, 0, 0}, 0x1e52 }, // U1E52 # LATIN CAPITAL LETTER O WITH MACRON AND ACUTE
++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, UNITIZE(Qt::Key_Dead_Macron), 0x0065, 0, 0}, 0x1e17 }, // U1E17 # LATIN SMALL LETTER E WITH MACRON AND ACUTE
++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, UNITIZE(Qt::Key_Dead_Macron), 0x006f, 0, 0}, 0x1e53 }, // U1E53 # LATIN SMALL LETTER O WITH MACRON AND ACUTE
++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, UNITIZE(Qt::Key_Dead_Breve), 0x0041, 0, 0}, 0x1eae }, // U1EAE # LATIN CAPITAL LETTER A WITH BREVE AND ACUTE
++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, UNITIZE(Qt::Key_Dead_Breve), 0x0061, 0, 0}, 0x1eaf }, // U1EAF # LATIN SMALL LETTER A WITH BREVE AND ACUTE
++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, UNITIZE(Qt::Key_Dead_Diaeresis), 0x0049, 0, 0}, 0x1e2e }, // U1E2E # LATIN CAPITAL LETTER I WITH DIAERESIS AND ACUTE
++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, UNITIZE(Qt::Key_Dead_Diaeresis), 0x0055, 0, 0}, 0x01d7 }, // U01D7 # LATIN CAPITAL LETTER U WITH DIAERESIS AND ACUTE
++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, UNITIZE(Qt::Key_Dead_Diaeresis), 0x0069, 0, 0}, 0x1e2f }, // U1E2F # LATIN SMALL LETTER I WITH DIAERESIS AND ACUTE
++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, UNITIZE(Qt::Key_Dead_Diaeresis), 0x0075, 0, 0}, 0x01d8 }, // U01D8 # LATIN SMALL LETTER U WITH DIAERESIS AND ACUTE
++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, UNITIZE(Qt::Key_Dead_Diaeresis), 0x03b9, 0, 0}, 0x0390 }, // U0390 # GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS
++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, UNITIZE(Qt::Key_Dead_Diaeresis), 0x03c5, 0, 0}, 0x03b0 }, // U03B0 # GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS
++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, UNITIZE(Qt::Key_Dead_Abovering), 0x0041, 0, 0}, 0x01fa }, // U01FA # LATIN CAPITAL LETTER A WITH RING ABOVE AND ACUTE
++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, UNITIZE(Qt::Key_Dead_Abovering), 0x0061, 0, 0}, 0x01fb }, // U01FB # LATIN SMALL LETTER A WITH RING ABOVE AND ACUTE
++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, UNITIZE(Qt::Key_Dead_Cedilla), 0x0043, 0, 0}, 0x1e08 }, // U1E08 # LATIN CAPITAL LETTER C WITH CEDILLA AND ACUTE
++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, UNITIZE(Qt::Key_Dead_Cedilla), 0x0063, 0, 0}, 0x1e09 }, // U1E09 # LATIN SMALL LETTER C WITH CEDILLA AND ACUTE
++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, UNITIZE(Qt::Key_Dead_Horn), 0x004f, 0, 0}, 0x1eda }, // U1EDA # LATIN CAPITAL LETTER O WITH HORN AND ACUTE
++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, UNITIZE(Qt::Key_Dead_Horn), 0x0055, 0, 0}, 0x1ee8 }, // U1EE8 # LATIN CAPITAL LETTER U WITH HORN AND ACUTE
++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, UNITIZE(Qt::Key_Dead_Horn), 0x006f, 0, 0}, 0x1edb }, // U1EDB # LATIN SMALL LETTER O WITH HORN AND ACUTE
++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, UNITIZE(Qt::Key_Dead_Horn), 0x0075, 0, 0}, 0x1ee9 }, // U1EE9 # LATIN SMALL LETTER U WITH HORN AND ACUTE
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0000, 0x0028, 0x0391, 0}, 0x1f8d }, // U1F8D # GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA AND PROSGEGRAMMENI
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0000, 0x0028, 0x0391, 0}, 0x1f8b }, // U1F8B # GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA AND PROSGEGRAMMENI
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0000, 0x0028, 0x0397, 0}, 0x1f9b }, // U1F9B # GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA AND PROSGEGRAMMENI
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0000, 0x0028, 0x0397, 0}, 0x1f9d }, // U1F9D # GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA AND PROSGEGRAMMENI
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0000, 0x0028, 0x03a9, 0}, 0x1fab }, // U1FAB # GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA AND PROSGEGRAMMENI
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0000, 0x0028, 0x03a9, 0}, 0x1fad }, // U1FAD # GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA AND PROSGEGRAMMENI
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0000, 0x0028, 0x03b1, 0}, 0x1f85 }, // U1F85 # GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA AND YPOGEGRAMMENI
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0000, 0x0028, 0x03b1, 0}, 0x1f83 }, // U1F83 # GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA AND YPOGEGRAMMENI
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0000, 0x0028, 0x03b7, 0}, 0x1f93 }, // U1F93 # GREEK SMALL LETTER ETA WITH DASIA AND VARIA AND YPOGEGRAMMENI
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0000, 0x0028, 0x03b7, 0}, 0x1f95 }, // U1F95 # GREEK SMALL LETTER ETA WITH DASIA AND OXIA AND YPOGEGRAMMENI
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0000, 0x0028, 0x03c9, 0}, 0x1fa3 }, // U1FA3 # GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA AND YPOGEGRAMMENI
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0000, 0x0028, 0x03c9, 0}, 0x1fa5 }, // U1FA5 # GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA AND YPOGEGRAMMENI
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0000, 0x0029, 0x0391, 0}, 0x1f8c }, // U1F8C # GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA AND PROSGEGRAMMENI
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0000, 0x0029, 0x0391, 0}, 0x1f8a }, // U1F8A # GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA AND PROSGEGRAMMENI
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0000, 0x0029, 0x0397, 0}, 0x1f9c }, // U1F9C # GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA AND PROSGEGRAMMENI
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0000, 0x0029, 0x0397, 0}, 0x1f9a }, // U1F9A # GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA AND PROSGEGRAMMENI
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0000, 0x0029, 0x03a9, 0}, 0x1faa }, // U1FAA # GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA AND PROSGEGRAMMENI
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0000, 0x0029, 0x03a9, 0}, 0x1fac }, // U1FAC # GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA AND PROSGEGRAMMENI
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0000, 0x0029, 0x03b1, 0}, 0x1f84 }, // U1F84 # GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA AND YPOGEGRAMMENI
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0000, 0x0029, 0x03b1, 0}, 0x1f82 }, // U1F82 # GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA AND YPOGEGRAMMENI
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0000, 0x0029, 0x03b7, 0}, 0x1f92 }, // U1F92 # GREEK SMALL LETTER ETA WITH PSILI AND VARIA AND YPOGEGRAMMENI
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0000, 0x0029, 0x03b7, 0}, 0x1f94 }, // U1F94 # GREEK SMALL LETTER ETA WITH PSILI AND OXIA AND YPOGEGRAMMENI
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0000, 0x0029, 0x03c9, 0}, 0x1fa4 }, // U1FA4 # GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA AND YPOGEGRAMMENI
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0000, 0x0029, 0x03c9, 0}, 0x1fa2 }, // U1FA2 # GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA AND YPOGEGRAMMENI
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0000, 0x0313, 0x0391, 0}, 0x1f8c }, // U1F8C # GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA AND PROSGEGRAMMENI
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0000, 0x0313, 0x0391, 0}, 0x1f8a }, // U1F8A # GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA AND PROSGEGRAMMENI
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0000, 0x0313, 0x0397, 0}, 0x1f9a }, // U1F9A # GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA AND PROSGEGRAMMENI
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0000, 0x0313, 0x0397, 0}, 0x1f9c }, // U1F9C # GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA AND PROSGEGRAMMENI
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0000, 0x0313, 0x03a9, 0}, 0x1faa }, // U1FAA # GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA AND PROSGEGRAMMENI
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0000, 0x0313, 0x03a9, 0}, 0x1fac }, // U1FAC # GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA AND PROSGEGRAMMENI
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0000, 0x0313, 0x03b1, 0}, 0x1f82 }, // U1F82 # GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA AND YPOGEGRAMMENI
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0000, 0x0313, 0x03b1, 0}, 0x1f84 }, // U1F84 # GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA AND YPOGEGRAMMENI
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0000, 0x0313, 0x03b7, 0}, 0x1f92 }, // U1F92 # GREEK SMALL LETTER ETA WITH PSILI AND VARIA AND YPOGEGRAMMENI
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0000, 0x0313, 0x03b7, 0}, 0x1f94 }, // U1F94 # GREEK SMALL LETTER ETA WITH PSILI AND OXIA AND YPOGEGRAMMENI
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0000, 0x0313, 0x03c9, 0}, 0x1fa4 }, // U1FA4 # GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA AND YPOGEGRAMMENI
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0000, 0x0313, 0x03c9, 0}, 0x1fa2 }, // U1FA2 # GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA AND YPOGEGRAMMENI
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0000, 0x0314, 0x0391, 0}, 0x1f8b }, // U1F8B # GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA AND PROSGEGRAMMENI
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0000, 0x0314, 0x0391, 0}, 0x1f8d }, // U1F8D # GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA AND PROSGEGRAMMENI
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0000, 0x0314, 0x0397, 0}, 0x1f9b }, // U1F9B # GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA AND PROSGEGRAMMENI
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0000, 0x0314, 0x0397, 0}, 0x1f9d }, // U1F9D # GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA AND PROSGEGRAMMENI
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0000, 0x0314, 0x03a9, 0}, 0x1fab }, // U1FAB # GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA AND PROSGEGRAMMENI
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0000, 0x0314, 0x03a9, 0}, 0x1fad }, // U1FAD # GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA AND PROSGEGRAMMENI
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0000, 0x0314, 0x03b1, 0}, 0x1f85 }, // U1F85 # GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA AND YPOGEGRAMMENI
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0000, 0x0314, 0x03b1, 0}, 0x1f83 }, // U1F83 # GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA AND YPOGEGRAMMENI
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0000, 0x0314, 0x03b7, 0}, 0x1f95 }, // U1F95 # GREEK SMALL LETTER ETA WITH DASIA AND OXIA AND YPOGEGRAMMENI
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0000, 0x0314, 0x03b7, 0}, 0x1f93 }, // U1F93 # GREEK SMALL LETTER ETA WITH DASIA AND VARIA AND YPOGEGRAMMENI
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0000, 0x0314, 0x03c9, 0}, 0x1fa5 }, // U1FA5 # GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA AND YPOGEGRAMMENI
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0000, 0x0314, 0x03c9, 0}, 0x1fa3 }, // U1FA3 # GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA AND YPOGEGRAMMENI
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0000, 0x03b1, 0, 0}, 0x1fb4 }, // U1FB4 # GREEK SMALL LETTER ALPHA WITH OXIA AND YPOGEGRAMMENI
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0000, 0x03b1, 0, 0}, 0x1fb2 }, // U1FB2 # GREEK SMALL LETTER ALPHA WITH VARIA AND YPOGEGRAMMENI
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0000, 0x03b7, 0, 0}, 0x1fc4 }, // U1FC4 # GREEK SMALL LETTER ETA WITH OXIA AND YPOGEGRAMMENI
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0000, 0x03b7, 0, 0}, 0x1fc2 }, // U1FC2 # GREEK SMALL LETTER ETA WITH VARIA AND YPOGEGRAMMENI
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0000, 0x03c9, 0, 0}, 0x1ff4 }, // U1FF4 # GREEK SMALL LETTER OMEGA WITH OXIA AND YPOGEGRAMMENI
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0000, 0x03c9, 0, 0}, 0x1ff2 }, // U1FF2 # GREEK SMALL LETTER OMEGA WITH VARIA AND YPOGEGRAMMENI
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0000, 0x1f00, 0, 0}, 0x1f84 }, // U1F84 # GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA AND YPOGEGRAMMENI
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0000, 0x1f00, 0, 0}, 0x1f82 }, // U1F82 # GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA AND YPOGEGRAMMENI
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0000, 0x1f01, 0, 0}, 0x1f83 }, // U1F83 # GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA AND YPOGEGRAMMENI
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0000, 0x1f01, 0, 0}, 0x1f85 }, // U1F85 # GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA AND YPOGEGRAMMENI
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0000, 0x1f08, 0, 0}, 0x1f8c }, // U1F8C # GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA AND PROSGEGRAMMENI
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0000, 0x1f08, 0, 0}, 0x1f8a }, // U1F8A # GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA AND PROSGEGRAMMENI
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0000, 0x1f09, 0, 0}, 0x1f8b }, // U1F8B # GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA AND PROSGEGRAMMENI
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0000, 0x1f09, 0, 0}, 0x1f8d }, // U1F8D # GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA AND PROSGEGRAMMENI
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0000, 0x1f20, 0, 0}, 0x1f92 }, // U1F92 # GREEK SMALL LETTER ETA WITH PSILI AND VARIA AND YPOGEGRAMMENI
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0000, 0x1f20, 0, 0}, 0x1f94 }, // U1F94 # GREEK SMALL LETTER ETA WITH PSILI AND OXIA AND YPOGEGRAMMENI
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0000, 0x1f21, 0, 0}, 0x1f93 }, // U1F93 # GREEK SMALL LETTER ETA WITH DASIA AND VARIA AND YPOGEGRAMMENI
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0000, 0x1f21, 0, 0}, 0x1f95 }, // U1F95 # GREEK SMALL LETTER ETA WITH DASIA AND OXIA AND YPOGEGRAMMENI
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0000, 0x1f28, 0, 0}, 0x1f9c }, // U1F9C # GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA AND PROSGEGRAMMENI
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0000, 0x1f28, 0, 0}, 0x1f9a }, // U1F9A # GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA AND PROSGEGRAMMENI
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0000, 0x1f29, 0, 0}, 0x1f9b }, // U1F9B # GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA AND PROSGEGRAMMENI
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0000, 0x1f29, 0, 0}, 0x1f9d }, // U1F9D # GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA AND PROSGEGRAMMENI
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0000, 0x1f60, 0, 0}, 0x1fa2 }, // U1FA2 # GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA AND YPOGEGRAMMENI
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0000, 0x1f60, 0, 0}, 0x1fa4 }, // U1FA4 # GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA AND YPOGEGRAMMENI
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0000, 0x1f61, 0, 0}, 0x1fa5 }, // U1FA5 # GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA AND YPOGEGRAMMENI
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0000, 0x1f61, 0, 0}, 0x1fa3 }, // U1FA3 # GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA AND YPOGEGRAMMENI
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0000, 0x1f68, 0, 0}, 0x1fac }, // U1FAC # GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA AND PROSGEGRAMMENI
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0000, 0x1f68, 0, 0}, 0x1faa }, // U1FAA # GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA AND PROSGEGRAMMENI
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0000, 0x1f69, 0, 0}, 0x1fad }, // U1FAD # GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA AND PROSGEGRAMMENI
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0000, 0x1f69, 0, 0}, 0x1fab }, // U1FAB # GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA AND PROSGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0027, 0x0028, 0x0391, 0}, 0x1f8d }, // U1F8D # GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA AND PROSGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0027, 0x0028, 0x0397, 0}, 0x1f9d }, // U1F9D # GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA AND PROSGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0027, 0x0028, 0x03a9, 0}, 0x1fad }, // U1FAD # GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA AND PROSGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0027, 0x0028, 0x03b1, 0}, 0x1f85 }, // U1F85 # GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0027, 0x0028, 0x03b7, 0}, 0x1f95 }, // U1F95 # GREEK SMALL LETTER ETA WITH DASIA AND OXIA AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0027, 0x0028, 0x03c9, 0}, 0x1fa5 }, // U1FA5 # GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0027, 0x0029, 0x0391, 0}, 0x1f8c }, // U1F8C # GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA AND PROSGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0027, 0x0029, 0x0397, 0}, 0x1f9c }, // U1F9C # GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA AND PROSGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0027, 0x0029, 0x03a9, 0}, 0x1fac }, // U1FAC # GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA AND PROSGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0027, 0x0029, 0x03b1, 0}, 0x1f84 }, // U1F84 # GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0027, 0x0029, 0x03b7, 0}, 0x1f94 }, // U1F94 # GREEK SMALL LETTER ETA WITH PSILI AND OXIA AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0027, 0x0029, 0x03c9, 0}, 0x1fa4 }, // U1FA4 # GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0027, 0x0313, 0x0391, 0}, 0x1f8c }, // U1F8C # GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA AND PROSGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0027, 0x0313, 0x0397, 0}, 0x1f9c }, // U1F9C # GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA AND PROSGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0027, 0x0313, 0x03a9, 0}, 0x1fac }, // U1FAC # GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA AND PROSGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0027, 0x0313, 0x03b1, 0}, 0x1f84 }, // U1F84 # GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0027, 0x0313, 0x03b7, 0}, 0x1f94 }, // U1F94 # GREEK SMALL LETTER ETA WITH PSILI AND OXIA AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0027, 0x0313, 0x03c9, 0}, 0x1fa4 }, // U1FA4 # GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0027, 0x0314, 0x0391, 0}, 0x1f8d }, // U1F8D # GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA AND PROSGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0027, 0x0314, 0x0397, 0}, 0x1f9d }, // U1F9D # GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA AND PROSGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0027, 0x0314, 0x03a9, 0}, 0x1fad }, // U1FAD # GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA AND PROSGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0027, 0x0314, 0x03b1, 0}, 0x1f85 }, // U1F85 # GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0027, 0x0314, 0x03b7, 0}, 0x1f95 }, // U1F95 # GREEK SMALL LETTER ETA WITH DASIA AND OXIA AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0027, 0x0314, 0x03c9, 0}, 0x1fa5 }, // U1FA5 # GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0027, 0x03b1, 0, 0}, 0x1fb4 }, // U1FB4 # GREEK SMALL LETTER ALPHA WITH OXIA AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0027, 0x03b7, 0, 0}, 0x1fc4 }, // U1FC4 # GREEK SMALL LETTER ETA WITH OXIA AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0027, 0x03c9, 0, 0}, 0x1ff4 }, // U1FF4 # GREEK SMALL LETTER OMEGA WITH OXIA AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0027, 0x1f00, 0, 0}, 0x1f84 }, // U1F84 # GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0027, 0x1f01, 0, 0}, 0x1f85 }, // U1F85 # GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0027, 0x1f08, 0, 0}, 0x1f8c }, // U1F8C # GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA AND PROSGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0027, 0x1f09, 0, 0}, 0x1f8d }, // U1F8D # GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA AND PROSGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0027, 0x1f20, 0, 0}, 0x1f94 }, // U1F94 # GREEK SMALL LETTER ETA WITH PSILI AND OXIA AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0027, 0x1f21, 0, 0}, 0x1f95 }, // U1F95 # GREEK SMALL LETTER ETA WITH DASIA AND OXIA AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0027, 0x1f28, 0, 0}, 0x1f9c }, // U1F9C # GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA AND PROSGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0027, 0x1f29, 0, 0}, 0x1f9d }, // U1F9D # GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA AND PROSGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0027, 0x1f60, 0, 0}, 0x1fa4 }, // U1FA4 # GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0027, 0x1f61, 0, 0}, 0x1fa5 }, // U1FA5 # GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0027, 0x1f68, 0, 0}, 0x1fac }, // U1FAC # GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA AND PROSGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0027, 0x1f69, 0, 0}, 0x1fad }, // U1FAD # GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA AND PROSGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0028, 0x0391, 0, 0}, 0x1f89 }, // U1F89 # GREEK CAPITAL LETTER ALPHA WITH DASIA AND PROSGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0028, 0x0397, 0, 0}, 0x1f99 }, // U1F99 # GREEK CAPITAL LETTER ETA WITH DASIA AND PROSGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0028, 0x03a9, 0, 0}, 0x1fa9 }, // U1FA9 # GREEK CAPITAL LETTER OMEGA WITH DASIA AND PROSGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0028, 0x03b1, 0, 0}, 0x1f81 }, // U1F81 # GREEK SMALL LETTER ALPHA WITH DASIA AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0028, 0x03b7, 0, 0}, 0x1f91 }, // U1F91 # GREEK SMALL LETTER ETA WITH DASIA AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0028, 0x03c9, 0, 0}, 0x1fa1 }, // U1FA1 # GREEK SMALL LETTER OMEGA WITH DASIA AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0029, 0x0391, 0, 0}, 0x1f88 }, // U1F88 # GREEK CAPITAL LETTER ALPHA WITH PSILI AND PROSGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0029, 0x0397, 0, 0}, 0x1f98 }, // U1F98 # GREEK CAPITAL LETTER ETA WITH PSILI AND PROSGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0029, 0x03a9, 0, 0}, 0x1fa8 }, // U1FA8 # GREEK CAPITAL LETTER OMEGA WITH PSILI AND PROSGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0029, 0x03b1, 0, 0}, 0x1f80 }, // U1F80 # GREEK SMALL LETTER ALPHA WITH PSILI AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0029, 0x03b7, 0, 0}, 0x1f90 }, // U1F90 # GREEK SMALL LETTER ETA WITH PSILI AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0029, 0x03c9, 0, 0}, 0x1fa0 }, // U1FA0 # GREEK SMALL LETTER OMEGA WITH PSILI AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0060, 0x0028, 0x0391, 0}, 0x1f8b }, // U1F8B # GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA AND PROSGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0060, 0x0028, 0x0397, 0}, 0x1f9b }, // U1F9B # GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA AND PROSGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0060, 0x0028, 0x03a9, 0}, 0x1fab }, // U1FAB # GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA AND PROSGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0060, 0x0028, 0x03b1, 0}, 0x1f83 }, // U1F83 # GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0060, 0x0028, 0x03b7, 0}, 0x1f93 }, // U1F93 # GREEK SMALL LETTER ETA WITH DASIA AND VARIA AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0060, 0x0028, 0x03c9, 0}, 0x1fa3 }, // U1FA3 # GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0060, 0x0029, 0x0391, 0}, 0x1f8a }, // U1F8A # GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA AND PROSGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0060, 0x0029, 0x0397, 0}, 0x1f9a }, // U1F9A # GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA AND PROSGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0060, 0x0029, 0x03a9, 0}, 0x1faa }, // U1FAA # GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA AND PROSGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0060, 0x0029, 0x03b1, 0}, 0x1f82 }, // U1F82 # GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0060, 0x0029, 0x03b7, 0}, 0x1f92 }, // U1F92 # GREEK SMALL LETTER ETA WITH PSILI AND VARIA AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0060, 0x0029, 0x03c9, 0}, 0x1fa2 }, // U1FA2 # GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0060, 0x0313, 0x0391, 0}, 0x1f8a }, // U1F8A # GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA AND PROSGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0060, 0x0313, 0x0397, 0}, 0x1f9a }, // U1F9A # GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA AND PROSGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0060, 0x0313, 0x03a9, 0}, 0x1faa }, // U1FAA # GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA AND PROSGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0060, 0x0313, 0x03b1, 0}, 0x1f82 }, // U1F82 # GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0060, 0x0313, 0x03b7, 0}, 0x1f92 }, // U1F92 # GREEK SMALL LETTER ETA WITH PSILI AND VARIA AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0060, 0x0313, 0x03c9, 0}, 0x1fa2 }, // U1FA2 # GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0060, 0x0314, 0x0391, 0}, 0x1f8b }, // U1F8B # GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA AND PROSGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0060, 0x0314, 0x0397, 0}, 0x1f9b }, // U1F9B # GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA AND PROSGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0060, 0x0314, 0x03a9, 0}, 0x1fab }, // U1FAB # GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA AND PROSGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0060, 0x0314, 0x03b1, 0}, 0x1f83 }, // U1F83 # GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0060, 0x0314, 0x03b7, 0}, 0x1f93 }, // U1F93 # GREEK SMALL LETTER ETA WITH DASIA AND VARIA AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0060, 0x0314, 0x03c9, 0}, 0x1fa3 }, // U1FA3 # GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0060, 0x03b1, 0, 0}, 0x1fb2 }, // U1FB2 # GREEK SMALL LETTER ALPHA WITH VARIA AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0060, 0x03b7, 0, 0}, 0x1fc2 }, // U1FC2 # GREEK SMALL LETTER ETA WITH VARIA AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0060, 0x03c9, 0, 0}, 0x1ff2 }, // U1FF2 # GREEK SMALL LETTER OMEGA WITH VARIA AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0060, 0x1f00, 0, 0}, 0x1f82 }, // U1F82 # GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0060, 0x1f01, 0, 0}, 0x1f83 }, // U1F83 # GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0060, 0x1f08, 0, 0}, 0x1f8a }, // U1F8A # GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA AND PROSGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0060, 0x1f09, 0, 0}, 0x1f8b }, // U1F8B # GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA AND PROSGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0060, 0x1f20, 0, 0}, 0x1f92 }, // U1F92 # GREEK SMALL LETTER ETA WITH PSILI AND VARIA AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0060, 0x1f21, 0, 0}, 0x1f93 }, // U1F93 # GREEK SMALL LETTER ETA WITH DASIA AND VARIA AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0060, 0x1f28, 0, 0}, 0x1f9a }, // U1F9A # GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA AND PROSGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0060, 0x1f29, 0, 0}, 0x1f9b }, // U1F9B # GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA AND PROSGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0060, 0x1f60, 0, 0}, 0x1fa2 }, // U1FA2 # GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0060, 0x1f61, 0, 0}, 0x1fa3 }, // U1FA3 # GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0060, 0x1f68, 0, 0}, 0x1faa }, // U1FAA # GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA AND PROSGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0060, 0x1f69, 0, 0}, 0x1fab }, // U1FAB # GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA AND PROSGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x007e, 0x0028, 0x0391, 0}, 0x1f8f }, // U1F8F # GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x007e, 0x0028, 0x0397, 0}, 0x1f9f }, // U1F9F # GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x007e, 0x0028, 0x03a9, 0}, 0x1faf }, // U1FAF # GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x007e, 0x0028, 0x03b1, 0}, 0x1f87 }, // U1F87 # GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x007e, 0x0028, 0x03b7, 0}, 0x1f97 }, // U1F97 # GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x007e, 0x0028, 0x03c9, 0}, 0x1fa7 }, // U1FA7 # GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x007e, 0x0029, 0x0391, 0}, 0x1f8e }, // U1F8E # GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x007e, 0x0029, 0x0397, 0}, 0x1f9e }, // U1F9E # GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x007e, 0x0029, 0x03a9, 0}, 0x1fae }, // U1FAE # GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x007e, 0x0029, 0x03b1, 0}, 0x1f86 }, // U1F86 # GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x007e, 0x0029, 0x03b7, 0}, 0x1f96 }, // U1F96 # GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x007e, 0x0029, 0x03c9, 0}, 0x1fa6 }, // U1FA6 # GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x007e, 0x0313, 0x0391, 0}, 0x1f8e }, // U1F8E # GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x007e, 0x0313, 0x0397, 0}, 0x1f9e }, // U1F9E # GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x007e, 0x0313, 0x03a9, 0}, 0x1fae }, // U1FAE # GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x007e, 0x0313, 0x03b1, 0}, 0x1f86 }, // U1F86 # GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x007e, 0x0313, 0x03b7, 0}, 0x1f96 }, // U1F96 # GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x007e, 0x0313, 0x03c9, 0}, 0x1fa6 }, // U1FA6 # GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x007e, 0x0314, 0x0391, 0}, 0x1f8f }, // U1F8F # GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x007e, 0x0314, 0x0397, 0}, 0x1f9f }, // U1F9F # GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x007e, 0x0314, 0x03a9, 0}, 0x1faf }, // U1FAF # GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x007e, 0x0314, 0x03b1, 0}, 0x1f87 }, // U1F87 # GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x007e, 0x0314, 0x03b7, 0}, 0x1f97 }, // U1F97 # GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x007e, 0x0314, 0x03c9, 0}, 0x1fa7 }, // U1FA7 # GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x007e, 0x03b1, 0, 0}, 0x1fb7 }, // U1FB7 # GREEK SMALL LETTER ALPHA WITH PERISPOMENI AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x007e, 0x03b7, 0, 0}, 0x1fc7 }, // U1FC7 # GREEK SMALL LETTER ETA WITH PERISPOMENI AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x007e, 0x03c9, 0, 0}, 0x1ff7 }, // U1FF7 # GREEK SMALL LETTER OMEGA WITH PERISPOMENI AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x007e, 0x1f00, 0, 0}, 0x1f86 }, // U1F86 # GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x007e, 0x1f01, 0, 0}, 0x1f87 }, // U1F87 # GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x007e, 0x1f08, 0, 0}, 0x1f8e }, // U1F8E # GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x007e, 0x1f09, 0, 0}, 0x1f8f }, // U1F8F # GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x007e, 0x1f20, 0, 0}, 0x1f96 }, // U1F96 # GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x007e, 0x1f21, 0, 0}, 0x1f97 }, // U1F97 # GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x007e, 0x1f28, 0, 0}, 0x1f9e }, // U1F9E # GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x007e, 0x1f29, 0, 0}, 0x1f9f }, // U1F9F # GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x007e, 0x1f60, 0, 0}, 0x1fa6 }, // U1FA6 # GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x007e, 0x1f61, 0, 0}, 0x1fa7 }, // U1FA7 # GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x007e, 0x1f68, 0, 0}, 0x1fae }, // U1FAE # GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x007e, 0x1f69, 0, 0}, 0x1faf }, // U1FAF # GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x00b4, 0x0028, 0x0391, 0}, 0x1f8d }, // U1F8D # GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA AND PROSGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x00b4, 0x0028, 0x0397, 0}, 0x1f9d }, // U1F9D # GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA AND PROSGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x00b4, 0x0028, 0x03a9, 0}, 0x1fad }, // U1FAD # GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA AND PROSGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x00b4, 0x0028, 0x03b1, 0}, 0x1f85 }, // U1F85 # GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x00b4, 0x0028, 0x03b7, 0}, 0x1f95 }, // U1F95 # GREEK SMALL LETTER ETA WITH DASIA AND OXIA AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x00b4, 0x0028, 0x03c9, 0}, 0x1fa5 }, // U1FA5 # GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x00b4, 0x0029, 0x0391, 0}, 0x1f8c }, // U1F8C # GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA AND PROSGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x00b4, 0x0029, 0x0397, 0}, 0x1f9c }, // U1F9C # GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA AND PROSGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x00b4, 0x0029, 0x03a9, 0}, 0x1fac }, // U1FAC # GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA AND PROSGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x00b4, 0x0029, 0x03b1, 0}, 0x1f84 }, // U1F84 # GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x00b4, 0x0029, 0x03b7, 0}, 0x1f94 }, // U1F94 # GREEK SMALL LETTER ETA WITH PSILI AND OXIA AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x00b4, 0x0029, 0x03c9, 0}, 0x1fa4 }, // U1FA4 # GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x00b4, 0x0313, 0x0391, 0}, 0x1f8c }, // U1F8C # GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA AND PROSGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x00b4, 0x0313, 0x0397, 0}, 0x1f9c }, // U1F9C # GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA AND PROSGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x00b4, 0x0313, 0x03a9, 0}, 0x1fac }, // U1FAC # GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA AND PROSGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x00b4, 0x0313, 0x03b1, 0}, 0x1f84 }, // U1F84 # GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x00b4, 0x0313, 0x03b7, 0}, 0x1f94 }, // U1F94 # GREEK SMALL LETTER ETA WITH PSILI AND OXIA AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x00b4, 0x0313, 0x03c9, 0}, 0x1fa4 }, // U1FA4 # GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x00b4, 0x0314, 0x0391, 0}, 0x1f8d }, // U1F8D # GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA AND PROSGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x00b4, 0x0314, 0x0397, 0}, 0x1f9d }, // U1F9D # GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA AND PROSGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x00b4, 0x0314, 0x03a9, 0}, 0x1fad }, // U1FAD # GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA AND PROSGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x00b4, 0x0314, 0x03b1, 0}, 0x1f85 }, // U1F85 # GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x00b4, 0x0314, 0x03b7, 0}, 0x1f95 }, // U1F95 # GREEK SMALL LETTER ETA WITH DASIA AND OXIA AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x00b4, 0x0314, 0x03c9, 0}, 0x1fa5 }, // U1FA5 # GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x00b4, 0x03b1, 0, 0}, 0x1fb4 }, // U1FB4 # GREEK SMALL LETTER ALPHA WITH OXIA AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x00b4, 0x03b7, 0, 0}, 0x1fc4 }, // U1FC4 # GREEK SMALL LETTER ETA WITH OXIA AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x00b4, 0x03c9, 0, 0}, 0x1ff4 }, // U1FF4 # GREEK SMALL LETTER OMEGA WITH OXIA AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x00b4, 0x1f00, 0, 0}, 0x1f84 }, // U1F84 # GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x00b4, 0x1f01, 0, 0}, 0x1f85 }, // U1F85 # GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x00b4, 0x1f08, 0, 0}, 0x1f8c }, // U1F8C # GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA AND PROSGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x00b4, 0x1f09, 0, 0}, 0x1f8d }, // U1F8D # GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA AND PROSGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x00b4, 0x1f20, 0, 0}, 0x1f94 }, // U1F94 # GREEK SMALL LETTER ETA WITH PSILI AND OXIA AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x00b4, 0x1f21, 0, 0}, 0x1f95 }, // U1F95 # GREEK SMALL LETTER ETA WITH DASIA AND OXIA AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x00b4, 0x1f28, 0, 0}, 0x1f9c }, // U1F9C # GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA AND PROSGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x00b4, 0x1f29, 0, 0}, 0x1f9d }, // U1F9D # GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA AND PROSGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x00b4, 0x1f60, 0, 0}, 0x1fa4 }, // U1FA4 # GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x00b4, 0x1f61, 0, 0}, 0x1fa5 }, // U1FA5 # GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x00b4, 0x1f68, 0, 0}, 0x1fac }, // U1FAC # GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA AND PROSGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x00b4, 0x1f69, 0, 0}, 0x1fad }, // U1FAD # GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA AND PROSGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0313, 0x0391, 0, 0}, 0x1f88 }, // U1F88 # GREEK CAPITAL LETTER ALPHA WITH PSILI AND PROSGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0313, 0x0397, 0, 0}, 0x1f98 }, // U1F98 # GREEK CAPITAL LETTER ETA WITH PSILI AND PROSGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0313, 0x03a9, 0, 0}, 0x1fa8 }, // U1FA8 # GREEK CAPITAL LETTER OMEGA WITH PSILI AND PROSGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0313, 0x03b1, 0, 0}, 0x1f80 }, // U1F80 # GREEK SMALL LETTER ALPHA WITH PSILI AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0313, 0x03b7, 0, 0}, 0x1f90 }, // U1F90 # GREEK SMALL LETTER ETA WITH PSILI AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0313, 0x03c9, 0, 0}, 0x1fa0 }, // U1FA0 # GREEK SMALL LETTER OMEGA WITH PSILI AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0314, 0x0391, 0, 0}, 0x1f89 }, // U1F89 # GREEK CAPITAL LETTER ALPHA WITH DASIA AND PROSGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0314, 0x0397, 0, 0}, 0x1f99 }, // U1F99 # GREEK CAPITAL LETTER ETA WITH DASIA AND PROSGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0314, 0x03a9, 0, 0}, 0x1fa9 }, // U1FA9 # GREEK CAPITAL LETTER OMEGA WITH DASIA AND PROSGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0314, 0x03b1, 0, 0}, 0x1f81 }, // U1F81 # GREEK SMALL LETTER ALPHA WITH DASIA AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0314, 0x03b7, 0, 0}, 0x1f91 }, // U1F91 # GREEK SMALL LETTER ETA WITH DASIA AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0314, 0x03c9, 0, 0}, 0x1fa1 }, // U1FA1 # GREEK SMALL LETTER OMEGA WITH DASIA AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0342, 0x0028, 0x0391, 0}, 0x1f8f }, // U1F8F # GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0342, 0x0028, 0x0397, 0}, 0x1f9f }, // U1F9F # GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0342, 0x0028, 0x03a9, 0}, 0x1faf }, // U1FAF # GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0342, 0x0028, 0x03b1, 0}, 0x1f87 }, // U1F87 # GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0342, 0x0028, 0x03b7, 0}, 0x1f97 }, // U1F97 # GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0342, 0x0028, 0x03c9, 0}, 0x1fa7 }, // U1FA7 # GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0342, 0x0029, 0x0391, 0}, 0x1f8e }, // U1F8E # GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0342, 0x0029, 0x0397, 0}, 0x1f9e }, // U1F9E # GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0342, 0x0029, 0x03a9, 0}, 0x1fae }, // U1FAE # GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0342, 0x0029, 0x03b1, 0}, 0x1f86 }, // U1F86 # GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0342, 0x0029, 0x03b7, 0}, 0x1f96 }, // U1F96 # GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0342, 0x0029, 0x03c9, 0}, 0x1fa6 }, // U1FA6 # GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0342, 0x0313, 0x0391, 0}, 0x1f8e }, // U1F8E # GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0342, 0x0313, 0x0397, 0}, 0x1f9e }, // U1F9E # GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0342, 0x0313, 0x03a9, 0}, 0x1fae }, // U1FAE # GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0342, 0x0313, 0x03b1, 0}, 0x1f86 }, // U1F86 # GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0342, 0x0313, 0x03b7, 0}, 0x1f96 }, // U1F96 # GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0342, 0x0313, 0x03c9, 0}, 0x1fa6 }, // U1FA6 # GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0342, 0x0314, 0x0391, 0}, 0x1f8f }, // U1F8F # GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0342, 0x0314, 0x0397, 0}, 0x1f9f }, // U1F9F # GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0342, 0x0314, 0x03a9, 0}, 0x1faf }, // U1FAF # GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0342, 0x0314, 0x03b1, 0}, 0x1f87 }, // U1F87 # GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0342, 0x0314, 0x03b7, 0}, 0x1f97 }, // U1F97 # GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0342, 0x0314, 0x03c9, 0}, 0x1fa7 }, // U1FA7 # GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0342, 0x03b1, 0, 0}, 0x1fb7 }, // U1FB7 # GREEK SMALL LETTER ALPHA WITH PERISPOMENI AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0342, 0x03b7, 0, 0}, 0x1fc7 }, // U1FC7 # GREEK SMALL LETTER ETA WITH PERISPOMENI AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0342, 0x03c9, 0, 0}, 0x1ff7 }, // U1FF7 # GREEK SMALL LETTER OMEGA WITH PERISPOMENI AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0342, 0x1f00, 0, 0}, 0x1f86 }, // U1F86 # GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0342, 0x1f01, 0, 0}, 0x1f87 }, // U1F87 # GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0342, 0x1f08, 0, 0}, 0x1f8e }, // U1F8E # GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0342, 0x1f09, 0, 0}, 0x1f8f }, // U1F8F # GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0342, 0x1f20, 0, 0}, 0x1f96 }, // U1F96 # GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0342, 0x1f21, 0, 0}, 0x1f97 }, // U1F97 # GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0342, 0x1f28, 0, 0}, 0x1f9e }, // U1F9E # GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0342, 0x1f29, 0, 0}, 0x1f9f }, // U1F9F # GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0342, 0x1f60, 0, 0}, 0x1fa6 }, // U1FA6 # GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0342, 0x1f61, 0, 0}, 0x1fa7 }, // U1FA7 # GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0342, 0x1f68, 0, 0}, 0x1fae }, // U1FAE # GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0342, 0x1f69, 0, 0}, 0x1faf }, // U1FAF # GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0391, 0, 0, 0}, 0x1fbc }, // U1FBC # GREEK CAPITAL LETTER ALPHA WITH PROSGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0397, 0, 0, 0}, 0x1fcc }, // U1FCC # GREEK CAPITAL LETTER ETA WITH PROSGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x03a9, 0, 0, 0}, 0x1ffc }, // U1FFC # GREEK CAPITAL LETTER OMEGA WITH PROSGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x03ac, 0, 0, 0}, 0x1fb4 }, // U1FB4 # GREEK SMALL LETTER ALPHA WITH OXIA AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x03ae, 0, 0, 0}, 0x1fc4 }, // U1FC4 # GREEK SMALL LETTER ETA WITH OXIA AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x03b1, 0, 0, 0}, 0x1fb3 }, // U1FB3 # GREEK SMALL LETTER ALPHA WITH YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x03b7, 0, 0, 0}, 0x1fc3 }, // U1FC3 # GREEK SMALL LETTER ETA WITH YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x03c9, 0, 0, 0}, 0x1ff3 }, // U1FF3 # GREEK SMALL LETTER OMEGA WITH YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x03ce, 0, 0, 0}, 0x1ff4 }, // U1FF4 # GREEK SMALL LETTER OMEGA WITH OXIA AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x1f00, 0, 0, 0}, 0x1f80 }, // U1F80 # GREEK SMALL LETTER ALPHA WITH PSILI AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x1f01, 0, 0, 0}, 0x1f81 }, // U1F81 # GREEK SMALL LETTER ALPHA WITH DASIA AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x1f02, 0, 0, 0}, 0x1f82 }, // U1F82 # GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x1f03, 0, 0, 0}, 0x1f83 }, // U1F83 # GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x1f04, 0, 0, 0}, 0x1f84 }, // U1F84 # GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x1f05, 0, 0, 0}, 0x1f85 }, // U1F85 # GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x1f06, 0, 0, 0}, 0x1f86 }, // U1F86 # GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x1f07, 0, 0, 0}, 0x1f87 }, // U1F87 # GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x1f08, 0, 0, 0}, 0x1f88 }, // U1F88 # GREEK CAPITAL LETTER ALPHA WITH PSILI AND PROSGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x1f09, 0, 0, 0}, 0x1f89 }, // U1F89 # GREEK CAPITAL LETTER ALPHA WITH DASIA AND PROSGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x1f0a, 0, 0, 0}, 0x1f8a }, // U1F8A # GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA AND PROSGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x1f0b, 0, 0, 0}, 0x1f8b }, // U1F8B # GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA AND PROSGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x1f0c, 0, 0, 0}, 0x1f8c }, // U1F8C # GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA AND PROSGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x1f0d, 0, 0, 0}, 0x1f8d }, // U1F8D # GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA AND PROSGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x1f0e, 0, 0, 0}, 0x1f8e }, // U1F8E # GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x1f0f, 0, 0, 0}, 0x1f8f }, // U1F8F # GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x1f20, 0, 0, 0}, 0x1f90 }, // U1F90 # GREEK SMALL LETTER ETA WITH PSILI AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x1f21, 0, 0, 0}, 0x1f91 }, // U1F91 # GREEK SMALL LETTER ETA WITH DASIA AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x1f22, 0, 0, 0}, 0x1f92 }, // U1F92 # GREEK SMALL LETTER ETA WITH PSILI AND VARIA AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x1f23, 0, 0, 0}, 0x1f93 }, // U1F93 # GREEK SMALL LETTER ETA WITH DASIA AND VARIA AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x1f24, 0, 0, 0}, 0x1f94 }, // U1F94 # GREEK SMALL LETTER ETA WITH PSILI AND OXIA AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x1f25, 0, 0, 0}, 0x1f95 }, // U1F95 # GREEK SMALL LETTER ETA WITH DASIA AND OXIA AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x1f26, 0, 0, 0}, 0x1f96 }, // U1F96 # GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x1f27, 0, 0, 0}, 0x1f97 }, // U1F97 # GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x1f28, 0, 0, 0}, 0x1f98 }, // U1F98 # GREEK CAPITAL LETTER ETA WITH PSILI AND PROSGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x1f29, 0, 0, 0}, 0x1f99 }, // U1F99 # GREEK CAPITAL LETTER ETA WITH DASIA AND PROSGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x1f2a, 0, 0, 0}, 0x1f9a }, // U1F9A # GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA AND PROSGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x1f2b, 0, 0, 0}, 0x1f9b }, // U1F9B # GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA AND PROSGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x1f2c, 0, 0, 0}, 0x1f9c }, // U1F9C # GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA AND PROSGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x1f2d, 0, 0, 0}, 0x1f9d }, // U1F9D # GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA AND PROSGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x1f2e, 0, 0, 0}, 0x1f9e }, // U1F9E # GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x1f2f, 0, 0, 0}, 0x1f9f }, // U1F9F # GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x1f60, 0, 0, 0}, 0x1fa0 }, // U1FA0 # GREEK SMALL LETTER OMEGA WITH PSILI AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x1f61, 0, 0, 0}, 0x1fa1 }, // U1FA1 # GREEK SMALL LETTER OMEGA WITH DASIA AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x1f62, 0, 0, 0}, 0x1fa2 }, // U1FA2 # GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x1f63, 0, 0, 0}, 0x1fa3 }, // U1FA3 # GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x1f64, 0, 0, 0}, 0x1fa4 }, // U1FA4 # GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x1f65, 0, 0, 0}, 0x1fa5 }, // U1FA5 # GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x1f66, 0, 0, 0}, 0x1fa6 }, // U1FA6 # GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x1f67, 0, 0, 0}, 0x1fa7 }, // U1FA7 # GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x1f68, 0, 0, 0}, 0x1fa8 }, // U1FA8 # GREEK CAPITAL LETTER OMEGA WITH PSILI AND PROSGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x1f69, 0, 0, 0}, 0x1fa9 }, // U1FA9 # GREEK CAPITAL LETTER OMEGA WITH DASIA AND PROSGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x1f6a, 0, 0, 0}, 0x1faa }, // U1FAA # GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA AND PROSGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x1f6b, 0, 0, 0}, 0x1fab }, // U1FAB # GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA AND PROSGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x1f6c, 0, 0, 0}, 0x1fac }, // U1FAC # GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA AND PROSGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x1f6d, 0, 0, 0}, 0x1fad }, // U1FAD # GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA AND PROSGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x1f6e, 0, 0, 0}, 0x1fae }, // U1FAE # GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x1f6f, 0, 0, 0}, 0x1faf }, // U1FAF # GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x1f70, 0, 0, 0}, 0x1fb2 }, // U1FB2 # GREEK SMALL LETTER ALPHA WITH VARIA AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x1f74, 0, 0, 0}, 0x1fc2 }, // U1FC2 # GREEK SMALL LETTER ETA WITH VARIA AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x1f7c, 0, 0, 0}, 0x1ff2 }, // U1FF2 # GREEK SMALL LETTER OMEGA WITH VARIA AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x1fb6, 0, 0, 0}, 0x1fb7 }, // U1FB7 # GREEK SMALL LETTER ALPHA WITH PERISPOMENI AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x1fc6, 0, 0, 0}, 0x1fc7 }, // U1FC7 # GREEK SMALL LETTER ETA WITH PERISPOMENI AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x1ff6, 0, 0, 0}, 0x1ff7 }, // U1FF7 # GREEK SMALL LETTER OMEGA WITH PERISPOMENI AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Grave), 0x0028, 0x0391, 0}, 0x1f8b }, // U1F8B # GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA AND PROSGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Grave), 0x0028, 0x0397, 0}, 0x1f9b }, // U1F9B # GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA AND PROSGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Grave), 0x0028, 0x03a9, 0}, 0x1fab }, // U1FAB # GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA AND PROSGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Grave), 0x0028, 0x03b1, 0}, 0x1f83 }, // U1F83 # GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Grave), 0x0028, 0x03b7, 0}, 0x1f93 }, // U1F93 # GREEK SMALL LETTER ETA WITH DASIA AND VARIA AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Grave), 0x0028, 0x03c9, 0}, 0x1fa3 }, // U1FA3 # GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Grave), 0x0029, 0x0391, 0}, 0x1f8a }, // U1F8A # GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA AND PROSGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Grave), 0x0029, 0x0397, 0}, 0x1f9a }, // U1F9A # GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA AND PROSGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Grave), 0x0029, 0x03a9, 0}, 0x1faa }, // U1FAA # GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA AND PROSGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Grave), 0x0029, 0x03b1, 0}, 0x1f82 }, // U1F82 # GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Grave), 0x0029, 0x03b7, 0}, 0x1f92 }, // U1F92 # GREEK SMALL LETTER ETA WITH PSILI AND VARIA AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Grave), 0x0029, 0x03c9, 0}, 0x1fa2 }, // U1FA2 # GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Grave), 0x0313, 0x0391, 0}, 0x1f8a }, // U1F8A # GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA AND PROSGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Grave), 0x0313, 0x0397, 0}, 0x1f9a }, // U1F9A # GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA AND PROSGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Grave), 0x0313, 0x03a9, 0}, 0x1faa }, // U1FAA # GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA AND PROSGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Grave), 0x0313, 0x03b1, 0}, 0x1f82 }, // U1F82 # GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Grave), 0x0313, 0x03b7, 0}, 0x1f92 }, // U1F92 # GREEK SMALL LETTER ETA WITH PSILI AND VARIA AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Grave), 0x0313, 0x03c9, 0}, 0x1fa2 }, // U1FA2 # GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Grave), 0x0314, 0x0391, 0}, 0x1f8b }, // U1F8B # GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA AND PROSGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Grave), 0x0314, 0x0397, 0}, 0x1f9b }, // U1F9B # GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA AND PROSGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Grave), 0x0314, 0x03a9, 0}, 0x1fab }, // U1FAB # GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA AND PROSGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Grave), 0x0314, 0x03b1, 0}, 0x1f83 }, // U1F83 # GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Grave), 0x0314, 0x03b7, 0}, 0x1f93 }, // U1F93 # GREEK SMALL LETTER ETA WITH DASIA AND VARIA AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Grave), 0x0314, 0x03c9, 0}, 0x1fa3 }, // U1FA3 # GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Grave), 0x03b1, 0, 0}, 0x1fb2 }, // U1FB2 # GREEK SMALL LETTER ALPHA WITH VARIA AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Grave), 0x03b7, 0, 0}, 0x1fc2 }, // U1FC2 # GREEK SMALL LETTER ETA WITH VARIA AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Grave), 0x03c9, 0, 0}, 0x1ff2 }, // U1FF2 # GREEK SMALL LETTER OMEGA WITH VARIA AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Grave), 0x1f00, 0, 0}, 0x1f82 }, // U1F82 # GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Grave), 0x1f01, 0, 0}, 0x1f83 }, // U1F83 # GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Grave), 0x1f08, 0, 0}, 0x1f8a }, // U1F8A # GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA AND PROSGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Grave), 0x1f09, 0, 0}, 0x1f8b }, // U1F8B # GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA AND PROSGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Grave), 0x1f20, 0, 0}, 0x1f92 }, // U1F92 # GREEK SMALL LETTER ETA WITH PSILI AND VARIA AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Grave), 0x1f21, 0, 0}, 0x1f93 }, // U1F93 # GREEK SMALL LETTER ETA WITH DASIA AND VARIA AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Grave), 0x1f28, 0, 0}, 0x1f9a }, // U1F9A # GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA AND PROSGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Grave), 0x1f29, 0, 0}, 0x1f9b }, // U1F9B # GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA AND PROSGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Grave), 0x1f60, 0, 0}, 0x1fa2 }, // U1FA2 # GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Grave), 0x1f61, 0, 0}, 0x1fa3 }, // U1FA3 # GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Grave), 0x1f68, 0, 0}, 0x1faa }, // U1FAA # GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA AND PROSGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Grave), 0x1f69, 0, 0}, 0x1fab }, // U1FAB # GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA AND PROSGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Acute), 0x0028, 0x0391, 0}, 0x1f8d }, // U1F8D # GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA AND PROSGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Acute), 0x0028, 0x0397, 0}, 0x1f9d }, // U1F9D # GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA AND PROSGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Acute), 0x0028, 0x03a9, 0}, 0x1fad }, // U1FAD # GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA AND PROSGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Acute), 0x0028, 0x03b1, 0}, 0x1f85 }, // U1F85 # GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Acute), 0x0028, 0x03b7, 0}, 0x1f95 }, // U1F95 # GREEK SMALL LETTER ETA WITH DASIA AND OXIA AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Acute), 0x0028, 0x03c9, 0}, 0x1fa5 }, // U1FA5 # GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Acute), 0x0029, 0x0391, 0}, 0x1f8c }, // U1F8C # GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA AND PROSGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Acute), 0x0029, 0x0397, 0}, 0x1f9c }, // U1F9C # GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA AND PROSGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Acute), 0x0029, 0x03a9, 0}, 0x1fac }, // U1FAC # GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA AND PROSGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Acute), 0x0029, 0x03b1, 0}, 0x1f84 }, // U1F84 # GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Acute), 0x0029, 0x03b7, 0}, 0x1f94 }, // U1F94 # GREEK SMALL LETTER ETA WITH PSILI AND OXIA AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Acute), 0x0029, 0x03c9, 0}, 0x1fa4 }, // U1FA4 # GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Acute), 0x0313, 0x0391, 0}, 0x1f8c }, // U1F8C # GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA AND PROSGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Acute), 0x0313, 0x0397, 0}, 0x1f9c }, // U1F9C # GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA AND PROSGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Acute), 0x0313, 0x03a9, 0}, 0x1fac }, // U1FAC # GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA AND PROSGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Acute), 0x0313, 0x03b1, 0}, 0x1f84 }, // U1F84 # GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Acute), 0x0313, 0x03b7, 0}, 0x1f94 }, // U1F94 # GREEK SMALL LETTER ETA WITH PSILI AND OXIA AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Acute), 0x0313, 0x03c9, 0}, 0x1fa4 }, // U1FA4 # GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Acute), 0x0314, 0x0391, 0}, 0x1f8d }, // U1F8D # GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA AND PROSGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Acute), 0x0314, 0x0397, 0}, 0x1f9d }, // U1F9D # GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA AND PROSGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Acute), 0x0314, 0x03a9, 0}, 0x1fad }, // U1FAD # GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA AND PROSGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Acute), 0x0314, 0x03b1, 0}, 0x1f85 }, // U1F85 # GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Acute), 0x0314, 0x03b7, 0}, 0x1f95 }, // U1F95 # GREEK SMALL LETTER ETA WITH DASIA AND OXIA AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Acute), 0x0314, 0x03c9, 0}, 0x1fa5 }, // U1FA5 # GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Acute), 0x03b1, 0, 0}, 0x1fb4 }, // U1FB4 # GREEK SMALL LETTER ALPHA WITH OXIA AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Acute), 0x03b7, 0, 0}, 0x1fc4 }, // U1FC4 # GREEK SMALL LETTER ETA WITH OXIA AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Acute), 0x03c9, 0, 0}, 0x1ff4 }, // U1FF4 # GREEK SMALL LETTER OMEGA WITH OXIA AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Acute), 0x1f00, 0, 0}, 0x1f84 }, // U1F84 # GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Acute), 0x1f01, 0, 0}, 0x1f85 }, // U1F85 # GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Acute), 0x1f08, 0, 0}, 0x1f8c }, // U1F8C # GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA AND PROSGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Acute), 0x1f09, 0, 0}, 0x1f8d }, // U1F8D # GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA AND PROSGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Acute), 0x1f20, 0, 0}, 0x1f94 }, // U1F94 # GREEK SMALL LETTER ETA WITH PSILI AND OXIA AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Acute), 0x1f21, 0, 0}, 0x1f95 }, // U1F95 # GREEK SMALL LETTER ETA WITH DASIA AND OXIA AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Acute), 0x1f28, 0, 0}, 0x1f9c }, // U1F9C # GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA AND PROSGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Acute), 0x1f29, 0, 0}, 0x1f9d }, // U1F9D # GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA AND PROSGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Acute), 0x1f60, 0, 0}, 0x1fa4 }, // U1FA4 # GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Acute), 0x1f61, 0, 0}, 0x1fa5 }, // U1FA5 # GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Acute), 0x1f68, 0, 0}, 0x1fac }, // U1FAC # GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA AND PROSGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Acute), 0x1f69, 0, 0}, 0x1fad }, // U1FAD # GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA AND PROSGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Tilde), 0x0028, 0x0391, 0}, 0x1f8f }, // U1F8F # GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Tilde), 0x0028, 0x0397, 0}, 0x1f9f }, // U1F9F # GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Tilde), 0x0028, 0x03a9, 0}, 0x1faf }, // U1FAF # GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Tilde), 0x0028, 0x03b1, 0}, 0x1f87 }, // U1F87 # GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Tilde), 0x0028, 0x03b7, 0}, 0x1f97 }, // U1F97 # GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Tilde), 0x0028, 0x03c9, 0}, 0x1fa7 }, // U1FA7 # GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Tilde), 0x0029, 0x0391, 0}, 0x1f8e }, // U1F8E # GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Tilde), 0x0029, 0x0397, 0}, 0x1f9e }, // U1F9E # GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Tilde), 0x0029, 0x03a9, 0}, 0x1fae }, // U1FAE # GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Tilde), 0x0029, 0x03b1, 0}, 0x1f86 }, // U1F86 # GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Tilde), 0x0029, 0x03b7, 0}, 0x1f96 }, // U1F96 # GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Tilde), 0x0029, 0x03c9, 0}, 0x1fa6 }, // U1FA6 # GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Tilde), 0x0313, 0x0391, 0}, 0x1f8e }, // U1F8E # GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Tilde), 0x0313, 0x0397, 0}, 0x1f9e }, // U1F9E # GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Tilde), 0x0313, 0x03a9, 0}, 0x1fae }, // U1FAE # GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Tilde), 0x0313, 0x03b1, 0}, 0x1f86 }, // U1F86 # GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Tilde), 0x0313, 0x03b7, 0}, 0x1f96 }, // U1F96 # GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Tilde), 0x0313, 0x03c9, 0}, 0x1fa6 }, // U1FA6 # GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Tilde), 0x0314, 0x0391, 0}, 0x1f8f }, // U1F8F # GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Tilde), 0x0314, 0x0397, 0}, 0x1f9f }, // U1F9F # GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Tilde), 0x0314, 0x03a9, 0}, 0x1faf }, // U1FAF # GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Tilde), 0x0314, 0x03b1, 0}, 0x1f87 }, // U1F87 # GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Tilde), 0x0314, 0x03b7, 0}, 0x1f97 }, // U1F97 # GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Tilde), 0x0314, 0x03c9, 0}, 0x1fa7 }, // U1FA7 # GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Tilde), 0x03b1, 0, 0}, 0x1fb7 }, // U1FB7 # GREEK SMALL LETTER ALPHA WITH PERISPOMENI AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Tilde), 0x03b7, 0, 0}, 0x1fc7 }, // U1FC7 # GREEK SMALL LETTER ETA WITH PERISPOMENI AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Tilde), 0x03c9, 0, 0}, 0x1ff7 }, // U1FF7 # GREEK SMALL LETTER OMEGA WITH PERISPOMENI AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Tilde), 0x1f00, 0, 0}, 0x1f86 }, // U1F86 # GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Tilde), 0x1f01, 0, 0}, 0x1f87 }, // U1F87 # GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Tilde), 0x1f08, 0, 0}, 0x1f8e }, // U1F8E # GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Tilde), 0x1f09, 0, 0}, 0x1f8f }, // U1F8F # GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Tilde), 0x1f20, 0, 0}, 0x1f96 }, // U1F96 # GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Tilde), 0x1f21, 0, 0}, 0x1f97 }, // U1F97 # GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Tilde), 0x1f28, 0, 0}, 0x1f9e }, // U1F9E # GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Tilde), 0x1f29, 0, 0}, 0x1f9f }, // U1F9F # GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Tilde), 0x1f60, 0, 0}, 0x1fa6 }, // U1FA6 # GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Tilde), 0x1f61, 0, 0}, 0x1fa7 }, // U1FA7 # GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Tilde), 0x1f68, 0, 0}, 0x1fae }, // U1FAE # GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Tilde), 0x1f69, 0, 0}, 0x1faf }, // U1FAF # GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x05b4, 0x05d9, 0, 0, 0}, 0xfb1d }, // UFB1D # HEBREW LETTER YOD WITH HIRIQ
++ { {UNITIZE(Qt::Key_Multi_key), 0x05b7, 0x05d0, 0, 0, 0}, 0xfb2e }, // UFB2E # HEBREW LETTER ALEF WITH PATAH
++ { {UNITIZE(Qt::Key_Multi_key), 0x05b7, 0x05f2, 0, 0, 0}, 0xfb1f }, // UFB1F # HEBREW LIGATURE YIDDISH YOD YOD PATAH
++ { {UNITIZE(Qt::Key_Multi_key), 0x05b8, 0x05d0, 0, 0, 0}, 0xfb2f }, // UFB2F # HEBREW LETTER ALEF WITH QAMATS
++ { {UNITIZE(Qt::Key_Multi_key), 0x05b9, 0x05d5, 0, 0, 0}, 0xfb4b }, // UFB4B # HEBREW LETTER VAV WITH HOLAM
++ { {UNITIZE(Qt::Key_Multi_key), 0x05bc, 0x05d0, 0, 0, 0}, 0xfb30 }, // UFB30 # HEBREW LETTER ALEF WITH MAPIQ
++ { {UNITIZE(Qt::Key_Multi_key), 0x05bc, 0x05d1, 0, 0, 0}, 0xfb31 }, // UFB31 # HEBREW LETTER BET WITH DAGESH
++ { {UNITIZE(Qt::Key_Multi_key), 0x05bc, 0x05d1, 0, 0, 0}, 0xfb31 }, // UFB31 # HEBREW LETTER BET WITH DAGESH
++ { {UNITIZE(Qt::Key_Multi_key), 0x05bc, 0x05d2, 0, 0, 0}, 0xfb32 }, // UFB32 # HEBREW LETTER GIMEL WITH DAGESH
++ { {UNITIZE(Qt::Key_Multi_key), 0x05bc, 0x05d2, 0, 0, 0}, 0xfb32 }, // UFB32 # HEBREW LETTER GIMEL WITH DAGESH
++ { {UNITIZE(Qt::Key_Multi_key), 0x05bc, 0x05d3, 0, 0, 0}, 0xfb33 }, // UFB33 # HEBREW LETTER DALET WITH DAGESH
++ { {UNITIZE(Qt::Key_Multi_key), 0x05bc, 0x05d3, 0, 0, 0}, 0xfb33 }, // UFB33 # HEBREW LETTER DALET WITH DAGESH
++ { {UNITIZE(Qt::Key_Multi_key), 0x05bc, 0x05d4, 0, 0, 0}, 0xfb34 }, // UFB34 # HEBREW LETTER HE WITH MAPIQ
++ { {UNITIZE(Qt::Key_Multi_key), 0x05bc, 0x05d5, 0, 0, 0}, 0xfb35 }, // UFB35 # HEBREW LETTER VAV WITH DAGESH
++ { {UNITIZE(Qt::Key_Multi_key), 0x05bc, 0x05d6, 0, 0, 0}, 0xfb36 }, // UFB36 # HEBREW LETTER ZAYIN WITH DAGESH
++ { {UNITIZE(Qt::Key_Multi_key), 0x05bc, 0x05d6, 0, 0, 0}, 0xfb36 }, // UFB36 # HEBREW LETTER ZAYIN WITH DAGESH
++ { {UNITIZE(Qt::Key_Multi_key), 0x05bc, 0x05d8, 0, 0, 0}, 0xfb38 }, // UFB38 # HEBREW LETTER TET WITH DAGESH
++ { {UNITIZE(Qt::Key_Multi_key), 0x05bc, 0x05d8, 0, 0, 0}, 0xfb38 }, // UFB38 # HEBREW LETTER TET WITH DAGESH
++ { {UNITIZE(Qt::Key_Multi_key), 0x05bc, 0x05d9, 0, 0, 0}, 0xfb39 }, // UFB39 # HEBREW LETTER YOD WITH DAGESH
++ { {UNITIZE(Qt::Key_Multi_key), 0x05bc, 0x05da, 0, 0, 0}, 0xfb3a }, // UFB3A # HEBREW LETTER FINAL KAF WITH DAGESH
++ { {UNITIZE(Qt::Key_Multi_key), 0x05bc, 0x05db, 0, 0, 0}, 0xfb3b }, // UFB3B # HEBREW LETTER KAF WITH DAGESH
++ { {UNITIZE(Qt::Key_Multi_key), 0x05bc, 0x05dc, 0, 0, 0}, 0xfb3c }, // UFB3C # HEBREW LETTER LAMED WITH DAGESH
++ { {UNITIZE(Qt::Key_Multi_key), 0x05bc, 0x05de, 0, 0, 0}, 0xfb3e }, // UFB3E # HEBREW LETTER MEM WITH DAGESH
++ { {UNITIZE(Qt::Key_Multi_key), 0x05bc, 0x05e0, 0, 0, 0}, 0xfb40 }, // UFB40 # HEBREW LETTER NUN WITH DAGESH
++ { {UNITIZE(Qt::Key_Multi_key), 0x05bc, 0x05e1, 0, 0, 0}, 0xfb41 }, // UFB41 # HEBREW LETTER SAMEKH WITH DAGESH
++ { {UNITIZE(Qt::Key_Multi_key), 0x05bc, 0x05e1, 0, 0, 0}, 0xfb41 }, // UFB41 # HEBREW LETTER SAMEKH WITH DAGESH
++ { {UNITIZE(Qt::Key_Multi_key), 0x05bc, 0x05e3, 0, 0, 0}, 0xfb43 }, // UFB43 # HEBREW LETTER FINAL PE WITH DAGESH
++ { {UNITIZE(Qt::Key_Multi_key), 0x05bc, 0x05e4, 0, 0, 0}, 0xfb44 }, // UFB44 # HEBREW LETTER PE WITH DAGESH
++ { {UNITIZE(Qt::Key_Multi_key), 0x05bc, 0x05e6, 0, 0, 0}, 0xfb46 }, // UFB46 # HEBREW LETTER TSADI WITH DAGESH
++ { {UNITIZE(Qt::Key_Multi_key), 0x05bc, 0x05e6, 0, 0, 0}, 0xfb46 }, // UFB46 # HEBREW LETTER TSADI WITH DAGESH
++ { {UNITIZE(Qt::Key_Multi_key), 0x05bc, 0x05e7, 0, 0, 0}, 0xfb47 }, // UFB47 # HEBREW LETTER QOF WITH DAGESH
++ { {UNITIZE(Qt::Key_Multi_key), 0x05bc, 0x05e7, 0, 0, 0}, 0xfb47 }, // UFB47 # HEBREW LETTER QOF WITH DAGESH
++ { {UNITIZE(Qt::Key_Multi_key), 0x05bc, 0x05e8, 0, 0, 0}, 0xfb48 }, // UFB48 # HEBREW LETTER RESH WITH DAGESH
++ { {UNITIZE(Qt::Key_Multi_key), 0x05bc, 0x05e9, 0, 0, 0}, 0xfb49 }, // UFB49 # HEBREW LETTER SHIN WITH DAGESH
++ { {UNITIZE(Qt::Key_Multi_key), 0x05bc, 0x05ea, 0, 0, 0}, 0xfb4a }, // UFB4A # HEBREW LETTER TAV WITH DAGESH
++ { {UNITIZE(Qt::Key_Multi_key), 0x05bc, 0x05ea, 0, 0, 0}, 0xfb4a }, // UFB4A # HEBREW LETTER TAV WITH DAGESH
++ { {UNITIZE(Qt::Key_Multi_key), 0x05bf, 0x05d1, 0, 0, 0}, 0xfb4c }, // UFB4C # HEBREW LETTER BET WITH RAFE
++ { {UNITIZE(Qt::Key_Multi_key), 0x05bf, 0x05d1, 0, 0, 0}, 0xfb4c }, // UFB4C # HEBREW LETTER BET WITH RAFE
++ { {UNITIZE(Qt::Key_Multi_key), 0x05bf, 0x05db, 0, 0, 0}, 0xfb4d }, // UFB4D # HEBREW LETTER KAF WITH RAFE
++ { {UNITIZE(Qt::Key_Multi_key), 0x05bf, 0x05e4, 0, 0, 0}, 0xfb4e }, // UFB4E # HEBREW LETTER PE WITH RAFE
++ { {UNITIZE(Qt::Key_Multi_key), 0x05c1, 0x05bc, 0x05e9, 0, 0}, 0xfb2c }, // UFB2C # HEBREW LETTER SHIN WITH DAGESH AND SHIN DOT
++ { {UNITIZE(Qt::Key_Multi_key), 0x05c1, 0x05e9, 0, 0, 0}, 0xfb2a }, // UFB2A # HEBREW LETTER SHIN WITH SHIN DOT
++ { {UNITIZE(Qt::Key_Multi_key), 0x05c1, 0xfb49, 0, 0, 0}, 0xfb2c }, // UFB2C # HEBREW LETTER SHIN WITH DAGESH AND SHIN DOT
++ { {UNITIZE(Qt::Key_Multi_key), 0x05c2, 0x05bc, 0x05e9, 0, 0}, 0xfb2d }, // UFB2D # HEBREW LETTER SHIN WITH DAGESH AND SIN DOT
++ { {UNITIZE(Qt::Key_Multi_key), 0x05c2, 0x05e9, 0, 0, 0}, 0xfb2b }, // UFB2B # HEBREW LETTER SHIN WITH SIN DOT
++ { {UNITIZE(Qt::Key_Multi_key), 0x05c2, 0xfb49, 0, 0, 0}, 0xfb2d }, // UFB2D # HEBREW LETTER SHIN WITH DAGESH AND SIN DOT
++ { {UNITIZE(Qt::Key_Multi_key), 0x0653, 0x0627, 0, 0, 0}, 0x0622 }, // U0622 # ARABIC LETTER ALEF WITH MADDA ABOVE
++ { {UNITIZE(Qt::Key_Multi_key), 0x0654, 0x0627, 0, 0, 0}, 0x0623 }, // U0623 # ARABIC LETTER ALEF WITH HAMZA ABOVE
++ { {UNITIZE(Qt::Key_Multi_key), 0x0654, 0x0648, 0, 0, 0}, 0x0624 }, // U0624 # ARABIC LETTER WAW WITH HAMZA ABOVE
++ { {UNITIZE(Qt::Key_Multi_key), 0x0654, 0x064a, 0, 0, 0}, 0x0626 }, // U0626 # ARABIC LETTER YEH WITH HAMZA ABOVE
++ { {UNITIZE(Qt::Key_Multi_key), 0x0654, 0x06c1, 0, 0, 0}, 0x06c2 }, // U06C2 # ARABIC LETTER HEH GOAL WITH HAMZA ABOVE
++ { {UNITIZE(Qt::Key_Multi_key), 0x0654, 0x06d2, 0, 0, 0}, 0x06d3 }, // U06D3 # ARABIC LETTER YEH BARREE WITH HAMZA ABOVE
++ { {UNITIZE(Qt::Key_Multi_key), 0x0654, 0x06d5, 0, 0, 0}, 0x06c0 }, // U06C0 # ARABIC LETTER HEH WITH YEH ABOVE
++ { {UNITIZE(Qt::Key_Multi_key), 0x0655, 0x0627, 0, 0, 0}, 0x0625 }, // U0625 # ARABIC LETTER ALEF WITH HAMZA BELOW
++ { {UNITIZE(Qt::Key_Multi_key), 0x093c, 0x0915, 0, 0, 0}, 0x0958 }, // U0958 # DEVANAGARI LETTER QA
++ { {UNITIZE(Qt::Key_Multi_key), 0x093c, 0x0916, 0, 0, 0}, 0x0959 }, // U0959 # DEVANAGARI LETTER KHHA
++ { {UNITIZE(Qt::Key_Multi_key), 0x093c, 0x0917, 0, 0, 0}, 0x095a }, // U095A # DEVANAGARI LETTER GHHA
++ { {UNITIZE(Qt::Key_Multi_key), 0x093c, 0x091c, 0, 0, 0}, 0x095b }, // U095B # DEVANAGARI LETTER ZA
++ { {UNITIZE(Qt::Key_Multi_key), 0x093c, 0x0921, 0, 0, 0}, 0x095c }, // U095C # DEVANAGARI LETTER DDDHA
++ { {UNITIZE(Qt::Key_Multi_key), 0x093c, 0x0922, 0, 0, 0}, 0x095d }, // U095D # DEVANAGARI LETTER RHA
++ { {UNITIZE(Qt::Key_Multi_key), 0x093c, 0x0928, 0, 0, 0}, 0x0929 }, // U0929 # DEVANAGARI LETTER NNNA
++ { {UNITIZE(Qt::Key_Multi_key), 0x093c, 0x092b, 0, 0, 0}, 0x095e }, // U095E # DEVANAGARI LETTER FA
++ { {UNITIZE(Qt::Key_Multi_key), 0x093c, 0x092f, 0, 0, 0}, 0x095f }, // U095F # DEVANAGARI LETTER YYA
++ { {UNITIZE(Qt::Key_Multi_key), 0x093c, 0x0930, 0, 0, 0}, 0x0931 }, // U0931 # DEVANAGARI LETTER RRA
++ { {UNITIZE(Qt::Key_Multi_key), 0x093c, 0x0933, 0, 0, 0}, 0x0934 }, // U0934 # DEVANAGARI LETTER LLLA
++ { {UNITIZE(Qt::Key_Multi_key), 0x09bc, 0x09a1, 0, 0, 0}, 0x09dc }, // U09DC # BENGALI LETTER RRA
++ { {UNITIZE(Qt::Key_Multi_key), 0x09bc, 0x09a2, 0, 0, 0}, 0x09dd }, // U09DD # BENGALI LETTER RHA
++ { {UNITIZE(Qt::Key_Multi_key), 0x09bc, 0x09af, 0, 0, 0}, 0x09df }, // U09DF # BENGALI LETTER YYA
++ { {UNITIZE(Qt::Key_Multi_key), 0x09c7, 0x09be, 0, 0, 0}, 0x09cb }, // U09CB # BENGALI VOWEL SIGN O
++ { {UNITIZE(Qt::Key_Multi_key), 0x09c7, 0x09d7, 0, 0, 0}, 0x09cc }, // U09CC # BENGALI VOWEL SIGN AU
++ { {UNITIZE(Qt::Key_Multi_key), 0x0a3c, 0x0a16, 0, 0, 0}, 0x0a59 }, // U0A59 # GURMUKHI LETTER KHHA
++ { {UNITIZE(Qt::Key_Multi_key), 0x0a3c, 0x0a17, 0, 0, 0}, 0x0a5a }, // U0A5A # GURMUKHI LETTER GHHA
++ { {UNITIZE(Qt::Key_Multi_key), 0x0a3c, 0x0a1c, 0, 0, 0}, 0x0a5b }, // U0A5B # GURMUKHI LETTER ZA
++ { {UNITIZE(Qt::Key_Multi_key), 0x0a3c, 0x0a2b, 0, 0, 0}, 0x0a5e }, // U0A5E # GURMUKHI LETTER FA
++ { {UNITIZE(Qt::Key_Multi_key), 0x0a3c, 0x0a32, 0, 0, 0}, 0x0a33 }, // U0A33 # GURMUKHI LETTER LLA
++ { {UNITIZE(Qt::Key_Multi_key), 0x0a3c, 0x0a38, 0, 0, 0}, 0x0a36 }, // U0A36 # GURMUKHI LETTER SHA
++ { {UNITIZE(Qt::Key_Multi_key), 0x0b3c, 0x0b21, 0, 0, 0}, 0x0b5c }, // U0B5C # ORIYA LETTER RRA
++ { {UNITIZE(Qt::Key_Multi_key), 0x0b3c, 0x0b22, 0, 0, 0}, 0x0b5d }, // U0B5D # ORIYA LETTER RHA
++ { {UNITIZE(Qt::Key_Multi_key), 0x0b47, 0x0b3e, 0, 0, 0}, 0x0b4b }, // U0B4B # ORIYA VOWEL SIGN O
++ { {UNITIZE(Qt::Key_Multi_key), 0x0b47, 0x0b56, 0, 0, 0}, 0x0b48 }, // U0B48 # ORIYA VOWEL SIGN AI
++ { {UNITIZE(Qt::Key_Multi_key), 0x0b47, 0x0b57, 0, 0, 0}, 0x0b4c }, // U0B4C # ORIYA VOWEL SIGN AU
++ { {UNITIZE(Qt::Key_Multi_key), 0x0bc6, 0x0bbe, 0, 0, 0}, 0x0bca }, // U0BCA # TAMIL VOWEL SIGN O
++ { {UNITIZE(Qt::Key_Multi_key), 0x0bc6, 0x0bd7, 0, 0, 0}, 0x0bcc }, // U0BCC # TAMIL VOWEL SIGN AU
++ { {UNITIZE(Qt::Key_Multi_key), 0x0bc7, 0x0bbe, 0, 0, 0}, 0x0bcb }, // U0BCB # TAMIL VOWEL SIGN OO
++ { {UNITIZE(Qt::Key_Multi_key), 0x0bd7, 0x0b92, 0, 0, 0}, 0x0b94 }, // U0B94 # TAMIL LETTER AU
++ { {UNITIZE(Qt::Key_Multi_key), 0x0c46, 0x0c56, 0, 0, 0}, 0x0c48 }, // U0C48 # TELUGU VOWEL SIGN AI
++ { {UNITIZE(Qt::Key_Multi_key), 0x0cbf, 0x0cd5, 0, 0, 0}, 0x0cc0 }, // U0CC0 # KANNADA VOWEL SIGN II
++ { {UNITIZE(Qt::Key_Multi_key), 0x0cc6, 0x0cc2, 0, 0, 0}, 0x0cca }, // U0CCA # KANNADA VOWEL SIGN O
++ { {UNITIZE(Qt::Key_Multi_key), 0x0cc6, 0x0cc2, 0x0cd5, 0, 0}, 0x0ccb }, // U0CCB # KANNADA VOWEL SIGN OO
++ { {UNITIZE(Qt::Key_Multi_key), 0x0cc6, 0x0cd5, 0, 0, 0}, 0x0cc7 }, // U0CC7 # KANNADA VOWEL SIGN EE
++ { {UNITIZE(Qt::Key_Multi_key), 0x0cc6, 0x0cd6, 0, 0, 0}, 0x0cc8 }, // U0CC8 # KANNADA VOWEL SIGN AI
++ { {UNITIZE(Qt::Key_Multi_key), 0x0cca, 0x0cd5, 0, 0, 0}, 0x0ccb }, // U0CCB # KANNADA VOWEL SIGN OO
++ { {UNITIZE(Qt::Key_Multi_key), 0x0d46, 0x0d3e, 0, 0, 0}, 0x0d4a }, // U0D4A # MALAYALAM VOWEL SIGN O
++ { {UNITIZE(Qt::Key_Multi_key), 0x0d46, 0x0d57, 0, 0, 0}, 0x0d4c }, // U0D4C # MALAYALAM VOWEL SIGN AU
++ { {UNITIZE(Qt::Key_Multi_key), 0x0d47, 0x0d3e, 0, 0, 0}, 0x0d4b }, // U0D4B # MALAYALAM VOWEL SIGN OO
++ { {UNITIZE(Qt::Key_Multi_key), 0x0dd9, 0x0dca, 0, 0, 0}, 0x0dda }, // U0DDA # SINHALA VOWEL SIGN DIGA KOMBUVA
++ { {UNITIZE(Qt::Key_Multi_key), 0x0dd9, 0x0dcf, 0, 0, 0}, 0x0ddc }, // U0DDC # SINHALA VOWEL SIGN KOMBUVA HAA AELA-PILLA
++ { {UNITIZE(Qt::Key_Multi_key), 0x0dd9, 0x0dcf, 0x0dca, 0, 0}, 0x0ddd }, // U0DDD # SINHALA VOWEL SIGN KOMBUVA HAA DIGA AELA-PILLA
++ { {UNITIZE(Qt::Key_Multi_key), 0x0dd9, 0x0ddf, 0, 0, 0}, 0x0dde }, // U0DDE # SINHALA VOWEL SIGN KOMBUVA HAA GAYANUKITTA
++ { {UNITIZE(Qt::Key_Multi_key), 0x0ddc, 0x0dca, 0, 0, 0}, 0x0ddd }, // U0DDD # SINHALA VOWEL SIGN KOMBUVA HAA DIGA AELA-PILLA
++ { {UNITIZE(Qt::Key_Multi_key), 0x0f71, 0x0f72, 0, 0, 0}, 0x0f73 }, // U0F73 # TIBETAN VOWEL SIGN II
++ { {UNITIZE(Qt::Key_Multi_key), 0x0f71, 0x0f74, 0, 0, 0}, 0x0f75 }, // U0F75 # TIBETAN VOWEL SIGN UU
++ { {UNITIZE(Qt::Key_Multi_key), 0x0f71, 0x0f80, 0, 0, 0}, 0x0f81 }, // U0F81 # TIBETAN VOWEL SIGN REVERSED II
++ { {UNITIZE(Qt::Key_Multi_key), 0x0f90, 0x0fb5, 0, 0, 0}, 0x0fb9 }, // U0FB9 # TIBETAN SUBJOINED LETTER KSSA
++ { {UNITIZE(Qt::Key_Multi_key), 0x0f92, 0x0fb7, 0, 0, 0}, 0x0f93 }, // U0F93 # TIBETAN SUBJOINED LETTER GHA
++ { {UNITIZE(Qt::Key_Multi_key), 0x0f9c, 0x0fb7, 0, 0, 0}, 0x0f9d }, // U0F9D # TIBETAN SUBJOINED LETTER DDHA
++ { {UNITIZE(Qt::Key_Multi_key), 0x0fa1, 0x0fb7, 0, 0, 0}, 0x0fa2 }, // U0FA2 # TIBETAN SUBJOINED LETTER DHA
++ { {UNITIZE(Qt::Key_Multi_key), 0x0fa6, 0x0fb7, 0, 0, 0}, 0x0fa7 }, // U0FA7 # TIBETAN SUBJOINED LETTER BHA
++ { {UNITIZE(Qt::Key_Multi_key), 0x0fab, 0x0fb7, 0, 0, 0}, 0x0fac }, // U0FAC # TIBETAN SUBJOINED LETTER DZHA
++ { {UNITIZE(Qt::Key_Multi_key), 0x0fb2, 0x0f80, 0, 0, 0}, 0x0f76 }, // U0F76 # TIBETAN VOWEL SIGN VOCALIC R
++ { {UNITIZE(Qt::Key_Multi_key), 0x0fb3, 0x0f80, 0, 0, 0}, 0x0f78 }, // U0F78 # TIBETAN VOWEL SIGN VOCALIC L
++ { {UNITIZE(Qt::Key_Multi_key), 0x0fb5, 0x0f40, 0, 0, 0}, 0x0f69 }, // U0F69 # TIBETAN LETTER KSSA
++ { {UNITIZE(Qt::Key_Multi_key), 0x0fb7, 0x0f42, 0, 0, 0}, 0x0f43 }, // U0F43 # TIBETAN LETTER GHA
++ { {UNITIZE(Qt::Key_Multi_key), 0x0fb7, 0x0f4c, 0, 0, 0}, 0x0f4d }, // U0F4D # TIBETAN LETTER DDHA
++ { {UNITIZE(Qt::Key_Multi_key), 0x0fb7, 0x0f51, 0, 0, 0}, 0x0f52 }, // U0F52 # TIBETAN LETTER DHA
++ { {UNITIZE(Qt::Key_Multi_key), 0x0fb7, 0x0f56, 0, 0, 0}, 0x0f57 }, // U0F57 # TIBETAN LETTER BHA
++ { {UNITIZE(Qt::Key_Multi_key), 0x0fb7, 0x0f5b, 0, 0, 0}, 0x0f5c }, // U0F5C # TIBETAN LETTER DZHA
++ { {UNITIZE(Qt::Key_Multi_key), 0x102e, 0x1025, 0, 0, 0}, 0x1026 }, // U1026 # MYANMAR LETTER UU
++ { {UNITIZE(Qt::Key_Multi_key), 0x1100, 0x1100, 0, 0, 0}, 0x1101 }, // U1101 # àà àà = áà
++ { {UNITIZE(Qt::Key_Multi_key), 0x1102, 0x1100, 0, 0, 0}, 0x1113 }, // U1113 # âà àà = óà
++ { {UNITIZE(Qt::Key_Multi_key), 0x1102, 0x1102, 0, 0, 0}, 0x1114 }, // U1114 # âà âà = ôà
++ { {UNITIZE(Qt::Key_Multi_key), 0x1102, 0x1103, 0, 0, 0}, 0x1115 }, // U1115 # âà ãà = õà
++ { {UNITIZE(Qt::Key_Multi_key), 0x1102, 0x1107, 0, 0, 0}, 0x1116 }, // U1116 # âà çà = öà
++ { {UNITIZE(Qt::Key_Multi_key), 0x1103, 0x1100, 0, 0, 0}, 0x1117 }, // U1117 # ãà àà = ÷à
++ { {UNITIZE(Qt::Key_Multi_key), 0x1103, 0x1103, 0, 0, 0}, 0x1104 }, // U1104 # ãà ãà = äà
++ { {UNITIZE(Qt::Key_Multi_key), 0x1105, 0x1102, 0, 0, 0}, 0x1118 }, // U1118 # åà âà = øà
++ { {UNITIZE(Qt::Key_Multi_key), 0x1105, 0x1105, 0, 0, 0}, 0x1119 }, // U1119 # åà åà = ùà
++ { {UNITIZE(Qt::Key_Multi_key), 0x1105, 0x110b, 0, 0, 0}, 0x111b }, // U111b # åà ëà = ûà
++ { {UNITIZE(Qt::Key_Multi_key), 0x1105, 0x1112, 0, 0, 0}, 0x111a }, // U111a # åà òà = úà
++ { {UNITIZE(Qt::Key_Multi_key), 0x1106, 0x1107, 0, 0, 0}, 0x111c }, // U111c # æà çà = üà
++ { {UNITIZE(Qt::Key_Multi_key), 0x1106, 0x110b, 0, 0, 0}, 0x111d }, // U111d # æà ëà = ýà
++ { {UNITIZE(Qt::Key_Multi_key), 0x1107, 0x1100, 0, 0, 0}, 0x111e }, // U111e # çà àà = þà
++ { {UNITIZE(Qt::Key_Multi_key), 0x1107, 0x1102, 0, 0, 0}, 0x111f }, // U111f # çà âà = ÿà
++ { {UNITIZE(Qt::Key_Multi_key), 0x1107, 0x1103, 0, 0, 0}, 0x1120 }, // U1120 # çà ãà =  à
++ { {UNITIZE(Qt::Key_Multi_key), 0x1107, 0x1107, 0, 0, 0}, 0x1108 }, // U1108 # çà çà = èà
++ { {UNITIZE(Qt::Key_Multi_key), 0x1107, 0x1107, 0x110b, 0, 0}, 0x112c }, // U112c # çà çà ëà = ¬à
++ { {UNITIZE(Qt::Key_Multi_key), 0x1107, 0x1109, 0, 0, 0}, 0x1121 }, // U1121 # çà éà = ¡à
++ { {UNITIZE(Qt::Key_Multi_key), 0x1107, 0x1109, 0x1100, 0, 0}, 0x1122 }, // U1122 # çà éà àà = ¢à
++ { {UNITIZE(Qt::Key_Multi_key), 0x1107, 0x1109, 0x1103, 0, 0}, 0x1123 }, // U1123 # çà éà ãà = £à
++ { {UNITIZE(Qt::Key_Multi_key), 0x1107, 0x1109, 0x1107, 0, 0}, 0x1124 }, // U1124 # çà éà çà = ¤à
++ { {UNITIZE(Qt::Key_Multi_key), 0x1107, 0x1109, 0x1109, 0, 0}, 0x1125 }, // U1125 # çà éà éà = ¥à
++ { {UNITIZE(Qt::Key_Multi_key), 0x1107, 0x1109, 0x110c, 0, 0}, 0x1126 }, // U1126 # çà éà ìà = ¦à
++ { {UNITIZE(Qt::Key_Multi_key), 0x1107, 0x110a, 0, 0, 0}, 0x1125 }, // U1125 # çà êà = ¥à
++ { {UNITIZE(Qt::Key_Multi_key), 0x1107, 0x110b, 0, 0, 0}, 0x112b }, // U112b # çà ëà = «à
++ { {UNITIZE(Qt::Key_Multi_key), 0x1107, 0x110c, 0, 0, 0}, 0x1127 }, // U1127 # çà ìà = §à
++ { {UNITIZE(Qt::Key_Multi_key), 0x1107, 0x110e, 0, 0, 0}, 0x1128 }, // U1128 # çà îà = ¨à
++ { {UNITIZE(Qt::Key_Multi_key), 0x1107, 0x1110, 0, 0, 0}, 0x1129 }, // U1129 # çà ðà = ©à
++ { {UNITIZE(Qt::Key_Multi_key), 0x1107, 0x1111, 0, 0, 0}, 0x112a }, // U112a # çà ñà = ªà
++ { {UNITIZE(Qt::Key_Multi_key), 0x1107, 0x112b, 0, 0, 0}, 0x112c }, // U112c # çà «à = ¬à
++ { {UNITIZE(Qt::Key_Multi_key), 0x1107, 0x112d, 0, 0, 0}, 0x1122 }, // U1122 # çà ­à = ¢à
++ { {UNITIZE(Qt::Key_Multi_key), 0x1107, 0x112f, 0, 0, 0}, 0x1123 }, // U1123 # çà ¯à = £à
++ { {UNITIZE(Qt::Key_Multi_key), 0x1107, 0x1132, 0, 0, 0}, 0x1124 }, // U1124 # çà ²à = ¤à
++ { {UNITIZE(Qt::Key_Multi_key), 0x1107, 0x1136, 0, 0, 0}, 0x1126 }, // U1126 # çà ¶à = ¦à
++ { {UNITIZE(Qt::Key_Multi_key), 0x1108, 0x110b, 0, 0, 0}, 0x112c }, // U112c # èà ëà = ¬à
++ { {UNITIZE(Qt::Key_Multi_key), 0x1109, 0x1100, 0, 0, 0}, 0x112d }, // U112d # éà àà = ­à
++ { {UNITIZE(Qt::Key_Multi_key), 0x1109, 0x1102, 0, 0, 0}, 0x112e }, // U112e # éà âà = ®à
++ { {UNITIZE(Qt::Key_Multi_key), 0x1109, 0x1103, 0, 0, 0}, 0x112f }, // U112f # éà ãà = ¯à
++ { {UNITIZE(Qt::Key_Multi_key), 0x1109, 0x1105, 0, 0, 0}, 0x1130 }, // U1130 # éà åà = °à
++ { {UNITIZE(Qt::Key_Multi_key), 0x1109, 0x1106, 0, 0, 0}, 0x1131 }, // U1131 # éà æà = ±à
++ { {UNITIZE(Qt::Key_Multi_key), 0x1109, 0x1107, 0, 0, 0}, 0x1132 }, // U1132 # éà çà = ²à
++ { {UNITIZE(Qt::Key_Multi_key), 0x1109, 0x1107, 0x1100, 0, 0}, 0x1133 }, // U1133 # éà çà àà = ³à
++ { {UNITIZE(Qt::Key_Multi_key), 0x1109, 0x1109, 0, 0, 0}, 0x110a }, // U110a # éà éà = êà
++ { {UNITIZE(Qt::Key_Multi_key), 0x1109, 0x1109, 0x1109, 0, 0}, 0x1134 }, // U1134 # éà éà éà = ´à
++ { {UNITIZE(Qt::Key_Multi_key), 0x1109, 0x110a, 0, 0, 0}, 0x1134 }, // U1134 # éà êà = ´à
++ { {UNITIZE(Qt::Key_Multi_key), 0x1109, 0x110b, 0, 0, 0}, 0x1135 }, // U1135 # éà ëà = µà
++ { {UNITIZE(Qt::Key_Multi_key), 0x1109, 0x110c, 0, 0, 0}, 0x1136 }, // U1136 # éà ìà = ¶à
++ { {UNITIZE(Qt::Key_Multi_key), 0x1109, 0x110e, 0, 0, 0}, 0x1137 }, // U1137 # éà îà = ·à
++ { {UNITIZE(Qt::Key_Multi_key), 0x1109, 0x110f, 0, 0, 0}, 0x1138 }, // U1138 # éà ïà = ¸à
++ { {UNITIZE(Qt::Key_Multi_key), 0x1109, 0x1110, 0, 0, 0}, 0x1139 }, // U1139 # éà ðà = ¹à
++ { {UNITIZE(Qt::Key_Multi_key), 0x1109, 0x1111, 0, 0, 0}, 0x113a }, // U113a # éà ñà = ºà
++ { {UNITIZE(Qt::Key_Multi_key), 0x1109, 0x1112, 0, 0, 0}, 0x113b }, // U113b # éà òà = »à
++ { {UNITIZE(Qt::Key_Multi_key), 0x1109, 0x111e, 0, 0, 0}, 0x1133 }, // U1133 # éà þà = ³à
++ { {UNITIZE(Qt::Key_Multi_key), 0x110a, 0x1109, 0, 0, 0}, 0x1134 }, // U1134 # êà éà = ´à
++ { {UNITIZE(Qt::Key_Multi_key), 0x110b, 0x1100, 0, 0, 0}, 0x1141 }, // U1141 # ëà àà = Áà
++ { {UNITIZE(Qt::Key_Multi_key), 0x110b, 0x1103, 0, 0, 0}, 0x1142 }, // U1142 # ëà ãà = Âà
++ { {UNITIZE(Qt::Key_Multi_key), 0x110b, 0x1106, 0, 0, 0}, 0x1143 }, // U1143 # ëà æà = Ãà
++ { {UNITIZE(Qt::Key_Multi_key), 0x110b, 0x1107, 0, 0, 0}, 0x1144 }, // U1144 # ëà çà = Äà
++ { {UNITIZE(Qt::Key_Multi_key), 0x110b, 0x1109, 0, 0, 0}, 0x1145 }, // U1145 # ëà éà = Åà
++ { {UNITIZE(Qt::Key_Multi_key), 0x110b, 0x110b, 0, 0, 0}, 0x1147 }, // U1147 # ëà ëà = Çà
++ { {UNITIZE(Qt::Key_Multi_key), 0x110b, 0x110c, 0, 0, 0}, 0x1148 }, // U1148 # ëà ìà = Èà
++ { {UNITIZE(Qt::Key_Multi_key), 0x110b, 0x110e, 0, 0, 0}, 0x1149 }, // U1149 # ëà îà = Éà
++ { {UNITIZE(Qt::Key_Multi_key), 0x110b, 0x1110, 0, 0, 0}, 0x114a }, // U114a # ëà ðà = Êà
++ { {UNITIZE(Qt::Key_Multi_key), 0x110b, 0x1111, 0, 0, 0}, 0x114b }, // U114b # ëà ñà = Ëà
++ { {UNITIZE(Qt::Key_Multi_key), 0x110b, 0x1140, 0, 0, 0}, 0x1146 }, // U1146 # ëà Àà = Æà
++ { {UNITIZE(Qt::Key_Multi_key), 0x110c, 0x110b, 0, 0, 0}, 0x114d }, // U114d # ìà ëà = Íà
++ { {UNITIZE(Qt::Key_Multi_key), 0x110c, 0x110c, 0, 0, 0}, 0x110d }, // U110d # ìà ìà = íà
++ { {UNITIZE(Qt::Key_Multi_key), 0x110e, 0x110f, 0, 0, 0}, 0x1152 }, // U1152 # îà ïà = Òà
++ { {UNITIZE(Qt::Key_Multi_key), 0x110e, 0x1112, 0, 0, 0}, 0x1153 }, // U1153 # îà òà = Óà
++ { {UNITIZE(Qt::Key_Multi_key), 0x1111, 0x1107, 0, 0, 0}, 0x1156 }, // U1156 # ñà çà = Öà
++ { {UNITIZE(Qt::Key_Multi_key), 0x1111, 0x110b, 0, 0, 0}, 0x1157 }, // U1157 # ñà ëà = ×à
++ { {UNITIZE(Qt::Key_Multi_key), 0x1112, 0x1112, 0, 0, 0}, 0x1158 }, // U1158 # òà òà = Øà
++ { {UNITIZE(Qt::Key_Multi_key), 0x1121, 0x1100, 0, 0, 0}, 0x1122 }, // U1122 # ¡à àà = ¢à
++ { {UNITIZE(Qt::Key_Multi_key), 0x1121, 0x1103, 0, 0, 0}, 0x1123 }, // U1123 # ¡à ãà = £à
++ { {UNITIZE(Qt::Key_Multi_key), 0x1121, 0x1107, 0, 0, 0}, 0x1124 }, // U1124 # ¡à çà = ¤à
++ { {UNITIZE(Qt::Key_Multi_key), 0x1121, 0x1109, 0, 0, 0}, 0x1125 }, // U1125 # ¡à éà = ¥à
++ { {UNITIZE(Qt::Key_Multi_key), 0x1121, 0x110c, 0, 0, 0}, 0x1126 }, // U1126 # ¡à ìà = ¦à
++ { {UNITIZE(Qt::Key_Multi_key), 0x1132, 0x1100, 0, 0, 0}, 0x1133 }, // U1133 # ²à àà = ³à
++ { {UNITIZE(Qt::Key_Multi_key), 0x113c, 0x113c, 0, 0, 0}, 0x113d }, // U113d # ¼à ¼à = ½à
++ { {UNITIZE(Qt::Key_Multi_key), 0x113e, 0x113e, 0, 0, 0}, 0x113f }, // U113f # ¾à ¾à = ¿à
++ { {UNITIZE(Qt::Key_Multi_key), 0x114e, 0x114e, 0, 0, 0}, 0x114f }, // U114f # Îà Îà = Ïà
++ { {UNITIZE(Qt::Key_Multi_key), 0x1150, 0x1150, 0, 0, 0}, 0x1151 }, // U1151 # Ðà Ðà = Ñà
++ { {UNITIZE(Qt::Key_Multi_key), 0x1161, 0x1169, 0, 0, 0}, 0x1176 }, // U1176 # ßá ßé = ßö
++ { {UNITIZE(Qt::Key_Multi_key), 0x1161, 0x116e, 0, 0, 0}, 0x1177 }, // U1177 # ßá ßî = ß÷
++ { {UNITIZE(Qt::Key_Multi_key), 0x1161, 0x1175, 0, 0, 0}, 0x1162 }, // U1162 # ßá ßõ = ßâ
++ { {UNITIZE(Qt::Key_Multi_key), 0x1163, 0x1169, 0, 0, 0}, 0x1178 }, // U1178 # ßã ßé = ßø
++ { {UNITIZE(Qt::Key_Multi_key), 0x1163, 0x116d, 0, 0, 0}, 0x1179 }, // U1179 # ßã ßí = ßù
++ { {UNITIZE(Qt::Key_Multi_key), 0x1163, 0x1175, 0, 0, 0}, 0x1164 }, // U1164 # ßã ßõ = ßä
++ { {UNITIZE(Qt::Key_Multi_key), 0x1165, 0x1169, 0, 0, 0}, 0x117a }, // U117a # ßå ßé = ßú
++ { {UNITIZE(Qt::Key_Multi_key), 0x1165, 0x116e, 0, 0, 0}, 0x117b }, // U117b # ßå ßî = ßû
++ { {UNITIZE(Qt::Key_Multi_key), 0x1165, 0x1173, 0, 0, 0}, 0x117c }, // U117c # ßå ßó = ßü
++ { {UNITIZE(Qt::Key_Multi_key), 0x1165, 0x1175, 0, 0, 0}, 0x1166 }, // U1166 # ßå ßõ = ßæ
++ { {UNITIZE(Qt::Key_Multi_key), 0x1167, 0x1169, 0, 0, 0}, 0x117d }, // U117d # ßç ßé = ßý
++ { {UNITIZE(Qt::Key_Multi_key), 0x1167, 0x116e, 0, 0, 0}, 0x117e }, // U117e # ßç ßî = ßþ
++ { {UNITIZE(Qt::Key_Multi_key), 0x1167, 0x1175, 0, 0, 0}, 0x1168 }, // U1168 # ßç ßõ = ßè
++ { {UNITIZE(Qt::Key_Multi_key), 0x1169, 0x1161, 0, 0, 0}, 0x116a }, // U116a # ßé ßá = ßê
++ { {UNITIZE(Qt::Key_Multi_key), 0x1169, 0x1161, 0x1175, 0, 0}, 0x116b }, // U116b # ßé ßá ßõ = ßë
++ { {UNITIZE(Qt::Key_Multi_key), 0x1169, 0x1162, 0, 0, 0}, 0x116b }, // U116b # ßé ßâ = ßë
++ { {UNITIZE(Qt::Key_Multi_key), 0x1169, 0x1165, 0, 0, 0}, 0x117f }, // U117f # ßé ßå = ßÿ
++ { {UNITIZE(Qt::Key_Multi_key), 0x1169, 0x1166, 0, 0, 0}, 0x1180 }, // U1180 # ßé ßæ = ß 
++ { {UNITIZE(Qt::Key_Multi_key), 0x1169, 0x1168, 0, 0, 0}, 0x1181 }, // U1181 # ßé ßè = ß¡
++ { {UNITIZE(Qt::Key_Multi_key), 0x1169, 0x1169, 0, 0, 0}, 0x1182 }, // U1182 # ßé ßé = ߢ
++ { {UNITIZE(Qt::Key_Multi_key), 0x1169, 0x116e, 0, 0, 0}, 0x1183 }, // U1183 # ßé ßî = ߣ
++ { {UNITIZE(Qt::Key_Multi_key), 0x1169, 0x1175, 0, 0, 0}, 0x116c }, // U116c # ßé ßõ = ßì
++ { {UNITIZE(Qt::Key_Multi_key), 0x116a, 0x1175, 0, 0, 0}, 0x116b }, // U116b # ßê ßõ = ßë
++ { {UNITIZE(Qt::Key_Multi_key), 0x116d, 0x1163, 0, 0, 0}, 0x1184 }, // U1184 # ßí ßã = ߤ
++ { {UNITIZE(Qt::Key_Multi_key), 0x116d, 0x1164, 0, 0, 0}, 0x1185 }, // U1185 # ßí ßä = ߥ
++ { {UNITIZE(Qt::Key_Multi_key), 0x116d, 0x1167, 0, 0, 0}, 0x1186 }, // U1186 # ßí ßç = ߦ
++ { {UNITIZE(Qt::Key_Multi_key), 0x116d, 0x1169, 0, 0, 0}, 0x1187 }, // U1187 # ßí ßé = ߧ
++ { {UNITIZE(Qt::Key_Multi_key), 0x116d, 0x1175, 0, 0, 0}, 0x1188 }, // U1188 # ßí ßõ = ߨ
++ { {UNITIZE(Qt::Key_Multi_key), 0x116e, 0x1161, 0, 0, 0}, 0x1189 }, // U1189 # ßî ßá = ß©
++ { {UNITIZE(Qt::Key_Multi_key), 0x116e, 0x1162, 0, 0, 0}, 0x118a }, // U118a # ßî ßâ = ߪ
++ { {UNITIZE(Qt::Key_Multi_key), 0x116e, 0x1165, 0, 0, 0}, 0x116f }, // U116f # ßî ßå = ßï
++ { {UNITIZE(Qt::Key_Multi_key), 0x116e, 0x1165, 0x1173, 0, 0}, 0x118b }, // U118b # ßî ßå ßó = ß«
++ { {UNITIZE(Qt::Key_Multi_key), 0x116e, 0x1165, 0x1175, 0, 0}, 0x1170 }, // U1170 # ßî ßå ßõ = ßð
++ { {UNITIZE(Qt::Key_Multi_key), 0x116e, 0x1166, 0, 0, 0}, 0x1170 }, // U1170 # ßî ßæ = ßð
++ { {UNITIZE(Qt::Key_Multi_key), 0x116e, 0x1168, 0, 0, 0}, 0x118c }, // U118c # ßî ßè = ߬
++ { {UNITIZE(Qt::Key_Multi_key), 0x116e, 0x116e, 0, 0, 0}, 0x118d }, // U118d # ßî ßî = ß­
++ { {UNITIZE(Qt::Key_Multi_key), 0x116e, 0x1175, 0, 0, 0}, 0x1171 }, // U1171 # ßî ßõ = ßñ
++ { {UNITIZE(Qt::Key_Multi_key), 0x116e, 0x117c, 0, 0, 0}, 0x118b }, // U118b # ßî ßü = ß«
++ { {UNITIZE(Qt::Key_Multi_key), 0x116f, 0x1173, 0, 0, 0}, 0x118b }, // U118b # ßï ßó = ß«
++ { {UNITIZE(Qt::Key_Multi_key), 0x116f, 0x1175, 0, 0, 0}, 0x1170 }, // U1170 # ßï ßõ = ßð
++ { {UNITIZE(Qt::Key_Multi_key), 0x1172, 0x1161, 0, 0, 0}, 0x118e }, // U118e # ßò ßá = ß®
++ { {UNITIZE(Qt::Key_Multi_key), 0x1172, 0x1165, 0, 0, 0}, 0x118f }, // U118f # ßò ßå = ߯
++ { {UNITIZE(Qt::Key_Multi_key), 0x1172, 0x1166, 0, 0, 0}, 0x1190 }, // U1190 # ßò ßæ = ß°
++ { {UNITIZE(Qt::Key_Multi_key), 0x1172, 0x1167, 0, 0, 0}, 0x1191 }, // U1191 # ßò ßç = ß±
++ { {UNITIZE(Qt::Key_Multi_key), 0x1172, 0x1168, 0, 0, 0}, 0x1192 }, // U1192 # ßò ßè = ß²
++ { {UNITIZE(Qt::Key_Multi_key), 0x1172, 0x116e, 0, 0, 0}, 0x1193 }, // U1193 # ßò ßî = ß³
++ { {UNITIZE(Qt::Key_Multi_key), 0x1172, 0x1175, 0, 0, 0}, 0x1194 }, // U1194 # ßò ßõ = ß´
++ { {UNITIZE(Qt::Key_Multi_key), 0x1173, 0x116e, 0, 0, 0}, 0x1195 }, // U1195 # ßó ßî = ßµ
++ { {UNITIZE(Qt::Key_Multi_key), 0x1173, 0x1173, 0, 0, 0}, 0x1196 }, // U1196 # ßó ßó = ߶
++ { {UNITIZE(Qt::Key_Multi_key), 0x1173, 0x1175, 0, 0, 0}, 0x1174 }, // U1174 # ßó ßõ = ßô
++ { {UNITIZE(Qt::Key_Multi_key), 0x1174, 0x116e, 0, 0, 0}, 0x1197 }, // U1197 # ßô ßî = ß·
++ { {UNITIZE(Qt::Key_Multi_key), 0x1175, 0x1161, 0, 0, 0}, 0x1198 }, // U1198 # ßõ ßá = ߸
++ { {UNITIZE(Qt::Key_Multi_key), 0x1175, 0x1163, 0, 0, 0}, 0x1199 }, // U1199 # ßõ ßã = ß¹
++ { {UNITIZE(Qt::Key_Multi_key), 0x1175, 0x1169, 0, 0, 0}, 0x119a }, // U119a # ßõ ßé = ߺ
++ { {UNITIZE(Qt::Key_Multi_key), 0x1175, 0x116e, 0, 0, 0}, 0x119b }, // U119b # ßõ ßî = ß»
++ { {UNITIZE(Qt::Key_Multi_key), 0x1175, 0x1173, 0, 0, 0}, 0x119c }, // U119c # ßõ ßó = ß¼
++ { {UNITIZE(Qt::Key_Multi_key), 0x1175, 0x119e, 0, 0, 0}, 0x119d }, // U119d # ßõ ß¾ = ß½
++ { {UNITIZE(Qt::Key_Multi_key), 0x119e, 0x1165, 0, 0, 0}, 0x119f }, // U119f # ß¾ ßå = ß¿
++ { {UNITIZE(Qt::Key_Multi_key), 0x119e, 0x116e, 0, 0, 0}, 0x11a0 }, // U11a0 # ß¾ ßî = ßÀ
++ { {UNITIZE(Qt::Key_Multi_key), 0x119e, 0x1175, 0, 0, 0}, 0x11a1 }, // U11a1 # ß¾ ßõ = ßÁ
++ { {UNITIZE(Qt::Key_Multi_key), 0x119e, 0x119e, 0, 0, 0}, 0x11a2 }, // U11a2 # ß¾ ß¾ = ßÂ
++ { {UNITIZE(Qt::Key_Multi_key), 0x11a8, 0x11a8, 0, 0, 0}, 0x11a9 }, // U11a9 # ßàÈ ßàÈ = ßàÉ
++ { {UNITIZE(Qt::Key_Multi_key), 0x11a8, 0x11af, 0, 0, 0}, 0x11c3 }, // U11c3 # ßàÈ ßàÏ = ßàã
++ { {UNITIZE(Qt::Key_Multi_key), 0x11a8, 0x11ba, 0, 0, 0}, 0x11aa }, // U11aa # ßàÈ ßàÚ = ßàÊ
++ { {UNITIZE(Qt::Key_Multi_key), 0x11a8, 0x11ba, 0x11a8, 0, 0}, 0x11c4 }, // U11c4 # ßàÈ ßàÚ ßàÈ = ßàä
++ { {UNITIZE(Qt::Key_Multi_key), 0x11a8, 0x11e7, 0, 0, 0}, 0x11c4 }, // U11c4 # ßàÈ ßৠ= ßàä
++ { {UNITIZE(Qt::Key_Multi_key), 0x11aa, 0x11a8, 0, 0, 0}, 0x11c4 }, // U11c4 # ßàÊ ßàÈ = ßàä
++ { {UNITIZE(Qt::Key_Multi_key), 0x11ab, 0x11a8, 0, 0, 0}, 0x11c5 }, // U11c5 # ßàË ßàÈ = ßàå
++ { {UNITIZE(Qt::Key_Multi_key), 0x11ab, 0x11ae, 0, 0, 0}, 0x11c6 }, // U11c6 # ßàË ßàÎ = ßàæ
++ { {UNITIZE(Qt::Key_Multi_key), 0x11ab, 0x11ba, 0, 0, 0}, 0x11c7 }, // U11c7 # ßàË ßàÚ = ßàç
++ { {UNITIZE(Qt::Key_Multi_key), 0x11ab, 0x11bd, 0, 0, 0}, 0x11ac }, // U11ac # ßàË ßàÝ = ßàÌ
++ { {UNITIZE(Qt::Key_Multi_key), 0x11ab, 0x11c0, 0, 0, 0}, 0x11c9 }, // U11c9 # ßàË ßàà = ßàé
++ { {UNITIZE(Qt::Key_Multi_key), 0x11ab, 0x11c2, 0, 0, 0}, 0x11ad }, // U11ad # ßàË ßàâ = ßàÍ
++ { {UNITIZE(Qt::Key_Multi_key), 0x11ab, 0x11eb, 0, 0, 0}, 0x11c8 }, // U11c8 # ßàË ßà« = ßàè
++ { {UNITIZE(Qt::Key_Multi_key), 0x11ae, 0x11a8, 0, 0, 0}, 0x11ca }, // U11ca # ßàÎ ßàÈ = ßàê
++ { {UNITIZE(Qt::Key_Multi_key), 0x11ae, 0x11af, 0, 0, 0}, 0x11cb }, // U11cb # ßàÎ ßàÏ = ßàë
++ { {UNITIZE(Qt::Key_Multi_key), 0x11af, 0x11a8, 0, 0, 0}, 0x11b0 }, // U11b0 # ßàÏ ßàÈ = ßàÐ
++ { {UNITIZE(Qt::Key_Multi_key), 0x11af, 0x11a8, 0x11ba, 0, 0}, 0x11cc }, // U11cc # ßàÏ ßàÈ ßàÚ = ßàì
++ { {UNITIZE(Qt::Key_Multi_key), 0x11af, 0x11aa, 0, 0, 0}, 0x11cc }, // U11cc # ßàÏ ßàÊ = ßàì
++ { {UNITIZE(Qt::Key_Multi_key), 0x11af, 0x11ab, 0, 0, 0}, 0x11cd }, // U11cd # ßàÏ ßàË = ßàí
++ { {UNITIZE(Qt::Key_Multi_key), 0x11af, 0x11ae, 0, 0, 0}, 0x11ce }, // U11ce # ßàÏ ßàÎ = ßàî
++ { {UNITIZE(Qt::Key_Multi_key), 0x11af, 0x11ae, 0x11c2, 0, 0}, 0x11cf }, // U11cf # ßàÏ ßàÎ ßàâ = ßàï
++ { {UNITIZE(Qt::Key_Multi_key), 0x11af, 0x11af, 0, 0, 0}, 0x11d0 }, // U11d0 # ßàÏ ßàÏ = ßàð
++ { {UNITIZE(Qt::Key_Multi_key), 0x11af, 0x11b7, 0, 0, 0}, 0x11b1 }, // U11b1 # ßàÏ ßà× = ßàÑ
++ { {UNITIZE(Qt::Key_Multi_key), 0x11af, 0x11b7, 0x11a8, 0, 0}, 0x11d1 }, // U11d1 # ßàÏ ßà× ßàÈ = ßàñ
++ { {UNITIZE(Qt::Key_Multi_key), 0x11af, 0x11b7, 0x11ba, 0, 0}, 0x11d2 }, // U11d2 # ßàÏ ßà× ßàÚ = ßàò
++ { {UNITIZE(Qt::Key_Multi_key), 0x11af, 0x11b8, 0, 0, 0}, 0x11b2 }, // U11b2 # ßàÏ ßàØ = ßàÒ
++ { {UNITIZE(Qt::Key_Multi_key), 0x11af, 0x11b8, 0x11ba, 0, 0}, 0x11d3 }, // U11d3 # ßàÏ ßàØ ßàÚ = ßàó
++ { {UNITIZE(Qt::Key_Multi_key), 0x11af, 0x11b8, 0x11bc, 0, 0}, 0x11d5 }, // U11d5 # ßàÏ ßàØ ßàÜ = ßàõ
++ { {UNITIZE(Qt::Key_Multi_key), 0x11af, 0x11b8, 0x11c2, 0, 0}, 0x11d4 }, // U11d4 # ßàÏ ßàØ ßàâ = ßàô
++ { {UNITIZE(Qt::Key_Multi_key), 0x11af, 0x11b9, 0, 0, 0}, 0x11d3 }, // U11d3 # ßàÏ ßàÙ = ßàó
++ { {UNITIZE(Qt::Key_Multi_key), 0x11af, 0x11ba, 0, 0, 0}, 0x11b3 }, // U11b3 # ßàÏ ßàÚ = ßàÓ
++ { {UNITIZE(Qt::Key_Multi_key), 0x11af, 0x11ba, 0x11ba, 0, 0}, 0x11d6 }, // U11d6 # ßàÏ ßàÚ ßàÚ = ßàö
++ { {UNITIZE(Qt::Key_Multi_key), 0x11af, 0x11bb, 0, 0, 0}, 0x11d6 }, // U11d6 # ßàÏ ßàÛ = ßàö
++ { {UNITIZE(Qt::Key_Multi_key), 0x11af, 0x11bf, 0, 0, 0}, 0x11d8 }, // U11d8 # ßàÏ ßàß = ßàø
++ { {UNITIZE(Qt::Key_Multi_key), 0x11af, 0x11c0, 0, 0, 0}, 0x11b4 }, // U11b4 # ßàÏ ßàà = ßàÔ
++ { {UNITIZE(Qt::Key_Multi_key), 0x11af, 0x11c1, 0, 0, 0}, 0x11b5 }, // U11b5 # ßàÏ ßàá = ßàÕ
++ { {UNITIZE(Qt::Key_Multi_key), 0x11af, 0x11c2, 0, 0, 0}, 0x11b6 }, // U11b6 # ßàÏ ßàâ = ßàÖ
++ { {UNITIZE(Qt::Key_Multi_key), 0x11af, 0x11da, 0, 0, 0}, 0x11d1 }, // U11d1 # ßàÏ ßàú = ßàñ
++ { {UNITIZE(Qt::Key_Multi_key), 0x11af, 0x11dd, 0, 0, 0}, 0x11d2 }, // U11d2 # ßàÏ ßàý = ßàò
++ { {UNITIZE(Qt::Key_Multi_key), 0x11af, 0x11e5, 0, 0, 0}, 0x11d4 }, // U11d4 # ßàÏ ßॠ= ßàô
++ { {UNITIZE(Qt::Key_Multi_key), 0x11af, 0x11e6, 0, 0, 0}, 0x11d5 }, // U11d5 # ßàÏ ßঠ= ßàõ
++ { {UNITIZE(Qt::Key_Multi_key), 0x11af, 0x11eb, 0, 0, 0}, 0x11d7 }, // U11d7 # ßàÏ ßà« = ßà÷
++ { {UNITIZE(Qt::Key_Multi_key), 0x11af, 0x11f9, 0, 0, 0}, 0x11d9 }, // U11d9 # ßàÏ ß๠= ßàù
++ { {UNITIZE(Qt::Key_Multi_key), 0x11b0, 0x11ba, 0, 0, 0}, 0x11cc }, // U11cc # ßàÐ ßàÚ = ßàì
++ { {UNITIZE(Qt::Key_Multi_key), 0x11b1, 0x11a8, 0, 0, 0}, 0x11d1 }, // U11d1 # ßàÑ ßàÈ = ßàñ
++ { {UNITIZE(Qt::Key_Multi_key), 0x11b1, 0x11ba, 0, 0, 0}, 0x11d2 }, // U11d2 # ßàÑ ßàÚ = ßàò
++ { {UNITIZE(Qt::Key_Multi_key), 0x11b2, 0x11ba, 0, 0, 0}, 0x11d3 }, // U11d3 # ßàÒ ßàÚ = ßàó
++ { {UNITIZE(Qt::Key_Multi_key), 0x11b2, 0x11bc, 0, 0, 0}, 0x11d5 }, // U11d5 # ßàÒ ßàÜ = ßàõ
++ { {UNITIZE(Qt::Key_Multi_key), 0x11b2, 0x11c2, 0, 0, 0}, 0x11d4 }, // U11d4 # ßàÒ ßàâ = ßàô
++ { {UNITIZE(Qt::Key_Multi_key), 0x11b3, 0x11ba, 0, 0, 0}, 0x11d6 }, // U11d6 # ßàÓ ßàÚ = ßàö
++ { {UNITIZE(Qt::Key_Multi_key), 0x11b7, 0x11a8, 0, 0, 0}, 0x11da }, // U11da # ßà× ßàÈ = ßàú
++ { {UNITIZE(Qt::Key_Multi_key), 0x11b7, 0x11af, 0, 0, 0}, 0x11db }, // U11db # ßà× ßàÏ = ßàû
++ { {UNITIZE(Qt::Key_Multi_key), 0x11b7, 0x11b8, 0, 0, 0}, 0x11dc }, // U11dc # ßà× ßàØ = ßàü
++ { {UNITIZE(Qt::Key_Multi_key), 0x11b7, 0x11ba, 0, 0, 0}, 0x11dd }, // U11dd # ßà× ßàÚ = ßàý
++ { {UNITIZE(Qt::Key_Multi_key), 0x11b7, 0x11ba, 0x11ba, 0, 0}, 0x11de }, // U11de # ßà× ßàÚ ßàÚ = ßàþ
++ { {UNITIZE(Qt::Key_Multi_key), 0x11b7, 0x11bb, 0, 0, 0}, 0x11de }, // U11de # ßà× ßàÛ = ßàþ
++ { {UNITIZE(Qt::Key_Multi_key), 0x11b7, 0x11bc, 0, 0, 0}, 0x11e2 }, // U11e2 # ßà× ßàÜ = ßà¢
++ { {UNITIZE(Qt::Key_Multi_key), 0x11b7, 0x11be, 0, 0, 0}, 0x11e0 }, // U11e0 # ßà× ßàÞ = ßà 
++ { {UNITIZE(Qt::Key_Multi_key), 0x11b7, 0x11c2, 0, 0, 0}, 0x11e1 }, // U11e1 # ßà× ßàâ = ßà¡
++ { {UNITIZE(Qt::Key_Multi_key), 0x11b7, 0x11eb, 0, 0, 0}, 0x11df }, // U11df # ßà× ßà« = ßàÿ
++ { {UNITIZE(Qt::Key_Multi_key), 0x11b8, 0x11af, 0, 0, 0}, 0x11e3 }, // U11e3 # ßàØ ßàÏ = ßà£
++ { {UNITIZE(Qt::Key_Multi_key), 0x11b8, 0x11ba, 0, 0, 0}, 0x11b9 }, // U11b9 # ßàØ ßàÚ = ßàÙ
++ { {UNITIZE(Qt::Key_Multi_key), 0x11b8, 0x11bc, 0, 0, 0}, 0x11e6 }, // U11e6 # ßàØ ßàÜ = ßà¦
++ { {UNITIZE(Qt::Key_Multi_key), 0x11b8, 0x11c1, 0, 0, 0}, 0x11e4 }, // U11e4 # ßàØ ßàá = ßà¤
++ { {UNITIZE(Qt::Key_Multi_key), 0x11b8, 0x11c2, 0, 0, 0}, 0x11e5 }, // U11e5 # ßàØ ßàâ = ßà¥
++ { {UNITIZE(Qt::Key_Multi_key), 0x11ba, 0x11a8, 0, 0, 0}, 0x11e7 }, // U11e7 # ßàÚ ßàÈ = ßà§
++ { {UNITIZE(Qt::Key_Multi_key), 0x11ba, 0x11ae, 0, 0, 0}, 0x11e8 }, // U11e8 # ßàÚ ßàÎ = ßà¨
++ { {UNITIZE(Qt::Key_Multi_key), 0x11ba, 0x11af, 0, 0, 0}, 0x11e9 }, // U11e9 # ßàÚ ßàÏ = ßà©
++ { {UNITIZE(Qt::Key_Multi_key), 0x11ba, 0x11b8, 0, 0, 0}, 0x11ea }, // U11ea # ßàÚ ßàØ = ßàª
++ { {UNITIZE(Qt::Key_Multi_key), 0x11ba, 0x11ba, 0, 0, 0}, 0x11bb }, // U11bb # ßàÚ ßàÚ = ßàÛ
++ { {UNITIZE(Qt::Key_Multi_key), 0x11bc, 0x11a8, 0, 0, 0}, 0x11ec }, // U11ec # ßàÜ ßàÈ = ßà¬
++ { {UNITIZE(Qt::Key_Multi_key), 0x11bc, 0x11a8, 0x11a8, 0, 0}, 0x11ed }, // U11ed # ßàÜ ßàÈ ßàÈ = ßà­
++ { {UNITIZE(Qt::Key_Multi_key), 0x11bc, 0x11a9, 0, 0, 0}, 0x11ed }, // U11ed # ßàÜ ßàÉ = ßà­
++ { {UNITIZE(Qt::Key_Multi_key), 0x11bc, 0x11bc, 0, 0, 0}, 0x11ee }, // U11ee # ßàÜ ßàÜ = ßà®
++ { {UNITIZE(Qt::Key_Multi_key), 0x11bc, 0x11bf, 0, 0, 0}, 0x11ef }, // U11ef # ßàÜ ßàß = ßà¯
++ { {UNITIZE(Qt::Key_Multi_key), 0x11c1, 0x11b8, 0, 0, 0}, 0x11f3 }, // U11f3 # ßàá ßàØ = ßà³
++ { {UNITIZE(Qt::Key_Multi_key), 0x11c1, 0x11bc, 0, 0, 0}, 0x11f4 }, // U11f4 # ßàá ßàÜ = ßà´
++ { {UNITIZE(Qt::Key_Multi_key), 0x11c2, 0x11ab, 0, 0, 0}, 0x11f5 }, // U11f5 # ßàâ ßàË = ßàµ
++ { {UNITIZE(Qt::Key_Multi_key), 0x11c2, 0x11af, 0, 0, 0}, 0x11f6 }, // U11f6 # ßàâ ßàÏ = ßà¶
++ { {UNITIZE(Qt::Key_Multi_key), 0x11c2, 0x11b7, 0, 0, 0}, 0x11f7 }, // U11f7 # ßàâ ßà× = ßà·
++ { {UNITIZE(Qt::Key_Multi_key), 0x11c2, 0x11b8, 0, 0, 0}, 0x11f8 }, // U11f8 # ßàâ ßàØ = ßà¸
++ { {UNITIZE(Qt::Key_Multi_key), 0x11ce, 0x11c2, 0, 0, 0}, 0x11cf }, // U11cf # ßàî ßàâ = ßàï
++ { {UNITIZE(Qt::Key_Multi_key), 0x11dd, 0x11ba, 0, 0, 0}, 0x11de }, // U11de # ßàý ßàÚ = ßàþ
++ { {UNITIZE(Qt::Key_Multi_key), 0x11ec, 0x11a8, 0, 0, 0}, 0x11ed }, // U11ed # ßଠßàÈ = ßà­
++ { {UNITIZE(Qt::Key_Multi_key), 0x11f0, 0x11ba, 0, 0, 0}, 0x11f1 }, // U11f1 # ßà° ßàÚ = ßà±
++ { {UNITIZE(Qt::Key_Multi_key), 0x11f0, 0x11eb, 0, 0, 0}, 0x11f2 }, // U11f2 # ßà° ßà« = ßà²
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x1d157, 0x1d165, 0, 0, 0}, 0xd15e }, // U1D15E # MUSICAL SYMBOL HALF NOTE
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x1d158, 0x1d165, 0, 0, 0}, 0xd15f }, // U1D15F # MUSICAL SYMBOL QUARTER NOTE
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x1d158, 0x1d165, 0x1d16e, 0, 0}, 0xd160 }, // U1D160 # MUSICAL SYMBOL EIGHTH NOTE
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x1d158, 0x1d165, 0x1d16f, 0, 0}, 0xd161 }, // U1D161 # MUSICAL SYMBOL SIXTEENTH NOTE
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x1d158, 0x1d165, 0x1d170, 0, 0}, 0xd162 }, // U1D162 # MUSICAL SYMBOL THIRTY-SECOND NOTE
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x1d158, 0x1d165, 0x1d171, 0, 0}, 0xd163 }, // U1D163 # MUSICAL SYMBOL SIXTY-FOURTH NOTE
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x1d158, 0x1d165, 0x1d172, 0, 0}, 0xd164 }, // U1D164 # MUSICAL SYMBOL ONE HUNDRED TWENTY-EIGHTH NOTE
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x1d15f, 0x1d16e, 0, 0, 0}, 0xd160 }, // U1D160 # MUSICAL SYMBOL EIGHTH NOTE
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x1d15f, 0x1d16f, 0, 0, 0}, 0xd161 }, // U1D161 # MUSICAL SYMBOL SIXTEENTH NOTE
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x1d15f, 0x1d170, 0, 0, 0}, 0xd162 }, // U1D162 # MUSICAL SYMBOL THIRTY-SECOND NOTE
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x1d15f, 0x1d171, 0, 0, 0}, 0xd163 }, // U1D163 # MUSICAL SYMBOL SIXTY-FOURTH NOTE
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x1d15f, 0x1d172, 0, 0, 0}, 0xd164 }, // U1D164 # MUSICAL SYMBOL ONE HUNDRED TWENTY-EIGHTH NOTE
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x1d1b9, 0x1d165, 0, 0, 0}, 0xd1bb }, // U1D1BB # MUSICAL SYMBOL MINIMA
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x1d1b9, 0x1d165, 0x1d16e, 0, 0}, 0xd1bd }, // U1D1BD # MUSICAL SYMBOL SEMIMINIMA WHITE
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x1d1b9, 0x1d165, 0x1d16f, 0, 0}, 0xd1bf }, // U1D1BF # MUSICAL SYMBOL FUSA WHITE
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x1d1ba, 0x1d165, 0, 0, 0}, 0xd1bc }, // U1D1BC # MUSICAL SYMBOL MINIMA BLACK
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x1d1ba, 0x1d165, 0x1d16e, 0, 0}, 0xd1be }, // U1D1BE # MUSICAL SYMBOL SEMIMINIMA BLACK
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x1d1ba, 0x1d165, 0x1d16f, 0, 0}, 0xd1c0 }, // U1D1C0 # MUSICAL SYMBOL FUSA BLACK
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x1d1bb, 0x1d16e, 0, 0, 0}, 0xd1bd }, // U1D1BD # MUSICAL SYMBOL SEMIMINIMA WHITE
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x1d1bb, 0x1d16f, 0, 0, 0}, 0xd1bf }, // U1D1BF # MUSICAL SYMBOL FUSA WHITE
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x1d1bc, 0x1d16e, 0, 0, 0}, 0xd1be }, // U1D1BE # MUSICAL SYMBOL SEMIMINIMA BLACK
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x1d1bc, 0x1d16f, 0, 0, 0}, 0xd1c0 }, // U1D1C0 # MUSICAL SYMBOL FUSA BLACK
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x1fbf, 0x0000, 0, 0, 0}, 0x1fcd }, // U1FCD # GREEK PSILI AND VARIA
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x1fbf, 0x0000, 0, 0, 0}, 0x1fce }, // U1FCE # GREEK PSILI AND OXIA
++ { {UNITIZE(Qt::Key_Multi_key), 0x1fbf, 0x0027, 0, 0, 0}, 0x1fce }, // U1FCE # GREEK PSILI AND OXIA
++ { {UNITIZE(Qt::Key_Multi_key), 0x1fbf, 0x0060, 0, 0, 0}, 0x1fcd }, // U1FCD # GREEK PSILI AND VARIA
++ { {UNITIZE(Qt::Key_Multi_key), 0x1fbf, 0x007e, 0, 0, 0}, 0x1fcf }, // U1FCF # GREEK PSILI AND PERISPOMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x1fbf, 0x00b4, 0, 0, 0}, 0x1fce }, // U1FCE # GREEK PSILI AND OXIA
++ { {UNITIZE(Qt::Key_Multi_key), 0x1fbf, 0x0342, 0, 0, 0}, 0x1fcf }, // U1FCF # GREEK PSILI AND PERISPOMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x1fbf, UNITIZE(Qt::Key_Dead_Grave), 0, 0, 0}, 0x1fcd }, // U1FCD # GREEK PSILI AND VARIA
++ { {UNITIZE(Qt::Key_Multi_key), 0x1fbf, UNITIZE(Qt::Key_Dead_Acute), 0, 0, 0}, 0x1fce }, // U1FCE # GREEK PSILI AND OXIA
++ { {UNITIZE(Qt::Key_Multi_key), 0x1fbf, UNITIZE(Qt::Key_Dead_Tilde), 0, 0, 0}, 0x1fcf }, // U1FCF # GREEK PSILI AND PERISPOMENI
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x1ffe, 0x0000, 0, 0, 0}, 0x1fdd }, // U1FDD # GREEK DASIA AND VARIA
++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x1ffe, 0x0000, 0, 0, 0}, 0x1fde }, // U1FDE # GREEK DASIA AND OXIA
++ { {UNITIZE(Qt::Key_Multi_key), 0x1ffe, 0x0027, 0, 0, 0}, 0x1fde }, // U1FDE # GREEK DASIA AND OXIA
++ { {UNITIZE(Qt::Key_Multi_key), 0x1ffe, 0x0060, 0, 0, 0}, 0x1fdd }, // U1FDD # GREEK DASIA AND VARIA
++ { {UNITIZE(Qt::Key_Multi_key), 0x1ffe, 0x007e, 0, 0, 0}, 0x1fdf }, // U1FDF # GREEK DASIA AND PERISPOMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x1ffe, 0x00b4, 0, 0, 0}, 0x1fde }, // U1FDE # GREEK DASIA AND OXIA
++ { {UNITIZE(Qt::Key_Multi_key), 0x1ffe, 0x0342, 0, 0, 0}, 0x1fdf }, // U1FDF # GREEK DASIA AND PERISPOMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x1ffe, UNITIZE(Qt::Key_Dead_Grave), 0, 0, 0}, 0x1fdd }, // U1FDD # GREEK DASIA AND VARIA
++ { {UNITIZE(Qt::Key_Multi_key), 0x1ffe, UNITIZE(Qt::Key_Dead_Acute), 0, 0, 0}, 0x1fde }, // U1FDE # GREEK DASIA AND OXIA
++ { {UNITIZE(Qt::Key_Multi_key), 0x1ffe, UNITIZE(Qt::Key_Dead_Tilde), 0, 0, 0}, 0x1fdf }, // U1FDF # GREEK DASIA AND PERISPOMENI
++ { {UNITIZE(Qt::Key_Multi_key), 0x2203, 0x0338, 0, 0, 0}, 0x2204 }, // U2204 # THERE DOES NOT EXIST
++ { {UNITIZE(Qt::Key_Multi_key), 0x2208, 0x0338, 0, 0, 0}, 0x2209 }, // U2209 # NOT AN ELEMENT OF
++ { {UNITIZE(Qt::Key_Multi_key), 0x220b, 0x0338, 0, 0, 0}, 0x220c }, // U220C # DOES NOT CONTAIN AS MEMBER
++ { {UNITIZE(Qt::Key_Multi_key), 0x2223, 0x0338, 0, 0, 0}, 0x2224 }, // U2224 # DOES NOT DIVIDE
++ { {UNITIZE(Qt::Key_Multi_key), 0x2225, 0x0338, 0, 0, 0}, 0x2226 }, // U2226 # NOT PARALLEL TO
++ { {UNITIZE(Qt::Key_Multi_key), 0x223c, 0x0338, 0, 0, 0}, 0x2241 }, // U2241 # NOT TILDE
++ { {UNITIZE(Qt::Key_Multi_key), 0x223c, 0x0338, 0, 0, 0}, 0x2247 }, // U2247 # NEITHER APPROXIMATELY NOR ACTUALLY EQUAL TO
++ { {UNITIZE(Qt::Key_Multi_key), 0x2243, 0x0338, 0, 0, 0}, 0x2244 }, // U2244 # NOT ASYMPTOTICALLY EQUAL TO
++ { {UNITIZE(Qt::Key_Multi_key), 0x2248, 0x0338, 0, 0, 0}, 0x2249 }, // U2249 # NOT ALMOST EQUAL TO
++ { {UNITIZE(Qt::Key_Multi_key), 0x224d, 0x0338, 0, 0, 0}, 0x226d }, // U226D # NOT EQUIVALENT TO
++ { {UNITIZE(Qt::Key_Multi_key), 0x2261, 0x0338, 0, 0, 0}, 0x2262 }, // U2262 # NOT IDENTICAL TO
++ { {UNITIZE(Qt::Key_Multi_key), 0x2264, 0x0338, 0, 0, 0}, 0x2270 }, // U2270 # NEITHER LESS-THAN NOR EQUAL TO
++ { {UNITIZE(Qt::Key_Multi_key), 0x2265, 0x0338, 0, 0, 0}, 0x2271 }, // U2271 # NEITHER GREATER-THAN NOR EQUAL TO
++ { {UNITIZE(Qt::Key_Multi_key), 0x2272, 0x0338, 0, 0, 0}, 0x2274 }, // U2274 # NEITHER LESS-THAN NOR EQUIVALENT TO
++ { {UNITIZE(Qt::Key_Multi_key), 0x2273, 0x0338, 0, 0, 0}, 0x2275 }, // U2275 # NEITHER GREATER-THAN NOR EQUIVALENT TO
++ { {UNITIZE(Qt::Key_Multi_key), 0x2276, 0x0338, 0, 0, 0}, 0x2278 }, // U2278 # NEITHER LESS-THAN NOR GREATER-THAN
++ { {UNITIZE(Qt::Key_Multi_key), 0x2277, 0x0338, 0, 0, 0}, 0x2279 }, // U2279 # NEITHER GREATER-THAN NOR LESS-THAN
++ { {UNITIZE(Qt::Key_Multi_key), 0x227a, 0x0338, 0, 0, 0}, 0x2280 }, // U2280 # DOES NOT PRECEDE
++ { {UNITIZE(Qt::Key_Multi_key), 0x227b, 0x0338, 0, 0, 0}, 0x2281 }, // U2281 # DOES NOT SUCCEED
++ { {UNITIZE(Qt::Key_Multi_key), 0x227c, 0x0338, 0, 0, 0}, 0x22e0 }, // U22E0 # DOES NOT PRECEDE OR EQUAL
++ { {UNITIZE(Qt::Key_Multi_key), 0x227d, 0x0338, 0, 0, 0}, 0x22e1 }, // U22E1 # DOES NOT SUCCEED OR EQUAL
++ { {UNITIZE(Qt::Key_Multi_key), 0x2282, 0x0338, 0, 0, 0}, 0x2284 }, // U2284 # NOT A SUBSET OF
++ { {UNITIZE(Qt::Key_Multi_key), 0x2282, 0x0338, 0, 0, 0}, 0x2284 }, // U2284 # NOT A SUBSET OF
++ { {UNITIZE(Qt::Key_Multi_key), 0x2283, 0x0338, 0, 0, 0}, 0x2285 }, // U2285 # NOT A SUPERSET OF
++ { {UNITIZE(Qt::Key_Multi_key), 0x2283, 0x0338, 0, 0, 0}, 0x2285 }, // U2285 # NOT A SUPERSET OF
++ { {UNITIZE(Qt::Key_Multi_key), 0x2286, 0x0338, 0, 0, 0}, 0x2288 }, // U2288 # NEITHER A SUBSET OF NOR EQUAL TO
++ { {UNITIZE(Qt::Key_Multi_key), 0x2287, 0x0338, 0, 0, 0}, 0x2289 }, // U2289 # NEITHER A SUPERSET OF NOR EQUAL TO
++ { {UNITIZE(Qt::Key_Multi_key), 0x2291, 0x0338, 0, 0, 0}, 0x22e2 }, // U22E2 # NOT SQUARE IMAGE OF OR EQUAL TO
++ { {UNITIZE(Qt::Key_Multi_key), 0x2292, 0x0338, 0, 0, 0}, 0x22e3 }, // U22E3 # NOT SQUARE ORIGINAL OF OR EQUAL TO
++ { {UNITIZE(Qt::Key_Multi_key), 0x22a3, 0x0338, 0, 0, 0}, 0x22ac }, // U22AC # DOES NOT PROVE
++ { {UNITIZE(Qt::Key_Multi_key), 0x22a8, 0x0338, 0, 0, 0}, 0x22ad }, // U22AD # NOT TRUE
++ { {UNITIZE(Qt::Key_Multi_key), 0x22a9, 0x0338, 0, 0, 0}, 0x22ae }, // U22AE # DOES NOT FORCE
++ { {UNITIZE(Qt::Key_Multi_key), 0x22ab, 0x0338, 0, 0, 0}, 0x22af }, // U22AF # NEGATED DOUBLE VERTICAL BAR DOUBLE RIGHT TURNSTILE
++ { {UNITIZE(Qt::Key_Multi_key), 0x22b2, 0x0338, 0, 0, 0}, 0x22ea }, // U22EA # NOT NORMAL SUBGROUP OF
++ { {UNITIZE(Qt::Key_Multi_key), 0x22b3, 0x0338, 0, 0, 0}, 0x22eb }, // U22EB # DOES NOT CONTAIN AS NORMAL SUBGROUP
++ { {UNITIZE(Qt::Key_Multi_key), 0x22b4, 0x0338, 0, 0, 0}, 0x22ec }, // U22EC # NOT NORMAL SUBGROUP OF OR EQUAL TO
++ { {UNITIZE(Qt::Key_Multi_key), 0x22b5, 0x0338, 0, 0, 0}, 0x22ed }, // U22ED # DOES NOT CONTAIN AS NORMAL SUBGROUP OR EQUAL
++ { {UNITIZE(Qt::Key_Multi_key), 0x2add, 0x0338, 0, 0, 0}, 0x2adc }, // U2ADC # FORKING
++// /* broken */ { {UNITIZE(Qt::Key_Dead_Grave), 0x0000, 0, 0, 0, 0}, 0x1eeb }, // U1EEB # LATIN SMALL LETTER U WITH HORN AND GRAVE
++// /* broken */ { {UNITIZE(Qt::Key_Dead_Grave), 0x0000, 0, 0, 0, 0}, 0x1edd }, // U1EDD # LATIN SMALL LETTER O WITH HORN AND GRAVE
++// /* broken */ { {UNITIZE(Qt::Key_Dead_Grave), 0x0000, 0, 0, 0, 0}, 0x1edc }, // U1EDC # LATIN CAPITAL LETTER O WITH HORN AND GRAVE
++// /* broken */ { {UNITIZE(Qt::Key_Dead_Grave), 0x0000, 0, 0, 0, 0}, 0x1eea }, // U1EEA # LATIN CAPITAL LETTER U WITH HORN AND GRAVE
++ { {UNITIZE(Qt::Key_Dead_Grave), 0x0020, 0, 0, 0, 0}, 0x0060 }, // grave
++ { {UNITIZE(Qt::Key_Dead_Grave), 0x0041, 0, 0, 0, 0}, 0x00c0 }, // U00C0 # LATIN CAPITAL LETTER A WITH GRAVE
++ { {UNITIZE(Qt::Key_Dead_Grave), 0x0045, 0, 0, 0, 0}, 0x00c8 }, // U00C8 # LATIN CAPITAL LETTER E WITH GRAVE
++ { {UNITIZE(Qt::Key_Dead_Grave), 0x0049, 0, 0, 0, 0}, 0x00cc }, // U00CC # LATIN CAPITAL LETTER I WITH GRAVE
++ { {UNITIZE(Qt::Key_Dead_Grave), 0x004e, 0, 0, 0, 0}, 0x01f8 }, // U01F8 # LATIN CAPITAL LETTER N WITH GRAVE
++ { {UNITIZE(Qt::Key_Dead_Grave), 0x004f, 0, 0, 0, 0}, 0x00d2 }, // U00D2 # LATIN CAPITAL LETTER O WITH GRAVE
++ { {UNITIZE(Qt::Key_Dead_Grave), 0x0055, 0, 0, 0, 0}, 0x00d9 }, // U00D9 # LATIN CAPITAL LETTER U WITH GRAVE
++ { {UNITIZE(Qt::Key_Dead_Grave), 0x0057, 0, 0, 0, 0}, 0x1e80 }, // U1E80 # LATIN CAPITAL LETTER W WITH GRAVE
++ { {UNITIZE(Qt::Key_Dead_Grave), 0x0059, 0, 0, 0, 0}, 0x1ef2 }, // U1EF2 # LATIN CAPITAL LETTER Y WITH GRAVE
++ { {UNITIZE(Qt::Key_Dead_Grave), 0x0061, 0, 0, 0, 0}, 0x00e0 }, // U00E0 # LATIN SMALL LETTER A WITH GRAVE
++ { {UNITIZE(Qt::Key_Dead_Grave), 0x0065, 0, 0, 0, 0}, 0x00e8 }, // U00E8 # LATIN SMALL LETTER E WITH GRAVE
++ { {UNITIZE(Qt::Key_Dead_Grave), 0x0069, 0, 0, 0, 0}, 0x00ec }, // U00EC # LATIN SMALL LETTER I WITH GRAVE
++ { {UNITIZE(Qt::Key_Dead_Grave), 0x006e, 0, 0, 0, 0}, 0x01f9 }, // U01F9 # LATIN SMALL LETTER N WITH GRAVE
++ { {UNITIZE(Qt::Key_Dead_Grave), 0x006f, 0, 0, 0, 0}, 0x00f2 }, // U00F2 # LATIN SMALL LETTER O WITH GRAVE
++ { {UNITIZE(Qt::Key_Dead_Grave), 0x0075, 0, 0, 0, 0}, 0x00f9 }, // U00F9 # LATIN SMALL LETTER U WITH GRAVE
++ { {UNITIZE(Qt::Key_Dead_Grave), 0x0077, 0, 0, 0, 0}, 0x1e81 }, // U1E81 # LATIN SMALL LETTER W WITH GRAVE
++ { {UNITIZE(Qt::Key_Dead_Grave), 0x0079, 0, 0, 0, 0}, 0x1ef3 }, // U1EF3 # LATIN SMALL LETTER Y WITH GRAVE
++ { {UNITIZE(Qt::Key_Dead_Grave), 0x00c2, 0, 0, 0, 0}, 0x1ea6 }, // U1EA6 # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND GRAVE
++ { {UNITIZE(Qt::Key_Dead_Grave), 0x00ca, 0, 0, 0, 0}, 0x1ec0 }, // U1EC0 # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND GRAVE
++ { {UNITIZE(Qt::Key_Dead_Grave), 0x00d4, 0, 0, 0, 0}, 0x1ed2 }, // U1ED2 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND GRAVE
++ { {UNITIZE(Qt::Key_Dead_Grave), 0x00dc, 0, 0, 0, 0}, 0x01db }, // U01DB # LATIN CAPITAL LETTER U WITH DIAERESIS AND GRAVE
++ { {UNITIZE(Qt::Key_Dead_Grave), 0x00e2, 0, 0, 0, 0}, 0x1ea7 }, // U1EA7 # LATIN SMALL LETTER A WITH CIRCUMFLEX AND GRAVE
++ { {UNITIZE(Qt::Key_Dead_Grave), 0x00ea, 0, 0, 0, 0}, 0x1ec1 }, // U1EC1 # LATIN SMALL LETTER E WITH CIRCUMFLEX AND GRAVE
++ { {UNITIZE(Qt::Key_Dead_Grave), 0x00f4, 0, 0, 0, 0}, 0x1ed3 }, // U1ED3 # LATIN SMALL LETTER O WITH CIRCUMFLEX AND GRAVE
++ { {UNITIZE(Qt::Key_Dead_Grave), 0x00fc, 0, 0, 0, 0}, 0x01dc }, // U01DC # LATIN SMALL LETTER U WITH DIAERESIS AND GRAVE
++ { {UNITIZE(Qt::Key_Dead_Grave), 0x0102, 0, 0, 0, 0}, 0x1eb0 }, // U1EB0 # LATIN CAPITAL LETTER A WITH BREVE AND GRAVE
++ { {UNITIZE(Qt::Key_Dead_Grave), 0x0103, 0, 0, 0, 0}, 0x1eb1 }, // U1EB1 # LATIN SMALL LETTER A WITH BREVE AND GRAVE
++ { {UNITIZE(Qt::Key_Dead_Grave), 0x0112, 0, 0, 0, 0}, 0x1e14 }, // U1E14 # LATIN CAPITAL LETTER E WITH MACRON AND GRAVE
++ { {UNITIZE(Qt::Key_Dead_Grave), 0x0113, 0, 0, 0, 0}, 0x1e15 }, // U1E15 # LATIN SMALL LETTER E WITH MACRON AND GRAVE
++ { {UNITIZE(Qt::Key_Dead_Grave), 0x014c, 0, 0, 0, 0}, 0x1e50 }, // U1E50 # LATIN CAPITAL LETTER O WITH MACRON AND GRAVE
++ { {UNITIZE(Qt::Key_Dead_Grave), 0x014d, 0, 0, 0, 0}, 0x1e51 }, // U1E51 # LATIN SMALL LETTER O WITH MACRON AND GRAVE
++ { {UNITIZE(Qt::Key_Dead_Grave), 0x01A0, 0, 0, 0, 0}, 0x1edc }, // U1EDC # LATIN CAPITAL LETTER O WITH HORN AND GRAVE
++ { {UNITIZE(Qt::Key_Dead_Grave), 0x01A1, 0, 0, 0, 0}, 0x1edd }, // U1EDD # LATIN SMALL LETTER O WITH HORN AND GRAVE
++ { {UNITIZE(Qt::Key_Dead_Grave), 0x01AF, 0, 0, 0, 0}, 0x1eea }, // U1EEA # LATIN CAPITAL LETTER U WITH HORN AND GRAVE
++ { {UNITIZE(Qt::Key_Dead_Grave), 0x01B0, 0, 0, 0, 0}, 0x1eeb }, // U1EEB # LATIN SMALL LETTER U WITH HORN AND GRAVE
++ { {UNITIZE(Qt::Key_Dead_Grave), 0x0313, 0x0391, 0, 0, 0}, 0x1f0a }, // U1F0A # GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA
++ { {UNITIZE(Qt::Key_Dead_Grave), 0x0313, 0x0395, 0, 0, 0}, 0x1f1a }, // U1F1A # GREEK CAPITAL LETTER EPSILON WITH PSILI AND VARIA
++ { {UNITIZE(Qt::Key_Dead_Grave), 0x0313, 0x0397, 0, 0, 0}, 0x1f2a }, // U1F2A # GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA
++ { {UNITIZE(Qt::Key_Dead_Grave), 0x0313, 0x0399, 0, 0, 0}, 0x1f3a }, // U1F3A # GREEK CAPITAL LETTER IOTA WITH PSILI AND VARIA
++ { {UNITIZE(Qt::Key_Dead_Grave), 0x0313, 0x039f, 0, 0, 0}, 0x1f4a }, // U1F4A # GREEK CAPITAL LETTER OMICRON WITH PSILI AND VARIA
++ { {UNITIZE(Qt::Key_Dead_Grave), 0x0313, 0x03a9, 0, 0, 0}, 0x1f6a }, // U1F6A # GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA
++ { {UNITIZE(Qt::Key_Dead_Grave), 0x0313, 0x03b1, 0, 0, 0}, 0x1f02 }, // U1F02 # GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA
++ { {UNITIZE(Qt::Key_Dead_Grave), 0x0313, 0x03b5, 0, 0, 0}, 0x1f12 }, // U1F12 # GREEK SMALL LETTER EPSILON WITH PSILI AND VARIA
++ { {UNITIZE(Qt::Key_Dead_Grave), 0x0313, 0x03b7, 0, 0, 0}, 0x1f22 }, // U1F22 # GREEK SMALL LETTER ETA WITH PSILI AND VARIA
++ { {UNITIZE(Qt::Key_Dead_Grave), 0x0313, 0x03b9, 0, 0, 0}, 0x1f32 }, // U1F32 # GREEK SMALL LETTER IOTA WITH PSILI AND VARIA
++ { {UNITIZE(Qt::Key_Dead_Grave), 0x0313, 0x03bf, 0, 0, 0}, 0x1f42 }, // U1F42 # GREEK SMALL LETTER OMICRON WITH PSILI AND VARIA
++ { {UNITIZE(Qt::Key_Dead_Grave), 0x0313, 0x03c5, 0, 0, 0}, 0x1f52 }, // U1F52 # GREEK SMALL LETTER UPSILON WITH PSILI AND VARIA
++ { {UNITIZE(Qt::Key_Dead_Grave), 0x0313, 0x03c9, 0, 0, 0}, 0x1f62 }, // U1F62 # GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA
++ { {UNITIZE(Qt::Key_Dead_Grave), 0x0314, 0x0391, 0, 0, 0}, 0x1f0b }, // U1F0B # GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA
++ { {UNITIZE(Qt::Key_Dead_Grave), 0x0314, 0x0395, 0, 0, 0}, 0x1f1b }, // U1F1B # GREEK CAPITAL LETTER EPSILON WITH DASIA AND VARIA
++ { {UNITIZE(Qt::Key_Dead_Grave), 0x0314, 0x0397, 0, 0, 0}, 0x1f2b }, // U1F2B # GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA
++ { {UNITIZE(Qt::Key_Dead_Grave), 0x0314, 0x0399, 0, 0, 0}, 0x1f3b }, // U1F3B # GREEK CAPITAL LETTER IOTA WITH DASIA AND VARIA
++ { {UNITIZE(Qt::Key_Dead_Grave), 0x0314, 0x039f, 0, 0, 0}, 0x1f4b }, // U1F4B # GREEK CAPITAL LETTER OMICRON WITH DASIA AND VARIA
++ { {UNITIZE(Qt::Key_Dead_Grave), 0x0314, 0x03a5, 0, 0, 0}, 0x1f5b }, // U1F5B # GREEK CAPITAL LETTER UPSILON WITH DASIA AND VARIA
++ { {UNITIZE(Qt::Key_Dead_Grave), 0x0314, 0x03a9, 0, 0, 0}, 0x1f6b }, // U1F6B # GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA
++ { {UNITIZE(Qt::Key_Dead_Grave), 0x0314, 0x03b1, 0, 0, 0}, 0x1f03 }, // U1F03 # GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA
++ { {UNITIZE(Qt::Key_Dead_Grave), 0x0314, 0x03b5, 0, 0, 0}, 0x1f13 }, // U1F13 # GREEK SMALL LETTER EPSILON WITH DASIA AND VARIA
++ { {UNITIZE(Qt::Key_Dead_Grave), 0x0314, 0x03b7, 0, 0, 0}, 0x1f23 }, // U1F23 # GREEK SMALL LETTER ETA WITH DASIA AND VARIA
++ { {UNITIZE(Qt::Key_Dead_Grave), 0x0314, 0x03b9, 0, 0, 0}, 0x1f33 }, // U1F33 # GREEK SMALL LETTER IOTA WITH DASIA AND VARIA
++ { {UNITIZE(Qt::Key_Dead_Grave), 0x0314, 0x03bf, 0, 0, 0}, 0x1f43 }, // U1F43 # GREEK SMALL LETTER OMICRON WITH DASIA AND VARIA
++ { {UNITIZE(Qt::Key_Dead_Grave), 0x0314, 0x03c5, 0, 0, 0}, 0x1f53 }, // U1F53 # GREEK SMALL LETTER UPSILON WITH DASIA AND VARIA
++ { {UNITIZE(Qt::Key_Dead_Grave), 0x0314, 0x03c9, 0, 0, 0}, 0x1f63 }, // U1F63 # GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA
++ { {UNITIZE(Qt::Key_Dead_Grave), 0x0391, 0, 0, 0, 0}, 0x1fba }, // U1FBA # GREEK CAPITAL LETTER ALPHA WITH VARIA
++ { {UNITIZE(Qt::Key_Dead_Grave), 0x0395, 0, 0, 0, 0}, 0x1fc8 }, // U1FC8 # GREEK CAPITAL LETTER EPSILON WITH VARIA
++ { {UNITIZE(Qt::Key_Dead_Grave), 0x0397, 0, 0, 0, 0}, 0x1fca }, // U1FCA # GREEK CAPITAL LETTER ETA WITH VARIA
++ { {UNITIZE(Qt::Key_Dead_Grave), 0x0399, 0, 0, 0, 0}, 0x1fda }, // U1FDA # GREEK CAPITAL LETTER IOTA WITH VARIA
++ { {UNITIZE(Qt::Key_Dead_Grave), 0x039f, 0, 0, 0, 0}, 0x1ff8 }, // U1FF8 # GREEK CAPITAL LETTER OMICRON WITH VARIA
++ { {UNITIZE(Qt::Key_Dead_Grave), 0x03a5, 0, 0, 0, 0}, 0x1fea }, // U1FEA # GREEK CAPITAL LETTER UPSILON WITH VARIA
++ { {UNITIZE(Qt::Key_Dead_Grave), 0x03a9, 0, 0, 0, 0}, 0x1ffa }, // U1FFA # GREEK CAPITAL LETTER OMEGA WITH VARIA
++ { {UNITIZE(Qt::Key_Dead_Grave), 0x03b1, 0, 0, 0, 0}, 0x1f70 }, // U1F70 # GREEK SMALL LETTER ALPHA WITH VARIA
++ { {UNITIZE(Qt::Key_Dead_Grave), 0x03b5, 0, 0, 0, 0}, 0x1f72 }, // U1F72 # GREEK SMALL LETTER EPSILON WITH VARIA
++ { {UNITIZE(Qt::Key_Dead_Grave), 0x03b7, 0, 0, 0, 0}, 0x1f74 }, // U1F74 # GREEK SMALL LETTER ETA WITH VARIA
++ { {UNITIZE(Qt::Key_Dead_Grave), 0x03b9, 0, 0, 0, 0}, 0x1f76 }, // U1F76 # GREEK SMALL LETTER IOTA WITH VARIA
++ { {UNITIZE(Qt::Key_Dead_Grave), 0x03bf, 0, 0, 0, 0}, 0x1f78 }, // U1F78 # GREEK SMALL LETTER OMICRON WITH VARIA
++ { {UNITIZE(Qt::Key_Dead_Grave), 0x03c5, 0, 0, 0, 0}, 0x1f7a }, // U1F7A # GREEK SMALL LETTER UPSILON WITH VARIA
++ { {UNITIZE(Qt::Key_Dead_Grave), 0x03c9, 0, 0, 0, 0}, 0x1f7c }, // U1F7C # GREEK SMALL LETTER OMEGA WITH VARIA
++ { {UNITIZE(Qt::Key_Dead_Grave), 0x03ca, 0, 0, 0, 0}, 0x1fd2 }, // U1FD2 # GREEK SMALL LETTER IOTA WITH DIALYTIKA AND VARIA
++ { {UNITIZE(Qt::Key_Dead_Grave), 0x03cb, 0, 0, 0, 0}, 0x1fe2 }, // U1FE2 # GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND VARIA
++ { {UNITIZE(Qt::Key_Dead_Grave), 0x0415, 0, 0, 0, 0}, 0x0400 }, // U0400 # CYRILLIC CAPITAL LETTER IE WITH GRAVE
++ { {UNITIZE(Qt::Key_Dead_Grave), 0x0418, 0, 0, 0, 0}, 0x040d }, // U040D # CYRILLIC CAPITAL LETTER I WITH GRAVE
++ { {UNITIZE(Qt::Key_Dead_Grave), 0x0435, 0, 0, 0, 0}, 0x0450 }, // U0450 # CYRILLIC SMALL LETTER IE WITH GRAVE
++ { {UNITIZE(Qt::Key_Dead_Grave), 0x0438, 0, 0, 0, 0}, 0x045d }, // U045D # CYRILLIC SMALL LETTER I WITH GRAVE
++ { {UNITIZE(Qt::Key_Dead_Grave), 0x1f00, 0, 0, 0, 0}, 0x1f02 }, // U1F02 # GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA
++ { {UNITIZE(Qt::Key_Dead_Grave), 0x1f01, 0, 0, 0, 0}, 0x1f03 }, // U1F03 # GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA
++ { {UNITIZE(Qt::Key_Dead_Grave), 0x1f08, 0, 0, 0, 0}, 0x1f0a }, // U1F0A # GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA
++ { {UNITIZE(Qt::Key_Dead_Grave), 0x1f09, 0, 0, 0, 0}, 0x1f0b }, // U1F0B # GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA
++ { {UNITIZE(Qt::Key_Dead_Grave), 0x1f10, 0, 0, 0, 0}, 0x1f12 }, // U1F12 # GREEK SMALL LETTER EPSILON WITH PSILI AND VARIA
++ { {UNITIZE(Qt::Key_Dead_Grave), 0x1f11, 0, 0, 0, 0}, 0x1f13 }, // U1F13 # GREEK SMALL LETTER EPSILON WITH DASIA AND VARIA
++ { {UNITIZE(Qt::Key_Dead_Grave), 0x1f18, 0, 0, 0, 0}, 0x1f1a }, // U1F1A # GREEK CAPITAL LETTER EPSILON WITH PSILI AND VARIA
++ { {UNITIZE(Qt::Key_Dead_Grave), 0x1f19, 0, 0, 0, 0}, 0x1f1b }, // U1F1B # GREEK CAPITAL LETTER EPSILON WITH DASIA AND VARIA
++ { {UNITIZE(Qt::Key_Dead_Grave), 0x1f20, 0, 0, 0, 0}, 0x1f22 }, // U1F22 # GREEK SMALL LETTER ETA WITH PSILI AND VARIA
++ { {UNITIZE(Qt::Key_Dead_Grave), 0x1f21, 0, 0, 0, 0}, 0x1f23 }, // U1F23 # GREEK SMALL LETTER ETA WITH DASIA AND VARIA
++ { {UNITIZE(Qt::Key_Dead_Grave), 0x1f28, 0, 0, 0, 0}, 0x1f2a }, // U1F2A # GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA
++ { {UNITIZE(Qt::Key_Dead_Grave), 0x1f29, 0, 0, 0, 0}, 0x1f2b }, // U1F2B # GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA
++ { {UNITIZE(Qt::Key_Dead_Grave), 0x1f30, 0, 0, 0, 0}, 0x1f32 }, // U1F32 # GREEK SMALL LETTER IOTA WITH PSILI AND VARIA
++ { {UNITIZE(Qt::Key_Dead_Grave), 0x1f31, 0, 0, 0, 0}, 0x1f33 }, // U1F33 # GREEK SMALL LETTER IOTA WITH DASIA AND VARIA
++ { {UNITIZE(Qt::Key_Dead_Grave), 0x1f38, 0, 0, 0, 0}, 0x1f3a }, // U1F3A # GREEK CAPITAL LETTER IOTA WITH PSILI AND VARIA
++ { {UNITIZE(Qt::Key_Dead_Grave), 0x1f39, 0, 0, 0, 0}, 0x1f3b }, // U1F3B # GREEK CAPITAL LETTER IOTA WITH DASIA AND VARIA
++ { {UNITIZE(Qt::Key_Dead_Grave), 0x1f40, 0, 0, 0, 0}, 0x1f42 }, // U1F42 # GREEK SMALL LETTER OMICRON WITH PSILI AND VARIA
++ { {UNITIZE(Qt::Key_Dead_Grave), 0x1f41, 0, 0, 0, 0}, 0x1f43 }, // U1F43 # GREEK SMALL LETTER OMICRON WITH DASIA AND VARIA
++ { {UNITIZE(Qt::Key_Dead_Grave), 0x1f48, 0, 0, 0, 0}, 0x1f4a }, // U1F4A # GREEK CAPITAL LETTER OMICRON WITH PSILI AND VARIA
++ { {UNITIZE(Qt::Key_Dead_Grave), 0x1f49, 0, 0, 0, 0}, 0x1f4b }, // U1F4B # GREEK CAPITAL LETTER OMICRON WITH DASIA AND VARIA
++ { {UNITIZE(Qt::Key_Dead_Grave), 0x1f50, 0, 0, 0, 0}, 0x1f52 }, // U1F52 # GREEK SMALL LETTER UPSILON WITH PSILI AND VARIA
++ { {UNITIZE(Qt::Key_Dead_Grave), 0x1f51, 0, 0, 0, 0}, 0x1f53 }, // U1F53 # GREEK SMALL LETTER UPSILON WITH DASIA AND VARIA
++ { {UNITIZE(Qt::Key_Dead_Grave), 0x1f59, 0, 0, 0, 0}, 0x1f5b }, // U1F5B # GREEK CAPITAL LETTER UPSILON WITH DASIA AND VARIA
++ { {UNITIZE(Qt::Key_Dead_Grave), 0x1f60, 0, 0, 0, 0}, 0x1f62 }, // U1F62 # GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA
++ { {UNITIZE(Qt::Key_Dead_Grave), 0x1f61, 0, 0, 0, 0}, 0x1f63 }, // U1F63 # GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA
++ { {UNITIZE(Qt::Key_Dead_Grave), 0x1f68, 0, 0, 0, 0}, 0x1f6a }, // U1F6A # GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA
++ { {UNITIZE(Qt::Key_Dead_Grave), 0x1f69, 0, 0, 0, 0}, 0x1f6b }, // U1F6B # GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA
++ { {UNITIZE(Qt::Key_Dead_Grave), UNITIZE(Qt::Key_Multi_key), 0x0022, 0x0055, 0, 0}, 0x01db }, // U01DB # LATIN CAPITAL LETTER U WITH DIAERESIS AND GRAVE
++ { {UNITIZE(Qt::Key_Dead_Grave), UNITIZE(Qt::Key_Multi_key), 0x0022, 0x0075, 0, 0}, 0x01dc }, // U01DC # LATIN SMALL LETTER U WITH DIAERESIS AND GRAVE
++ { {UNITIZE(Qt::Key_Dead_Grave), UNITIZE(Qt::Key_Multi_key), 0x0022, 0x03b9, 0, 0}, 0x1fd2 }, // U1FD2 # GREEK SMALL LETTER IOTA WITH DIALYTIKA AND VARIA
++ { {UNITIZE(Qt::Key_Dead_Grave), UNITIZE(Qt::Key_Multi_key), 0x0022, 0x03c5, 0, 0}, 0x1fe2 }, // U1FE2 # GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND VARIA
++ { {UNITIZE(Qt::Key_Dead_Grave), UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0391, 0, 0}, 0x1f0b }, // U1F0B # GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA
++ { {UNITIZE(Qt::Key_Dead_Grave), UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0395, 0, 0}, 0x1f1b }, // U1F1B # GREEK CAPITAL LETTER EPSILON WITH DASIA AND VARIA
++ { {UNITIZE(Qt::Key_Dead_Grave), UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0397, 0, 0}, 0x1f2b }, // U1F2B # GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA
++ { {UNITIZE(Qt::Key_Dead_Grave), UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0399, 0, 0}, 0x1f3b }, // U1F3B # GREEK CAPITAL LETTER IOTA WITH DASIA AND VARIA
++ { {UNITIZE(Qt::Key_Dead_Grave), UNITIZE(Qt::Key_Multi_key), 0x0028, 0x039f, 0, 0}, 0x1f4b }, // U1F4B # GREEK CAPITAL LETTER OMICRON WITH DASIA AND VARIA
++ { {UNITIZE(Qt::Key_Dead_Grave), UNITIZE(Qt::Key_Multi_key), 0x0028, 0x03a5, 0, 0}, 0x1f5b }, // U1F5B # GREEK CAPITAL LETTER UPSILON WITH DASIA AND VARIA
++ { {UNITIZE(Qt::Key_Dead_Grave), UNITIZE(Qt::Key_Multi_key), 0x0028, 0x03a9, 0, 0}, 0x1f6b }, // U1F6B # GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA
++ { {UNITIZE(Qt::Key_Dead_Grave), UNITIZE(Qt::Key_Multi_key), 0x0028, 0x03b1, 0, 0}, 0x1f03 }, // U1F03 # GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA
++ { {UNITIZE(Qt::Key_Dead_Grave), UNITIZE(Qt::Key_Multi_key), 0x0028, 0x03b5, 0, 0}, 0x1f13 }, // U1F13 # GREEK SMALL LETTER EPSILON WITH DASIA AND VARIA
++ { {UNITIZE(Qt::Key_Dead_Grave), UNITIZE(Qt::Key_Multi_key), 0x0028, 0x03b7, 0, 0}, 0x1f23 }, // U1F23 # GREEK SMALL LETTER ETA WITH DASIA AND VARIA
++ { {UNITIZE(Qt::Key_Dead_Grave), UNITIZE(Qt::Key_Multi_key), 0x0028, 0x03b9, 0, 0}, 0x1f33 }, // U1F33 # GREEK SMALL LETTER IOTA WITH DASIA AND VARIA
++ { {UNITIZE(Qt::Key_Dead_Grave), UNITIZE(Qt::Key_Multi_key), 0x0028, 0x03bf, 0, 0}, 0x1f43 }, // U1F43 # GREEK SMALL LETTER OMICRON WITH DASIA AND VARIA
++ { {UNITIZE(Qt::Key_Dead_Grave), UNITIZE(Qt::Key_Multi_key), 0x0028, 0x03c5, 0, 0}, 0x1f53 }, // U1F53 # GREEK SMALL LETTER UPSILON WITH DASIA AND VARIA
++ { {UNITIZE(Qt::Key_Dead_Grave), UNITIZE(Qt::Key_Multi_key), 0x0028, 0x03c9, 0, 0}, 0x1f63 }, // U1F63 # GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA
++ { {UNITIZE(Qt::Key_Dead_Grave), UNITIZE(Qt::Key_Multi_key), 0x0029, 0x0391, 0, 0}, 0x1f0a }, // U1F0A # GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA
++ { {UNITIZE(Qt::Key_Dead_Grave), UNITIZE(Qt::Key_Multi_key), 0x0029, 0x0395, 0, 0}, 0x1f1a }, // U1F1A # GREEK CAPITAL LETTER EPSILON WITH PSILI AND VARIA
++ { {UNITIZE(Qt::Key_Dead_Grave), UNITIZE(Qt::Key_Multi_key), 0x0029, 0x0397, 0, 0}, 0x1f2a }, // U1F2A # GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA
++ { {UNITIZE(Qt::Key_Dead_Grave), UNITIZE(Qt::Key_Multi_key), 0x0029, 0x0399, 0, 0}, 0x1f3a }, // U1F3A # GREEK CAPITAL LETTER IOTA WITH PSILI AND VARIA
++ { {UNITIZE(Qt::Key_Dead_Grave), UNITIZE(Qt::Key_Multi_key), 0x0029, 0x039f, 0, 0}, 0x1f4a }, // U1F4A # GREEK CAPITAL LETTER OMICRON WITH PSILI AND VARIA
++ { {UNITIZE(Qt::Key_Dead_Grave), UNITIZE(Qt::Key_Multi_key), 0x0029, 0x03a9, 0, 0}, 0x1f6a }, // U1F6A # GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA
++ { {UNITIZE(Qt::Key_Dead_Grave), UNITIZE(Qt::Key_Multi_key), 0x0029, 0x03b1, 0, 0}, 0x1f02 }, // U1F02 # GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA
++ { {UNITIZE(Qt::Key_Dead_Grave), UNITIZE(Qt::Key_Multi_key), 0x0029, 0x03b5, 0, 0}, 0x1f12 }, // U1F12 # GREEK SMALL LETTER EPSILON WITH PSILI AND VARIA
++ { {UNITIZE(Qt::Key_Dead_Grave), UNITIZE(Qt::Key_Multi_key), 0x0029, 0x03b7, 0, 0}, 0x1f22 }, // U1F22 # GREEK SMALL LETTER ETA WITH PSILI AND VARIA
++ { {UNITIZE(Qt::Key_Dead_Grave), UNITIZE(Qt::Key_Multi_key), 0x0029, 0x03b9, 0, 0}, 0x1f32 }, // U1F32 # GREEK SMALL LETTER IOTA WITH PSILI AND VARIA
++ { {UNITIZE(Qt::Key_Dead_Grave), UNITIZE(Qt::Key_Multi_key), 0x0029, 0x03bf, 0, 0}, 0x1f42 }, // U1F42 # GREEK SMALL LETTER OMICRON WITH PSILI AND VARIA
++ { {UNITIZE(Qt::Key_Dead_Grave), UNITIZE(Qt::Key_Multi_key), 0x0029, 0x03c5, 0, 0}, 0x1f52 }, // U1F52 # GREEK SMALL LETTER UPSILON WITH PSILI AND VARIA
++ { {UNITIZE(Qt::Key_Dead_Grave), UNITIZE(Qt::Key_Multi_key), 0x0029, 0x03c9, 0, 0}, 0x1f62 }, // U1F62 # GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA
++ { {UNITIZE(Qt::Key_Dead_Grave), UNITIZE(Qt::Key_Multi_key), 0x002b, 0x004f, 0, 0}, 0x1edc }, // U1EDC # LATIN CAPITAL LETTER O WITH HORN AND GRAVE
++ { {UNITIZE(Qt::Key_Dead_Grave), UNITIZE(Qt::Key_Multi_key), 0x002b, 0x0055, 0, 0}, 0x1eea }, // U1EEA # LATIN CAPITAL LETTER U WITH HORN AND GRAVE
++ { {UNITIZE(Qt::Key_Dead_Grave), UNITIZE(Qt::Key_Multi_key), 0x002b, 0x006f, 0, 0}, 0x1edd }, // U1EDD # LATIN SMALL LETTER O WITH HORN AND GRAVE
++ { {UNITIZE(Qt::Key_Dead_Grave), UNITIZE(Qt::Key_Multi_key), 0x002b, 0x0075, 0, 0}, 0x1eeb }, // U1EEB # LATIN SMALL LETTER U WITH HORN AND GRAVE
++ { {UNITIZE(Qt::Key_Dead_Grave), UNITIZE(Qt::Key_Multi_key), 0x0055, 0x0041, 0, 0}, 0x1eb0 }, // U1EB0 # LATIN CAPITAL LETTER A WITH BREVE AND GRAVE
++ { {UNITIZE(Qt::Key_Dead_Grave), UNITIZE(Qt::Key_Multi_key), 0x0055, 0x0061, 0, 0}, 0x1eb1 }, // U1EB1 # LATIN SMALL LETTER A WITH BREVE AND GRAVE
++ { {UNITIZE(Qt::Key_Dead_Grave), UNITIZE(Qt::Key_Multi_key), 0x005e, 0x0041, 0, 0}, 0x1ea6 }, // U1EA6 # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND GRAVE
++ { {UNITIZE(Qt::Key_Dead_Grave), UNITIZE(Qt::Key_Multi_key), 0x005e, 0x0045, 0, 0}, 0x1ec0 }, // U1EC0 # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND GRAVE
++ { {UNITIZE(Qt::Key_Dead_Grave), UNITIZE(Qt::Key_Multi_key), 0x005e, 0x004f, 0, 0}, 0x1ed2 }, // U1ED2 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND GRAVE
++ { {UNITIZE(Qt::Key_Dead_Grave), UNITIZE(Qt::Key_Multi_key), 0x005e, 0x0061, 0, 0}, 0x1ea7 }, // U1EA7 # LATIN SMALL LETTER A WITH CIRCUMFLEX AND GRAVE
++ { {UNITIZE(Qt::Key_Dead_Grave), UNITIZE(Qt::Key_Multi_key), 0x005e, 0x0065, 0, 0}, 0x1ec1 }, // U1EC1 # LATIN SMALL LETTER E WITH CIRCUMFLEX AND GRAVE
++ { {UNITIZE(Qt::Key_Dead_Grave), UNITIZE(Qt::Key_Multi_key), 0x005e, 0x006f, 0, 0}, 0x1ed3 }, // U1ED3 # LATIN SMALL LETTER O WITH CIRCUMFLEX AND GRAVE
++ { {UNITIZE(Qt::Key_Dead_Grave), UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0045, 0, 0}, 0x1e14 }, // U1E14 # LATIN CAPITAL LETTER E WITH MACRON AND GRAVE
++ { {UNITIZE(Qt::Key_Dead_Grave), UNITIZE(Qt::Key_Multi_key), 0x005f, 0x004f, 0, 0}, 0x1e50 }, // U1E50 # LATIN CAPITAL LETTER O WITH MACRON AND GRAVE
++ { {UNITIZE(Qt::Key_Dead_Grave), UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0065, 0, 0}, 0x1e15 }, // U1E15 # LATIN SMALL LETTER E WITH MACRON AND GRAVE
++ { {UNITIZE(Qt::Key_Dead_Grave), UNITIZE(Qt::Key_Multi_key), 0x005f, 0x006f, 0, 0}, 0x1e51 }, // U1E51 # LATIN SMALL LETTER O WITH MACRON AND GRAVE
++ { {UNITIZE(Qt::Key_Dead_Grave), UNITIZE(Qt::Key_Multi_key), 0x0062, 0x0041, 0, 0}, 0x1eb0 }, // U1EB0 # LATIN CAPITAL LETTER A WITH BREVE AND GRAVE
++ { {UNITIZE(Qt::Key_Dead_Grave), UNITIZE(Qt::Key_Multi_key), 0x0062, 0x0061, 0, 0}, 0x1eb1 }, // U1EB1 # LATIN SMALL LETTER A WITH BREVE AND GRAVE
++ { {UNITIZE(Qt::Key_Dead_Grave), UNITIZE(Qt::Key_Multi_key), 0x00af, 0x0045, 0, 0}, 0x1e14 }, // U1E14 # LATIN CAPITAL LETTER E WITH MACRON AND GRAVE
++ { {UNITIZE(Qt::Key_Dead_Grave), UNITIZE(Qt::Key_Multi_key), 0x00af, 0x004f, 0, 0}, 0x1e50 }, // U1E50 # LATIN CAPITAL LETTER O WITH MACRON AND GRAVE
++ { {UNITIZE(Qt::Key_Dead_Grave), UNITIZE(Qt::Key_Multi_key), 0x00af, 0x0065, 0, 0}, 0x1e15 }, // U1E15 # LATIN SMALL LETTER E WITH MACRON AND GRAVE
++ { {UNITIZE(Qt::Key_Dead_Grave), UNITIZE(Qt::Key_Multi_key), 0x00af, 0x006f, 0, 0}, 0x1e51 }, // U1E51 # LATIN SMALL LETTER O WITH MACRON AND GRAVE
++ { {UNITIZE(Qt::Key_Dead_Grave), UNITIZE(Qt::Key_Dead_Grave), 0, 0, 0, 0}, 0x0060 }, // grave
++ { {UNITIZE(Qt::Key_Dead_Grave), UNITIZE(Qt::Key_Dead_Circumflex), 0x0041, 0, 0, 0}, 0x1ea6 }, // U1EA6 # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND GRAVE
++ { {UNITIZE(Qt::Key_Dead_Grave), UNITIZE(Qt::Key_Dead_Circumflex), 0x0045, 0, 0, 0}, 0x1ec0 }, // U1EC0 # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND GRAVE
++ { {UNITIZE(Qt::Key_Dead_Grave), UNITIZE(Qt::Key_Dead_Circumflex), 0x004f, 0, 0, 0}, 0x1ed2 }, // U1ED2 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND GRAVE
++ { {UNITIZE(Qt::Key_Dead_Grave), UNITIZE(Qt::Key_Dead_Circumflex), 0x0061, 0, 0, 0}, 0x1ea7 }, // U1EA7 # LATIN SMALL LETTER A WITH CIRCUMFLEX AND GRAVE
++ { {UNITIZE(Qt::Key_Dead_Grave), UNITIZE(Qt::Key_Dead_Circumflex), 0x0065, 0, 0, 0}, 0x1ec1 }, // U1EC1 # LATIN SMALL LETTER E WITH CIRCUMFLEX AND GRAVE
++ { {UNITIZE(Qt::Key_Dead_Grave), UNITIZE(Qt::Key_Dead_Circumflex), 0x006f, 0, 0, 0}, 0x1ed3 }, // U1ED3 # LATIN SMALL LETTER O WITH CIRCUMFLEX AND GRAVE
++ { {UNITIZE(Qt::Key_Dead_Grave), UNITIZE(Qt::Key_Dead_Macron), 0x0045, 0, 0, 0}, 0x1e14 }, // U1E14 # LATIN CAPITAL LETTER E WITH MACRON AND GRAVE
++ { {UNITIZE(Qt::Key_Dead_Grave), UNITIZE(Qt::Key_Dead_Macron), 0x004f, 0, 0, 0}, 0x1e50 }, // U1E50 # LATIN CAPITAL LETTER O WITH MACRON AND GRAVE
++ { {UNITIZE(Qt::Key_Dead_Grave), UNITIZE(Qt::Key_Dead_Macron), 0x0065, 0, 0, 0}, 0x1e15 }, // U1E15 # LATIN SMALL LETTER E WITH MACRON AND GRAVE
++ { {UNITIZE(Qt::Key_Dead_Grave), UNITIZE(Qt::Key_Dead_Macron), 0x006f, 0, 0, 0}, 0x1e51 }, // U1E51 # LATIN SMALL LETTER O WITH MACRON AND GRAVE
++ { {UNITIZE(Qt::Key_Dead_Grave), UNITIZE(Qt::Key_Dead_Breve), 0x0041, 0, 0, 0}, 0x1eb0 }, // U1EB0 # LATIN CAPITAL LETTER A WITH BREVE AND GRAVE
++ { {UNITIZE(Qt::Key_Dead_Grave), UNITIZE(Qt::Key_Dead_Breve), 0x0061, 0, 0, 0}, 0x1eb1 }, // U1EB1 # LATIN SMALL LETTER A WITH BREVE AND GRAVE
++ { {UNITIZE(Qt::Key_Dead_Grave), UNITIZE(Qt::Key_Dead_Diaeresis), 0x0055, 0, 0, 0}, 0x01db }, // U01DB # LATIN CAPITAL LETTER U WITH DIAERESIS AND GRAVE
++ { {UNITIZE(Qt::Key_Dead_Grave), UNITIZE(Qt::Key_Dead_Diaeresis), 0x0075, 0, 0, 0}, 0x01dc }, // U01DC # LATIN SMALL LETTER U WITH DIAERESIS AND GRAVE
++ { {UNITIZE(Qt::Key_Dead_Grave), UNITIZE(Qt::Key_Dead_Diaeresis), 0x03b9, 0, 0, 0}, 0x1fd2 }, // U1FD2 # GREEK SMALL LETTER IOTA WITH DIALYTIKA AND VARIA
++ { {UNITIZE(Qt::Key_Dead_Grave), UNITIZE(Qt::Key_Dead_Diaeresis), 0x03c5, 0, 0, 0}, 0x1fe2 }, // U1FE2 # GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND VARIA
++ { {UNITIZE(Qt::Key_Dead_Grave), UNITIZE(Qt::Key_Dead_Horn), 0x004f, 0, 0, 0}, 0x1edc }, // U1EDC # LATIN CAPITAL LETTER O WITH HORN AND GRAVE
++ { {UNITIZE(Qt::Key_Dead_Grave), UNITIZE(Qt::Key_Dead_Horn), 0x0055, 0, 0, 0}, 0x1eea }, // U1EEA # LATIN CAPITAL LETTER U WITH HORN AND GRAVE
++ { {UNITIZE(Qt::Key_Dead_Grave), UNITIZE(Qt::Key_Dead_Horn), 0x006f, 0, 0, 0}, 0x1edd }, // U1EDD # LATIN SMALL LETTER O WITH HORN AND GRAVE
++ { {UNITIZE(Qt::Key_Dead_Grave), UNITIZE(Qt::Key_Dead_Horn), 0x0075, 0, 0, 0}, 0x1eeb }, // U1EEB # LATIN SMALL LETTER U WITH HORN AND GRAVE
++// /* broken */ { {UNITIZE(Qt::Key_Dead_Acute), 0x0000, 0, 0, 0, 0}, 0x1eda }, // U1EDA # LATIN CAPITAL LETTER O WITH HORN AND ACUTE
++// /* broken */ { {UNITIZE(Qt::Key_Dead_Acute), 0x0000, 0, 0, 0, 0}, 0x1ee9 }, // U1EE9 # LATIN SMALL LETTER U WITH HORN AND ACUTE
++// /* broken */ { {UNITIZE(Qt::Key_Dead_Acute), 0x0000, 0, 0, 0, 0}, 0x1edb }, // U1EDB # LATIN SMALL LETTER O WITH HORN AND ACUTE
++// /* broken */ { {UNITIZE(Qt::Key_Dead_Acute), 0x0000, 0, 0, 0, 0}, 0x1ee8 }, // U1EE8 # LATIN CAPITAL LETTER U WITH HORN AND ACUTE
++// /* broken */ { {UNITIZE(Qt::Key_Dead_Acute), 0x0000, 0x004f, 0, 0, 0}, 0x1e4c }, // U1E4C # LATIN CAPITAL LETTER O WITH TILDE AND ACUTE
++// /* broken */ { {UNITIZE(Qt::Key_Dead_Acute), 0x0000, 0x0055, 0, 0, 0}, 0x1e78 }, // U1E78 # LATIN CAPITAL LETTER U WITH TILDE AND ACUTE
++// /* broken */ { {UNITIZE(Qt::Key_Dead_Acute), 0x0000, 0x006f, 0, 0, 0}, 0x1e4d }, // U1E4D # LATIN SMALL LETTER O WITH TILDE AND ACUTE
++// /* broken */ { {UNITIZE(Qt::Key_Dead_Acute), 0x0000, 0x0075, 0, 0, 0}, 0x1e79 }, // U1E79 # LATIN SMALL LETTER U WITH TILDE AND ACUTE
++ { {UNITIZE(Qt::Key_Dead_Acute), 0x0020, 0, 0, 0, 0}, 0x0027 }, // apostrophe
++ { {UNITIZE(Qt::Key_Dead_Acute), 0x0041, 0, 0, 0, 0}, 0x00c1 }, // U00C1 # LATIN CAPITAL LETTER A WITH ACUTE
++ { {UNITIZE(Qt::Key_Dead_Acute), 0x0043, 0, 0, 0, 0}, 0x0106 }, // U0106 # LATIN CAPITAL LETTER C WITH ACUTE
++ { {UNITIZE(Qt::Key_Dead_Acute), 0x0045, 0, 0, 0, 0}, 0x00c9 }, // U00C9 # LATIN CAPITAL LETTER E WITH ACUTE
++ { {UNITIZE(Qt::Key_Dead_Acute), 0x0047, 0, 0, 0, 0}, 0x01f4 }, // U01F4 # LATIN CAPITAL LETTER G WITH ACUTE
++ { {UNITIZE(Qt::Key_Dead_Acute), 0x0049, 0, 0, 0, 0}, 0x00cd }, // U00CD # LATIN CAPITAL LETTER I WITH ACUTE
++ { {UNITIZE(Qt::Key_Dead_Acute), 0x004b, 0, 0, 0, 0}, 0x1e30 }, // U1E30 # LATIN CAPITAL LETTER K WITH ACUTE
++ { {UNITIZE(Qt::Key_Dead_Acute), 0x004c, 0, 0, 0, 0}, 0x0139 }, // U0139 # LATIN CAPITAL LETTER L WITH ACUTE
++ { {UNITIZE(Qt::Key_Dead_Acute), 0x004d, 0, 0, 0, 0}, 0x1e3e }, // U1E3E # LATIN CAPITAL LETTER M WITH ACUTE
++ { {UNITIZE(Qt::Key_Dead_Acute), 0x004e, 0, 0, 0, 0}, 0x0143 }, // U0143 # LATIN CAPITAL LETTER N WITH ACUTE
++ { {UNITIZE(Qt::Key_Dead_Acute), 0x004f, 0, 0, 0, 0}, 0x00d3 }, // U00D3 # LATIN CAPITAL LETTER O WITH ACUTE
++ { {UNITIZE(Qt::Key_Dead_Acute), 0x0050, 0, 0, 0, 0}, 0x1e54 }, // U1E54 # LATIN CAPITAL LETTER P WITH ACUTE
++ { {UNITIZE(Qt::Key_Dead_Acute), 0x0052, 0, 0, 0, 0}, 0x0154 }, // U0154 # LATIN CAPITAL LETTER R WITH ACUTE
++ { {UNITIZE(Qt::Key_Dead_Acute), 0x0053, 0, 0, 0, 0}, 0x015a }, // U015A # LATIN CAPITAL LETTER S WITH ACUTE
++ { {UNITIZE(Qt::Key_Dead_Acute), 0x0055, 0, 0, 0, 0}, 0x00da }, // U00DA # LATIN CAPITAL LETTER U WITH ACUTE
++ { {UNITIZE(Qt::Key_Dead_Acute), 0x0057, 0, 0, 0, 0}, 0x1e82 }, // U1E82 # LATIN CAPITAL LETTER W WITH ACUTE
++ { {UNITIZE(Qt::Key_Dead_Acute), 0x0059, 0, 0, 0, 0}, 0x00dd }, // U00DD # LATIN CAPITAL LETTER Y WITH ACUTE
++ { {UNITIZE(Qt::Key_Dead_Acute), 0x005a, 0, 0, 0, 0}, 0x0179 }, // U0179 # LATIN CAPITAL LETTER Z WITH ACUTE
++ { {UNITIZE(Qt::Key_Dead_Acute), 0x0061, 0, 0, 0, 0}, 0x00e1 }, // U00E1 # LATIN SMALL LETTER A WITH ACUTE
++ { {UNITIZE(Qt::Key_Dead_Acute), 0x0063, 0, 0, 0, 0}, 0x0107 }, // U0107 # LATIN SMALL LETTER C WITH ACUTE
++ { {UNITIZE(Qt::Key_Dead_Acute), 0x0065, 0, 0, 0, 0}, 0x00e9 }, // U00E9 # LATIN SMALL LETTER E WITH ACUTE
++ { {UNITIZE(Qt::Key_Dead_Acute), 0x0067, 0, 0, 0, 0}, 0x01f5 }, // U01F5 # LATIN SMALL LETTER G WITH ACUTE
++ { {UNITIZE(Qt::Key_Dead_Acute), 0x0069, 0, 0, 0, 0}, 0x00ed }, // U00ED # LATIN SMALL LETTER I WITH ACUTE
++ { {UNITIZE(Qt::Key_Dead_Acute), 0x006b, 0, 0, 0, 0}, 0x1e31 }, // U1E31 # LATIN SMALL LETTER K WITH ACUTE
++ { {UNITIZE(Qt::Key_Dead_Acute), 0x006c, 0, 0, 0, 0}, 0x013a }, // U013A # LATIN SMALL LETTER L WITH ACUTE
++ { {UNITIZE(Qt::Key_Dead_Acute), 0x006d, 0, 0, 0, 0}, 0x1e3f }, // U1E3F # LATIN SMALL LETTER M WITH ACUTE
++ { {UNITIZE(Qt::Key_Dead_Acute), 0x006e, 0, 0, 0, 0}, 0x0144 }, // U0144 # LATIN SMALL LETTER N WITH ACUTE
++ { {UNITIZE(Qt::Key_Dead_Acute), 0x006f, 0, 0, 0, 0}, 0x00f3 }, // U00F3 # LATIN SMALL LETTER O WITH ACUTE
++ { {UNITIZE(Qt::Key_Dead_Acute), 0x0070, 0, 0, 0, 0}, 0x1e55 }, // U1E55 # LATIN SMALL LETTER P WITH ACUTE
++ { {UNITIZE(Qt::Key_Dead_Acute), 0x0072, 0, 0, 0, 0}, 0x0155 }, // U0155 # LATIN SMALL LETTER R WITH ACUTE
++ { {UNITIZE(Qt::Key_Dead_Acute), 0x0073, 0, 0, 0, 0}, 0x015b }, // U015B # LATIN SMALL LETTER S WITH ACUTE
++ { {UNITIZE(Qt::Key_Dead_Acute), 0x0075, 0, 0, 0, 0}, 0x00fa }, // U00FA # LATIN SMALL LETTER U WITH ACUTE
++ { {UNITIZE(Qt::Key_Dead_Acute), 0x0077, 0, 0, 0, 0}, 0x1e83 }, // U1E83 # LATIN SMALL LETTER W WITH ACUTE
++ { {UNITIZE(Qt::Key_Dead_Acute), 0x0079, 0, 0, 0, 0}, 0x00fd }, // U00FD # LATIN SMALL LETTER Y WITH ACUTE
++ { {UNITIZE(Qt::Key_Dead_Acute), 0x007a, 0, 0, 0, 0}, 0x017a }, // U017A # LATIN SMALL LETTER Z WITH ACUTE
++ { {UNITIZE(Qt::Key_Dead_Acute), 0x00c2, 0, 0, 0, 0}, 0x1ea4 }, // U1EA4 # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND ACUTE
++ { {UNITIZE(Qt::Key_Dead_Acute), 0x00c5, 0, 0, 0, 0}, 0x01fa }, // U01FA # LATIN CAPITAL LETTER A WITH RING ABOVE AND ACUTE
++ { {UNITIZE(Qt::Key_Dead_Acute), 0x00c6, 0, 0, 0, 0}, 0x01fc }, // U01FC # LATIN CAPITAL LETTER AE WITH ACUTE
++ { {UNITIZE(Qt::Key_Dead_Acute), 0x00c7, 0, 0, 0, 0}, 0x1e08 }, // U1E08 # LATIN CAPITAL LETTER C WITH CEDILLA AND ACUTE
++ { {UNITIZE(Qt::Key_Dead_Acute), 0x00ca, 0, 0, 0, 0}, 0x1ebe }, // U1EBE # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND ACUTE
++ { {UNITIZE(Qt::Key_Dead_Acute), 0x00cf, 0, 0, 0, 0}, 0x1e2e }, // U1E2E # LATIN CAPITAL LETTER I WITH DIAERESIS AND ACUTE
++ { {UNITIZE(Qt::Key_Dead_Acute), 0x00d4, 0, 0, 0, 0}, 0x1ed0 }, // U1ED0 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND ACUTE
++ { {UNITIZE(Qt::Key_Dead_Acute), 0x00d5, 0, 0, 0, 0}, 0x1e4c }, // U1E4C # LATIN CAPITAL LETTER O WITH TILDE AND ACUTE
++ { {UNITIZE(Qt::Key_Dead_Acute), 0x00d8, 0, 0, 0, 0}, 0x01fe }, // U01FE # LATIN CAPITAL LETTER O WITH STROKE AND ACUTE
++ { {UNITIZE(Qt::Key_Dead_Acute), 0x00dc, 0, 0, 0, 0}, 0x01d7 }, // U01D7 # LATIN CAPITAL LETTER U WITH DIAERESIS AND ACUTE
++ { {UNITIZE(Qt::Key_Dead_Acute), 0x00e2, 0, 0, 0, 0}, 0x1ea5 }, // U1EA5 # LATIN SMALL LETTER A WITH CIRCUMFLEX AND ACUTE
++ { {UNITIZE(Qt::Key_Dead_Acute), 0x00e5, 0, 0, 0, 0}, 0x01fb }, // U01FB # LATIN SMALL LETTER A WITH RING ABOVE AND ACUTE
++ { {UNITIZE(Qt::Key_Dead_Acute), 0x00e6, 0, 0, 0, 0}, 0x01fd }, // U01FD # LATIN SMALL LETTER AE WITH ACUTE
++ { {UNITIZE(Qt::Key_Dead_Acute), 0x00e7, 0, 0, 0, 0}, 0x1e09 }, // U1E09 # LATIN SMALL LETTER C WITH CEDILLA AND ACUTE
++ { {UNITIZE(Qt::Key_Dead_Acute), 0x00ea, 0, 0, 0, 0}, 0x1ebf }, // U1EBF # LATIN SMALL LETTER E WITH CIRCUMFLEX AND ACUTE
++ { {UNITIZE(Qt::Key_Dead_Acute), 0x00ef, 0, 0, 0, 0}, 0x1e2f }, // U1E2F # LATIN SMALL LETTER I WITH DIAERESIS AND ACUTE
++ { {UNITIZE(Qt::Key_Dead_Acute), 0x00f4, 0, 0, 0, 0}, 0x1ed1 }, // U1ED1 # LATIN SMALL LETTER O WITH CIRCUMFLEX AND ACUTE
++ { {UNITIZE(Qt::Key_Dead_Acute), 0x00f5, 0, 0, 0, 0}, 0x1e4d }, // U1E4D # LATIN SMALL LETTER O WITH TILDE AND ACUTE
++ { {UNITIZE(Qt::Key_Dead_Acute), 0x00f8, 0, 0, 0, 0}, 0x01ff }, // U01FF # LATIN SMALL LETTER O WITH STROKE AND ACUTE
++ { {UNITIZE(Qt::Key_Dead_Acute), 0x00fc, 0, 0, 0, 0}, 0x01d8 }, // U01D8 # LATIN SMALL LETTER U WITH DIAERESIS AND ACUTE
++ { {UNITIZE(Qt::Key_Dead_Acute), 0x0102, 0, 0, 0, 0}, 0x1eae }, // U1EAE # LATIN CAPITAL LETTER A WITH BREVE AND ACUTE
++ { {UNITIZE(Qt::Key_Dead_Acute), 0x0103, 0, 0, 0, 0}, 0x1eaf }, // U1EAF # LATIN SMALL LETTER A WITH BREVE AND ACUTE
++ { {UNITIZE(Qt::Key_Dead_Acute), 0x0112, 0, 0, 0, 0}, 0x1e16 }, // U1E16 # LATIN CAPITAL LETTER E WITH MACRON AND ACUTE
++ { {UNITIZE(Qt::Key_Dead_Acute), 0x0113, 0, 0, 0, 0}, 0x1e17 }, // U1E17 # LATIN SMALL LETTER E WITH MACRON AND ACUTE
++ { {UNITIZE(Qt::Key_Dead_Acute), 0x014c, 0, 0, 0, 0}, 0x1e52 }, // U1E52 # LATIN CAPITAL LETTER O WITH MACRON AND ACUTE
++ { {UNITIZE(Qt::Key_Dead_Acute), 0x014d, 0, 0, 0, 0}, 0x1e53 }, // U1E53 # LATIN SMALL LETTER O WITH MACRON AND ACUTE
++ { {UNITIZE(Qt::Key_Dead_Acute), 0x0168, 0, 0, 0, 0}, 0x1e78 }, // U1E78 # LATIN CAPITAL LETTER U WITH TILDE AND ACUTE
++ { {UNITIZE(Qt::Key_Dead_Acute), 0x0169, 0, 0, 0, 0}, 0x1e79 }, // U1E79 # LATIN SMALL LETTER U WITH TILDE AND ACUTE
++ { {UNITIZE(Qt::Key_Dead_Acute), 0x01A0, 0, 0, 0, 0}, 0x1eda }, // U1EDA # LATIN CAPITAL LETTER O WITH HORN AND ACUTE
++ { {UNITIZE(Qt::Key_Dead_Acute), 0x01A1, 0, 0, 0, 0}, 0x1edb }, // U1EDB # LATIN SMALL LETTER O WITH HORN AND ACUTE
++ { {UNITIZE(Qt::Key_Dead_Acute), 0x01AF, 0, 0, 0, 0}, 0x1ee8 }, // U1EE8 # LATIN CAPITAL LETTER U WITH HORN AND ACUTE
++ { {UNITIZE(Qt::Key_Dead_Acute), 0x01B0, 0, 0, 0, 0}, 0x1ee9 }, // U1EE9 # LATIN SMALL LETTER U WITH HORN AND ACUTE
++ { {UNITIZE(Qt::Key_Dead_Acute), 0x0313, 0x0391, 0, 0, 0}, 0x1f0c }, // U1F0C # GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA
++ { {UNITIZE(Qt::Key_Dead_Acute), 0x0313, 0x0395, 0, 0, 0}, 0x1f1c }, // U1F1C # GREEK CAPITAL LETTER EPSILON WITH PSILI AND OXIA
++ { {UNITIZE(Qt::Key_Dead_Acute), 0x0313, 0x0397, 0, 0, 0}, 0x1f2c }, // U1F2C # GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA
++ { {UNITIZE(Qt::Key_Dead_Acute), 0x0313, 0x0399, 0, 0, 0}, 0x1f3c }, // U1F3C # GREEK CAPITAL LETTER IOTA WITH PSILI AND OXIA
++ { {UNITIZE(Qt::Key_Dead_Acute), 0x0313, 0x039f, 0, 0, 0}, 0x1f4c }, // U1F4C # GREEK CAPITAL LETTER OMICRON WITH PSILI AND OXIA
++ { {UNITIZE(Qt::Key_Dead_Acute), 0x0313, 0x03a9, 0, 0, 0}, 0x1f6c }, // U1F6C # GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA
++ { {UNITIZE(Qt::Key_Dead_Acute), 0x0313, 0x03b1, 0, 0, 0}, 0x1f04 }, // U1F04 # GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA
++ { {UNITIZE(Qt::Key_Dead_Acute), 0x0313, 0x03b5, 0, 0, 0}, 0x1f14 }, // U1F14 # GREEK SMALL LETTER EPSILON WITH PSILI AND OXIA
++ { {UNITIZE(Qt::Key_Dead_Acute), 0x0313, 0x03b7, 0, 0, 0}, 0x1f24 }, // U1F24 # GREEK SMALL LETTER ETA WITH PSILI AND OXIA
++ { {UNITIZE(Qt::Key_Dead_Acute), 0x0313, 0x03b9, 0, 0, 0}, 0x1f34 }, // U1F34 # GREEK SMALL LETTER IOTA WITH PSILI AND OXIA
++ { {UNITIZE(Qt::Key_Dead_Acute), 0x0313, 0x03bf, 0, 0, 0}, 0x1f44 }, // U1F44 # GREEK SMALL LETTER OMICRON WITH PSILI AND OXIA
++ { {UNITIZE(Qt::Key_Dead_Acute), 0x0313, 0x03c5, 0, 0, 0}, 0x1f54 }, // U1F54 # GREEK SMALL LETTER UPSILON WITH PSILI AND OXIA
++ { {UNITIZE(Qt::Key_Dead_Acute), 0x0313, 0x03c9, 0, 0, 0}, 0x1f64 }, // U1F64 # GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA
++ { {UNITIZE(Qt::Key_Dead_Acute), 0x0314, 0x0391, 0, 0, 0}, 0x1f0d }, // U1F0D # GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA
++ { {UNITIZE(Qt::Key_Dead_Acute), 0x0314, 0x0395, 0, 0, 0}, 0x1f1d }, // U1F1D # GREEK CAPITAL LETTER EPSILON WITH DASIA AND OXIA
++ { {UNITIZE(Qt::Key_Dead_Acute), 0x0314, 0x0397, 0, 0, 0}, 0x1f2d }, // U1F2D # GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA
++ { {UNITIZE(Qt::Key_Dead_Acute), 0x0314, 0x0399, 0, 0, 0}, 0x1f3d }, // U1F3D # GREEK CAPITAL LETTER IOTA WITH DASIA AND OXIA
++ { {UNITIZE(Qt::Key_Dead_Acute), 0x0314, 0x039f, 0, 0, 0}, 0x1f4d }, // U1F4D # GREEK CAPITAL LETTER OMICRON WITH DASIA AND OXIA
++ { {UNITIZE(Qt::Key_Dead_Acute), 0x0314, 0x03a5, 0, 0, 0}, 0x1f5d }, // U1F5D # GREEK CAPITAL LETTER UPSILON WITH DASIA AND OXIA
++ { {UNITIZE(Qt::Key_Dead_Acute), 0x0314, 0x03a9, 0, 0, 0}, 0x1f6d }, // U1F6D # GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA
++ { {UNITIZE(Qt::Key_Dead_Acute), 0x0314, 0x03b1, 0, 0, 0}, 0x1f05 }, // U1F05 # GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA
++ { {UNITIZE(Qt::Key_Dead_Acute), 0x0314, 0x03b5, 0, 0, 0}, 0x1f15 }, // U1F15 # GREEK SMALL LETTER EPSILON WITH DASIA AND OXIA
++ { {UNITIZE(Qt::Key_Dead_Acute), 0x0314, 0x03b7, 0, 0, 0}, 0x1f25 }, // U1F25 # GREEK SMALL LETTER ETA WITH DASIA AND OXIA
++ { {UNITIZE(Qt::Key_Dead_Acute), 0x0314, 0x03b9, 0, 0, 0}, 0x1f35 }, // U1F35 # GREEK SMALL LETTER IOTA WITH DASIA AND OXIA
++ { {UNITIZE(Qt::Key_Dead_Acute), 0x0314, 0x03bf, 0, 0, 0}, 0x1f45 }, // U1F45 # GREEK SMALL LETTER OMICRON WITH DASIA AND OXIA
++ { {UNITIZE(Qt::Key_Dead_Acute), 0x0314, 0x03c5, 0, 0, 0}, 0x1f55 }, // U1F55 # GREEK SMALL LETTER UPSILON WITH DASIA AND OXIA
++ { {UNITIZE(Qt::Key_Dead_Acute), 0x0314, 0x03c9, 0, 0, 0}, 0x1f65 }, // U1F65 # GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA
++ { {UNITIZE(Qt::Key_Dead_Acute), 0x0391, 0, 0, 0, 0}, 0x0386 }, // U0386 # GREEK CAPITAL LETTER ALPHA WITH TONOS
++ { {UNITIZE(Qt::Key_Dead_Acute), 0x0395, 0, 0, 0, 0}, 0x0388 }, // U0388 # GREEK CAPITAL LETTER EPSILON WITH TONOS
++ { {UNITIZE(Qt::Key_Dead_Acute), 0x0397, 0, 0, 0, 0}, 0x0389 }, // U0389 # GREEK CAPITAL LETTER ETA WITH TONOS
++ { {UNITIZE(Qt::Key_Dead_Acute), 0x0399, 0, 0, 0, 0}, 0x038a }, // U038A # GREEK CAPITAL LETTER IOTA WITH TONOS
++ { {UNITIZE(Qt::Key_Dead_Acute), 0x039f, 0, 0, 0, 0}, 0x038c }, // U038C # GREEK CAPITAL LETTER OMICRON WITH TONOS
++ { {UNITIZE(Qt::Key_Dead_Acute), 0x03a5, 0, 0, 0, 0}, 0x038e }, // U038E # GREEK CAPITAL LETTER UPSILON WITH TONOS
++ { {UNITIZE(Qt::Key_Dead_Acute), 0x03a9, 0, 0, 0, 0}, 0x038f }, // U038F # GREEK CAPITAL LETTER OMEGA WITH TONOS
++ { {UNITIZE(Qt::Key_Dead_Acute), 0x03b1, 0, 0, 0, 0}, 0x03ac }, // U03AC # GREEK SMALL LETTER ALPHA WITH TONOS
++ { {UNITIZE(Qt::Key_Dead_Acute), 0x03b5, 0, 0, 0, 0}, 0x03ad }, // U03AD # GREEK SMALL LETTER EPSILON WITH TONOS
++ { {UNITIZE(Qt::Key_Dead_Acute), 0x03b7, 0, 0, 0, 0}, 0x03ae }, // U03AE # GREEK SMALL LETTER ETA WITH TONOS
++ { {UNITIZE(Qt::Key_Dead_Acute), 0x03b9, 0, 0, 0, 0}, 0x03af }, // U03AF # GREEK SMALL LETTER IOTA WITH TONOS
++ { {UNITIZE(Qt::Key_Dead_Acute), 0x03bf, 0, 0, 0, 0}, 0x03cc }, // U03CC # GREEK SMALL LETTER OMICRON WITH TONOS
++ { {UNITIZE(Qt::Key_Dead_Acute), 0x03c5, 0, 0, 0, 0}, 0x03cd }, // U03CD # GREEK SMALL LETTER UPSILON WITH TONOS
++ { {UNITIZE(Qt::Key_Dead_Acute), 0x03c9, 0, 0, 0, 0}, 0x03ce }, // U03CE # GREEK SMALL LETTER OMEGA WITH TONOS
++ { {UNITIZE(Qt::Key_Dead_Acute), 0x03ca, 0, 0, 0, 0}, 0x0390 }, // U0390 # GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS
++ { {UNITIZE(Qt::Key_Dead_Acute), 0x03cb, 0, 0, 0, 0}, 0x03b0 }, // U03B0 # GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS
++ { {UNITIZE(Qt::Key_Dead_Acute), 0x0413, 0, 0, 0, 0}, 0x0403 }, // U0403 # CYRILLIC CAPITAL LETTER GJE
++ { {UNITIZE(Qt::Key_Dead_Acute), 0x041a, 0, 0, 0, 0}, 0x040c }, // U040C # CYRILLIC CAPITAL LETTER KJE
++ { {UNITIZE(Qt::Key_Dead_Acute), 0x0433, 0, 0, 0, 0}, 0x0453 }, // U0453 # CYRILLIC SMALL LETTER GJE
++ { {UNITIZE(Qt::Key_Dead_Acute), 0x043a, 0, 0, 0, 0}, 0x045c }, // U045C # CYRILLIC SMALL LETTER KJE
++ { {UNITIZE(Qt::Key_Dead_Acute), 0x1f00, 0, 0, 0, 0}, 0x1f04 }, // U1F04 # GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA
++ { {UNITIZE(Qt::Key_Dead_Acute), 0x1f01, 0, 0, 0, 0}, 0x1f05 }, // U1F05 # GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA
++ { {UNITIZE(Qt::Key_Dead_Acute), 0x1f08, 0, 0, 0, 0}, 0x1f0c }, // U1F0C # GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA
++ { {UNITIZE(Qt::Key_Dead_Acute), 0x1f09, 0, 0, 0, 0}, 0x1f0d }, // U1F0D # GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA
++ { {UNITIZE(Qt::Key_Dead_Acute), 0x1f10, 0, 0, 0, 0}, 0x1f14 }, // U1F14 # GREEK SMALL LETTER EPSILON WITH PSILI AND OXIA
++ { {UNITIZE(Qt::Key_Dead_Acute), 0x1f11, 0, 0, 0, 0}, 0x1f15 }, // U1F15 # GREEK SMALL LETTER EPSILON WITH DASIA AND OXIA
++ { {UNITIZE(Qt::Key_Dead_Acute), 0x1f18, 0, 0, 0, 0}, 0x1f1c }, // U1F1C # GREEK CAPITAL LETTER EPSILON WITH PSILI AND OXIA
++ { {UNITIZE(Qt::Key_Dead_Acute), 0x1f19, 0, 0, 0, 0}, 0x1f1d }, // U1F1D # GREEK CAPITAL LETTER EPSILON WITH DASIA AND OXIA
++ { {UNITIZE(Qt::Key_Dead_Acute), 0x1f20, 0, 0, 0, 0}, 0x1f24 }, // U1F24 # GREEK SMALL LETTER ETA WITH PSILI AND OXIA
++ { {UNITIZE(Qt::Key_Dead_Acute), 0x1f21, 0, 0, 0, 0}, 0x1f25 }, // U1F25 # GREEK SMALL LETTER ETA WITH DASIA AND OXIA
++ { {UNITIZE(Qt::Key_Dead_Acute), 0x1f28, 0, 0, 0, 0}, 0x1f2c }, // U1F2C # GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA
++ { {UNITIZE(Qt::Key_Dead_Acute), 0x1f29, 0, 0, 0, 0}, 0x1f2d }, // U1F2D # GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA
++ { {UNITIZE(Qt::Key_Dead_Acute), 0x1f30, 0, 0, 0, 0}, 0x1f34 }, // U1F34 # GREEK SMALL LETTER IOTA WITH PSILI AND OXIA
++ { {UNITIZE(Qt::Key_Dead_Acute), 0x1f31, 0, 0, 0, 0}, 0x1f35 }, // U1F35 # GREEK SMALL LETTER IOTA WITH DASIA AND OXIA
++ { {UNITIZE(Qt::Key_Dead_Acute), 0x1f38, 0, 0, 0, 0}, 0x1f3c }, // U1F3C # GREEK CAPITAL LETTER IOTA WITH PSILI AND OXIA
++ { {UNITIZE(Qt::Key_Dead_Acute), 0x1f39, 0, 0, 0, 0}, 0x1f3d }, // U1F3D # GREEK CAPITAL LETTER IOTA WITH DASIA AND OXIA
++ { {UNITIZE(Qt::Key_Dead_Acute), 0x1f40, 0, 0, 0, 0}, 0x1f44 }, // U1F44 # GREEK SMALL LETTER OMICRON WITH PSILI AND OXIA
++ { {UNITIZE(Qt::Key_Dead_Acute), 0x1f41, 0, 0, 0, 0}, 0x1f45 }, // U1F45 # GREEK SMALL LETTER OMICRON WITH DASIA AND OXIA
++ { {UNITIZE(Qt::Key_Dead_Acute), 0x1f48, 0, 0, 0, 0}, 0x1f4c }, // U1F4C # GREEK CAPITAL LETTER OMICRON WITH PSILI AND OXIA
++ { {UNITIZE(Qt::Key_Dead_Acute), 0x1f49, 0, 0, 0, 0}, 0x1f4d }, // U1F4D # GREEK CAPITAL LETTER OMICRON WITH DASIA AND OXIA
++ { {UNITIZE(Qt::Key_Dead_Acute), 0x1f50, 0, 0, 0, 0}, 0x1f54 }, // U1F54 # GREEK SMALL LETTER UPSILON WITH PSILI AND OXIA
++ { {UNITIZE(Qt::Key_Dead_Acute), 0x1f51, 0, 0, 0, 0}, 0x1f55 }, // U1F55 # GREEK SMALL LETTER UPSILON WITH DASIA AND OXIA
++ { {UNITIZE(Qt::Key_Dead_Acute), 0x1f59, 0, 0, 0, 0}, 0x1f5d }, // U1F5D # GREEK CAPITAL LETTER UPSILON WITH DASIA AND OXIA
++ { {UNITIZE(Qt::Key_Dead_Acute), 0x1f60, 0, 0, 0, 0}, 0x1f64 }, // U1F64 # GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA
++ { {UNITIZE(Qt::Key_Dead_Acute), 0x1f61, 0, 0, 0, 0}, 0x1f65 }, // U1F65 # GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA
++ { {UNITIZE(Qt::Key_Dead_Acute), 0x1f68, 0, 0, 0, 0}, 0x1f6c }, // U1F6C # GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA
++ { {UNITIZE(Qt::Key_Dead_Acute), 0x1f69, 0, 0, 0, 0}, 0x1f6d }, // U1F6D # GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA
++// /* broken */ { {UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Multi_key), 0x0000, 0x004f, 0, 0}, 0x01fe }, // U01FE # LATIN CAPITAL LETTER O WITH STROKE AND ACUTE
++// /* broken */ { {UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Multi_key), 0x0000, 0x006f, 0, 0}, 0x01ff }, // U01FF # LATIN SMALL LETTER O WITH STROKE AND ACUTE
++ { {UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Multi_key), 0x0022, 0x0049, 0, 0}, 0x1e2e }, // U1E2E # LATIN CAPITAL LETTER I WITH DIAERESIS AND ACUTE
++ { {UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Multi_key), 0x0022, 0x0055, 0, 0}, 0x01d7 }, // U01D7 # LATIN CAPITAL LETTER U WITH DIAERESIS AND ACUTE
++ { {UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Multi_key), 0x0022, 0x0069, 0, 0}, 0x1e2f }, // U1E2F # LATIN SMALL LETTER I WITH DIAERESIS AND ACUTE
++ { {UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Multi_key), 0x0022, 0x0075, 0, 0}, 0x01d8 }, // U01D8 # LATIN SMALL LETTER U WITH DIAERESIS AND ACUTE
++ { {UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Multi_key), 0x0022, 0x03b9, 0, 0}, 0x0390 }, // U0390 # GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS
++ { {UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Multi_key), 0x0022, 0x03c5, 0, 0}, 0x03b0 }, // U03B0 # GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS
++ { {UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0391, 0, 0}, 0x1f0d }, // U1F0D # GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA
++ { {UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0395, 0, 0}, 0x1f1d }, // U1F1D # GREEK CAPITAL LETTER EPSILON WITH DASIA AND OXIA
++ { {UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0397, 0, 0}, 0x1f2d }, // U1F2D # GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA
++ { {UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0399, 0, 0}, 0x1f3d }, // U1F3D # GREEK CAPITAL LETTER IOTA WITH DASIA AND OXIA
++ { {UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Multi_key), 0x0028, 0x039f, 0, 0}, 0x1f4d }, // U1F4D # GREEK CAPITAL LETTER OMICRON WITH DASIA AND OXIA
++ { {UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Multi_key), 0x0028, 0x03a5, 0, 0}, 0x1f5d }, // U1F5D # GREEK CAPITAL LETTER UPSILON WITH DASIA AND OXIA
++ { {UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Multi_key), 0x0028, 0x03a9, 0, 0}, 0x1f6d }, // U1F6D # GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA
++ { {UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Multi_key), 0x0028, 0x03b1, 0, 0}, 0x1f05 }, // U1F05 # GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA
++ { {UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Multi_key), 0x0028, 0x03b5, 0, 0}, 0x1f15 }, // U1F15 # GREEK SMALL LETTER EPSILON WITH DASIA AND OXIA
++ { {UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Multi_key), 0x0028, 0x03b7, 0, 0}, 0x1f25 }, // U1F25 # GREEK SMALL LETTER ETA WITH DASIA AND OXIA
++ { {UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Multi_key), 0x0028, 0x03b9, 0, 0}, 0x1f35 }, // U1F35 # GREEK SMALL LETTER IOTA WITH DASIA AND OXIA
++ { {UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Multi_key), 0x0028, 0x03bf, 0, 0}, 0x1f45 }, // U1F45 # GREEK SMALL LETTER OMICRON WITH DASIA AND OXIA
++ { {UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Multi_key), 0x0028, 0x03c5, 0, 0}, 0x1f55 }, // U1F55 # GREEK SMALL LETTER UPSILON WITH DASIA AND OXIA
++ { {UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Multi_key), 0x0028, 0x03c9, 0, 0}, 0x1f65 }, // U1F65 # GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA
++ { {UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Multi_key), 0x0029, 0x0391, 0, 0}, 0x1f0c }, // U1F0C # GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA
++ { {UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Multi_key), 0x0029, 0x0395, 0, 0}, 0x1f1c }, // U1F1C # GREEK CAPITAL LETTER EPSILON WITH PSILI AND OXIA
++ { {UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Multi_key), 0x0029, 0x0397, 0, 0}, 0x1f2c }, // U1F2C # GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA
++ { {UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Multi_key), 0x0029, 0x0399, 0, 0}, 0x1f3c }, // U1F3C # GREEK CAPITAL LETTER IOTA WITH PSILI AND OXIA
++ { {UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Multi_key), 0x0029, 0x039f, 0, 0}, 0x1f4c }, // U1F4C # GREEK CAPITAL LETTER OMICRON WITH PSILI AND OXIA
++ { {UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Multi_key), 0x0029, 0x03a9, 0, 0}, 0x1f6c }, // U1F6C # GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA
++ { {UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Multi_key), 0x0029, 0x03b1, 0, 0}, 0x1f04 }, // U1F04 # GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA
++ { {UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Multi_key), 0x0029, 0x03b5, 0, 0}, 0x1f14 }, // U1F14 # GREEK SMALL LETTER EPSILON WITH PSILI AND OXIA
++ { {UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Multi_key), 0x0029, 0x03b7, 0, 0}, 0x1f24 }, // U1F24 # GREEK SMALL LETTER ETA WITH PSILI AND OXIA
++ { {UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Multi_key), 0x0029, 0x03b9, 0, 0}, 0x1f34 }, // U1F34 # GREEK SMALL LETTER IOTA WITH PSILI AND OXIA
++ { {UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Multi_key), 0x0029, 0x03bf, 0, 0}, 0x1f44 }, // U1F44 # GREEK SMALL LETTER OMICRON WITH PSILI AND OXIA
++ { {UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Multi_key), 0x0029, 0x03c5, 0, 0}, 0x1f54 }, // U1F54 # GREEK SMALL LETTER UPSILON WITH PSILI AND OXIA
++ { {UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Multi_key), 0x0029, 0x03c9, 0, 0}, 0x1f64 }, // U1F64 # GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA
++ { {UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Multi_key), 0x002b, 0x004f, 0, 0}, 0x1eda }, // U1EDA # LATIN CAPITAL LETTER O WITH HORN AND ACUTE
++ { {UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Multi_key), 0x002b, 0x0055, 0, 0}, 0x1ee8 }, // U1EE8 # LATIN CAPITAL LETTER U WITH HORN AND ACUTE
++ { {UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Multi_key), 0x002b, 0x006f, 0, 0}, 0x1edb }, // U1EDB # LATIN SMALL LETTER O WITH HORN AND ACUTE
++ { {UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Multi_key), 0x002b, 0x0075, 0, 0}, 0x1ee9 }, // U1EE9 # LATIN SMALL LETTER U WITH HORN AND ACUTE
++ { {UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Multi_key), 0x002c, 0x0043, 0, 0}, 0x1e08 }, // U1E08 # LATIN CAPITAL LETTER C WITH CEDILLA AND ACUTE
++ { {UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Multi_key), 0x002c, 0x0063, 0, 0}, 0x1e09 }, // U1E09 # LATIN SMALL LETTER C WITH CEDILLA AND ACUTE
++ { {UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Multi_key), 0x002f, 0x004f, 0, 0}, 0x01fe }, // U01FE # LATIN CAPITAL LETTER O WITH STROKE AND ACUTE
++ { {UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Multi_key), 0x002f, 0x006f, 0, 0}, 0x01ff }, // U01FF # LATIN SMALL LETTER O WITH STROKE AND ACUTE
++ { {UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Multi_key), 0x0055, 0x0041, 0, 0}, 0x1eae }, // U1EAE # LATIN CAPITAL LETTER A WITH BREVE AND ACUTE
++ { {UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Multi_key), 0x0055, 0x0061, 0, 0}, 0x1eaf }, // U1EAF # LATIN SMALL LETTER A WITH BREVE AND ACUTE
++ { {UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Multi_key), 0x005e, 0x0041, 0, 0}, 0x1ea4 }, // U1EA4 # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND ACUTE
++ { {UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Multi_key), 0x005e, 0x0045, 0, 0}, 0x1ebe }, // U1EBE # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND ACUTE
++ { {UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Multi_key), 0x005e, 0x004f, 0, 0}, 0x1ed0 }, // U1ED0 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND ACUTE
++ { {UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Multi_key), 0x005e, 0x0061, 0, 0}, 0x1ea5 }, // U1EA5 # LATIN SMALL LETTER A WITH CIRCUMFLEX AND ACUTE
++ { {UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Multi_key), 0x005e, 0x0065, 0, 0}, 0x1ebf }, // U1EBF # LATIN SMALL LETTER E WITH CIRCUMFLEX AND ACUTE
++ { {UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Multi_key), 0x005e, 0x006f, 0, 0}, 0x1ed1 }, // U1ED1 # LATIN SMALL LETTER O WITH CIRCUMFLEX AND ACUTE
++ { {UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0045, 0, 0}, 0x1e16 }, // U1E16 # LATIN CAPITAL LETTER E WITH MACRON AND ACUTE
++ { {UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Multi_key), 0x005f, 0x004f, 0, 0}, 0x1e52 }, // U1E52 # LATIN CAPITAL LETTER O WITH MACRON AND ACUTE
++ { {UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0065, 0, 0}, 0x1e17 }, // U1E17 # LATIN SMALL LETTER E WITH MACRON AND ACUTE
++ { {UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Multi_key), 0x005f, 0x006f, 0, 0}, 0x1e53 }, // U1E53 # LATIN SMALL LETTER O WITH MACRON AND ACUTE
++ { {UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Multi_key), 0x0062, 0x0041, 0, 0}, 0x1eae }, // U1EAE # LATIN CAPITAL LETTER A WITH BREVE AND ACUTE
++ { {UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Multi_key), 0x0062, 0x0061, 0, 0}, 0x1eaf }, // U1EAF # LATIN SMALL LETTER A WITH BREVE AND ACUTE
++ { {UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Multi_key), 0x006f, 0x0041, 0, 0}, 0x01fa }, // U01FA # LATIN CAPITAL LETTER A WITH RING ABOVE AND ACUTE
++ { {UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Multi_key), 0x006f, 0x0061, 0, 0}, 0x01fb }, // U01FB # LATIN SMALL LETTER A WITH RING ABOVE AND ACUTE
++ { {UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Multi_key), 0x007e, 0x004f, 0, 0}, 0x1e4c }, // U1E4C # LATIN CAPITAL LETTER O WITH TILDE AND ACUTE
++ { {UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Multi_key), 0x007e, 0x0055, 0, 0}, 0x1e78 }, // U1E78 # LATIN CAPITAL LETTER U WITH TILDE AND ACUTE
++ { {UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Multi_key), 0x007e, 0x006f, 0, 0}, 0x1e4d }, // U1E4D # LATIN SMALL LETTER O WITH TILDE AND ACUTE
++ { {UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Multi_key), 0x007e, 0x0075, 0, 0}, 0x1e79 }, // U1E79 # LATIN SMALL LETTER U WITH TILDE AND ACUTE
++ { {UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Multi_key), 0x00af, 0x0045, 0, 0}, 0x1e16 }, // U1E16 # LATIN CAPITAL LETTER E WITH MACRON AND ACUTE
++ { {UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Multi_key), 0x00af, 0x004f, 0, 0}, 0x1e52 }, // U1E52 # LATIN CAPITAL LETTER O WITH MACRON AND ACUTE
++ { {UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Multi_key), 0x00af, 0x0065, 0, 0}, 0x1e17 }, // U1E17 # LATIN SMALL LETTER E WITH MACRON AND ACUTE
++ { {UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Multi_key), 0x00af, 0x006f, 0, 0}, 0x1e53 }, // U1E53 # LATIN SMALL LETTER O WITH MACRON AND ACUTE
++ { {UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Dead_Acute), 0, 0, 0, 0}, 0x00b4 }, // acute
++ { {UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Dead_Circumflex), 0x0041, 0, 0, 0}, 0x1ea4 }, // U1EA4 # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND ACUTE
++ { {UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Dead_Circumflex), 0x0045, 0, 0, 0}, 0x1ebe }, // U1EBE # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND ACUTE
++ { {UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Dead_Circumflex), 0x004f, 0, 0, 0}, 0x1ed0 }, // U1ED0 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND ACUTE
++ { {UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Dead_Circumflex), 0x0061, 0, 0, 0}, 0x1ea5 }, // U1EA5 # LATIN SMALL LETTER A WITH CIRCUMFLEX AND ACUTE
++ { {UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Dead_Circumflex), 0x0065, 0, 0, 0}, 0x1ebf }, // U1EBF # LATIN SMALL LETTER E WITH CIRCUMFLEX AND ACUTE
++ { {UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Dead_Circumflex), 0x006f, 0, 0, 0}, 0x1ed1 }, // U1ED1 # LATIN SMALL LETTER O WITH CIRCUMFLEX AND ACUTE
++ { {UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Dead_Tilde), 0x004f, 0, 0, 0}, 0x1e4c }, // U1E4C # LATIN CAPITAL LETTER O WITH TILDE AND ACUTE
++ { {UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Dead_Tilde), 0x0055, 0, 0, 0}, 0x1e78 }, // U1E78 # LATIN CAPITAL LETTER U WITH TILDE AND ACUTE
++ { {UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Dead_Tilde), 0x006f, 0, 0, 0}, 0x1e4d }, // U1E4D # LATIN SMALL LETTER O WITH TILDE AND ACUTE
++ { {UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Dead_Tilde), 0x0075, 0, 0, 0}, 0x1e79 }, // U1E79 # LATIN SMALL LETTER U WITH TILDE AND ACUTE
++ { {UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Dead_Macron), 0x0045, 0, 0, 0}, 0x1e16 }, // U1E16 # LATIN CAPITAL LETTER E WITH MACRON AND ACUTE
++ { {UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Dead_Macron), 0x004f, 0, 0, 0}, 0x1e52 }, // U1E52 # LATIN CAPITAL LETTER O WITH MACRON AND ACUTE
++ { {UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Dead_Macron), 0x0065, 0, 0, 0}, 0x1e17 }, // U1E17 # LATIN SMALL LETTER E WITH MACRON AND ACUTE
++ { {UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Dead_Macron), 0x006f, 0, 0, 0}, 0x1e53 }, // U1E53 # LATIN SMALL LETTER O WITH MACRON AND ACUTE
++ { {UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Dead_Breve), 0x0041, 0, 0, 0}, 0x1eae }, // U1EAE # LATIN CAPITAL LETTER A WITH BREVE AND ACUTE
++ { {UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Dead_Breve), 0x0061, 0, 0, 0}, 0x1eaf }, // U1EAF # LATIN SMALL LETTER A WITH BREVE AND ACUTE
++ { {UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Dead_Diaeresis), 0x0049, 0, 0, 0}, 0x1e2e }, // U1E2E # LATIN CAPITAL LETTER I WITH DIAERESIS AND ACUTE
++ { {UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Dead_Diaeresis), 0x0055, 0, 0, 0}, 0x01d7 }, // U01D7 # LATIN CAPITAL LETTER U WITH DIAERESIS AND ACUTE
++ { {UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Dead_Diaeresis), 0x0069, 0, 0, 0}, 0x1e2f }, // U1E2F # LATIN SMALL LETTER I WITH DIAERESIS AND ACUTE
++ { {UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Dead_Diaeresis), 0x0075, 0, 0, 0}, 0x01d8 }, // U01D8 # LATIN SMALL LETTER U WITH DIAERESIS AND ACUTE
++ { {UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Dead_Diaeresis), 0x03b9, 0, 0, 0}, 0x0390 }, // U0390 # GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS
++ { {UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Dead_Diaeresis), 0x03c5, 0, 0, 0}, 0x03b0 }, // U03B0 # GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS
++ { {UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Dead_Abovering), 0x0041, 0, 0, 0}, 0x01fa }, // U01FA # LATIN CAPITAL LETTER A WITH RING ABOVE AND ACUTE
++ { {UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Dead_Abovering), 0x0061, 0, 0, 0}, 0x01fb }, // U01FB # LATIN SMALL LETTER A WITH RING ABOVE AND ACUTE
++ { {UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Dead_Cedilla), 0x0043, 0, 0, 0}, 0x1e08 }, // U1E08 # LATIN CAPITAL LETTER C WITH CEDILLA AND ACUTE
++ { {UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Dead_Cedilla), 0x0063, 0, 0, 0}, 0x1e09 }, // U1E09 # LATIN SMALL LETTER C WITH CEDILLA AND ACUTE
++ { {UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Dead_Horn), 0x004f, 0, 0, 0}, 0x1eda }, // U1EDA # LATIN CAPITAL LETTER O WITH HORN AND ACUTE
++ { {UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Dead_Horn), 0x0055, 0, 0, 0}, 0x1ee8 }, // U1EE8 # LATIN CAPITAL LETTER U WITH HORN AND ACUTE
++ { {UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Dead_Horn), 0x006f, 0, 0, 0}, 0x1edb }, // U1EDB # LATIN SMALL LETTER O WITH HORN AND ACUTE
++ { {UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Dead_Horn), 0x0075, 0, 0, 0}, 0x1ee9 }, // U1EE9 # LATIN SMALL LETTER U WITH HORN AND ACUTE
++// /* broken */ { {UNITIZE(Qt::Key_Dead_Circumflex), 0x0000, 0, 0, 0, 0}, 0x207a }, // U207A # SUPERSCRIPT PLUS SIGN
++// /* broken */ { {UNITIZE(Qt::Key_Dead_Circumflex), 0x0000, 0, 0, 0, 0}, 0x207c }, // U207C # SUPERSCRIPT EQUALS SIGN
++// /* broken */ { {UNITIZE(Qt::Key_Dead_Circumflex), 0x0000, 0, 0, 0, 0}, 0x00b2 }, // U00B2 # SUPERSCRIPT TWO
++// /* broken */ { {UNITIZE(Qt::Key_Dead_Circumflex), 0x0000, 0, 0, 0, 0}, 0x2079 }, // U2079 # SUPERSCRIPT NINE
++// /* broken */ { {UNITIZE(Qt::Key_Dead_Circumflex), 0x0000, 0, 0, 0, 0}, 0x00b3 }, // U00B3 # SUPERSCRIPT THREE
++// /* broken */ { {UNITIZE(Qt::Key_Dead_Circumflex), 0x0000, 0, 0, 0, 0}, 0x00b9 }, // U00B9 # SUPERSCRIPT ONE
++// /* broken */ { {UNITIZE(Qt::Key_Dead_Circumflex), 0x0000, 0, 0, 0, 0}, 0x2070 }, // U2070 # SUPERSCRIPT ZERO
++// /* broken */ { {UNITIZE(Qt::Key_Dead_Circumflex), 0x0000, 0, 0, 0, 0}, 0x2078 }, // U2078 # SUPERSCRIPT EIGHT
++// /* broken */ { {UNITIZE(Qt::Key_Dead_Circumflex), 0x0000, 0, 0, 0, 0}, 0x2074 }, // U2074 # SUPERSCRIPT FOUR
++// /* broken */ { {UNITIZE(Qt::Key_Dead_Circumflex), 0x0000, 0, 0, 0, 0}, 0x2075 }, // U2075 # SUPERSCRIPT FIVE
++// /* broken */ { {UNITIZE(Qt::Key_Dead_Circumflex), 0x0000, 0, 0, 0, 0}, 0x2077 }, // U2077 # SUPERSCRIPT SEVEN
++// /* broken */ { {UNITIZE(Qt::Key_Dead_Circumflex), 0x0000, 0, 0, 0, 0}, 0x00b2 }, // U00B2 # SUPERSCRIPT TWO
++// /* broken */ { {UNITIZE(Qt::Key_Dead_Circumflex), 0x0000, 0, 0, 0, 0}, 0x2076 }, // U2076 # SUPERSCRIPT SIX
++// /* broken */ { {UNITIZE(Qt::Key_Dead_Circumflex), 0x0000, 0x0041, 0, 0, 0}, 0x1eac }, // U1EAC # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND DOT BELOW
++// /* broken */ { {UNITIZE(Qt::Key_Dead_Circumflex), 0x0000, 0x0045, 0, 0, 0}, 0x1ec6 }, // U1EC6 # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND DOT BELOW
++// /* broken */ { {UNITIZE(Qt::Key_Dead_Circumflex), 0x0000, 0x004f, 0, 0, 0}, 0x1ed8 }, // U1ED8 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND DOT BELOW
++// /* broken */ { {UNITIZE(Qt::Key_Dead_Circumflex), 0x0000, 0x0061, 0, 0, 0}, 0x1ead }, // U1EAD # LATIN SMALL LETTER A WITH CIRCUMFLEX AND DOT BELOW
++// /* broken */ { {UNITIZE(Qt::Key_Dead_Circumflex), 0x0000, 0x0065, 0, 0, 0}, 0x1ec7 }, // U1EC7 # LATIN SMALL LETTER E WITH CIRCUMFLEX AND DOT BELOW
++// /* broken */ { {UNITIZE(Qt::Key_Dead_Circumflex), 0x0000, 0x006f, 0, 0, 0}, 0x1ed9 }, // U1ED9 # LATIN SMALL LETTER O WITH CIRCUMFLEX AND DOT BELOW
++ { {UNITIZE(Qt::Key_Dead_Circumflex), 0x0020, 0, 0, 0, 0}, 0x005e }, // asciicircum
++ { {UNITIZE(Qt::Key_Dead_Circumflex), 0x0028, 0, 0, 0, 0}, 0x207d }, // U207D # SUPERSCRIPT LEFT PARENTHESIS
++ { {UNITIZE(Qt::Key_Dead_Circumflex), 0x0029, 0, 0, 0, 0}, 0x207e }, // U207E # SUPERSCRIPT RIGHT PARENTHESIS
++ { {UNITIZE(Qt::Key_Dead_Circumflex), 0x002b, 0, 0, 0, 0}, 0x207a }, // U207A # SUPERSCRIPT PLUS SIGN
++ { {UNITIZE(Qt::Key_Dead_Circumflex), 0x0030, 0, 0, 0, 0}, 0x2070 }, // U2070 # SUPERSCRIPT ZERO
++ { {UNITIZE(Qt::Key_Dead_Circumflex), 0x0031, 0, 0, 0, 0}, 0x00b9 }, // U00B9 # SUPERSCRIPT ONE
++ { {UNITIZE(Qt::Key_Dead_Circumflex), 0x0032, 0, 0, 0, 0}, 0x00b2 }, // U00B2 # SUPERSCRIPT TWO
++ { {UNITIZE(Qt::Key_Dead_Circumflex), 0x0033, 0, 0, 0, 0}, 0x00b3 }, // U00B3 # SUPERSCRIPT THREE
++ { {UNITIZE(Qt::Key_Dead_Circumflex), 0x0034, 0, 0, 0, 0}, 0x2074 }, // U2074 # SUPERSCRIPT FOUR
++ { {UNITIZE(Qt::Key_Dead_Circumflex), 0x0035, 0, 0, 0, 0}, 0x2075 }, // U2075 # SUPERSCRIPT FIVE
++ { {UNITIZE(Qt::Key_Dead_Circumflex), 0x0036, 0, 0, 0, 0}, 0x2076 }, // U2076 # SUPERSCRIPT SIX
++ { {UNITIZE(Qt::Key_Dead_Circumflex), 0x0037, 0, 0, 0, 0}, 0x2077 }, // U2077 # SUPERSCRIPT SEVEN
++ { {UNITIZE(Qt::Key_Dead_Circumflex), 0x0038, 0, 0, 0, 0}, 0x2078 }, // U2078 # SUPERSCRIPT EIGHT
++ { {UNITIZE(Qt::Key_Dead_Circumflex), 0x0039, 0, 0, 0, 0}, 0x2079 }, // U2079 # SUPERSCRIPT NINE
++ { {UNITIZE(Qt::Key_Dead_Circumflex), 0x003d, 0, 0, 0, 0}, 0x207c }, // U207C # SUPERSCRIPT EQUALS SIGN
++ { {UNITIZE(Qt::Key_Dead_Circumflex), 0x0041, 0, 0, 0, 0}, 0x00c2 }, // U00C2 # LATIN CAPITAL LETTER A WITH CIRCUMFLEX
++ { {UNITIZE(Qt::Key_Dead_Circumflex), 0x0043, 0, 0, 0, 0}, 0x0108 }, // U0108 # LATIN CAPITAL LETTER C WITH CIRCUMFLEX
++ { {UNITIZE(Qt::Key_Dead_Circumflex), 0x0045, 0, 0, 0, 0}, 0x00ca }, // U00CA # LATIN CAPITAL LETTER E WITH CIRCUMFLEX
++ { {UNITIZE(Qt::Key_Dead_Circumflex), 0x0047, 0, 0, 0, 0}, 0x011c }, // U011C # LATIN CAPITAL LETTER G WITH CIRCUMFLEX
++ { {UNITIZE(Qt::Key_Dead_Circumflex), 0x0048, 0, 0, 0, 0}, 0x0124 }, // U0124 # LATIN CAPITAL LETTER H WITH CIRCUMFLEX
++ { {UNITIZE(Qt::Key_Dead_Circumflex), 0x0049, 0, 0, 0, 0}, 0x00ce }, // U00CE # LATIN CAPITAL LETTER I WITH CIRCUMFLEX
++ { {UNITIZE(Qt::Key_Dead_Circumflex), 0x004a, 0, 0, 0, 0}, 0x0134 }, // U0134 # LATIN CAPITAL LETTER J WITH CIRCUMFLEX
++ { {UNITIZE(Qt::Key_Dead_Circumflex), 0x004f, 0, 0, 0, 0}, 0x00d4 }, // U00D4 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX
++ { {UNITIZE(Qt::Key_Dead_Circumflex), 0x0053, 0, 0, 0, 0}, 0x015c }, // U015C # LATIN CAPITAL LETTER S WITH CIRCUMFLEX
++ { {UNITIZE(Qt::Key_Dead_Circumflex), 0x0055, 0, 0, 0, 0}, 0x00db }, // U00DB # LATIN CAPITAL LETTER U WITH CIRCUMFLEX
++ { {UNITIZE(Qt::Key_Dead_Circumflex), 0x0057, 0, 0, 0, 0}, 0x0174 }, // U0174 # LATIN CAPITAL LETTER W WITH CIRCUMFLEX
++ { {UNITIZE(Qt::Key_Dead_Circumflex), 0x0059, 0, 0, 0, 0}, 0x0176 }, // U0176 # LATIN CAPITAL LETTER Y WITH CIRCUMFLEX
++ { {UNITIZE(Qt::Key_Dead_Circumflex), 0x005a, 0, 0, 0, 0}, 0x1e90 }, // U1E90 # LATIN CAPITAL LETTER Z WITH CIRCUMFLEX
++ { {UNITIZE(Qt::Key_Dead_Circumflex), 0x0061, 0, 0, 0, 0}, 0x00e2 }, // U00E2 # LATIN SMALL LETTER A WITH CIRCUMFLEX
++ { {UNITIZE(Qt::Key_Dead_Circumflex), 0x0063, 0, 0, 0, 0}, 0x0109 }, // U0109 # LATIN SMALL LETTER C WITH CIRCUMFLEX
++ { {UNITIZE(Qt::Key_Dead_Circumflex), 0x0065, 0, 0, 0, 0}, 0x00ea }, // U00EA # LATIN SMALL LETTER E WITH CIRCUMFLEX
++ { {UNITIZE(Qt::Key_Dead_Circumflex), 0x0067, 0, 0, 0, 0}, 0x011d }, // U011D # LATIN SMALL LETTER G WITH CIRCUMFLEX
++ { {UNITIZE(Qt::Key_Dead_Circumflex), 0x0068, 0, 0, 0, 0}, 0x0125 }, // U0125 # LATIN SMALL LETTER H WITH CIRCUMFLEX
++ { {UNITIZE(Qt::Key_Dead_Circumflex), 0x0069, 0, 0, 0, 0}, 0x00ee }, // U00EE # LATIN SMALL LETTER I WITH CIRCUMFLEX
++ { {UNITIZE(Qt::Key_Dead_Circumflex), 0x006a, 0, 0, 0, 0}, 0x0135 }, // U0135 # LATIN SMALL LETTER J WITH CIRCUMFLEX
++ { {UNITIZE(Qt::Key_Dead_Circumflex), 0x006f, 0, 0, 0, 0}, 0x00f4 }, // U00F4 # LATIN SMALL LETTER O WITH CIRCUMFLEX
++ { {UNITIZE(Qt::Key_Dead_Circumflex), 0x0073, 0, 0, 0, 0}, 0x015d }, // U015D # LATIN SMALL LETTER S WITH CIRCUMFLEX
++ { {UNITIZE(Qt::Key_Dead_Circumflex), 0x0075, 0, 0, 0, 0}, 0x00fb }, // U00FB # LATIN SMALL LETTER U WITH CIRCUMFLEX
++ { {UNITIZE(Qt::Key_Dead_Circumflex), 0x0077, 0, 0, 0, 0}, 0x0175 }, // U0175 # LATIN SMALL LETTER W WITH CIRCUMFLEX
++ { {UNITIZE(Qt::Key_Dead_Circumflex), 0x0079, 0, 0, 0, 0}, 0x0177 }, // U0177 # LATIN SMALL LETTER Y WITH CIRCUMFLEX
++ { {UNITIZE(Qt::Key_Dead_Circumflex), 0x007a, 0, 0, 0, 0}, 0x1e91 }, // U1E91 # LATIN SMALL LETTER Z WITH CIRCUMFLEX
++ { {UNITIZE(Qt::Key_Dead_Circumflex), 0x1ea0, 0, 0, 0, 0}, 0x1eac }, // U1EAC # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND DOT BELOW
++ { {UNITIZE(Qt::Key_Dead_Circumflex), 0x1ea1, 0, 0, 0, 0}, 0x1ead }, // U1EAD # LATIN SMALL LETTER A WITH CIRCUMFLEX AND DOT BELOW
++ { {UNITIZE(Qt::Key_Dead_Circumflex), 0x1eb8, 0, 0, 0, 0}, 0x1ec6 }, // U1EC6 # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND DOT BELOW
++ { {UNITIZE(Qt::Key_Dead_Circumflex), 0x1eb9, 0, 0, 0, 0}, 0x1ec7 }, // U1EC7 # LATIN SMALL LETTER E WITH CIRCUMFLEX AND DOT BELOW
++ { {UNITIZE(Qt::Key_Dead_Circumflex), 0x1ecc, 0, 0, 0, 0}, 0x1ed8 }, // U1ED8 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND DOT BELOW
++ { {UNITIZE(Qt::Key_Dead_Circumflex), 0x1ecd, 0, 0, 0, 0}, 0x1ed9 }, // U1ED9 # LATIN SMALL LETTER O WITH CIRCUMFLEX AND DOT BELOW
++ { {UNITIZE(Qt::Key_Dead_Circumflex), 0x2212, 0, 0, 0, 0}, 0x207b }, // U207B # SUPERSCRIPT MINUS
++ { {UNITIZE(Qt::Key_Dead_Circumflex), 0x4e00, 0, 0, 0, 0}, 0x3192 }, // U3192 # IDEOGRAPHIC ANNOTATION ONE MARK
++ { {UNITIZE(Qt::Key_Dead_Circumflex), 0x4e01, 0, 0, 0, 0}, 0x319c }, // U319C # IDEOGRAPHIC ANNOTATION FOURTH MARK
++ { {UNITIZE(Qt::Key_Dead_Circumflex), 0x4e09, 0, 0, 0, 0}, 0x3194 }, // U3194 # IDEOGRAPHIC ANNOTATION THREE MARK
++ { {UNITIZE(Qt::Key_Dead_Circumflex), 0x4e0a, 0, 0, 0, 0}, 0x3196 }, // U3196 # IDEOGRAPHIC ANNOTATION TOP MARK
++ { {UNITIZE(Qt::Key_Dead_Circumflex), 0x4e0b, 0, 0, 0, 0}, 0x3198 }, // U3198 # IDEOGRAPHIC ANNOTATION BOTTOM MARK
++ { {UNITIZE(Qt::Key_Dead_Circumflex), 0x4e19, 0, 0, 0, 0}, 0x319b }, // U319B # IDEOGRAPHIC ANNOTATION THIRD MARK
++ { {UNITIZE(Qt::Key_Dead_Circumflex), 0x4e2d, 0, 0, 0, 0}, 0x3197 }, // U3197 # IDEOGRAPHIC ANNOTATION MIDDLE MARK
++ { {UNITIZE(Qt::Key_Dead_Circumflex), 0x4e59, 0, 0, 0, 0}, 0x319a }, // U319A # IDEOGRAPHIC ANNOTATION SECOND MARK
++ { {UNITIZE(Qt::Key_Dead_Circumflex), 0x4e8c, 0, 0, 0, 0}, 0x3193 }, // U3193 # IDEOGRAPHIC ANNOTATION TWO MARK
++ { {UNITIZE(Qt::Key_Dead_Circumflex), 0x4eba, 0, 0, 0, 0}, 0x319f }, // U319F # IDEOGRAPHIC ANNOTATION MAN MARK
++ { {UNITIZE(Qt::Key_Dead_Circumflex), 0x56db, 0, 0, 0, 0}, 0x3195 }, // U3195 # IDEOGRAPHIC ANNOTATION FOUR MARK
++ { {UNITIZE(Qt::Key_Dead_Circumflex), 0x5730, 0, 0, 0, 0}, 0x319e }, // U319E # IDEOGRAPHIC ANNOTATION EARTH MARK
++ { {UNITIZE(Qt::Key_Dead_Circumflex), 0x5929, 0, 0, 0, 0}, 0x319d }, // U319D # IDEOGRAPHIC ANNOTATION HEAVEN MARK
++ { {UNITIZE(Qt::Key_Dead_Circumflex), 0x7532, 0, 0, 0, 0}, 0x3199 }, // U3199 # IDEOGRAPHIC ANNOTATION FIRST MARK
++ { {UNITIZE(Qt::Key_Dead_Circumflex), UNITIZE(Qt::Key_Multi_key), 0x0021, 0x0041, 0, 0}, 0x1eac }, // U1EAC # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND DOT BELOW
++ { {UNITIZE(Qt::Key_Dead_Circumflex), UNITIZE(Qt::Key_Multi_key), 0x0021, 0x0045, 0, 0}, 0x1ec6 }, // U1EC6 # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND DOT BELOW
++ { {UNITIZE(Qt::Key_Dead_Circumflex), UNITIZE(Qt::Key_Multi_key), 0x0021, 0x004f, 0, 0}, 0x1ed8 }, // U1ED8 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND DOT BELOW
++ { {UNITIZE(Qt::Key_Dead_Circumflex), UNITIZE(Qt::Key_Multi_key), 0x0021, 0x0061, 0, 0}, 0x1ead }, // U1EAD # LATIN SMALL LETTER A WITH CIRCUMFLEX AND DOT BELOW
++ { {UNITIZE(Qt::Key_Dead_Circumflex), UNITIZE(Qt::Key_Multi_key), 0x0021, 0x0065, 0, 0}, 0x1ec7 }, // U1EC7 # LATIN SMALL LETTER E WITH CIRCUMFLEX AND DOT BELOW
++ { {UNITIZE(Qt::Key_Dead_Circumflex), UNITIZE(Qt::Key_Multi_key), 0x0021, 0x006f, 0, 0}, 0x1ed9 }, // U1ED9 # LATIN SMALL LETTER O WITH CIRCUMFLEX AND DOT BELOW
++ { {UNITIZE(Qt::Key_Dead_Circumflex), UNITIZE(Qt::Key_Multi_key), 0x0053, 0x004d, 0, 0}, 0x2120 }, // U2120 # SERVICE MARK
++ { {UNITIZE(Qt::Key_Dead_Circumflex), UNITIZE(Qt::Key_Multi_key), 0x0054, 0x004d, 0, 0}, 0x2122 }, // U2122 # TRADE MARK SIGN
++ { {UNITIZE(Qt::Key_Dead_Circumflex), UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0061, 0, 0}, 0x00aa }, // U00AA # FEMININE ORDINAL INDICATOR
++ { {UNITIZE(Qt::Key_Dead_Circumflex), UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0061, 0, 0}, 0x00aa }, // U00AA # FEMININE ORDINAL INDICATOR
++ { {UNITIZE(Qt::Key_Dead_Circumflex), UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0068, 0, 0}, 0x02b0 }, // U02B0 # MODIFIER LETTER SMALL H
++ { {UNITIZE(Qt::Key_Dead_Circumflex), UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0068, 0, 0}, 0x02b0 }, // U02B0 # MODIFIER LETTER SMALL H
++ { {UNITIZE(Qt::Key_Dead_Circumflex), UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0069, 0, 0}, 0x2071 }, // U2071 # SUPERSCRIPT LATIN SMALL LETTER I
++ { {UNITIZE(Qt::Key_Dead_Circumflex), UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0069, 0, 0}, 0x2071 }, // U2071 # SUPERSCRIPT LATIN SMALL LETTER I
++ { {UNITIZE(Qt::Key_Dead_Circumflex), UNITIZE(Qt::Key_Multi_key), 0x005f, 0x006a, 0, 0}, 0x02b2 }, // U02B2 # MODIFIER LETTER SMALL J
++ { {UNITIZE(Qt::Key_Dead_Circumflex), UNITIZE(Qt::Key_Multi_key), 0x005f, 0x006a, 0, 0}, 0x02b2 }, // U02B2 # MODIFIER LETTER SMALL J
++ { {UNITIZE(Qt::Key_Dead_Circumflex), UNITIZE(Qt::Key_Multi_key), 0x005f, 0x006c, 0, 0}, 0x02e1 }, // U02E1 # MODIFIER LETTER SMALL L
++ { {UNITIZE(Qt::Key_Dead_Circumflex), UNITIZE(Qt::Key_Multi_key), 0x005f, 0x006c, 0, 0}, 0x02e1 }, // U02E1 # MODIFIER LETTER SMALL L
++ { {UNITIZE(Qt::Key_Dead_Circumflex), UNITIZE(Qt::Key_Multi_key), 0x005f, 0x006e, 0, 0}, 0x207f }, // U207F # SUPERSCRIPT LATIN SMALL LETTER N
++ { {UNITIZE(Qt::Key_Dead_Circumflex), UNITIZE(Qt::Key_Multi_key), 0x005f, 0x006e, 0, 0}, 0x207f }, // U207F # SUPERSCRIPT LATIN SMALL LETTER N
++ { {UNITIZE(Qt::Key_Dead_Circumflex), UNITIZE(Qt::Key_Multi_key), 0x005f, 0x006f, 0, 0}, 0x00ba }, // U00BA # MASCULINE ORDINAL INDICATOR
++ { {UNITIZE(Qt::Key_Dead_Circumflex), UNITIZE(Qt::Key_Multi_key), 0x005f, 0x006f, 0, 0}, 0x00ba }, // U00BA # MASCULINE ORDINAL INDICATOR
++ { {UNITIZE(Qt::Key_Dead_Circumflex), UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0072, 0, 0}, 0x02b3 }, // U02B3 # MODIFIER LETTER SMALL R
++ { {UNITIZE(Qt::Key_Dead_Circumflex), UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0072, 0, 0}, 0x02b3 }, // U02B3 # MODIFIER LETTER SMALL R
++ { {UNITIZE(Qt::Key_Dead_Circumflex), UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0073, 0, 0}, 0x02e2 }, // U02E2 # MODIFIER LETTER SMALL S
++ { {UNITIZE(Qt::Key_Dead_Circumflex), UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0073, 0, 0}, 0x02e2 }, // U02E2 # MODIFIER LETTER SMALL S
++ { {UNITIZE(Qt::Key_Dead_Circumflex), UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0077, 0, 0}, 0x02b7 }, // U02B7 # MODIFIER LETTER SMALL W
++ { {UNITIZE(Qt::Key_Dead_Circumflex), UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0077, 0, 0}, 0x02b7 }, // U02B7 # MODIFIER LETTER SMALL W
++ { {UNITIZE(Qt::Key_Dead_Circumflex), UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0078, 0, 0}, 0x02e3 }, // U02E3 # MODIFIER LETTER SMALL X
++ { {UNITIZE(Qt::Key_Dead_Circumflex), UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0078, 0, 0}, 0x02e3 }, // U02E3 # MODIFIER LETTER SMALL X
++ { {UNITIZE(Qt::Key_Dead_Circumflex), UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0079, 0, 0}, 0x02b8 }, // U02B8 # MODIFIER LETTER SMALL Y
++ { {UNITIZE(Qt::Key_Dead_Circumflex), UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0079, 0, 0}, 0x02b8 }, // U02B8 # MODIFIER LETTER SMALL Y
++ { {UNITIZE(Qt::Key_Dead_Circumflex), UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0263, 0, 0}, 0x02e0 }, // U02E0 # MODIFIER LETTER SMALL GAMMA
++ { {UNITIZE(Qt::Key_Dead_Circumflex), UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0263, 0, 0}, 0x02e0 }, // U02E0 # MODIFIER LETTER SMALL GAMMA
++ { {UNITIZE(Qt::Key_Dead_Circumflex), UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0266, 0, 0}, 0x02b1 }, // U02B1 # MODIFIER LETTER SMALL H WITH HOOK
++ { {UNITIZE(Qt::Key_Dead_Circumflex), UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0266, 0, 0}, 0x02b1 }, // U02B1 # MODIFIER LETTER SMALL H WITH HOOK
++ { {UNITIZE(Qt::Key_Dead_Circumflex), UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0279, 0, 0}, 0x02b4 }, // U02B4 # MODIFIER LETTER SMALL TURNED R
++ { {UNITIZE(Qt::Key_Dead_Circumflex), UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0279, 0, 0}, 0x02b4 }, // U02B4 # MODIFIER LETTER SMALL TURNED R
++ { {UNITIZE(Qt::Key_Dead_Circumflex), UNITIZE(Qt::Key_Multi_key), 0x005f, 0x027b, 0, 0}, 0x02b5 }, // U02B5 # MODIFIER LETTER SMALL TURNED R WITH HOOK
++ { {UNITIZE(Qt::Key_Dead_Circumflex), UNITIZE(Qt::Key_Multi_key), 0x005f, 0x027b, 0, 0}, 0x02b5 }, // U02B5 # MODIFIER LETTER SMALL TURNED R WITH HOOK
++ { {UNITIZE(Qt::Key_Dead_Circumflex), UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0281, 0, 0}, 0x02b6 }, // U02B6 # MODIFIER LETTER SMALL CAPITAL INVERTED R
++ { {UNITIZE(Qt::Key_Dead_Circumflex), UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0281, 0, 0}, 0x02b6 }, // U02B6 # MODIFIER LETTER SMALL CAPITAL INVERTED R
++ { {UNITIZE(Qt::Key_Dead_Circumflex), UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0295, 0, 0}, 0x02e4 }, // U02E4 # MODIFIER LETTER SMALL REVERSED GLOTTAL STOP
++ { {UNITIZE(Qt::Key_Dead_Circumflex), UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0295, 0, 0}, 0x02e4 }, // U02E4 # MODIFIER LETTER SMALL REVERSED GLOTTAL STOP
++ { {UNITIZE(Qt::Key_Dead_Circumflex), UNITIZE(Qt::Key_Dead_Circumflex), 0, 0, 0, 0}, 0x005e }, // asciicircum
++ { {UNITIZE(Qt::Key_Dead_Circumflex), UNITIZE(Qt::Key_Dead_Belowdot), 0x0041, 0, 0, 0}, 0x1eac }, // U1EAC # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND DOT BELOW
++ { {UNITIZE(Qt::Key_Dead_Circumflex), UNITIZE(Qt::Key_Dead_Belowdot), 0x0045, 0, 0, 0}, 0x1ec6 }, // U1EC6 # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND DOT BELOW
++ { {UNITIZE(Qt::Key_Dead_Circumflex), UNITIZE(Qt::Key_Dead_Belowdot), 0x004f, 0, 0, 0}, 0x1ed8 }, // U1ED8 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND DOT BELOW
++ { {UNITIZE(Qt::Key_Dead_Circumflex), UNITIZE(Qt::Key_Dead_Belowdot), 0x0061, 0, 0, 0}, 0x1ead }, // U1EAD # LATIN SMALL LETTER A WITH CIRCUMFLEX AND DOT BELOW
++ { {UNITIZE(Qt::Key_Dead_Circumflex), UNITIZE(Qt::Key_Dead_Belowdot), 0x0065, 0, 0, 0}, 0x1ec7 }, // U1EC7 # LATIN SMALL LETTER E WITH CIRCUMFLEX AND DOT BELOW
++ { {UNITIZE(Qt::Key_Dead_Circumflex), UNITIZE(Qt::Key_Dead_Belowdot), 0x006f, 0, 0, 0}, 0x1ed9 }, // U1ED9 # LATIN SMALL LETTER O WITH CIRCUMFLEX AND DOT BELOW
++// /* broken */ { {UNITIZE(Qt::Key_Dead_Tilde), 0x0000, 0, 0, 0, 0}, 0x1ee0 }, // U1EE0 # LATIN CAPITAL LETTER O WITH HORN AND TILDE
++// /* broken */ { {UNITIZE(Qt::Key_Dead_Tilde), 0x0000, 0, 0, 0, 0}, 0x1eee }, // U1EEE # LATIN CAPITAL LETTER U WITH HORN AND TILDE
++// /* broken */ { {UNITIZE(Qt::Key_Dead_Tilde), 0x0000, 0, 0, 0, 0}, 0x1eef }, // U1EEF # LATIN SMALL LETTER U WITH HORN AND TILDE
++// /* broken */ { {UNITIZE(Qt::Key_Dead_Tilde), 0x0000, 0, 0, 0, 0}, 0x1ee1 }, // U1EE1 # LATIN SMALL LETTER O WITH HORN AND TILDE
++ { {UNITIZE(Qt::Key_Dead_Tilde), 0x0020, 0, 0, 0, 0}, 0x007e }, // asciitilde
++ { {UNITIZE(Qt::Key_Dead_Tilde), 0x0041, 0, 0, 0, 0}, 0x00c3 }, // U00C3 # LATIN CAPITAL LETTER A WITH TILDE
++ { {UNITIZE(Qt::Key_Dead_Tilde), 0x0045, 0, 0, 0, 0}, 0x1ebc }, // U1EBC # LATIN CAPITAL LETTER E WITH TILDE
++ { {UNITIZE(Qt::Key_Dead_Tilde), 0x0049, 0, 0, 0, 0}, 0x0128 }, // U0128 # LATIN CAPITAL LETTER I WITH TILDE
++ { {UNITIZE(Qt::Key_Dead_Tilde), 0x004e, 0, 0, 0, 0}, 0x00d1 }, // U00D1 # LATIN CAPITAL LETTER N WITH TILDE
++ { {UNITIZE(Qt::Key_Dead_Tilde), 0x004f, 0, 0, 0, 0}, 0x00d5 }, // U00D5 # LATIN CAPITAL LETTER O WITH TILDE
++ { {UNITIZE(Qt::Key_Dead_Tilde), 0x0055, 0, 0, 0, 0}, 0x0168 }, // U0168 # LATIN CAPITAL LETTER U WITH TILDE
++ { {UNITIZE(Qt::Key_Dead_Tilde), 0x0056, 0, 0, 0, 0}, 0x1e7c }, // U1E7C # LATIN CAPITAL LETTER V WITH TILDE
++ { {UNITIZE(Qt::Key_Dead_Tilde), 0x0059, 0, 0, 0, 0}, 0x1ef8 }, // U1EF8 # LATIN CAPITAL LETTER Y WITH TILDE
++ { {UNITIZE(Qt::Key_Dead_Tilde), 0x0061, 0, 0, 0, 0}, 0x00e3 }, // U00E3 # LATIN SMALL LETTER A WITH TILDE
++ { {UNITIZE(Qt::Key_Dead_Tilde), 0x0065, 0, 0, 0, 0}, 0x1ebd }, // U1EBD # LATIN SMALL LETTER E WITH TILDE
++ { {UNITIZE(Qt::Key_Dead_Tilde), 0x0069, 0, 0, 0, 0}, 0x0129 }, // U0129 # LATIN SMALL LETTER I WITH TILDE
++ { {UNITIZE(Qt::Key_Dead_Tilde), 0x006e, 0, 0, 0, 0}, 0x00f1 }, // U00F1 # LATIN SMALL LETTER N WITH TILDE
++ { {UNITIZE(Qt::Key_Dead_Tilde), 0x006f, 0, 0, 0, 0}, 0x00f5 }, // U00F5 # LATIN SMALL LETTER O WITH TILDE
++ { {UNITIZE(Qt::Key_Dead_Tilde), 0x0075, 0, 0, 0, 0}, 0x0169 }, // U0169 # LATIN SMALL LETTER U WITH TILDE
++ { {UNITIZE(Qt::Key_Dead_Tilde), 0x0076, 0, 0, 0, 0}, 0x1e7d }, // U1E7D # LATIN SMALL LETTER V WITH TILDE
++ { {UNITIZE(Qt::Key_Dead_Tilde), 0x0079, 0, 0, 0, 0}, 0x1ef9 }, // U1EF9 # LATIN SMALL LETTER Y WITH TILDE
++ { {UNITIZE(Qt::Key_Dead_Tilde), 0x00c2, 0, 0, 0, 0}, 0x1eaa }, // U1EAA # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND TILDE
++ { {UNITIZE(Qt::Key_Dead_Tilde), 0x00ca, 0, 0, 0, 0}, 0x1ec4 }, // U1EC4 # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND TILDE
++ { {UNITIZE(Qt::Key_Dead_Tilde), 0x00d4, 0, 0, 0, 0}, 0x1ed6 }, // U1ED6 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND TILDE
++ { {UNITIZE(Qt::Key_Dead_Tilde), 0x00e2, 0, 0, 0, 0}, 0x1eab }, // U1EAB # LATIN SMALL LETTER A WITH CIRCUMFLEX AND TILDE
++ { {UNITIZE(Qt::Key_Dead_Tilde), 0x00ea, 0, 0, 0, 0}, 0x1ec5 }, // U1EC5 # LATIN SMALL LETTER E WITH CIRCUMFLEX AND TILDE
++ { {UNITIZE(Qt::Key_Dead_Tilde), 0x00f4, 0, 0, 0, 0}, 0x1ed7 }, // U1ED7 # LATIN SMALL LETTER O WITH CIRCUMFLEX AND TILDE
++ { {UNITIZE(Qt::Key_Dead_Tilde), 0x0102, 0, 0, 0, 0}, 0x1eb4 }, // U1EB4 # LATIN CAPITAL LETTER A WITH BREVE AND TILDE
++ { {UNITIZE(Qt::Key_Dead_Tilde), 0x0103, 0, 0, 0, 0}, 0x1eb5 }, // U1EB5 # LATIN SMALL LETTER A WITH BREVE AND TILDE
++ { {UNITIZE(Qt::Key_Dead_Tilde), 0x01A0, 0, 0, 0, 0}, 0x1ee0 }, // U1EE0 # LATIN CAPITAL LETTER O WITH HORN AND TILDE
++ { {UNITIZE(Qt::Key_Dead_Tilde), 0x01A1, 0, 0, 0, 0}, 0x1ee1 }, // U1EE1 # LATIN SMALL LETTER O WITH HORN AND TILDE
++ { {UNITIZE(Qt::Key_Dead_Tilde), 0x01AF, 0, 0, 0, 0}, 0x1eee }, // U1EEE # LATIN CAPITAL LETTER U WITH HORN AND TILDE
++ { {UNITIZE(Qt::Key_Dead_Tilde), 0x01B0, 0, 0, 0, 0}, 0x1eef }, // U1EEF # LATIN SMALL LETTER U WITH HORN AND TILDE
++ { {UNITIZE(Qt::Key_Dead_Tilde), 0x0313, 0x0391, 0, 0, 0}, 0x1f0e }, // U1F0E # GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI
++ { {UNITIZE(Qt::Key_Dead_Tilde), 0x0313, 0x0397, 0, 0, 0}, 0x1f2e }, // U1F2E # GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI
++ { {UNITIZE(Qt::Key_Dead_Tilde), 0x0313, 0x0399, 0, 0, 0}, 0x1f3e }, // U1F3E # GREEK CAPITAL LETTER IOTA WITH PSILI AND PERISPOMENI
++ { {UNITIZE(Qt::Key_Dead_Tilde), 0x0313, 0x03a9, 0, 0, 0}, 0x1f6e }, // U1F6E # GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI
++ { {UNITIZE(Qt::Key_Dead_Tilde), 0x0313, 0x03b1, 0, 0, 0}, 0x1f06 }, // U1F06 # GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI
++ { {UNITIZE(Qt::Key_Dead_Tilde), 0x0313, 0x03b7, 0, 0, 0}, 0x1f26 }, // U1F26 # GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI
++ { {UNITIZE(Qt::Key_Dead_Tilde), 0x0313, 0x03b9, 0, 0, 0}, 0x1f36 }, // U1F36 # GREEK SMALL LETTER IOTA WITH PSILI AND PERISPOMENI
++ { {UNITIZE(Qt::Key_Dead_Tilde), 0x0313, 0x03c5, 0, 0, 0}, 0x1f56 }, // U1F56 # GREEK SMALL LETTER UPSILON WITH PSILI AND PERISPOMENI
++ { {UNITIZE(Qt::Key_Dead_Tilde), 0x0313, 0x03c9, 0, 0, 0}, 0x1f66 }, // U1F66 # GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI
++ { {UNITIZE(Qt::Key_Dead_Tilde), 0x0314, 0x0391, 0, 0, 0}, 0x1f0f }, // U1F0F # GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI
++ { {UNITIZE(Qt::Key_Dead_Tilde), 0x0314, 0x0397, 0, 0, 0}, 0x1f2f }, // U1F2F # GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI
++ { {UNITIZE(Qt::Key_Dead_Tilde), 0x0314, 0x0399, 0, 0, 0}, 0x1f3f }, // U1F3F # GREEK CAPITAL LETTER IOTA WITH DASIA AND PERISPOMENI
++ { {UNITIZE(Qt::Key_Dead_Tilde), 0x0314, 0x03a5, 0, 0, 0}, 0x1f5f }, // U1F5F # GREEK CAPITAL LETTER UPSILON WITH DASIA AND PERISPOMENI
++ { {UNITIZE(Qt::Key_Dead_Tilde), 0x0314, 0x03a9, 0, 0, 0}, 0x1f6f }, // U1F6F # GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI
++ { {UNITIZE(Qt::Key_Dead_Tilde), 0x0314, 0x03b1, 0, 0, 0}, 0x1f07 }, // U1F07 # GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI
++ { {UNITIZE(Qt::Key_Dead_Tilde), 0x0314, 0x03b7, 0, 0, 0}, 0x1f27 }, // U1F27 # GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI
++ { {UNITIZE(Qt::Key_Dead_Tilde), 0x0314, 0x03b9, 0, 0, 0}, 0x1f37 }, // U1F37 # GREEK SMALL LETTER IOTA WITH DASIA AND PERISPOMENI
++ { {UNITIZE(Qt::Key_Dead_Tilde), 0x0314, 0x03c5, 0, 0, 0}, 0x1f57 }, // U1F57 # GREEK SMALL LETTER UPSILON WITH DASIA AND PERISPOMENI
++ { {UNITIZE(Qt::Key_Dead_Tilde), 0x0314, 0x03c9, 0, 0, 0}, 0x1f67 }, // U1F67 # GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI
++ { {UNITIZE(Qt::Key_Dead_Tilde), 0x03b1, 0, 0, 0, 0}, 0x1fb6 }, // U1FB6 # GREEK SMALL LETTER ALPHA WITH PERISPOMENI
++ { {UNITIZE(Qt::Key_Dead_Tilde), 0x03b7, 0, 0, 0, 0}, 0x1fc6 }, // U1FC6 # GREEK SMALL LETTER ETA WITH PERISPOMENI
++ { {UNITIZE(Qt::Key_Dead_Tilde), 0x03b9, 0, 0, 0, 0}, 0x1fd6 }, // U1FD6 # GREEK SMALL LETTER IOTA WITH PERISPOMENI
++ { {UNITIZE(Qt::Key_Dead_Tilde), 0x03c5, 0, 0, 0, 0}, 0x1fe6 }, // U1FE6 # GREEK SMALL LETTER UPSILON WITH PERISPOMENI
++ { {UNITIZE(Qt::Key_Dead_Tilde), 0x03c9, 0, 0, 0, 0}, 0x1ff6 }, // U1FF6 # GREEK SMALL LETTER OMEGA WITH PERISPOMENI
++ { {UNITIZE(Qt::Key_Dead_Tilde), 0x03ca, 0, 0, 0, 0}, 0x1fd7 }, // U1FD7 # GREEK SMALL LETTER IOTA WITH DIALYTIKA AND PERISPOMENI
++ { {UNITIZE(Qt::Key_Dead_Tilde), 0x03cb, 0, 0, 0, 0}, 0x1fe7 }, // U1FE7 # GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND PERISPOMENI
++ { {UNITIZE(Qt::Key_Dead_Tilde), 0x1f00, 0, 0, 0, 0}, 0x1f06 }, // U1F06 # GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI
++ { {UNITIZE(Qt::Key_Dead_Tilde), 0x1f01, 0, 0, 0, 0}, 0x1f07 }, // U1F07 # GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI
++ { {UNITIZE(Qt::Key_Dead_Tilde), 0x1f08, 0, 0, 0, 0}, 0x1f0e }, // U1F0E # GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI
++ { {UNITIZE(Qt::Key_Dead_Tilde), 0x1f09, 0, 0, 0, 0}, 0x1f0f }, // U1F0F # GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI
++ { {UNITIZE(Qt::Key_Dead_Tilde), 0x1f20, 0, 0, 0, 0}, 0x1f26 }, // U1F26 # GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI
++ { {UNITIZE(Qt::Key_Dead_Tilde), 0x1f21, 0, 0, 0, 0}, 0x1f27 }, // U1F27 # GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI
++ { {UNITIZE(Qt::Key_Dead_Tilde), 0x1f28, 0, 0, 0, 0}, 0x1f2e }, // U1F2E # GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI
++ { {UNITIZE(Qt::Key_Dead_Tilde), 0x1f29, 0, 0, 0, 0}, 0x1f2f }, // U1F2F # GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI
++ { {UNITIZE(Qt::Key_Dead_Tilde), 0x1f30, 0, 0, 0, 0}, 0x1f36 }, // U1F36 # GREEK SMALL LETTER IOTA WITH PSILI AND PERISPOMENI
++ { {UNITIZE(Qt::Key_Dead_Tilde), 0x1f31, 0, 0, 0, 0}, 0x1f37 }, // U1F37 # GREEK SMALL LETTER IOTA WITH DASIA AND PERISPOMENI
++ { {UNITIZE(Qt::Key_Dead_Tilde), 0x1f38, 0, 0, 0, 0}, 0x1f3e }, // U1F3E # GREEK CAPITAL LETTER IOTA WITH PSILI AND PERISPOMENI
++ { {UNITIZE(Qt::Key_Dead_Tilde), 0x1f39, 0, 0, 0, 0}, 0x1f3f }, // U1F3F # GREEK CAPITAL LETTER IOTA WITH DASIA AND PERISPOMENI
++ { {UNITIZE(Qt::Key_Dead_Tilde), 0x1f50, 0, 0, 0, 0}, 0x1f56 }, // U1F56 # GREEK SMALL LETTER UPSILON WITH PSILI AND PERISPOMENI
++ { {UNITIZE(Qt::Key_Dead_Tilde), 0x1f51, 0, 0, 0, 0}, 0x1f57 }, // U1F57 # GREEK SMALL LETTER UPSILON WITH DASIA AND PERISPOMENI
++ { {UNITIZE(Qt::Key_Dead_Tilde), 0x1f59, 0, 0, 0, 0}, 0x1f5f }, // U1F5F # GREEK CAPITAL LETTER UPSILON WITH DASIA AND PERISPOMENI
++ { {UNITIZE(Qt::Key_Dead_Tilde), 0x1f60, 0, 0, 0, 0}, 0x1f66 }, // U1F66 # GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI
++ { {UNITIZE(Qt::Key_Dead_Tilde), 0x1f61, 0, 0, 0, 0}, 0x1f67 }, // U1F67 # GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI
++ { {UNITIZE(Qt::Key_Dead_Tilde), 0x1f68, 0, 0, 0, 0}, 0x1f6e }, // U1F6E # GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI
++ { {UNITIZE(Qt::Key_Dead_Tilde), 0x1f69, 0, 0, 0, 0}, 0x1f6f }, // U1F6F # GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI
++ { {UNITIZE(Qt::Key_Dead_Tilde), UNITIZE(Qt::Key_Multi_key), 0x0022, 0x03b9, 0, 0}, 0x1fd7 }, // U1FD7 # GREEK SMALL LETTER IOTA WITH DIALYTIKA AND PERISPOMENI
++ { {UNITIZE(Qt::Key_Dead_Tilde), UNITIZE(Qt::Key_Multi_key), 0x0022, 0x03c5, 0, 0}, 0x1fe7 }, // U1FE7 # GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND PERISPOMENI
++ { {UNITIZE(Qt::Key_Dead_Tilde), UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0391, 0, 0}, 0x1f0f }, // U1F0F # GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI
++ { {UNITIZE(Qt::Key_Dead_Tilde), UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0397, 0, 0}, 0x1f2f }, // U1F2F # GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI
++ { {UNITIZE(Qt::Key_Dead_Tilde), UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0399, 0, 0}, 0x1f3f }, // U1F3F # GREEK CAPITAL LETTER IOTA WITH DASIA AND PERISPOMENI
++ { {UNITIZE(Qt::Key_Dead_Tilde), UNITIZE(Qt::Key_Multi_key), 0x0028, 0x03a5, 0, 0}, 0x1f5f }, // U1F5F # GREEK CAPITAL LETTER UPSILON WITH DASIA AND PERISPOMENI
++ { {UNITIZE(Qt::Key_Dead_Tilde), UNITIZE(Qt::Key_Multi_key), 0x0028, 0x03a9, 0, 0}, 0x1f6f }, // U1F6F # GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI
++ { {UNITIZE(Qt::Key_Dead_Tilde), UNITIZE(Qt::Key_Multi_key), 0x0028, 0x03b1, 0, 0}, 0x1f07 }, // U1F07 # GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI
++ { {UNITIZE(Qt::Key_Dead_Tilde), UNITIZE(Qt::Key_Multi_key), 0x0028, 0x03b7, 0, 0}, 0x1f27 }, // U1F27 # GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI
++ { {UNITIZE(Qt::Key_Dead_Tilde), UNITIZE(Qt::Key_Multi_key), 0x0028, 0x03b9, 0, 0}, 0x1f37 }, // U1F37 # GREEK SMALL LETTER IOTA WITH DASIA AND PERISPOMENI
++ { {UNITIZE(Qt::Key_Dead_Tilde), UNITIZE(Qt::Key_Multi_key), 0x0028, 0x03c5, 0, 0}, 0x1f57 }, // U1F57 # GREEK SMALL LETTER UPSILON WITH DASIA AND PERISPOMENI
++ { {UNITIZE(Qt::Key_Dead_Tilde), UNITIZE(Qt::Key_Multi_key), 0x0028, 0x03c9, 0, 0}, 0x1f67 }, // U1F67 # GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI
++ { {UNITIZE(Qt::Key_Dead_Tilde), UNITIZE(Qt::Key_Multi_key), 0x0029, 0x0391, 0, 0}, 0x1f0e }, // U1F0E # GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI
++ { {UNITIZE(Qt::Key_Dead_Tilde), UNITIZE(Qt::Key_Multi_key), 0x0029, 0x0397, 0, 0}, 0x1f2e }, // U1F2E # GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI
++ { {UNITIZE(Qt::Key_Dead_Tilde), UNITIZE(Qt::Key_Multi_key), 0x0029, 0x0399, 0, 0}, 0x1f3e }, // U1F3E # GREEK CAPITAL LETTER IOTA WITH PSILI AND PERISPOMENI
++ { {UNITIZE(Qt::Key_Dead_Tilde), UNITIZE(Qt::Key_Multi_key), 0x0029, 0x03a9, 0, 0}, 0x1f6e }, // U1F6E # GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI
++ { {UNITIZE(Qt::Key_Dead_Tilde), UNITIZE(Qt::Key_Multi_key), 0x0029, 0x03b1, 0, 0}, 0x1f06 }, // U1F06 # GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI
++ { {UNITIZE(Qt::Key_Dead_Tilde), UNITIZE(Qt::Key_Multi_key), 0x0029, 0x03b7, 0, 0}, 0x1f26 }, // U1F26 # GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI
++ { {UNITIZE(Qt::Key_Dead_Tilde), UNITIZE(Qt::Key_Multi_key), 0x0029, 0x03b9, 0, 0}, 0x1f36 }, // U1F36 # GREEK SMALL LETTER IOTA WITH PSILI AND PERISPOMENI
++ { {UNITIZE(Qt::Key_Dead_Tilde), UNITIZE(Qt::Key_Multi_key), 0x0029, 0x03c5, 0, 0}, 0x1f56 }, // U1F56 # GREEK SMALL LETTER UPSILON WITH PSILI AND PERISPOMENI
++ { {UNITIZE(Qt::Key_Dead_Tilde), UNITIZE(Qt::Key_Multi_key), 0x0029, 0x03c9, 0, 0}, 0x1f66 }, // U1F66 # GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI
++ { {UNITIZE(Qt::Key_Dead_Tilde), UNITIZE(Qt::Key_Multi_key), 0x002b, 0x004f, 0, 0}, 0x1ee0 }, // U1EE0 # LATIN CAPITAL LETTER O WITH HORN AND TILDE
++ { {UNITIZE(Qt::Key_Dead_Tilde), UNITIZE(Qt::Key_Multi_key), 0x002b, 0x0055, 0, 0}, 0x1eee }, // U1EEE # LATIN CAPITAL LETTER U WITH HORN AND TILDE
++ { {UNITIZE(Qt::Key_Dead_Tilde), UNITIZE(Qt::Key_Multi_key), 0x002b, 0x006f, 0, 0}, 0x1ee1 }, // U1EE1 # LATIN SMALL LETTER O WITH HORN AND TILDE
++ { {UNITIZE(Qt::Key_Dead_Tilde), UNITIZE(Qt::Key_Multi_key), 0x002b, 0x0075, 0, 0}, 0x1eef }, // U1EEF # LATIN SMALL LETTER U WITH HORN AND TILDE
++ { {UNITIZE(Qt::Key_Dead_Tilde), UNITIZE(Qt::Key_Multi_key), 0x0055, 0x0041, 0, 0}, 0x1eb4 }, // U1EB4 # LATIN CAPITAL LETTER A WITH BREVE AND TILDE
++ { {UNITIZE(Qt::Key_Dead_Tilde), UNITIZE(Qt::Key_Multi_key), 0x0055, 0x0061, 0, 0}, 0x1eb5 }, // U1EB5 # LATIN SMALL LETTER A WITH BREVE AND TILDE
++ { {UNITIZE(Qt::Key_Dead_Tilde), UNITIZE(Qt::Key_Multi_key), 0x005e, 0x0041, 0, 0}, 0x1eaa }, // U1EAA # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND TILDE
++ { {UNITIZE(Qt::Key_Dead_Tilde), UNITIZE(Qt::Key_Multi_key), 0x005e, 0x0045, 0, 0}, 0x1ec4 }, // U1EC4 # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND TILDE
++ { {UNITIZE(Qt::Key_Dead_Tilde), UNITIZE(Qt::Key_Multi_key), 0x005e, 0x004f, 0, 0}, 0x1ed6 }, // U1ED6 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND TILDE
++ { {UNITIZE(Qt::Key_Dead_Tilde), UNITIZE(Qt::Key_Multi_key), 0x005e, 0x0061, 0, 0}, 0x1eab }, // U1EAB # LATIN SMALL LETTER A WITH CIRCUMFLEX AND TILDE
++ { {UNITIZE(Qt::Key_Dead_Tilde), UNITIZE(Qt::Key_Multi_key), 0x005e, 0x0065, 0, 0}, 0x1ec5 }, // U1EC5 # LATIN SMALL LETTER E WITH CIRCUMFLEX AND TILDE
++ { {UNITIZE(Qt::Key_Dead_Tilde), UNITIZE(Qt::Key_Multi_key), 0x005e, 0x006f, 0, 0}, 0x1ed7 }, // U1ED7 # LATIN SMALL LETTER O WITH CIRCUMFLEX AND TILDE
++ { {UNITIZE(Qt::Key_Dead_Tilde), UNITIZE(Qt::Key_Multi_key), 0x0062, 0x0041, 0, 0}, 0x1eb4 }, // U1EB4 # LATIN CAPITAL LETTER A WITH BREVE AND TILDE
++ { {UNITIZE(Qt::Key_Dead_Tilde), UNITIZE(Qt::Key_Multi_key), 0x0062, 0x0061, 0, 0}, 0x1eb5 }, // U1EB5 # LATIN SMALL LETTER A WITH BREVE AND TILDE
++ { {UNITIZE(Qt::Key_Dead_Tilde), UNITIZE(Qt::Key_Dead_Circumflex), 0x0041, 0, 0, 0}, 0x1eaa }, // U1EAA # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND TILDE
++ { {UNITIZE(Qt::Key_Dead_Tilde), UNITIZE(Qt::Key_Dead_Circumflex), 0x0045, 0, 0, 0}, 0x1ec4 }, // U1EC4 # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND TILDE
++ { {UNITIZE(Qt::Key_Dead_Tilde), UNITIZE(Qt::Key_Dead_Circumflex), 0x004f, 0, 0, 0}, 0x1ed6 }, // U1ED6 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND TILDE
++ { {UNITIZE(Qt::Key_Dead_Tilde), UNITIZE(Qt::Key_Dead_Circumflex), 0x0061, 0, 0, 0}, 0x1eab }, // U1EAB # LATIN SMALL LETTER A WITH CIRCUMFLEX AND TILDE
++ { {UNITIZE(Qt::Key_Dead_Tilde), UNITIZE(Qt::Key_Dead_Circumflex), 0x0065, 0, 0, 0}, 0x1ec5 }, // U1EC5 # LATIN SMALL LETTER E WITH CIRCUMFLEX AND TILDE
++ { {UNITIZE(Qt::Key_Dead_Tilde), UNITIZE(Qt::Key_Dead_Circumflex), 0x006f, 0, 0, 0}, 0x1ed7 }, // U1ED7 # LATIN SMALL LETTER O WITH CIRCUMFLEX AND TILDE
++ { {UNITIZE(Qt::Key_Dead_Tilde), UNITIZE(Qt::Key_Dead_Tilde), 0, 0, 0, 0}, 0x007e }, // asciitilde
++ { {UNITIZE(Qt::Key_Dead_Tilde), UNITIZE(Qt::Key_Dead_Breve), 0x0041, 0, 0, 0}, 0x1eb4 }, // U1EB4 # LATIN CAPITAL LETTER A WITH BREVE AND TILDE
++ { {UNITIZE(Qt::Key_Dead_Tilde), UNITIZE(Qt::Key_Dead_Breve), 0x0061, 0, 0, 0}, 0x1eb5 }, // U1EB5 # LATIN SMALL LETTER A WITH BREVE AND TILDE
++ { {UNITIZE(Qt::Key_Dead_Tilde), UNITIZE(Qt::Key_Dead_Diaeresis), 0x03b9, 0, 0, 0}, 0x1fd7 }, // U1FD7 # GREEK SMALL LETTER IOTA WITH DIALYTIKA AND PERISPOMENI
++ { {UNITIZE(Qt::Key_Dead_Tilde), UNITIZE(Qt::Key_Dead_Diaeresis), 0x03c5, 0, 0, 0}, 0x1fe7 }, // U1FE7 # GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND PERISPOMENI
++ { {UNITIZE(Qt::Key_Dead_Tilde), UNITIZE(Qt::Key_Dead_Horn), 0x004f, 0, 0, 0}, 0x1ee0 }, // U1EE0 # LATIN CAPITAL LETTER O WITH HORN AND TILDE
++ { {UNITIZE(Qt::Key_Dead_Tilde), UNITIZE(Qt::Key_Dead_Horn), 0x0055, 0, 0, 0}, 0x1eee }, // U1EEE # LATIN CAPITAL LETTER U WITH HORN AND TILDE
++ { {UNITIZE(Qt::Key_Dead_Tilde), UNITIZE(Qt::Key_Dead_Horn), 0x006f, 0, 0, 0}, 0x1ee1 }, // U1EE1 # LATIN SMALL LETTER O WITH HORN AND TILDE
++ { {UNITIZE(Qt::Key_Dead_Tilde), UNITIZE(Qt::Key_Dead_Horn), 0x0075, 0, 0, 0}, 0x1eef }, // U1EEF # LATIN SMALL LETTER U WITH HORN AND TILDE
++// /* broken */ { {UNITIZE(Qt::Key_Dead_Macron), 0x0000, 0x004c, 0, 0, 0}, 0x1e38 }, // U1E38 # LATIN CAPITAL LETTER L WITH DOT BELOW AND MACRON
++// /* broken */ { {UNITIZE(Qt::Key_Dead_Macron), 0x0000, 0x004f, 0, 0, 0}, 0x022c }, // U022C # LATIN CAPITAL LETTER O WITH TILDE AND MACRON
++// /* broken */ { {UNITIZE(Qt::Key_Dead_Macron), 0x0000, 0x0052, 0, 0, 0}, 0x1e5c }, // U1E5C # LATIN CAPITAL LETTER R WITH DOT BELOW AND MACRON
++// /* broken */ { {UNITIZE(Qt::Key_Dead_Macron), 0x0000, 0x006c, 0, 0, 0}, 0x1e39 }, // U1E39 # LATIN SMALL LETTER L WITH DOT BELOW AND MACRON
++// /* broken */ { {UNITIZE(Qt::Key_Dead_Macron), 0x0000, 0x006f, 0, 0, 0}, 0x022d }, // U022D # LATIN SMALL LETTER O WITH TILDE AND MACRON
++// /* broken */ { {UNITIZE(Qt::Key_Dead_Macron), 0x0000, 0x0072, 0, 0, 0}, 0x1e5d }, // U1E5D # LATIN SMALL LETTER R WITH DOT BELOW AND MACRON
++ { {UNITIZE(Qt::Key_Dead_Macron), 0x0020, 0, 0, 0, 0}, 0x00af }, // macron
++ { {UNITIZE(Qt::Key_Dead_Macron), 0x0041, 0, 0, 0, 0}, 0x0100 }, // U0100 # LATIN CAPITAL LETTER A WITH MACRON
++ { {UNITIZE(Qt::Key_Dead_Macron), 0x0045, 0, 0, 0, 0}, 0x0112 }, // U0112 # LATIN CAPITAL LETTER E WITH MACRON
++ { {UNITIZE(Qt::Key_Dead_Macron), 0x0047, 0, 0, 0, 0}, 0x1e20 }, // U1E20 # LATIN CAPITAL LETTER G WITH MACRON
++ { {UNITIZE(Qt::Key_Dead_Macron), 0x0049, 0, 0, 0, 0}, 0x012a }, // U012A # LATIN CAPITAL LETTER I WITH MACRON
++ { {UNITIZE(Qt::Key_Dead_Macron), 0x004f, 0, 0, 0, 0}, 0x014c }, // U014C # LATIN CAPITAL LETTER O WITH MACRON
++ { {UNITIZE(Qt::Key_Dead_Macron), 0x0055, 0, 0, 0, 0}, 0x016a }, // U016A # LATIN CAPITAL LETTER U WITH MACRON
++ { {UNITIZE(Qt::Key_Dead_Macron), 0x0059, 0, 0, 0, 0}, 0x0232 }, // U0232 # LATIN CAPITAL LETTER Y WITH MACRON
++ { {UNITIZE(Qt::Key_Dead_Macron), 0x0061, 0, 0, 0, 0}, 0x0101 }, // U0101 # LATIN SMALL LETTER A WITH MACRON
++ { {UNITIZE(Qt::Key_Dead_Macron), 0x0065, 0, 0, 0, 0}, 0x0113 }, // U0113 # LATIN SMALL LETTER E WITH MACRON
++ { {UNITIZE(Qt::Key_Dead_Macron), 0x0067, 0, 0, 0, 0}, 0x1e21 }, // U1E21 # LATIN SMALL LETTER G WITH MACRON
++ { {UNITIZE(Qt::Key_Dead_Macron), 0x0069, 0, 0, 0, 0}, 0x012b }, // U012B # LATIN SMALL LETTER I WITH MACRON
++ { {UNITIZE(Qt::Key_Dead_Macron), 0x006f, 0, 0, 0, 0}, 0x014d }, // U014D # LATIN SMALL LETTER O WITH MACRON
++ { {UNITIZE(Qt::Key_Dead_Macron), 0x0075, 0, 0, 0, 0}, 0x016b }, // U016B # LATIN SMALL LETTER U WITH MACRON
++ { {UNITIZE(Qt::Key_Dead_Macron), 0x0079, 0, 0, 0, 0}, 0x0233 }, // U0233 # LATIN SMALL LETTER Y WITH MACRON
++ { {UNITIZE(Qt::Key_Dead_Macron), 0x00c4, 0, 0, 0, 0}, 0x01de }, // U01DE # LATIN CAPITAL LETTER A WITH DIAERESIS AND MACRON
++ { {UNITIZE(Qt::Key_Dead_Macron), 0x00c6, 0, 0, 0, 0}, 0x01e2 }, // U01E2 # LATIN CAPITAL LETTER AE WITH MACRON
++ { {UNITIZE(Qt::Key_Dead_Macron), 0x00d5, 0, 0, 0, 0}, 0x022c }, // U022C # LATIN CAPITAL LETTER O WITH TILDE AND MACRON
++ { {UNITIZE(Qt::Key_Dead_Macron), 0x00d6, 0, 0, 0, 0}, 0x022a }, // U022A # LATIN CAPITAL LETTER O WITH DIAERESIS AND MACRON
++ { {UNITIZE(Qt::Key_Dead_Macron), 0x00dc, 0, 0, 0, 0}, 0x01d5 }, // U01D5 # LATIN CAPITAL LETTER U WITH DIAERESIS AND MACRON
++ { {UNITIZE(Qt::Key_Dead_Macron), 0x00e4, 0, 0, 0, 0}, 0x01df }, // U01DF # LATIN SMALL LETTER A WITH DIAERESIS AND MACRON
++ { {UNITIZE(Qt::Key_Dead_Macron), 0x00e6, 0, 0, 0, 0}, 0x01e3 }, // U01E3 # LATIN SMALL LETTER AE WITH MACRON
++ { {UNITIZE(Qt::Key_Dead_Macron), 0x00f5, 0, 0, 0, 0}, 0x022d }, // U022D # LATIN SMALL LETTER O WITH TILDE AND MACRON
++ { {UNITIZE(Qt::Key_Dead_Macron), 0x00f6, 0, 0, 0, 0}, 0x022b }, // U022B # LATIN SMALL LETTER O WITH DIAERESIS AND MACRON
++ { {UNITIZE(Qt::Key_Dead_Macron), 0x00fc, 0, 0, 0, 0}, 0x01d6 }, // U01D6 # LATIN SMALL LETTER U WITH DIAERESIS AND MACRON
++ { {UNITIZE(Qt::Key_Dead_Macron), 0x01ea, 0, 0, 0, 0}, 0x01ec }, // U01EC # LATIN CAPITAL LETTER O WITH OGONEK AND MACRON
++ { {UNITIZE(Qt::Key_Dead_Macron), 0x01eb, 0, 0, 0, 0}, 0x01ed }, // U01ED # LATIN SMALL LETTER O WITH OGONEK AND MACRON
++ { {UNITIZE(Qt::Key_Dead_Macron), 0x0226, 0, 0, 0, 0}, 0x01e0 }, // U01E0 # LATIN CAPITAL LETTER A WITH DOT ABOVE AND MACRON
++ { {UNITIZE(Qt::Key_Dead_Macron), 0x0227, 0, 0, 0, 0}, 0x01e1 }, // U01E1 # LATIN SMALL LETTER A WITH DOT ABOVE AND MACRON
++ { {UNITIZE(Qt::Key_Dead_Macron), 0x022e, 0, 0, 0, 0}, 0x0230 }, // U0230 # LATIN CAPITAL LETTER O WITH DOT ABOVE AND MACRON
++ { {UNITIZE(Qt::Key_Dead_Macron), 0x022f, 0, 0, 0, 0}, 0x0231 }, // U0231 # LATIN SMALL LETTER O WITH DOT ABOVE AND MACRON
++ { {UNITIZE(Qt::Key_Dead_Macron), 0x0391, 0, 0, 0, 0}, 0x1fb9 }, // U1FB9 # GREEK CAPITAL LETTER ALPHA WITH MACRON
++ { {UNITIZE(Qt::Key_Dead_Macron), 0x0399, 0, 0, 0, 0}, 0x1fd9 }, // U1FD9 # GREEK CAPITAL LETTER IOTA WITH MACRON
++ { {UNITIZE(Qt::Key_Dead_Macron), 0x03a5, 0, 0, 0, 0}, 0x1fe9 }, // U1FE9 # GREEK CAPITAL LETTER UPSILON WITH MACRON
++ { {UNITIZE(Qt::Key_Dead_Macron), 0x03b1, 0, 0, 0, 0}, 0x1fb1 }, // U1FB1 # GREEK SMALL LETTER ALPHA WITH MACRON
++ { {UNITIZE(Qt::Key_Dead_Macron), 0x03b9, 0, 0, 0, 0}, 0x1fd1 }, // U1FD1 # GREEK SMALL LETTER IOTA WITH MACRON
++ { {UNITIZE(Qt::Key_Dead_Macron), 0x03c5, 0, 0, 0, 0}, 0x1fe1 }, // U1FE1 # GREEK SMALL LETTER UPSILON WITH MACRON
++ { {UNITIZE(Qt::Key_Dead_Macron), 0x0418, 0, 0, 0, 0}, 0x04e2 }, // U04E2 # CYRILLIC CAPITAL LETTER I WITH MACRON
++ { {UNITIZE(Qt::Key_Dead_Macron), 0x0423, 0, 0, 0, 0}, 0x04ee }, // U04EE # CYRILLIC CAPITAL LETTER U WITH MACRON
++ { {UNITIZE(Qt::Key_Dead_Macron), 0x0438, 0, 0, 0, 0}, 0x04e3 }, // U04E3 # CYRILLIC SMALL LETTER I WITH MACRON
++ { {UNITIZE(Qt::Key_Dead_Macron), 0x0443, 0, 0, 0, 0}, 0x04ef }, // U04EF # CYRILLIC SMALL LETTER U WITH MACRON
++ { {UNITIZE(Qt::Key_Dead_Macron), 0x1e36, 0, 0, 0, 0}, 0x1e38 }, // U1E38 # LATIN CAPITAL LETTER L WITH DOT BELOW AND MACRON
++ { {UNITIZE(Qt::Key_Dead_Macron), 0x1e37, 0, 0, 0, 0}, 0x1e39 }, // U1E39 # LATIN SMALL LETTER L WITH DOT BELOW AND MACRON
++ { {UNITIZE(Qt::Key_Dead_Macron), 0x1e5a, 0, 0, 0, 0}, 0x1e5c }, // U1E5C # LATIN CAPITAL LETTER R WITH DOT BELOW AND MACRON
++ { {UNITIZE(Qt::Key_Dead_Macron), 0x1e5b, 0, 0, 0, 0}, 0x1e5d }, // U1E5D # LATIN SMALL LETTER R WITH DOT BELOW AND MACRON
++ { {UNITIZE(Qt::Key_Dead_Macron), UNITIZE(Qt::Key_Multi_key), 0x0021, 0x004c, 0, 0}, 0x1e38 }, // U1E38 # LATIN CAPITAL LETTER L WITH DOT BELOW AND MACRON
++ { {UNITIZE(Qt::Key_Dead_Macron), UNITIZE(Qt::Key_Multi_key), 0x0021, 0x0052, 0, 0}, 0x1e5c }, // U1E5C # LATIN CAPITAL LETTER R WITH DOT BELOW AND MACRON
++ { {UNITIZE(Qt::Key_Dead_Macron), UNITIZE(Qt::Key_Multi_key), 0x0021, 0x006c, 0, 0}, 0x1e39 }, // U1E39 # LATIN SMALL LETTER L WITH DOT BELOW AND MACRON
++ { {UNITIZE(Qt::Key_Dead_Macron), UNITIZE(Qt::Key_Multi_key), 0x0021, 0x0072, 0, 0}, 0x1e5d }, // U1E5D # LATIN SMALL LETTER R WITH DOT BELOW AND MACRON
++ { {UNITIZE(Qt::Key_Dead_Macron), UNITIZE(Qt::Key_Multi_key), 0x0022, 0x0041, 0, 0}, 0x01de }, // U01DE # LATIN CAPITAL LETTER A WITH DIAERESIS AND MACRON
++ { {UNITIZE(Qt::Key_Dead_Macron), UNITIZE(Qt::Key_Multi_key), 0x0022, 0x004f, 0, 0}, 0x022a }, // U022A # LATIN CAPITAL LETTER O WITH DIAERESIS AND MACRON
++ { {UNITIZE(Qt::Key_Dead_Macron), UNITIZE(Qt::Key_Multi_key), 0x0022, 0x0055, 0, 0}, 0x01d5 }, // U01D5 # LATIN CAPITAL LETTER U WITH DIAERESIS AND MACRON
++ { {UNITIZE(Qt::Key_Dead_Macron), UNITIZE(Qt::Key_Multi_key), 0x0022, 0x0061, 0, 0}, 0x01df }, // U01DF # LATIN SMALL LETTER A WITH DIAERESIS AND MACRON
++ { {UNITIZE(Qt::Key_Dead_Macron), UNITIZE(Qt::Key_Multi_key), 0x0022, 0x006f, 0, 0}, 0x022b }, // U022B # LATIN SMALL LETTER O WITH DIAERESIS AND MACRON
++ { {UNITIZE(Qt::Key_Dead_Macron), UNITIZE(Qt::Key_Multi_key), 0x0022, 0x0075, 0, 0}, 0x01d6 }, // U01D6 # LATIN SMALL LETTER U WITH DIAERESIS AND MACRON
++ { {UNITIZE(Qt::Key_Dead_Macron), UNITIZE(Qt::Key_Multi_key), 0x002e, 0x0041, 0, 0}, 0x01e0 }, // U01E0 # LATIN CAPITAL LETTER A WITH DOT ABOVE AND MACRON
++ { {UNITIZE(Qt::Key_Dead_Macron), UNITIZE(Qt::Key_Multi_key), 0x002e, 0x004f, 0, 0}, 0x0230 }, // U0230 # LATIN CAPITAL LETTER O WITH DOT ABOVE AND MACRON
++ { {UNITIZE(Qt::Key_Dead_Macron), UNITIZE(Qt::Key_Multi_key), 0x002e, 0x0061, 0, 0}, 0x01e1 }, // U01E1 # LATIN SMALL LETTER A WITH DOT ABOVE AND MACRON
++ { {UNITIZE(Qt::Key_Dead_Macron), UNITIZE(Qt::Key_Multi_key), 0x002e, 0x006f, 0, 0}, 0x0231 }, // U0231 # LATIN SMALL LETTER O WITH DOT ABOVE AND MACRON
++ { {UNITIZE(Qt::Key_Dead_Macron), UNITIZE(Qt::Key_Multi_key), 0x003b, 0x004f, 0, 0}, 0x01ec }, // U01EC # LATIN CAPITAL LETTER O WITH OGONEK AND MACRON
++ { {UNITIZE(Qt::Key_Dead_Macron), UNITIZE(Qt::Key_Multi_key), 0x003b, 0x006f, 0, 0}, 0x01ed }, // U01ED # LATIN SMALL LETTER O WITH OGONEK AND MACRON
++ { {UNITIZE(Qt::Key_Dead_Macron), UNITIZE(Qt::Key_Multi_key), 0x007e, 0x004f, 0, 0}, 0x022c }, // U022C # LATIN CAPITAL LETTER O WITH TILDE AND MACRON
++ { {UNITIZE(Qt::Key_Dead_Macron), UNITIZE(Qt::Key_Multi_key), 0x007e, 0x006f, 0, 0}, 0x022d }, // U022D # LATIN SMALL LETTER O WITH TILDE AND MACRON
++ { {UNITIZE(Qt::Key_Dead_Macron), UNITIZE(Qt::Key_Dead_Tilde), 0x004f, 0, 0, 0}, 0x022c }, // U022C # LATIN CAPITAL LETTER O WITH TILDE AND MACRON
++ { {UNITIZE(Qt::Key_Dead_Macron), UNITIZE(Qt::Key_Dead_Tilde), 0x006f, 0, 0, 0}, 0x022d }, // U022D # LATIN SMALL LETTER O WITH TILDE AND MACRON
++ { {UNITIZE(Qt::Key_Dead_Macron), UNITIZE(Qt::Key_Dead_Macron), 0, 0, 0, 0}, 0x00af }, // macron
++ { {UNITIZE(Qt::Key_Dead_Macron), UNITIZE(Qt::Key_Dead_Abovedot), 0x0041, 0, 0, 0}, 0x01e0 }, // U01E0 # LATIN CAPITAL LETTER A WITH DOT ABOVE AND MACRON
++ { {UNITIZE(Qt::Key_Dead_Macron), UNITIZE(Qt::Key_Dead_Abovedot), 0x004f, 0, 0, 0}, 0x0230 }, // U0230 # LATIN CAPITAL LETTER O WITH DOT ABOVE AND MACRON
++ { {UNITIZE(Qt::Key_Dead_Macron), UNITIZE(Qt::Key_Dead_Abovedot), 0x0061, 0, 0, 0}, 0x01e1 }, // U01E1 # LATIN SMALL LETTER A WITH DOT ABOVE AND MACRON
++ { {UNITIZE(Qt::Key_Dead_Macron), UNITIZE(Qt::Key_Dead_Abovedot), 0x006f, 0, 0, 0}, 0x0231 }, // U0231 # LATIN SMALL LETTER O WITH DOT ABOVE AND MACRON
++ { {UNITIZE(Qt::Key_Dead_Macron), UNITIZE(Qt::Key_Dead_Diaeresis), 0x0041, 0, 0, 0}, 0x01de }, // U01DE # LATIN CAPITAL LETTER A WITH DIAERESIS AND MACRON
++ { {UNITIZE(Qt::Key_Dead_Macron), UNITIZE(Qt::Key_Dead_Diaeresis), 0x004f, 0, 0, 0}, 0x022a }, // U022A # LATIN CAPITAL LETTER O WITH DIAERESIS AND MACRON
++ { {UNITIZE(Qt::Key_Dead_Macron), UNITIZE(Qt::Key_Dead_Diaeresis), 0x0055, 0, 0, 0}, 0x01d5 }, // U01D5 # LATIN CAPITAL LETTER U WITH DIAERESIS AND MACRON
++ { {UNITIZE(Qt::Key_Dead_Macron), UNITIZE(Qt::Key_Dead_Diaeresis), 0x0061, 0, 0, 0}, 0x01df }, // U01DF # LATIN SMALL LETTER A WITH DIAERESIS AND MACRON
++ { {UNITIZE(Qt::Key_Dead_Macron), UNITIZE(Qt::Key_Dead_Diaeresis), 0x006f, 0, 0, 0}, 0x022b }, // U022B # LATIN SMALL LETTER O WITH DIAERESIS AND MACRON
++ { {UNITIZE(Qt::Key_Dead_Macron), UNITIZE(Qt::Key_Dead_Diaeresis), 0x0075, 0, 0, 0}, 0x01d6 }, // U01D6 # LATIN SMALL LETTER U WITH DIAERESIS AND MACRON
++ { {UNITIZE(Qt::Key_Dead_Macron), UNITIZE(Qt::Key_Dead_Ogonek), 0x004f, 0, 0, 0}, 0x01ec }, // U01EC # LATIN CAPITAL LETTER O WITH OGONEK AND MACRON
++ { {UNITIZE(Qt::Key_Dead_Macron), UNITIZE(Qt::Key_Dead_Ogonek), 0x006f, 0, 0, 0}, 0x01ed }, // U01ED # LATIN SMALL LETTER O WITH OGONEK AND MACRON
++ { {UNITIZE(Qt::Key_Dead_Macron), UNITIZE(Qt::Key_Dead_Belowdot), 0x004c, 0, 0, 0}, 0x1e38 }, // U1E38 # LATIN CAPITAL LETTER L WITH DOT BELOW AND MACRON
++ { {UNITIZE(Qt::Key_Dead_Macron), UNITIZE(Qt::Key_Dead_Belowdot), 0x0052, 0, 0, 0}, 0x1e5c }, // U1E5C # LATIN CAPITAL LETTER R WITH DOT BELOW AND MACRON
++ { {UNITIZE(Qt::Key_Dead_Macron), UNITIZE(Qt::Key_Dead_Belowdot), 0x006c, 0, 0, 0}, 0x1e39 }, // U1E39 # LATIN SMALL LETTER L WITH DOT BELOW AND MACRON
++ { {UNITIZE(Qt::Key_Dead_Macron), UNITIZE(Qt::Key_Dead_Belowdot), 0x0072, 0, 0, 0}, 0x1e5d }, // U1E5D # LATIN SMALL LETTER R WITH DOT BELOW AND MACRON
++// /* broken */ { {UNITIZE(Qt::Key_Dead_Breve), 0x0000, 0x0041, 0, 0, 0}, 0x1eb6 }, // U1EB6 # LATIN CAPITAL LETTER A WITH BREVE AND DOT BELOW
++// /* broken */ { {UNITIZE(Qt::Key_Dead_Breve), 0x0000, 0x0061, 0, 0, 0}, 0x1eb7 }, // U1EB7 # LATIN SMALL LETTER A WITH BREVE AND DOT BELOW
++ { {UNITIZE(Qt::Key_Dead_Breve), 0x0020, 0, 0, 0, 0}, 0x02d8 }, // breve
++ { {UNITIZE(Qt::Key_Dead_Breve), 0x0041, 0, 0, 0, 0}, 0x0102 }, // U0102 # LATIN CAPITAL LETTER A WITH BREVE
++ { {UNITIZE(Qt::Key_Dead_Breve), 0x0045, 0, 0, 0, 0}, 0x0114 }, // U0114 # LATIN CAPITAL LETTER E WITH BREVE
++ { {UNITIZE(Qt::Key_Dead_Breve), 0x0047, 0, 0, 0, 0}, 0x011e }, // U011E # LATIN CAPITAL LETTER G WITH BREVE
++ { {UNITIZE(Qt::Key_Dead_Breve), 0x0049, 0, 0, 0, 0}, 0x012c }, // U012C # LATIN CAPITAL LETTER I WITH BREVE
++ { {UNITIZE(Qt::Key_Dead_Breve), 0x004f, 0, 0, 0, 0}, 0x014e }, // U014E # LATIN CAPITAL LETTER O WITH BREVE
++ { {UNITIZE(Qt::Key_Dead_Breve), 0x0055, 0, 0, 0, 0}, 0x016c }, // U016C # LATIN CAPITAL LETTER U WITH BREVE
++ { {UNITIZE(Qt::Key_Dead_Breve), 0x0061, 0, 0, 0, 0}, 0x0103 }, // U0103 # LATIN SMALL LETTER A WITH BREVE
++ { {UNITIZE(Qt::Key_Dead_Breve), 0x0065, 0, 0, 0, 0}, 0x0115 }, // U0115 # LATIN SMALL LETTER E WITH BREVE
++ { {UNITIZE(Qt::Key_Dead_Breve), 0x0067, 0, 0, 0, 0}, 0x011f }, // U011F # LATIN SMALL LETTER G WITH BREVE
++ { {UNITIZE(Qt::Key_Dead_Breve), 0x0069, 0, 0, 0, 0}, 0x012d }, // U012D # LATIN SMALL LETTER I WITH BREVE
++ { {UNITIZE(Qt::Key_Dead_Breve), 0x006f, 0, 0, 0, 0}, 0x014f }, // U014F # LATIN SMALL LETTER O WITH BREVE
++ { {UNITIZE(Qt::Key_Dead_Breve), 0x0075, 0, 0, 0, 0}, 0x016d }, // U016D # LATIN SMALL LETTER U WITH BREVE
++ { {UNITIZE(Qt::Key_Dead_Breve), 0x0228, 0, 0, 0, 0}, 0x1e1c }, // U1E1C # LATIN CAPITAL LETTER E WITH CEDILLA AND BREVE
++ { {UNITIZE(Qt::Key_Dead_Breve), 0x0229, 0, 0, 0, 0}, 0x1e1d }, // U1E1D # LATIN SMALL LETTER E WITH CEDILLA AND BREVE
++ { {UNITIZE(Qt::Key_Dead_Breve), 0x0391, 0, 0, 0, 0}, 0x1fb8 }, // U1FB8 # GREEK CAPITAL LETTER ALPHA WITH VRACHY
++ { {UNITIZE(Qt::Key_Dead_Breve), 0x0399, 0, 0, 0, 0}, 0x1fd8 }, // U1FD8 # GREEK CAPITAL LETTER IOTA WITH VRACHY
++ { {UNITIZE(Qt::Key_Dead_Breve), 0x03a5, 0, 0, 0, 0}, 0x1fe8 }, // U1FE8 # GREEK CAPITAL LETTER UPSILON WITH VRACHY
++ { {UNITIZE(Qt::Key_Dead_Breve), 0x03b1, 0, 0, 0, 0}, 0x1fb0 }, // U1FB0 # GREEK SMALL LETTER ALPHA WITH VRACHY
++ { {UNITIZE(Qt::Key_Dead_Breve), 0x03b9, 0, 0, 0, 0}, 0x1fd0 }, // U1FD0 # GREEK SMALL LETTER IOTA WITH VRACHY
++ { {UNITIZE(Qt::Key_Dead_Breve), 0x03c5, 0, 0, 0, 0}, 0x1fe0 }, // U1FE0 # GREEK SMALL LETTER UPSILON WITH VRACHY
++ { {UNITIZE(Qt::Key_Dead_Breve), 0x0410, 0, 0, 0, 0}, 0x04d0 }, // U04D0 # CYRILLIC CAPITAL LETTER A WITH BREVE
++ { {UNITIZE(Qt::Key_Dead_Breve), 0x0415, 0, 0, 0, 0}, 0x04d6 }, // U04D6 # CYRILLIC CAPITAL LETTER IE WITH BREVE
++ { {UNITIZE(Qt::Key_Dead_Breve), 0x0416, 0, 0, 0, 0}, 0x04c1 }, // U04C1 # CYRILLIC CAPITAL LETTER ZHE WITH BREVE
++ { {UNITIZE(Qt::Key_Dead_Breve), 0x0418, 0, 0, 0, 0}, 0x0419 }, // U0419 # CYRILLIC CAPITAL LETTER SHORT I
++ { {UNITIZE(Qt::Key_Dead_Breve), 0x0423, 0, 0, 0, 0}, 0x040e }, // U040E # CYRILLIC CAPITAL LETTER SHORT U
++ { {UNITIZE(Qt::Key_Dead_Breve), 0x0430, 0, 0, 0, 0}, 0x04d1 }, // U04D1 # CYRILLIC SMALL LETTER A WITH BREVE
++ { {UNITIZE(Qt::Key_Dead_Breve), 0x0435, 0, 0, 0, 0}, 0x04d7 }, // U04D7 # CYRILLIC SMALL LETTER IE WITH BREVE
++ { {UNITIZE(Qt::Key_Dead_Breve), 0x0436, 0, 0, 0, 0}, 0x04c2 }, // U04C2 # CYRILLIC SMALL LETTER ZHE WITH BREVE
++ { {UNITIZE(Qt::Key_Dead_Breve), 0x0438, 0, 0, 0, 0}, 0x0439 }, // U0439 # CYRILLIC SMALL LETTER SHORT I
++ { {UNITIZE(Qt::Key_Dead_Breve), 0x0443, 0, 0, 0, 0}, 0x045e }, // U045E # CYRILLIC SMALL LETTER SHORT U
++ { {UNITIZE(Qt::Key_Dead_Breve), 0x1ea0, 0, 0, 0, 0}, 0x1eb6 }, // U1EB6 # LATIN CAPITAL LETTER A WITH BREVE AND DOT BELOW
++ { {UNITIZE(Qt::Key_Dead_Breve), 0x1ea1, 0, 0, 0, 0}, 0x1eb7 }, // U1EB7 # LATIN SMALL LETTER A WITH BREVE AND DOT BELOW
++ { {UNITIZE(Qt::Key_Dead_Breve), UNITIZE(Qt::Key_Multi_key), 0x0021, 0x0041, 0, 0}, 0x1eb6 }, // U1EB6 # LATIN CAPITAL LETTER A WITH BREVE AND DOT BELOW
++ { {UNITIZE(Qt::Key_Dead_Breve), UNITIZE(Qt::Key_Multi_key), 0x0021, 0x0061, 0, 0}, 0x1eb7 }, // U1EB7 # LATIN SMALL LETTER A WITH BREVE AND DOT BELOW
++ { {UNITIZE(Qt::Key_Dead_Breve), UNITIZE(Qt::Key_Multi_key), 0x002c, 0x0045, 0, 0}, 0x1e1c }, // U1E1C # LATIN CAPITAL LETTER E WITH CEDILLA AND BREVE
++ { {UNITIZE(Qt::Key_Dead_Breve), UNITIZE(Qt::Key_Multi_key), 0x002c, 0x0065, 0, 0}, 0x1e1d }, // U1E1D # LATIN SMALL LETTER E WITH CEDILLA AND BREVE
++ { {UNITIZE(Qt::Key_Dead_Breve), UNITIZE(Qt::Key_Dead_Breve), 0, 0, 0, 0}, 0x02d8 }, // breve
++ { {UNITIZE(Qt::Key_Dead_Breve), UNITIZE(Qt::Key_Dead_Cedilla), 0x0045, 0, 0, 0}, 0x1e1c }, // U1E1C # LATIN CAPITAL LETTER E WITH CEDILLA AND BREVE
++ { {UNITIZE(Qt::Key_Dead_Breve), UNITIZE(Qt::Key_Dead_Cedilla), 0x0065, 0, 0, 0}, 0x1e1d }, // U1E1D # LATIN SMALL LETTER E WITH CEDILLA AND BREVE
++ { {UNITIZE(Qt::Key_Dead_Breve), UNITIZE(Qt::Key_Dead_Belowdot), 0x0041, 0, 0, 0}, 0x1eb6 }, // U1EB6 # LATIN CAPITAL LETTER A WITH BREVE AND DOT BELOW
++ { {UNITIZE(Qt::Key_Dead_Breve), UNITIZE(Qt::Key_Dead_Belowdot), 0x0061, 0, 0, 0}, 0x1eb7 }, // U1EB7 # LATIN SMALL LETTER A WITH BREVE AND DOT BELOW
++// /* broken */ { {UNITIZE(Qt::Key_Dead_Abovedot), 0x0000, 0x0053, 0, 0, 0}, 0x1e64 }, // U1E64 # LATIN CAPITAL LETTER S WITH ACUTE AND DOT ABOVE
++// /* broken */ { {UNITIZE(Qt::Key_Dead_Abovedot), 0x0000, 0x0053, 0, 0, 0}, 0x1e68 }, // U1E68 # LATIN CAPITAL LETTER S WITH DOT BELOW AND DOT ABOVE
++// /* broken */ { {UNITIZE(Qt::Key_Dead_Abovedot), 0x0000, 0x0073, 0, 0, 0}, 0x1e69 }, // U1E69 # LATIN SMALL LETTER S WITH DOT BELOW AND DOT ABOVE
++// /* broken */ { {UNITIZE(Qt::Key_Dead_Abovedot), 0x0000, 0x0073, 0, 0, 0}, 0x1e65 }, // U1E65 # LATIN SMALL LETTER S WITH ACUTE AND DOT ABOVE
++ { {UNITIZE(Qt::Key_Dead_Abovedot), 0x0020, 0, 0, 0, 0}, 0x02d9 }, // abovedot
++ { {UNITIZE(Qt::Key_Dead_Abovedot), 0x0041, 0, 0, 0, 0}, 0x0226 }, // U0226 # LATIN CAPITAL LETTER A WITH DOT ABOVE
++ { {UNITIZE(Qt::Key_Dead_Abovedot), 0x0042, 0, 0, 0, 0}, 0x1e02 }, // U1E02 # LATIN CAPITAL LETTER B WITH DOT ABOVE
++ { {UNITIZE(Qt::Key_Dead_Abovedot), 0x0043, 0, 0, 0, 0}, 0x010a }, // U010A # LATIN CAPITAL LETTER C WITH DOT ABOVE
++ { {UNITIZE(Qt::Key_Dead_Abovedot), 0x0044, 0, 0, 0, 0}, 0x1e0a }, // U1E0A # LATIN CAPITAL LETTER D WITH DOT ABOVE
++ { {UNITIZE(Qt::Key_Dead_Abovedot), 0x0045, 0, 0, 0, 0}, 0x0116 }, // U0116 # LATIN CAPITAL LETTER E WITH DOT ABOVE
++ { {UNITIZE(Qt::Key_Dead_Abovedot), 0x0046, 0, 0, 0, 0}, 0x1e1e }, // U1E1E # LATIN CAPITAL LETTER F WITH DOT ABOVE
++ { {UNITIZE(Qt::Key_Dead_Abovedot), 0x0047, 0, 0, 0, 0}, 0x0120 }, // U0120 # LATIN CAPITAL LETTER G WITH DOT ABOVE
++ { {UNITIZE(Qt::Key_Dead_Abovedot), 0x0048, 0, 0, 0, 0}, 0x1e22 }, // U1E22 # LATIN CAPITAL LETTER H WITH DOT ABOVE
++ { {UNITIZE(Qt::Key_Dead_Abovedot), 0x0049, 0, 0, 0, 0}, 0x0130 }, // U0130 # LATIN CAPITAL LETTER I WITH DOT ABOVE
++ { {UNITIZE(Qt::Key_Dead_Abovedot), 0x004d, 0, 0, 0, 0}, 0x1e40 }, // U1E40 # LATIN CAPITAL LETTER M WITH DOT ABOVE
++ { {UNITIZE(Qt::Key_Dead_Abovedot), 0x004e, 0, 0, 0, 0}, 0x1e44 }, // U1E44 # LATIN CAPITAL LETTER N WITH DOT ABOVE
++ { {UNITIZE(Qt::Key_Dead_Abovedot), 0x004f, 0, 0, 0, 0}, 0x022e }, // U022E # LATIN CAPITAL LETTER O WITH DOT ABOVE
++ { {UNITIZE(Qt::Key_Dead_Abovedot), 0x0050, 0, 0, 0, 0}, 0x1e56 }, // U1E56 # LATIN CAPITAL LETTER P WITH DOT ABOVE
++ { {UNITIZE(Qt::Key_Dead_Abovedot), 0x0052, 0, 0, 0, 0}, 0x1e58 }, // U1E58 # LATIN CAPITAL LETTER R WITH DOT ABOVE
++ { {UNITIZE(Qt::Key_Dead_Abovedot), 0x0053, 0, 0, 0, 0}, 0x1e60 }, // U1E60 # LATIN CAPITAL LETTER S WITH DOT ABOVE
++ { {UNITIZE(Qt::Key_Dead_Abovedot), 0x0054, 0, 0, 0, 0}, 0x1e6a }, // U1E6A # LATIN CAPITAL LETTER T WITH DOT ABOVE
++ { {UNITIZE(Qt::Key_Dead_Abovedot), 0x0057, 0, 0, 0, 0}, 0x1e86 }, // U1E86 # LATIN CAPITAL LETTER W WITH DOT ABOVE
++ { {UNITIZE(Qt::Key_Dead_Abovedot), 0x0058, 0, 0, 0, 0}, 0x1e8a }, // U1E8A # LATIN CAPITAL LETTER X WITH DOT ABOVE
++ { {UNITIZE(Qt::Key_Dead_Abovedot), 0x0059, 0, 0, 0, 0}, 0x1e8e }, // U1E8E # LATIN CAPITAL LETTER Y WITH DOT ABOVE
++ { {UNITIZE(Qt::Key_Dead_Abovedot), 0x005a, 0, 0, 0, 0}, 0x017b }, // U017B # LATIN CAPITAL LETTER Z WITH DOT ABOVE
++ { {UNITIZE(Qt::Key_Dead_Abovedot), 0x0061, 0, 0, 0, 0}, 0x0227 }, // U0227 # LATIN SMALL LETTER A WITH DOT ABOVE
++ { {UNITIZE(Qt::Key_Dead_Abovedot), 0x0062, 0, 0, 0, 0}, 0x1e03 }, // U1E03 # LATIN SMALL LETTER B WITH DOT ABOVE
++ { {UNITIZE(Qt::Key_Dead_Abovedot), 0x0063, 0, 0, 0, 0}, 0x010b }, // U010B # LATIN SMALL LETTER C WITH DOT ABOVE
++ { {UNITIZE(Qt::Key_Dead_Abovedot), 0x0064, 0, 0, 0, 0}, 0x1e0b }, // U1E0B # LATIN SMALL LETTER D WITH DOT ABOVE
++ { {UNITIZE(Qt::Key_Dead_Abovedot), 0x0065, 0, 0, 0, 0}, 0x0117 }, // U0117 # LATIN SMALL LETTER E WITH DOT ABOVE
++ { {UNITIZE(Qt::Key_Dead_Abovedot), 0x0066, 0, 0, 0, 0}, 0x1e1f }, // U1E1F # LATIN SMALL LETTER F WITH DOT ABOVE
++ { {UNITIZE(Qt::Key_Dead_Abovedot), 0x0067, 0, 0, 0, 0}, 0x0121 }, // U0121 # LATIN SMALL LETTER G WITH DOT ABOVE
++ { {UNITIZE(Qt::Key_Dead_Abovedot), 0x0068, 0, 0, 0, 0}, 0x1e23 }, // U1E23 # LATIN SMALL LETTER H WITH DOT ABOVE
++ { {UNITIZE(Qt::Key_Dead_Abovedot), 0x0069, 0, 0, 0, 0}, 0x0131 }, // U0131 # LATIN SMALL LETTER DOTLESS I
++ { {UNITIZE(Qt::Key_Dead_Abovedot), 0x006d, 0, 0, 0, 0}, 0x1e41 }, // U1E41 # LATIN SMALL LETTER M WITH DOT ABOVE
++ { {UNITIZE(Qt::Key_Dead_Abovedot), 0x006e, 0, 0, 0, 0}, 0x1e45 }, // U1E45 # LATIN SMALL LETTER N WITH DOT ABOVE
++ { {UNITIZE(Qt::Key_Dead_Abovedot), 0x006f, 0, 0, 0, 0}, 0x022f }, // U022F # LATIN SMALL LETTER O WITH DOT ABOVE
++ { {UNITIZE(Qt::Key_Dead_Abovedot), 0x0070, 0, 0, 0, 0}, 0x1e57 }, // U1E57 # LATIN SMALL LETTER P WITH DOT ABOVE
++ { {UNITIZE(Qt::Key_Dead_Abovedot), 0x0072, 0, 0, 0, 0}, 0x1e59 }, // U1E59 # LATIN SMALL LETTER R WITH DOT ABOVE
++ { {UNITIZE(Qt::Key_Dead_Abovedot), 0x0073, 0, 0, 0, 0}, 0x1e61 }, // U1E61 # LATIN SMALL LETTER S WITH DOT ABOVE
++ { {UNITIZE(Qt::Key_Dead_Abovedot), 0x0074, 0, 0, 0, 0}, 0x1e6b }, // U1E6B # LATIN SMALL LETTER T WITH DOT ABOVE
++ { {UNITIZE(Qt::Key_Dead_Abovedot), 0x0077, 0, 0, 0, 0}, 0x1e87 }, // U1E87 # LATIN SMALL LETTER W WITH DOT ABOVE
++ { {UNITIZE(Qt::Key_Dead_Abovedot), 0x0078, 0, 0, 0, 0}, 0x1e8b }, // U1E8B # LATIN SMALL LETTER X WITH DOT ABOVE
++ { {UNITIZE(Qt::Key_Dead_Abovedot), 0x0079, 0, 0, 0, 0}, 0x1e8f }, // U1E8F # LATIN SMALL LETTER Y WITH DOT ABOVE
++ { {UNITIZE(Qt::Key_Dead_Abovedot), 0x007a, 0, 0, 0, 0}, 0x017c }, // U017C # LATIN SMALL LETTER Z WITH DOT ABOVE
++ { {UNITIZE(Qt::Key_Dead_Abovedot), 0x015a, 0, 0, 0, 0}, 0x1e64 }, // U1E64 # LATIN CAPITAL LETTER S WITH ACUTE AND DOT ABOVE
++ { {UNITIZE(Qt::Key_Dead_Abovedot), 0x015b, 0, 0, 0, 0}, 0x1e65 }, // U1E65 # LATIN SMALL LETTER S WITH ACUTE AND DOT ABOVE
++ { {UNITIZE(Qt::Key_Dead_Abovedot), 0x0160, 0, 0, 0, 0}, 0x1e66 }, // U1E66 # LATIN CAPITAL LETTER S WITH CARON AND DOT ABOVE
++ { {UNITIZE(Qt::Key_Dead_Abovedot), 0x0161, 0, 0, 0, 0}, 0x1e67 }, // U1E67 # LATIN SMALL LETTER S WITH CARON AND DOT ABOVE
++ { {UNITIZE(Qt::Key_Dead_Abovedot), 0x017f, 0, 0, 0, 0}, 0x1e9b }, // U1E9B # LATIN SMALL LETTER LONG S WITH DOT ABOVE
++ { {UNITIZE(Qt::Key_Dead_Abovedot), 0x1e62, 0, 0, 0, 0}, 0x1e68 }, // U1E68 # LATIN CAPITAL LETTER S WITH DOT BELOW AND DOT ABOVE
++ { {UNITIZE(Qt::Key_Dead_Abovedot), 0x1e63, 0, 0, 0, 0}, 0x1e69 }, // U1E69 # LATIN SMALL LETTER S WITH DOT BELOW AND DOT ABOVE
++ { {UNITIZE(Qt::Key_Dead_Abovedot), UNITIZE(Qt::Key_Multi_key), 0x0021, 0x0053, 0, 0}, 0x1e68 }, // U1E68 # LATIN CAPITAL LETTER S WITH DOT BELOW AND DOT ABOVE
++ { {UNITIZE(Qt::Key_Dead_Abovedot), UNITIZE(Qt::Key_Multi_key), 0x0021, 0x0073, 0, 0}, 0x1e69 }, // U1E69 # LATIN SMALL LETTER S WITH DOT BELOW AND DOT ABOVE
++ { {UNITIZE(Qt::Key_Dead_Abovedot), UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0053, 0, 0}, 0x1e64 }, // U1E64 # LATIN CAPITAL LETTER S WITH ACUTE AND DOT ABOVE
++ { {UNITIZE(Qt::Key_Dead_Abovedot), UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0073, 0, 0}, 0x1e65 }, // U1E65 # LATIN SMALL LETTER S WITH ACUTE AND DOT ABOVE
++ { {UNITIZE(Qt::Key_Dead_Abovedot), UNITIZE(Qt::Key_Multi_key), 0x0063, 0x0053, 0, 0}, 0x1e66 }, // U1E66 # LATIN CAPITAL LETTER S WITH CARON AND DOT ABOVE
++ { {UNITIZE(Qt::Key_Dead_Abovedot), UNITIZE(Qt::Key_Multi_key), 0x0063, 0x0073, 0, 0}, 0x1e67 }, // U1E67 # LATIN SMALL LETTER S WITH CARON AND DOT ABOVE
++ { {UNITIZE(Qt::Key_Dead_Abovedot), UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0053, 0, 0}, 0x1e64 }, // U1E64 # LATIN CAPITAL LETTER S WITH ACUTE AND DOT ABOVE
++ { {UNITIZE(Qt::Key_Dead_Abovedot), UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0073, 0, 0}, 0x1e65 }, // U1E65 # LATIN SMALL LETTER S WITH ACUTE AND DOT ABOVE
++ { {UNITIZE(Qt::Key_Dead_Abovedot), UNITIZE(Qt::Key_Dead_Acute), 0x0053, 0, 0, 0}, 0x1e64 }, // U1E64 # LATIN CAPITAL LETTER S WITH ACUTE AND DOT ABOVE
++ { {UNITIZE(Qt::Key_Dead_Abovedot), UNITIZE(Qt::Key_Dead_Acute), 0x0073, 0, 0, 0}, 0x1e65 }, // U1E65 # LATIN SMALL LETTER S WITH ACUTE AND DOT ABOVE
++ { {UNITIZE(Qt::Key_Dead_Abovedot), UNITIZE(Qt::Key_Dead_Abovedot), 0, 0, 0, 0}, 0x02d9 }, // abovedot
++ { {UNITIZE(Qt::Key_Dead_Abovedot), UNITIZE(Qt::Key_Dead_Caron), 0x0053, 0, 0, 0}, 0x1e66 }, // U1E66 # LATIN CAPITAL LETTER S WITH CARON AND DOT ABOVE
++ { {UNITIZE(Qt::Key_Dead_Abovedot), UNITIZE(Qt::Key_Dead_Caron), 0x0073, 0, 0, 0}, 0x1e67 }, // U1E67 # LATIN SMALL LETTER S WITH CARON AND DOT ABOVE
++ { {UNITIZE(Qt::Key_Dead_Abovedot), UNITIZE(Qt::Key_Dead_Belowdot), 0x0053, 0, 0, 0}, 0x1e68 }, // U1E68 # LATIN CAPITAL LETTER S WITH DOT BELOW AND DOT ABOVE
++ { {UNITIZE(Qt::Key_Dead_Abovedot), UNITIZE(Qt::Key_Dead_Belowdot), 0x0073, 0, 0, 0}, 0x1e69 }, // U1E69 # LATIN SMALL LETTER S WITH DOT BELOW AND DOT ABOVE
++// /* broken */ { {UNITIZE(Qt::Key_Dead_Diaeresis), 0x0000, 0x004f, 0, 0, 0}, 0x1e4e }, // U1E4E # LATIN CAPITAL LETTER O WITH TILDE AND DIAERESIS
++// /* broken */ { {UNITIZE(Qt::Key_Dead_Diaeresis), 0x0000, 0x006f, 0, 0, 0}, 0x1e4f }, // U1E4F # LATIN SMALL LETTER O WITH TILDE AND DIAERESIS
++ { {UNITIZE(Qt::Key_Dead_Diaeresis), 0x0020, 0, 0, 0, 0}, 0x005c }, // quotedbl
++ { {UNITIZE(Qt::Key_Dead_Diaeresis), 0x0027, 0, 0, 0, 0}, 0x0344 }, // U0344 # COMBINING GREEK DIALYTIKA TONOS
++ { {UNITIZE(Qt::Key_Dead_Diaeresis), 0x0041, 0, 0, 0, 0}, 0x00c4 }, // U00C4 # LATIN CAPITAL LETTER A WITH DIAERESIS
++ { {UNITIZE(Qt::Key_Dead_Diaeresis), 0x0045, 0, 0, 0, 0}, 0x00cb }, // U00CB # LATIN CAPITAL LETTER E WITH DIAERESIS
++ { {UNITIZE(Qt::Key_Dead_Diaeresis), 0x0048, 0, 0, 0, 0}, 0x1e26 }, // U1E26 # LATIN CAPITAL LETTER H WITH DIAERESIS
++ { {UNITIZE(Qt::Key_Dead_Diaeresis), 0x0049, 0, 0, 0, 0}, 0x00cf }, // U00CF # LATIN CAPITAL LETTER I WITH DIAERESIS
++ { {UNITIZE(Qt::Key_Dead_Diaeresis), 0x004f, 0, 0, 0, 0}, 0x00d6 }, // U00D6 # LATIN CAPITAL LETTER O WITH DIAERESIS
++ { {UNITIZE(Qt::Key_Dead_Diaeresis), 0x0055, 0, 0, 0, 0}, 0x00dc }, // U00DC # LATIN CAPITAL LETTER U WITH DIAERESIS
++ { {UNITIZE(Qt::Key_Dead_Diaeresis), 0x0057, 0, 0, 0, 0}, 0x1e84 }, // U1E84 # LATIN CAPITAL LETTER W WITH DIAERESIS
++ { {UNITIZE(Qt::Key_Dead_Diaeresis), 0x0058, 0, 0, 0, 0}, 0x1e8c }, // U1E8C # LATIN CAPITAL LETTER X WITH DIAERESIS
++ { {UNITIZE(Qt::Key_Dead_Diaeresis), 0x0059, 0, 0, 0, 0}, 0x0178 }, // U0178 # LATIN CAPITAL LETTER Y WITH DIAERESIS
++ { {UNITIZE(Qt::Key_Dead_Diaeresis), 0x0061, 0, 0, 0, 0}, 0x00e4 }, // U00E4 # LATIN SMALL LETTER A WITH DIAERESIS
++ { {UNITIZE(Qt::Key_Dead_Diaeresis), 0x0065, 0, 0, 0, 0}, 0x00eb }, // U00EB # LATIN SMALL LETTER E WITH DIAERESIS
++ { {UNITIZE(Qt::Key_Dead_Diaeresis), 0x0068, 0, 0, 0, 0}, 0x1e27 }, // U1E27 # LATIN SMALL LETTER H WITH DIAERESIS
++ { {UNITIZE(Qt::Key_Dead_Diaeresis), 0x0069, 0, 0, 0, 0}, 0x00ef }, // U00EF # LATIN SMALL LETTER I WITH DIAERESIS
++ { {UNITIZE(Qt::Key_Dead_Diaeresis), 0x006f, 0, 0, 0, 0}, 0x00f6 }, // U00F6 # LATIN SMALL LETTER O WITH DIAERESIS
++ { {UNITIZE(Qt::Key_Dead_Diaeresis), 0x0074, 0, 0, 0, 0}, 0x1e97 }, // U1E97 # LATIN SMALL LETTER T WITH DIAERESIS
++ { {UNITIZE(Qt::Key_Dead_Diaeresis), 0x0075, 0, 0, 0, 0}, 0x00fc }, // U00FC # LATIN SMALL LETTER U WITH DIAERESIS
++ { {UNITIZE(Qt::Key_Dead_Diaeresis), 0x0077, 0, 0, 0, 0}, 0x1e85 }, // U1E85 # LATIN SMALL LETTER W WITH DIAERESIS
++ { {UNITIZE(Qt::Key_Dead_Diaeresis), 0x0078, 0, 0, 0, 0}, 0x1e8d }, // U1E8D # LATIN SMALL LETTER X WITH DIAERESIS
++ { {UNITIZE(Qt::Key_Dead_Diaeresis), 0x0079, 0, 0, 0, 0}, 0x00ff }, // U00FF # LATIN SMALL LETTER Y WITH DIAERESIS
++ { {UNITIZE(Qt::Key_Dead_Diaeresis), 0x00b4, 0, 0, 0, 0}, 0x0344 }, // U0344 # COMBINING GREEK DIALYTIKA TONOS
++ { {UNITIZE(Qt::Key_Dead_Diaeresis), 0x00d5, 0, 0, 0, 0}, 0x1e4e }, // U1E4E # LATIN CAPITAL LETTER O WITH TILDE AND DIAERESIS
++ { {UNITIZE(Qt::Key_Dead_Diaeresis), 0x00f5, 0, 0, 0, 0}, 0x1e4f }, // U1E4F # LATIN SMALL LETTER O WITH TILDE AND DIAERESIS
++ { {UNITIZE(Qt::Key_Dead_Diaeresis), 0x016a, 0, 0, 0, 0}, 0x1e7a }, // U1E7A # LATIN CAPITAL LETTER U WITH MACRON AND DIAERESIS
++ { {UNITIZE(Qt::Key_Dead_Diaeresis), 0x016b, 0, 0, 0, 0}, 0x1e7b }, // U1E7B # LATIN SMALL LETTER U WITH MACRON AND DIAERESIS
++ { {UNITIZE(Qt::Key_Dead_Diaeresis), 0x0399, 0, 0, 0, 0}, 0x03aa }, // U03AA # GREEK CAPITAL LETTER IOTA WITH DIALYTIKA
++ { {UNITIZE(Qt::Key_Dead_Diaeresis), 0x03a5, 0, 0, 0, 0}, 0x03ab }, // U03AB # GREEK CAPITAL LETTER UPSILON WITH DIALYTIKA
++ { {UNITIZE(Qt::Key_Dead_Diaeresis), 0x03b9, 0, 0, 0, 0}, 0x03ca }, // U03CA # GREEK SMALL LETTER IOTA WITH DIALYTIKA
++ { {UNITIZE(Qt::Key_Dead_Diaeresis), 0x03c5, 0, 0, 0, 0}, 0x03cb }, // U03CB # GREEK SMALL LETTER UPSILON WITH DIALYTIKA
++ { {UNITIZE(Qt::Key_Dead_Diaeresis), 0x0406, 0, 0, 0, 0}, 0x0407 }, // U0407 # CYRILLIC CAPITAL LETTER YI
++ { {UNITIZE(Qt::Key_Dead_Diaeresis), 0x0410, 0, 0, 0, 0}, 0x04d2 }, // U04D2 # CYRILLIC CAPITAL LETTER A WITH DIAERESIS
++ { {UNITIZE(Qt::Key_Dead_Diaeresis), 0x0415, 0, 0, 0, 0}, 0x0401 }, // U0401 # CYRILLIC CAPITAL LETTER IO
++ { {UNITIZE(Qt::Key_Dead_Diaeresis), 0x0416, 0, 0, 0, 0}, 0x04dc }, // U04DC # CYRILLIC CAPITAL LETTER ZHE WITH DIAERESIS
++ { {UNITIZE(Qt::Key_Dead_Diaeresis), 0x0417, 0, 0, 0, 0}, 0x04de }, // U04DE # CYRILLIC CAPITAL LETTER ZE WITH DIAERESIS
++ { {UNITIZE(Qt::Key_Dead_Diaeresis), 0x0418, 0, 0, 0, 0}, 0x04e4 }, // U04E4 # CYRILLIC CAPITAL LETTER I WITH DIAERESIS
++ { {UNITIZE(Qt::Key_Dead_Diaeresis), 0x041e, 0, 0, 0, 0}, 0x04e6 }, // U04E6 # CYRILLIC CAPITAL LETTER O WITH DIAERESIS
++ { {UNITIZE(Qt::Key_Dead_Diaeresis), 0x0423, 0, 0, 0, 0}, 0x04f0 }, // U04F0 # CYRILLIC CAPITAL LETTER U WITH DIAERESIS
++ { {UNITIZE(Qt::Key_Dead_Diaeresis), 0x0427, 0, 0, 0, 0}, 0x04f4 }, // U04F4 # CYRILLIC CAPITAL LETTER CHE WITH DIAERESIS
++ { {UNITIZE(Qt::Key_Dead_Diaeresis), 0x042b, 0, 0, 0, 0}, 0x04f8 }, // U04F8 # CYRILLIC CAPITAL LETTER YERU WITH DIAERESIS
++ { {UNITIZE(Qt::Key_Dead_Diaeresis), 0x042d, 0, 0, 0, 0}, 0x04ec }, // U04EC # CYRILLIC CAPITAL LETTER E WITH DIAERESIS
++ { {UNITIZE(Qt::Key_Dead_Diaeresis), 0x0430, 0, 0, 0, 0}, 0x04d3 }, // U04D3 # CYRILLIC SMALL LETTER A WITH DIAERESIS
++ { {UNITIZE(Qt::Key_Dead_Diaeresis), 0x0435, 0, 0, 0, 0}, 0x0451 }, // U0451 # CYRILLIC SMALL LETTER IO
++ { {UNITIZE(Qt::Key_Dead_Diaeresis), 0x0436, 0, 0, 0, 0}, 0x04dd }, // U04DD # CYRILLIC SMALL LETTER ZHE WITH DIAERESIS
++ { {UNITIZE(Qt::Key_Dead_Diaeresis), 0x0437, 0, 0, 0, 0}, 0x04df }, // U04DF # CYRILLIC SMALL LETTER ZE WITH DIAERESIS
++ { {UNITIZE(Qt::Key_Dead_Diaeresis), 0x0438, 0, 0, 0, 0}, 0x04e5 }, // U04E5 # CYRILLIC SMALL LETTER I WITH DIAERESIS
++ { {UNITIZE(Qt::Key_Dead_Diaeresis), 0x043e, 0, 0, 0, 0}, 0x04e7 }, // U04E7 # CYRILLIC SMALL LETTER O WITH DIAERESIS
++ { {UNITIZE(Qt::Key_Dead_Diaeresis), 0x0443, 0, 0, 0, 0}, 0x04f1 }, // U04F1 # CYRILLIC SMALL LETTER U WITH DIAERESIS
++ { {UNITIZE(Qt::Key_Dead_Diaeresis), 0x0447, 0, 0, 0, 0}, 0x04f5 }, // U04F5 # CYRILLIC SMALL LETTER CHE WITH DIAERESIS
++ { {UNITIZE(Qt::Key_Dead_Diaeresis), 0x044b, 0, 0, 0, 0}, 0x04f9 }, // U04F9 # CYRILLIC SMALL LETTER YERU WITH DIAERESIS
++ { {UNITIZE(Qt::Key_Dead_Diaeresis), 0x044d, 0, 0, 0, 0}, 0x04ed }, // U04ED # CYRILLIC SMALL LETTER E WITH DIAERESIS
++ { {UNITIZE(Qt::Key_Dead_Diaeresis), 0x0456, 0, 0, 0, 0}, 0x0457 }, // U0457 # CYRILLIC SMALL LETTER YI
++ { {UNITIZE(Qt::Key_Dead_Diaeresis), 0x04d8, 0, 0, 0, 0}, 0x04da }, // U04DA # CYRILLIC CAPITAL LETTER SCHWA WITH DIAERESIS
++ { {UNITIZE(Qt::Key_Dead_Diaeresis), 0x04d9, 0, 0, 0, 0}, 0x04db }, // U04DB # CYRILLIC SMALL LETTER SCHWA WITH DIAERESIS
++ { {UNITIZE(Qt::Key_Dead_Diaeresis), 0x04e8, 0, 0, 0, 0}, 0x04ea }, // U04EA # CYRILLIC CAPITAL LETTER BARRED O WITH DIAERESIS
++ { {UNITIZE(Qt::Key_Dead_Diaeresis), 0x04e9, 0, 0, 0, 0}, 0x04eb }, // U04EB # CYRILLIC SMALL LETTER BARRED O WITH DIAERESIS
++ { {UNITIZE(Qt::Key_Dead_Diaeresis), UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0055, 0, 0}, 0x1e7a }, // U1E7A # LATIN CAPITAL LETTER U WITH MACRON AND DIAERESIS
++ { {UNITIZE(Qt::Key_Dead_Diaeresis), UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0075, 0, 0}, 0x1e7b }, // U1E7B # LATIN SMALL LETTER U WITH MACRON AND DIAERESIS
++ { {UNITIZE(Qt::Key_Dead_Diaeresis), UNITIZE(Qt::Key_Multi_key), 0x007e, 0x004f, 0, 0}, 0x1e4e }, // U1E4E # LATIN CAPITAL LETTER O WITH TILDE AND DIAERESIS
++ { {UNITIZE(Qt::Key_Dead_Diaeresis), UNITIZE(Qt::Key_Multi_key), 0x007e, 0x006f, 0, 0}, 0x1e4f }, // U1E4F # LATIN SMALL LETTER O WITH TILDE AND DIAERESIS
++ { {UNITIZE(Qt::Key_Dead_Diaeresis), UNITIZE(Qt::Key_Multi_key), 0x00af, 0x0055, 0, 0}, 0x1e7a }, // U1E7A # LATIN CAPITAL LETTER U WITH MACRON AND DIAERESIS
++ { {UNITIZE(Qt::Key_Dead_Diaeresis), UNITIZE(Qt::Key_Multi_key), 0x00af, 0x0075, 0, 0}, 0x1e7b }, // U1E7B # LATIN SMALL LETTER U WITH MACRON AND DIAERESIS
++ { {UNITIZE(Qt::Key_Dead_Diaeresis), UNITIZE(Qt::Key_Dead_Tilde), 0x004f, 0, 0, 0}, 0x1e4e }, // U1E4E # LATIN CAPITAL LETTER O WITH TILDE AND DIAERESIS
++ { {UNITIZE(Qt::Key_Dead_Diaeresis), UNITIZE(Qt::Key_Dead_Tilde), 0x006f, 0, 0, 0}, 0x1e4f }, // U1E4F # LATIN SMALL LETTER O WITH TILDE AND DIAERESIS
++ { {UNITIZE(Qt::Key_Dead_Diaeresis), UNITIZE(Qt::Key_Dead_Macron), 0x0055, 0, 0, 0}, 0x1e7a }, // U1E7A # LATIN CAPITAL LETTER U WITH MACRON AND DIAERESIS
++ { {UNITIZE(Qt::Key_Dead_Diaeresis), UNITIZE(Qt::Key_Dead_Macron), 0x0075, 0, 0, 0}, 0x1e7b }, // U1E7B # LATIN SMALL LETTER U WITH MACRON AND DIAERESIS
++ { {UNITIZE(Qt::Key_Dead_Diaeresis), UNITIZE(Qt::Key_Dead_Diaeresis), 0, 0, 0, 0}, 0x00a8 }, // diaeresis
++ { {UNITIZE(Qt::Key_Dead_Abovering), 0x0020, 0, 0, 0, 0}, 0x00b0 }, // degree
++ { {UNITIZE(Qt::Key_Dead_Abovering), 0x0041, 0, 0, 0, 0}, 0x00c5 }, // U00C5 # LATIN CAPITAL LETTER A WITH RING ABOVE
++ { {UNITIZE(Qt::Key_Dead_Abovering), 0x0055, 0, 0, 0, 0}, 0x016e }, // U016E # LATIN CAPITAL LETTER U WITH RING ABOVE
++ { {UNITIZE(Qt::Key_Dead_Abovering), 0x0061, 0, 0, 0, 0}, 0x00e5 }, // U00E5 # LATIN SMALL LETTER A WITH RING ABOVE
++ { {UNITIZE(Qt::Key_Dead_Abovering), 0x0075, 0, 0, 0, 0}, 0x016f }, // U016F # LATIN SMALL LETTER U WITH RING ABOVE
++ { {UNITIZE(Qt::Key_Dead_Abovering), 0x0077, 0, 0, 0, 0}, 0x1e98 }, // U1E98 # LATIN SMALL LETTER W WITH RING ABOVE
++ { {UNITIZE(Qt::Key_Dead_Abovering), 0x0079, 0, 0, 0, 0}, 0x1e99 }, // U1E99 # LATIN SMALL LETTER Y WITH RING ABOVE
++ { {UNITIZE(Qt::Key_Dead_Abovering), UNITIZE(Qt::Key_Dead_Abovering), 0, 0, 0, 0}, 0x00b0 }, // degree
++ { {UNITIZE(Qt::Key_Dead_Doubleacute), 0x0020, 0, 0, 0, 0}, 0x02dd }, // U2dd
++ { {UNITIZE(Qt::Key_Dead_Doubleacute), 0x004f, 0, 0, 0, 0}, 0x0150 }, // U0150 # LATIN CAPITAL LETTER O WITH DOUBLE ACUTE
++ { {UNITIZE(Qt::Key_Dead_Doubleacute), 0x0055, 0, 0, 0, 0}, 0x0170 }, // U0170 # LATIN CAPITAL LETTER U WITH DOUBLE ACUTE
++ { {UNITIZE(Qt::Key_Dead_Doubleacute), 0x006f, 0, 0, 0, 0}, 0x0151 }, // U0151 # LATIN SMALL LETTER O WITH DOUBLE ACUTE
++ { {UNITIZE(Qt::Key_Dead_Doubleacute), 0x0075, 0, 0, 0, 0}, 0x0171 }, // U0171 # LATIN SMALL LETTER U WITH DOUBLE ACUTE
++ { {UNITIZE(Qt::Key_Dead_Doubleacute), 0x0423, 0, 0, 0, 0}, 0x04f2 }, // U04F2 # CYRILLIC CAPITAL LETTER U WITH DOUBLE ACUTE
++ { {UNITIZE(Qt::Key_Dead_Doubleacute), 0x0443, 0, 0, 0, 0}, 0x04f3 }, // U04F3 # CYRILLIC SMALL LETTER U WITH DOUBLE ACUTE
++ { {UNITIZE(Qt::Key_Dead_Doubleacute), UNITIZE(Qt::Key_Dead_Doubleacute), 0, 0, 0, 0}, 0x02dd }, // U2dd
++ { {UNITIZE(Qt::Key_Dead_Caron), 0x0020, 0, 0, 0, 0}, 0x02c7 }, // caron
++ { {UNITIZE(Qt::Key_Dead_Caron), 0x0041, 0, 0, 0, 0}, 0x01cd }, // U01CD # LATIN CAPITAL LETTER A WITH CARON
++ { {UNITIZE(Qt::Key_Dead_Caron), 0x0043, 0, 0, 0, 0}, 0x010c }, // U010C # LATIN CAPITAL LETTER C WITH CARON
++ { {UNITIZE(Qt::Key_Dead_Caron), 0x0044, 0, 0, 0, 0}, 0x010e }, // U010E # LATIN CAPITAL LETTER D WITH CARON
++ { {UNITIZE(Qt::Key_Dead_Caron), 0x0045, 0, 0, 0, 0}, 0x011a }, // U011A # LATIN CAPITAL LETTER E WITH CARON
++ { {UNITIZE(Qt::Key_Dead_Caron), 0x0047, 0, 0, 0, 0}, 0x01e6 }, // U01E6 # LATIN CAPITAL LETTER G WITH CARON
++ { {UNITIZE(Qt::Key_Dead_Caron), 0x0048, 0, 0, 0, 0}, 0x021e }, // U021E # LATIN CAPITAL LETTER H WITH CARON
++ { {UNITIZE(Qt::Key_Dead_Caron), 0x0049, 0, 0, 0, 0}, 0x01cf }, // U01CF # LATIN CAPITAL LETTER I WITH CARON
++ { {UNITIZE(Qt::Key_Dead_Caron), 0x004b, 0, 0, 0, 0}, 0x01e8 }, // U01E8 # LATIN CAPITAL LETTER K WITH CARON
++ { {UNITIZE(Qt::Key_Dead_Caron), 0x004c, 0, 0, 0, 0}, 0x013d }, // U013D # LATIN CAPITAL LETTER L WITH CARON
++ { {UNITIZE(Qt::Key_Dead_Caron), 0x004e, 0, 0, 0, 0}, 0x0147 }, // U0147 # LATIN CAPITAL LETTER N WITH CARON
++ { {UNITIZE(Qt::Key_Dead_Caron), 0x004f, 0, 0, 0, 0}, 0x01d1 }, // U01D1 # LATIN CAPITAL LETTER O WITH CARON
++ { {UNITIZE(Qt::Key_Dead_Caron), 0x0052, 0, 0, 0, 0}, 0x0158 }, // U0158 # LATIN CAPITAL LETTER R WITH CARON
++ { {UNITIZE(Qt::Key_Dead_Caron), 0x0053, 0, 0, 0, 0}, 0x0160 }, // U0160 # LATIN CAPITAL LETTER S WITH CARON
++ { {UNITIZE(Qt::Key_Dead_Caron), 0x0054, 0, 0, 0, 0}, 0x0164 }, // U0164 # LATIN CAPITAL LETTER T WITH CARON
++ { {UNITIZE(Qt::Key_Dead_Caron), 0x0055, 0, 0, 0, 0}, 0x01d3 }, // U01D3 # LATIN CAPITAL LETTER U WITH CARON
++ { {UNITIZE(Qt::Key_Dead_Caron), 0x005a, 0, 0, 0, 0}, 0x017d }, // U017D # LATIN CAPITAL LETTER Z WITH CARON
++ { {UNITIZE(Qt::Key_Dead_Caron), 0x0061, 0, 0, 0, 0}, 0x01ce }, // U01CE # LATIN SMALL LETTER A WITH CARON
++ { {UNITIZE(Qt::Key_Dead_Caron), 0x0063, 0, 0, 0, 0}, 0x010d }, // U010D # LATIN SMALL LETTER C WITH CARON
++ { {UNITIZE(Qt::Key_Dead_Caron), 0x0064, 0, 0, 0, 0}, 0x010f }, // U010F # LATIN SMALL LETTER D WITH CARON
++ { {UNITIZE(Qt::Key_Dead_Caron), 0x0065, 0, 0, 0, 0}, 0x011b }, // U011B # LATIN SMALL LETTER E WITH CARON
++ { {UNITIZE(Qt::Key_Dead_Caron), 0x0067, 0, 0, 0, 0}, 0x01e7 }, // U01E7 # LATIN SMALL LETTER G WITH CARON
++ { {UNITIZE(Qt::Key_Dead_Caron), 0x0068, 0, 0, 0, 0}, 0x021f }, // U021F # LATIN SMALL LETTER H WITH CARON
++ { {UNITIZE(Qt::Key_Dead_Caron), 0x0069, 0, 0, 0, 0}, 0x01d0 }, // U01D0 # LATIN SMALL LETTER I WITH CARON
++ { {UNITIZE(Qt::Key_Dead_Caron), 0x006a, 0, 0, 0, 0}, 0x01f0 }, // U01F0 # LATIN SMALL LETTER J WITH CARON
++ { {UNITIZE(Qt::Key_Dead_Caron), 0x006b, 0, 0, 0, 0}, 0x01e9 }, // U01E9 # LATIN SMALL LETTER K WITH CARON
++ { {UNITIZE(Qt::Key_Dead_Caron), 0x006c, 0, 0, 0, 0}, 0x013e }, // U013E # LATIN SMALL LETTER L WITH CARON
++ { {UNITIZE(Qt::Key_Dead_Caron), 0x006e, 0, 0, 0, 0}, 0x0148 }, // U0148 # LATIN SMALL LETTER N WITH CARON
++ { {UNITIZE(Qt::Key_Dead_Caron), 0x006f, 0, 0, 0, 0}, 0x01d2 }, // U01D2 # LATIN SMALL LETTER O WITH CARON
++ { {UNITIZE(Qt::Key_Dead_Caron), 0x0072, 0, 0, 0, 0}, 0x0159 }, // U0159 # LATIN SMALL LETTER R WITH CARON
++ { {UNITIZE(Qt::Key_Dead_Caron), 0x0073, 0, 0, 0, 0}, 0x0161 }, // U0161 # LATIN SMALL LETTER S WITH CARON
++ { {UNITIZE(Qt::Key_Dead_Caron), 0x0074, 0, 0, 0, 0}, 0x0165 }, // U0165 # LATIN SMALL LETTER T WITH CARON
++ { {UNITIZE(Qt::Key_Dead_Caron), 0x0075, 0, 0, 0, 0}, 0x01d4 }, // U01D4 # LATIN SMALL LETTER U WITH CARON
++ { {UNITIZE(Qt::Key_Dead_Caron), 0x007a, 0, 0, 0, 0}, 0x017e }, // U017E # LATIN SMALL LETTER Z WITH CARON
++ { {UNITIZE(Qt::Key_Dead_Caron), 0x00dc, 0, 0, 0, 0}, 0x01d9 }, // U01D9 # LATIN CAPITAL LETTER U WITH DIAERESIS AND CARON
++ { {UNITIZE(Qt::Key_Dead_Caron), 0x00fc, 0, 0, 0, 0}, 0x01da }, // U01DA # LATIN SMALL LETTER U WITH DIAERESIS AND CARON
++ { {UNITIZE(Qt::Key_Dead_Caron), 0x01b7, 0, 0, 0, 0}, 0x01ee }, // U01EE # LATIN CAPITAL LETTER EZH WITH CARON
++ { {UNITIZE(Qt::Key_Dead_Caron), 0x0292, 0, 0, 0, 0}, 0x01ef }, // U01EF # LATIN SMALL LETTER EZH WITH CARON
++ { {UNITIZE(Qt::Key_Dead_Caron), UNITIZE(Qt::Key_Multi_key), 0x0022, 0x0055, 0, 0}, 0x01d9 }, // U01D9 # LATIN CAPITAL LETTER U WITH DIAERESIS AND CARON
++ { {UNITIZE(Qt::Key_Dead_Caron), UNITIZE(Qt::Key_Multi_key), 0x0022, 0x0075, 0, 0}, 0x01da }, // U01DA # LATIN SMALL LETTER U WITH DIAERESIS AND CARON
++ { {UNITIZE(Qt::Key_Dead_Caron), UNITIZE(Qt::Key_Dead_Diaeresis), 0x0055, 0, 0, 0}, 0x01d9 }, // U01D9 # LATIN CAPITAL LETTER U WITH DIAERESIS AND CARON
++ { {UNITIZE(Qt::Key_Dead_Caron), UNITIZE(Qt::Key_Dead_Diaeresis), 0x0075, 0, 0, 0}, 0x01da }, // U01DA # LATIN SMALL LETTER U WITH DIAERESIS AND CARON
++ { {UNITIZE(Qt::Key_Dead_Caron), UNITIZE(Qt::Key_Dead_Caron), 0, 0, 0, 0}, 0x02c7 }, // caron
++ { {UNITIZE(Qt::Key_Dead_Cedilla), 0x0020, 0, 0, 0, 0}, 0x00b8 }, // cedilla
++ { {UNITIZE(Qt::Key_Dead_Cedilla), 0x0043, 0, 0, 0, 0}, 0x00c7 }, // U00C7 # LATIN CAPITAL LETTER C WITH CEDILLA
++ { {UNITIZE(Qt::Key_Dead_Cedilla), 0x0044, 0, 0, 0, 0}, 0x1e10 }, // U1E10 # LATIN CAPITAL LETTER D WITH CEDILLA
++ { {UNITIZE(Qt::Key_Dead_Cedilla), 0x0045, 0, 0, 0, 0}, 0x0228 }, // U0228 # LATIN CAPITAL LETTER E WITH CEDILLA
++ { {UNITIZE(Qt::Key_Dead_Cedilla), 0x0047, 0, 0, 0, 0}, 0x0122 }, // U0122 # LATIN CAPITAL LETTER G WITH CEDILLA
++ { {UNITIZE(Qt::Key_Dead_Cedilla), 0x0048, 0, 0, 0, 0}, 0x1e28 }, // U1E28 # LATIN CAPITAL LETTER H WITH CEDILLA
++ { {UNITIZE(Qt::Key_Dead_Cedilla), 0x004b, 0, 0, 0, 0}, 0x0136 }, // U0136 # LATIN CAPITAL LETTER K WITH CEDILLA
++ { {UNITIZE(Qt::Key_Dead_Cedilla), 0x004c, 0, 0, 0, 0}, 0x013b }, // U013B # LATIN CAPITAL LETTER L WITH CEDILLA
++ { {UNITIZE(Qt::Key_Dead_Cedilla), 0x004e, 0, 0, 0, 0}, 0x0145 }, // U0145 # LATIN CAPITAL LETTER N WITH CEDILLA
++ { {UNITIZE(Qt::Key_Dead_Cedilla), 0x0052, 0, 0, 0, 0}, 0x0156 }, // U0156 # LATIN CAPITAL LETTER R WITH CEDILLA
++ { {UNITIZE(Qt::Key_Dead_Cedilla), 0x0053, 0, 0, 0, 0}, 0x015e }, // U015E # LATIN CAPITAL LETTER S WITH CEDILLA
++ { {UNITIZE(Qt::Key_Dead_Cedilla), 0x0054, 0, 0, 0, 0}, 0x0162 }, // U0162 # LATIN CAPITAL LETTER T WITH CEDILLA
++ { {UNITIZE(Qt::Key_Dead_Cedilla), 0x0063, 0, 0, 0, 0}, 0x00e7 }, // U00E7 # LATIN SMALL LETTER C WITH CEDILLA
++ { {UNITIZE(Qt::Key_Dead_Cedilla), 0x0064, 0, 0, 0, 0}, 0x1e11 }, // U1E11 # LATIN SMALL LETTER D WITH CEDILLA
++ { {UNITIZE(Qt::Key_Dead_Cedilla), 0x0065, 0, 0, 0, 0}, 0x0229 }, // U0229 # LATIN SMALL LETTER E WITH CEDILLA
++ { {UNITIZE(Qt::Key_Dead_Cedilla), 0x0067, 0, 0, 0, 0}, 0x0123 }, // U0123 # LATIN SMALL LETTER G WITH CEDILLA
++ { {UNITIZE(Qt::Key_Dead_Cedilla), 0x0068, 0, 0, 0, 0}, 0x1e29 }, // U1E29 # LATIN SMALL LETTER H WITH CEDILLA
++ { {UNITIZE(Qt::Key_Dead_Cedilla), 0x006b, 0, 0, 0, 0}, 0x0137 }, // U0137 # LATIN SMALL LETTER K WITH CEDILLA
++ { {UNITIZE(Qt::Key_Dead_Cedilla), 0x006c, 0, 0, 0, 0}, 0x013c }, // U013C # LATIN SMALL LETTER L WITH CEDILLA
++ { {UNITIZE(Qt::Key_Dead_Cedilla), 0x006e, 0, 0, 0, 0}, 0x0146 }, // U0146 # LATIN SMALL LETTER N WITH CEDILLA
++ { {UNITIZE(Qt::Key_Dead_Cedilla), 0x0072, 0, 0, 0, 0}, 0x0157 }, // U0157 # LATIN SMALL LETTER R WITH CEDILLA
++ { {UNITIZE(Qt::Key_Dead_Cedilla), 0x0073, 0, 0, 0, 0}, 0x015f }, // U015F # LATIN SMALL LETTER S WITH CEDILLA
++ { {UNITIZE(Qt::Key_Dead_Cedilla), 0x0074, 0, 0, 0, 0}, 0x0163 }, // U0163 # LATIN SMALL LETTER T WITH CEDILLA
++ { {UNITIZE(Qt::Key_Dead_Cedilla), UNITIZE(Qt::Key_Dead_Cedilla), 0, 0, 0, 0}, 0x00b8 }, // cedilla
++ { {UNITIZE(Qt::Key_Dead_Ogonek), 0x0041, 0, 0, 0, 0}, 0x0104 }, // U0104 # LATIN CAPITAL LETTER A WITH OGONEK
++ { {UNITIZE(Qt::Key_Dead_Ogonek), 0x0045, 0, 0, 0, 0}, 0x0118 }, // U0118 # LATIN CAPITAL LETTER E WITH OGONEK
++ { {UNITIZE(Qt::Key_Dead_Ogonek), 0x0049, 0, 0, 0, 0}, 0x012e }, // U012E # LATIN CAPITAL LETTER I WITH OGONEK
++ { {UNITIZE(Qt::Key_Dead_Ogonek), 0x004f, 0, 0, 0, 0}, 0x01ea }, // U01EA # LATIN CAPITAL LETTER O WITH OGONEK
++ { {UNITIZE(Qt::Key_Dead_Ogonek), 0x0055, 0, 0, 0, 0}, 0x0172 }, // U0172 # LATIN CAPITAL LETTER U WITH OGONEK
++ { {UNITIZE(Qt::Key_Dead_Ogonek), 0x0061, 0, 0, 0, 0}, 0x0105 }, // U0105 # LATIN SMALL LETTER A WITH OGONEK
++ { {UNITIZE(Qt::Key_Dead_Ogonek), 0x0065, 0, 0, 0, 0}, 0x0119 }, // U0119 # LATIN SMALL LETTER E WITH OGONEK
++ { {UNITIZE(Qt::Key_Dead_Ogonek), 0x0069, 0, 0, 0, 0}, 0x012f }, // U012F # LATIN SMALL LETTER I WITH OGONEK
++ { {UNITIZE(Qt::Key_Dead_Ogonek), 0x006f, 0, 0, 0, 0}, 0x01eb }, // U01EB # LATIN SMALL LETTER O WITH OGONEK
++ { {UNITIZE(Qt::Key_Dead_Ogonek), 0x0075, 0, 0, 0, 0}, 0x0173 }, // U0173 # LATIN SMALL LETTER U WITH OGONEK
++ { {UNITIZE(Qt::Key_Dead_Ogonek), UNITIZE(Qt::Key_Dead_Ogonek), 0, 0, 0, 0}, 0x02db }, // ogonek
++// /* broken */ { {UNITIZE(Qt::Key_Dead_Ogonek), dead_space, 0, 0, 0, 0}, 0x02db }, // ogonek
++// /* broken */ { {UNITIZE(Qt::Key_Dead_Iota), 0x0000, 0x0313, 0x0391, 0, 0}, 0x1f8c }, // U1F8C # GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA AND PROSGEGRAMMENI
++// /* broken */ { {UNITIZE(Qt::Key_Dead_Iota), 0x0000, 0x0313, 0x0391, 0, 0}, 0x1f8a }, // U1F8A # GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA AND PROSGEGRAMMENI
++// /* broken */ { {UNITIZE(Qt::Key_Dead_Iota), 0x0000, 0x0313, 0x0397, 0, 0}, 0x1f9c }, // U1F9C # GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA AND PROSGEGRAMMENI
++// /* broken */ { {UNITIZE(Qt::Key_Dead_Iota), 0x0000, 0x0313, 0x0397, 0, 0}, 0x1f9a }, // U1F9A # GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA AND PROSGEGRAMMENI
++// /* broken */ { {UNITIZE(Qt::Key_Dead_Iota), 0x0000, 0x0313, 0x03a9, 0, 0}, 0x1faa }, // U1FAA # GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA AND PROSGEGRAMMENI
++// /* broken */ { {UNITIZE(Qt::Key_Dead_Iota), 0x0000, 0x0313, 0x03a9, 0, 0}, 0x1fac }, // U1FAC # GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA AND PROSGEGRAMMENI
++// /* broken */ { {UNITIZE(Qt::Key_Dead_Iota), 0x0000, 0x0313, 0x03b1, 0, 0}, 0x1f82 }, // U1F82 # GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA AND YPOGEGRAMMENI
++// /* broken */ { {UNITIZE(Qt::Key_Dead_Iota), 0x0000, 0x0313, 0x03b1, 0, 0}, 0x1f84 }, // U1F84 # GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA AND YPOGEGRAMMENI
++// /* broken */ { {UNITIZE(Qt::Key_Dead_Iota), 0x0000, 0x0313, 0x03b7, 0, 0}, 0x1f94 }, // U1F94 # GREEK SMALL LETTER ETA WITH PSILI AND OXIA AND YPOGEGRAMMENI
++// /* broken */ { {UNITIZE(Qt::Key_Dead_Iota), 0x0000, 0x0313, 0x03b7, 0, 0}, 0x1f92 }, // U1F92 # GREEK SMALL LETTER ETA WITH PSILI AND VARIA AND YPOGEGRAMMENI
++// /* broken */ { {UNITIZE(Qt::Key_Dead_Iota), 0x0000, 0x0313, 0x03c9, 0, 0}, 0x1fa2 }, // U1FA2 # GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA AND YPOGEGRAMMENI
++// /* broken */ { {UNITIZE(Qt::Key_Dead_Iota), 0x0000, 0x0313, 0x03c9, 0, 0}, 0x1fa4 }, // U1FA4 # GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA AND YPOGEGRAMMENI
++// /* broken */ { {UNITIZE(Qt::Key_Dead_Iota), 0x0000, 0x0314, 0x0391, 0, 0}, 0x1f8b }, // U1F8B # GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA AND PROSGEGRAMMENI
++// /* broken */ { {UNITIZE(Qt::Key_Dead_Iota), 0x0000, 0x0314, 0x0391, 0, 0}, 0x1f8d }, // U1F8D # GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA AND PROSGEGRAMMENI
++// /* broken */ { {UNITIZE(Qt::Key_Dead_Iota), 0x0000, 0x0314, 0x0397, 0, 0}, 0x1f9b }, // U1F9B # GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA AND PROSGEGRAMMENI
++// /* broken */ { {UNITIZE(Qt::Key_Dead_Iota), 0x0000, 0x0314, 0x0397, 0, 0}, 0x1f9d }, // U1F9D # GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA AND PROSGEGRAMMENI
++// /* broken */ { {UNITIZE(Qt::Key_Dead_Iota), 0x0000, 0x0314, 0x03a9, 0, 0}, 0x1fab }, // U1FAB # GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA AND PROSGEGRAMMENI
++// /* broken */ { {UNITIZE(Qt::Key_Dead_Iota), 0x0000, 0x0314, 0x03a9, 0, 0}, 0x1fad }, // U1FAD # GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA AND PROSGEGRAMMENI
++// /* broken */ { {UNITIZE(Qt::Key_Dead_Iota), 0x0000, 0x0314, 0x03b1, 0, 0}, 0x1f83 }, // U1F83 # GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA AND YPOGEGRAMMENI
++// /* broken */ { {UNITIZE(Qt::Key_Dead_Iota), 0x0000, 0x0314, 0x03b1, 0, 0}, 0x1f85 }, // U1F85 # GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA AND YPOGEGRAMMENI
++// /* broken */ { {UNITIZE(Qt::Key_Dead_Iota), 0x0000, 0x0314, 0x03b7, 0, 0}, 0x1f95 }, // U1F95 # GREEK SMALL LETTER ETA WITH DASIA AND OXIA AND YPOGEGRAMMENI
++// /* broken */ { {UNITIZE(Qt::Key_Dead_Iota), 0x0000, 0x0314, 0x03b7, 0, 0}, 0x1f93 }, // U1F93 # GREEK SMALL LETTER ETA WITH DASIA AND VARIA AND YPOGEGRAMMENI
++// /* broken */ { {UNITIZE(Qt::Key_Dead_Iota), 0x0000, 0x0314, 0x03c9, 0, 0}, 0x1fa5 }, // U1FA5 # GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA AND YPOGEGRAMMENI
++// /* broken */ { {UNITIZE(Qt::Key_Dead_Iota), 0x0000, 0x0314, 0x03c9, 0, 0}, 0x1fa3 }, // U1FA3 # GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA AND YPOGEGRAMMENI
++// /* broken */ { {UNITIZE(Qt::Key_Dead_Iota), 0x0000, 0x03b1, 0, 0, 0}, 0x1fb4 }, // U1FB4 # GREEK SMALL LETTER ALPHA WITH OXIA AND YPOGEGRAMMENI
++// /* broken */ { {UNITIZE(Qt::Key_Dead_Iota), 0x0000, 0x03b1, 0, 0, 0}, 0x1fb2 }, // U1FB2 # GREEK SMALL LETTER ALPHA WITH VARIA AND YPOGEGRAMMENI
++// /* broken */ { {UNITIZE(Qt::Key_Dead_Iota), 0x0000, 0x03b7, 0, 0, 0}, 0x1fc4 }, // U1FC4 # GREEK SMALL LETTER ETA WITH OXIA AND YPOGEGRAMMENI
++// /* broken */ { {UNITIZE(Qt::Key_Dead_Iota), 0x0000, 0x03b7, 0, 0, 0}, 0x1fc2 }, // U1FC2 # GREEK SMALL LETTER ETA WITH VARIA AND YPOGEGRAMMENI
++// /* broken */ { {UNITIZE(Qt::Key_Dead_Iota), 0x0000, 0x03c9, 0, 0, 0}, 0x1ff4 }, // U1FF4 # GREEK SMALL LETTER OMEGA WITH OXIA AND YPOGEGRAMMENI
++// /* broken */ { {UNITIZE(Qt::Key_Dead_Iota), 0x0000, 0x03c9, 0, 0, 0}, 0x1ff2 }, // U1FF2 # GREEK SMALL LETTER OMEGA WITH VARIA AND YPOGEGRAMMENI
++// /* broken */ { {UNITIZE(Qt::Key_Dead_Iota), 0x0000, 0x1f00, 0, 0, 0}, 0x1f84 }, // U1F84 # GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA AND YPOGEGRAMMENI
++// /* broken */ { {UNITIZE(Qt::Key_Dead_Iota), 0x0000, 0x1f00, 0, 0, 0}, 0x1f82 }, // U1F82 # GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA AND YPOGEGRAMMENI
++// /* broken */ { {UNITIZE(Qt::Key_Dead_Iota), 0x0000, 0x1f01, 0, 0, 0}, 0x1f83 }, // U1F83 # GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA AND YPOGEGRAMMENI
++// /* broken */ { {UNITIZE(Qt::Key_Dead_Iota), 0x0000, 0x1f01, 0, 0, 0}, 0x1f85 }, // U1F85 # GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA AND YPOGEGRAMMENI
++// /* broken */ { {UNITIZE(Qt::Key_Dead_Iota), 0x0000, 0x1f08, 0, 0, 0}, 0x1f8a }, // U1F8A # GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA AND PROSGEGRAMMENI
++// /* broken */ { {UNITIZE(Qt::Key_Dead_Iota), 0x0000, 0x1f08, 0, 0, 0}, 0x1f8c }, // U1F8C # GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA AND PROSGEGRAMMENI
++// /* broken */ { {UNITIZE(Qt::Key_Dead_Iota), 0x0000, 0x1f09, 0, 0, 0}, 0x1f8b }, // U1F8B # GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA AND PROSGEGRAMMENI
++// /* broken */ { {UNITIZE(Qt::Key_Dead_Iota), 0x0000, 0x1f09, 0, 0, 0}, 0x1f8d }, // U1F8D # GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA AND PROSGEGRAMMENI
++// /* broken */ { {UNITIZE(Qt::Key_Dead_Iota), 0x0000, 0x1f20, 0, 0, 0}, 0x1f94 }, // U1F94 # GREEK SMALL LETTER ETA WITH PSILI AND OXIA AND YPOGEGRAMMENI
++// /* broken */ { {UNITIZE(Qt::Key_Dead_Iota), 0x0000, 0x1f20, 0, 0, 0}, 0x1f92 }, // U1F92 # GREEK SMALL LETTER ETA WITH PSILI AND VARIA AND YPOGEGRAMMENI
++// /* broken */ { {UNITIZE(Qt::Key_Dead_Iota), 0x0000, 0x1f21, 0, 0, 0}, 0x1f93 }, // U1F93 # GREEK SMALL LETTER ETA WITH DASIA AND VARIA AND YPOGEGRAMMENI
++// /* broken */ { {UNITIZE(Qt::Key_Dead_Iota), 0x0000, 0x1f21, 0, 0, 0}, 0x1f95 }, // U1F95 # GREEK SMALL LETTER ETA WITH DASIA AND OXIA AND YPOGEGRAMMENI
++// /* broken */ { {UNITIZE(Qt::Key_Dead_Iota), 0x0000, 0x1f28, 0, 0, 0}, 0x1f9c }, // U1F9C # GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA AND PROSGEGRAMMENI
++// /* broken */ { {UNITIZE(Qt::Key_Dead_Iota), 0x0000, 0x1f28, 0, 0, 0}, 0x1f9a }, // U1F9A # GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA AND PROSGEGRAMMENI
++// /* broken */ { {UNITIZE(Qt::Key_Dead_Iota), 0x0000, 0x1f29, 0, 0, 0}, 0x1f9d }, // U1F9D # GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA AND PROSGEGRAMMENI
++// /* broken */ { {UNITIZE(Qt::Key_Dead_Iota), 0x0000, 0x1f29, 0, 0, 0}, 0x1f9b }, // U1F9B # GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA AND PROSGEGRAMMENI
++// /* broken */ { {UNITIZE(Qt::Key_Dead_Iota), 0x0000, 0x1f60, 0, 0, 0}, 0x1fa2 }, // U1FA2 # GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA AND YPOGEGRAMMENI
++// /* broken */ { {UNITIZE(Qt::Key_Dead_Iota), 0x0000, 0x1f60, 0, 0, 0}, 0x1fa4 }, // U1FA4 # GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA AND YPOGEGRAMMENI
++// /* broken */ { {UNITIZE(Qt::Key_Dead_Iota), 0x0000, 0x1f61, 0, 0, 0}, 0x1fa5 }, // U1FA5 # GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA AND YPOGEGRAMMENI
++// /* broken */ { {UNITIZE(Qt::Key_Dead_Iota), 0x0000, 0x1f61, 0, 0, 0}, 0x1fa3 }, // U1FA3 # GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA AND YPOGEGRAMMENI
++// /* broken */ { {UNITIZE(Qt::Key_Dead_Iota), 0x0000, 0x1f68, 0, 0, 0}, 0x1fac }, // U1FAC # GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA AND PROSGEGRAMMENI
++// /* broken */ { {UNITIZE(Qt::Key_Dead_Iota), 0x0000, 0x1f68, 0, 0, 0}, 0x1faa }, // U1FAA # GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA AND PROSGEGRAMMENI
++// /* broken */ { {UNITIZE(Qt::Key_Dead_Iota), 0x0000, 0x1f69, 0, 0, 0}, 0x1fad }, // U1FAD # GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA AND PROSGEGRAMMENI
++// /* broken */ { {UNITIZE(Qt::Key_Dead_Iota), 0x0000, 0x1f69, 0, 0, 0}, 0x1fab }, // U1FAB # GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA AND PROSGEGRAMMENI
++// /* broken */ { {UNITIZE(Qt::Key_Dead_Iota), 0x0000, UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0391, 0}, 0x1f8d }, // U1F8D # GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA AND PROSGEGRAMMENI
++// /* broken */ { {UNITIZE(Qt::Key_Dead_Iota), 0x0000, UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0391, 0}, 0x1f8b }, // U1F8B # GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA AND PROSGEGRAMMENI
++// /* broken */ { {UNITIZE(Qt::Key_Dead_Iota), 0x0000, UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0397, 0}, 0x1f9d }, // U1F9D # GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA AND PROSGEGRAMMENI
++// /* broken */ { {UNITIZE(Qt::Key_Dead_Iota), 0x0000, UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0397, 0}, 0x1f9b }, // U1F9B # GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA AND PROSGEGRAMMENI
++// /* broken */ { {UNITIZE(Qt::Key_Dead_Iota), 0x0000, UNITIZE(Qt::Key_Multi_key), 0x0028, 0x03a9, 0}, 0x1fab }, // U1FAB # GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA AND PROSGEGRAMMENI
++// /* broken */ { {UNITIZE(Qt::Key_Dead_Iota), 0x0000, UNITIZE(Qt::Key_Multi_key), 0x0028, 0x03a9, 0}, 0x1fad }, // U1FAD # GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA AND PROSGEGRAMMENI
++// /* broken */ { {UNITIZE(Qt::Key_Dead_Iota), 0x0000, UNITIZE(Qt::Key_Multi_key), 0x0028, 0x03b1, 0}, 0x1f85 }, // U1F85 # GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA AND YPOGEGRAMMENI
++// /* broken */ { {UNITIZE(Qt::Key_Dead_Iota), 0x0000, UNITIZE(Qt::Key_Multi_key), 0x0028, 0x03b1, 0}, 0x1f83 }, // U1F83 # GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA AND YPOGEGRAMMENI
++// /* broken */ { {UNITIZE(Qt::Key_Dead_Iota), 0x0000, UNITIZE(Qt::Key_Multi_key), 0x0028, 0x03b7, 0}, 0x1f95 }, // U1F95 # GREEK SMALL LETTER ETA WITH DASIA AND OXIA AND YPOGEGRAMMENI
++// /* broken */ { {UNITIZE(Qt::Key_Dead_Iota), 0x0000, UNITIZE(Qt::Key_Multi_key), 0x0028, 0x03b7, 0}, 0x1f93 }, // U1F93 # GREEK SMALL LETTER ETA WITH DASIA AND VARIA AND YPOGEGRAMMENI
++// /* broken */ { {UNITIZE(Qt::Key_Dead_Iota), 0x0000, UNITIZE(Qt::Key_Multi_key), 0x0028, 0x03c9, 0}, 0x1fa3 }, // U1FA3 # GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA AND YPOGEGRAMMENI
++// /* broken */ { {UNITIZE(Qt::Key_Dead_Iota), 0x0000, UNITIZE(Qt::Key_Multi_key), 0x0028, 0x03c9, 0}, 0x1fa5 }, // U1FA5 # GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA AND YPOGEGRAMMENI
++// /* broken */ { {UNITIZE(Qt::Key_Dead_Iota), 0x0000, UNITIZE(Qt::Key_Multi_key), 0x0029, 0x0391, 0}, 0x1f8a }, // U1F8A # GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA AND PROSGEGRAMMENI
++// /* broken */ { {UNITIZE(Qt::Key_Dead_Iota), 0x0000, UNITIZE(Qt::Key_Multi_key), 0x0029, 0x0391, 0}, 0x1f8c }, // U1F8C # GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA AND PROSGEGRAMMENI
++// /* broken */ { {UNITIZE(Qt::Key_Dead_Iota), 0x0000, UNITIZE(Qt::Key_Multi_key), 0x0029, 0x0397, 0}, 0x1f9a }, // U1F9A # GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA AND PROSGEGRAMMENI
++// /* broken */ { {UNITIZE(Qt::Key_Dead_Iota), 0x0000, UNITIZE(Qt::Key_Multi_key), 0x0029, 0x0397, 0}, 0x1f9c }, // U1F9C # GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA AND PROSGEGRAMMENI
++// /* broken */ { {UNITIZE(Qt::Key_Dead_Iota), 0x0000, UNITIZE(Qt::Key_Multi_key), 0x0029, 0x03a9, 0}, 0x1fac }, // U1FAC # GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA AND PROSGEGRAMMENI
++// /* broken */ { {UNITIZE(Qt::Key_Dead_Iota), 0x0000, UNITIZE(Qt::Key_Multi_key), 0x0029, 0x03a9, 0}, 0x1faa }, // U1FAA # GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA AND PROSGEGRAMMENI
++// /* broken */ { {UNITIZE(Qt::Key_Dead_Iota), 0x0000, UNITIZE(Qt::Key_Multi_key), 0x0029, 0x03b1, 0}, 0x1f84 }, // U1F84 # GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA AND YPOGEGRAMMENI
++// /* broken */ { {UNITIZE(Qt::Key_Dead_Iota), 0x0000, UNITIZE(Qt::Key_Multi_key), 0x0029, 0x03b1, 0}, 0x1f82 }, // U1F82 # GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA AND YPOGEGRAMMENI
++// /* broken */ { {UNITIZE(Qt::Key_Dead_Iota), 0x0000, UNITIZE(Qt::Key_Multi_key), 0x0029, 0x03b7, 0}, 0x1f94 }, // U1F94 # GREEK SMALL LETTER ETA WITH PSILI AND OXIA AND YPOGEGRAMMENI
++// /* broken */ { {UNITIZE(Qt::Key_Dead_Iota), 0x0000, UNITIZE(Qt::Key_Multi_key), 0x0029, 0x03b7, 0}, 0x1f92 }, // U1F92 # GREEK SMALL LETTER ETA WITH PSILI AND VARIA AND YPOGEGRAMMENI
++// /* broken */ { {UNITIZE(Qt::Key_Dead_Iota), 0x0000, UNITIZE(Qt::Key_Multi_key), 0x0029, 0x03c9, 0}, 0x1fa2 }, // U1FA2 # GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA AND YPOGEGRAMMENI
++// /* broken */ { {UNITIZE(Qt::Key_Dead_Iota), 0x0000, UNITIZE(Qt::Key_Multi_key), 0x0029, 0x03c9, 0}, 0x1fa4 }, // U1FA4 # GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), 0x0313, 0x0391, 0, 0, 0}, 0x1f88 }, // U1F88 # GREEK CAPITAL LETTER ALPHA WITH PSILI AND PROSGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), 0x0313, 0x0397, 0, 0, 0}, 0x1f98 }, // U1F98 # GREEK CAPITAL LETTER ETA WITH PSILI AND PROSGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), 0x0313, 0x03a9, 0, 0, 0}, 0x1fa8 }, // U1FA8 # GREEK CAPITAL LETTER OMEGA WITH PSILI AND PROSGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), 0x0313, 0x03b1, 0, 0, 0}, 0x1f80 }, // U1F80 # GREEK SMALL LETTER ALPHA WITH PSILI AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), 0x0313, 0x03b7, 0, 0, 0}, 0x1f90 }, // U1F90 # GREEK SMALL LETTER ETA WITH PSILI AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), 0x0313, 0x03c9, 0, 0, 0}, 0x1fa0 }, // U1FA0 # GREEK SMALL LETTER OMEGA WITH PSILI AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), 0x0314, 0x0391, 0, 0, 0}, 0x1f89 }, // U1F89 # GREEK CAPITAL LETTER ALPHA WITH DASIA AND PROSGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), 0x0314, 0x0397, 0, 0, 0}, 0x1f99 }, // U1F99 # GREEK CAPITAL LETTER ETA WITH DASIA AND PROSGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), 0x0314, 0x03a9, 0, 0, 0}, 0x1fa9 }, // U1FA9 # GREEK CAPITAL LETTER OMEGA WITH DASIA AND PROSGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), 0x0314, 0x03b1, 0, 0, 0}, 0x1f81 }, // U1F81 # GREEK SMALL LETTER ALPHA WITH DASIA AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), 0x0314, 0x03b7, 0, 0, 0}, 0x1f91 }, // U1F91 # GREEK SMALL LETTER ETA WITH DASIA AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), 0x0314, 0x03c9, 0, 0, 0}, 0x1fa1 }, // U1FA1 # GREEK SMALL LETTER OMEGA WITH DASIA AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), 0x0342, 0x0313, 0x0391, 0, 0}, 0x1f8e }, // U1F8E # GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), 0x0342, 0x0313, 0x0397, 0, 0}, 0x1f9e }, // U1F9E # GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), 0x0342, 0x0313, 0x03a9, 0, 0}, 0x1fae }, // U1FAE # GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), 0x0342, 0x0313, 0x03b1, 0, 0}, 0x1f86 }, // U1F86 # GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), 0x0342, 0x0313, 0x03b7, 0, 0}, 0x1f96 }, // U1F96 # GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), 0x0342, 0x0313, 0x03c9, 0, 0}, 0x1fa6 }, // U1FA6 # GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), 0x0342, 0x0314, 0x0391, 0, 0}, 0x1f8f }, // U1F8F # GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), 0x0342, 0x0314, 0x0397, 0, 0}, 0x1f9f }, // U1F9F # GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), 0x0342, 0x0314, 0x03a9, 0, 0}, 0x1faf }, // U1FAF # GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), 0x0342, 0x0314, 0x03b1, 0, 0}, 0x1f87 }, // U1F87 # GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), 0x0342, 0x0314, 0x03b7, 0, 0}, 0x1f97 }, // U1F97 # GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), 0x0342, 0x0314, 0x03c9, 0, 0}, 0x1fa7 }, // U1FA7 # GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), 0x0342, 0x03b1, 0, 0, 0}, 0x1fb7 }, // U1FB7 # GREEK SMALL LETTER ALPHA WITH PERISPOMENI AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), 0x0342, 0x03b7, 0, 0, 0}, 0x1fc7 }, // U1FC7 # GREEK SMALL LETTER ETA WITH PERISPOMENI AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), 0x0342, 0x03c9, 0, 0, 0}, 0x1ff7 }, // U1FF7 # GREEK SMALL LETTER OMEGA WITH PERISPOMENI AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), 0x0342, 0x1f00, 0, 0, 0}, 0x1f86 }, // U1F86 # GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), 0x0342, 0x1f01, 0, 0, 0}, 0x1f87 }, // U1F87 # GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), 0x0342, 0x1f08, 0, 0, 0}, 0x1f8e }, // U1F8E # GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), 0x0342, 0x1f09, 0, 0, 0}, 0x1f8f }, // U1F8F # GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), 0x0342, 0x1f20, 0, 0, 0}, 0x1f96 }, // U1F96 # GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), 0x0342, 0x1f21, 0, 0, 0}, 0x1f97 }, // U1F97 # GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), 0x0342, 0x1f28, 0, 0, 0}, 0x1f9e }, // U1F9E # GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), 0x0342, 0x1f29, 0, 0, 0}, 0x1f9f }, // U1F9F # GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), 0x0342, 0x1f60, 0, 0, 0}, 0x1fa6 }, // U1FA6 # GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), 0x0342, 0x1f61, 0, 0, 0}, 0x1fa7 }, // U1FA7 # GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), 0x0342, 0x1f68, 0, 0, 0}, 0x1fae }, // U1FAE # GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), 0x0342, 0x1f69, 0, 0, 0}, 0x1faf }, // U1FAF # GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), 0x0342, UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0391, 0}, 0x1f8f }, // U1F8F # GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), 0x0342, UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0397, 0}, 0x1f9f }, // U1F9F # GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), 0x0342, UNITIZE(Qt::Key_Multi_key), 0x0028, 0x03a9, 0}, 0x1faf }, // U1FAF # GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), 0x0342, UNITIZE(Qt::Key_Multi_key), 0x0028, 0x03b1, 0}, 0x1f87 }, // U1F87 # GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), 0x0342, UNITIZE(Qt::Key_Multi_key), 0x0028, 0x03b7, 0}, 0x1f97 }, // U1F97 # GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), 0x0342, UNITIZE(Qt::Key_Multi_key), 0x0028, 0x03c9, 0}, 0x1fa7 }, // U1FA7 # GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), 0x0342, UNITIZE(Qt::Key_Multi_key), 0x0029, 0x0391, 0}, 0x1f8e }, // U1F8E # GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), 0x0342, UNITIZE(Qt::Key_Multi_key), 0x0029, 0x0397, 0}, 0x1f9e }, // U1F9E # GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), 0x0342, UNITIZE(Qt::Key_Multi_key), 0x0029, 0x03a9, 0}, 0x1fae }, // U1FAE # GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), 0x0342, UNITIZE(Qt::Key_Multi_key), 0x0029, 0x03b1, 0}, 0x1f86 }, // U1F86 # GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), 0x0342, UNITIZE(Qt::Key_Multi_key), 0x0029, 0x03b7, 0}, 0x1f96 }, // U1F96 # GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), 0x0342, UNITIZE(Qt::Key_Multi_key), 0x0029, 0x03c9, 0}, 0x1fa6 }, // U1FA6 # GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), 0x0391, 0, 0, 0, 0}, 0x1fbc }, // U1FBC # GREEK CAPITAL LETTER ALPHA WITH PROSGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), 0x0397, 0, 0, 0, 0}, 0x1fcc }, // U1FCC # GREEK CAPITAL LETTER ETA WITH PROSGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), 0x03a9, 0, 0, 0, 0}, 0x1ffc }, // U1FFC # GREEK CAPITAL LETTER OMEGA WITH PROSGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), 0x03ac, 0, 0, 0, 0}, 0x1fb4 }, // U1FB4 # GREEK SMALL LETTER ALPHA WITH OXIA AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), 0x03ae, 0, 0, 0, 0}, 0x1fc4 }, // U1FC4 # GREEK SMALL LETTER ETA WITH OXIA AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), 0x03b1, 0, 0, 0, 0}, 0x1fb3 }, // U1FB3 # GREEK SMALL LETTER ALPHA WITH YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), 0x03b7, 0, 0, 0, 0}, 0x1fc3 }, // U1FC3 # GREEK SMALL LETTER ETA WITH YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), 0x03c9, 0, 0, 0, 0}, 0x1ff3 }, // U1FF3 # GREEK SMALL LETTER OMEGA WITH YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), 0x03ce, 0, 0, 0, 0}, 0x1ff4 }, // U1FF4 # GREEK SMALL LETTER OMEGA WITH OXIA AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), 0x1f00, 0, 0, 0, 0}, 0x1f80 }, // U1F80 # GREEK SMALL LETTER ALPHA WITH PSILI AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), 0x1f01, 0, 0, 0, 0}, 0x1f81 }, // U1F81 # GREEK SMALL LETTER ALPHA WITH DASIA AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), 0x1f02, 0, 0, 0, 0}, 0x1f82 }, // U1F82 # GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), 0x1f03, 0, 0, 0, 0}, 0x1f83 }, // U1F83 # GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), 0x1f04, 0, 0, 0, 0}, 0x1f84 }, // U1F84 # GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), 0x1f05, 0, 0, 0, 0}, 0x1f85 }, // U1F85 # GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), 0x1f06, 0, 0, 0, 0}, 0x1f86 }, // U1F86 # GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), 0x1f07, 0, 0, 0, 0}, 0x1f87 }, // U1F87 # GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), 0x1f08, 0, 0, 0, 0}, 0x1f88 }, // U1F88 # GREEK CAPITAL LETTER ALPHA WITH PSILI AND PROSGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), 0x1f09, 0, 0, 0, 0}, 0x1f89 }, // U1F89 # GREEK CAPITAL LETTER ALPHA WITH DASIA AND PROSGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), 0x1f0a, 0, 0, 0, 0}, 0x1f8a }, // U1F8A # GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA AND PROSGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), 0x1f0b, 0, 0, 0, 0}, 0x1f8b }, // U1F8B # GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA AND PROSGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), 0x1f0c, 0, 0, 0, 0}, 0x1f8c }, // U1F8C # GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA AND PROSGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), 0x1f0d, 0, 0, 0, 0}, 0x1f8d }, // U1F8D # GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA AND PROSGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), 0x1f0e, 0, 0, 0, 0}, 0x1f8e }, // U1F8E # GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), 0x1f0f, 0, 0, 0, 0}, 0x1f8f }, // U1F8F # GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), 0x1f20, 0, 0, 0, 0}, 0x1f90 }, // U1F90 # GREEK SMALL LETTER ETA WITH PSILI AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), 0x1f21, 0, 0, 0, 0}, 0x1f91 }, // U1F91 # GREEK SMALL LETTER ETA WITH DASIA AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), 0x1f22, 0, 0, 0, 0}, 0x1f92 }, // U1F92 # GREEK SMALL LETTER ETA WITH PSILI AND VARIA AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), 0x1f23, 0, 0, 0, 0}, 0x1f93 }, // U1F93 # GREEK SMALL LETTER ETA WITH DASIA AND VARIA AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), 0x1f24, 0, 0, 0, 0}, 0x1f94 }, // U1F94 # GREEK SMALL LETTER ETA WITH PSILI AND OXIA AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), 0x1f25, 0, 0, 0, 0}, 0x1f95 }, // U1F95 # GREEK SMALL LETTER ETA WITH DASIA AND OXIA AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), 0x1f26, 0, 0, 0, 0}, 0x1f96 }, // U1F96 # GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), 0x1f27, 0, 0, 0, 0}, 0x1f97 }, // U1F97 # GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), 0x1f28, 0, 0, 0, 0}, 0x1f98 }, // U1F98 # GREEK CAPITAL LETTER ETA WITH PSILI AND PROSGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), 0x1f29, 0, 0, 0, 0}, 0x1f99 }, // U1F99 # GREEK CAPITAL LETTER ETA WITH DASIA AND PROSGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), 0x1f2a, 0, 0, 0, 0}, 0x1f9a }, // U1F9A # GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA AND PROSGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), 0x1f2b, 0, 0, 0, 0}, 0x1f9b }, // U1F9B # GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA AND PROSGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), 0x1f2c, 0, 0, 0, 0}, 0x1f9c }, // U1F9C # GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA AND PROSGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), 0x1f2d, 0, 0, 0, 0}, 0x1f9d }, // U1F9D # GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA AND PROSGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), 0x1f2e, 0, 0, 0, 0}, 0x1f9e }, // U1F9E # GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), 0x1f2f, 0, 0, 0, 0}, 0x1f9f }, // U1F9F # GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), 0x1f60, 0, 0, 0, 0}, 0x1fa0 }, // U1FA0 # GREEK SMALL LETTER OMEGA WITH PSILI AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), 0x1f61, 0, 0, 0, 0}, 0x1fa1 }, // U1FA1 # GREEK SMALL LETTER OMEGA WITH DASIA AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), 0x1f62, 0, 0, 0, 0}, 0x1fa2 }, // U1FA2 # GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), 0x1f63, 0, 0, 0, 0}, 0x1fa3 }, // U1FA3 # GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), 0x1f64, 0, 0, 0, 0}, 0x1fa4 }, // U1FA4 # GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), 0x1f65, 0, 0, 0, 0}, 0x1fa5 }, // U1FA5 # GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), 0x1f66, 0, 0, 0, 0}, 0x1fa6 }, // U1FA6 # GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), 0x1f67, 0, 0, 0, 0}, 0x1fa7 }, // U1FA7 # GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), 0x1f68, 0, 0, 0, 0}, 0x1fa8 }, // U1FA8 # GREEK CAPITAL LETTER OMEGA WITH PSILI AND PROSGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), 0x1f69, 0, 0, 0, 0}, 0x1fa9 }, // U1FA9 # GREEK CAPITAL LETTER OMEGA WITH DASIA AND PROSGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), 0x1f6a, 0, 0, 0, 0}, 0x1faa }, // U1FAA # GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA AND PROSGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), 0x1f6b, 0, 0, 0, 0}, 0x1fab }, // U1FAB # GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA AND PROSGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), 0x1f6c, 0, 0, 0, 0}, 0x1fac }, // U1FAC # GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA AND PROSGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), 0x1f6d, 0, 0, 0, 0}, 0x1fad }, // U1FAD # GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA AND PROSGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), 0x1f6e, 0, 0, 0, 0}, 0x1fae }, // U1FAE # GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), 0x1f6f, 0, 0, 0, 0}, 0x1faf }, // U1FAF # GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), 0x1f70, 0, 0, 0, 0}, 0x1fb2 }, // U1FB2 # GREEK SMALL LETTER ALPHA WITH VARIA AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), 0x1f74, 0, 0, 0, 0}, 0x1fc2 }, // U1FC2 # GREEK SMALL LETTER ETA WITH VARIA AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), 0x1f7c, 0, 0, 0, 0}, 0x1ff2 }, // U1FF2 # GREEK SMALL LETTER OMEGA WITH VARIA AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), 0x1fb6, 0, 0, 0, 0}, 0x1fb7 }, // U1FB7 # GREEK SMALL LETTER ALPHA WITH PERISPOMENI AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), 0x1fc6, 0, 0, 0, 0}, 0x1fc7 }, // U1FC7 # GREEK SMALL LETTER ETA WITH PERISPOMENI AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), 0x1ff6, 0, 0, 0, 0}, 0x1ff7 }, // U1FF7 # GREEK SMALL LETTER OMEGA WITH PERISPOMENI AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0028, 0x0391, 0}, 0x1f8d }, // U1F8D # GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA AND PROSGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0028, 0x0397, 0}, 0x1f9d }, // U1F9D # GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA AND PROSGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0028, 0x03a9, 0}, 0x1fad }, // U1FAD # GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA AND PROSGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0028, 0x03b1, 0}, 0x1f85 }, // U1F85 # GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0028, 0x03b7, 0}, 0x1f95 }, // U1F95 # GREEK SMALL LETTER ETA WITH DASIA AND OXIA AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0028, 0x03c9, 0}, 0x1fa5 }, // U1FA5 # GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0029, 0x0391, 0}, 0x1f8c }, // U1F8C # GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA AND PROSGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0029, 0x0397, 0}, 0x1f9c }, // U1F9C # GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA AND PROSGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0029, 0x03a9, 0}, 0x1fac }, // U1FAC # GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA AND PROSGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0029, 0x03b1, 0}, 0x1f84 }, // U1F84 # GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0029, 0x03b7, 0}, 0x1f94 }, // U1F94 # GREEK SMALL LETTER ETA WITH PSILI AND OXIA AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0029, 0x03c9, 0}, 0x1fa4 }, // U1FA4 # GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0313, 0x0391, 0}, 0x1f8c }, // U1F8C # GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA AND PROSGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0313, 0x0397, 0}, 0x1f9c }, // U1F9C # GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA AND PROSGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0313, 0x03a9, 0}, 0x1fac }, // U1FAC # GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA AND PROSGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0313, 0x03b1, 0}, 0x1f84 }, // U1F84 # GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0313, 0x03b7, 0}, 0x1f94 }, // U1F94 # GREEK SMALL LETTER ETA WITH PSILI AND OXIA AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0313, 0x03c9, 0}, 0x1fa4 }, // U1FA4 # GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0314, 0x0391, 0}, 0x1f8d }, // U1F8D # GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA AND PROSGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0314, 0x0397, 0}, 0x1f9d }, // U1F9D # GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA AND PROSGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0314, 0x03a9, 0}, 0x1fad }, // U1FAD # GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA AND PROSGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0314, 0x03b1, 0}, 0x1f85 }, // U1F85 # GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0314, 0x03b7, 0}, 0x1f95 }, // U1F95 # GREEK SMALL LETTER ETA WITH DASIA AND OXIA AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0314, 0x03c9, 0}, 0x1fa5 }, // U1FA5 # GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x0027, 0x03b1, 0, 0}, 0x1fb4 }, // U1FB4 # GREEK SMALL LETTER ALPHA WITH OXIA AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x0027, 0x03b7, 0, 0}, 0x1fc4 }, // U1FC4 # GREEK SMALL LETTER ETA WITH OXIA AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x0027, 0x03c9, 0, 0}, 0x1ff4 }, // U1FF4 # GREEK SMALL LETTER OMEGA WITH OXIA AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x0027, 0x1f00, 0, 0}, 0x1f84 }, // U1F84 # GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x0027, 0x1f01, 0, 0}, 0x1f85 }, // U1F85 # GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x0027, 0x1f08, 0, 0}, 0x1f8c }, // U1F8C # GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA AND PROSGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x0027, 0x1f09, 0, 0}, 0x1f8d }, // U1F8D # GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA AND PROSGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x0027, 0x1f20, 0, 0}, 0x1f94 }, // U1F94 # GREEK SMALL LETTER ETA WITH PSILI AND OXIA AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x0027, 0x1f21, 0, 0}, 0x1f95 }, // U1F95 # GREEK SMALL LETTER ETA WITH DASIA AND OXIA AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x0027, 0x1f28, 0, 0}, 0x1f9c }, // U1F9C # GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA AND PROSGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x0027, 0x1f29, 0, 0}, 0x1f9d }, // U1F9D # GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA AND PROSGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x0027, 0x1f60, 0, 0}, 0x1fa4 }, // U1FA4 # GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x0027, 0x1f61, 0, 0}, 0x1fa5 }, // U1FA5 # GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x0027, 0x1f68, 0, 0}, 0x1fac }, // U1FAC # GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA AND PROSGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x0027, 0x1f69, 0, 0}, 0x1fad }, // U1FAD # GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA AND PROSGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0391, 0, 0}, 0x1f89 }, // U1F89 # GREEK CAPITAL LETTER ALPHA WITH DASIA AND PROSGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0397, 0, 0}, 0x1f99 }, // U1F99 # GREEK CAPITAL LETTER ETA WITH DASIA AND PROSGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x0028, 0x03a9, 0, 0}, 0x1fa9 }, // U1FA9 # GREEK CAPITAL LETTER OMEGA WITH DASIA AND PROSGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x0028, 0x03b1, 0, 0}, 0x1f81 }, // U1F81 # GREEK SMALL LETTER ALPHA WITH DASIA AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x0028, 0x03b7, 0, 0}, 0x1f91 }, // U1F91 # GREEK SMALL LETTER ETA WITH DASIA AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x0028, 0x03c9, 0, 0}, 0x1fa1 }, // U1FA1 # GREEK SMALL LETTER OMEGA WITH DASIA AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x0029, 0x0391, 0, 0}, 0x1f88 }, // U1F88 # GREEK CAPITAL LETTER ALPHA WITH PSILI AND PROSGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x0029, 0x0397, 0, 0}, 0x1f98 }, // U1F98 # GREEK CAPITAL LETTER ETA WITH PSILI AND PROSGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x0029, 0x03a9, 0, 0}, 0x1fa8 }, // U1FA8 # GREEK CAPITAL LETTER OMEGA WITH PSILI AND PROSGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x0029, 0x03b1, 0, 0}, 0x1f80 }, // U1F80 # GREEK SMALL LETTER ALPHA WITH PSILI AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x0029, 0x03b7, 0, 0}, 0x1f90 }, // U1F90 # GREEK SMALL LETTER ETA WITH PSILI AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x0029, 0x03c9, 0, 0}, 0x1fa0 }, // U1FA0 # GREEK SMALL LETTER OMEGA WITH PSILI AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0028, 0x0391, 0}, 0x1f8b }, // U1F8B # GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA AND PROSGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0028, 0x0397, 0}, 0x1f9b }, // U1F9B # GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA AND PROSGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0028, 0x03a9, 0}, 0x1fab }, // U1FAB # GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA AND PROSGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0028, 0x03b1, 0}, 0x1f83 }, // U1F83 # GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0028, 0x03b7, 0}, 0x1f93 }, // U1F93 # GREEK SMALL LETTER ETA WITH DASIA AND VARIA AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0028, 0x03c9, 0}, 0x1fa3 }, // U1FA3 # GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0029, 0x0391, 0}, 0x1f8a }, // U1F8A # GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA AND PROSGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0029, 0x0397, 0}, 0x1f9a }, // U1F9A # GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA AND PROSGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0029, 0x03a9, 0}, 0x1faa }, // U1FAA # GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA AND PROSGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0029, 0x03b1, 0}, 0x1f82 }, // U1F82 # GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0029, 0x03b7, 0}, 0x1f92 }, // U1F92 # GREEK SMALL LETTER ETA WITH PSILI AND VARIA AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0029, 0x03c9, 0}, 0x1fa2 }, // U1FA2 # GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0313, 0x0391, 0}, 0x1f8a }, // U1F8A # GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA AND PROSGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0313, 0x0397, 0}, 0x1f9a }, // U1F9A # GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA AND PROSGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0313, 0x03a9, 0}, 0x1faa }, // U1FAA # GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA AND PROSGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0313, 0x03b1, 0}, 0x1f82 }, // U1F82 # GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0313, 0x03b7, 0}, 0x1f92 }, // U1F92 # GREEK SMALL LETTER ETA WITH PSILI AND VARIA AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0313, 0x03c9, 0}, 0x1fa2 }, // U1FA2 # GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0314, 0x0391, 0}, 0x1f8b }, // U1F8B # GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA AND PROSGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0314, 0x0397, 0}, 0x1f9b }, // U1F9B # GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA AND PROSGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0314, 0x03a9, 0}, 0x1fab }, // U1FAB # GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA AND PROSGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0314, 0x03b1, 0}, 0x1f83 }, // U1F83 # GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0314, 0x03b7, 0}, 0x1f93 }, // U1F93 # GREEK SMALL LETTER ETA WITH DASIA AND VARIA AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0314, 0x03c9, 0}, 0x1fa3 }, // U1FA3 # GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x0060, 0x03b1, 0, 0}, 0x1fb2 }, // U1FB2 # GREEK SMALL LETTER ALPHA WITH VARIA AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x0060, 0x03b7, 0, 0}, 0x1fc2 }, // U1FC2 # GREEK SMALL LETTER ETA WITH VARIA AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x0060, 0x03c9, 0, 0}, 0x1ff2 }, // U1FF2 # GREEK SMALL LETTER OMEGA WITH VARIA AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x0060, 0x1f00, 0, 0}, 0x1f82 }, // U1F82 # GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x0060, 0x1f01, 0, 0}, 0x1f83 }, // U1F83 # GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x0060, 0x1f08, 0, 0}, 0x1f8a }, // U1F8A # GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA AND PROSGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x0060, 0x1f09, 0, 0}, 0x1f8b }, // U1F8B # GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA AND PROSGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x0060, 0x1f20, 0, 0}, 0x1f92 }, // U1F92 # GREEK SMALL LETTER ETA WITH PSILI AND VARIA AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x0060, 0x1f21, 0, 0}, 0x1f93 }, // U1F93 # GREEK SMALL LETTER ETA WITH DASIA AND VARIA AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x0060, 0x1f28, 0, 0}, 0x1f9a }, // U1F9A # GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA AND PROSGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x0060, 0x1f29, 0, 0}, 0x1f9b }, // U1F9B # GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA AND PROSGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x0060, 0x1f60, 0, 0}, 0x1fa2 }, // U1FA2 # GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x0060, 0x1f61, 0, 0}, 0x1fa3 }, // U1FA3 # GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x0060, 0x1f68, 0, 0}, 0x1faa }, // U1FAA # GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA AND PROSGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x0060, 0x1f69, 0, 0}, 0x1fab }, // U1FAB # GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA AND PROSGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x007e, 0x0028, 0x0391, 0}, 0x1f8f }, // U1F8F # GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x007e, 0x0028, 0x0397, 0}, 0x1f9f }, // U1F9F # GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x007e, 0x0028, 0x03a9, 0}, 0x1faf }, // U1FAF # GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x007e, 0x0028, 0x03b1, 0}, 0x1f87 }, // U1F87 # GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x007e, 0x0028, 0x03b7, 0}, 0x1f97 }, // U1F97 # GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x007e, 0x0028, 0x03c9, 0}, 0x1fa7 }, // U1FA7 # GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x007e, 0x0029, 0x0391, 0}, 0x1f8e }, // U1F8E # GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x007e, 0x0029, 0x0397, 0}, 0x1f9e }, // U1F9E # GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x007e, 0x0029, 0x03a9, 0}, 0x1fae }, // U1FAE # GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x007e, 0x0029, 0x03b1, 0}, 0x1f86 }, // U1F86 # GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x007e, 0x0029, 0x03b7, 0}, 0x1f96 }, // U1F96 # GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x007e, 0x0029, 0x03c9, 0}, 0x1fa6 }, // U1FA6 # GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x007e, 0x0313, 0x0391, 0}, 0x1f8e }, // U1F8E # GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x007e, 0x0313, 0x0397, 0}, 0x1f9e }, // U1F9E # GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x007e, 0x0313, 0x03a9, 0}, 0x1fae }, // U1FAE # GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x007e, 0x0313, 0x03b1, 0}, 0x1f86 }, // U1F86 # GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x007e, 0x0313, 0x03b7, 0}, 0x1f96 }, // U1F96 # GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x007e, 0x0313, 0x03c9, 0}, 0x1fa6 }, // U1FA6 # GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x007e, 0x0314, 0x0391, 0}, 0x1f8f }, // U1F8F # GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x007e, 0x0314, 0x0397, 0}, 0x1f9f }, // U1F9F # GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x007e, 0x0314, 0x03a9, 0}, 0x1faf }, // U1FAF # GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x007e, 0x0314, 0x03b1, 0}, 0x1f87 }, // U1F87 # GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x007e, 0x0314, 0x03b7, 0}, 0x1f97 }, // U1F97 # GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x007e, 0x0314, 0x03c9, 0}, 0x1fa7 }, // U1FA7 # GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x007e, 0x03b1, 0, 0}, 0x1fb7 }, // U1FB7 # GREEK SMALL LETTER ALPHA WITH PERISPOMENI AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x007e, 0x03b7, 0, 0}, 0x1fc7 }, // U1FC7 # GREEK SMALL LETTER ETA WITH PERISPOMENI AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x007e, 0x03c9, 0, 0}, 0x1ff7 }, // U1FF7 # GREEK SMALL LETTER OMEGA WITH PERISPOMENI AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x007e, 0x1f00, 0, 0}, 0x1f86 }, // U1F86 # GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x007e, 0x1f01, 0, 0}, 0x1f87 }, // U1F87 # GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x007e, 0x1f08, 0, 0}, 0x1f8e }, // U1F8E # GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x007e, 0x1f09, 0, 0}, 0x1f8f }, // U1F8F # GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x007e, 0x1f20, 0, 0}, 0x1f96 }, // U1F96 # GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x007e, 0x1f21, 0, 0}, 0x1f97 }, // U1F97 # GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x007e, 0x1f28, 0, 0}, 0x1f9e }, // U1F9E # GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x007e, 0x1f29, 0, 0}, 0x1f9f }, // U1F9F # GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x007e, 0x1f60, 0, 0}, 0x1fa6 }, // U1FA6 # GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x007e, 0x1f61, 0, 0}, 0x1fa7 }, // U1FA7 # GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x007e, 0x1f68, 0, 0}, 0x1fae }, // U1FAE # GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x007e, 0x1f69, 0, 0}, 0x1faf }, // U1FAF # GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0028, 0x0391, 0}, 0x1f8d }, // U1F8D # GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA AND PROSGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0028, 0x0397, 0}, 0x1f9d }, // U1F9D # GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA AND PROSGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0028, 0x03a9, 0}, 0x1fad }, // U1FAD # GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA AND PROSGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0028, 0x03b1, 0}, 0x1f85 }, // U1F85 # GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0028, 0x03b7, 0}, 0x1f95 }, // U1F95 # GREEK SMALL LETTER ETA WITH DASIA AND OXIA AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0028, 0x03c9, 0}, 0x1fa5 }, // U1FA5 # GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0029, 0x0391, 0}, 0x1f8c }, // U1F8C # GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA AND PROSGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0029, 0x0397, 0}, 0x1f9c }, // U1F9C # GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA AND PROSGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0029, 0x03a9, 0}, 0x1fac }, // U1FAC # GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA AND PROSGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0029, 0x03b1, 0}, 0x1f84 }, // U1F84 # GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0029, 0x03b7, 0}, 0x1f94 }, // U1F94 # GREEK SMALL LETTER ETA WITH PSILI AND OXIA AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0029, 0x03c9, 0}, 0x1fa4 }, // U1FA4 # GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0313, 0x0391, 0}, 0x1f8c }, // U1F8C # GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA AND PROSGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0313, 0x0397, 0}, 0x1f9c }, // U1F9C # GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA AND PROSGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0313, 0x03a9, 0}, 0x1fac }, // U1FAC # GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA AND PROSGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0313, 0x03b1, 0}, 0x1f84 }, // U1F84 # GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0313, 0x03b7, 0}, 0x1f94 }, // U1F94 # GREEK SMALL LETTER ETA WITH PSILI AND OXIA AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0313, 0x03c9, 0}, 0x1fa4 }, // U1FA4 # GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0314, 0x0391, 0}, 0x1f8d }, // U1F8D # GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA AND PROSGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0314, 0x0397, 0}, 0x1f9d }, // U1F9D # GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA AND PROSGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0314, 0x03a9, 0}, 0x1fad }, // U1FAD # GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA AND PROSGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0314, 0x03b1, 0}, 0x1f85 }, // U1F85 # GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0314, 0x03b7, 0}, 0x1f95 }, // U1F95 # GREEK SMALL LETTER ETA WITH DASIA AND OXIA AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0314, 0x03c9, 0}, 0x1fa5 }, // U1FA5 # GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x03b1, 0, 0}, 0x1fb4 }, // U1FB4 # GREEK SMALL LETTER ALPHA WITH OXIA AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x03b7, 0, 0}, 0x1fc4 }, // U1FC4 # GREEK SMALL LETTER ETA WITH OXIA AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x03c9, 0, 0}, 0x1ff4 }, // U1FF4 # GREEK SMALL LETTER OMEGA WITH OXIA AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x1f00, 0, 0}, 0x1f84 }, // U1F84 # GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x1f01, 0, 0}, 0x1f85 }, // U1F85 # GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x1f08, 0, 0}, 0x1f8c }, // U1F8C # GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA AND PROSGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x1f09, 0, 0}, 0x1f8d }, // U1F8D # GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA AND PROSGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x1f20, 0, 0}, 0x1f94 }, // U1F94 # GREEK SMALL LETTER ETA WITH PSILI AND OXIA AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x1f21, 0, 0}, 0x1f95 }, // U1F95 # GREEK SMALL LETTER ETA WITH DASIA AND OXIA AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x1f28, 0, 0}, 0x1f9c }, // U1F9C # GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA AND PROSGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x1f29, 0, 0}, 0x1f9d }, // U1F9D # GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA AND PROSGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x1f60, 0, 0}, 0x1fa4 }, // U1FA4 # GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x1f61, 0, 0}, 0x1fa5 }, // U1FA5 # GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x1f68, 0, 0}, 0x1fac }, // U1FAC # GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA AND PROSGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x1f69, 0, 0}, 0x1fad }, // U1FAD # GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA AND PROSGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Grave), 0x0313, 0x0391, 0, 0}, 0x1f8a }, // U1F8A # GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA AND PROSGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Grave), 0x0313, 0x0397, 0, 0}, 0x1f9a }, // U1F9A # GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA AND PROSGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Grave), 0x0313, 0x03a9, 0, 0}, 0x1faa }, // U1FAA # GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA AND PROSGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Grave), 0x0313, 0x03b1, 0, 0}, 0x1f82 }, // U1F82 # GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Grave), 0x0313, 0x03b7, 0, 0}, 0x1f92 }, // U1F92 # GREEK SMALL LETTER ETA WITH PSILI AND VARIA AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Grave), 0x0313, 0x03c9, 0, 0}, 0x1fa2 }, // U1FA2 # GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Grave), 0x0314, 0x0391, 0, 0}, 0x1f8b }, // U1F8B # GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA AND PROSGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Grave), 0x0314, 0x0397, 0, 0}, 0x1f9b }, // U1F9B # GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA AND PROSGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Grave), 0x0314, 0x03a9, 0, 0}, 0x1fab }, // U1FAB # GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA AND PROSGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Grave), 0x0314, 0x03b1, 0, 0}, 0x1f83 }, // U1F83 # GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Grave), 0x0314, 0x03b7, 0, 0}, 0x1f93 }, // U1F93 # GREEK SMALL LETTER ETA WITH DASIA AND VARIA AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Grave), 0x0314, 0x03c9, 0, 0}, 0x1fa3 }, // U1FA3 # GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Grave), 0x03b1, 0, 0, 0}, 0x1fb2 }, // U1FB2 # GREEK SMALL LETTER ALPHA WITH VARIA AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Grave), 0x03b7, 0, 0, 0}, 0x1fc2 }, // U1FC2 # GREEK SMALL LETTER ETA WITH VARIA AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Grave), 0x03c9, 0, 0, 0}, 0x1ff2 }, // U1FF2 # GREEK SMALL LETTER OMEGA WITH VARIA AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Grave), 0x1f00, 0, 0, 0}, 0x1f82 }, // U1F82 # GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Grave), 0x1f01, 0, 0, 0}, 0x1f83 }, // U1F83 # GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Grave), 0x1f08, 0, 0, 0}, 0x1f8a }, // U1F8A # GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA AND PROSGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Grave), 0x1f09, 0, 0, 0}, 0x1f8b }, // U1F8B # GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA AND PROSGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Grave), 0x1f20, 0, 0, 0}, 0x1f92 }, // U1F92 # GREEK SMALL LETTER ETA WITH PSILI AND VARIA AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Grave), 0x1f21, 0, 0, 0}, 0x1f93 }, // U1F93 # GREEK SMALL LETTER ETA WITH DASIA AND VARIA AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Grave), 0x1f28, 0, 0, 0}, 0x1f9a }, // U1F9A # GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA AND PROSGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Grave), 0x1f29, 0, 0, 0}, 0x1f9b }, // U1F9B # GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA AND PROSGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Grave), 0x1f60, 0, 0, 0}, 0x1fa2 }, // U1FA2 # GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Grave), 0x1f61, 0, 0, 0}, 0x1fa3 }, // U1FA3 # GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Grave), 0x1f68, 0, 0, 0}, 0x1faa }, // U1FAA # GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA AND PROSGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Grave), 0x1f69, 0, 0, 0}, 0x1fab }, // U1FAB # GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA AND PROSGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Grave), UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0391, 0}, 0x1f8b }, // U1F8B # GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA AND PROSGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Grave), UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0397, 0}, 0x1f9b }, // U1F9B # GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA AND PROSGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Grave), UNITIZE(Qt::Key_Multi_key), 0x0028, 0x03a9, 0}, 0x1fab }, // U1FAB # GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA AND PROSGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Grave), UNITIZE(Qt::Key_Multi_key), 0x0028, 0x03b1, 0}, 0x1f83 }, // U1F83 # GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Grave), UNITIZE(Qt::Key_Multi_key), 0x0028, 0x03b7, 0}, 0x1f93 }, // U1F93 # GREEK SMALL LETTER ETA WITH DASIA AND VARIA AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Grave), UNITIZE(Qt::Key_Multi_key), 0x0028, 0x03c9, 0}, 0x1fa3 }, // U1FA3 # GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Grave), UNITIZE(Qt::Key_Multi_key), 0x0029, 0x0391, 0}, 0x1f8a }, // U1F8A # GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA AND PROSGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Grave), UNITIZE(Qt::Key_Multi_key), 0x0029, 0x0397, 0}, 0x1f9a }, // U1F9A # GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA AND PROSGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Grave), UNITIZE(Qt::Key_Multi_key), 0x0029, 0x03a9, 0}, 0x1faa }, // U1FAA # GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA AND PROSGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Grave), UNITIZE(Qt::Key_Multi_key), 0x0029, 0x03b1, 0}, 0x1f82 }, // U1F82 # GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Grave), UNITIZE(Qt::Key_Multi_key), 0x0029, 0x03b7, 0}, 0x1f92 }, // U1F92 # GREEK SMALL LETTER ETA WITH PSILI AND VARIA AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Grave), UNITIZE(Qt::Key_Multi_key), 0x0029, 0x03c9, 0}, 0x1fa2 }, // U1FA2 # GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Acute), 0x0313, 0x0391, 0, 0}, 0x1f8c }, // U1F8C # GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA AND PROSGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Acute), 0x0313, 0x0397, 0, 0}, 0x1f9c }, // U1F9C # GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA AND PROSGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Acute), 0x0313, 0x03a9, 0, 0}, 0x1fac }, // U1FAC # GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA AND PROSGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Acute), 0x0313, 0x03b1, 0, 0}, 0x1f84 }, // U1F84 # GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Acute), 0x0313, 0x03b7, 0, 0}, 0x1f94 }, // U1F94 # GREEK SMALL LETTER ETA WITH PSILI AND OXIA AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Acute), 0x0313, 0x03c9, 0, 0}, 0x1fa4 }, // U1FA4 # GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Acute), 0x0314, 0x0391, 0, 0}, 0x1f8d }, // U1F8D # GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA AND PROSGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Acute), 0x0314, 0x0397, 0, 0}, 0x1f9d }, // U1F9D # GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA AND PROSGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Acute), 0x0314, 0x03a9, 0, 0}, 0x1fad }, // U1FAD # GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA AND PROSGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Acute), 0x0314, 0x03b1, 0, 0}, 0x1f85 }, // U1F85 # GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Acute), 0x0314, 0x03b7, 0, 0}, 0x1f95 }, // U1F95 # GREEK SMALL LETTER ETA WITH DASIA AND OXIA AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Acute), 0x0314, 0x03c9, 0, 0}, 0x1fa5 }, // U1FA5 # GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Acute), 0x03b1, 0, 0, 0}, 0x1fb4 }, // U1FB4 # GREEK SMALL LETTER ALPHA WITH OXIA AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Acute), 0x03b7, 0, 0, 0}, 0x1fc4 }, // U1FC4 # GREEK SMALL LETTER ETA WITH OXIA AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Acute), 0x03c9, 0, 0, 0}, 0x1ff4 }, // U1FF4 # GREEK SMALL LETTER OMEGA WITH OXIA AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Acute), 0x1f00, 0, 0, 0}, 0x1f84 }, // U1F84 # GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Acute), 0x1f01, 0, 0, 0}, 0x1f85 }, // U1F85 # GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Acute), 0x1f08, 0, 0, 0}, 0x1f8c }, // U1F8C # GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA AND PROSGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Acute), 0x1f09, 0, 0, 0}, 0x1f8d }, // U1F8D # GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA AND PROSGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Acute), 0x1f20, 0, 0, 0}, 0x1f94 }, // U1F94 # GREEK SMALL LETTER ETA WITH PSILI AND OXIA AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Acute), 0x1f21, 0, 0, 0}, 0x1f95 }, // U1F95 # GREEK SMALL LETTER ETA WITH DASIA AND OXIA AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Acute), 0x1f28, 0, 0, 0}, 0x1f9c }, // U1F9C # GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA AND PROSGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Acute), 0x1f29, 0, 0, 0}, 0x1f9d }, // U1F9D # GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA AND PROSGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Acute), 0x1f60, 0, 0, 0}, 0x1fa4 }, // U1FA4 # GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Acute), 0x1f61, 0, 0, 0}, 0x1fa5 }, // U1FA5 # GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Acute), 0x1f68, 0, 0, 0}, 0x1fac }, // U1FAC # GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA AND PROSGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Acute), 0x1f69, 0, 0, 0}, 0x1fad }, // U1FAD # GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA AND PROSGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0391, 0}, 0x1f8d }, // U1F8D # GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA AND PROSGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0397, 0}, 0x1f9d }, // U1F9D # GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA AND PROSGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Multi_key), 0x0028, 0x03a9, 0}, 0x1fad }, // U1FAD # GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA AND PROSGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Multi_key), 0x0028, 0x03b1, 0}, 0x1f85 }, // U1F85 # GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Multi_key), 0x0028, 0x03b7, 0}, 0x1f95 }, // U1F95 # GREEK SMALL LETTER ETA WITH DASIA AND OXIA AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Multi_key), 0x0028, 0x03c9, 0}, 0x1fa5 }, // U1FA5 # GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Multi_key), 0x0029, 0x0391, 0}, 0x1f8c }, // U1F8C # GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA AND PROSGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Multi_key), 0x0029, 0x0397, 0}, 0x1f9c }, // U1F9C # GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA AND PROSGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Multi_key), 0x0029, 0x03a9, 0}, 0x1fac }, // U1FAC # GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA AND PROSGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Multi_key), 0x0029, 0x03b1, 0}, 0x1f84 }, // U1F84 # GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Multi_key), 0x0029, 0x03b7, 0}, 0x1f94 }, // U1F94 # GREEK SMALL LETTER ETA WITH PSILI AND OXIA AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Multi_key), 0x0029, 0x03c9, 0}, 0x1fa4 }, // U1FA4 # GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Tilde), 0x0313, 0x0391, 0, 0}, 0x1f8e }, // U1F8E # GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Tilde), 0x0313, 0x0397, 0, 0}, 0x1f9e }, // U1F9E # GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Tilde), 0x0313, 0x03a9, 0, 0}, 0x1fae }, // U1FAE # GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Tilde), 0x0313, 0x03b1, 0, 0}, 0x1f86 }, // U1F86 # GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Tilde), 0x0313, 0x03b7, 0, 0}, 0x1f96 }, // U1F96 # GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Tilde), 0x0313, 0x03c9, 0, 0}, 0x1fa6 }, // U1FA6 # GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Tilde), 0x0314, 0x0391, 0, 0}, 0x1f8f }, // U1F8F # GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Tilde), 0x0314, 0x0397, 0, 0}, 0x1f9f }, // U1F9F # GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Tilde), 0x0314, 0x03a9, 0, 0}, 0x1faf }, // U1FAF # GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Tilde), 0x0314, 0x03b1, 0, 0}, 0x1f87 }, // U1F87 # GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Tilde), 0x0314, 0x03b7, 0, 0}, 0x1f97 }, // U1F97 # GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Tilde), 0x0314, 0x03c9, 0, 0}, 0x1fa7 }, // U1FA7 # GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Tilde), 0x03b1, 0, 0, 0}, 0x1fb7 }, // U1FB7 # GREEK SMALL LETTER ALPHA WITH PERISPOMENI AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Tilde), 0x03b7, 0, 0, 0}, 0x1fc7 }, // U1FC7 # GREEK SMALL LETTER ETA WITH PERISPOMENI AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Tilde), 0x03c9, 0, 0, 0}, 0x1ff7 }, // U1FF7 # GREEK SMALL LETTER OMEGA WITH PERISPOMENI AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Tilde), 0x1f00, 0, 0, 0}, 0x1f86 }, // U1F86 # GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Tilde), 0x1f01, 0, 0, 0}, 0x1f87 }, // U1F87 # GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Tilde), 0x1f08, 0, 0, 0}, 0x1f8e }, // U1F8E # GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Tilde), 0x1f09, 0, 0, 0}, 0x1f8f }, // U1F8F # GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Tilde), 0x1f20, 0, 0, 0}, 0x1f96 }, // U1F96 # GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Tilde), 0x1f21, 0, 0, 0}, 0x1f97 }, // U1F97 # GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Tilde), 0x1f28, 0, 0, 0}, 0x1f9e }, // U1F9E # GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Tilde), 0x1f29, 0, 0, 0}, 0x1f9f }, // U1F9F # GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Tilde), 0x1f60, 0, 0, 0}, 0x1fa6 }, // U1FA6 # GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Tilde), 0x1f61, 0, 0, 0}, 0x1fa7 }, // U1FA7 # GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Tilde), 0x1f68, 0, 0, 0}, 0x1fae }, // U1FAE # GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Tilde), 0x1f69, 0, 0, 0}, 0x1faf }, // U1FAF # GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Tilde), UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0391, 0}, 0x1f8f }, // U1F8F # GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Tilde), UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0397, 0}, 0x1f9f }, // U1F9F # GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Tilde), UNITIZE(Qt::Key_Multi_key), 0x0028, 0x03a9, 0}, 0x1faf }, // U1FAF # GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Tilde), UNITIZE(Qt::Key_Multi_key), 0x0028, 0x03b1, 0}, 0x1f87 }, // U1F87 # GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Tilde), UNITIZE(Qt::Key_Multi_key), 0x0028, 0x03b7, 0}, 0x1f97 }, // U1F97 # GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Tilde), UNITIZE(Qt::Key_Multi_key), 0x0028, 0x03c9, 0}, 0x1fa7 }, // U1FA7 # GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Tilde), UNITIZE(Qt::Key_Multi_key), 0x0029, 0x0391, 0}, 0x1f8e }, // U1F8E # GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Tilde), UNITIZE(Qt::Key_Multi_key), 0x0029, 0x0397, 0}, 0x1f9e }, // U1F9E # GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Tilde), UNITIZE(Qt::Key_Multi_key), 0x0029, 0x03a9, 0}, 0x1fae }, // U1FAE # GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Tilde), UNITIZE(Qt::Key_Multi_key), 0x0029, 0x03b1, 0}, 0x1f86 }, // U1F86 # GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Tilde), UNITIZE(Qt::Key_Multi_key), 0x0029, 0x03b7, 0}, 0x1f96 }, // U1F96 # GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Tilde), UNITIZE(Qt::Key_Multi_key), 0x0029, 0x03c9, 0}, 0x1fa6 }, // U1FA6 # GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI
++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Iota), 0, 0, 0, 0}, 0x037a }, // U37a
++// /* broken */ { {UNITIZE(Qt::Key_Dead_Iota), dead_space, 0, 0, 0, 0}, 0x037a }, // U37a
++ { {UNITIZE(Qt::Key_Dead_Voiced_Sound), 0x3046, 0, 0, 0, 0}, 0x3094 }, // U3094 # HIRAGANA LETTER VU
++ { {UNITIZE(Qt::Key_Dead_Voiced_Sound), 0x304b, 0, 0, 0, 0}, 0x304c }, // U304C # HIRAGANA LETTER GA
++ { {UNITIZE(Qt::Key_Dead_Voiced_Sound), 0x304d, 0, 0, 0, 0}, 0x304e }, // U304E # HIRAGANA LETTER GI
++ { {UNITIZE(Qt::Key_Dead_Voiced_Sound), 0x304f, 0, 0, 0, 0}, 0x3050 }, // U3050 # HIRAGANA LETTER GU
++ { {UNITIZE(Qt::Key_Dead_Voiced_Sound), 0x3051, 0, 0, 0, 0}, 0x3052 }, // U3052 # HIRAGANA LETTER GE
++ { {UNITIZE(Qt::Key_Dead_Voiced_Sound), 0x3053, 0, 0, 0, 0}, 0x3054 }, // U3054 # HIRAGANA LETTER GO
++ { {UNITIZE(Qt::Key_Dead_Voiced_Sound), 0x3055, 0, 0, 0, 0}, 0x3056 }, // U3056 # HIRAGANA LETTER ZA
++ { {UNITIZE(Qt::Key_Dead_Voiced_Sound), 0x3057, 0, 0, 0, 0}, 0x3058 }, // U3058 # HIRAGANA LETTER ZI
++ { {UNITIZE(Qt::Key_Dead_Voiced_Sound), 0x3059, 0, 0, 0, 0}, 0x305a }, // U305A # HIRAGANA LETTER ZU
++ { {UNITIZE(Qt::Key_Dead_Voiced_Sound), 0x305b, 0, 0, 0, 0}, 0x305c }, // U305C # HIRAGANA LETTER ZE
++ { {UNITIZE(Qt::Key_Dead_Voiced_Sound), 0x305d, 0, 0, 0, 0}, 0x305e }, // U305E # HIRAGANA LETTER ZO
++ { {UNITIZE(Qt::Key_Dead_Voiced_Sound), 0x305f, 0, 0, 0, 0}, 0x3060 }, // U3060 # HIRAGANA LETTER DA
++ { {UNITIZE(Qt::Key_Dead_Voiced_Sound), 0x3061, 0, 0, 0, 0}, 0x3062 }, // U3062 # HIRAGANA LETTER DI
++ { {UNITIZE(Qt::Key_Dead_Voiced_Sound), 0x3064, 0, 0, 0, 0}, 0x3065 }, // U3065 # HIRAGANA LETTER DU
++ { {UNITIZE(Qt::Key_Dead_Voiced_Sound), 0x3066, 0, 0, 0, 0}, 0x3067 }, // U3067 # HIRAGANA LETTER DE
++ { {UNITIZE(Qt::Key_Dead_Voiced_Sound), 0x3068, 0, 0, 0, 0}, 0x3069 }, // U3069 # HIRAGANA LETTER DO
++ { {UNITIZE(Qt::Key_Dead_Voiced_Sound), 0x306f, 0, 0, 0, 0}, 0x3070 }, // U3070 # HIRAGANA LETTER BA
++ { {UNITIZE(Qt::Key_Dead_Voiced_Sound), 0x3072, 0, 0, 0, 0}, 0x3073 }, // U3073 # HIRAGANA LETTER BI
++ { {UNITIZE(Qt::Key_Dead_Voiced_Sound), 0x3075, 0, 0, 0, 0}, 0x3076 }, // U3076 # HIRAGANA LETTER BU
++ { {UNITIZE(Qt::Key_Dead_Voiced_Sound), 0x3078, 0, 0, 0, 0}, 0x3079 }, // U3079 # HIRAGANA LETTER BE
++ { {UNITIZE(Qt::Key_Dead_Voiced_Sound), 0x307b, 0, 0, 0, 0}, 0x307c }, // U307C # HIRAGANA LETTER BO
++ { {UNITIZE(Qt::Key_Dead_Voiced_Sound), 0x309d, 0, 0, 0, 0}, 0x309e }, // U309E # HIRAGANA VOICED ITERATION MARK
++ { {UNITIZE(Qt::Key_Dead_Voiced_Sound), 0x30a6, 0, 0, 0, 0}, 0x30f4 }, // U30F4 # KATAKANA LETTER VU
++ { {UNITIZE(Qt::Key_Dead_Voiced_Sound), 0x30ab, 0, 0, 0, 0}, 0x30ac }, // U30AC # KATAKANA LETTER GA
++ { {UNITIZE(Qt::Key_Dead_Voiced_Sound), 0x30ad, 0, 0, 0, 0}, 0x30ae }, // U30AE # KATAKANA LETTER GI
++ { {UNITIZE(Qt::Key_Dead_Voiced_Sound), 0x30af, 0, 0, 0, 0}, 0x30b0 }, // U30B0 # KATAKANA LETTER GU
++ { {UNITIZE(Qt::Key_Dead_Voiced_Sound), 0x30b1, 0, 0, 0, 0}, 0x30b2 }, // U30B2 # KATAKANA LETTER GE
++ { {UNITIZE(Qt::Key_Dead_Voiced_Sound), 0x30b3, 0, 0, 0, 0}, 0x30b4 }, // U30B4 # KATAKANA LETTER GO
++ { {UNITIZE(Qt::Key_Dead_Voiced_Sound), 0x30b5, 0, 0, 0, 0}, 0x30b6 }, // U30B6 # KATAKANA LETTER ZA
++ { {UNITIZE(Qt::Key_Dead_Voiced_Sound), 0x30b7, 0, 0, 0, 0}, 0x30b8 }, // U30B8 # KATAKANA LETTER ZI
++ { {UNITIZE(Qt::Key_Dead_Voiced_Sound), 0x30b9, 0, 0, 0, 0}, 0x30ba }, // U30BA # KATAKANA LETTER ZU
++ { {UNITIZE(Qt::Key_Dead_Voiced_Sound), 0x30bb, 0, 0, 0, 0}, 0x30bc }, // U30BC # KATAKANA LETTER ZE
++ { {UNITIZE(Qt::Key_Dead_Voiced_Sound), 0x30bd, 0, 0, 0, 0}, 0x30be }, // U30BE # KATAKANA LETTER ZO
++ { {UNITIZE(Qt::Key_Dead_Voiced_Sound), 0x30bf, 0, 0, 0, 0}, 0x30c0 }, // U30C0 # KATAKANA LETTER DA
++ { {UNITIZE(Qt::Key_Dead_Voiced_Sound), 0x30c1, 0, 0, 0, 0}, 0x30c2 }, // U30C2 # KATAKANA LETTER DI
++ { {UNITIZE(Qt::Key_Dead_Voiced_Sound), 0x30c4, 0, 0, 0, 0}, 0x30c5 }, // U30C5 # KATAKANA LETTER DU
++ { {UNITIZE(Qt::Key_Dead_Voiced_Sound), 0x30c6, 0, 0, 0, 0}, 0x30c7 }, // U30C7 # KATAKANA LETTER DE
++ { {UNITIZE(Qt::Key_Dead_Voiced_Sound), 0x30c8, 0, 0, 0, 0}, 0x30c9 }, // U30C9 # KATAKANA LETTER DO
++ { {UNITIZE(Qt::Key_Dead_Voiced_Sound), 0x30cf, 0, 0, 0, 0}, 0x30d0 }, // U30D0 # KATAKANA LETTER BA
++ { {UNITIZE(Qt::Key_Dead_Voiced_Sound), 0x30d2, 0, 0, 0, 0}, 0x30d3 }, // U30D3 # KATAKANA LETTER BI
++ { {UNITIZE(Qt::Key_Dead_Voiced_Sound), 0x30d5, 0, 0, 0, 0}, 0x30d6 }, // U30D6 # KATAKANA LETTER BU
++ { {UNITIZE(Qt::Key_Dead_Voiced_Sound), 0x30d8, 0, 0, 0, 0}, 0x30d9 }, // U30D9 # KATAKANA LETTER BE
++ { {UNITIZE(Qt::Key_Dead_Voiced_Sound), 0x30db, 0, 0, 0, 0}, 0x30dc }, // U30DC # KATAKANA LETTER BO
++ { {UNITIZE(Qt::Key_Dead_Voiced_Sound), 0x30ef, 0, 0, 0, 0}, 0x30f7 }, // U30F7 # KATAKANA LETTER VA
++ { {UNITIZE(Qt::Key_Dead_Voiced_Sound), 0x30f0, 0, 0, 0, 0}, 0x30f8 }, // U30F8 # KATAKANA LETTER VI
++ { {UNITIZE(Qt::Key_Dead_Voiced_Sound), 0x30f1, 0, 0, 0, 0}, 0x30f9 }, // U30F9 # KATAKANA LETTER VE
++ { {UNITIZE(Qt::Key_Dead_Voiced_Sound), 0x30f2, 0, 0, 0, 0}, 0x30fa }, // U30FA # KATAKANA LETTER VO
++ { {UNITIZE(Qt::Key_Dead_Voiced_Sound), 0x30fd, 0, 0, 0, 0}, 0x30fe }, // U30FE # KATAKANA VOICED ITERATION MARK
++ { {UNITIZE(Qt::Key_Dead_Semivoiced_Sound), 0x306f, 0, 0, 0, 0}, 0x3071 }, // U3071 # HIRAGANA LETTER PA
++ { {UNITIZE(Qt::Key_Dead_Semivoiced_Sound), 0x3072, 0, 0, 0, 0}, 0x3074 }, // U3074 # HIRAGANA LETTER PI
++ { {UNITIZE(Qt::Key_Dead_Semivoiced_Sound), 0x3075, 0, 0, 0, 0}, 0x3077 }, // U3077 # HIRAGANA LETTER PU
++ { {UNITIZE(Qt::Key_Dead_Semivoiced_Sound), 0x3078, 0, 0, 0, 0}, 0x307a }, // U307A # HIRAGANA LETTER PE
++ { {UNITIZE(Qt::Key_Dead_Semivoiced_Sound), 0x307b, 0, 0, 0, 0}, 0x307d }, // U307D # HIRAGANA LETTER PO
++ { {UNITIZE(Qt::Key_Dead_Semivoiced_Sound), 0x30cf, 0, 0, 0, 0}, 0x30d1 }, // U30D1 # KATAKANA LETTER PA
++ { {UNITIZE(Qt::Key_Dead_Semivoiced_Sound), 0x30d2, 0, 0, 0, 0}, 0x30d4 }, // U30D4 # KATAKANA LETTER PI
++ { {UNITIZE(Qt::Key_Dead_Semivoiced_Sound), 0x30d5, 0, 0, 0, 0}, 0x30d7 }, // U30D7 # KATAKANA LETTER PU
++ { {UNITIZE(Qt::Key_Dead_Semivoiced_Sound), 0x30d8, 0, 0, 0, 0}, 0x30da }, // U30DA # KATAKANA LETTER PE
++ { {UNITIZE(Qt::Key_Dead_Semivoiced_Sound), 0x30db, 0, 0, 0, 0}, 0x30dd }, // U30DD # KATAKANA LETTER PO
++// /* broken */ { {UNITIZE(Qt::Key_Dead_Belowdot), 0x0000, 0, 0, 0, 0}, 0x1ee2 }, // U1EE2 # LATIN CAPITAL LETTER O WITH HORN AND DOT BELOW
++// /* broken */ { {UNITIZE(Qt::Key_Dead_Belowdot), 0x0000, 0, 0, 0, 0}, 0x1ef1 }, // U1EF1 # LATIN SMALL LETTER U WITH HORN AND DOT BELOW
++// /* broken */ { {UNITIZE(Qt::Key_Dead_Belowdot), 0x0000, 0, 0, 0, 0}, 0x1ee3 }, // U1EE3 # LATIN SMALL LETTER O WITH HORN AND DOT BELOW
++// /* broken */ { {UNITIZE(Qt::Key_Dead_Belowdot), 0x0000, 0, 0, 0, 0}, 0x1ef0 }, // U1EF0 # LATIN CAPITAL LETTER U WITH HORN AND DOT BELOW
++ { {UNITIZE(Qt::Key_Dead_Belowdot), 0x0041, 0, 0, 0, 0}, 0x1ea0 }, // U1EA0 # LATIN CAPITAL LETTER A WITH DOT BELOW
++ { {UNITIZE(Qt::Key_Dead_Belowdot), 0x0042, 0, 0, 0, 0}, 0x1e04 }, // U1E04 # LATIN CAPITAL LETTER B WITH DOT BELOW
++ { {UNITIZE(Qt::Key_Dead_Belowdot), 0x0044, 0, 0, 0, 0}, 0x1e0c }, // U1E0C # LATIN CAPITAL LETTER D WITH DOT BELOW
++ { {UNITIZE(Qt::Key_Dead_Belowdot), 0x0045, 0, 0, 0, 0}, 0x1eb8 }, // U1EB8 # LATIN CAPITAL LETTER E WITH DOT BELOW
++ { {UNITIZE(Qt::Key_Dead_Belowdot), 0x0048, 0, 0, 0, 0}, 0x1e24 }, // U1E24 # LATIN CAPITAL LETTER H WITH DOT BELOW
++ { {UNITIZE(Qt::Key_Dead_Belowdot), 0x0049, 0, 0, 0, 0}, 0x1eca }, // U1ECA # LATIN CAPITAL LETTER I WITH DOT BELOW
++ { {UNITIZE(Qt::Key_Dead_Belowdot), 0x004b, 0, 0, 0, 0}, 0x1e32 }, // U1E32 # LATIN CAPITAL LETTER K WITH DOT BELOW
++ { {UNITIZE(Qt::Key_Dead_Belowdot), 0x004c, 0, 0, 0, 0}, 0x1e36 }, // U1E36 # LATIN CAPITAL LETTER L WITH DOT BELOW
++ { {UNITIZE(Qt::Key_Dead_Belowdot), 0x004d, 0, 0, 0, 0}, 0x1e42 }, // U1E42 # LATIN CAPITAL LETTER M WITH DOT BELOW
++ { {UNITIZE(Qt::Key_Dead_Belowdot), 0x004e, 0, 0, 0, 0}, 0x1e46 }, // U1E46 # LATIN CAPITAL LETTER N WITH DOT BELOW
++ { {UNITIZE(Qt::Key_Dead_Belowdot), 0x004f, 0, 0, 0, 0}, 0x1ecc }, // U1ECC # LATIN CAPITAL LETTER O WITH DOT BELOW
++ { {UNITIZE(Qt::Key_Dead_Belowdot), 0x0052, 0, 0, 0, 0}, 0x1e5a }, // U1E5A # LATIN CAPITAL LETTER R WITH DOT BELOW
++ { {UNITIZE(Qt::Key_Dead_Belowdot), 0x0053, 0, 0, 0, 0}, 0x1e62 }, // U1E62 # LATIN CAPITAL LETTER S WITH DOT BELOW
++ { {UNITIZE(Qt::Key_Dead_Belowdot), 0x0054, 0, 0, 0, 0}, 0x1e6c }, // U1E6C # LATIN CAPITAL LETTER T WITH DOT BELOW
++ { {UNITIZE(Qt::Key_Dead_Belowdot), 0x0055, 0, 0, 0, 0}, 0x1ee4 }, // U1EE4 # LATIN CAPITAL LETTER U WITH DOT BELOW
++ { {UNITIZE(Qt::Key_Dead_Belowdot), 0x0056, 0, 0, 0, 0}, 0x1e7e }, // U1E7E # LATIN CAPITAL LETTER V WITH DOT BELOW
++ { {UNITIZE(Qt::Key_Dead_Belowdot), 0x0057, 0, 0, 0, 0}, 0x1e88 }, // U1E88 # LATIN CAPITAL LETTER W WITH DOT BELOW
++ { {UNITIZE(Qt::Key_Dead_Belowdot), 0x0059, 0, 0, 0, 0}, 0x1ef4 }, // U1EF4 # LATIN CAPITAL LETTER Y WITH DOT BELOW
++ { {UNITIZE(Qt::Key_Dead_Belowdot), 0x005a, 0, 0, 0, 0}, 0x1e92 }, // U1E92 # LATIN CAPITAL LETTER Z WITH DOT BELOW
++ { {UNITIZE(Qt::Key_Dead_Belowdot), 0x0061, 0, 0, 0, 0}, 0x1ea1 }, // U1EA1 # LATIN SMALL LETTER A WITH DOT BELOW
++ { {UNITIZE(Qt::Key_Dead_Belowdot), 0x0062, 0, 0, 0, 0}, 0x1e05 }, // U1E05 # LATIN SMALL LETTER B WITH DOT BELOW
++ { {UNITIZE(Qt::Key_Dead_Belowdot), 0x0064, 0, 0, 0, 0}, 0x1e0d }, // U1E0D # LATIN SMALL LETTER D WITH DOT BELOW
++ { {UNITIZE(Qt::Key_Dead_Belowdot), 0x0065, 0, 0, 0, 0}, 0x1eb9 }, // U1EB9 # LATIN SMALL LETTER E WITH DOT BELOW
++ { {UNITIZE(Qt::Key_Dead_Belowdot), 0x0068, 0, 0, 0, 0}, 0x1e25 }, // U1E25 # LATIN SMALL LETTER H WITH DOT BELOW
++ { {UNITIZE(Qt::Key_Dead_Belowdot), 0x0069, 0, 0, 0, 0}, 0x1ecb }, // U1ECB # LATIN SMALL LETTER I WITH DOT BELOW
++ { {UNITIZE(Qt::Key_Dead_Belowdot), 0x006b, 0, 0, 0, 0}, 0x1e33 }, // U1E33 # LATIN SMALL LETTER K WITH DOT BELOW
++ { {UNITIZE(Qt::Key_Dead_Belowdot), 0x006c, 0, 0, 0, 0}, 0x1e37 }, // U1E37 # LATIN SMALL LETTER L WITH DOT BELOW
++ { {UNITIZE(Qt::Key_Dead_Belowdot), 0x006d, 0, 0, 0, 0}, 0x1e43 }, // U1E43 # LATIN SMALL LETTER M WITH DOT BELOW
++ { {UNITIZE(Qt::Key_Dead_Belowdot), 0x006e, 0, 0, 0, 0}, 0x1e47 }, // U1E47 # LATIN SMALL LETTER N WITH DOT BELOW
++ { {UNITIZE(Qt::Key_Dead_Belowdot), 0x006f, 0, 0, 0, 0}, 0x1ecd }, // U1ECD # LATIN SMALL LETTER O WITH DOT BELOW
++ { {UNITIZE(Qt::Key_Dead_Belowdot), 0x0072, 0, 0, 0, 0}, 0x1e5b }, // U1E5B # LATIN SMALL LETTER R WITH DOT BELOW
++ { {UNITIZE(Qt::Key_Dead_Belowdot), 0x0073, 0, 0, 0, 0}, 0x1e63 }, // U1E63 # LATIN SMALL LETTER S WITH DOT BELOW
++ { {UNITIZE(Qt::Key_Dead_Belowdot), 0x0074, 0, 0, 0, 0}, 0x1e6d }, // U1E6D # LATIN SMALL LETTER T WITH DOT BELOW
++ { {UNITIZE(Qt::Key_Dead_Belowdot), 0x0075, 0, 0, 0, 0}, 0x1ee5 }, // U1EE5 # LATIN SMALL LETTER U WITH DOT BELOW
++ { {UNITIZE(Qt::Key_Dead_Belowdot), 0x0076, 0, 0, 0, 0}, 0x1e7f }, // U1E7F # LATIN SMALL LETTER V WITH DOT BELOW
++ { {UNITIZE(Qt::Key_Dead_Belowdot), 0x0077, 0, 0, 0, 0}, 0x1e89 }, // U1E89 # LATIN SMALL LETTER W WITH DOT BELOW
++ { {UNITIZE(Qt::Key_Dead_Belowdot), 0x0079, 0, 0, 0, 0}, 0x1ef5 }, // U1EF5 # LATIN SMALL LETTER Y WITH DOT BELOW
++ { {UNITIZE(Qt::Key_Dead_Belowdot), 0x007a, 0, 0, 0, 0}, 0x1e93 }, // U1E93 # LATIN SMALL LETTER Z WITH DOT BELOW
++ { {UNITIZE(Qt::Key_Dead_Belowdot), 0x00c2, 0, 0, 0, 0}, 0x1eac }, // U1EAC # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND DOT BELOW
++ { {UNITIZE(Qt::Key_Dead_Belowdot), 0x00ca, 0, 0, 0, 0}, 0x1ec6 }, // U1EC6 # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND DOT BELOW
++ { {UNITIZE(Qt::Key_Dead_Belowdot), 0x00d4, 0, 0, 0, 0}, 0x1ed8 }, // U1ED8 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND DOT BELOW
++ { {UNITIZE(Qt::Key_Dead_Belowdot), 0x00e2, 0, 0, 0, 0}, 0x1ead }, // U1EAD # LATIN SMALL LETTER A WITH CIRCUMFLEX AND DOT BELOW
++ { {UNITIZE(Qt::Key_Dead_Belowdot), 0x00ea, 0, 0, 0, 0}, 0x1ec7 }, // U1EC7 # LATIN SMALL LETTER E WITH CIRCUMFLEX AND DOT BELOW
++ { {UNITIZE(Qt::Key_Dead_Belowdot), 0x00f4, 0, 0, 0, 0}, 0x1ed9 }, // U1ED9 # LATIN SMALL LETTER O WITH CIRCUMFLEX AND DOT BELOW
++ { {UNITIZE(Qt::Key_Dead_Belowdot), 0x0102, 0, 0, 0, 0}, 0x1eb6 }, // U1EB6 # LATIN CAPITAL LETTER A WITH BREVE AND DOT BELOW
++ { {UNITIZE(Qt::Key_Dead_Belowdot), 0x0103, 0, 0, 0, 0}, 0x1eb7 }, // U1EB7 # LATIN SMALL LETTER A WITH BREVE AND DOT BELOW
++ { {UNITIZE(Qt::Key_Dead_Belowdot), 0x01A0, 0, 0, 0, 0}, 0x1ee2 }, // U1EE2 # LATIN CAPITAL LETTER O WITH HORN AND DOT BELOW
++ { {UNITIZE(Qt::Key_Dead_Belowdot), 0x01A1, 0, 0, 0, 0}, 0x1ee3 }, // U1EE3 # LATIN SMALL LETTER O WITH HORN AND DOT BELOW
++ { {UNITIZE(Qt::Key_Dead_Belowdot), 0x01AF, 0, 0, 0, 0}, 0x1ef0 }, // U1EF0 # LATIN CAPITAL LETTER U WITH HORN AND DOT BELOW
++ { {UNITIZE(Qt::Key_Dead_Belowdot), 0x01B0, 0, 0, 0, 0}, 0x1ef1 }, // U1EF1 # LATIN SMALL LETTER U WITH HORN AND DOT BELOW
++ { {UNITIZE(Qt::Key_Dead_Belowdot), UNITIZE(Qt::Key_Multi_key), 0x002b, 0x004f, 0, 0}, 0x1ee2 }, // U1EE2 # LATIN CAPITAL LETTER O WITH HORN AND DOT BELOW
++ { {UNITIZE(Qt::Key_Dead_Belowdot), UNITIZE(Qt::Key_Multi_key), 0x002b, 0x0055, 0, 0}, 0x1ef0 }, // U1EF0 # LATIN CAPITAL LETTER U WITH HORN AND DOT BELOW
++ { {UNITIZE(Qt::Key_Dead_Belowdot), UNITIZE(Qt::Key_Multi_key), 0x002b, 0x006f, 0, 0}, 0x1ee3 }, // U1EE3 # LATIN SMALL LETTER O WITH HORN AND DOT BELOW
++ { {UNITIZE(Qt::Key_Dead_Belowdot), UNITIZE(Qt::Key_Multi_key), 0x002b, 0x0075, 0, 0}, 0x1ef1 }, // U1EF1 # LATIN SMALL LETTER U WITH HORN AND DOT BELOW
++ { {UNITIZE(Qt::Key_Dead_Belowdot), UNITIZE(Qt::Key_Dead_Horn), 0x004f, 0, 0, 0}, 0x1ee2 }, // U1EE2 # LATIN CAPITAL LETTER O WITH HORN AND DOT BELOW
++ { {UNITIZE(Qt::Key_Dead_Belowdot), UNITIZE(Qt::Key_Dead_Horn), 0x0055, 0, 0, 0}, 0x1ef0 }, // U1EF0 # LATIN CAPITAL LETTER U WITH HORN AND DOT BELOW
++ { {UNITIZE(Qt::Key_Dead_Belowdot), UNITIZE(Qt::Key_Dead_Horn), 0x006f, 0, 0, 0}, 0x1ee3 }, // U1EE3 # LATIN SMALL LETTER O WITH HORN AND DOT BELOW
++ { {UNITIZE(Qt::Key_Dead_Belowdot), UNITIZE(Qt::Key_Dead_Horn), 0x0075, 0, 0, 0}, 0x1ef1 }, // U1EF1 # LATIN SMALL LETTER U WITH HORN AND DOT BELOW
++// /* broken */ { {UNITIZE(Qt::Key_Dead_Hook), 0x0000, 0, 0, 0, 0}, 0x1edf }, // U1EDF # LATIN SMALL LETTER O WITH HORN AND HOOK ABOVE
++// /* broken */ { {UNITIZE(Qt::Key_Dead_Hook), 0x0000, 0, 0, 0, 0}, 0x1eec }, // U1EEC # LATIN CAPITAL LETTER U WITH HORN AND HOOK ABOVE
++// /* broken */ { {UNITIZE(Qt::Key_Dead_Hook), 0x0000, 0, 0, 0, 0}, 0x1eed }, // U1EED # LATIN SMALL LETTER U WITH HORN AND HOOK ABOVE
++// /* broken */ { {UNITIZE(Qt::Key_Dead_Hook), 0x0000, 0, 0, 0, 0}, 0x1ede }, // U1EDE # LATIN CAPITAL LETTER O WITH HORN AND HOOK ABOVE
++ { {UNITIZE(Qt::Key_Dead_Hook), 0x0041, 0, 0, 0, 0}, 0x1ea2 }, // U1EA2 # LATIN CAPITAL LETTER A WITH HOOK ABOVE
++ { {UNITIZE(Qt::Key_Dead_Hook), 0x0045, 0, 0, 0, 0}, 0x1eba }, // U1EBA # LATIN CAPITAL LETTER E WITH HOOK ABOVE
++ { {UNITIZE(Qt::Key_Dead_Hook), 0x0049, 0, 0, 0, 0}, 0x1ec8 }, // U1EC8 # LATIN CAPITAL LETTER I WITH HOOK ABOVE
++ { {UNITIZE(Qt::Key_Dead_Hook), 0x004f, 0, 0, 0, 0}, 0x1ece }, // U1ECE # LATIN CAPITAL LETTER O WITH HOOK ABOVE
++ { {UNITIZE(Qt::Key_Dead_Hook), 0x0055, 0, 0, 0, 0}, 0x1ee6 }, // U1EE6 # LATIN CAPITAL LETTER U WITH HOOK ABOVE
++ { {UNITIZE(Qt::Key_Dead_Hook), 0x0059, 0, 0, 0, 0}, 0x1ef6 }, // U1EF6 # LATIN CAPITAL LETTER Y WITH HOOK ABOVE
++ { {UNITIZE(Qt::Key_Dead_Hook), 0x0061, 0, 0, 0, 0}, 0x1ea3 }, // U1EA3 # LATIN SMALL LETTER A WITH HOOK ABOVE
++ { {UNITIZE(Qt::Key_Dead_Hook), 0x0065, 0, 0, 0, 0}, 0x1ebb }, // U1EBB # LATIN SMALL LETTER E WITH HOOK ABOVE
++ { {UNITIZE(Qt::Key_Dead_Hook), 0x0069, 0, 0, 0, 0}, 0x1ec9 }, // U1EC9 # LATIN SMALL LETTER I WITH HOOK ABOVE
++ { {UNITIZE(Qt::Key_Dead_Hook), 0x006f, 0, 0, 0, 0}, 0x1ecf }, // U1ECF # LATIN SMALL LETTER O WITH HOOK ABOVE
++ { {UNITIZE(Qt::Key_Dead_Hook), 0x0075, 0, 0, 0, 0}, 0x1ee7 }, // U1EE7 # LATIN SMALL LETTER U WITH HOOK ABOVE
++ { {UNITIZE(Qt::Key_Dead_Hook), 0x0079, 0, 0, 0, 0}, 0x1ef7 }, // U1EF7 # LATIN SMALL LETTER Y WITH HOOK ABOVE
++ { {UNITIZE(Qt::Key_Dead_Hook), 0x00c2, 0, 0, 0, 0}, 0x1ea8 }, // U1EA8 # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE
++ { {UNITIZE(Qt::Key_Dead_Hook), 0x00ca, 0, 0, 0, 0}, 0x1ec2 }, // U1EC2 # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE
++ { {UNITIZE(Qt::Key_Dead_Hook), 0x00d4, 0, 0, 0, 0}, 0x1ed4 }, // U1ED4 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE
++ { {UNITIZE(Qt::Key_Dead_Hook), 0x00e2, 0, 0, 0, 0}, 0x1ea9 }, // U1EA9 # LATIN SMALL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE
++ { {UNITIZE(Qt::Key_Dead_Hook), 0x00ea, 0, 0, 0, 0}, 0x1ec3 }, // U1EC3 # LATIN SMALL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE
++ { {UNITIZE(Qt::Key_Dead_Hook), 0x00f4, 0, 0, 0, 0}, 0x1ed5 }, // U1ED5 # LATIN SMALL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE
++ { {UNITIZE(Qt::Key_Dead_Hook), 0x0102, 0, 0, 0, 0}, 0x1eb2 }, // U1EB2 # LATIN CAPITAL LETTER A WITH BREVE AND HOOK ABOVE
++ { {UNITIZE(Qt::Key_Dead_Hook), 0x0103, 0, 0, 0, 0}, 0x1eb3 }, // U1EB3 # LATIN SMALL LETTER A WITH BREVE AND HOOK ABOVE
++ { {UNITIZE(Qt::Key_Dead_Hook), 0x01A0, 0, 0, 0, 0}, 0x1ede }, // U1EDE # LATIN CAPITAL LETTER O WITH HORN AND HOOK ABOVE
++ { {UNITIZE(Qt::Key_Dead_Hook), 0x01A1, 0, 0, 0, 0}, 0x1edf }, // U1EDF # LATIN SMALL LETTER O WITH HORN AND HOOK ABOVE
++ { {UNITIZE(Qt::Key_Dead_Hook), 0x01AF, 0, 0, 0, 0}, 0x1eec }, // U1EEC # LATIN CAPITAL LETTER U WITH HORN AND HOOK ABOVE
++ { {UNITIZE(Qt::Key_Dead_Hook), 0x01B0, 0, 0, 0, 0}, 0x1eed }, // U1EED # LATIN SMALL LETTER U WITH HORN AND HOOK ABOVE
++ { {UNITIZE(Qt::Key_Dead_Hook), UNITIZE(Qt::Key_Multi_key), 0x002b, 0x004f, 0, 0}, 0x1ede }, // U1EDE # LATIN CAPITAL LETTER O WITH HORN AND HOOK ABOVE
++ { {UNITIZE(Qt::Key_Dead_Hook), UNITIZE(Qt::Key_Multi_key), 0x002b, 0x0055, 0, 0}, 0x1eec }, // U1EEC # LATIN CAPITAL LETTER U WITH HORN AND HOOK ABOVE
++ { {UNITIZE(Qt::Key_Dead_Hook), UNITIZE(Qt::Key_Multi_key), 0x002b, 0x006f, 0, 0}, 0x1edf }, // U1EDF # LATIN SMALL LETTER O WITH HORN AND HOOK ABOVE
++ { {UNITIZE(Qt::Key_Dead_Hook), UNITIZE(Qt::Key_Multi_key), 0x002b, 0x0075, 0, 0}, 0x1eed }, // U1EED # LATIN SMALL LETTER U WITH HORN AND HOOK ABOVE
++ { {UNITIZE(Qt::Key_Dead_Hook), UNITIZE(Qt::Key_Multi_key), 0x0055, 0x0041, 0, 0}, 0x1eb2 }, // U1EB2 # LATIN CAPITAL LETTER A WITH BREVE AND HOOK ABOVE
++ { {UNITIZE(Qt::Key_Dead_Hook), UNITIZE(Qt::Key_Multi_key), 0x0055, 0x0061, 0, 0}, 0x1eb3 }, // U1EB3 # LATIN SMALL LETTER A WITH BREVE AND HOOK ABOVE
++ { {UNITIZE(Qt::Key_Dead_Hook), UNITIZE(Qt::Key_Multi_key), 0x005e, 0x0041, 0, 0}, 0x1ea8 }, // U1EA8 # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE
++ { {UNITIZE(Qt::Key_Dead_Hook), UNITIZE(Qt::Key_Multi_key), 0x005e, 0x0045, 0, 0}, 0x1ec2 }, // U1EC2 # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE
++ { {UNITIZE(Qt::Key_Dead_Hook), UNITIZE(Qt::Key_Multi_key), 0x005e, 0x004f, 0, 0}, 0x1ed4 }, // U1ED4 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE
++ { {UNITIZE(Qt::Key_Dead_Hook), UNITIZE(Qt::Key_Multi_key), 0x005e, 0x0061, 0, 0}, 0x1ea9 }, // U1EA9 # LATIN SMALL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE
++ { {UNITIZE(Qt::Key_Dead_Hook), UNITIZE(Qt::Key_Multi_key), 0x005e, 0x0065, 0, 0}, 0x1ec3 }, // U1EC3 # LATIN SMALL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE
++ { {UNITIZE(Qt::Key_Dead_Hook), UNITIZE(Qt::Key_Multi_key), 0x005e, 0x006f, 0, 0}, 0x1ed5 }, // U1ED5 # LATIN SMALL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE
++ { {UNITIZE(Qt::Key_Dead_Hook), UNITIZE(Qt::Key_Multi_key), 0x0062, 0x0041, 0, 0}, 0x1eb2 }, // U1EB2 # LATIN CAPITAL LETTER A WITH BREVE AND HOOK ABOVE
++ { {UNITIZE(Qt::Key_Dead_Hook), UNITIZE(Qt::Key_Multi_key), 0x0062, 0x0061, 0, 0}, 0x1eb3 }, // U1EB3 # LATIN SMALL LETTER A WITH BREVE AND HOOK ABOVE
++ { {UNITIZE(Qt::Key_Dead_Hook), UNITIZE(Qt::Key_Dead_Circumflex), 0x0041, 0, 0, 0}, 0x1ea8 }, // U1EA8 # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE
++ { {UNITIZE(Qt::Key_Dead_Hook), UNITIZE(Qt::Key_Dead_Circumflex), 0x0045, 0, 0, 0}, 0x1ec2 }, // U1EC2 # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE
++ { {UNITIZE(Qt::Key_Dead_Hook), UNITIZE(Qt::Key_Dead_Circumflex), 0x004f, 0, 0, 0}, 0x1ed4 }, // U1ED4 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE
++ { {UNITIZE(Qt::Key_Dead_Hook), UNITIZE(Qt::Key_Dead_Circumflex), 0x0061, 0, 0, 0}, 0x1ea9 }, // U1EA9 # LATIN SMALL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE
++ { {UNITIZE(Qt::Key_Dead_Hook), UNITIZE(Qt::Key_Dead_Circumflex), 0x0065, 0, 0, 0}, 0x1ec3 }, // U1EC3 # LATIN SMALL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE
++ { {UNITIZE(Qt::Key_Dead_Hook), UNITIZE(Qt::Key_Dead_Circumflex), 0x006f, 0, 0, 0}, 0x1ed5 }, // U1ED5 # LATIN SMALL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE
++ { {UNITIZE(Qt::Key_Dead_Hook), UNITIZE(Qt::Key_Dead_Breve), 0x0041, 0, 0, 0}, 0x1eb2 }, // U1EB2 # LATIN CAPITAL LETTER A WITH BREVE AND HOOK ABOVE
++ { {UNITIZE(Qt::Key_Dead_Hook), UNITIZE(Qt::Key_Dead_Breve), 0x0061, 0, 0, 0}, 0x1eb3 }, // U1EB3 # LATIN SMALL LETTER A WITH BREVE AND HOOK ABOVE
++ { {UNITIZE(Qt::Key_Dead_Hook), UNITIZE(Qt::Key_Dead_Horn), 0x004f, 0, 0, 0}, 0x1ede }, // U1EDE # LATIN CAPITAL LETTER O WITH HORN AND HOOK ABOVE
++ { {UNITIZE(Qt::Key_Dead_Hook), UNITIZE(Qt::Key_Dead_Horn), 0x0055, 0, 0, 0}, 0x1eec }, // U1EEC # LATIN CAPITAL LETTER U WITH HORN AND HOOK ABOVE
++ { {UNITIZE(Qt::Key_Dead_Hook), UNITIZE(Qt::Key_Dead_Horn), 0x006f, 0, 0, 0}, 0x1edf }, // U1EDF # LATIN SMALL LETTER O WITH HORN AND HOOK ABOVE
++ { {UNITIZE(Qt::Key_Dead_Hook), UNITIZE(Qt::Key_Dead_Horn), 0x0075, 0, 0, 0}, 0x1eed }, // U1EED # LATIN SMALL LETTER U WITH HORN AND HOOK ABOVE
++ { {UNITIZE(Qt::Key_Dead_Horn), 0x004f, 0, 0, 0, 0}, 0x01a0 }, // U01A0 # LATIN CAPITAL LETTER O WITH HORN
++ { {UNITIZE(Qt::Key_Dead_Horn), 0x0055, 0, 0, 0, 0}, 0x01af }, // U01AF # LATIN CAPITAL LETTER U WITH HORN
++ { {UNITIZE(Qt::Key_Dead_Horn), 0x006f, 0, 0, 0, 0}, 0x01a1 }, // U01A1 # LATIN SMALL LETTER O WITH HORN
++ { {UNITIZE(Qt::Key_Dead_Horn), 0x0075, 0, 0, 0, 0}, 0x01b0 } // U01B0 # LATIN SMALL LETTER U WITH HORN
++};
++
++const QComposeTable QSimpleInputContext::defaultComposeTable = {
++ defaultTable,
++ ( sizeof(defaultTable) / sizeof(QComposeTableElement) )
++};
+--- plugins/src/inputmethods/simple/qsimpleinputcontext.cpp
++++ plugins/src/inputmethods/simple/qsimpleinputcontext.cpp
+@@ -0,0 +1,285 @@
++/****************************************************************************
++** $Id$
++**
++** Implementation of QSimpleInputContext class
++**
++** Copyright (C) 2004 immodule for Qt Project. All rights reserved.
++**
++** This file is written to contribute to Trolltech AS under their own
++** licence. You may use this file under your Qt license. Following
++** description is copied from their original file headers. Contact
++** immodule-qt@freedesktop.org if any conditions of this licensing are
++** not clear to you.
++**
++**
++** This file is part of the input method module of the Qt GUI Toolkit.
++**
++** This file may be distributed under the terms of the Q Public License
++** as defined by Trolltech AS of Norway and appearing in the file
++** LICENSE.QPL included in the packaging of this file.
++**
++** This file may be distributed and/or modified under the terms of the
++** GNU General Public License version 2 as published by the Free Software
++** Foundation and appearing in the file LICENSE.GPL included in the
++** packaging of this file.
++**
++** Licensees holding valid Qt Enterprise Edition or Qt Professional Edition
++** licenses may use this file in accordance with the Qt Commercial License
++** Agreement provided with the Software.
++**
++** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
++** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
++**
++** See http://www.trolltech.com/pricing.html or email sales@trolltech.com for
++** information about Qt Commercial License Agreements.
++** See http://www.trolltech.com/qpl/ for QPL licensing information.
++** See http://www.trolltech.com/gpl/ for GPL licensing information.
++**
++** Contact info@trolltech.com if any conditions of this licensing are
++** not clear to you.
++**
++**********************************************************************/
++
++#include "qsimpleinputcontext.h"
++
++#include <qnamespace.h>
++#include <qevent.h>
++#include <qglobal.h>
++#include <algorithm>
++
++static const int ignoreKeys[] = {
++ Qt::Key_Shift,
++ Qt::Key_Control,
++ Qt::Key_Meta,
++ Qt::Key_Alt,
++ Qt::Key_CapsLock,
++ Qt::Key_Super_L,
++ Qt::Key_Super_R,
++ Qt::Key_Hyper_L,
++ Qt::Key_Hyper_R,
++ Qt::Key_Mode_switch
++};
++
++static const int composingKeys[] = {
++ Qt::Key_Multi_key,
++ Qt::Key_Dead_Grave,
++ Qt::Key_Dead_Acute,
++ Qt::Key_Dead_Circumflex,
++ Qt::Key_Dead_Tilde,
++ Qt::Key_Dead_Macron,
++ Qt::Key_Dead_Breve,
++ Qt::Key_Dead_Abovedot,
++ Qt::Key_Dead_Diaeresis,
++ Qt::Key_Dead_Abovering,
++ Qt::Key_Dead_Doubleacute,
++ Qt::Key_Dead_Caron,
++ Qt::Key_Dead_Cedilla,
++ Qt::Key_Dead_Ogonek,
++ Qt::Key_Dead_Iota,
++ Qt::Key_Dead_Voiced_Sound,
++ Qt::Key_Dead_Semivoiced_Sound,
++ Qt::Key_Dead_Belowdot,
++ Qt::Key_Dead_Hook,
++ Qt::Key_Dead_Horn
++};
++
++class Cmp
++{
++public:
++ bool operator () (const QComposeTableElement &lhs, const QComposeTableElement &rhs) const {
++ for ( size_t i=0; i < QT_KEYSEQUENCE_MAX_LEN; i++ ) {
++ if ( lhs.keys[i] < rhs.keys[i] ) return TRUE;
++ else
++ if ( lhs.keys[i] > rhs.keys[i] ) return FALSE;
++ }
++ return FALSE;
++ }
++
++ bool operator () (const QComposeTableElement &lhs, const uint rhs[QT_KEYSEQUENCE_MAX_LEN]) const {
++ for ( size_t i=0; i < QT_KEYSEQUENCE_MAX_LEN; i++ ) {
++ if ( lhs.keys[i] < rhs[i] ) return TRUE;
++ else
++ if ( lhs.keys[i] > rhs[i] ) return FALSE;
++ }
++ return FALSE;
++ }
++};
++
++QSimpleInputContext::QSimpleInputContext()
++ : QInputContext()
++{
++ clearComposeBuffer();
++}
++
++QSimpleInputContext::~QSimpleInputContext()
++{
++ clearComposeBuffer();
++}
++
++bool QSimpleInputContext::filterEvent( const QEvent *event )
++{
++ if ( event->type() != QEvent::KeyPress )
++ return FALSE;
++
++ QKeyEvent *keyevent = (QKeyEvent *)event;
++ int keyval = keyevent->key();
++ int val = 0;
++
++ if ( isIgnoreKeys( keyval ) )
++ return FALSE;
++
++ if ( isComposingKeys( keyval ) ) {
++ // If composing keys are pressed, use keyval directly
++ val = UNITIZE( keyval );
++ } else {
++ QString text = keyevent->text();
++ if ( text.isEmpty() )
++ return FALSE;
++
++ // If not composing keys are pressed, use the character's unicode value
++ // NOTE : The contents of QKeyEvent::text() is restricted to
++ // only one character. See description of
++ // QInputContext::filterEvent() about key compression.
++ val = text[0].unicode();
++ qDebug( "str = %s", (const char*)keyevent->text().local8Bit() );
++ }
++
++ // Store value
++ int nCompose = 0;
++ while ( composeBuffer[nCompose] != 0 && nCompose < QT_KEYSEQUENCE_MAX_LEN )
++ nCompose++;
++
++ if ( nCompose == QT_KEYSEQUENCE_MAX_LEN ) {
++ clearComposeBuffer();
++ nCompose = 0;
++ }
++
++ composeBuffer[nCompose] = val;
++
++ // check sequence
++ if( checkComposeTable( composeBuffer, &defaultComposeTable ) )
++ return TRUE;
++
++ return FALSE;
++}
++
++void QSimpleInputContext::setFocus()
++{
++ qDebug( "QSimpleInputContext: %p->setFocus(), focusWidget()=%p",
++ this, focusWidget() );
++}
++
++void QSimpleInputContext::unsetFocus()
++{
++ qDebug( "QSimpleInputContext: %p->unsetFocus(), focusWidget()=%p",
++ this, focusWidget() );
++ reset();
++}
++
++void QSimpleInputContext::setMicroFocus( int x, int y, int w, int h, QFont *f )
++{
++}
++
++void QSimpleInputContext::mouseHandler( int x, QEvent::Type type,
++ Qt::ButtonState button,
++ Qt::ButtonState state )
++{
++ switch ( type ) {
++ case QEvent::MouseButtonPress:
++ case QEvent::MouseButtonRelease:
++ case QEvent::MouseButtonDblClick:
++ case QEvent::MouseMove:
++ qDebug( "QSimpleInputContext::mouseHandler: "
++ "x=%d, type=%d, button=%d, state=%d", x, type, button, state );
++ break;
++ default:
++ break;
++ }
++}
++
++
++void QSimpleInputContext::reset()
++{
++ clearComposeBuffer();
++ QInputContext::reset();
++}
++
++QString QSimpleInputContext::identifierName()
++{
++ return "simple";
++}
++
++QString QSimpleInputContext::language()
++{
++ return ""; // FIXME
++}
++
++bool QSimpleInputContext::isIgnoreKeys( int keyval )
++{
++ for ( uint i = 0; i < (sizeof(ignoreKeys)/sizeof(ignoreKeys[0])); i++ )
++ if ( keyval == ignoreKeys[i] )
++ return TRUE;
++
++ return FALSE;
++}
++
++bool QSimpleInputContext::isComposingKeys( int keyval )
++{
++ for ( uint i = 0; i < (sizeof(composingKeys)/sizeof(composingKeys[0])); i++ )
++ if ( keyval == composingKeys[i] )
++ return TRUE;
++
++ return FALSE;
++}
++
++bool QSimpleInputContext::checkComposeTable( uint* composeBuffer, const QComposeTable *composeTable )
++{
++ const QComposeTableElement *p = std::lower_bound( composeTable->data,
++ composeTable->data + composeTable->size,
++ composeBuffer,
++ Cmp() );
++
++ // no entries were found
++ if ( p == composeTable->data + composeTable->size ) {
++ qDebug( "no match" );
++ clearComposeBuffer();
++ return FALSE;
++ }
++
++ // check if compose buffer is matched
++ for ( int i=0; i < QT_KEYSEQUENCE_MAX_LEN; i++ ) {
++
++ // check if partial match
++ if ( composeBuffer[i] == 0 && p->keys[i] ) {
++ qDebug("partial match");
++ return TRUE;
++ }
++
++ if ( composeBuffer[i] != p->keys[i] ) {
++ qDebug("different entry");
++ clearComposeBuffer();
++ return i!=0;
++ }
++ }
++
++ qDebug("match exactly");
++
++ // match exactly
++ commitChar( p->value );
++ clearComposeBuffer();
++
++ return TRUE;
++}
++
++void QSimpleInputContext::commitChar( uint c )
++{
++ sendIMEvent( QEvent::IMStart );
++ sendIMEvent( QEvent::IMEnd, QString(QChar(c)) );
++}
++
++void QSimpleInputContext::clearComposeBuffer(void)
++{
++ for ( uint i=0; i < (sizeof(composeBuffer)/sizeof(int)); i++ )
++ composeBuffer[i] = 0;
++}
++
+--- plugins/src/inputmethods/simple/qsimpleinputcontext.h
++++ plugins/src/inputmethods/simple/qsimpleinputcontext.h
+@@ -0,0 +1,93 @@
++/****************************************************************************
++** $Id$
++**
++** Definition of QSimpleInputContext class
++**
++** Copyright (C) 2004 immodule for Qt Project. All rights reserved.
++**
++** This file is written to contribute to Trolltech AS under their own
++** licence. You may use this file under your Qt license. Following
++** description is copied from their original file headers. Contact
++** immodule-qt@freedesktop.org if any conditions of this licensing are
++** not clear to you.
++**
++**
++** This file is part of the input method module of the Qt GUI Toolkit.
++**
++** This file may be distributed under the terms of the Q Public License
++** as defined by Trolltech AS of Norway and appearing in the file
++** LICENSE.QPL included in the packaging of this file.
++**
++** This file may be distributed and/or modified under the terms of the
++** GNU General Public License version 2 as published by the Free Software
++** Foundation and appearing in the file LICENSE.GPL included in the
++** packaging of this file.
++**
++** Licensees holding valid Qt Enterprise Edition or Qt Professional Edition
++** licenses may use this file in accordance with the Qt Commercial License
++** Agreement provided with the Software.
++**
++** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
++** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
++**
++** See http://www.trolltech.com/pricing.html or email sales@trolltech.com for
++** information about Qt Commercial License Agreements.
++** See http://www.trolltech.com/qpl/ for QPL licensing information.
++** See http://www.trolltech.com/gpl/ for GPL licensing information.
++**
++** Contact info@trolltech.com if any conditions of this licensing are
++** not clear to you.
++**
++**********************************************************************/
++
++#ifndef QSIMPLEINPUT_CONTEXT_H
++#define QSIMPLEINPUT_CONTEXT_H
++
++#include <qinputcontext.h>
++#include <qnamespace.h>
++
++#define QT_KEYSEQUENCE_MAX_LEN 6
++#define UNITIZE(qkey) (0x02000000|qkey)
++
++struct QComposeTableElement {
++ uint keys[QT_KEYSEQUENCE_MAX_LEN];
++ uint value;
++};
++
++struct QComposeTable {
++ const QComposeTableElement *data;
++ uint size;
++};
++
++
++class QSimpleInputContext : public QInputContext {
++ Q_OBJECT
++public:
++ QSimpleInputContext();
++ ~QSimpleInputContext();
++
++ virtual QString identifierName();
++ virtual QString language();
++
++ virtual bool filterEvent( const QEvent *event );
++ virtual void reset();
++ virtual void setFocus();
++ virtual void unsetFocus();
++ virtual void setMicroFocus( int x, int y, int w, int h, QFont *f = 0 );
++ virtual void mouseHandler( int x, QEvent::Type type,
++ Qt::ButtonState button, Qt::ButtonState state );
++
++protected:
++ bool isIgnoreKeys(int keyval );
++ bool isComposingKeys( int keyval );
++ bool checkComposeTable( uint composeBuffer[], const QComposeTable *composeTable );
++ void commitChar( uint c );
++
++ void clearComposeBuffer(void);
++
++protected:
++ uint composeBuffer[QT_KEYSEQUENCE_MAX_LEN + 1];
++ static const QComposeTable defaultComposeTable;
++};
++
++#endif // QSIMPLEINPUT_CONTEXT_H
+--- plugins/src/inputmethods/simple/qsimpleinputcontextplugin.cpp
++++ plugins/src/inputmethods/simple/qsimpleinputcontextplugin.cpp
+@@ -0,0 +1,86 @@
++/****************************************************************************
++** $Id$
++**
++** Implementation of QSimpleInputContextPlugin class
++**
++** Copyright (C) 2004 immodule for Qt Project. All rights reserved.
++**
++** This file is written to contribute to Trolltech AS under their own
++** licence. You may use this file under your Qt license. Following
++** description is copied from their original file headers. Contact
++** immodule-qt@freedesktop.org if any conditions of this licensing are
++** not clear to you.
++**
++**
++** This file is part of the input method module of the Qt GUI Toolkit.
++**
++** This file may be distributed under the terms of the Q Public License
++** as defined by Trolltech AS of Norway and appearing in the file
++** LICENSE.QPL included in the packaging of this file.
++**
++** This file may be distributed and/or modified under the terms of the
++** GNU General Public License version 2 as published by the Free Software
++** Foundation and appearing in the file LICENSE.GPL included in the
++** packaging of this file.
++**
++** Licensees holding valid Qt Enterprise Edition or Qt Professional Edition
++** licenses may use this file in accordance with the Qt Commercial License
++** Agreement provided with the Software.
++**
++** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
++** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
++**
++** See http://www.trolltech.com/pricing.html or email sales@trolltech.com for
++** information about Qt Commercial License Agreements.
++** See http://www.trolltech.com/qpl/ for QPL licensing information.
++** See http://www.trolltech.com/gpl/ for GPL licensing information.
++**
++** Contact info@trolltech.com if any conditions of this licensing are
++** not clear to you.
++**
++**********************************************************************/
++
++#ifndef QT_NO_IM
++#include "qsimpleinputcontext.h"
++#include "qsimpleinputcontextplugin.h"
++#include <qinputcontextplugin.h>
++#include <qstringlist.h>
++
++
++QSimpleInputContextPlugin::QSimpleInputContextPlugin()
++{
++}
++
++QSimpleInputContextPlugin::~QSimpleInputContextPlugin()
++{
++}
++
++QStringList QSimpleInputContextPlugin::keys() const
++{
++ return QStringList( "simple" );
++}
++
++QInputContext *QSimpleInputContextPlugin::create( const QString & )
++{
++ return new QSimpleInputContext;
++}
++
++QStringList QSimpleInputContextPlugin::languages( const QString & )
++{
++ return QStringList( "" );
++}
++
++QString QSimpleInputContextPlugin::displayName( const QString & )
++{
++ return tr( "Simple Composing Input Method" );
++}
++
++QString QSimpleInputContextPlugin::description( const QString & )
++{
++ return tr( "Simple composing input method" );
++}
++
++
++Q_EXPORT_PLUGIN( QSimpleInputContextPlugin )
++
++#endif
+--- plugins/src/inputmethods/simple/qsimpleinputcontextplugin.h
++++ plugins/src/inputmethods/simple/qsimpleinputcontextplugin.h
+@@ -0,0 +1,63 @@
++/****************************************************************************
++** $Id$
++**
++** Definition of QSimpleInputContextPlugin class
++**
++** Copyright (C) 2004 immodule for Qt Project. All rights reserved.
++**
++** This file is written to contribute to Trolltech AS under their own
++** licence. You may use this file under your Qt license. Following
++** description is copied from their original file headers. Contact
++** immodule-qt@freedesktop.org if any conditions of this licensing are
++** not clear to you.
++**
++**
++** This file is part of the input method module of the Qt GUI Toolkit.
++**
++** This file may be distributed under the terms of the Q Public License
++** as defined by Trolltech AS of Norway and appearing in the file
++** LICENSE.QPL included in the packaging of this file.
++**
++** This file may be distributed and/or modified under the terms of the
++** GNU General Public License version 2 as published by the Free Software
++** Foundation and appearing in the file LICENSE.GPL included in the
++** packaging of this file.
++**
++** Licensees holding valid Qt Enterprise Edition or Qt Professional Edition
++** licenses may use this file in accordance with the Qt Commercial License
++** Agreement provided with the Software.
++**
++** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
++** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
++**
++** See http://www.trolltech.com/pricing.html or email sales@trolltech.com for
++** information about Qt Commercial License Agreements.
++** See http://www.trolltech.com/qpl/ for QPL licensing information.
++** See http://www.trolltech.com/gpl/ for GPL licensing information.
++**
++** Contact info@trolltech.com if any conditions of this licensing are
++** not clear to you.
++**
++**********************************************************************/
++
++#ifndef QT_NO_IM
++#include "qsimpleinputcontext.h"
++#include <qinputcontextplugin.h>
++#include <qstringlist.h>
++
++
++class QSimpleInputContextPlugin : public QInputContextPlugin
++{
++ Q_OBJECT
++public:
++ QSimpleInputContextPlugin();
++ ~QSimpleInputContextPlugin();
++
++ QStringList keys() const;
++ QInputContext *create( const QString &key );
++ QStringList languages( const QString &key );
++ QString displayName( const QString &key );
++ QString description( const QString &key );
++};
++
++#endif
+--- plugins/src/inputmethods/simple/simple.pro
++++ plugins/src/inputmethods/simple/simple.pro
+@@ -0,0 +1,15 @@
++TEMPLATE = lib
++TARGET = qsimple
++DESTDIR = ../../../inputmethods
++
++INCLUDEPATH += .
++CONFIG += qt warn_on debug plugin
++target.path += $$plugins.path/inputmethods
++INSTALLS += target
++
++# Input
++HEADERS += qsimpleinputcontext.h \
++ qsimpleinputcontextplugin.h
++SOURCES += qsimpleinputcontext.cpp \
++ qsimpleinputcontextplugin.cpp \
++ composetable.cpp
+--- plugins/src/inputmethods/simple/xcompose2q.rb
++++ plugins/src/inputmethods/simple/xcompose2q.rb
+@@ -0,0 +1,450 @@
++#!/usr/bin/env ruby
++
++# xcompose2q.rb: X Compose table to QSimpleInputContext table translator
++# Copyright (C) 2004 immodule for Qt Project. All rights reserved.
++#
++# This file is written to contribute to Trolltech AS under their own
++# licence. You may use this file under your Qt license. Following
++# description is copied from their original file headers. Contact
++# immodule-qt@freedesktop.org if any conditions of this licensing are
++# not clear to you.
++
++# This file may be distributed under the terms of the Q Public License
++# as defined by Trolltech AS of Norway and appearing in the file
++# LICENSE.QPL included in the packaging of this file.
++#
++# This file may be distributed and/or modified under the terms of the
++# GNU General Public License version 2 as published by the Free Software
++# Foundation and appearing in the file LICENSE.GPL included in the
++# packaging of this file.
++#
++# Licensees holding valid Qt Enterprise Edition or Qt Professional Edition
++# licenses may use this file in accordance with the Qt Commercial License
++# Agreement provided with the Software.
++#
++# This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
++# WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
++#
++# See http://www.trolltech.com/pricing.html or email sales@trolltech.com for
++# information about Qt Commercial License Agreements.
++# See http://www.trolltech.com/qpl/ for QPL licensing information.
++# See http://www.trolltech.com/gpl/ for GPL licensing information.
++#
++# Contact info@trolltech.com if any conditions of this licensing are
++# not clear to you.
++
++
++# Usage:
++# xcompose2q.rb /usr/X11R6/lib/X11/locale/en_US.UTF-8/Compose
++
++require 'uconv'
++
++# translation table for lazy sorting
++raw2key = {
++ "0y1120" => "UNITIZE(Qt::Key_Multi_key)",
++ "0y1250" => "UNITIZE(Qt::Key_Dead_Grave)",
++ "0y1251" => "UNITIZE(Qt::Key_Dead_Acute)",
++ "0y1252" => "UNITIZE(Qt::Key_Dead_Circumflex)",
++ "0y1253" => "UNITIZE(Qt::Key_Dead_Tilde)",
++ "0y1254" => "UNITIZE(Qt::Key_Dead_Macron)",
++ "0y1255" => "UNITIZE(Qt::Key_Dead_Breve)",
++ "0y1256" => "UNITIZE(Qt::Key_Dead_Abovedot)",
++ "0y1257" => "UNITIZE(Qt::Key_Dead_Diaeresis)",
++ "0y1258" => "UNITIZE(Qt::Key_Dead_Abovering)",
++ "0y1259" => "UNITIZE(Qt::Key_Dead_Doubleacute)",
++ "0y125a" => "UNITIZE(Qt::Key_Dead_Caron)",
++ "0y125b" => "UNITIZE(Qt::Key_Dead_Cedilla)",
++ "0y125c" => "UNITIZE(Qt::Key_Dead_Ogonek)",
++ "0y125d" => "UNITIZE(Qt::Key_Dead_Iota)",
++ "0y125e" => "UNITIZE(Qt::Key_Dead_Voiced_Sound)",
++ "0y125f" => "UNITIZE(Qt::Key_Dead_Semivoiced_Sound)",
++ "0y1260" => "UNITIZE(Qt::Key_Dead_Belowdot)",
++ "0y1261" => "UNITIZE(Qt::Key_Dead_Hook)",
++ "0y1262" => "UNITIZE(Qt::Key_Dead_Horn)",
++}
++
++# X's KeySym to Unicode translation table. The unicode value is
++# extracted from
++# QETWidget::translateKeyEventInternal(). Translation for some
++# keys are not available
++x2q = {
++ "Multi_key" => "0y1120",
++ "dead_grave" => "0y1250",
++ "dead_acute" => "0y1251",
++ "dead_circumflex" => "0y1252",
++ "dead_tilde" => "0y1253",
++ "dead_macron" => "0y1254",
++ "dead_breve" => "0y1255",
++ "dead_abovedot" => "0y1256",
++ "dead_diaeresis" => "0y1257",
++ "dead_abovering" => "0y1258",
++ "dead_doubleacute" => "0y1259",
++ "dead_caron" => "0y125a",
++ "dead_cedilla" => "0y125b",
++ "dead_ogonek" => "0y125c",
++ "dead_iota" => "0y125d",
++ "dead_voiced_sound" => "0y125e",
++ "dead_semivoiced_sound" => "0y125f",
++ "dead_belowdot" => "0y1260",
++ "dead_hook" => "0y1261",
++ "dead_horn" => "0y1262",
++
++ "0" => "0x0030",
++ "1" => "0x0031",
++ "2" => "0x0032",
++ "3" => "0x0033",
++ "4" => "0x0034",
++ "5" => "0x0035",
++ "6" => "0x0036",
++ "7" => "0x0037",
++ "8" => "0x0038",
++ "9" => "0x0039",
++ "A" => "0x0041",
++ "AE" => "0x00c6",
++ "Abreve" => "0x0102",
++ "Acircumflex" => "0x00c2",
++ "Adiaeresis" => "0x00c4",
++ "Arabic_alef" => "0x0627",
++ "Arabic_waw" => "0x0648",
++ "Arabic_yeh" => "0x064a",
++ "Aring" => "0x00c5",
++ "B" => "0x0042",
++ "C" => "0x0043",
++ "Ccedilla" => "0x00c7",
++ "Cyrillic_A" => "0x0410",
++ "Cyrillic_CHE" => "0x0427",
++ "Cyrillic_E" => "0x042d",
++ "Cyrillic_GHE" => "0x0413",
++ "Cyrillic_I" => "0x0418",
++ "Cyrillic_IE" => "0x0415",
++ "Cyrillic_KA" => "0x041a",
++ "Cyrillic_O" => "0x041e",
++ "Cyrillic_U" => "0x0423",
++ "Cyrillic_YERU" => "0x042b",
++ "Cyrillic_ZE" => "0x0417",
++ "Cyrillic_ZHE" => "0x0416",
++ "Cyrillic_a" => "0x0430",
++ "Cyrillic_che" => "0x0447",
++ "Cyrillic_e" => "0x044d",
++ "Cyrillic_ghe" => "0x0433",
++ "Cyrillic_i" => "0x0438",
++ "Cyrillic_ie" => "0x0435",
++ "Cyrillic_ka" => "0x043a",
++ "Cyrillic_o" => "0x043e",
++ "Cyrillic_u" => "0x0443",
++ "Cyrillic_yeru" => "0x044b",
++ "Cyrillic_ze" => "0x0437",
++ "Cyrillic_zhe" => "0x0436",
++ "D" => "0x0044",
++ "E" => "0x0045",
++ "Ecircumflex" => "0x00ca",
++ "Emacron" => "0x0112",
++ "F" => "0x0046",
++ "G" => "0x0047",
++ "Greek_ALPHA" => "0x0391",
++ "Greek_EPSILON" => "0x0395",
++ "Greek_ETA" => "0x0397",
++ "Greek_IOTA" => "0x0399",
++ "Greek_OMEGA" => "0x03a9",
++ "Greek_OMICRON" => "0x039f",
++ "Greek_RHO" => "0x03a1",
++ "Greek_UPSILON" => "0x03a5",
++ "Greek_alpha" => "0x03b1",
++ "Greek_alphaaccent" => "0x03ac",
++ "Greek_epsilon" => "0x03b5",
++ "Greek_eta" => "0x03b7",
++ "Greek_etaaccent" => "0x03ae",
++ "Greek_iota" => "0x03b9",
++ "Greek_iotadieresis" => "0x03ca",
++ "Greek_omega" => "0x03c9",
++ "Greek_omegaaccent" => "0x03ce",
++ "Greek_omicron" => "0x03bf",
++ "Greek_rho" => "0x03c1",
++ "Greek_upsilon" => "0x03c5",
++ "Greek_upsilondieresis" => "0x03cb",
++ "H" => "0x0048",
++ "I" => "0x0049",
++ "Idiaeresis" => "0x00cf",
++ "J" => "0x004a",
++ "K" => "0x004b",
++ "KP_0" => "0x0000",
++ "KP_1" => "0x0000",
++ "KP_2" => "0x0000",
++ "KP_3" => "0x0000",
++ "KP_4" => "0x0000",
++ "KP_5" => "0x0000",
++ "KP_6" => "0x0000",
++ "KP_7" => "0x0000",
++ "KP_8" => "0x0000",
++ "KP_9" => "0x0000",
++ "KP_Add" => "0x0000",
++ "KP_Divide" => "0x0000",
++ "KP_Equal" => "0x0000",
++ "KP_Space" => "0x0000",
++ "L" => "0x004c",
++ "M" => "0x004d",
++ "N" => "0x004e",
++ "O" => "0x004f",
++ "Ocircumflex" => "0x00d4",
++ "Odiaeresis" => "0x00d6",
++ "Ohorn" => "0x0000",
++ "Omacron" => "0x014c",
++ "Ooblique" => "0x00d8",
++ "Otilde" => "0x00d5",
++ "P" => "0x0050",
++ "Q" => "0x0051",
++ "R" => "0x0052",
++ "S" => "0x0053",
++ "Sacute" => "0x015a",
++ "Scaron" => "0x0160",
++ "T" => "0x0054",
++ "U" => "0x0055",
++ "Udiaeresis" => "0x00dc",
++ "Uhorn" => "0x0000",
++ "Ukrainian_I" => "0x0406",
++ "Ukrainian_i" => "0x0456",
++ "Umacron" => "0x016a",
++ "Utilde" => "0x0168",
++ "V" => "0x0056",
++ "W" => "0x0057",
++ "X" => "0x0058",
++ "Y" => "0x0059",
++ "Z" => "0x005a",
++ "a" => "0x0061",
++ "abreve" => "0x0103",
++ "acircumflex" => "0x00e2",
++ "acute" => "0x00b4",
++ "adiaeresis" => "0x00e4",
++ "ae" => "0x00e6",
++ "ampersand" => "0x0026",
++ "apostrophe" => "0x0027",
++ "approximate" => "0x223c",
++ "aring" => "0x00e5",
++ "asciicircum" => "0x005e",
++ "asciitilde" => "0x007e",
++ "asterisk" => "0x002a",
++ "at" => "0x0040",
++ "b" => "0x0062",
++ "backslash" => "0x005c",
++ "bar" => "0x007c",
++ "braceleft" => "0x007b",
++ "braceright" => "0x007d",
++ "bracketleft" => "0x005b",
++ "bracketright" => "0x005d",
++ "c" => "0x0063",
++ "ccedilla" => "0x00e7",
++ "colon" => "0x003a",
++ "combining_acute" => "0x0000",
++ "combining_belowdot" => "0x0000",
++ "combining_grave" => "0x0000",
++ "combining_hook" => "0x0000",
++ "combining_tilde" => "0x0000",
++ "comma" => "0x002c",
++ "d" => "0x0064",
++ "diaeresis" => "0x00a8",
++ "dollar" => "0x0024",
++ "e" => "0x0065",
++ "ecircumflex" => "0x00ea",
++ "emacron" => "0x0113",
++ "equal" => "0x003d",
++ "exclam" => "0x0021",
++ "f" => "0x0066",
++ "g" => "0x0067",
++ "grave" => "0x0060",
++ "greater" => "0x003e",
++ "greaterthanequal" => "0x2265",
++ "h" => "0x0068",
++ "hebrew_aleph" => "0x05d0",
++ "hebrew_bet" => "0x05d1",
++ "hebrew_beth" => "0x05d1",
++ "hebrew_dalet" => "0x05d3",
++ "hebrew_daleth" => "0x05d3",
++ "hebrew_finalkaph" => "0x05da",
++ "hebrew_finalpe" => "0x05e3",
++ "hebrew_gimel" => "0x05d2",
++ "hebrew_gimmel" => "0x05d2",
++ "hebrew_he" => "0x05d4",
++ "hebrew_kaph" => "0x05db",
++ "hebrew_kuf" => "0x05e7",
++ "hebrew_lamed" => "0x05dc",
++ "hebrew_mem" => "0x05de",
++ "hebrew_nun" => "0x05e0",
++ "hebrew_pe" => "0x05e4",
++ "hebrew_qoph" => "0x05e7",
++ "hebrew_resh" => "0x05e8",
++ "hebrew_samech" => "0x05e1",
++ "hebrew_samekh" => "0x05e1",
++ "hebrew_shin" => "0x05e9",
++ "hebrew_taf" => "0x05ea",
++ "hebrew_taw" => "0x05ea",
++ "hebrew_tet" => "0x05d8",
++ "hebrew_teth" => "0x05d8",
++ "hebrew_waw" => "0x05d5",
++ "hebrew_yod" => "0x05d9",
++ "hebrew_zade" => "0x05e6",
++ "hebrew_zadi" => "0x05e6",
++ "hebrew_zain" => "0x05d6",
++ "hebrew_zayin" => "0x05d6",
++ "i" => "0x0069",
++ "identical" => "0x2261",
++ "idiaeresis" => "0x00ef",
++ "includedin" => "0x2282",
++ "includes" => "0x2283",
++ "j" => "0x006a",
++ "k" => "0x006b",
++ "kana_A" => "0x30a2",
++ "kana_CHI" => "0x30c1",
++ "kana_E" => "0x30a8",
++ "kana_FU" => "0x30d5",
++ "kana_HA" => "0x30cf",
++ "kana_HE" => "0x30d8",
++ "kana_HI" => "0x30d2",
++ "kana_HO" => "0x30db",
++ "kana_I" => "0x30a4",
++ "kana_KA" => "0x30ab",
++ "kana_KE" => "0x30b1",
++ "kana_KI" => "0x30ad",
++ "kana_KO" => "0x30b3",
++ "kana_KU" => "0x30af",
++ "kana_MA" => "0x30de",
++ "kana_ME" => "0x30e1",
++ "kana_MI" => "0x30df",
++ "kana_MO" => "0x30e2",
++ "kana_MU" => "0x30e0",
++ "kana_NA" => "0x30ca",
++ "kana_NE" => "0x30cd",
++ "kana_NI" => "0x30cb",
++ "kana_NO" => "0x30ce",
++ "kana_NU" => "0x30cc",
++ "kana_O" => "0x30aa",
++ "kana_RA" => "0x30e9",
++ "kana_RE" => "0x30ec",
++ "kana_RI" => "0x30ea",
++ "kana_RO" => "0x30ed",
++ "kana_RU" => "0x30eb",
++ "kana_SA" => "0x30b5",
++ "kana_SE" => "0x30bb",
++ "kana_SHI" => "0x30b7",
++ "kana_SO" => "0x30bd",
++ "kana_SU" => "0x30b9",
++ "kana_TA" => "0x30bf",
++ "kana_TE" => "0x30c6",
++ "kana_TO" => "0x30c8",
++ "kana_TSU" => "0x30c4",
++ "kana_U" => "0x30a6",
++ "kana_WA" => "0x30ef",
++ "kana_WO" => "0x30f2",
++ "kana_YA" => "0x30e4",
++ "kana_YO" => "0x30e8",
++ "kana_YU" => "0x30e6",
++ "l" => "0x006c",
++ "leftarrow" => "0x2190",
++ "leftcaret" => "0x003c",
++ "leftshoe" => "0x2282",
++ "less" => "0x003c",
++ "lessthanequal" => "0x2264",
++ "m" => "0x006d",
++ "macron" => "0x00af",
++ "minus" => "0x002d",
++ "n" => "0x006e",
++ "numbersign" => "0x0023",
++ "o" => "0x006f",
++ "ocircumflex" => "0x00f4",
++ "odiaeresis" => "0x00f6",
++ "ohorn" => "0x0000",
++ "omacron" => "0x014d",
++ "oslash" => "0x00f8",
++ "otilde" => "0x00f5",
++ "p" => "0x0070",
++ "parenleft" => "0x0028",
++ "parenright" => "0x0029",
++ "percent" => "0x0025",
++ "period" => "0x002e",
++ "plus" => "0x002b",
++ "q" => "0x0071",
++ "question" => "0x003f",
++ "quotedbl" => "0x0022",
++ "r" => "0x0072",
++ "rightarrow" => "0x2192",
++ "rightcaret" => "0x003e",
++ "rightshoe" => "0x2283",
++ "righttack" => "0x22a3",
++ "s" => "0x0073",
++ "sacute" => "0x015b",
++ "scaron" => "0x0161",
++ "semicolon" => "0x003b",
++ "slash" => "0x002f",
++ "space" => "0x0020",
++ "t" => "0x0074",
++ "u" => "0x0075",
++ "udiaeresis" => "0x00fc",
++ "uhorn" => "0x0000",
++ "umacron" => "0x016b",
++ "underbar" => "0x005f",
++ "underscore" => "0x005f",
++ "utilde" => "0x0169",
++ "v" => "0x0076",
++ "w" => "0x0077",
++ "x" => "0x0078",
++ "y" => "0x0079",
++ "z" => "0x007a",
++}
++
++readlines.collect {
++ |line|
++
++ broken = ""
++ seq = ["0", "0", "0", "0", "0", "0"]
++ index = 0
++ rhs = "0x0000"
++ comment = ""
++
++ case line
++ when /^(#|XCOMM)(.*)$/
++ comment = "// #{$2}\n"
++ rhs = :isCommentLine
++ when /^$/
++ comment = "\n"
++ rhs = :isCommentLine
++ else
++ line.scan(/<([^>]+)>/) {
++ |args|
++ keysym = args[0]
++ unit = x2q[keysym] || keysym.sub(/^U([\da-fA-F]{4,5})$/, "0x\\1")
++ if (/^(0x(0000|[\da-fA-F]{5,})|dead_space)$/ =~ unit)
++ broken = "// /* broken */"
++ end
++ seq[index] = unit
++ index += 1
++ }
++
++ Regexp.new(':\s+"(.+)"\s+(.+)$', nil, 'u') =~ line
++ rhs = Uconv::u8tou16($1).unpack('v')[0]
++ rhs = format("0x%04x", rhs)
++ comment = $2
++ end
++
++ entry = {
++ :broken => broken,
++ :seq => seq,
++ :rhs => rhs,
++ :comment => comment
++ }
++}.sort {
++ |entry_a, entry_b|
++
++ entry_a[:seq] <=> entry_b[:seq]
++}.each {
++ |entry|
++
++ broken, seq, rhs, comment = entry.values_at(:broken, :seq, :rhs, :comment)
++ if (rhs == :isCommentLine)
++ print comment
++ else
++ seq = seq.collect {
++ |unit|
++ raw2key[unit] || unit
++ }
++ print "#{broken} { {#{seq.join(", ")}}, #{rhs} }, // #{comment}\n"
++ end
++}
+--- plugins/src/inputmethods/xim/qximinputcontext.h
++++ plugins/src/inputmethods/xim/qximinputcontext.h
+@@ -0,0 +1,130 @@
++/****************************************************************************
++** $Id: qximinputcontext_p.h,v 1.6 2004/06/22 06:47:27 daisuke Exp $
++**
++** Definition of QXIMInputContext
++**
++** Copyright (C) 1992-2002 Trolltech AS. All rights reserved.
++**
++** This file is part of the input method module of the Qt GUI Toolkit.
++**
++** This file may be distributed under the terms of the Q Public License
++** as defined by Trolltech AS of Norway and appearing in the file
++** LICENSE.QPL included in the packaging of this file.
++**
++** This file may be distributed and/or modified under the terms of the
++** GNU General Public License version 2 as published by the Free Software
++** Foundation and appearing in the file LICENSE.GPL included in the
++** packaging of this file.
++**
++** Licensees holding valid Qt Enterprise Edition or Qt Professional Edition
++** licenses may use this file in accordance with the Qt Commercial License
++** Agreement provided with the Software.
++**
++** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
++** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
++**
++** See http://www.trolltech.com/pricing.html or email sales@trolltech.com for
++** information about Qt Commercial License Agreements.
++** See http://www.trolltech.com/qpl/ for QPL licensing information.
++** See http://www.trolltech.com/gpl/ for GPL licensing information.
++**
++** Contact info@trolltech.com if any conditions of this licensing are
++** not clear to you.
++**
++**********************************************************************/
++
++#ifndef QXIMINPUTCONTEXT_H
++#define QXIMINPUTCONTEXT_H
++
++
++//
++// W A R N I N G
++// -------------
++//
++// This file is not part of the Qt API. It exists for the convenience
++// of internal files. This header file may change from version to version
++// without notice, or even be removed.
++//
++// We mean it.
++//
++//
++
++#if !defined(Q_NO_IM)
++
++#include "qglobal.h"
++#include <qinputcontext.h>
++#include <qfont.h>
++#include <qcstring.h>
++
++class QKeyEvent;
++class QWidget;
++class QFont;
++class QString;
++
++
++#ifdef Q_WS_X11
++#include "qarray.h"
++#include "qwindowdefs.h"
++#include <private/qt_x11_p.h>
++#endif
++
++class QXIMInputContext : public QInputContext
++{
++ Q_OBJECT
++public:
++#ifdef Q_WS_X11
++ QXIMInputContext();
++ ~QXIMInputContext();
++
++ QString identifierName();
++ QString language();
++
++ bool x11FilterEvent( QWidget *keywidget, XEvent *event );
++ void reset();
++
++ void setFocus();
++ void unsetFocus();
++ void setMicroFocus( int x, int y, int w, int h, QFont *f = 0 );
++ void mouseHandler( int x, QEvent::Type type,
++ Qt::ButtonState button, Qt::ButtonState state );
++ bool isPreeditRelocationEnabled();
++
++ void setHolderWidget( QWidget *widget );
++
++ bool hasFocus() const;
++ void resetClientState();
++ void close( const QString &errMsg );
++
++ void sendIMEvent( QEvent::Type type,
++ const QString &text = QString::null,
++ int cursorPosition = -1, int selLength = 0 );
++
++ static void init_xim();
++ static void create_xim();
++ static void close_xim();
++
++ void *ic;
++ QString composingText;
++ QFont font;
++ XFontSet fontset;
++ QMemArray<bool> selectedChars;
++
++protected:
++ virtual bool isPreeditPreservationEnabled(); // not a QInputContext func
++
++ QCString _language;
++
++private:
++ void setComposePosition(int, int);
++ void setComposeArea(int, int, int, int);
++ void setXFontSet(const QFont &);
++
++ int lookupString(XKeyEvent *, QCString &, KeySym *, Status *) const;
++
++#endif // Q_WS_X11
++};
++
++
++#endif //Q_NO_IM
++
++#endif // QXIMINPUTCONTEXT_H
+--- plugins/src/inputmethods/xim/qximinputcontextplugin.cpp
++++ plugins/src/inputmethods/xim/qximinputcontextplugin.cpp
+@@ -0,0 +1,86 @@
++/****************************************************************************
++** $Id$
++**
++** Implementation of QXIMInputContextPlugin class
++**
++** Copyright (C) 2004 immodule for Qt Project. All rights reserved.
++**
++** This file is written to contribute to Trolltech AS under their own
++** licence. You may use this file under your Qt license. Following
++** description is copied from their original file headers. Contact
++** immodule-qt@freedesktop.org if any conditions of this licensing are
++** not clear to you.
++**
++**
++** This file is part of the input method module of the Qt GUI Toolkit.
++**
++** This file may be distributed under the terms of the Q Public License
++** as defined by Trolltech AS of Norway and appearing in the file
++** LICENSE.QPL included in the packaging of this file.
++**
++** This file may be distributed and/or modified under the terms of the
++** GNU General Public License version 2 as published by the Free Software
++** Foundation and appearing in the file LICENSE.GPL included in the
++** packaging of this file.
++**
++** Licensees holding valid Qt Enterprise Edition or Qt Professional Edition
++** licenses may use this file in accordance with the Qt Commercial License
++** Agreement provided with the Software.
++**
++** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
++** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
++**
++** See http://www.trolltech.com/pricing.html or email sales@trolltech.com for
++** information about Qt Commercial License Agreements.
++** See http://www.trolltech.com/qpl/ for QPL licensing information.
++** See http://www.trolltech.com/gpl/ for GPL licensing information.
++**
++** Contact info@trolltech.com if any conditions of this licensing are
++** not clear to you.
++**
++**********************************************************************/
++
++#ifndef QT_NO_IM
++#include "qximinputcontext.h"
++#include "qximinputcontextplugin.h"
++#include <qinputcontextplugin.h>
++#include <qstringlist.h>
++
++
++QXIMInputContextPlugin::QXIMInputContextPlugin()
++{
++}
++
++QXIMInputContextPlugin::~QXIMInputContextPlugin()
++{
++}
++
++QStringList QXIMInputContextPlugin::keys() const
++{
++ return QStringList( "xim" );
++}
++
++QInputContext *QXIMInputContextPlugin::create( const QString & )
++{
++ return new QXIMInputContext;
++}
++
++QStringList QXIMInputContextPlugin::languages( const QString & )
++{
++ return QStringList( "" );
++}
++
++QString QXIMInputContextPlugin::displayName( const QString & )
++{
++ return tr( "XIM" );
++}
++
++QString QXIMInputContextPlugin::description( const QString & )
++{
++ return tr( "XIM input method" );
++}
++
++
++Q_EXPORT_PLUGIN( QXIMInputContextPlugin )
++
++#endif
+--- plugins/src/inputmethods/xim/qximinputcontextplugin.h
++++ plugins/src/inputmethods/xim/qximinputcontextplugin.h
+@@ -0,0 +1,63 @@
++/****************************************************************************
++** $Id$
++**
++** Definition of QXIMInputContextPlugin class
++**
++** Copyright (C) 2004 immodule for Qt Project. All rights reserved.
++**
++** This file is written to contribute to Trolltech AS under their own
++** licence. You may use this file under your Qt license. Following
++** description is copied from their original file headers. Contact
++** immodule-qt@freedesktop.org if any conditions of this licensing are
++** not clear to you.
++**
++**
++** This file is part of the input method module of the Qt GUI Toolkit.
++**
++** This file may be distributed under the terms of the Q Public License
++** as defined by Trolltech AS of Norway and appearing in the file
++** LICENSE.QPL included in the packaging of this file.
++**
++** This file may be distributed and/or modified under the terms of the
++** GNU General Public License version 2 as published by the Free Software
++** Foundation and appearing in the file LICENSE.GPL included in the
++** packaging of this file.
++**
++** Licensees holding valid Qt Enterprise Edition or Qt Professional Edition
++** licenses may use this file in accordance with the Qt Commercial License
++** Agreement provided with the Software.
++**
++** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
++** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
++**
++** See http://www.trolltech.com/pricing.html or email sales@trolltech.com for
++** information about Qt Commercial License Agreements.
++** See http://www.trolltech.com/qpl/ for QPL licensing information.
++** See http://www.trolltech.com/gpl/ for GPL licensing information.
++**
++** Contact info@trolltech.com if any conditions of this licensing are
++** not clear to you.
++**
++**********************************************************************/
++
++#ifndef QT_NO_IM
++#include "qximinputcontext.h"
++#include <qinputcontextplugin.h>
++#include <qstringlist.h>
++
++
++class QXIMInputContextPlugin : public QInputContextPlugin
++{
++ Q_OBJECT
++public:
++ QXIMInputContextPlugin();
++ ~QXIMInputContextPlugin();
++
++ QStringList keys() const;
++ QInputContext *create( const QString &key );
++ QStringList languages( const QString &key );
++ QString displayName( const QString &key );
++ QString description( const QString &key );
++};
++
++#endif
+--- plugins/src/inputmethods/xim/qximinputcontext_x11.cpp
++++ plugins/src/inputmethods/xim/qximinputcontext_x11.cpp
+@@ -0,0 +1,930 @@
++/****************************************************************************
++** $Id: qximinputcontext_x11.cpp,v 1.10 2004/06/22 06:47:27 daisuke Exp $
++**
++** Implementation of QXIMInputContext class
++**
++** Copyright (C) 2000-2003 Trolltech AS. All rights reserved.
++**
++** This file is part of the input method module of the Qt GUI Toolkit.
++**
++** This file may be distributed under the terms of the Q Public License
++** as defined by Trolltech AS of Norway and appearing in the file
++** LICENSE.QPL included in the packaging of this file.
++**
++** This file may be distributed and/or modified under the terms of the
++** GNU General Public License version 2 as published by the Free Software
++** Foundation and appearing in the file LICENSE.GPL included in the
++** packaging of this file.
++**
++** Licensees holding valid Qt Enterprise Edition or Qt Professional Edition
++** licenses for Unix/X11 may use this file in accordance with the Qt Commercial
++** License Agreement provided with the Software.
++**
++** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
++** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
++**
++** See http://www.trolltech.com/pricing.html or email sales@trolltech.com for
++** information about Qt Commercial License Agreements.
++** See http://www.trolltech.com/qpl/ for QPL licensing information.
++** See http://www.trolltech.com/gpl/ for GPL licensing information.
++**
++** Contact info@trolltech.com if any conditions of this licensing are
++** not clear to you.
++**
++**********************************************************************/
++
++
++#include "qximinputcontext.h"
++
++const int XKeyPress = KeyPress;
++const int XKeyRelease = KeyRelease;
++#undef KeyPress
++#undef KeyRelease
++
++#if !defined(QT_NO_IM)
++
++#include "qplatformdefs.h"
++
++#include "qapplication.h"
++#include "qwidget.h"
++#include "qstring.h"
++#include "qptrlist.h"
++#include "qintdict.h"
++#include "qtextcodec.h"
++
++#include <stdlib.h>
++#include <limits.h>
++
++#if !defined(QT_NO_XIM)
++
++#define XK_MISCELLANY
++#define XK_LATIN1
++#include <X11/keysymdef.h>
++
++// #define QT_XIM_DEBUG
++
++// from qapplication_x11.cpp
++static XIM qt_xim = 0;
++extern XIMStyle qt_xim_style;
++extern XIMStyle qt_xim_preferred_style;
++extern char *qt_ximServer;
++static bool isInitXIM = FALSE;
++static QPtrList<QXIMInputContext> *ximContextList = 0;
++#endif
++extern int qt_ximComposingKeycode;
++extern QTextCodec * qt_input_mapper;
++
++
++#if !defined(QT_NO_XIM)
++
++#if defined(Q_C_CALLBACKS)
++extern "C" {
++#endif // Q_C_CALLBACKS
++
++#ifdef USE_X11R6_XIM
++ static void xim_create_callback(XIM /*im*/,
++ XPointer /*client_data*/,
++ XPointer /*call_data*/)
++ {
++ // qDebug("xim_create_callback");
++ QXIMInputContext::create_xim();
++ }
++
++ static void xim_destroy_callback(XIM /*im*/,
++ XPointer /*client_data*/,
++ XPointer /*call_data*/)
++ {
++ // qDebug("xim_destroy_callback");
++ QXIMInputContext::close_xim();
++ Display *dpy = QPaintDevice::x11AppDisplay();
++ XRegisterIMInstantiateCallback(dpy, 0, 0, 0,
++ (XIMProc) xim_create_callback, 0);
++ }
++
++#endif // USE_X11R6_XIM
++
++#if defined(Q_C_CALLBACKS)
++}
++#endif // Q_C_CALLBACKS
++
++#endif // QT_NO_XIM
++
++#ifndef QT_NO_XIM
++
++/* The cache here is needed, as X11 leaks a few kb for every
++ XFreeFontSet call, so we avoid creating and deletion of fontsets as
++ much as possible
++*/
++static XFontSet fontsetCache[8] = { 0, 0, 0, 0, 0, 0, 0, 0 };
++static int fontsetRefCount = 0;
++
++static const char * const fontsetnames[] = {
++ "-*-fixed-medium-r-*-*-16-*,-*-*-medium-r-*-*-16-*",
++ "-*-fixed-medium-i-*-*-16-*,-*-*-medium-i-*-*-16-*",
++ "-*-fixed-bold-r-*-*-16-*,-*-*-bold-r-*-*-16-*",
++ "-*-fixed-bold-i-*-*-16-*,-*-*-bold-i-*-*-16-*",
++ "-*-fixed-medium-r-*-*-24-*,-*-*-medium-r-*-*-24-*",
++ "-*-fixed-medium-i-*-*-24-*,-*-*-medium-i-*-*-24-*",
++ "-*-fixed-bold-r-*-*-24-*,-*-*-bold-r-*-*-24-*",
++ "-*-fixed-bold-i-*-*-24-*,-*-*-bold-i-*-*-24-*"
++};
++
++static XFontSet getFontSet( const QFont &f )
++{
++ int i = 0;
++ if (f.italic())
++ i |= 1;
++ if (f.bold())
++ i |= 2;
++
++ if ( f.pointSize() > 20 )
++ i += 4;
++
++ if ( !fontsetCache[i] ) {
++ Display* dpy = QPaintDevice::x11AppDisplay();
++ int missCount;
++ char** missList;
++ fontsetCache[i] = XCreateFontSet(dpy, fontsetnames[i], &missList, &missCount, 0);
++ if(missCount > 0)
++ XFreeStringList(missList);
++ if ( !fontsetCache[i] ) {
++ fontsetCache[i] = XCreateFontSet(dpy, "-*-fixed-*-*-*-*-16-*", &missList, &missCount, 0);
++ if(missCount > 0)
++ XFreeStringList(missList);
++ if ( !fontsetCache[i] )
++ fontsetCache[i] = (XFontSet)-1;
++ }
++ }
++ return (fontsetCache[i] == (XFontSet)-1) ? 0 : fontsetCache[i];
++}
++
++
++#ifdef Q_C_CALLBACKS
++extern "C" {
++#endif // Q_C_CALLBACKS
++
++ // These static functions should be rewritten as member of
++ // QXIMInputContext
++
++ static int xic_start_callback(XIC, XPointer client_data, XPointer) {
++ QXIMInputContext *qic = (QXIMInputContext *) client_data;
++ if (! qic) {
++#ifdef QT_XIM_DEBUG
++ qDebug("compose start: no qic");
++#endif // QT_XIM_DEBUG
++
++ return 0;
++ }
++
++ qic->resetClientState();
++ qic->sendIMEvent( QEvent::IMStart );
++
++#ifdef QT_XIM_DEBUG
++ qDebug("compose start");
++#endif // QT_XIM_DEBUG
++
++ return 0;
++ }
++
++ static int xic_draw_callback(XIC, XPointer client_data, XPointer call_data) {
++ QXIMInputContext *qic = (QXIMInputContext *) client_data;
++ if (! qic) {
++#ifdef QT_XIM_DEBUG
++ qDebug("compose event: invalid compose event %p", qic);
++#endif // QT_XIM_DEBUG
++
++ return 0;
++ }
++
++ bool send_imstart = FALSE;
++ if( ! qic->isComposing() && qic->hasFocus() ) {
++ qic->resetClientState();
++ send_imstart = TRUE;
++ } else if ( ! qic->isComposing() || ! qic->hasFocus() ) {
++#ifdef QT_XIM_DEBUG
++ qDebug( "compose event: invalid compose event composing=%d hasFocus=%d",
++ qic->isComposing(), qic->hasFocus() );
++#endif // QT_XIM_DEBUG
++
++ return 0;
++ }
++
++ if ( send_imstart )
++ qic->sendIMEvent( QEvent::IMStart );
++
++ XIMPreeditDrawCallbackStruct *drawstruct =
++ (XIMPreeditDrawCallbackStruct *) call_data;
++ XIMText *text = (XIMText *) drawstruct->text;
++ int cursor = drawstruct->caret, sellen = 0;
++
++ if ( ! drawstruct->caret && ! drawstruct->chg_first &&
++ ! drawstruct->chg_length && ! text ) {
++ if( qic->composingText.isEmpty() ) {
++#ifdef QT_XIM_DEBUG
++ qDebug( "compose emptied" );
++#endif // QT_XIM_DEBUG
++ // if the composition string has been emptied, we need
++ // to send an IMEnd event
++ qic->sendIMEvent( QEvent::IMEnd );
++ qic->resetClientState();
++ // if the commit string has coming after here, IMStart
++ // will be sent dynamically
++ }
++ return 0;
++ }
++
++ if (text) {
++ char *str = 0;
++ if (text->encoding_is_wchar) {
++ int l = wcstombs(NULL, text->string.wide_char, text->length);
++ if (l != -1) {
++ str = new char[l + 1];
++ wcstombs(str, text->string.wide_char, l);
++ str[l] = 0;
++ }
++ } else
++ str = text->string.multi_byte;
++
++ if (! str)
++ return 0;
++
++ QString s = QString::fromLocal8Bit(str);
++
++ if (text->encoding_is_wchar)
++ delete [] str;
++
++ if (drawstruct->chg_length < 0)
++ qic->composingText.replace(drawstruct->chg_first, UINT_MAX, s);
++ else
++ qic->composingText.replace(drawstruct->chg_first, drawstruct->chg_length, s);
++
++ if ( qic->selectedChars.size() < qic->composingText.length() ) {
++ // expand the selectedChars array if the compose string is longer
++ uint from = qic->selectedChars.size();
++ qic->selectedChars.resize( qic->composingText.length() );
++ for ( uint x = from; from < qic->selectedChars.size(); ++x )
++ qic->selectedChars[x] = 0;
++ }
++
++ uint x;
++ bool *p = qic->selectedChars.data() + drawstruct->chg_first;
++ // determine if the changed chars are selected based on text->feedback
++ for ( x = 0; x < s.length(); ++x )
++ *p++ = ( text->feedback ? ( text->feedback[x] & XIMReverse ) : 0 );
++
++ // figure out where the selection starts, and how long it is
++ p = qic->selectedChars.data();
++ bool started = FALSE;
++ for ( x = 0; x < QMIN(qic->composingText.length(), qic->selectedChars.size()); ++x ) {
++ if ( started ) {
++ if ( *p ) ++sellen;
++ else break;
++ } else {
++ if ( *p ) {
++ cursor = x;
++ started = TRUE;
++ sellen = 1;
++ }
++ }
++ ++p;
++ }
++ } else {
++ if (drawstruct->chg_length == 0)
++ drawstruct->chg_length = -1;
++
++ qic->composingText.remove(drawstruct->chg_first, drawstruct->chg_length);
++ bool qt_compose_emptied = qic->composingText.isEmpty();
++ if ( qt_compose_emptied ) {
++#ifdef QT_XIM_DEBUG
++ qDebug( "compose emptied" );
++#endif // QT_XIM_DEBUG
++ // if the composition string has been emptied, we need
++ // to send an IMEnd event
++ qic->sendIMEvent( QEvent::IMEnd );
++ qic->resetClientState();
++ // if the commit string has coming after here, IMStart
++ // will be sent dynamically
++ return 0;
++ }
++ }
++
++ qic->sendIMEvent( QEvent::IMCompose,
++ qic->composingText, cursor, sellen );
++
++ return 0;
++ }
++
++ static int xic_done_callback(XIC, XPointer client_data, XPointer) {
++ QXIMInputContext *qic = (QXIMInputContext *) client_data;
++ if (! qic)
++ return 0;
++
++ // Don't send IMEnd here. QXIMInputContext::x11FilterEvent()
++ // handles IMEnd with commit string.
++#if 0
++ if ( qic->isComposing() )
++ qic->sendIMEvent( QEvent::IMEnd );
++ qic->resetClientState();
++#endif
++
++ return 0;
++ }
++
++#ifdef Q_C_CALLBACKS
++}
++#endif // Q_C_CALLBACKS
++
++#endif // !QT_NO_XIM
++
++
++
++QXIMInputContext::QXIMInputContext()
++ : QInputContext(), ic(0), fontset(0)
++{
++ if(!isInitXIM)
++ QXIMInputContext::init_xim();
++}
++
++
++void QXIMInputContext::setHolderWidget( QWidget *widget )
++{
++ if ( ! widget )
++ return;
++
++ QInputContext::setHolderWidget( widget );
++
++#if !defined(QT_NO_XIM)
++ fontsetRefCount++;
++ if (! qt_xim) {
++ qWarning("QInputContext: no input method context available");
++ return;
++ }
++
++ if (! widget->isTopLevel()) {
++ qWarning("QInputContext: cannot create input context for non-toplevel widgets");
++ return;
++ }
++
++ XPoint spot;
++ XRectangle rect;
++ XVaNestedList preedit_attr = 0;
++ XIMCallback startcallback, drawcallback, donecallback;
++
++ font = widget->font();
++ fontset = getFontSet( font );
++
++ if (qt_xim_style & XIMPreeditArea) {
++ rect.x = 0;
++ rect.y = 0;
++ rect.width = widget->width();
++ rect.height = widget->height();
++
++ preedit_attr = XVaCreateNestedList(0,
++ XNArea, &rect,
++ XNFontSet, fontset,
++ (char *) 0);
++ } else if (qt_xim_style & XIMPreeditPosition) {
++ spot.x = 1;
++ spot.y = 1;
++
++ preedit_attr = XVaCreateNestedList(0,
++ XNSpotLocation, &spot,
++ XNFontSet, fontset,
++ (char *) 0);
++ } else if (qt_xim_style & XIMPreeditCallbacks) {
++ startcallback.client_data = (XPointer) this;
++ startcallback.callback = (XIMProc) xic_start_callback;
++ drawcallback.client_data = (XPointer) this;
++ drawcallback.callback = (XIMProc)xic_draw_callback;
++ donecallback.client_data = (XPointer) this;
++ donecallback.callback = (XIMProc) xic_done_callback;
++
++ preedit_attr = XVaCreateNestedList(0,
++ XNPreeditStartCallback, &startcallback,
++ XNPreeditDrawCallback, &drawcallback,
++ XNPreeditDoneCallback, &donecallback,
++ (char *) 0);
++ }
++
++ if (preedit_attr) {
++ ic = XCreateIC(qt_xim,
++ XNInputStyle, qt_xim_style,
++ XNClientWindow, widget->winId(),
++ XNPreeditAttributes, preedit_attr,
++ (char *) 0);
++ XFree(preedit_attr);
++ } else
++ ic = XCreateIC(qt_xim,
++ XNInputStyle, qt_xim_style,
++ XNClientWindow, widget->winId(),
++ (char *) 0);
++
++ if (! ic)
++ qFatal("Failed to create XIM input context!");
++
++ // when resetting the input context, preserve the input state
++ (void) XSetICValues((XIC) ic, XNResetState, XIMPreserveState, (char *) 0);
++
++ if( ! ximContextList )
++ ximContextList = new QPtrList<QXIMInputContext>;
++ ximContextList->append( this );
++#endif // !QT_NO_XIM
++}
++
++
++QXIMInputContext::~QXIMInputContext()
++{
++
++#if !defined(QT_NO_XIM)
++ if (ic)
++ XDestroyIC((XIC) ic);
++
++ if ( --fontsetRefCount == 0 ) {
++ Display *dpy = QPaintDevice::x11AppDisplay();
++ for ( int i = 0; i < 8; i++ ) {
++ if ( fontsetCache[i] && fontsetCache[i] != (XFontSet)-1 ) {
++ XFreeFontSet(dpy, fontsetCache[i]);
++ fontsetCache[i] = 0;
++ }
++ }
++ }
++
++ if( ximContextList ) {
++ ximContextList->remove( this );
++ if(ximContextList->isEmpty()) {
++ // Calling XCloseIM gives a Purify FMR error
++ // XCloseIM( qt_xim );
++ // We prefer a less serious memory leak
++ if( qt_xim ) {
++ qt_xim = 0;
++ isInitXIM = FALSE;
++ }
++
++ delete ximContextList;
++ ximContextList = 0;
++ }
++ }
++#endif // !QT_NO_XIM
++
++ ic = 0;
++}
++
++void QXIMInputContext::init_xim()
++{
++#ifndef QT_NO_XIM
++ if(!isInitXIM)
++ isInitXIM = TRUE;
++
++ qt_xim = 0;
++ QString ximServerName(qt_ximServer);
++ if (qt_ximServer)
++ ximServerName.prepend("@im=");
++ else
++ ximServerName = "";
++
++ if ( !XSupportsLocale() )
++ qWarning("Qt: Locales not supported on X server");
++
++#ifdef USE_X11R6_XIM
++ else if ( XSetLocaleModifiers (ximServerName.ascii()) == 0 )
++ qWarning( "Qt: Cannot set locale modifiers: %s",
++ ximServerName.ascii());
++ else {
++ Display *dpy = QPaintDevice::x11AppDisplay();
++ XWindowAttributes attr; // XIM unselects all events on the root window
++ XGetWindowAttributes( dpy, QPaintDevice::x11AppRootWindow(),&attr );
++ XRegisterIMInstantiateCallback(dpy, 0, 0, 0,
++ (XIMProc) xim_create_callback, 0);
++ XSelectInput( dpy, QPaintDevice::x11AppRootWindow(), attr.your_event_mask );
++ }
++#else // !USE_X11R6_XIM
++ else if ( XSetLocaleModifiers ("") == 0 )
++ qWarning("Qt: Cannot set locale modifiers");
++ else
++ QXIMInputContext::create_xim();
++#endif // USE_X11R6_XIM
++#endif // QT_NO_XIM
++}
++
++
++/*! \internal
++ Creates the application input method.
++ */
++void QXIMInputContext::create_xim()
++{
++#ifndef QT_NO_XIM
++ Display *appDpy = QPaintDevice::x11AppDisplay();
++ qt_xim = XOpenIM( appDpy, 0, 0, 0 );
++ if ( qt_xim ) {
++
++#ifdef USE_X11R6_XIM
++ XIMCallback destroy;
++ destroy.callback = (XIMProc) xim_destroy_callback;
++ destroy.client_data = 0;
++ if ( XSetIMValues( qt_xim, XNDestroyCallback, &destroy, (char *) 0 ) != 0 )
++ qWarning( "Xlib doesn't support destroy callback");
++#endif // USE_X11R6_XIM
++
++ XIMStyles *styles = 0;
++ XGetIMValues(qt_xim, XNQueryInputStyle, &styles, (char *) 0, (char *) 0);
++ if ( styles ) {
++ int i;
++ for ( i = 0; !qt_xim_style && i < styles->count_styles; i++ ) {
++ if ( styles->supported_styles[i] == qt_xim_preferred_style ) {
++ qt_xim_style = qt_xim_preferred_style;
++ break;
++ }
++ }
++ // if the preferred input style couldn't be found, look for
++ // Nothing
++ for ( i = 0; !qt_xim_style && i < styles->count_styles; i++ ) {
++ if ( styles->supported_styles[i] == (XIMPreeditNothing |
++ XIMStatusNothing) ) {
++ qt_xim_style = XIMPreeditNothing | XIMStatusNothing;
++ break;
++ }
++ }
++ // ... and failing that, None.
++ for ( i = 0; !qt_xim_style && i < styles->count_styles; i++ ) {
++ if ( styles->supported_styles[i] == (XIMPreeditNone |
++ XIMStatusNone) ) {
++ qt_xim_style = XIMPreeditNone | XIMStatusNone;
++ break;
++ }
++ }
++
++ // qDebug("QApplication: using im style %lx", qt_xim_style);
++ XFree( (char *)styles );
++ }
++
++ if ( qt_xim_style ) {
++
++#ifdef USE_X11R6_XIM
++ XUnregisterIMInstantiateCallback(appDpy, 0, 0, 0,
++ (XIMProc) xim_create_callback, 0);
++#endif // USE_X11R6_XIM
++
++ } else {
++ // Give up
++ qWarning( "No supported input style found."
++ " See InputMethod documentation.");
++ QXIMInputContext::close_xim();
++ }
++ }
++#endif // QT_NO_XIM
++}
++
++
++/*! \internal
++ Closes the application input method.
++*/
++void QXIMInputContext::close_xim()
++{
++#ifndef QT_NO_XIM
++ QString errMsg( "QXIMInputContext::close_xim() has been called" );
++
++ // Calling XCloseIM gives a Purify FMR error
++ // XCloseIM( qt_xim );
++ // We prefer a less serious memory leak
++
++ qt_xim = 0;
++ if( ximContextList ) {
++ QPtrList<QXIMInputContext> contexts( *ximContextList );
++ QPtrList<QXIMInputContext>::Iterator it = contexts.begin();
++ while( it != contexts.end() ) {
++ (*it)->close( errMsg );
++ ++it;
++ }
++ // ximContextList will be deleted in ~QXIMInputContext
++ }
++#endif // QT_NO_XIM
++}
++
++
++bool QXIMInputContext::x11FilterEvent( QWidget *keywidget, XEvent *event )
++{
++#ifndef QT_NO_XIM
++ int xkey_keycode = event->xkey.keycode;
++ if ( XFilterEvent( event, keywidget->topLevelWidget()->winId() ) ) {
++ qt_ximComposingKeycode = xkey_keycode; // ### not documented in xlib
++
++ // Cancel of the composition is realizable even if
++ // follwing codes don't exist
++#if 0
++ if ( event->type != XKeyPress || ! (qt_xim_style & XIMPreeditCallbacks) )
++ return TRUE;
++
++ /*
++ * The Solaris htt input method will transform a ClientMessage
++ * event into a filtered KeyPress event, in which case our
++ * keywidget is still zero.
++ */
++ QETWidget *widget = (QETWidget*)QWidget::find( (WId)event->xany.window );
++ if ( ! keywidget ) {
++ keywidget = (QETWidget*)QWidget::keyboardGrabber();
++ if ( keywidget ) {
++ grabbed = TRUE;
++ } else {
++ if ( focus_widget )
++ keywidget = (QETWidget*)focus_widget;
++ if ( !keywidget ) {
++ if ( qApp->inPopupMode() ) // no focus widget, see if we have a popup
++ keywidget = (QETWidget*) qApp->activePopupWidget();
++ else if ( widget )
++ keywidget = (QETWidget*)widget->topLevelWidget();
++ }
++ }
++ }
++
++ /*
++ if the composition string has been emptied, we need to send
++ an IMEnd event. however, we have no way to tell if the user
++ has cancelled input, or if the user has accepted the
++ composition.
++
++ so, we have to look for the next keypress and see if it is
++ the 'commit' key press (keycode == 0). if it is, we deliver
++ an IMEnd event with the final text, otherwise we deliver an
++ IMEnd with empty text (meaning the user has cancelled the
++ input).
++ */
++ if ( composing && focusWidget && qt_compose_emptied ) {
++ XEvent event2;
++ bool found = FALSE;
++ if ( XCheckTypedEvent( QPaintDevice::x11AppDisplay(),
++ XKeyPress, &event2 ) ) {
++ if ( event2.xkey.keycode == 0 ) {
++ // found a key event with the 'commit' string
++ found = TRUE;
++ XPutBackEvent( QPaintDevice::x11AppDisplay(), &event2 );
++ }
++ }
++
++ if ( !found ) {
++ // no key event, so the user must have cancelled the composition
++ QIMEvent endevent( QEvent::IMEnd, QString::null, -1 );
++ QApplication::sendEvent( focusWidget, &endevent );
++
++ focusWidget = 0;
++ }
++
++ qt_compose_emptied = FALSE;
++ }
++#endif
++ return TRUE;
++ } else if ( focusWidget() ) {
++ if ( event->type == XKeyPress && event->xkey.keycode == 0 ) {
++ // input method has sent us a commit string
++ QCString data(513);
++ KeySym sym; // unused
++ Status status; // unused
++ QString inputText;
++ int count = lookupString( &(event->xkey), data, &sym, &status );
++ if ( count > 0 )
++ inputText = qt_input_mapper->toUnicode( data, count );
++
++ if ( ! ( qt_xim_style & XIMPreeditCallbacks ) || ! isComposing() ) {
++ // there is no composing state
++ sendIMEvent( QEvent::IMStart );
++ }
++
++ sendIMEvent( QEvent::IMEnd, inputText );
++ resetClientState();
++
++ return TRUE;
++ }
++ }
++#endif // !QT_NO_XIM
++
++ return FALSE;
++}
++
++
++void QXIMInputContext::sendIMEvent( QEvent::Type type, const QString &text,
++ int cursorPosition, int selLength )
++{
++ QInputContext::sendIMEvent( type, text, cursorPosition, selLength );
++ if ( type == QEvent::IMCompose )
++ composingText = text;
++}
++
++
++void QXIMInputContext::reset()
++{
++#if !defined(QT_NO_XIM)
++ if ( focusWidget() && isComposing() && ! composingText.isNull() ) {
++#ifdef QT_XIM_DEBUG
++ qDebug("QXIMInputContext::reset: composing - sending IMEnd (empty) to %p",
++ focusWidget() );
++#endif // QT_XIM_DEBUG
++
++ QInputContext::reset();
++ resetClientState();
++
++ char *mb = XmbResetIC((XIC) ic);
++ if (mb)
++ XFree(mb);
++ }
++#endif // !QT_NO_XIM
++}
++
++
++void QXIMInputContext::resetClientState()
++{
++#if !defined(QT_NO_XIM)
++ composingText = QString::null;
++ if ( selectedChars.size() < 128 )
++ selectedChars.resize( 128 );
++ selectedChars.fill( 0 );
++#endif // !QT_NO_XIM
++}
++
++
++void QXIMInputContext::close( const QString &errMsg )
++{
++ qDebug( errMsg );
++ emit deletionRequested();
++}
++
++
++bool QXIMInputContext::hasFocus() const
++{
++ return ( focusWidget() != 0 );
++}
++
++
++void QXIMInputContext::setMicroFocus(int x, int y, int, int h, QFont *f)
++{
++ QWidget *widget = focusWidget();
++ if ( qt_xim && widget ) {
++ QPoint p( x, y );
++ QPoint p2 = widget->mapTo( widget->topLevelWidget(), QPoint( 0, 0 ) );
++ p = widget->topLevelWidget()->mapFromGlobal( p );
++ setXFontSet( f ? *f : widget->font() );
++ setComposePosition(p.x(), p.y() + h);
++ setComposeArea(p2.x(), p2.y(), widget->width(), widget->height());
++ }
++
++}
++
++void QXIMInputContext::mouseHandler( int , QEvent::Type type,
++ Qt::ButtonState button,
++ Qt::ButtonState)
++{
++ if ( type == QEvent::MouseButtonPress ||
++ type == QEvent::MouseButtonDblClick ) {
++ // Don't reset Japanese input context here. Japanese input
++ // context sometimes contains a whole paragraph and has
++ // minutes of lifetime different to ephemeral one in other
++ // languages. The input context should be survived until
++ // focused again.
++ if ( ! isPreeditPreservationEnabled() )
++ reset();
++ }
++}
++
++void QXIMInputContext::setComposePosition(int x, int y)
++{
++#if !defined(QT_NO_XIM)
++ if (qt_xim && ic) {
++ XPoint point;
++ point.x = x;
++ point.y = y;
++
++ XVaNestedList preedit_attr =
++ XVaCreateNestedList(0,
++ XNSpotLocation, &point,
++
++ (char *) 0);
++ XSetICValues((XIC) ic, XNPreeditAttributes, preedit_attr, (char *) 0);
++ XFree(preedit_attr);
++ }
++#endif // !QT_NO_XIM
++}
++
++
++void QXIMInputContext::setComposeArea(int x, int y, int w, int h)
++{
++#if !defined(QT_NO_XIM)
++ if (qt_xim && ic) {
++ XRectangle rect;
++ rect.x = x;
++ rect.y = y;
++ rect.width = w;
++ rect.height = h;
++
++ XVaNestedList preedit_attr = XVaCreateNestedList(0,
++ XNArea, &rect,
++
++ (char *) 0);
++ XSetICValues((XIC) ic, XNPreeditAttributes, preedit_attr, (char *) 0);
++ XFree(preedit_attr);
++ }
++#endif
++}
++
++
++void QXIMInputContext::setXFontSet(const QFont &f)
++{
++#if !defined(QT_NO_XIM)
++ if (font == f) return; // nothing to do
++ font = f;
++
++ XFontSet fs = getFontSet(font);
++ if (fontset == fs) return; // nothing to do
++ fontset = fs;
++
++ XVaNestedList preedit_attr = XVaCreateNestedList(0, XNFontSet, fontset, (char *) 0);
++ XSetICValues((XIC) ic, XNPreeditAttributes, preedit_attr, (char *) 0);
++ XFree(preedit_attr);
++#else
++ Q_UNUSED( f );
++#endif
++}
++
++
++int QXIMInputContext::lookupString(XKeyEvent *event, QCString &chars,
++ KeySym *key, Status *status) const
++{
++ int count = 0;
++
++#if !defined(QT_NO_XIM)
++ if (qt_xim && ic) {
++ count = XmbLookupString((XIC) ic, event, chars.data(),
++ chars.size(), key, status);
++
++ if ((*status) == XBufferOverflow ) {
++ chars.resize(count + 1);
++ count = XmbLookupString((XIC) ic, event, chars.data(),
++ chars.size(), key, status);
++ }
++ }
++
++#endif // QT_NO_XIM
++
++ return count;
++}
++
++void QXIMInputContext::setFocus()
++{
++#if !defined(QT_NO_XIM)
++ if ( qt_xim && ic )
++ XSetICFocus((XIC) ic);
++#endif // !QT_NO_XIM
++}
++
++void QXIMInputContext::unsetFocus()
++{
++#if !defined(QT_NO_XIM)
++ if (qt_xim && ic)
++ XUnsetICFocus((XIC) ic);
++#endif // !QT_NO_XIM
++
++ // Don't reset Japanese input context here. Japanese input context
++ // sometimes contains a whole paragraph and has minutes of
++ // lifetime different to ephemeral one in other languages. The
++ // input context should be survived until focused again.
++ if ( ! isPreeditPreservationEnabled() )
++ reset();
++}
++
++
++bool QXIMInputContext::isPreeditRelocationEnabled()
++{
++ return ( language() == "ja" );
++}
++
++
++bool QXIMInputContext::isPreeditPreservationEnabled()
++{
++ return ( language() == "ja" );
++}
++
++
++QString QXIMInputContext::identifierName()
++{
++ // the name should be "xim" rather than "XIM" to be consistent
++ // with corresponding immodule of GTK+
++ return "xim";
++}
++
++
++QString QXIMInputContext::language()
++{
++#if !defined(QT_NO_XIM)
++ if ( qt_xim ) {
++ QString locale( XLocaleOfIM( qt_xim ) );
++
++ if ( locale.startsWith( "zh" ) ) {
++ // Chinese language should be formed as "zh_CN", "zh_TW", "zh_HK"
++ _language = locale.left( 5 );
++ } else {
++ // other languages should be two-letter ISO 639 language code
++ _language = locale.left( 2 );
++ }
++ }
++#endif
++ return _language;
++}
++
++#endif //QT_NO_IM
+--- plugins/src/inputmethods/xim/xim.pro
++++ plugins/src/inputmethods/xim/xim.pro
+@@ -0,0 +1,14 @@
++TEMPLATE = lib
++TARGET = qxim
++DESTDIR = ../../../inputmethods
++
++INCLUDEPATH += .
++CONFIG += qt warn_on debug plugin
++target.path += $$plugins.path/inputmethods
++INSTALLS += target
++
++# Input
++HEADERS += qximinputcontext.h \
++ qximinputcontextplugin.h
++SOURCES += qximinputcontext_x11.cpp \
++ qximinputcontextplugin.cpp
+--- plugins/src/src.pro
++++ plugins/src/src.pro
+@@ -1,10 +1,10 @@
+ TEMPLATE = subdirs
+
+ shared {
+- SUBDIRS *= accessible codecs imageformats sqldrivers styles
++ SUBDIRS *= accessible codecs imageformats inputmethods sqldrivers styles
+ embedded:SUBDIRS *= gfxdrivers
+ }
+ dll {
+- SUBDIRS *= accessible codecs imageformats sqldrivers styles
++ SUBDIRS *= accessible codecs imageformats inputmethods sqldrivers styles
+ embedded:SUBDIRS *= gfxdrivers
+ }
+--- README.immodule
++++ README.immodule
+@@ -0,0 +1,107 @@
++immodule for Qt
++
++
++* What is this?
++
++ immodule for Qt is a modular, extensible input method subsystem for
++ Qt.
++
++ This project brings functionality similar to the immodule for GTK+
++ to the Qt library. The main goal of the project is to extend and
++ enhance the input method support in the Qt library, in order to
++ provide a modern and powerful multi-language input system. Our short
++ term goal is to make Qt (especially Qt/X11) "up-to-date" with other
++ X11-based toolkits such as GTK+. We are also focusing on what the
++ input method API should be for future Qt versions.
++
++ See our webpage for further information.
++
++ http://immodule-qt.freedesktop.org/
++
++
++* About this release
++
++ qt-x11-immodule-unified-qt3.3.3-20040910 is a stable release. Since
++ it breaks backward compatibility (source and binary) about immodule
++ with our previous releases qt-x11-immodule-unified-qt3.3.3-20040819
++ and qt-x11-immodule-bc-qt3.3.2-20040623, optional immodule plugins
++ must be updated to proper version. See 'Optional immodule plugins'
++ section of our download page.
++
++ http://immodule-qt.freedesktop.org/Software/ImmoduleQtDownload
++
++ However, backward compatibility (source and binary) with normal Qt
++ 3.3.3 is kept in 'Binary Compatible' mode.
++
++
++* How to install
++
++ After extract the Qt archive, perform following instructions
++
++ cd qt-x11-free-3.3.3
++ patch -p0 < qt-x11-immodule-unified-qt3.3.3-20040910.diff
++ ./make-symlinks.sh
++ ./configure
++
++ Our patch provides following two configure options. Choose 'Binary
++ Compatible' for normal use.
++
++ Build Qt with 'Binary Compatible' immodule support (default)
++
++ configure -inputmethod
++
++ Build Qt without binary compatibility, but supports more advanced
++ immodule extensions. It cannot be used with ordinary application
++ binaries (i.e. the option is for developers)
++
++ configure -inputmethod -inputmethod-ext
++
++
++* How to use
++
++ - See users manual of each input method plugins
++
++ - Run qtconfig to choose your favorite XIM input style
++
++
++* Environment variables
++
++ Some environment variables are available for expert users and system
++ integrators. The specification is preliminary and may be changed
++ without notification. Be careful.
++
++ See following examples to use the variables.
++
++
++ - set "xim" input method as default
++
++ export QT_IM_MODULE=xim
++
++
++ - set "simple" composing input method as default
++
++ export QT_IM_MODULE=simple
++
++
++ - set "xim" input method as default, and disable input method
++ selection menu in the context menu
++
++ export QT_IM_SWITCHER=imsw-none
++ export QT_IM_MODULE=xim
++
++
++ - set "xim" input method as default, and enable input method
++ selection menu in the context menu (default configuration)
++
++ export QT_IM_SWITCHER=imsw-multi
++ export QT_IM_MODULE=xim
++
++
++ - set "iiimqcf" that has its own input method switching framework as
++ default, and disable input method selection menu in the context
++ menu. Such configuration is required by some system integrators to
++ provide unified user interface for global input method switching
++ over the desktop
++
++ export QT_IM_SWITCHER=imsw-none
++ export QT_IM_MODULE=iiimqcf
+--- src/inputmethod/qinputcontextfactory.cpp
++++ src/inputmethod/qinputcontextfactory.cpp
+@@ -0,0 +1,186 @@
++/****************************************************************************
++** $Id: qinputcontextfactory.cpp,v 1.2 2004/06/20 18:43:11 daisuke Exp $
++**
++** Implementation of QInputContextFactory class
++**
++** Created : 001103
++**
++** Copyright (C) 1992-2002 Trolltech AS. All rights reserved.
++**
++** This file is part of the widgets module of the Qt GUI Toolkit.
++**
++** This file may be distributed under the terms of the Q Public License
++** as defined by Trolltech AS of Norway and appearing in the file
++** LICENSE.QPL included in the packaging of this file.
++**
++** This file may be distributed and/or modified under the terms of the
++** GNU General Public License version 2 as published by the Free Software
++** Foundation and appearing in the file LICENSE.GPL included in the
++** packaging of this file.
++**
++** Licensees holding valid Qt Enterprise Edition licenses may use this
++** file in accordance with the Qt Commercial License Agreement provided
++** with the Software.
++**
++** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
++** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
++**
++** See http://www.trolltech.com/pricing.html or email sales@trolltech.com for
++** information about Qt Commercial License Agreements.
++** See http://www.trolltech.com/qpl/ for QPL licensing information.
++** See http://www.trolltech.com/gpl/ for GPL licensing information.
++**
++** Contact info@trolltech.com if any conditions of this licensing are
++** not clear to you.
++**
++**********************************************************************/
++
++#include "qinputcontextinterface_p.h" // up here for GCC 2.7.* compatibility
++#include "qinputcontextfactory.h"
++#include "qinputcontext.h"
++
++#ifndef QT_NO_IM
++
++#include "qapplication.h"
++
++#ifdef QT_THREAD_SUPPORT
++#include <private/qmutexpool_p.h>
++#endif // QT_THREAD_SUPPORT
++
++#include <stdlib.h>
++
++#include "qcleanuphandler.h"
++#include <private/qpluginmanager_p.h>
++#ifndef QT_NO_COMPONENT
++
++
++static QPluginManager<QInputContextFactoryInterface> *manager = 0;
++static QSingleCleanupHandler< QPluginManager<QInputContextFactoryInterface> > cleanup_manager;
++
++static void create_manager()
++{
++ if( manager ) // already created
++ return;
++
++#ifdef QT_THREAD_SUPPORT
++ // protect manager creation
++ QMutexLocker locker( qt_global_mutexpool ?
++ qt_global_mutexpool->get( &manager ) : 0);
++
++ // we check the manager pointer again to make sure that another thread
++ // has not created the manager before us.
++
++ if ( manager ) // already created
++ return;
++#endif
++
++ manager = new QPluginManager<QInputContextFactoryInterface>( IID_QInputContextFactory, QApplication::libraryPaths(), "/inputmethods", FALSE );
++
++ Q_CHECK_PTR( manager );
++ cleanup_manager.set( &manager );
++}
++
++#endif //QT_NO_COMPONENT
++
++
++/*!
++ This function generates the input context that has the identifier
++ name which is in agreement with \a key. \a widget is the client
++ widget of QInputContext. \a widget may be null.
++*/
++QInputContext *QInputContextFactory::create( const QString& key, QWidget *widget )
++{
++ QInputContext *ret = 0;
++ QString inputcontext = key;
++#ifndef QT_NO_COMPONENT
++ // make sure the manager is created
++ create_manager();
++
++ QInterfacePtr<QInputContextFactoryInterface> iface;
++ manager->queryInterface( inputcontext, &iface );
++
++ if ( iface ) {
++ ret = iface->create( inputcontext );
++#ifdef Q_WS_X11
++ if ( ret )
++ ret->setHolderWidget( widget );
++#endif
++ }
++#endif
++ return ret;
++}
++
++
++/*!
++ This function returns the list of the names input methods.
++ Only input methods included in default and placed under
++ $QTDIR/plugins/inputmethods are listed.
++*/
++QStringList QInputContextFactory::keys()
++{
++ QStringList list;
++#ifndef QT_NO_COMPONENT
++ // make sure the manager is created
++ create_manager();
++
++ list = manager->featureList();
++#endif //QT_NO_COMPONENT
++
++ return list;
++}
++
++
++QStringList QInputContextFactory::languages( const QString &key )
++{
++ QStringList result;
++#ifndef QT_NO_COMPONENT
++ // make sure the manager is created
++ create_manager();
++
++ QInterfacePtr<QInputContextFactoryInterface> iface;
++ manager->queryInterface( key, &iface );
++
++ if ( iface )
++ result = iface->languages( key );
++#endif //QT_NO_COMPONENT
++
++ return result;
++}
++
++
++QString QInputContextFactory::displayName( const QString &key )
++{
++ QString result( "" );
++#ifndef QT_NO_COMPONENT
++ // make sure the manager is created
++ create_manager();
++
++ QInterfacePtr<QInputContextFactoryInterface> iface;
++ manager->queryInterface( key, &iface );
++
++ if ( iface )
++ result = iface->displayName( key );
++#endif //QT_NO_COMPONENT
++
++ return result;
++}
++
++
++QString QInputContextFactory::description( const QString &key )
++{
++ QString result( "" );
++#ifndef QT_NO_COMPONENT
++ // make sure the manager is created
++ create_manager();
++
++ QInterfacePtr<QInputContextFactoryInterface> iface;
++ manager->queryInterface( key, &iface );
++
++ if ( iface )
++ result = iface->description( key );
++#endif //QT_NO_COMPONENT
++
++ return result;
++}
++
++#endif // QT_NO_IM
+--- src/inputmethod/qinputcontextfactory.h
++++ src/inputmethod/qinputcontextfactory.h
+@@ -0,0 +1,59 @@
++/****************************************************************************
++** $Id: qinputcontextfactory.h,v 1.1.1.1 2004/05/11 11:16:49 daisuke Exp $
++**
++** Definition of QInputContextFactory class
++**
++** Copyright (C) 2000-2002 Trolltech AS. All rights reserved.
++**
++** This file is part of the widgets module of the Qt GUI Toolkit.
++**
++** This file may be distributed under the terms of the Q Public License
++** as defined by Trolltech AS of Norway and appearing in the file
++** LICENSE.QPL included in the packaging of this file.
++**
++** This file may be distributed and/or modified under the terms of the
++** GNU General Public License version 2 as published by the Free Software
++** Foundation and appearing in the file LICENSE.GPL included in the
++** packaging of this file.
++**
++** Licensees holding valid Qt Enterprise Edition or Qt Professional Edition
++** licenses may use this file in accordance with the Qt Commercial License
++** Agreement provided with the Software.
++**
++** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
++** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
++**
++** See http://www.trolltech.com/pricing.html or email sales@trolltech.com for
++** information about Qt Commercial License Agreements.
++** See http://www.trolltech.com/qpl/ for QPL licensing information.
++** See http://www.trolltech.com/gpl/ for GPL licensing information.
++**
++** Contact info@trolltech.com if any conditions of this licensing are
++** not clear to you.
++**
++**********************************************************************/
++
++#ifndef QINPUTCONTEXTFACTORY_H
++#define QINPUTCONTEXTFACTORY_H
++
++#ifndef QT_H
++#include "qstringlist.h"
++#endif // QT_H
++
++#ifndef QT_NO_IM
++
++class QInputContext;
++class QWidget;
++
++class Q_EXPORT QInputContextFactory
++{
++public:
++ static QStringList keys();
++ static QInputContext *create( const QString &key, QWidget *widget ); // should be a toplevel widget
++ static QStringList languages( const QString &key );
++ static QString displayName( const QString &key );
++ static QString description( const QString &key );
++};
++#endif //QT_NO_IM
++
++#endif //QINPUTCONTEXTFACTORY_H
+--- src/inputmethod/qinputcontextinterface_p.h
++++ src/inputmethod/qinputcontextinterface_p.h
+@@ -0,0 +1,87 @@
++/****************************************************************************
++** $Id: qinputcontextinterface_p.h,v 1.2 2004/06/20 18:43:11 daisuke Exp $
++**
++** ...
++**
++** Copyright (C) 2000-2002 Trolltech AS. All rights reserved.
++**
++** This file is part of the widgets module of the Qt GUI Toolkit.
++**
++** This file may be distributed under the terms of the Q Public License
++** as defined by Trolltech AS of Norway and appearing in the file
++** LICENSE.QPL included in the packaging of this file.
++**
++** This file may be distributed and/or modified under the terms of the
++** GNU General Public License version 2 as published by the Free Software
++** Foundation and appearing in the file LICENSE.GPL included in the
++** packaging of this file.
++**
++** Licensees holding valid Qt Enterprise Edition or Qt Professional Edition
++** licenses may use this file in accordance with the Qt Commercial License
++** Agreement provided with the Software.
++**
++** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
++** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
++**
++** See http://www.trolltech.com/pricing.html or email sales@trolltech.com for
++** information about Qt Commercial License Agreements.
++** See http://www.trolltech.com/qpl/ for QPL licensing information.
++** See http://www.trolltech.com/gpl/ for GPL licensing information.
++**
++** Contact info@trolltech.com if any conditions of this licensing are
++** not clear to you.
++**
++**********************************************************************/
++
++#ifndef QINPUTCONTEXTINTERFACE_P_H
++#define QINPUTCONTEXTINTERFACE_P_H
++
++//
++// W A R N I N G
++// -------------
++//
++// This file is not part of the Qt API. This header file may
++// change from version to version without notice, or even be
++// removed.
++//
++// We mean it.
++//
++//
++
++#ifndef QT_H
++#include <private/qcom_p.h>
++#endif // QT_H
++
++#ifndef QT_NO_IM
++#ifndef QT_NO_COMPONENT
++
++class QWidget;
++class QInputContext;
++
++// old version interface in qt-x11-immodule-bc-qt3.3.2-20040623.diff:
++// {6C2B9EDE-B63C-14c9-A729-3C7643739C4C}
++//
++// new version interface:
++// {a5f5c63d-e044-11d8-9718-000d6077a78d}
++// {b0bf3e59-e526-11d8-80da-000d6077a78d}
++// {9ef05c7f-0272-11d9-846c-000d6077a78d}
++
++#ifndef IID_QInputContextFactory
++//#define IID_QInputContextFactory QUuid(0x6c2b9ede, 0xb63c, 0x14c9, 0xa7, 0x29, 0x3c, 0x76, 0x43, 0x73, 0x9c, 0x4c)
++//#define IID_QInputContextFactory QUuid(0xa5f5c63d, 0xe044, 0x11d8, 0x97, 0x18, 0x00, 0x0d, 0x60, 0x77, 0xa7, 0x8d)
++//#define IID_QInputContextFactory QUuid(0xb0bf3e59, 0xe526, 0x11d8, 0x80, 0xda, 0x00, 0x0d, 0x60, 0x77, 0xa7, 0x8d)
++#define IID_QInputContextFactory QUuid(0x9ef05c7f, 0x0272, 0x11d9, 0x84, 0x6c, 0x00, 0x0d, 0x60, 0x77, 0xa7, 0x8d)
++#endif
++
++struct Q_EXPORT QInputContextFactoryInterface : public QFeatureListInterface
++{
++ virtual QInputContext *create( const QString &key ) = 0;
++ virtual QStringList languages( const QString &key ) = 0;
++ virtual QString displayName( const QString &key ) = 0;
++ virtual QString description( const QString &key ) = 0;
++};
++
++#endif //QT_NO_COMPONENT
++#endif //QT_NO_IM
++
++#endif //QINPUTCONTEXTINTERFACE_P_H
+--- src/inputmethod/qinputcontextplugin.cpp
++++ src/inputmethod/qinputcontextplugin.cpp
+@@ -0,0 +1,231 @@
++/****************************************************************************
++** $Id: qinputcontextplugin.cpp,v 1.2 2004/06/20 18:43:11 daisuke Exp $
++**
++** Implementation of QInputContextPlugin class
++**
++** Created : 010920
++**
++** Copyright (C) 2001 Trolltech AS. All rights reserved.
++**
++** This file is part of the widgets module of the Qt GUI Toolkit.
++**
++** This file may be distributed under the terms of the Q Public License
++** as defined by Trolltech AS of Norway and appearing in the file
++** LICENSE.QPL included in the packaging of this file.
++**
++** This file may be distributed and/or modified under the terms of the
++** GNU General Public License version 2 as published by the Free Software
++** Foundation and appearing in the file LICENSE.GPL included in the
++** packaging of this file.
++**
++** Licensees holding valid Qt Enterprise Edition or Qt Professional Edition
++** licenses may use this file in accordance with the Qt Commercial License
++** Agreement provided with the Software.
++**
++** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
++** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
++**
++** See http://www.trolltech.com/pricing.html or email sales@trolltech.com for
++** information about Qt Commercial License Agreements.
++** See http://www.trolltech.com/qpl/ for QPL licensing information.
++** See http://www.trolltech.com/gpl/ for GPL licensing information.
++**
++** Contact info@trolltech.com if any conditions of this licensing are
++** not clear to you.
++**
++**********************************************************************/
++
++#include "qinputcontextplugin.h"
++
++#ifndef QT_NO_IM
++#ifndef QT_NO_COMPONENT
++
++#include "qinputcontextinterface_p.h"
++
++/*!
++ \class QInputContextPlugin qinputcontextplugin.h
++ \brief The QInputContextPlugin class provides an abstract base for custom QInputContext plugins.
++ \reentrant
++ \ingroup plugins
++
++ The input context plugin is a simple plugin interface that makes it
++ easy to create custom input contexts that can be loaded dynamically
++ into applications.
++
++ Writing a input context plugin is achieved by subclassing this
++ base class, reimplementing the pure virtual functions keys(),
++ create(), languages(), displayName() description() and exporting
++ the class with the \c Q_EXPORT_PLUGIN macro. See the \link
++ plugins-howto.html Qt Plugins documentation \endlink for details.
++
++ \sa QInputContext
++*/
++
++/*!
++ \fn QStringList QInputContextPlugin::keys() const
++
++ Returns the list of QInputContext keys this plugin provides.
++
++ These keys are usually the class names of the custom input context
++ that are implemented in the plugin.
++
++ Return value is the names to identify and specify input methods
++ for the input method switching mechanism and so on. The names have
++ to be consistent with QInputContext::identifierName(). The names
++ have to consist of ASCII characters only. See also
++ QInputContext::identifierName() for further information.
++
++ \sa create(), displayName(), QInputContext::identifierName()
++*/
++
++/*!
++ \fn QInputContext* QInputContextPlugin::create( const QString& key )
++
++ Creates and returns a QInputContext instance for the input context key \a key.
++ The input context key is usually the class name of the required input method.
++
++ \sa keys()
++*/
++
++/*!
++ \fn QStringList languages( const QString &key )
++
++ Returns what languages are supported by the QInputContext instance
++ specified by \a key.
++
++ The languages are expressed as language code (e.g. "zh_CN",
++ "zh_TW", "zh_HK", "ja", "ko", ...). An input context that suports
++ multiple languages can return all supported languages as
++ QStringList. The name has to be consistent with
++ QInputContextPlugin::language().
++
++ This information may be used to optimize user interface.
++
++ \sa QInputContext::language()
++*/
++
++/*!
++ \fn QString displayName( const QString &key )
++
++ Returns a user friendly i18n-ized name of the QInputContext
++ instance specified by \a key. This string may be appeared in a
++ menu and so on for users.
++
++ There are two different names with different responsibility in the
++ input method domain. This function returns one of them. Another
++ name is called 'identifier name' to identify and specify input
++ methods for the input method switching mechanism and so on.
++
++ Although tr( identifierName ) can provide user friendly i18n-ized
++ name without this function, the message catalog have to be managed
++ by Qt in the case. However, some sophisticated input method
++ framework manages their own message catalogs to provide this
++ i18n-ized name string. So we need this function rather than just
++ call tr() for identifier name.
++
++ \sa keys(), QInputContext::identifierName()
++*/
++
++/*!
++ \fn QString description( const QString &key )
++
++ Returns a i18n-ized brief description of the QInputContext
++ instance specified by \a key. This string may be appeared in some
++ user interfaces.
++*/
++
++
++
++class QInputContextPluginPrivate : public QInputContextFactoryInterface
++{
++public:
++ QInputContextPluginPrivate( QInputContextPlugin *p )
++ : plugin( p )
++ {
++ }
++
++ virtual ~QInputContextPluginPrivate();
++
++ QRESULT queryInterface( const QUuid &iid, QUnknownInterface **iface );
++ Q_REFCOUNT;
++
++ QStringList featureList() const;
++ QInputContext *create( const QString &key );
++ QStringList languages( const QString &key );
++ QString displayName( const QString &key );
++ QString description( const QString &key );
++
++private:
++ QInputContextPlugin *plugin;
++};
++
++QRESULT QInputContextPluginPrivate::queryInterface( const QUuid &iid, QUnknownInterface **iface )
++{
++ *iface = 0;
++
++ if ( iid == IID_QUnknown )
++ *iface = this;
++ else if ( iid == IID_QFeatureList )
++ *iface = this;
++ else if ( iid == IID_QInputContextFactory )
++ *iface = this;
++ else
++ return QE_NOINTERFACE;
++
++ (*iface)->addRef();
++ return QS_OK;
++}
++
++QInputContextPluginPrivate::~QInputContextPluginPrivate()
++{
++ delete plugin;
++}
++
++QStringList QInputContextPluginPrivate::featureList() const
++{
++ return plugin->keys();
++}
++
++QInputContext *QInputContextPluginPrivate::create( const QString &key )
++{
++ return plugin->create( key );
++}
++
++QStringList QInputContextPluginPrivate::languages( const QString &key )
++{
++ return plugin->languages( key );
++}
++
++QString QInputContextPluginPrivate::displayName( const QString &key )
++{
++ return plugin->displayName( key );
++}
++
++QString QInputContextPluginPrivate::description( const QString &key )
++{
++ return plugin->description( key );
++}
++
++
++/*!
++ Constructs a input context plugin. This is invoked automatically by the
++ \c Q_EXPORT_PLUGIN macro.
++*/
++QInputContextPlugin::QInputContextPlugin()
++ : QGPlugin( d = new QInputContextPluginPrivate( this ) )
++{
++}
++
++/*!
++ Destroys the input context plugin.
++
++ You never have to call this explicitly. Qt destroys a plugin
++ automatically when it is no longer used.
++*/
++QInputContextPlugin::~QInputContextPlugin()
++{
++ // don't delete d, as this is deleted by d
++}
++
++#endif // QT_NO_COMPONENT
++#endif // QT_NO_IM
+--- src/inputmethod/qinputcontextplugin.h
++++ src/inputmethod/qinputcontextplugin.h
+@@ -0,0 +1,67 @@
++/****************************************************************************
++** $Id: qinputcontextplugin.h,v 1.2 2004/06/20 18:43:11 daisuke Exp $
++**
++** Definition of QInputContextPlugin class
++**
++** Created : 010920
++**
++** Copyright (C) 2001 Trolltech AS. All rights reserved.
++**
++** This file is part of the tools module of the Qt GUI Toolkit.
++**
++** This file may be distributed under the terms of the Q Public License
++** as defined by Trolltech AS of Norway and appearing in the file
++** LICENSE.QPL included in the packaging of this file.
++**
++** This file may be distributed and/or modified under the terms of the
++** GNU General Public License version 2 as published by the Free Software
++** Foundation and appearing in the file LICENSE.GPL included in the
++** packaging of this file.
++**
++** Licensees holding valid Qt Enterprise Edition or Qt Professional Edition
++** licenses may use this file in accordance with the Qt Commercial License
++** Agreement provided with the Software.
++**
++** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
++** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
++**
++** See http://www.trolltech.com/pricing.html or email sales@trolltech.com for
++** information about Qt Commercial License Agreements.
++** See http://www.trolltech.com/qpl/ for QPL licensing information.
++** See http://www.trolltech.com/gpl/ for GPL licensing information.
++**
++** Contact info@trolltech.com if any conditions of this licensing are
++** not clear to you.
++**
++**********************************************************************/
++
++#ifndef QINPUTCONTEXTPLUGIN_H
++#define QINPUTCONTEXTPLUGIN_H
++
++#ifndef QT_H
++#include "qgplugin.h"
++#include "qstringlist.h"
++#endif // QT_H
++
++#ifndef QT_NO_IM
++class QInputContext;
++class QInputContextPluginPrivate;
++
++class Q_EXPORT QInputContextPlugin : public QGPlugin
++{
++ Q_OBJECT
++public:
++ QInputContextPlugin();
++ ~QInputContextPlugin();
++
++ virtual QStringList keys() const = 0;
++ virtual QInputContext *create( const QString &key ) = 0;
++ virtual QStringList languages( const QString &key ) = 0;
++ virtual QString displayName( const QString &key ) = 0;
++ virtual QString description( const QString &key ) = 0;
++
++private:
++ QInputContextPluginPrivate *d;
++};
++#endif // QT_NO_IM
++#endif // QINPUTCONTEXTPLUGIN_H
+--- src/inputmethod/qt_inputmethod.pri
++++ src/inputmethod/qt_inputmethod.pri
+@@ -0,0 +1,10 @@
++# Qt inputmetod module
++
++inputmethod {
++ INPUTMETHOD_P = inputmethod
++ HEADERS +=$$INPUTMETHOD_H/qinputcontextfactory.h \
++ $$INPUTMETHOD_P/qinputcontextinterface_p.h \
++ $$INPUTMETHOD_H/qinputcontextplugin.h
++ SOURCES +=$$INPUTMETHOD_CPP/qinputcontextfactory.cpp \
++ $$INPUTMETHOD_CPP/qinputcontextplugin.cpp
++}
+--- src/kernel/qapplication.cpp
++++ src/kernel/qapplication.cpp
+@@ -3161,6 +3161,35 @@
+ };
+ }
+
++#if !defined(QT_NO_IM)
++ // if this is one of the compressible IM events, do compression
++ else if ( event->type() == QEvent::IMCompose ) {
++ l->last();
++ QPostEvent * cur = 0;
++ for ( ;; ) {
++ while ( (cur=l->current()) != 0 &&
++ ( cur->receiver != receiver ||
++ cur->event == 0 ||
++ cur->event->type() != event->type() ||
++ cur->event->type() != QEvent::IMStart ) )
++ l->prev();
++ if ( l->current() != 0 ) {
++ // IMCompose must not be compressed with another one
++ // beyond its IMStart boundary
++ if ( cur->event->type() == QEvent::IMStart ) {
++ break;
++ } else if ( cur->event->type() == QEvent::IMCompose ) {
++ QIMComposeEvent * e = (QIMComposeEvent *)(cur->event);
++ *e = *(QIMComposeEvent *)event;
++ delete event;
++ return;
++ }
++ }
++ break;
++ };
++ }
++#endif
++
+ // if no compression could be done, just append something
+ event->posted = TRUE;
+ QPostEvent * pe = new QPostEvent( receiver, event );
+@@ -3307,6 +3336,23 @@
+
+ void QApplication::removePostedEvents( QObject *receiver )
+ {
++ removePostedEvents( receiver, 0 );
++}
++
++/*!
++ Removes all events that have the event type \a event_type posted
++ using postEvent() for \a receiver.
++
++ The events are \e not dispatched, instead they are removed from the
++ queue.
++
++ If \a event_type is 0, all the events are removed from the queue.
++
++ \threadsafe
++*/
++
++void QApplication::removePostedEvents( QObject *receiver, int event_type )
++{
+ if ( !receiver )
+ return;
+
+@@ -3325,18 +3371,24 @@
+ // leave the QPostEvent objects; they'll be deleted by
+ // sendPostedEvents().
+ QPostEventList * l = receiver->postedEvents;
+- receiver->postedEvents = 0;
+ l->first();
+ QPostEvent * pe;
+ while( (pe=l->current()) != 0 ) {
+- if ( pe->event ) {
+- pe->event->posted = FALSE;
+- delete pe->event;
+- pe->event = 0;
++ if ( !event_type || pe->event->type() == event_type ) {
++ if ( pe->event ) {
++ pe->event->posted = FALSE;
++ delete pe->event;
++ pe->event = 0;
++ }
++ l->remove();
++ } else {
++ l->next();
+ }
+- l->remove();
+ }
+- delete l;
++ if ( !event_type || !l->count() ) {
++ receiver->postedEvents = 0;
++ delete l;
++ }
+ }
+
+
+@@ -3521,6 +3573,8 @@
+ focus_widget = 0;
+ #ifdef Q_WS_WIN
+ QInputContext::accept( tmp );
++#elif defined(Q_WS_X11)
++ tmp->unfocusInputContext();
+ #endif
+ QApplication::sendSpontaneousEvent( tmp, &out );
+ } else if ( active_window ) {
+--- src/kernel/qapplication.h
++++ src/kernel/qapplication.h
+@@ -51,6 +51,9 @@
+ class QStyle;
+ class QTranslator;
+ class QEventLoop;
++#if defined(Q_WS_X11)
++class QIMEvent;
++#endif
+ #if defined(Q_WS_QWS)
+ class QWSDecoration;
+ #endif
+@@ -272,8 +275,19 @@
+ virtual void saveState( QSessionManager& sm );
+ #endif
+ #if defined(Q_WS_X11)
++#if !defined(QT_NO_IM_EXTENSIONS)
++ virtual QWidget *locateICHolderWidget( QWidget *w );
++ virtual QWidgetList *icHolderWidgets();
++ static void create_im();
++ static void close_im();
++#else
++ QWidget *locateICHolderWidget( QWidget *w );
++ QWidgetList *icHolderWidgets();
+ static void create_xim();
+ static void close_xim();
++#endif
++ static QString defaultInputMethod();
++ void changeAllInputContext( const QString & );
+ static bool x11_apply_settings();
+ #endif
+ void wakeUpGuiThread();
+@@ -328,6 +342,12 @@
+ friend void qt_init(int *, char **, QApplication::Type);
+ #endif
+
++#if defined(Q_WS_X11)
++private slots:
++ void postIMEvent( QObject *receiver, QIMEvent *event );
++#endif
++
++private:
+ #ifdef QT_THREAD_SUPPORT
+ static QMutex *qt_mutex;
+ #endif // QT_THREAD_SUPPORT
+@@ -377,9 +397,12 @@
+ static QString* session_key;
+ bool is_session_restored;
+ #endif
+-#if defined(Q_WS_X11) && !defined (QT_NO_STYLE )
++#if defined(Q_WS_X11)
++#if !defined (QT_NO_STYLE)
+ static void x11_initialize_style();
+ #endif
++ static QString defaultIM; // default input method's name in this application.
++#endif
+
+ static QSize app_strut;
+ #ifndef QT_NO_COMPONENT
+@@ -396,6 +419,7 @@
+
+ static bool sendSpontaneousEvent( QObject *receiver, QEvent *event );
+ static void removePostedEvent( QEvent * );
++ static void removePostedEvents( QObject *receiver, int event_type );
+
+ friend class QWidget;
+ friend class QETWidget;
+--- src/kernel/qapplication_x11.cpp
++++ src/kernel/qapplication_x11.cpp
+@@ -89,7 +89,9 @@
+ #include "qfileinfo.h"
+
+ // Input method stuff - UNFINISHED
+-#include "qinputcontext_p.h"
++#ifndef QT_NO_IM
++#include "qinputcontext.h"
++#endif // QT_NO_IM
+ #include "qinternal_p.h" // shared double buffer cleanup
+
+ #if defined(QT_THREAD_SUPPORT)
+@@ -189,10 +191,9 @@
+ static const char *mwGeometry = 0; // main widget geometry
+ static const char *mwTitle = 0; // main widget title
+ //Ming-Che 10/10
+-static char *ximServer = 0; // XIM Server will connect to
++char *qt_ximServer = 0; // XIM Server will connect to
+ static bool mwIconic = FALSE; // main widget iconified
+ //Ming-Che 10/10
+-static bool noxim = FALSE; // connect to xim or not
+ static Display *appDpy = 0; // X11 application display
+ static char *appDpyName = 0; // X11 display name
+ static bool appForeignDpy = FALSE; // we didn't create display
+@@ -391,14 +392,14 @@
+
+
+ #if !defined(QT_NO_XIM)
+-XIM qt_xim = 0;
++//XIM qt_xim = 0;
+ XIMStyle qt_xim_style = 0;
++XIMStyle qt_xim_preferred_style = 0;
+ static XIMStyle xim_default_style = XIMPreeditCallbacks | XIMStatusNothing;
+-static XIMStyle xim_preferred_style = 0;
+ #endif
+
+-static int composingKeycode=0;
+-static QTextCodec * input_mapper = 0;
++int qt_ximComposingKeycode=0;
++QTextCodec * qt_input_mapper = 0;
+
+ Q_EXPORT Time qt_x_time = CurrentTime;
+ Q_EXPORT Time qt_x_user_time = CurrentTime;
+@@ -511,8 +512,7 @@
+ void setWFlags( WFlags f ) { QWidget::setWFlags(f); }
+ void clearWFlags( WFlags f ) { QWidget::clearWFlags(f); }
+ bool translateMouseEvent( const XEvent * );
+- bool translateKeyEventInternal( const XEvent *, int& count, QString& text, int& state, char& ascii, int &code,
+- QEvent::Type &type, bool willRepeat=FALSE );
++ bool translateKeyEventInternal( const XEvent *, int& count, QString& text, int& state, char& ascii, int &code, QEvent::Type &type, bool willRepeat=FALSE, bool statefulTranslation=TRUE );
+ bool translateKeyEvent( const XEvent *, bool grab );
+ bool translatePaintEvent( const XEvent * );
+ bool translateConfigEvent( const XEvent * );
+@@ -529,114 +529,120 @@
+
+
+ // ************************************************************************
+-// X Input Method support
++// Input Method support
+ // ************************************************************************
+
+-#if !defined(QT_NO_XIM)
++/*!
++ An identifier name of the default input method.
++*/
++QString QApplication::defaultIM = "imsw-multi";
+
+-#if defined(Q_C_CALLBACKS)
+-extern "C" {
+-#endif // Q_C_CALLBACKS
+
+-#ifdef USE_X11R6_XIM
+- static void xim_create_callback(XIM /*im*/,
+- XPointer /*client_data*/,
+- XPointer /*call_data*/)
+- {
+- // qDebug("xim_create_callback");
+- QApplication::create_xim();
+- }
++/*!
++ This function handles the query about location of the widget
++ holding the QInputContext instance for widget \a w.
+
+- static void xim_destroy_callback(XIM /*im*/,
+- XPointer /*client_data*/,
+- XPointer /*call_data*/)
+- {
+- // qDebug("xim_destroy_callback");
+- QApplication::close_xim();
+- XRegisterIMInstantiateCallback(appDpy, 0, 0, 0,
+- (XIMProc) xim_create_callback, 0);
+- }
++ The input context is used for text input to widget \a w. By
++ default, it returns the top-level widget of \a w.
+
+-#endif // USE_X11R6_XIM
++ If you want to change the mapping of widget \w to QInputContext
++ instance, reimplement both this function and
++ QApplication::icHolderWidgets(). For example, suppose a tabbed web
++ browser. The browser should allocate a input context per tab
++ widget because users may switch the tabs and input a new text
++ during previous input contexts live.
+
+-#if defined(Q_C_CALLBACKS)
++ See also 'Sharing input context between text widgets' and 'Preedit
++ preservation' section of the class description of QInputContext.
++
++ \sa QInputContext, icHolderWidgets()
++*/
++QWidget *QApplication::locateICHolderWidget( QWidget *w )
++{
++ return w->topLevelWidget();
+ }
+-#endif // Q_C_CALLBACKS
+
+-#endif // QT_NO_XIM
+
++/*!
++ This function returns all widgets holding QInputContext.
+
+-/*! \internal
+- Creates the application input method.
+- */
+-void QApplication::create_xim()
++ By default, This function returns top-level widgets. So if you
++ want to change the mapping of a widget to QInputContext instance,
++ you must override this function and locateICHolderWidget().
++
++ \sa locateICHolderWidget()
++*/
++QWidgetList *QApplication::icHolderWidgets()
+ {
+-#ifndef QT_NO_XIM
+- qt_xim = XOpenIM( appDpy, 0, 0, 0 );
+- if ( qt_xim ) {
++ return QApplication::topLevelWidgets();
++}
+
+-#ifdef USE_X11R6_XIM
+- XIMCallback destroy;
+- destroy.callback = (XIMProc) xim_destroy_callback;
+- destroy.client_data = 0;
+- if ( XSetIMValues( qt_xim, XNDestroyCallback, &destroy, (char *) 0 ) != 0 )
+- qWarning( "Xlib dosn't support destroy callback");
+-#endif // USE_X11R6_XIM
+-
+- XIMStyles *styles = 0;
+- XGetIMValues(qt_xim, XNQueryInputStyle, &styles, (char *) 0, (char *) 0);
+- if ( styles ) {
+- int i;
+- for ( i = 0; !qt_xim_style && i < styles->count_styles; i++ ) {
+- if ( styles->supported_styles[i] == xim_preferred_style ) {
+- qt_xim_style = xim_preferred_style;
+- break;
+- }
+- }
+- // if the preferred input style couldn't be found, look for
+- // Nothing
+- for ( i = 0; !qt_xim_style && i < styles->count_styles; i++ ) {
+- if ( styles->supported_styles[i] == (XIMPreeditNothing |
+- XIMStatusNothing) ) {
+- qt_xim_style = XIMPreeditNothing | XIMStatusNothing;
+- break;
+- }
+- }
+- // ... and failing that, None.
+- for ( i = 0; !qt_xim_style && i < styles->count_styles; i++ ) {
+- if ( styles->supported_styles[i] == (XIMPreeditNone |
+- XIMStatusNone) ) {
+- qt_xim_style = XIMPreeditNone | XIMStatusNone;
+- break;
+- }
+- }
+
+- // qDebug("QApplication: using im style %lx", qt_xim_style);
+- XFree( (char *)styles );
+- }
++/*!
++ This function replaces all QInputContext instances in the
++ application. The function's argument is the identifier name of
++ the newly selected input method.
++*/
++void QApplication::changeAllInputContext( const QString &identifierName )
++{
++ QWidgetList *list = qApp->icHolderWidgets();
++ QWidgetListIt it(*list);
++ while(it.current()) {
++ it.current()->changeInputContext( identifierName );
++ ++it;
++ }
++ delete list;
++
++ // defaultIM = identifierName ; // Change of defaultIM -- default input method -- may be enabled.
++}
+
+- if ( qt_xim_style ) {
+
+-#ifdef USE_X11R6_XIM
+- XUnregisterIMInstantiateCallback(appDpy, 0, 0, 0,
+- (XIMProc) xim_create_callback, 0);
+-#endif // USE_X11R6_XIM
+-
+- QWidgetList *list= qApp->topLevelWidgets();
+- QWidgetListIt it(*list);
+- QWidget * w;
+- while( (w=it.current()) != 0 ) {
+- ++it;
+- w->createTLSysExtra();
+- }
+- delete list;
+- } else {
+- // Give up
+- qWarning( "No supported input style found."
+- " See InputMethod documentation.");
+- close_xim();
+- }
++/*!
++ \internal
++ This is an internal function, you should never call this.
++
++ \sa QInputContext::imEventGenerated()
++*/
++void QApplication::postIMEvent( QObject *receiver, QIMEvent *event )
++{
++ if ( event->type() == QEvent::IMCompose ) {
++ // enable event compression to reduce preedit flicker on fast
++ // typing
++ postEvent( receiver, event );
++ } else {
++ // cancel queued preedit update
++ if ( event->type() == QEvent::IMEnd )
++ removePostedEvents( receiver, QEvent::IMCompose );
++
++ // to avoid event receiving order inversion between QKeyEvent
++ // and QIMEvent, we must send IMStart and IMEnd via
++ // sendEvent().
++ sendEvent( receiver, event );
++ delete event;
+ }
++}
++
++
++/*!
++ This function returns the identifier name of the default input
++ method in this Application. The value is identical to the value of
++ QApplication::defaultIM.
++*/
++QString QApplication::defaultInputMethod()
++{
++ return QApplication::defaultIM;
++}
++
++
++#if !defined(QT_NO_IM_EXTENSIONS)
++/*! \internal
++ Creates the application input method.
++*/
++void QApplication::create_im()
++{
++#ifndef QT_NO_XIM
++ if ( ! qt_xim_preferred_style ) // no configured input style, use the default
++ qt_xim_preferred_style = xim_default_style;
+ #endif // QT_NO_XIM
+ }
+
+@@ -644,6 +650,43 @@
+ /*! \internal
+ Closes the application input method.
+ */
++void QApplication::close_im()
++{
++ QWidgetList *list = qApp->icHolderWidgets();
++ QWidgetListIt it(*list);
++ while(it.current()) {
++ it.current()->destroyInputContext();
++ ++it;
++ }
++ delete list;
++}
++
++#else
++
++/*! \internal
++ Creates the application input method.
++*/
++void QApplication::create_xim()
++{
++#ifndef QT_NO_XIM
++ if ( ! qt_xim_preferred_style ) // no configured input style, use the default
++ qt_xim_preferred_style = xim_default_style;
++#endif // QT_NO_XIM
++
++ QWidgetList *list= qApp->topLevelWidgets();
++ QWidgetListIt it(*list);
++ QWidget * w;
++ while( (w=it.current()) != 0 ) {
++ ++it;
++ w->createTLSysExtra();
++ }
++ delete list;
++}
++
++
++ /*! \internal
++ Closes the application input method.
++ */
+ void QApplication::close_xim()
+ {
+ #ifndef QT_NO_XIM
+@@ -651,7 +694,10 @@
+ // XCloseIM( qt_xim );
+ // We prefer a less serious memory leak
+
+- qt_xim = 0;
++ // if ( qt_xim )
++ // qt_xim = 0;
++
++#endif // QT_NO_XIM
+ QWidgetList *list = qApp->topLevelWidgets();
+ QWidgetListIt it(*list);
+ while(it.current()) {
+@@ -659,9 +705,8 @@
+ ++it;
+ }
+ delete list;
+-#endif // QT_NO_XIM
+ }
+-
++#endif
+
+ /*****************************************************************************
+ Default X error handlers
+@@ -1032,18 +1077,40 @@
+ settings.readBoolEntry("/qt/useRtlExtensions", FALSE);
+
+ #ifndef QT_NO_XIM
+- if (xim_preferred_style == 0) {
++ if (qt_xim_preferred_style == 0) {
+ QString ximInputStyle =
+ settings.readEntry( "/qt/XIMInputStyle",
+ QObject::trUtf8( "On The Spot" ) ).lower();
+ if ( ximInputStyle == "on the spot" )
+- xim_preferred_style = XIMPreeditCallbacks | XIMStatusNothing;
++ qt_xim_preferred_style = XIMPreeditCallbacks | XIMStatusNothing;
+ else if ( ximInputStyle == "over the spot" )
+- xim_preferred_style = XIMPreeditPosition | XIMStatusNothing;
++ qt_xim_preferred_style = XIMPreeditPosition | XIMStatusNothing;
+ else if ( ximInputStyle == "off the spot" )
+- xim_preferred_style = XIMPreeditArea | XIMStatusArea;
++ qt_xim_preferred_style = XIMPreeditArea | XIMStatusArea;
+ else if ( ximInputStyle == "root" )
+- xim_preferred_style = XIMPreeditNothing | XIMStatusNothing;
++ qt_xim_preferred_style = XIMPreeditNothing | XIMStatusNothing;
++ }
++#endif
++
++#ifndef QT_NO_IM
++ /*
++ The identifier name of an input method is acquired from the
++ configuration file as a default. If a environment variable
++ "QT_IM_SWITCHER" is not empty it will overwrite the
++ configuration file. The "imsw-multi" becomes the default if the entry
++ is not configured.
++ */
++ if ( getenv( "QT_IM_SWITCHER" ) )
++ defaultIM = getenv( "QT_IM_SWITCHER" );
++#ifndef QT_NO_IM_EXTENSIONS
++ else
++ defaultIM = settings.readEntry( "/qt/DefaultInputMethodSwitcher", "imsw-multi" );
++#endif
++
++ // defaultIM is restricted to be an IM-switcher. An IM-switcher
++ // has a 'imsw-' prefix
++ if ( ! defaultIM.startsWith( "imsw-" ) ) {
++ defaultIM = "imsw-multi";
+ }
+ #endif
+
+@@ -1079,19 +1146,19 @@
+ // Always use the locale codec, since we have no examples of non-local
+ // XIMs, and since we cannot get a sensible answer about the encoding
+ // from the XIM.
+- input_mapper = QTextCodec::codecForLocale();
++ qt_input_mapper = QTextCodec::codecForLocale();
+
+ } else {
+ if ( !qstricmp( data, "locale" ) )
+- input_mapper = QTextCodec::codecForLocale();
++ qt_input_mapper = QTextCodec::codecForLocale();
+ else
+- input_mapper = QTextCodec::codecForName( data );
++ qt_input_mapper = QTextCodec::codecForName( data );
+ // make sure we have an input codec
+- if( !input_mapper )
+- input_mapper = QTextCodec::codecForName( "ISO 8859-1" );
++ if( !qt_input_mapper )
++ qt_input_mapper = QTextCodec::codecForName( "ISO 8859-1" );
+ }
+- if ( input_mapper->mibEnum() == 11 ) // 8859-8
+- input_mapper = QTextCodec::codecForName( "ISO 8859-8-I");
++ if ( qt_input_mapper->mibEnum() == 11 ) // 8859-8
++ qt_input_mapper = QTextCodec::codecForName( "ISO 8859-8-I");
+ if( data )
+ XFree( (char *)data );
+ }
+@@ -1529,6 +1596,8 @@
+
+ #define XK_MISCELLANY
+ #define XK_LATIN1
++#define XK_KOREAN
++#define XK_XKB_KEYS
+ #include <X11/keysymdef.h>
+
+ // ### This should be static but it isn't because of the friend declaration
+@@ -1619,10 +1688,7 @@
+ //Ming-Che 10/10
+ } else if ( arg == "-im" ) {
+ if ( ++i < argc )
+- ximServer = argv[i];
+- } else if ( arg == "-noxim" ) {
+- noxim=TRUE;
+- //
++ qt_ximServer = argv[i];
+ } else if ( arg == "-iconic" ) {
+ mwIconic = !mwIconic;
+ } else if ( arg == "-ncols" ) { // xv and netscape use this name
+@@ -1642,17 +1708,17 @@
+ if ( ++i < argc ) {
+ QCString s = QCString(argv[i]).lower();
+ if ( s == "onthespot" )
+- xim_preferred_style = XIMPreeditCallbacks |
+- XIMStatusNothing;
++ qt_xim_preferred_style = XIMPreeditCallbacks |
++ XIMStatusNothing;
+ else if ( s == "overthespot" )
+- xim_preferred_style = XIMPreeditPosition |
+- XIMStatusNothing;
++ qt_xim_preferred_style = XIMPreeditPosition |
++ XIMStatusNothing;
+ else if ( s == "offthespot" )
+- xim_preferred_style = XIMPreeditArea |
+- XIMStatusArea;
++ qt_xim_preferred_style = XIMPreeditArea |
++ XIMStatusArea;
+ else if ( s == "root" )
+- xim_preferred_style = XIMPreeditNothing |
+- XIMStatusNothing;
++ qt_xim_preferred_style = XIMPreeditNothing |
++ XIMStatusNothing;
+ }
+ #endif
+ } else if ( arg == "-cmap" ) { // xv uses this name
+@@ -2100,34 +2166,13 @@
+ QApplication::setFont( f );
+ }
+
+-#ifndef QT_NO_XIM
+- if ( ! xim_preferred_style ) // no configured input style, use the default
+- xim_preferred_style = xim_default_style;
+-
+- qt_xim = 0;
+- QString ximServerName(ximServer);
+- if (ximServer)
+- ximServerName.prepend("@im=");
+- else
+- ximServerName = "";
+-
+- if ( !XSupportsLocale() )
+- qWarning("Qt: Locales not supported on X server");
+-
+-#ifdef USE_X11R6_XIM
+- else if ( XSetLocaleModifiers (ximServerName.ascii()) == 0 )
+- qWarning( "Qt: Cannot set locale modifiers: %s",
+- ximServerName.ascii());
+- else if (! noxim)
+- XRegisterIMInstantiateCallback(appDpy, 0, 0, 0,
+- (XIMProc) xim_create_callback, 0);
+-#else // !USE_X11R6_XIM
+- else if ( XSetLocaleModifiers ("") == 0 )
+- qWarning("Qt: Cannot set locale modifiers");
+- else if (! noxim)
+- QApplication::create_xim();
+-#endif // USE_X11R6_XIM
+-#endif // QT_NO_XIM
++#if !defined(QT_NO_IM)
++#if !defined(QT_NO_IM_EXTENSIONS)
++ QApplication::create_im();
++#else
++ QApplication::create_xim();
++#endif
++#endif
+
+ #if defined (QT_TABLET_SUPPORT)
+ int ndev,
+@@ -2376,9 +2421,12 @@
+ XCloseDevice( appDpy, devEraser );
+ #endif
+
+-#if !defined(QT_NO_XIM)
+- if ( qt_xim )
+- QApplication::close_xim();
++#if !defined(QT_NO_IM)
++#if !defined(QT_NO_IM_EXTENSIONS)
++ QApplication::close_im();
++#else
++ QApplication::close_xim();
++#endif
+ #endif
+
+ if ( qt_is_gui_used ) {
+@@ -3237,77 +3285,59 @@
+ }
+ }
+
+- int xkey_keycode = event->xkey.keycode;
+- if ( XFilterEvent( event,
+- keywidget ? keywidget->topLevelWidget()->winId() : None ) ) {
+- if ( keywidget )
+- composingKeycode = xkey_keycode; // ### not documented in xlib
+-
+-#ifndef QT_NO_XIM
+- if ( event->type != XKeyPress || ! (qt_xim_style & XIMPreeditCallbacks) )
+- return 1;
+-
+- /*
+- * The Solaris htt input method will transform a ClientMessage
+- * event into a filtered KeyPress event, in which case our
+- * keywidget is still zero.
+- */
+- if ( ! keywidget ) {
+- keywidget = (QETWidget*)QWidget::keyboardGrabber();
+- if ( keywidget ) {
+- grabbed = TRUE;
+- } else {
+- if ( focus_widget )
+- keywidget = (QETWidget*)focus_widget;
+- if ( !keywidget ) {
+- if ( inPopupMode() ) // no focus widget, see if we have a popup
+- keywidget = (QETWidget*) activePopupWidget();
+- else if ( widget )
+- keywidget = (QETWidget*)widget->topLevelWidget();
+- }
+- }
+- }
++#ifndef QT_NO_IM
++ // Filtering input events by the input context. It has to be taken
++ // place before any other key event consumers such as eventfilters
++ // and accelerators because some input methods require quite
++ // various key combination and sequences. It often conflicts with
++ // accelerators and so on, so we must give the input context the
++ // filtering opportunity first to ensure all input methods work
++ // properly regardless of application design.
+
+- /*
+- if the composition string has been emptied, we need to send
+- an IMEnd event. however, we have no way to tell if the user
+- has cancelled input, or if the user has accepted the
+- composition.
+-
+- so, we have to look for the next keypress and see if it is
+- the 'commit' key press (keycode == 0). if it is, we deliver
+- an IMEnd event with the final text, otherwise we deliver an
+- IMEnd with empty text (meaning the user has cancelled the
+- input).
+- */
+- QInputContext *qic =
+- (QInputContext *) keywidget->topLevelWidget()->topData()->xic;
+- extern bool qt_compose_emptied; // qinputcontext_x11.cpp
+- if ( qic && qic->composing && qic->focusWidget && qt_compose_emptied ) {
+- XEvent event2;
+- bool found = FALSE;
+- if ( XCheckTypedEvent( QPaintDevice::x11AppDisplay(),
+- XKeyPress, &event2 ) ) {
+- if ( event2.xkey.keycode == 0 ) {
+- // found a key event with the 'commit' string
+- found = TRUE;
+- XPutBackEvent( QPaintDevice::x11AppDisplay(), &event2 );
+- }
+- }
++#ifndef QT_NO_IM_EXTENSIONS
++ if( keywidget && keywidget->isEnabled() && keywidget->isInputMethodEnabled() ) {
++#else
++ if( keywidget && keywidget->isEnabled() ) {
++#endif
++ if( ( event->type==XKeyPress || event->type==XKeyRelease ) &&
++ sm_blockUserInput ) // block user interaction during session management
++ return TRUE;
+
+- if ( !found ) {
+- // no key event, so the user must have cancelled the composition
+- QIMEvent endevent( QEvent::IMEnd, QString::null, -1 );
+- QApplication::sendEvent( qic->focusWidget, &endevent );
++ // for XIM handling
++ QInputContext *qic = keywidget->getInputContext();
++ if( qic && qic->x11FilterEvent( keywidget, event ) )
++ return TRUE;
+
+- qic->focusWidget = 0;
+- }
++ // filterEvent() accepts QEvent *event rather than preexpanded key
++ // event attribute values. This is intended to pass other IM-related
++ // events in future. The IM-related events are supposed as
++ // QWheelEvent, QTabletEvent and so on. Other non IM-related events
++ // should not be forwarded to input contexts to prevent weird event
++ // handling.
++ if ( ( event->type == XKeyPress || event->type == XKeyRelease ) ) {
++ int code = -1;
++ int count = 0;
++ int state;
++ char ascii = 0;
++ QEvent::Type type;
++ QString text;
++
++ keywidget->translateKeyEventInternal( event, count, text,
++ state, ascii, code, type,
++ FALSE, FALSE );
++
++ // both key press/release is required for some complex
++ // input methods. don't eliminate anything.
++ QKeyEvent keyevent( type, code, ascii, state, text, FALSE, count );
+
+- qt_compose_emptied = FALSE;
++ if( qic && qic->filterEvent( &keyevent ) )
++ return TRUE;
+ }
+-#endif // QT_NO_XIM
+-
+- return 1;
++ } else
++#endif // QT_NO_IM
++ {
++ if ( XFilterEvent( event, None ) )
++ return TRUE;
+ }
+
+ if ( qt_x11EventFilter(event) ) // send through app filter
+@@ -3459,34 +3489,8 @@
+ case XKeyRelease:
+ {
+ if ( keywidget && keywidget->isEnabled() ) { // should always exist
+-#ifndef QT_NO_XIM
+- QInputContext *qic =
+- (QInputContext *) keywidget->topLevelWidget()->topData()->xic;
+-
+- if ((qt_xim_style & XIMPreeditCallbacks) && event->xkey.keycode == 0 &&
+- qic && qic->composing && qic->focusWidget) {
+- // input method has sent us a commit string
+- QCString data(513);
+- KeySym sym; // unused
+- Status status; // unused
+- QString text;
+- int count = qic->lookupString( &(event->xkey), data,
+- &sym, &status );
+- if ( count > 0 )
+- text = input_mapper->toUnicode( data, count );
+-
+- // qDebug( "sending IMEnd with %d chars", text.length() );
+- QIMEvent endevent( QEvent::IMEnd, text, -1 );
+- QApplication::sendEvent( qic->focusWidget, &endevent );
+-
+- qic->focusWidget = 0;
+- qic->text = QString::null;
+- } else
+-#endif // !QT_NO_XIM
+- {
+- // qDebug( "sending key event" );
+- keywidget->translateKeyEvent( event, grabbed );
+- }
++ // qDebug( "sending key event" );
++ keywidget->translateKeyEvent( event, grabbed );
+ }
+ break;
+ }
+@@ -4781,6 +4785,92 @@
+ 0x1005FF10, Qt::Key_F11, // hardcoded Sun F36 (labeled F11)
+ 0x1005FF11, Qt::Key_F12, // hardcoded Sun F37 (labeled F12)
+
++ // International input method support keys
++
++ // International & multi-key character composition
++ XK_Multi_key, Qt::Key_Multi_key,
++ XK_Codeinput, Qt::Key_Codeinput,
++ XK_SingleCandidate, Qt::Key_SingleCandidate,
++ XK_MultipleCandidate, Qt::Key_MultipleCandidate,
++ XK_PreviousCandidate, Qt::Key_PreviousCandidate,
++
++ // Misc Functions
++ XK_Mode_switch, Qt::Key_Mode_switch,
++ //XK_script_switch, Qt::Key_script_switch,
++ XK_script_switch, Qt::Key_Mode_switch,
++
++ // Japanese keyboard support
++ XK_Kanji, Qt::Key_Kanji,
++ XK_Muhenkan, Qt::Key_Muhenkan,
++ //XK_Henkan_Mode, Qt::Key_Henkan_Mode,
++ XK_Henkan_Mode, Qt::Key_Henkan,
++ XK_Henkan, Qt::Key_Henkan,
++ XK_Romaji, Qt::Key_Romaji,
++ XK_Hiragana, Qt::Key_Hiragana,
++ XK_Katakana, Qt::Key_Katakana,
++ XK_Hiragana_Katakana, Qt::Key_Hiragana_Katakana,
++ XK_Zenkaku, Qt::Key_Zenkaku,
++ XK_Hankaku, Qt::Key_Hankaku,
++ XK_Zenkaku_Hankaku, Qt::Key_Zenkaku_Hankaku,
++ XK_Touroku, Qt::Key_Touroku,
++ XK_Massyo, Qt::Key_Massyo,
++ XK_Kana_Lock, Qt::Key_Kana_Lock,
++ XK_Kana_Shift, Qt::Key_Kana_Shift,
++ XK_Eisu_Shift, Qt::Key_Eisu_Shift,
++ XK_Eisu_toggle, Qt::Key_Eisu_toggle,
++ //XK_Kanji_Bangou, Qt::Key_Kanji_Bangou,
++ //XK_Zen_Koho, Qt::Key_Zen_Koho,
++ //XK_Mae_Koho, Qt::Key_Mae_Koho,
++ XK_Kanji_Bangou, Qt::Key_Codeinput,
++ XK_Zen_Koho, Qt::Key_MultipleCandidate,
++ XK_Mae_Koho, Qt::Key_PreviousCandidate,
++
++#ifdef XK_KOREAN
++ // Korean keyboard support
++ XK_Hangul, Qt::Key_Hangul,
++ XK_Hangul_Start, Qt::Key_Hangul_Start,
++ XK_Hangul_End, Qt::Key_Hangul_End,
++ XK_Hangul_Hanja, Qt::Key_Hangul_Hanja,
++ XK_Hangul_Jamo, Qt::Key_Hangul_Jamo,
++ XK_Hangul_Romaja, Qt::Key_Hangul_Romaja,
++ //XK_Hangul_Codeinput, Qt::Key_Hangul_Codeinput,
++ XK_Hangul_Codeinput, Qt::Key_Codeinput,
++ XK_Hangul_Jeonja, Qt::Key_Hangul_Jeonja,
++ XK_Hangul_Banja, Qt::Key_Hangul_Banja,
++ XK_Hangul_PreHanja, Qt::Key_Hangul_PreHanja,
++ XK_Hangul_PostHanja, Qt::Key_Hangul_PostHanja,
++ //XK_Hangul_SingleCandidate, Qt::Key_Hangul_SingleCandidate,
++ //XK_Hangul_MultipleCandidate, Qt::Key_Hangul_MultipleCandidate,
++ //XK_Hangul_PreviousCandidate, Qt::Key_Hangul_PreviousCandidate,
++ XK_Hangul_SingleCandidate, Qt::Key_SingleCandidate,
++ XK_Hangul_MultipleCandidate, Qt::Key_MultipleCandidate,
++ XK_Hangul_PreviousCandidate, Qt::Key_PreviousCandidate,
++ XK_Hangul_Special, Qt::Key_Hangul_Special,
++ //XK_Hangul_switch, Qt::Key_Hangul_switch,
++ XK_Hangul_switch, Qt::Key_Mode_switch,
++#endif // XK_KOREAN
++
++ // dead keys
++ XK_dead_grave, Qt::Key_Dead_Grave,
++ XK_dead_acute, Qt::Key_Dead_Acute,
++ XK_dead_circumflex, Qt::Key_Dead_Circumflex,
++ XK_dead_tilde, Qt::Key_Dead_Tilde,
++ XK_dead_macron, Qt::Key_Dead_Macron,
++ XK_dead_breve, Qt::Key_Dead_Breve,
++ XK_dead_abovedot, Qt::Key_Dead_Abovedot,
++ XK_dead_diaeresis, Qt::Key_Dead_Diaeresis,
++ XK_dead_abovering, Qt::Key_Dead_Abovering,
++ XK_dead_doubleacute, Qt::Key_Dead_Doubleacute,
++ XK_dead_caron, Qt::Key_Dead_Caron,
++ XK_dead_cedilla, Qt::Key_Dead_Cedilla,
++ XK_dead_ogonek, Qt::Key_Dead_Ogonek,
++ XK_dead_iota, Qt::Key_Dead_Iota,
++ XK_dead_voiced_sound, Qt::Key_Dead_Voiced_Sound,
++ XK_dead_semivoiced_sound, Qt::Key_Dead_Semivoiced_Sound,
++ XK_dead_belowdot, Qt::Key_Dead_Belowdot,
++ XK_dead_hook, Qt::Key_Dead_Hook,
++ XK_dead_horn, Qt::Key_Dead_Horn,
++
+ // Special multimedia keys
+ // currently only tested with MS internet keyboard
+
+@@ -4998,9 +5088,9 @@
+ bool QETWidget::translateKeyEventInternal( const XEvent *event, int& count,
+ QString& text,
+ int& state,
+- char& ascii, int& code, QEvent::Type &type, bool willRepeat )
++ char& ascii, int& code, QEvent::Type &type, bool willRepeat, bool statefulTranslation )
+ {
+- QTextCodec *mapper = input_mapper;
++ QTextCodec *mapper = qt_input_mapper;
+ // some XmbLookupString implementations don't return buffer overflow correctly,
+ // so we increase the input buffer to allow for long strings...
+ // 256 chars * 2 bytes + 1 null-term == 513 bytes
+@@ -5047,6 +5137,11 @@
+
+ if ( type == QEvent::KeyPress ) {
+ bool mb=FALSE;
++ // commit string handling is done by
++ // QXIMInputContext::x11FilterEvent() and are passed to
++ // widgets via QIMEvent regardless of XIM style, so the
++ // following code is commented out.
++#if 0
+ if ( qt_xim ) {
+ QTLWExtra* xd = tlw->topData();
+ QInputContext *qic = (QInputContext *) xd->xic;
+@@ -5055,13 +5150,14 @@
+ count = qic->lookupString(&xkeyevent, chars, &key, &status);
+ }
+ }
++#endif
+ if ( !mb ) {
+ count = XLookupString( &xkeyevent,
+ chars.data(), chars.size(), &key, 0 );
+ }
+ if ( count && !keycode ) {
+- keycode = composingKeycode;
+- composingKeycode = 0;
++ keycode = qt_ximComposingKeycode;
++ qt_ximComposingKeycode = 0;
+ }
+ if ( key )
+ keyDict->replace( keycode, (void*)key );
+@@ -5138,15 +5234,18 @@
+ state = qt_x11_translateButtonState( keystate );
+
+ static int directionKeyEvent = 0;
+- if ( qt_use_rtl_extensions && type == QEvent::KeyRelease ) {
++ static unsigned int lastWinId = 0;
++ if ( qt_use_rtl_extensions && type == QEvent::KeyRelease && statefulTranslation ) {
+ if (directionKeyEvent == Key_Direction_R || directionKeyEvent == Key_Direction_L ) {
+ type = QEvent::KeyPress;
+ code = directionKeyEvent;
+ chars[0] = 0;
+ directionKeyEvent = 0;
++ lastWinId = 0;
+ return TRUE;
+ } else {
+ directionKeyEvent = 0;
++ lastWinId = 0;
+ }
+ }
+
+@@ -5156,10 +5255,14 @@
+ // (to figure out whether the Ctrl modifier is held while Shift is pressed,
+ // or Shift is held while Ctrl is pressed) since the 'state' doesn't tell
+ // us whether the modifier held is Left or Right.
+- if (qt_use_rtl_extensions && type == QEvent::KeyPress)
++ if ( qt_use_rtl_extensions && type == QEvent::KeyPress && statefulTranslation )
+ if (key == XK_Control_L || key == XK_Control_R || key == XK_Shift_L || key == XK_Shift_R) {
+- if (!directionKeyEvent)
++ if (!directionKeyEvent) {
+ directionKeyEvent = key;
++ // This code exists in order to check that
++ // the event is occurred in the same widget.
++ lastWinId = winId();
++ }
+ } else {
+ // this can no longer be a direction-changing accel.
+ // if any other key was pressed.
+@@ -5173,7 +5276,7 @@
+ // Qt keycodes between 128 and 255, but should rather use the
+ // QKeyEvent::text().
+ //
+- if ( key < 128 || (key < 256 && (!input_mapper || input_mapper->mibEnum()==4)) ) {
++ if ( key < 128 || (key < 256 && (!qt_input_mapper || qt_input_mapper->mibEnum()==4)) ) {
+ code = isprint((int)key) ? toupper((int)key) : 0; // upper-case key, if known
+ } else if ( key >= XK_F1 && key <= XK_F35 ) {
+ code = Key_F1 + ((int)key - XK_F1); // function keys
+@@ -5224,8 +5327,8 @@
+ chars[0] = 0;
+ }
+
+- if ( qt_use_rtl_extensions && type == QEvent::KeyPress ) {
+- if ( directionKeyEvent ) {
++ if ( qt_use_rtl_extensions && type == QEvent::KeyPress && statefulTranslation ) {
++ if ( directionKeyEvent && lastWinId == winId() ) {
+ if ( key == XK_Shift_L && directionKeyEvent == XK_Control_L ||
+ key == XK_Control_L && directionKeyEvent == XK_Shift_L ) {
+ directionKeyEvent = Key_Direction_L;
+@@ -5403,8 +5506,34 @@
+ translateKeyEventInternal( event, count, text, state, ascii, code, type );
+ }
+
++#ifndef QT_NO_IM
++ QInputContext *qic = getInputContext();
++#endif
++
+ // compress keys
+ if ( !text.isEmpty() && testWState(WState_CompressKeys) &&
++#ifndef QT_NO_IM
++ // Ordinary input methods require discrete key events to work
++ // properly, so key compression has to be disabled when input
++ // context exists.
++ //
++ // And further consideration, some complex input method
++ // require all key press/release events discretely even if
++ // the input method awares of key compression and compressed
++ // keys are ordinary alphabets. For example, the uim project
++ // is planning to implement "combinational shift" feature for
++ // a Japanese input method, uim-skk. It will work as follows.
++ //
++ // 1. press "r"
++ // 2. press "u"
++ // 3. release both "r" and "u" in arbitrary order
++ // 4. above key sequence generates "Ru"
++ //
++ // Of course further consideration about other participants
++ // such as key repeat mechanism is required to implement such
++ // feature.
++ ! qic &&
++#endif // QT_NO_IM
+ // do not compress keys if the key event we just got above matches
+ // one of the key ranges used to compute stopCompression
+ ! ( ( code >= Key_Escape && code <= Key_SysReq ) ||
+@@ -5463,7 +5592,12 @@
+
+ // autorepeat compression makes sense for all widgets (Windows
+ // does it automatically .... )
+- if ( event->type == XKeyPress && text.length() <= 1 ) {
++ if ( event->type == XKeyPress && text.length() <= 1
++#ifndef QT_NO_IM
++ // input methods need discrete key events
++ && ! qic
++#endif// QT_NO_IM
++ ) {
+ XEvent dummy;
+
+ for (;;) {
+--- src/kernel/qevent.cpp
++++ src/kernel/qevent.cpp
+@@ -732,6 +732,10 @@
+ the result of a known key (e.g. it may be the result of a compose
+ sequence or a keyboard macro, or due to key event compression).
+
++ Applications should not use the Qt latin 1 keycodes between 128
++ and 255, but should rather use the QKeyEvent::text(). This is
++ mainly for compatibility.
++
+ \sa QWidget::setKeyCompression()
+ */
+
+--- src/kernel/qinputcontext.cpp
++++ src/kernel/qinputcontext.cpp
+@@ -0,0 +1,856 @@
++/****************************************************************************
++** $Id: qinputcontext.cpp,v 1.6 2004/06/22 06:47:30 daisuke Exp $
++**
++** Implementation of QInputContext class
++**
++** Copyright (C) 2000-2003 Trolltech AS. All rights reserved.
++**
++** This file is part of the kernel module of the Qt GUI Toolkit.
++**
++** This file may be distributed under the terms of the Q Public License
++** as defined by Trolltech AS of Norway and appearing in the file
++** LICENSE.QPL included in the packaging of this file.
++**
++** This file may be distributed and/or modified under the terms of the
++** GNU General Public License version 2 as published by the Free Software
++** Foundation and appearing in the file LICENSE.GPL included in the
++** packaging of this file.
++**
++** Licensees holding valid Qt Enterprise Edition or Qt Professional Edition
++** licenses for Unix/X11 may use this file in accordance with the Qt Commercial
++** License Agreement provided with the Software.
++**
++** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
++** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
++**
++** See http://www.trolltech.com/pricing.html or email sales@trolltech.com for
++** information about Qt Commercial License Agreements.
++** See http://www.trolltech.com/qpl/ for QPL licensing information.
++** See http://www.trolltech.com/gpl/ for GPL licensing information.
++**
++** Contact info@trolltech.com if any conditions of this licensing are
++** not clear to you.
++**
++**********************************************************************/
++
++//#define QT_NO_IM_PREEDIT_RELOCATION
++
++#include "qinputcontext.h"
++
++#ifndef QT_NO_IM
++
++#include "qplatformdefs.h"
++
++#include "qapplication.h"
++#include "qwidget.h"
++#include "qpopupmenu.h"
++
++#include <stdlib.h>
++#include <limits.h>
++
++class QInputContextPrivate
++{
++public:
++ QInputContextPrivate()
++ : holderWidget( 0 ), composingWidget( 0 ), hasFocus( FALSE ),
++ isComposing( FALSE )
++#if !defined(QT_NO_IM_PREEDIT_RELOCATION)
++ , preeditString( QString::null ),
++ cursorPosition( -1 ), selLength ( 0 )
++#endif
++ {}
++
++ QWidget *holderWidget; // widget to which QInputContext instance belongs.
++ QWidget *composingWidget;
++ bool hasFocus;
++ bool isComposing;
++
++ void updateComposingState( const QString &text,
++ int newCursorPosition, int newSelLength ) {
++#if !defined(QT_NO_IM_PREEDIT_RELOCATION)
++ preeditString = text;
++ cursorPosition = newCursorPosition;
++ selLength = newSelLength;
++#endif
++ }
++
++ void resetComposingState() {
++ isComposing = FALSE;
++#if !defined(QT_NO_IM_PREEDIT_RELOCATION)
++ preeditString = QString::null;
++ cursorPosition = -1;
++ selLength = 0;
++#endif
++ }
++
++#if !defined(QT_NO_IM_PREEDIT_RELOCATION)
++ QString preeditString;
++ int cursorPosition;
++ int selLength;
++#endif
++};
++
++
++// UPDATED COMMENT REQUIRED -- 2004-07-08 YamaKen
++/*!
++ \class QInputContext qinputcontext.h
++ \brief The QInputContext class abstracts the input method dependent data and composing state.
++
++ \ingroup i18n
++
++ An input method is responsible to input complex text that cannot
++ be inputted via simple keymap. It converts a sequence of input
++ events (typically key events) into a text string through the input
++ method specific converting process. The class of the processes are
++ widely ranging from simple finite state machine to complex text
++ translator that pools a whole paragraph of a text with text
++ editing capability to perform grammar and semantic analysis.
++
++ To abstract such different input method specific intermediate
++ information, Qt offers the QInputContext as base class. The
++ concept is well known as 'input context' in the input method
++ domain. an input context is created for a text widget in response
++ to a demand. It is ensured that an input context is prepared for
++ an input method before input to a text widget.
++
++ Multiple input contexts that is belonging to a single input method
++ may concurrently coexist. Suppose multi-window text editor. Each
++ text widget of window A and B holds different QInputContext
++ instance which contains different state information such as
++ partially composed text.
++
++ \section1 Groups of functions:
++
++ \table
++ \header \i Context \i Functions
++
++ \row \i Receiving information \i
++ x11FilterEvent(),
++ filterEvent(),
++ setMicroFocus(),
++ mouseHandler()
++
++ \row \i Sending back composed text \i
++ sendIMEvent(),
++
++ \row \i State change notification \i
++ setFocus(),
++ unsetFocus(),
++ reset()
++
++ \row \i Context information \i
++ identifierName(),
++ language(),
++ font(),
++ isComposing(),
++
++ \endtable
++
++
++ \section1 Sharing input context between text widgets
++
++ Any input context can be shared between several text widgets to
++ reduce resource consumption. In ideal case, each text widgets
++ should be allocated dedicated input context. But some complex
++ input contexts require slightly heavy resource such as 100
++ kilobytes of memory. It prevents quite many text widgets from
++ being used concurrently.
++
++ To resolve such problem, we can share an input context. There is
++ one 'input context holder widget' per text widgets that shares
++ identical input context. In this model, the holder widget owns the
++ shared input context. Other text widgets access the input context
++ via QApplication::locateICHolderWidget(). But the access
++ convention is transparently hidden into QWidget, so developers are
++ not required to aware of it.
++
++ What developer should know is only the mapping function
++ QApplication::locateICHolderWidget(). It accepts a widget as
++ argument and returns its holder widget. Default implementation
++ returns the top-level widget of the widget as reasonable
++ assumption. But some applications should reimplement the function
++ to fit application specific usability. See
++ QApplication::locateICHolderWidget() for further information.
++
++
++ \section1 Preedit preservation
++
++ As described above, input contexts have wide variety of amount of
++ the state information in accordance with belonging input
++ method. It is ranging from 2-3 keystrokes of sequence in
++ deterministic input methods to hundreds of keystrokes with
++ semantic text refinement in complex input methods such as ordinary
++ Japanese input method. The difference requires the different reset
++ policies in losing input focus.
++
++ The former simple input method case, users will prefer resetting
++ the context to back to the neutral state when something
++ happened. Suppose a web browsing. The user scroll the page by
++ scrollbar after he or she has typed a half of the valid key
++ sequence into a text widget. In the case, the input context should
++ be reset in losing focus when he or she has dragged the
++ scrollbar. He or she will be confused if the input context is
++ still preserved until focused back to the text widget because he
++ or she will restart typing with first key of the sequence as a
++ habitual operation.
++
++ On the other hand, we should choose completely different policy
++ for the latter complex input method case. Suppose same situation
++ as above but he or she is using a complex input method. In the
++ case, he or she will be angry if the input context has been lost
++ when he or she has dragged the scrollbar because the input context
++ contained a valuably composed text made up by considerable input
++ cost. So we should not reset the input context in the case. And
++ the input context should be preserved until focused back to the
++ text widget. This behavior is named as 'preedit preservation'.
++
++ The two policies can be switched by calling or not calling reset()
++ in unsetFocus(). Default implementation of unsetFocus() calls
++ reset() to fit the simple input methods. The implementation is
++ expressed as 'preedit preservation is disabled'.
++
++
++ \section1 Preedit relocation
++
++ Although the most case of the preedit preservation problem for
++ complex input methods is resolved as described above, there is a
++ special case. Suppose the case that matches all of the following
++ conditions.
++
++ \list
++
++ \i a input focus has been moved from a text widget to another text
++ widget directly
++
++ \i the input context is shared between the two text widgets
++
++ \i preedit preservation is enabled for the input context
++
++ \endlist
++
++ In the case, there are the following two requirements that
++ contradicts each other. The input context sharing causes it.
++
++ \list
++
++ \i the input context has to be reset to prepare to input to the
++ newly focused text widget
++
++ \i the input context has to be preserved until focused back to the
++ previous text widget
++
++ \endlist
++
++ A intrinsic feature named 'preedit relocation' is available to
++ compromise the requirements. If the feature is enabled for the
++ input context, it is simply moved to the new text widget with the
++ preedit string. The user continues the input on the new text
++ widget, or relocate it to another text widget. The preedit of
++ previous text widget is automatically cleared to back to the
++ neutral state of the widget.
++
++ This strange behavior is just a compromise. As described in
++ previous section, complex input method user should not be exposed
++ to the risk losing the input context because it contains valuable
++ long text made up with considerable input cost. The user will
++ immediately focus back to the previous text widget to continue the
++ input in the correct text widget if the preedit relocation
++ occurred. The feature is mainly existing as safety.
++
++ The feature properly works even if the focus is moved as
++ following. Input method developers are not required to be aware of
++ the relocation protocol since QInputContext transparently handles
++ it.
++
++ a text widget -> a non-text widget -> another text widget
++
++ To enable the preedit relocation feature, the input context class
++ have to reimplement isPreeditRelocationEnabled() as returns TRUE.
++ The implementation requires that the preedit preservation is also
++ enabled since preedit relocation is a special case of the preedit
++ preservation. If the preedit relocation is disabled, the input
++ context is simply reset in the relocation case.
++
++
++ \section1 Input context instanciation
++ \section1 Input method switching
++
++ \section1 Text widget implementor's guide
++
++ Add following code fragment into createPopupMenu() to add input
++ method dependent submenus.
++
++ \code
++ #ifndef QT_NO_IM
++ QInputContext *qic = getInputContext();
++ if ( qic )
++ qic->addMenusTo( popup );
++ #endif
++ \endcode
++
++ \sa QInputContextPlugin, QInputContextFactory, QApplication::locateICHolderWidget(), QApplication::defaultInputMethod()
++*/
++
++
++/*!
++ Constructs an input context.
++
++ holderWidget is set immediately after this constructor has been
++ returned on the X11 platform.
++*/
++QInputContext::QInputContext( QObject *parent )
++ : QObject( parent )
++{
++ d = new QInputContextPrivate;
++}
++
++
++/*!
++ Destroys the input context.
++*/
++QInputContext::~QInputContext()
++{
++ delete d;
++}
++
++#if defined(Q_WS_X11)
++/*!
++ \internal
++ Returns the owner of this input context. Ordinary input methods
++ should not call this function directly to keep platform
++ independence and flexible configuration possibility.
++
++ The return value may differ from focusWidget() if the input
++ context is shared between several text widgets.
++
++ \sa setHolderWidget(), focusWidget()
++*/
++QWidget *QInputContext::holderWidget() const
++{
++ return d->holderWidget;
++}
++
++/*!
++ \internal
++ Sets the owner of this input context. Ordinary input methods
++ must not call this function directly.
++
++ \sa holderWidget()
++*/
++void QInputContext::setHolderWidget( QWidget *w )
++{
++ d->holderWidget = w;
++}
++
++/*!
++ \internal
++ Returns the widget that has an input focus for this input
++ context. Ordinary input methods should not call this function
++ directly to keep platform independence and flexible configuration
++ possibility.
++
++ The return value may differ from holderWidget() if the input
++ context is shared between several text widgets.
++
++ \sa setFocusWidget(), holderWidget()
++*/
++QWidget *QInputContext::focusWidget() const
++{
++ return d->hasFocus ? d->composingWidget : 0;
++}
++
++
++/*!
++ \internal
++ Sets the widget that has an input focus for this input
++ context. Ordinary input methods must not call this function
++ directly.
++
++ \sa focusWidget()
++*/
++void QInputContext::setFocusWidget( QWidget *w )
++{
++ if ( w ) {
++ bool isFocusingBack = ( w == d->composingWidget );
++ bool isPreeditRelocation = ( ! isFocusingBack && isComposing() &&
++ d->composingWidget );
++ // invoke sendIMEventInternal() rather than sendIMEvent() to
++ // avoid altering the composing state
++ if ( isPreeditRelocation == TRUE ) {
++ // clear preedit of previously focused text
++ // widget. preserved preedit may be exist even if
++ // isPreeditRelocationEnabled() == FALSE.
++ sendIMEventInternal( QEvent::IMEnd );
++ }
++ d->composingWidget = w; // changes recipient of QIMEvent
++ if ( isPreeditRelocation == TRUE ) {
++#if !defined(QT_NO_IM_PREEDIT_RELOCATION)
++ if ( isPreeditRelocationEnabled() ) {
++ // copy preedit state to the widget that gaining focus
++ sendIMEventInternal( QEvent::IMStart );
++ sendIMEventInternal( QEvent::IMCompose, d->preeditString,
++ d->cursorPosition, d->selLength );
++ } else
++#endif
++ {
++ // reset input context when the shared context has
++ // focused on another text widget
++ reset();
++ }
++ }
++ }
++ d->hasFocus = w ? TRUE : FALSE;
++}
++
++
++/*!
++ \internal
++ This function is called from QWidget to keep input state
++ consistency. Ordinary input method must not call this function
++ directly.
++*/
++void QInputContext::releaseComposingWidget( QWidget *w )
++{
++ if ( d->composingWidget == w ) {
++ d->composingWidget = 0;
++ d->hasFocus = FALSE;
++ }
++}
++#endif // Q_WS_X11
++
++/*!
++ \internal
++ This function can be reimplemented in a subclass as returning TRUE
++ if you want making your input method enable the preedit
++ relocation. See the description for preedit relocation of
++ QInputContext.
++
++ /sa QInputContext
++*/
++bool QInputContext::isPreeditRelocationEnabled()
++{
++ return FALSE;
++}
++
++/*!
++ This function indicates whether IMStart event had been sent to the
++ text widget. It is ensured that an input context can send IMCompose
++ or IMEnd event safely if this function returned TRUE.
++
++ The state is automatically being tracked through sendIMEvent().
++
++ \sa sendIMEvent()
++*/
++bool QInputContext::isComposing() const
++{
++ return d->isComposing;
++}
++
++
++/*!
++ This function can be reimplemented in a subclass to filter input
++ events.
++
++ Return TRUE if the \a event has been consumed. Otherwise, the
++ unfiltered \a event will be forwarded to widgets as ordinary
++ way. Although the input events have accept() and ignore()
++ methods, leave it untouched.
++
++ \a event is currently restricted to QKeyEvent. But some input
++ method related events such as QWheelEvent or QTabletEvent may be
++ added in future.
++
++ The filtering opportunity is always given to the input context as
++ soon as possible. It has to be taken place before any other key
++ event consumers such as eventfilters and accelerators because some
++ input methods require quite various key combination and
++ sequences. It often conflicts with accelerators and so on, so we
++ must give the input context the filtering opportunity first to
++ ensure all input methods work properly regardless of application
++ design.
++
++ Ordinary input methods require discrete key events to work
++ properly, so Qt's key compression is always disabled for any input
++ contexts.
++
++ \sa QKeyEvent, x11FilterEvent()
++*/
++bool QInputContext::filterEvent( const QEvent *event )
++{
++ return FALSE;
++}
++
++
++/*!
++ \fn void QInputContext::deletionRequested()
++
++ Emit this signal when a fatal error has been caused in the input
++ context. The input context will be deleted by the owner which is
++ usually the holder widget.
++*/
++
++/*!
++ \fn void QInputContext::imEventGenerated( QObject *receiver, QIMEvent *e )
++
++ \internal
++ This signal is emitted when the user has sent a QIMEvent through
++ sendIMEvent(). Ordinary input methods should not emit this signal
++ directly.
++
++ \a receiver is a platform dependent destination of the \a e.
++
++ \sa QIMEvent, sendIMEvent(), sendIMEventInternal(),
++*/
++
++/*!
++ \internal
++ Sends a QIMEvent to the client via imEventGenerated()
++ signal. Ordinary input method should not call this function
++ directly.
++
++ \sa QIMEvent, QIMComposeEvent, sendIMEvent(), imEventGenerated()
++*/
++void QInputContext::sendIMEventInternal( QEvent::Type type,
++ const QString &text,
++ int cursorPosition, int selLength )
++{
++ QObject *receiver = 0;
++ QIMEvent *event = 0;
++
++#if defined(Q_WS_X11)
++ receiver = d->composingWidget;
++#elif defined(Q_WS_QWS)
++ // just a placeholder
++#endif
++ if ( ! receiver )
++ return;
++
++ if ( type == QEvent::IMStart ) {
++ qDebug( "sending IMStart with %d chars to %p",
++ text.length(), receiver );
++ event = new QIMEvent( type, text, cursorPosition );
++ } else if ( type == QEvent::IMEnd ) {
++ qDebug( "sending IMEnd with %d chars to %p, text=%s",
++ text.length(), receiver, (const char*)text.local8Bit() );
++ event = new QIMEvent( type, text, cursorPosition );
++ } else if ( type == QEvent::IMCompose ) {
++ qDebug( "sending IMCompose to %p with %d chars, cpos=%d, sellen=%d, text=%s",
++ receiver, text.length(), cursorPosition, selLength,
++ (const char*)text.local8Bit() );
++ event = new QIMComposeEvent( type, text, cursorPosition, selLength );
++ }
++
++ if ( event )
++ emit imEventGenerated( receiver, event );
++}
++
++
++/*!
++ Call this function to send QIMEvent to the text widget. This
++ function constructs a QIMEvent based on the arguments and send it
++ to the appropriate widget. Ordinary input method should not
++ reimplement this function.
++
++ \a type is either \c QEvent::IMStart or \c QEvent::IMCompose or \c
++ QEvent::IMEnd. You have to send a \c QEvent::IMStart to start
++ composing, then send several \c QEvent::IMCompose to update the
++ preedit of the widget, and finalize the composition with sending
++ \c QEvent::IMEnd.
++
++ \c QEvent::IMStart should always be sent without arguments as:
++ \code
++ sendIMEvent( QEvent::IMStart )
++ \endcode
++
++ And \c QEvent::IMCompose can be sent without cursor:
++ \code
++ sendIMEvent( QEvent::IMCompose, QString( "a text" ) )
++ \endcode
++
++ Or optionally with cursor with \a cursorPosition:
++ \code
++ sendIMEvent( QEvent::IMCompose, QString( "a text with cursor" ), 12 )
++ \endcode
++ Note that \a cursorPosition also specifies microfocus position.
++
++ Or optionally with selection text:
++ \code
++ sendIMEvent( QEvent::IMCompose, QString( "a text with selection" ), 12, 9 )
++ \endcode
++ \a cursorPosition and \a selLength must be within the \a text. The
++ \a cursorPosition also specifies microfocus position in the case:
++
++ \c QEvent::IMEnd can be sent without arguments to terminate the
++ composition with null string:
++ \code
++ sendIMEvent( QEvent::IMEnd )
++ \endcode
++
++ Or optionally accepts \a text to commit a string:
++ \code
++ sendIMEvent( QEvent::IMEnd, QString( "a text" ) )
++ \endcode
++
++ \sa QIMEvent, QIMComposeEvent, setMicroFocus()
++*/
++void QInputContext::sendIMEvent( QEvent::Type type, const QString &text,
++ int cursorPosition, int selLength )
++{
++#if defined(Q_WS_X11)
++ if ( !focusWidget() )
++ return;
++#endif
++
++ if ( type == QEvent::IMStart ) {
++ sendIMEventInternal( type, text, cursorPosition, selLength );
++ d->isComposing = TRUE;
++ } else if ( type == QEvent::IMEnd ) {
++ d->resetComposingState();
++ sendIMEventInternal( type, text, cursorPosition, selLength );
++ } else if ( type == QEvent::IMCompose ) {
++ d->updateComposingState( text, cursorPosition, selLength );
++ sendIMEventInternal( type, text, cursorPosition, selLength );
++ }
++}
++
++
++/*!
++ This function can be reimplemented in a subclass to detect
++ that the input context has been focused on.
++
++ The input context will receive input events through
++ x11FilterEvent() and filterEvent() after setFocus() until
++ unsetFocus() has been called.
++
++ an input context is ensured that setFocus() is called exactly once
++ until unsetFocus() has been called even if preedit relocation has
++ occurred. This means that an input focus will survive between
++ several widgets that sharing the input context.
++
++ On the X11 platform, focusWidget is already set before this
++ function has been called.
++
++ \sa unsetFocus()
++*/
++void QInputContext::setFocus()
++{
++}
++
++
++/*!
++ This function can be reimplemented in a subclass to detect
++ that the input context has lost the focus.
++
++ an input context is ensured that unsetFocus() is not called during
++ preedit relocation. This means that an input focus will survive
++ between several widgets that sharing the input context.
++
++ Default implementation that calls reset() is sufficient for simple
++ input methods. You can override this function to alter the
++ behavior. For example, most Japanese input contexts should not be
++ reset on losing focus. The context sometimes contains a whole
++ paragraph and has minutes of lifetime different to ephemeral one
++ in other languages. The piled input context should be survived
++ until focused again since Japanese user naturally expects so.
++
++ On the X11 platform, focusWidget is valid until this function has
++ been returned.
++
++ \sa setFocus()
++*/
++void QInputContext::unsetFocus()
++{
++ reset();
++}
++
++
++/*!
++ This function can be implemented in a subclass to handle
++ microfocus changes.
++
++ 'microfocus' stands for the input method focus point in the
++ preedit (XIM "spot" point) for complex language input handling. It
++ can be used to place auxiliary GUI widgets such as candidate
++ selection window.
++
++ \a x, \a y, \a w and \a h represents the position and size of the
++ cursor in the preedit string. \a f is the font on the location of
++ the cursor.
++*/
++void QInputContext::setMicroFocus( int x, int y, int w, int h, QFont *f )
++{
++}
++
++
++/*!
++ This function can be reimplemented in a subclass to handle mouse
++ presses/releases/doubleclicks/moves within the preedit text. You
++ can use the function to implement mouse-oriented user interface
++ such as text selection or popup menu for candidate selection.
++
++ The parameter \a x is the offset within the string that was sent
++ with the IMCompose event. The alteration boundary of \a x is
++ ensured as character boundary of preedit string accurately.
++
++ \a type is either \c QEvent::MouseButtonPress or \c
++ QEvent::MouseButtonRelease or \c QEvent::MouseButtonDblClick or \c
++ QEvent::MouseButtonMove. Refer \a button and \a state to determine
++ what operation has performed.
++
++ The method interface is imported from
++ QWSInputMethod::mouseHandler() of Qt/Embedded 2.3.7 and extended
++ for desktop system.
++ */
++void QInputContext::mouseHandler( int x, QEvent::Type type,
++ Qt::ButtonState button,
++ Qt::ButtonState state )
++{
++ // Default behavior for simple ephemeral input contexts. Some
++ // complex input contexts should not be reset here.
++ if ( type == QEvent::MouseButtonPress ||
++ type == QEvent::MouseButtonDblClick )
++ reset();
++}
++
++
++/*!
++ Returns the font of the current input widget
++ */
++QFont QInputContext::font() const
++{
++ if ( !focusWidget() )
++ return QApplication::font(); //### absolutely last resort
++
++ return focusWidget()->font();
++}
++
++
++/*!
++ This function can be reimplemented in a subclass to reset the
++ state of the input method.
++
++ This function is called by several widgets to reset input
++ state. For example, a text widget call this function before
++ inserting a text to make widget ready to accept a text.
++
++ Default implementation is sufficient for simple input method. You
++ can override this function to reset external input method engines
++ in complex input method. In the case, call QInputContext::reset()
++ to ensure proper termination of inputting.
++
++ You must not send any QIMEvent except empty IMEnd event using
++ QInputContext::reset() at reimplemented reset(). It will break
++ input state consistency.
++*/
++void QInputContext::reset()
++{
++ if ( isComposing() )
++ sendIMEvent( QEvent::IMEnd );
++}
++
++
++/*!
++ This function must be implemented in any subclasses to return the
++ identifier name of the input method.
++
++ Return value is the name to identify and specify input methods for
++ the input method switching mechanism and so on. The name has to be
++ consistent with QInputContextPlugin::keys(). The name has to
++ consist of ASCII characters only.
++
++ There are two different names with different responsibility in the
++ input method domain. This function returns one of them. Another
++ name is called 'display name' that stands for the name for
++ endusers appeared in a menu and so on.
++
++ \sa QInputContextPlugin::keys(), QInputContextPlugin::displayName()
++*/
++QString QInputContext::identifierName()
++{
++ return "";
++}
++
++
++/*!
++ This function must be implemented in any subclasses to return a
++ language code (e.g. "zh_CN", "zh_TW", "zh_HK", "ja", "ko", ...)
++ of the input context. If the input context can handle multiple
++ languages, return the currently used one. The name has to be
++ consistent with QInputContextPlugin::language().
++
++ This information will be used by language tagging feature in
++ QIMEvent. It is required to distinguish unified han characters
++ correctly. It enables proper font and character code
++ handling. Suppose CJK-awared multilingual web browser
++ (that automatically modifies fonts in CJK-mixed text) and XML editor
++ (that automatically inserts lang attr).
++
++ \sa QInputContextPlugin::language()
++*/
++QString QInputContext::language()
++{
++ return "";
++}
++
++
++#if (QT_VERSION-0 >= 0x040000)
++/*!
++ This is a preliminary interface for Qt4
++ */
++QList<QAction *> QInputContext::actions()
++{
++}
++#else
++/*!
++ This function can be reimplemented in a subclass to provide input
++ method dependent popup menus. Return 0 if the menus are
++ unnecessary.
++
++ Ownership of the object and children are transferred to the
++ caller, and the result must not be called
++ setAutoDelete(). QInputContextMenu::title is used for label text
++ of the popup menu as submenu.
++
++ \sa addMenusTo()
++*/
++QPtrList<QInputContextMenu> *QInputContext::menus()
++{
++ return 0;
++}
++#endif
++
++/*!
++ Appends input method dependent submenus into \a popup. A separator
++ is also inserted into \a popup if \a action is InsertSeparator.
++
++ This is an utility function only for convenience in limited
++ situation. This function is used by input context owner such as
++ text widgets to add the submenus to its own context menu. If you
++ want to insert the submenus in more flexible way, use
++ QInputContext::menus() manually. \a popup is not restricted to
++ context menu of a text widget. For example, the owner may be a
++ input method menu of Qtopia taskbar in Qt/Embedded platform.
++
++ \sa menus(), QInputContextMenu::Action
++*/
++void QInputContext::addMenusTo( QPopupMenu *popup, QInputContextMenu::Action action )
++{
++ if ( ! popup )
++ return;
++
++ QPtrList<QInputContextMenu> *imMenus = menus();
++ if ( imMenus ) {
++ if ( action == QInputContextMenu::InsertSeparator )
++ popup->insertSeparator();
++ for ( QPtrList<QInputContextMenu>::Iterator it = imMenus->begin();
++ it != imMenus->end();
++ ++it ) {
++ QInputContextMenu *imMenu = *it;
++ popup->insertItem( imMenu->title, imMenu->popup );
++ }
++ imMenus->clear();
++ delete imMenus;
++ }
++}
++
++#endif //Q_NO_IM
+--- src/kernel/qinputcontext.h
++++ src/kernel/qinputcontext.h
+@@ -0,0 +1,143 @@
++/****************************************************************************
++** $Id: qinputcontext.h,v 1.8 2004/06/22 06:47:30 daisuke Exp $
++**
++** Definition of QInputContext
++**
++** Copyright (C) 1992-2002 Trolltech AS. All rights reserved.
++**
++** This file is part of the kernel module of the Qt GUI Toolkit.
++**
++** This file may be distributed under the terms of the Q Public License
++** as defined by Trolltech AS of Norway and appearing in the file
++** LICENSE.QPL included in the packaging of this file.
++**
++** This file may be distributed and/or modified under the terms of the
++** GNU General Public License version 2 as published by the Free Software
++** Foundation and appearing in the file LICENSE.GPL included in the
++** packaging of this file.
++**
++** Licensees holding valid Qt Enterprise Edition or Qt Professional Edition
++** licenses may use this file in accordance with the Qt Commercial License
++** Agreement provided with the Software.
++**
++** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
++** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
++**
++** See http://www.trolltech.com/pricing.html or email sales@trolltech.com for
++** information about Qt Commercial License Agreements.
++** See http://www.trolltech.com/qpl/ for QPL licensing information.
++** See http://www.trolltech.com/gpl/ for GPL licensing information.
++**
++** Contact info@trolltech.com if any conditions of this licensing are
++** not clear to you.
++**
++**********************************************************************/
++
++#ifndef QINPUTCONTEXT_H
++#define QINPUTCONTEXT_H
++
++#ifndef QT_NO_IM
++
++#ifndef QT_H
++#include "qobject.h"
++#include "qglobal.h"
++#include "qevent.h"
++#include "qstring.h"
++#if (QT_VERSION-0 >= 0x040000)
++#include "qlist.h"
++#include "qaction.h"
++#else
++#include "qptrlist.h"
++#endif
++#endif
++
++class QWidget;
++class QFont;
++class QPopupMenu;
++class QInputContextPrivate;
++
++
++struct QInputContextMenu {
++ enum Action {
++ NoSeparator,
++ InsertSeparator
++ };
++#if !(QT_VERSION-0 >= 0x040000)
++ QString title;
++ QPopupMenu *popup;
++#endif
++};
++
++
++class QInputContext : public QObject
++{
++ Q_OBJECT
++public:
++ QInputContext( QObject *parent = 0 );
++ virtual ~QInputContext();
++
++ virtual QString identifierName();
++ virtual QString language();
++
++#if defined(Q_WS_X11)
++ virtual bool x11FilterEvent( QWidget *keywidget, XEvent *event );
++#endif // Q_WS_X11
++ virtual bool filterEvent( const QEvent *event );
++ virtual void reset();
++
++ virtual void setFocus();
++ virtual void unsetFocus();
++ virtual void setMicroFocus( int x, int y, int w, int h, QFont *f = 0 );
++ virtual void mouseHandler( int x, QEvent::Type type,
++ Qt::ButtonState button, Qt::ButtonState state );
++ virtual QFont font() const;
++ virtual bool isComposing() const;
++ virtual bool isPreeditRelocationEnabled();
++
++#if (QT_VERSION-0 >= 0x040000)
++ virtual QList<QAction *> actions();
++ void addActionsTo( QMenu *menu, QInputContextMenu::Action action = QInputContextMenu::InsertSeparator );
++#else
++ virtual QPtrList<QInputContextMenu> *menus();
++ void addMenusTo( QPopupMenu *popup, QInputContextMenu::Action action = QInputContextMenu::InsertSeparator );
++#endif
++
++#if defined(Q_WS_X11)
++ // these functions are not recommended for ordinary use
++ virtual QWidget *focusWidget() const;
++ virtual QWidget *holderWidget() const;
++
++ // these functions must not be used by ordinary input method
++ virtual void setFocusWidget( QWidget *w );
++ virtual void setHolderWidget( QWidget *w );
++ virtual void releaseComposingWidget( QWidget *w );
++#endif
++
++signals:
++ void deletionRequested();
++ void imEventGenerated( QObject *receiver, QIMEvent *e );
++
++protected:
++ virtual void sendIMEvent( QEvent::Type type,
++ const QString &text = QString::null,
++ int cursorPosition = -1, int selLength = 0 );
++
++private:
++ void sendIMEventInternal( QEvent::Type type,
++ const QString &text = QString::null,
++ int cursorPosition = -1, int selLength = 0 );
++
++ QInputContextPrivate *d;
++
++ friend class QWidget;
++ friend class QInputContextFactory;
++
++private: // Disabled copy constructor and operator=
++ QInputContext( const QInputContext & );
++ QInputContext &operator=( const QInputContext & );
++
++};
++
++#endif //Q_NO_IM
++
++#endif // QINPUTCONTEXT_H
+--- src/kernel/qinputcontext_x11.cpp
++++ src/kernel/qinputcontext_x11.cpp
+@@ -33,500 +33,38 @@
+ **
+ **********************************************************************/
+
++#include "qinputcontext.h"
++
++#ifndef QT_NO_IM
++
+ #include "qplatformdefs.h"
+
+ #include "qapplication.h"
+ #include "qwidget.h"
+-#include "qinputcontext_p.h"
+-
+-#include <stdlib.h>
+-#include <limits.h>
+
++#include "qt_x11_p.h"
+
+-bool qt_compose_emptied = FALSE;
++/*!
++ This function may be overridden only if input method is depending
++ on X11 and you need raw XEvent. Otherwise, this function must not.
+
+-#if !defined(QT_NO_XIM)
++ This function is designed to filter raw key events for XIM, but
++ other input methods may use this to implement some special
++ features such as distinguishing Shift_L and Shift_R.
+
+-#define XK_MISCELLANY
+-#define XK_LATIN1
+-#include <X11/keysymdef.h>
++ Return TRUE if the \a event has been consumed. Otherwise, the
++ unfiltered \a event will be translated into QEvent and forwarded
++ to filterEvent(). Filtering at both x11FilterEvent() and
++ filterEvent() in single input method is allowed.
+
+-// #define QT_XIM_DEBUG
++ \a keywidget is a client widget into which a text is inputted. \a
++ event is inputted XEvent.
+
+-// from qapplication_x11.cpp
+-extern XIM qt_xim;
+-extern XIMStyle qt_xim_style;
+-
+-/* The cache here is needed, as X11 leaks a few kb for every
+- XFreeFontSet call, so we avoid creating and deletion of fontsets as
+- much as possible
++ \sa filterEvent()
+ */
+-static XFontSet fontsetCache[8] = { 0, 0, 0, 0, 0, 0, 0, 0 };
+-static int fontsetRefCount = 0;
+-
+-static const char * const fontsetnames[] = {
+- "-*-fixed-medium-r-*-*-16-*,-*-*-medium-r-*-*-16-*",
+- "-*-fixed-medium-i-*-*-16-*,-*-*-medium-i-*-*-16-*",
+- "-*-fixed-bold-r-*-*-16-*,-*-*-bold-r-*-*-16-*",
+- "-*-fixed-bold-i-*-*-16-*,-*-*-bold-i-*-*-16-*",
+- "-*-fixed-medium-r-*-*-24-*,-*-*-medium-r-*-*-24-*",
+- "-*-fixed-medium-i-*-*-24-*,-*-*-medium-i-*-*-24-*",
+- "-*-fixed-bold-r-*-*-24-*,-*-*-bold-r-*-*-24-*",
+- "-*-fixed-bold-i-*-*-24-*,-*-*-bold-i-*-*-24-*"
+-};
+-
+-static XFontSet getFontSet( const QFont &f )
+-{
+- int i = 0;
+- if (f.italic())
+- i |= 1;
+- if (f.bold())
+- i |= 2;
+-
+- if ( f.pointSize() > 20 )
+- i += 4;
+-
+- if ( !fontsetCache[i] ) {
+- Display* dpy = QPaintDevice::x11AppDisplay();
+- int missCount;
+- char** missList;
+- fontsetCache[i] = XCreateFontSet(dpy, fontsetnames[i], &missList, &missCount, 0);
+- if(missCount > 0)
+- XFreeStringList(missList);
+- if ( !fontsetCache[i] ) {
+- fontsetCache[i] = XCreateFontSet(dpy, "-*-fixed-*-*-*-*-16-*", &missList, &missCount, 0);
+- if(missCount > 0)
+- XFreeStringList(missList);
+- if ( !fontsetCache[i] )
+- fontsetCache[i] = (XFontSet)-1;
+- }
+- }
+- return (fontsetCache[i] == (XFontSet)-1) ? 0 : fontsetCache[i];
+-}
+-
+-
+-#ifdef Q_C_CALLBACKS
+-extern "C" {
+-#endif // Q_C_CALLBACKS
+-
+- static int xic_start_callback(XIC, XPointer client_data, XPointer) {
+- QInputContext *qic = (QInputContext *) client_data;
+- if (! qic) {
+-#ifdef QT_XIM_DEBUG
+- qDebug("compose start: no qic");
+-#endif // QT_XIM_DEBUG
+-
+- return 0;
+- }
+-
+- qic->composing = TRUE;
+- qic->text = QString::null;
+- qic->focusWidget = 0;
+-
+- if ( qic->selectedChars.size() < 128 )
+- qic->selectedChars.resize( 128 );
+- qic->selectedChars.fill( 0 );
+-
+-#ifdef QT_XIM_DEBUG
+- qDebug("compose start");
+-#endif // QT_XIM_DEBUG
+-
+- return 0;
+- }
+-
+- static int xic_draw_callback(XIC, XPointer client_data, XPointer call_data) {
+- QInputContext *qic = (QInputContext *) client_data;
+- if (! qic) {
+-#ifdef QT_XIM_DEBUG
+- qDebug("compose event: invalid compose event %p", qic);
+-#endif // QT_XIM_DEBUG
+-
+- return 0;
+- }
+-
+- bool send_imstart = FALSE;
+- if (qApp->focusWidget() != qic->focusWidget && qic->text.isEmpty()) {
+- if (qic->focusWidget) {
+-#ifdef QT_XIM_DEBUG
+- qDebug( "sending IMEnd (empty) to %p", qic->focusWidget );
+-#endif // QT_XIM_DEBUG
+-
+- QIMEvent endevent(QEvent::IMEnd, QString::null, -1);
+- QApplication::sendEvent(qic->focusWidget, &endevent);
+- }
+-
+- qic->text = QString::null;
+- qic->focusWidget = qApp->focusWidget();
+- qic->composing = FALSE;
+-
+- if ( qic->selectedChars.size() < 128 )
+- qic->selectedChars.resize( 128 );
+- qic->selectedChars.fill( 0 );
+-
+- if (qic->focusWidget) {
+- qic->composing = TRUE;
+- send_imstart = TRUE;
+- }
+- }
+-
+- if (! qic->composing || ! qic->focusWidget) {
+-#ifdef QT_XIM_DEBUG
+- qDebug("compose event: invalid compose event %d %p",
+- qic->composing, qic->focusWidget);
+-#endif // QT_XIM_DEBUG
+-
+- return 0;
+- }
+-
+- if ( send_imstart ) {
+-#ifdef QT_XIM_DEBUG
+- qDebug( "sending IMStart to %p", qic->focusWidget );
+-#endif // QT_XIM_DEBUG
+-
+- qt_compose_emptied = FALSE;
+- QIMEvent startevent(QEvent::IMStart, QString::null, -1);
+- QApplication::sendEvent(qic->focusWidget, &startevent);
+- }
+-
+- XIMPreeditDrawCallbackStruct *drawstruct =
+- (XIMPreeditDrawCallbackStruct *) call_data;
+- XIMText *text = (XIMText *) drawstruct->text;
+- int cursor = drawstruct->caret, sellen = 0;
+-
+- if ( ! drawstruct->caret && ! drawstruct->chg_first &&
+- ! drawstruct->chg_length && ! text ) {
+- // nothing to do
+- return 0;
+- }
+-
+- if (text) {
+- char *str = 0;
+- if (text->encoding_is_wchar) {
+- int l = wcstombs(NULL, text->string.wide_char, text->length);
+- if (l != -1) {
+- str = new char[l + 1];
+- wcstombs(str, text->string.wide_char, l);
+- str[l] = 0;
+- }
+- } else
+- str = text->string.multi_byte;
+-
+- if (! str)
+- return 0;
+-
+- QString s = QString::fromLocal8Bit(str);
+-
+- if (text->encoding_is_wchar)
+- delete [] str;
+-
+- if (drawstruct->chg_length < 0)
+- qic->text.replace(drawstruct->chg_first, UINT_MAX, s);
+- else
+- qic->text.replace(drawstruct->chg_first, drawstruct->chg_length, s);
+-
+- if ( qic->selectedChars.size() < qic->text.length() ) {
+- // expand the selectedChars array if the compose string is longer
+- uint from = qic->selectedChars.size();
+- qic->selectedChars.resize( qic->text.length() );
+- for ( uint x = from; from < qic->selectedChars.size(); ++x )
+- qic->selectedChars[x] = 0;
+- }
+-
+- uint x;
+- bool *p = qic->selectedChars.data() + drawstruct->chg_first;
+- // determine if the changed chars are selected based on text->feedback
+- for ( x = 0; x < s.length(); ++x )
+- *p++ = ( text->feedback ? ( text->feedback[x] & XIMReverse ) : 0 );
+-
+- // figure out where the selection starts, and how long it is
+- p = qic->selectedChars.data();
+- bool started = FALSE;
+- for ( x = 0; x < QMIN(qic->text.length(), qic->selectedChars.size()); ++x ) {
+- if ( started ) {
+- if ( *p ) ++sellen;
+- else break;
+- } else {
+- if ( *p ) {
+- cursor = x;
+- started = TRUE;
+- sellen = 1;
+- }
+- }
+- ++p;
+- }
+- } else {
+- if (drawstruct->chg_length == 0)
+- drawstruct->chg_length = -1;
+-
+- qic->text.remove(drawstruct->chg_first, drawstruct->chg_length);
+- qt_compose_emptied = qic->text.isEmpty();
+- if ( qt_compose_emptied ) {
+-#ifdef QT_XIM_DEBUG
+- qDebug( "compose emptied" );
+-#endif // QT_XIM_DEBUG
+-
+- // don't send an empty compose, since we will send an IMEnd with
+- // either the correct compose text (or null text if the user has
+- // cancelled the compose or deleted all chars).
+- return 0;
+- }
+- }
+-
+-#ifdef QT_XIM_DEBUG
+- qDebug( "sending IMCompose to %p with %d chars",
+- qic->focusWidget, qic->text.length() );
+-#endif // QT_XIM_DEBUG
+-
+- QIMComposeEvent event( QEvent::IMCompose, qic->text, cursor, sellen );
+- QApplication::sendEvent(qic->focusWidget, &event);
+- return 0;
+- }
+-
+- static int xic_done_callback(XIC, XPointer client_data, XPointer) {
+- QInputContext *qic = (QInputContext *) client_data;
+- if (! qic)
+- return 0;
+-
+- if (qic->composing && qic->focusWidget) {
+-#ifdef QT_XIM_DEBUG
+- qDebug( "sending IMEnd (empty) to %p", qic->focusWidget );
+-#endif // QT_XIM_DEBUG
+-
+- QIMEvent event(QEvent::IMEnd, QString::null, -1);
+- QApplication::sendEvent(qic->focusWidget, &event);
+- }
+-
+- qic->composing = FALSE;
+- qic->focusWidget = 0;
+-
+- if ( qic->selectedChars.size() < 128 )
+- qic->selectedChars.resize( 128 );
+- qic->selectedChars.fill( 0 );
+-
+- return 0;
+- }
+-
+-#ifdef Q_C_CALLBACKS
+-}
+-#endif // Q_C_CALLBACKS
+-
+-#endif // !QT_NO_XIM
+-
+-
+-
+-QInputContext::QInputContext(QWidget *widget)
+- : ic(0), focusWidget(0), composing(FALSE), fontset(0)
+-{
+-#if !defined(QT_NO_XIM)
+- fontsetRefCount++;
+- if (! qt_xim) {
+- qWarning("QInputContext: no input method context available");
+- return;
+- }
+-
+- if (! widget->isTopLevel()) {
+- qWarning("QInputContext: cannot create input context for non-toplevel widgets");
+- return;
+- }
+-
+- XPoint spot;
+- XRectangle rect;
+- XVaNestedList preedit_attr = 0;
+- XIMCallback startcallback, drawcallback, donecallback;
+-
+- font = widget->font();
+- fontset = getFontSet( font );
+-
+- if (qt_xim_style & XIMPreeditArea) {
+- rect.x = 0;
+- rect.y = 0;
+- rect.width = widget->width();
+- rect.height = widget->height();
+-
+- preedit_attr = XVaCreateNestedList(0,
+- XNArea, &rect,
+- XNFontSet, fontset,
+- (char *) 0);
+- } else if (qt_xim_style & XIMPreeditPosition) {
+- spot.x = 1;
+- spot.y = 1;
+-
+- preedit_attr = XVaCreateNestedList(0,
+- XNSpotLocation, &spot,
+- XNFontSet, fontset,
+- (char *) 0);
+- } else if (qt_xim_style & XIMPreeditCallbacks) {
+- startcallback.client_data = (XPointer) this;
+- startcallback.callback = (XIMProc) xic_start_callback;
+- drawcallback.client_data = (XPointer) this;
+- drawcallback.callback = (XIMProc)xic_draw_callback;
+- donecallback.client_data = (XPointer) this;
+- donecallback.callback = (XIMProc) xic_done_callback;
+-
+- preedit_attr = XVaCreateNestedList(0,
+- XNPreeditStartCallback, &startcallback,
+- XNPreeditDrawCallback, &drawcallback,
+- XNPreeditDoneCallback, &donecallback,
+- (char *) 0);
+- }
+-
+- if (preedit_attr) {
+- ic = XCreateIC(qt_xim,
+- XNInputStyle, qt_xim_style,
+- XNClientWindow, widget->winId(),
+- XNPreeditAttributes, preedit_attr,
+- (char *) 0);
+- XFree(preedit_attr);
+- } else
+- ic = XCreateIC(qt_xim,
+- XNInputStyle, qt_xim_style,
+- XNClientWindow, widget->winId(),
+- (char *) 0);
+-
+- if (! ic)
+- qFatal("Failed to create XIM input context!");
+-
+- // when resetting the input context, preserve the input state
+- (void) XSetICValues((XIC) ic, XNResetState, XIMPreserveState, (char *) 0);
+-#endif // !QT_NO_XIM
+-}
+-
+-
+-QInputContext::~QInputContext()
+-{
+-
+-#if !defined(QT_NO_XIM)
+- if (ic)
+- XDestroyIC((XIC) ic);
+-
+- if ( --fontsetRefCount == 0 ) {
+- Display *dpy = QPaintDevice::x11AppDisplay();
+- for ( int i = 0; i < 8; i++ ) {
+- if ( fontsetCache[i] && fontsetCache[i] != (XFontSet)-1 ) {
+- XFreeFontSet(dpy, fontsetCache[i]);
+- fontsetCache[i] = 0;
+- }
+- }
+- }
+-
+-#endif // !QT_NO_XIM
+-
+- ic = 0;
+- focusWidget = 0;
+- composing = FALSE;
+-}
+-
+-
+-void QInputContext::reset()
+-{
+-#if !defined(QT_NO_XIM)
+- if (focusWidget && composing && ! text.isNull()) {
+-#ifdef QT_XIM_DEBUG
+- qDebug("QInputContext::reset: composing - sending IMEnd (empty) to %p",
+- focusWidget);
+-#endif // QT_XIM_DEBUG
+-
+- QIMEvent endevent(QEvent::IMEnd, QString::null, -1);
+- QApplication::sendEvent(focusWidget, &endevent);
+- focusWidget = 0;
+- text = QString::null;
+- if ( selectedChars.size() < 128 )
+- selectedChars.resize( 128 );
+- selectedChars.fill( 0 );
+-
+- char *mb = XmbResetIC((XIC) ic);
+- if (mb)
+- XFree(mb);
+- }
+-#endif // !QT_NO_XIM
+-}
+-
+-
+-void QInputContext::setComposePosition(int x, int y)
+-{
+-#if !defined(QT_NO_XIM)
+- if (qt_xim && ic) {
+- XPoint point;
+- point.x = x;
+- point.y = y;
+-
+- XVaNestedList preedit_attr =
+- XVaCreateNestedList(0,
+- XNSpotLocation, &point,
+-
+- (char *) 0);
+- XSetICValues((XIC) ic, XNPreeditAttributes, preedit_attr, (char *) 0);
+- XFree(preedit_attr);
+- }
+-#endif // !QT_NO_XIM
+-}
+-
+-
+-void QInputContext::setComposeArea(int x, int y, int w, int h)
++bool QInputContext::x11FilterEvent( QWidget *keywidget, XEvent *event )
+ {
+-#if !defined(QT_NO_XIM)
+- if (qt_xim && ic) {
+- XRectangle rect;
+- rect.x = x;
+- rect.y = y;
+- rect.width = w;
+- rect.height = h;
+-
+- XVaNestedList preedit_attr = XVaCreateNestedList(0,
+- XNArea, &rect,
+-
+- (char *) 0);
+- XSetICValues((XIC) ic, XNPreeditAttributes, preedit_attr, (char *) 0);
+- XFree(preedit_attr);
+- }
+-#endif
++ return FALSE;
+ }
+
+-
+-int QInputContext::lookupString(XKeyEvent *event, QCString &chars,
+- KeySym *key, Status *status) const
+-{
+- int count = 0;
+-
+-#if !defined(QT_NO_XIM)
+- if (qt_xim && ic) {
+- count = XmbLookupString((XIC) ic, event, chars.data(),
+- chars.size(), key, status);
+-
+- if ((*status) == XBufferOverflow ) {
+- chars.resize(count + 1);
+- count = XmbLookupString((XIC) ic, event, chars.data(),
+- chars.size(), key, status);
+- }
+- }
+-
+-#endif // QT_NO_XIM
+-
+- return count;
+-}
+-
+-void QInputContext::setFocus()
+-{
+-#if !defined(QT_NO_XIM)
+- if (qt_xim && ic)
+- XSetICFocus((XIC) ic);
+-#endif // !QT_NO_XIM
+-}
+-
+-void QInputContext::setXFontSet(const QFont &f)
+-{
+-#if !defined(QT_NO_XIM)
+- if (font == f) return; // nothing to do
+- font = f;
+-
+- XFontSet fs = getFontSet(font);
+- if (fontset == fs) return; // nothing to do
+- fontset = fs;
+-
+- XVaNestedList preedit_attr = XVaCreateNestedList(0, XNFontSet, fontset, (char *) 0);
+- XSetICValues((XIC) ic, XNPreeditAttributes, preedit_attr, (char *) 0);
+- XFree(preedit_attr);
+-#else
+- Q_UNUSED( f );
+-#endif
+-}
++#endif //Q_NO_IM
+--- src/kernel/qnamespace.h
++++ src/kernel/qnamespace.h
+@@ -397,6 +397,87 @@
+ Key_Help = 0x1058,
+ Key_Direction_L = 0x1059,
+ Key_Direction_R = 0x1060,
++
++ // International input method support (X keycode - 0xEE00, the
++ // definition follows Qt/Embedded 2.3.7) Only interesting if
++ // you are writing your own input method
++
++ // International & multi-key character composition
++ Key_Multi_key = 0x1120, // Multi-key character compose
++ Key_Codeinput = 0x1137,
++ Key_SingleCandidate = 0x113c,
++ Key_MultipleCandidate = 0x113d,
++ Key_PreviousCandidate = 0x113e,
++
++ // Misc Functions
++ Key_Mode_switch = 0x117e, // Character set switch
++ //Key_script_switch = 0x117e, // Alias for mode_switch
++
++ // Japanese keyboard support
++ Key_Kanji = 0x1121, // Kanji, Kanji convert
++ Key_Muhenkan = 0x1122, // Cancel Conversion
++ //Key_Henkan_Mode = 0x1123, // Start/Stop Conversion
++ Key_Henkan = 0x1123, // Alias for Henkan_Mode
++ Key_Romaji = 0x1124, // to Romaji
++ Key_Hiragana = 0x1125, // to Hiragana
++ Key_Katakana = 0x1126, // to Katakana
++ Key_Hiragana_Katakana = 0x1127, // Hiragana/Katakana toggle
++ Key_Zenkaku = 0x1128, // to Zenkaku
++ Key_Hankaku = 0x1129, // to Hankaku
++ Key_Zenkaku_Hankaku = 0x112a, // Zenkaku/Hankaku toggle
++ Key_Touroku = 0x112b, // Add to Dictionary
++ Key_Massyo = 0x112c, // Delete from Dictionary
++ Key_Kana_Lock = 0x112d, // Kana Lock
++ Key_Kana_Shift = 0x112e, // Kana Shift
++ Key_Eisu_Shift = 0x112f, // Alphanumeric Shift
++ Key_Eisu_toggle = 0x1130, // Alphanumeric toggle
++ //Key_Kanji_Bangou = 0x1137, // Codeinput
++ //Key_Zen_Koho = 0x113d, // Multiple/All Candidate(s)
++ //Key_Mae_Koho = 0x113e, // Previous Candidate
++
++ // Korean keyboard support
++ //
++ // In fact, many Korean users need only 2 keys, Key_Hangul and
++ // Key_Hangul_Hanja. But rest of the keys are good for future.
++
++ Key_Hangul = 0x1131, // Hangul start/stop(toggle)
++ Key_Hangul_Start = 0x1132, // Hangul start
++ Key_Hangul_End = 0x1133, // Hangul end, English start
++ Key_Hangul_Hanja = 0x1134, // Start Hangul->Hanja Conversion
++ Key_Hangul_Jamo = 0x1135, // Hangul Jamo mode
++ Key_Hangul_Romaja = 0x1136, // Hangul Romaja mode
++ //Key_Hangul_Codeinput = 0x1137, // Hangul code input mode
++ Key_Hangul_Jeonja = 0x1138, // Jeonja mode
++ Key_Hangul_Banja = 0x1139, // Banja mode
++ Key_Hangul_PreHanja = 0x113a, // Pre Hanja conversion
++ Key_Hangul_PostHanja = 0x113b, // Post Hanja conversion
++ //Key_Hangul_SingleCandidate = 0x113c, // Single candidate
++ //Key_Hangul_MultipleCandidate = 0x113d, // Multiple candidate
++ //Key_Hangul_PreviousCandidate = 0x113e, // Previous candidate
++ Key_Hangul_Special = 0x113f, // Special symbols
++ //Key_Hangul_switch = 0x117e, // Alias for mode_switch
++
++ // dead keys (X keycode - 0xED00 to avoid the conflict)
++ Key_Dead_Grave = 0x1250,
++ Key_Dead_Acute = 0x1251,
++ Key_Dead_Circumflex = 0x1252,
++ Key_Dead_Tilde = 0x1253,
++ Key_Dead_Macron = 0x1254,
++ Key_Dead_Breve = 0x1255,
++ Key_Dead_Abovedot = 0x1256,
++ Key_Dead_Diaeresis = 0x1257,
++ Key_Dead_Abovering = 0x1258,
++ Key_Dead_Doubleacute = 0x1259,
++ Key_Dead_Caron = 0x125a,
++ Key_Dead_Cedilla = 0x125b,
++ Key_Dead_Ogonek = 0x125c,
++ Key_Dead_Iota = 0x125d,
++ Key_Dead_Voiced_Sound = 0x125e,
++ Key_Dead_Semivoiced_Sound = 0x125f,
++ Key_Dead_Belowdot = 0x1260,
++ Key_Dead_Hook = 0x1261,
++ Key_Dead_Horn = 0x1262,
++
+ Key_Space = 0x20, // 7 bit printable ASCII
+ Key_Any = Key_Space,
+ Key_Exclam = 0x21,
+@@ -469,6 +550,11 @@
+ Key_AsciiTilde = 0x7e,
+
+ // Latin 1 codes adapted from X: keysymdef.h,v 1.21 94/08/28 16:17:06
++ //
++ // This is mainly for compatibility - applications and input
++ // methods should not use the Qt keycodes between 128 and 255,
++ // but should rather use the QKeyEvent::text(). See
++ // QETWidget::translateKeyEventInternal() for more details.
+
+ Key_nobreakspace = 0x0a0,
+ Key_exclamdown = 0x0a1,
+--- src/kernel/qrichtext.cpp
++++ src/kernel/qrichtext.cpp
+@@ -662,7 +662,7 @@
+ pop();
+ }
+
+-bool QTextCursor::place( const QPoint &p, QTextParagraph *s, bool link )
++bool QTextCursor::place( const QPoint &p, QTextParagraph *s, bool link, bool loosePlacing, bool matchBetweenCharacters )
+ {
+ QPoint pos( p );
+ QRect r;
+@@ -680,7 +680,7 @@
+ str = s;
+ if ( pos.y() >= r.y() && pos.y() <= r.y() + r.height() )
+ break;
+- if ( !s->next() ) {
++ if ( loosePlacing == TRUE && !s->next() ) {
+ #ifdef Q_WS_MACX
+ pos.setX( s->rect().x() + s->rect().width() );
+ #endif
+@@ -721,7 +721,7 @@
+ if ( pos.x() < x )
+ pos.setX( x + 1 );
+ int cw;
+- int curpos = s->length()-1;
++ int curpos = -1;
+ int dist = 10000000;
+ bool inCustom = FALSE;
+ while ( i < nextLine ) {
+@@ -743,14 +743,21 @@
+ cpos += cw;
+ int d = cpos - pos.x();
+ bool dm = d < 0 ? !chr->rightToLeft : chr->rightToLeft;
+- if ( (QABS( d ) < dist || (dist == d && dm == TRUE )) && para->string()->validCursorPosition( i ) ) {
++ if ( ( matchBetweenCharacters == TRUE && (QABS( d ) < dist || (dist == d && dm == TRUE )) && para->string()->validCursorPosition( i ) ) ||
++ ( matchBetweenCharacters == FALSE && ( d == 0 || dm == TRUE ) ) ) {
+ dist = QABS( d );
+- if ( !link || pos.x() >= x + chr->x )
++ if ( !link || ( pos.x() >= x + chr->x && ( loosePlacing == TRUE || pos.x() < cpos ) ) )
+ curpos = i;
+ }
+ }
+ i++;
+ }
++ if ( curpos == -1 ) {
++ if ( loosePlacing == TRUE )
++ curpos = s->length()-1;
++ else
++ return FALSE;
++ }
+ setIndex( curpos );
+
+ #ifndef QT_NO_TEXTCUSTOMITEM
+@@ -4876,6 +4883,9 @@
+ tmpw = fullSelectionWidth - xleft;
+ painter.fillRect( xleft, y, tmpw, h, color );
+ painter.drawText( xstart, y + baseLine, str, start, len, dir );
++ // draw preedit's underline
++ if (selection == QTextDocument::IMCompositionText)
++ painter.drawLine(xstart, y + baseLine + 1, xstart + w, y + baseLine + 1);
+ if (selStart != start || selEnd != start + len || selWrap)
+ painter.restore();
+ }
+--- src/kernel/qrichtext_p.h
++++ src/kernel/qrichtext_p.h
+@@ -362,7 +362,8 @@
+ int totalOffsetY() const; // total document offset
+
+ bool place( const QPoint &pos, QTextParagraph *s ) { return place( pos, s, FALSE ); }
+- bool place( const QPoint &pos, QTextParagraph *s, bool link );
++ bool place( const QPoint &pos, QTextParagraph *s, bool link ) { return place( pos, s, link, TRUE, TRUE ); }
++ bool place( const QPoint &pos, QTextParagraph *s, bool link, bool loosePlacing, bool matchBetweenCharacters );
+ void restoreState();
+
+
+--- src/kernel/qt_kernel.pri
++++ src/kernel/qt_kernel.pri
+@@ -34,7 +34,6 @@
+ $$KERNEL_H/qimage.h \
+ $$KERNEL_P/qimageformatinterface_p.h \
+ $$KERNEL_H/qimageformatplugin.h \
+- $$KERNEL_P/qinputcontext_p.h \
+ $$KERNEL_H/qkeycode.h \
+ $$KERNEL_H/qkeysequence.h \
+ $$KERNEL_H/qlayout.h \
+@@ -99,6 +98,12 @@
+ $$KERNEL_CPP/qfontengine_p.h \
+ $$KERNEL_CPP/qtextlayout_p.h
+
++ unix:x11 {
++ HEADERS += $$KERNEL_H/qinputcontext.h
++ } else {
++ HEADERS += $$KERNEL_P/qinputcontext_p.h
++ }
++
+ win32:SOURCES += $$KERNEL_CPP/qapplication_win.cpp \
+ $$KERNEL_CPP/qclipboard_win.cpp \
+ $$KERNEL_CPP/qcolor_win.cpp \
+@@ -130,6 +135,7 @@
+ $$KERNEL_CPP/qdesktopwidget_x11.cpp \
+ $$KERNEL_CPP/qeventloop_x11.cpp \
+ $$KERNEL_CPP/qfont_x11.cpp \
++ $$KERNEL_CPP/qinputcontext.cpp \
+ $$KERNEL_CPP/qinputcontext_x11.cpp \
+ $$KERNEL_CPP/qmotifdnd_x11.cpp \
+ $$KERNEL_CPP/qpixmap_x11.cpp \
+--- src/kernel/qwidget.cpp
++++ src/kernel/qwidget.cpp
+@@ -3282,8 +3282,24 @@
+ if ( isActiveWindow() ) {
+ QWidget * prev = qApp->focus_widget;
+ if ( prev ) {
+- if ( prev != this )
++ // This part is never executed when Q_WS_X11? Preceding XFocusOut
++ // had already reset focus_widget when received XFocusIn
++
++ // Don't reset input context explicitly here. Whether reset or not
++ // when focusing out is a responsibility of input methods. For
++ // example, Japanese input context should not be reset here. The
++ // context sometimes contains a whole paragraph and has minutes of
++ // lifetime different to ephemeral one in other languages. The
++ // input context should be survived until focused again. So we
++ // delegate the responsibility to input context via
++ // unfocusInputContext().
++ if ( prev != this && prev->isInputMethodEnabled() ) {
++#if 0
+ prev->resetInputContext();
++#else
++ prev->unfocusInputContext();
++#endif
++ }
+ }
+ #if defined(Q_WS_WIN)
+ else {
+@@ -3291,9 +3307,8 @@
+ }
+ #endif
+ qApp->focus_widget = this;
+-#if defined(Q_WS_X11)
+- focusInputContext();
+-#endif
++ if( isInputMethodEnabled() )
++ focusInputContext();
+
+ #if defined(Q_WS_WIN)
+ if ( !topLevelWidget()->isPopup() )
+@@ -3341,7 +3356,11 @@
+ focusProxy()->clearFocus();
+ return;
+ } else if ( hasFocus() ) {
++#if !defined(Q_WS_X11)
+ resetInputContext();
++#else
++ unfocusInputContext();
++#endif
+ QWidget* w = qApp->focusWidget();
+ // clear active focus
+ qApp->focus_widget = 0;
+@@ -4667,7 +4686,13 @@
+ break;
+
+ case QEvent::MouseButtonPress:
++ // Don't reset input context here. Whether reset or not is
++ // a responsibility of input method. reset() will be
++ // called by mouseHandler() of input method if necessary
++ // via mousePressEvent() of text widgets.
++#if 0
+ resetInputContext();
++#endif
+ mousePressEvent( (QMouseEvent*)e );
+ if ( ! ((QMouseEvent*)e)->isAccepted() )
+ return FALSE;
+--- src/kernel/qwidget.h
++++ src/kernel/qwidget.h
+@@ -49,6 +49,10 @@
+ #include "qsizepolicy.h"
+ #endif // QT_H
+
++#if defined(Q_WS_X11) && !defined(QT_NO_IM)
++class QInputContext;
++#endif
++
+ class QLayout;
+ struct QWExtra;
+ struct QTLWExtra;
+@@ -535,6 +539,18 @@
+
+ int metric( int ) const;
+
++#if defined(Q_WS_X11)
++#if !defined(QT_NO_IM_EXTENSIONS)
++ virtual QWidget *icHolderWidget();
++#else
++ QWidget *icHolderWidget();
++#endif
++ QInputContext *getInputContext();
++ void changeInputContext( const QString & );
++ void sendMouseEventToInputContext( int x, QEvent::Type type,
++ Qt::ButtonState button,
++ Qt::ButtonState state );
++#endif
+ void resetInputContext();
+
+ virtual void create( WId = 0, bool initializeWindow = TRUE,
+@@ -566,13 +582,16 @@
+
+ private slots:
+ void focusProxyDestroyed();
++#if defined(Q_WS_X11)
++ void destroyInputContext();
++#endif
+
+ private:
+ void setFontSys( QFont *f = 0 );
+ #if defined(Q_WS_X11)
+ void createInputContext();
+- void destroyInputContext();
+ void focusInputContext();
++ void unfocusInputContext();
+ void checkChildrenDnd();
+ #elif defined(Q_WS_MAC)
+ uint own_id : 1, macDropEnabled : 1;
+@@ -644,6 +663,9 @@
+ #ifndef QT_NO_LAYOUT
+ QLayout *lay_out;
+ #endif
++#if defined(Q_WS_X11) && !defined(QT_NO_IM) && !defined(QT_NO_IM_EXTENSIONS)
++ QInputContext *ic; // Input Context
++#endif
+ QWExtra *extra;
+ #if defined(Q_WS_QWS)
+ QRegion req_region; // Requested region
+@@ -949,7 +971,9 @@
+ uint dnd : 1; // DND properties installed
+ uint uspos : 1; // User defined position
+ uint ussize : 1; // User defined size
+- void *xic; // XIM Input Context
++#if defined(QT_NO_IM_EXTENSIONS)
++ void *xic; // Input Context
++#endif
+ #endif
+ #if defined(Q_WS_MAC)
+ WindowGroupRef group;
+--- src/kernel/qwidget_x11.cpp
++++ src/kernel/qwidget_x11.cpp
+@@ -61,11 +61,9 @@
+ bool qt_wstate_iconified( WId );
+ void qt_updated_rootinfo();
+
+-#ifndef QT_NO_XIM
+-#include "qinputcontext_p.h"
+-
+-extern XIM qt_xim;
+-extern XIMStyle qt_xim_style;
++#ifndef QT_NO_IM
++#include "qinputcontext.h"
++#include "qinputcontextfactory.h"
+ #endif
+
+ // Paint event clipping magic
+@@ -688,6 +686,10 @@
+
+ if ( destroyw )
+ qt_XDestroyWindow( this, dpy, destroyw );
++
++#if !defined(QT_NO_IM_EXTENSIONS)
++ ic = 0;
++#endif
+ }
+
+
+@@ -751,6 +753,16 @@
+ extern void qPRCleanup( QWidget *widget ); // from qapplication_x11.cpp
+ if ( testWState(WState_Reparented) )
+ qPRCleanup(this);
++
++ if( this == icHolderWidget() ) {
++ destroyInputContext();
++ } else {
++ // release previous focus information participating with
++ // preedit preservation of qic
++ QInputContext *qic = getInputContext();
++ if ( qic )
++ qic->releaseComposingWidget( this );
++ }
+ }
+ }
+
+@@ -787,11 +799,11 @@
+ XReparentWindow( x11Display(), old_winid,
+ RootWindow( x11Display(), x11Screen() ), 0, 0 );
+
+- if ( isTopLevel() ) {
+- // input contexts are associated with toplevel widgets, so we need
+- // destroy the context here. if we are reparenting back to toplevel,
+- // then we will have another context created, otherwise we will
+- // use our new toplevel's context
++ if ( this == icHolderWidget() ) {
++ // input contexts are sometimes associated with toplevel widgets, so
++ // we need destroy the context here. if we are reparenting back to
++ // toplevel, then we may have another context created, otherwise we
++ // will use our new ic holder's context
+ destroyInputContext();
+ }
+
+@@ -947,7 +959,8 @@
+ language input systems.
+
+ In the X11 version of Qt, if \a text is TRUE, this method sets the
+- XIM "spot" point for complex language input handling.
++ input method focus point in the preedit (XIM "spot" point) for
++ complex language input handling.
+
+ The font \a f is a rendering hint to the currently active input method.
+ If \a f is 0 the widget's font is used.
+@@ -957,22 +970,15 @@
+ void QWidget::setMicroFocusHint(int x, int y, int width, int height,
+ bool text, QFont *f )
+ {
+-#ifndef QT_NO_XIM
++#ifndef QT_NO_IM
+ if ( text ) {
+- QWidget* tlw = topLevelWidget();
+- QTLWExtra *topdata = tlw->topData();
+-
+ // trigger input context creation if it hasn't happened already
+ createInputContext();
+- QInputContext *qic = (QInputContext *) topdata->xic;
+
+- if ( qt_xim && qic ) {
+- QPoint p( x, y );
+- QPoint p2 = mapTo( topLevelWidget(), QPoint( 0, 0 ) );
+- p = mapTo( topLevelWidget(), p);
+- qic->setXFontSet( f ? *f : fnt );
+- qic->setComposePosition(p.x(), p.y() + height);
+- qic->setComposeArea(p2.x(), p2.y(), this->width(), this->height());
++ QInputContext *qic = getInputContext();
++ if(qic) {
++ QPoint gp = mapToGlobal( QPoint( x, y ) );
++ qic->setMicroFocus(gp.x(), gp.y(), width, height, f);
+ }
+ }
+ #endif
+@@ -1442,7 +1448,7 @@
+ QWidget *tlw = topLevelWidget();
+ if ( tlw->isVisible() && !tlw->topData()->embedded && !qt_deferred_map_contains(tlw) ) {
+ XSetInputFocus( x11Display(), tlw->winId(), RevertToNone, qt_x_time);
+- focusInputContext();
++ focusInputContext();
+ }
+ }
+
+@@ -2422,13 +2428,16 @@
+
+ void QWidget::createTLSysExtra()
+ {
++#if defined(QT_NO_IM_EXTENSIONS)
+ // created lazily
+ extra->topextra->xic = 0;
++#endif
+ }
+
+ void QWidget::deleteTLSysExtra()
+ {
+- destroyInputContext();
++ // don't destroy input context here. it will be destroyed in
++ // QWidget::destroy() destroyInputContext();
+ }
+
+ /*
+@@ -2660,76 +2669,255 @@
+ }
+
+
++/*!
++ This function returns the widget holding the QInputContext
++ instance for this widget. The instance is used for text input to
++ this widget, switching input method, etc.
++
++ By default, this function delegates the role of returning input
++ context holder widget to QApplication::locateICHolderWidget().
++
++ This definition enables application developer to change the
++ mapping of widgets to QInputContext instance simply by overriding
++ QApplication::locateICHolderWidget().
++
++ \sa QApplication::locateICHolderWidget()
++*/
++QWidget *QWidget::icHolderWidget()
++{
++ return qApp->locateICHolderWidget(this);
++}
++
++
++/*!
++ This function returns the QInputContext instance for this widget.
++ This instance is used for text input to this widget, etc.
++ It is simply the accessor function.
++*/
++QInputContext *QWidget::getInputContext()
++{
++ QInputContext *qic = 0;
++
++#if !defined(QT_NO_IM_EXTENSIONS)
++ if ( isInputMethodEnabled() ) {
++ qic = icHolderWidget()->ic;
++#else
++ {
++ // icHolderWidget is always topLevelWidget
++ QTLWExtra *topdata = icHolderWidget()->topData();
++ qic = (QInputContext *)topdata->xic;
++#endif
++ }
++
++ return qic;
++}
++
++
++/*!
++ This function replaces the QInputContext instance used for text
++ input to this widget. The \a identifierName is the identifier name
++ of newly choosed input method.
++*/
++void QWidget::changeInputContext( const QString& identifierName )
++{
++ QWidget *icWidget = icHolderWidget();
++#if !defined(QT_NO_IM_EXTENSIONS)
++ QInputContext **qicp = &icWidget->ic;
++#else
++ QInputContext **qicp = (QInputContext **)&icWidget->topData()->xic;
++#endif
++
++ if( *qicp )
++ delete *qicp;
++ // an input context that has the identifierName is generated.
++ QInputContext *qic = QInputContextFactory::create( identifierName, icWidget );
++ *qicp = qic;
++ if ( qic ) {
++ QObject::connect( qic, SIGNAL(imEventGenerated(QObject *,QIMEvent *)),
++ qApp, SLOT(postIMEvent(QObject *,QIMEvent *)) );
++ QObject::connect( qic, SIGNAL(deletionRequested()),
++ icWidget, SLOT(destroyInputContext()) );
++ }
++}
++
++
++/*!
++ \internal
++ This is an internal function, you should never call this.
++
++ This function is called to generate an input context
++ according to a configuration for default input method
++
++ When QT_NO_IM_EXTENSIONS is not set, input context is
++ generated only when isInputMethodEnabled() returns TRUE.
++*/
+ void QWidget::createInputContext()
+ {
+- QWidget *tlw = topLevelWidget();
+- QTLWExtra *topdata = tlw->topData();
++#if !defined(QT_NO_IM_EXTENSIONS)
++ if( !isInputMethodEnabled() || QApplication::closingDown() )
++ return;
++#endif
+
+-#ifndef QT_NO_XIM
+- if (qt_xim) {
+- if (! topdata->xic) {
+- QInputContext *qic = new QInputContext(tlw);
+- topdata->xic = (void *) qic;
+- }
+- } else
+-#endif // QT_NO_XIM
+- {
+- // qDebug("QWidget::createInputContext: no xim");
+- topdata->xic = 0;
+- }
++ QWidget *icWidget = icHolderWidget();
++#ifndef QT_NO_IM
++#if !defined(QT_NO_IM_EXTENSIONS)
++ QInputContext **qicp = &icWidget->ic;
++#else
++ QInputContext **qicp = (QInputContext **)&icWidget->topData()->xic;
++#endif
++
++ if ( ! *qicp ) {
++ // an input context of the default input method is generated.
++ QInputContext *qic = QInputContextFactory::create( QApplication::defaultInputMethod(), icWidget );
++
++ *qicp = qic;
++ if ( qic ) {
++ QObject::connect( qic, SIGNAL(imEventGenerated(QObject *,QIMEvent *)),
++ qApp, SLOT(postIMEvent(QObject *,QIMEvent *)) );
++ QObject::connect( qic, SIGNAL(deletionRequested()),
++ icWidget, SLOT(destroyInputContext()) );
++ }
++ }
++#endif // QT_NO_IM
+ }
+
+
++/*!
++ \internal
++
++ This slot is used to destroy the input context that belonging
++ to the widget itself, so icHolderWidget()->ic is not fetched.
++
++ \sa QInputContext::deletionRequested()
++*/
+ void QWidget::destroyInputContext()
+ {
+-#ifndef QT_NO_XIM
+- QInputContext *qic = (QInputContext *) extra->topextra->xic;
+- delete qic;
+-#endif // QT_NO_XIM
+- extra->topextra->xic = 0;
++#ifndef QT_NO_IM
++#if !defined(QT_NO_IM_EXTENSIONS)
++ QInputContext **qicp = &ic;
++#else
++ if ( ! extra || ! extra->topextra )
++ return;
++
++ QInputContext **qicp = (QInputContext **)&extra->topextra->xic;
++#endif
++
++ if( *qicp )
++ delete *qicp;
++
++ *qicp = 0;
++#endif // QT_NO_IM
+ }
+
+
+ /*!
+- This function is called when the user finishes input composition,
+- e.g. changes focus to another widget, moves the cursor, etc.
++ This function is called when text widgets need to be neutral state to
++ execute text operations properly. See qlineedit.cpp and qtextedit.cpp as
++ example.
++
++ Ordinary reset that along with changing focus to another widget,
++ moving the cursor, etc, is implicitly handled via
++ unfocusInputContext() because whether reset or not when such
++ situation is a responsibility of input methods. So we delegate the
++ responsibility to the input context via unfocusInputContext(). See
++ 'Preedit preservation' section of the class description of
++ QInputContext for further information.
++
++ \sa QInputContext, unfocusInputContext(), QInputContext::unsetFocus()
+ */
+ void QWidget::resetInputContext()
+ {
+-#ifndef QT_NO_XIM
+- if ((qt_xim_style & XIMPreeditCallbacks) && hasFocus()) {
+- QWidget *tlw = topLevelWidget();
+- QTLWExtra *topdata = tlw->topData();
++#ifndef QT_NO_IM
++ // trigger input context creation if it hasn't happened already
++ createInputContext();
++
++ QInputContext *qic = getInputContext();
++ if( qic )
++ qic->reset();
++#endif // QT_NO_IM
++}
++
++
++/*!
++ \internal
++ This is an internal function, you should never call this.
++
++ This function is called to focus associated input context. The
++ code intends to eliminate duplicate focus for the context even if
++ the context is shared between widgets
++
++ \sa QInputContext::setFocus()
++ */
++void QWidget::focusInputContext()
++{
++#ifndef QT_NO_IM
++ QWidget* tlw = topLevelWidget();
+
++ if (!tlw->isPopup() || isInputMethodEnabled()) {
+ // trigger input context creation if it hasn't happened already
+ createInputContext();
+
+- if (topdata->xic) {
+- QInputContext *qic = (QInputContext *) topdata->xic;
+- qic->reset();
++ QInputContext *qic = getInputContext();
++ if ( qic ) {
++ if( qic->focusWidget() != this ) {
++ qic->setFocusWidget( this );
++ qic->setFocus();
++ }
+ }
+ }
+-#endif // QT_NO_XIM
++#endif // QT_NO_IM
+ }
+
+
+-void QWidget::focusInputContext()
++/*!
++ \internal
++ This is an internal function, you should never call this.
++
++ This function is called to remove focus from associated input
++ context.
++
++ \sa QInputContext::unsetFocus()
++ */
++void QWidget::unfocusInputContext()
+ {
+-#ifndef QT_NO_XIM
+- QWidget *tlw = topLevelWidget();
+- if (!tlw->isPopup() || isInputMethodEnabled()) {
+- QTLWExtra *topdata = tlw->topData();
++#ifndef QT_NO_IM
++ // trigger input context creation if it hasn't happened already
++ createInputContext();
++
++ QInputContext *qic = getInputContext();
++ if ( qic ) {
++ // may be caused reset() in some input methods
++ qic->unsetFocus();
++ qic->setFocusWidget( 0 );
++ }
++#endif // QT_NO_IM
++}
++
+
+- // trigger input context creation if it hasn't happened already
+- createInputContext();
++/*!
++ This function is called to send mouse event to associated input
++ context by derived text widgets. A derived text widget must be
++ calculate \a x as character offset at the mouse cursor in the
++ preedit.
+
+- if (topdata->xic) {
+- QInputContext *qic = (QInputContext *) topdata->xic;
+- qic->setFocus();
+- }
++ \sa QInputContext::mouseHandler()
++ */
++void QWidget::sendMouseEventToInputContext( int x, QEvent::Type type,
++ Qt::ButtonState button,
++ Qt::ButtonState state )
++{
++#ifndef QT_NO_IM
++ // trigger input context creation if it hasn't happened already
++ createInputContext();
++
++ QInputContext *qic = getInputContext();
++ if ( qic ) {
++ // may be causing reset() in some input methods
++ qic->mouseHandler( x, type, button, state );
+ }
+-#endif // QT_NO_XIM
++#endif // QT_NO_IM
+ }
++
+
+ void QWidget::setWindowOpacity(double)
+ {
+--- src/qt.pro
++++ src/qt.pro
+@@ -37,6 +37,7 @@
+ TOOLS_CPP = tools
+ CODECS_CPP = codecs
+ WORKSPACE_CPP = workspace
++INPUTMETHOD_CPP = inputmethod
+ XML_CPP = xml
+ STYLES_CPP = styles
+ EMBEDDED_CPP = embedded
+@@ -54,6 +55,7 @@
+ TOOLS_H = $$TOOLS_CPP
+ CODECS_H = $$CODECS_CPP
+ WORKSPACE_H = $$WORKSPACE_CPP
++ #INPUTMETHOD_H = $$INPUTMETHOD_CPP
+ XML_H = $$XML_CPP
+ CANVAS_H = $$CANVAS_CPP
+ STYLES_H = $$STYLES_CPP
+@@ -70,6 +72,7 @@
+ TOOLS_H = $$WIN_ALL_H
+ CODECS_H = $$WIN_ALL_H
+ WORKSPACE_H = $$WIN_ALL_H
++ #INPUTMETHOD_H = $$WIN_ALL_H
+ XML_H = $$WIN_ALL_H
+ CANVAS_H = $$WIN_ALL_H
+ STYLES_H = $$WIN_ALL_H
+@@ -98,6 +101,7 @@
+ TOOLS_H = $$TOOLS_CPP
+ CODECS_H = $$CODECS_CPP
+ WORKSPACE_H = $$WORKSPACE_CPP
++ INPUTMETHOD_H = $$INPUTMETHOD_CPP
+ XML_H = $$XML_CPP
+ STYLES_H = $$STYLES_CPP
+ !embedded:!mac:CONFIG += x11 x11inc
+@@ -112,7 +116,7 @@
+ EMBEDDED_H = $$EMBEDDED_CPP
+ }
+
+-DEPENDPATH += ;$$NETWORK_H;$$KERNEL_H;$$WIDGETS_H;$$SQL_H;$$TABLE_H;$$DIALOGS_H;
++DEPENDPATH += ;$$NETWORK_H;$$KERNEL_H;$$WIDGETS_H;$$INPUTMETHOD_H;$$SQL_H;$$TABLE_H;$$DIALOGS_H;
+ DEPENDPATH += $$ICONVIEW_H;$$OPENGL_H;$$TOOLS_H;$$CODECS_H;$$WORKSPACE_H;$$XML_H;
+ DEPENDPATH += $$CANVAS_H;$$STYLES_H
+ embedded:DEPENDPATH += ;$$EMBEDDED_H
+@@ -147,6 +151,7 @@
+ include($$DIALOGS_CPP/qt_dialogs.pri)
+ include($$ICONVIEW_CPP/qt_iconview.pri)
+ include($$WORKSPACE_CPP/qt_workspace.pri)
++include($$INPUTMETHOD_CPP/qt_inputmethod.pri)
+ include($$NETWORK_CPP/qt_network.pri)
+ include($$CANVAS_CPP/qt_canvas.pri)
+ include($$TABLE_CPP/qt_table.pri)
+--- src/tools/qfeatures.h
++++ src/tools/qfeatures.h
+@@ -982,3 +982,13 @@
+ #define QT_NO_WORKSPACE
+ #endif
+
++// Input method
++#if !defined(QT_NO_IM) && (defined(QT_NO_STRINGLIST))
++#define QT_NO_IM
++#endif
++
++// Input method extensions
++#if !defined(QT_NO_IM_EXTENSIONS) && (defined(QT_NO_IM) || defined(QT_NO_STRINGLIST))
++#define QT_NO_IM_EXTENSIONS
++#endif
++
+--- src/widgets/qlineedit.cpp
++++ src/widgets/qlineedit.cpp
+@@ -37,6 +37,12 @@
+
+ #include "qlineedit.h"
+ #ifndef QT_NO_LINEEDIT
++
++// Keep this position to avoid patch rejection
++#ifndef QT_NO_IM
++#include "qinputcontext.h"
++#endif
++
+ #include "qpainter.h"
+ #include "qdrawutil.h"
+ #include "qfontmetrics.h"
+@@ -245,12 +251,17 @@
+
+ // input methods
+ int imstart, imend, imselstart, imselend;
++ bool composeMode() const { return preeditLength(); }
++ bool hasIMSelection() const { return imSelectionLength(); }
++ int preeditLength() const { return ( imend - imstart ); }
++ int imSelectionLength() const { return ( imselend - imselstart ); }
+
+ // complex text layout
+ QTextLayout textLayout;
+ void updateTextLayout();
+ void moveCursor( int pos, bool mark = FALSE );
+ void setText( const QString& txt );
++ int xToPosInternal( int x, QTextItem::CursorPosition ) const;
+ int xToPos( int x, QTextItem::CursorPosition = QTextItem::BetweenCharacters ) const;
+ inline int visualAlignment() const { return alignment ? alignment : int( isRightToLeft() ? AlignRight : AlignLeft ); }
+ QRect cursorRect() const;
+@@ -588,6 +599,7 @@
+ return;
+ d->echoMode = mode;
+ d->updateTextLayout();
++ setInputMethodEnabled( mode == Normal );
+ update();
+ }
+
+@@ -1419,6 +1431,8 @@
+ */
+ void QLineEdit::mousePressEvent( QMouseEvent* e )
+ {
++ if ( sendMouseEventToInputContext( e ) )
++ return;
+ if ( e->button() == RightButton )
+ return;
+ if ( d->tripleClickTimer && ( e->pos() - d->tripleClick ).manhattanLength() <
+@@ -1448,7 +1462,8 @@
+ */
+ void QLineEdit::mouseMoveEvent( QMouseEvent * e )
+ {
+-
++ if ( sendMouseEventToInputContext( e ) )
++ return;
+ #ifndef QT_NO_CURSOR
+ if ( ( e->state() & MouseButtonMask ) == 0 ) {
+ if ( !d->readOnly && d->dragEnabled
+@@ -1477,6 +1492,8 @@
+ */
+ void QLineEdit::mouseReleaseEvent( QMouseEvent* e )
+ {
++ if ( sendMouseEventToInputContext( e ) )
++ return;
+ #ifndef QT_NO_DRAGANDDROP
+ if ( e->button() == LeftButton ) {
+ if ( d->dndTimer ) {
+@@ -1503,6 +1520,8 @@
+ */
+ void QLineEdit::mouseDoubleClickEvent( QMouseEvent* e )
+ {
++ if ( sendMouseEventToInputContext( e ) )
++ return;
+ if ( e->button() == Qt::LeftButton ) {
+ deselect();
+ d->cursor = d->xToPos( e->pos().x() );
+@@ -1772,6 +1791,33 @@
+ e->ignore();
+ }
+
++
++/*!
++ This function is not intended as polymorphic usage. Just a shared code
++ fragment that calls QWidget::sendMouseEventToInputContext() easily for this
++ class.
++ */
++bool QLineEdit::sendMouseEventToInputContext( QMouseEvent *e )
++{
++#ifndef QT_NO_IM
++ if ( d->composeMode() ) {
++ int cursor = d->xToPosInternal( e->pos().x(), QTextItem::OnCharacters );
++ int mousePos = cursor - d->imstart;
++ if ( mousePos >= 0 && mousePos < d->preeditLength() ) {
++ QWidget::sendMouseEventToInputContext( mousePos, e->type(),
++ e->button(), e->state() );
++ } else if ( e->type() != QEvent::MouseMove ) {
++ // send button events on out of preedit
++ QWidget::sendMouseEventToInputContext( -1, e->type(),
++ e->button(), e->state() );
++ }
++ return TRUE;
++ }
++#endif
++ return FALSE;
++}
++
++
+ /*! \reimp
+ */
+ void QLineEdit::imStartEvent( QIMEvent *e )
+@@ -1832,6 +1878,8 @@
+ }
+ if( !hasSelectedText() || style().styleHint( QStyle::SH_BlinkCursorWhenTextSelected ) )
+ d->setCursorVisible( TRUE );
++ if ( d->hasIMSelection() )
++ d->cursor = d->imselstart;
+ d->updateMicroFocusHint();
+ }
+
+@@ -1916,6 +1964,14 @@
+ } else if (d->hscroll < 0) {
+ d->hscroll = 0;
+ }
++ // This updateMicroFocusHint() is corresponding to update() at
++ // IMCompose event. Although the function is invoked from various
++ // other points, some situations such as "candidate selection on
++ // AlignHCenter'ed text" need this invocation because
++ // updateMicroFocusHint() requires updated contentsRect(), and
++ // there are no other chances in such situation that invoke the
++ // function.
++ d->updateMicroFocusHint();
+ // the y offset is there to keep the baseline constant in case we have script changes in the text.
+ QPoint topLeft = lineRect.topLeft() - QPoint(d->hscroll, d->ascent-fm.ascent());
+
+@@ -1956,7 +2012,7 @@
+ }
+
+ // input method edit area
+- if ( d->imstart < d->imend && (last >= d->imstart && first < d->imend ) ) {
++ if ( d->composeMode() && (last >= d->imstart && first < d->imend ) ) {
+ QRect highlight = QRect( QPoint( tix + ti.cursorToX( QMAX( d->imstart - first, 0 ) ), lineRect.top() ),
+ QPoint( tix + ti.cursorToX( QMIN( d->imend - first, last - first + 1 ) )-1, lineRect.bottom() ) ).normalize();
+ p->save();
+@@ -1969,11 +2025,16 @@
+ imCol.setHsv( h1, s1, ( v1 + v2 ) / 2 );
+ p->fillRect( highlight, imCol );
+ p->drawTextItem( topLeft, ti, textflags );
++ // draw preedit's underline
++ if (d->imend - d->imstart > 0) {
++ p->setPen( cg.text() );
++ p->drawLine( highlight.bottomLeft(), highlight.bottomRight() );
++ }
+ p->restore();
+ }
+
+ // input method selection
+- if ( d->imselstart < d->imselend && (last >= d->imselstart && first < d->imselend ) ) {
++ if ( d->hasIMSelection() && (last >= d->imselstart && first < d->imselend ) ) {
+ QRect highlight = QRect( QPoint( tix + ti.cursorToX( QMAX( d->imselstart - first, 0 ) ), lineRect.top() ),
+ QPoint( tix + ti.cursorToX( QMIN( d->imselend - first, last - first + 1 ) )-1, lineRect.bottom() ) ).normalize();
+ p->save();
+@@ -2001,7 +2062,11 @@
+ }
+
+ // draw cursor
+- if ( d->cursorVisible && !supressCursor ) {
++ //
++ // Asian users regard IM selection text as cursor on candidate
++ // selection phase of input method, so ordinary cursor should be
++ // invisible if IM selection text exists.
++ if ( d->cursorVisible && !supressCursor && !d->hasIMSelection() ) {
+ QPoint from( topLeft.x() + cix, lineRect.top() );
+ QPoint to = from + QPoint( 0, lineRect.height() );
+ p->drawLine( from, to );
+@@ -2116,6 +2181,10 @@
+ void QLineEdit::contextMenuEvent( QContextMenuEvent * e )
+ {
+ #ifndef QT_NO_POPUPMENU
++#ifndef QT_NO_IM
++ if ( d->composeMode() )
++ return;
++#endif
+ d->separate();
+ QPopupMenu *menu = createPopupMenu();
+ if (!menu)
+@@ -2169,6 +2238,13 @@
+ + ACCEL_KEY( A )
+ #endif
+ );
++
++#ifndef QT_NO_IM
++ QInputContext *qic = getInputContext();
++ if ( qic )
++ qic->addMenusTo( popup );
++#endif
++
+ popup->setItemEnabled( id - IdUndo, d->isUndoAvailable() );
+ popup->setItemEnabled( id - IdRedo, d->isRedoAvailable() );
+ #ifndef QT_NO_CLIPBOARD
+@@ -2302,7 +2378,7 @@
+ textLayout.endLine(0, 0, Qt::AlignLeft|Qt::SingleLine, &ascent);
+ }
+
+-int QLineEditPrivate::xToPos( int x, QTextItem::CursorPosition betweenOrOn ) const
++int QLineEditPrivate::xToPosInternal( int x, QTextItem::CursorPosition betweenOrOn ) const
+ {
+ x-= q->contentsRect().x() - hscroll + innerMargin;
+ for ( int i = 0; i < textLayout.numItems(); ++i ) {
+@@ -2311,7 +2387,13 @@
+ if ( x >= tir.left() && x <= tir.right() )
+ return ti.xToCursor( x - tir.x(), betweenOrOn ) + ti.from();
+ }
+- return x < 0 ? 0 : text.length();
++ return x < 0 ? -1 : text.length();
++}
++
++int QLineEditPrivate::xToPos( int x, QTextItem::CursorPosition betweenOrOn ) const
++{
++ int pos = xToPosInternal( x, betweenOrOn );
++ return ( pos < 0 ) ? 0 : pos;
+ }
+
+
+@@ -2332,9 +2414,19 @@
+
+ void QLineEditPrivate::updateMicroFocusHint()
+ {
++ // To reduce redundant microfocus update notification, we remember
++ // the old rect and update the microfocus if actual update is
++ // required. The rect o is intentionally static because some
++ // notifyee requires the microfocus information as global update
++ // rather than per notifyee update to place shared widget around
++ // microfocus.
++ static QRect o;
+ if ( q->hasFocus() ) {
+- QRect r = cursorRect();
+- q->setMicroFocusHint( r.x(), r.y(), r.width(), r.height() );
++ QRect r = cursorRect();
++ if ( o != r ) {
++ o = r;
++ q->setMicroFocusHint( r.x(), r.y(), r.width(), r.height() );
++ }
+ }
+ }
+
+--- src/widgets/qlineedit.h
++++ src/widgets/qlineedit.h
+@@ -196,6 +196,7 @@
+ void dropEvent( QDropEvent * );
+ #endif
+ void contextMenuEvent( QContextMenuEvent * );
++ bool sendMouseEventToInputContext( QMouseEvent *e );
+ virtual QPopupMenu *createPopupMenu();
+ void windowActivationChange( bool );
+ #ifndef QT_NO_COMPAT
+--- src/widgets/qtextedit.cpp
++++ src/widgets/qtextedit.cpp
+@@ -39,6 +39,11 @@
+
+ #ifndef QT_NO_TEXTEDIT
+
++// Keep this position to avoid patch rejection
++#ifndef QT_NO_IM
++#include "qinputcontext.h"
++#endif
++
+ #include "../kernel/qrichtext_p.h"
+ #include "qpainter.h"
+ #include "qpen.h"
+@@ -108,6 +113,8 @@
+ int id[ 7 ];
+ int preeditStart;
+ int preeditLength;
++ bool composeMode() const { return ( preeditLength > 0 ); }
++
+ uint ensureCursorVisibleInShowEvent : 1;
+ uint tabChangesFocus : 1;
+ QString scrollToAnchor; // used to deferr scrollToAnchor() until the show event when we are resized
+@@ -1078,6 +1085,10 @@
+ l += v;
+ }
+ }
++
++ // This invocation is required to follow dragging of active window
++ // by the showed candidate window.
++ updateMicroFocusHint();
+ }
+
+ /*!
+@@ -1553,6 +1564,35 @@
+ }
+
+ /*!
++ This function is not intended as polymorphic usage. Just a shared code
++ fragment that calls QWidget::sendMouseEventToInputContext() easily for this
++ class.
++ */
++bool QTextEdit::sendMouseEventToInputContext( QMouseEvent *e )
++{
++#ifndef QT_NO_IM
++ if ( d->composeMode() ) {
++ QTextCursor c( doc );
++ if ( c.place( e->pos(), doc->firstParagraph(), FALSE, FALSE, FALSE ) ) {
++ int mousePos = c.index() - d->preeditStart;
++ if ( cursor->globalY() == c.globalY() &&
++ mousePos >= 0 && mousePos < d->preeditLength ) {
++ QWidget::sendMouseEventToInputContext( mousePos, e->type(),
++ e->button(), e->state() );
++ }
++ } else if ( e->type() != QEvent::MouseMove ) {
++ // send button events on out of preedit
++ QWidget::sendMouseEventToInputContext( -1, e->type(),
++ e->button(), e->state() );
++ }
++ return TRUE;
++ }
++#endif
++ return FALSE;
++}
++
++
++/*!
+ \reimp
+ */
+ void QTextEdit::imStartEvent( QIMEvent *e )
+@@ -1582,11 +1622,17 @@
+ doc->removeSelection( QTextDocument::IMCompositionText );
+ doc->removeSelection( QTextDocument::IMSelectionText );
+
+- if ( d->preeditLength > 0 && cursor->paragraph() )
++ if ( d->composeMode() && cursor->paragraph() )
+ cursor->paragraph()->remove( d->preeditStart, d->preeditLength );
+ cursor->setIndex( d->preeditStart );
+ d->preeditLength = e->text().length();
+- insert( e->text() );
++
++ int sellen = e->selectionLength();
++ uint insertionFlags = CheckNewLines | RemoveSelected | AsIMCompositionText;
++ if ( sellen > 0 ) {
++ insertionFlags |= WithIMSelection;
++ }
++ insert( e->text(), insertionFlags );
+ // insert can trigger an imEnd event as it emits a textChanged signal, so better
+ // be careful
+ if(d->preeditStart != -1) {
+@@ -1598,14 +1644,20 @@
+
+ cursor->setIndex( d->preeditStart + e->cursorPos() );
+
+- int sellen = e->selectionLength();
+ if ( sellen > 0 ) {
+ cursor->setIndex( d->preeditStart + e->cursorPos() + sellen );
+ c = *cursor;
+ cursor->setIndex( d->preeditStart + e->cursorPos() );
+ doc->setSelectionStart( QTextDocument::IMSelectionText, *cursor );
+ doc->setSelectionEnd( QTextDocument::IMSelectionText, c );
++#if 0
++ // Disabled for Asian input method that shows candidate
++ // window. This behavior is same as Qt/E 2.3.7 which supports
++ // Asian input methods. Asian input methods need start point
++ // of IM selection text to place candidate window as adjacent
++ // to the selection text.
+ cursor->setIndex( d->preeditStart + d->preeditLength );
++#endif
+ }
+ }
+
+@@ -1629,11 +1681,12 @@
+ if (undoRedoInfo.type == UndoRedoInfo::IME)
+ undoRedoInfo.type = UndoRedoInfo::Invalid;
+
+- if ( d->preeditLength > 0 && cursor->paragraph() )
++ if ( d->composeMode() && cursor->paragraph() )
+ cursor->paragraph()->remove( d->preeditStart, d->preeditLength );
+ if ( d->preeditStart >= 0 ) {
+ cursor->setIndex( d->preeditStart );
+- insert( e->text() );
++ //TODO: Qt 4 we should use the new virtual insert function
++ insert( e->text(), FALSE );
+ }
+ d->preeditStart = d->preeditLength = -1;
+
+@@ -2124,6 +2177,13 @@
+ isReadOnly() )
+ return;
+
++ // Asian users regard selection text as cursor on candidate
++ // selection phase of input method, so ordinary cursor should be
++ // invisible if IM selection text exists.
++ if ( doc->hasSelection( QTextDocument::IMSelectionText ) ) {
++ visible = FALSE;
++ }
++
+ QPainter p( viewport() );
+ QRect r( cursor->topParagraph()->rect() );
+ cursor->paragraph()->setChanged( TRUE );
+@@ -2198,6 +2258,9 @@
+ }
+ #endif
+
++ if ( sendMouseEventToInputContext( e ) )
++ return;
++
+ if ( d->trippleClickTimer->isActive() &&
+ ( e->globalPos() - d->trippleClickPoint ).manhattanLength() <
+ QApplication::startDragDistance() ) {
+@@ -2303,7 +2366,9 @@
+ return;
+ }
+ #endif
+- if ( mousePressed ) {
++ if ( sendMouseEventToInputContext( e ) ) {
++ // don't return from here to avoid cursor vanishing
++ } else if ( mousePressed ) {
+ #ifndef QT_NO_DRAGANDDROP
+ if ( mightStartDrag ) {
+ dragStartTimer->stop();
+@@ -2360,7 +2425,7 @@
+
+ void QTextEdit::contentsMouseReleaseEvent( QMouseEvent * e )
+ {
+- if ( !inDoubleClick ) { // could be the release of a dblclick
++ if ( !inDoubleClick && !d->composeMode() ) { // could be the release of a dblclick
+ int para = 0;
+ int index = charAt( e->pos(), &para );
+ emit clicked( para, index );
+@@ -2371,6 +2436,8 @@
+ return;
+ }
+ #endif
++ if ( sendMouseEventToInputContext( e ) )
++ return;
+ QTextCursor oldCursor = *cursor;
+ if ( scrollTimer->isActive() )
+ scrollTimer->stop();
+@@ -2464,7 +2531,7 @@
+
+ void QTextEdit::contentsMouseDoubleClickEvent( QMouseEvent * e )
+ {
+- if ( e->button() != Qt::LeftButton ) {
++ if ( e->button() != Qt::LeftButton && !d->composeMode() ) {
+ e->ignore();
+ return;
+ }
+@@ -2495,6 +2562,9 @@
+ } else
+ #endif
+ {
++ if ( sendMouseEventToInputContext( e ) )
++ return;
++
+ QTextCursor c1 = *cursor;
+ QTextCursor c2 = *cursor;
+ #if defined(Q_OS_MAC)
+@@ -2670,10 +2740,15 @@
+ */
+ void QTextEdit::contentsContextMenuEvent( QContextMenuEvent *e )
+ {
++ e->accept();
++#ifndef QT_NO_IM
++ if ( d->composeMode() )
++ return;
++#endif
++
+ clearUndoRedo();
+ mousePressed = FALSE;
+
+- e->accept();
+ #ifndef QT_NO_POPUPMENU
+ QGuardedPtr<QTextEdit> that = this;
+ QGuardedPtr<QPopupMenu> popup = createPopupMenu( e->pos() );
+@@ -2823,6 +2898,12 @@
+ void QTextEdit::updateMicroFocusHint()
+ {
+ QTextCursor c( *cursor );
++#if 0
++ // Disabled for Asian input method that shows candidate
++ // window. This behavior is same as Qt/E 2.3.7 which supports
++ // Asian input methods. Asian input methods need start point of IM
++ // selection text to place candidate window as adjacent to the
++ // selection text.
+ if ( d->preeditStart != -1 ) {
+ c.setIndex( d->preeditStart );
+ if(doc->hasSelection(QTextDocument::IMSelectionText)) {
+@@ -2831,7 +2912,8 @@
+ c.setIndex(index);
+ }
+ }
+-
++#endif
++
+ if ( hasFocus() || viewport()->hasFocus() ) {
+ int h = c.paragraph()->lineHeightOfChar( cursor->index() );
+ if ( !readonly ) {
+@@ -2995,6 +3077,8 @@
+ bool indent = insertionFlags & RedoIndentation;
+ bool checkNewLine = insertionFlags & CheckNewLines;
+ bool removeSelected = insertionFlags & RemoveSelected;
++ bool imComposition = insertionFlags & AsIMCompositionText;
++ bool imSelection = insertionFlags & WithIMSelection;
+ QString txt( text );
+ drawCursor( FALSE );
+ if ( !isReadOnly() && doc->hasSelection( QTextDocument::Standard ) && removeSelected )
+@@ -3034,7 +3118,10 @@
+ formatMore();
+ repaintChanged();
+ ensureCursorVisible();
+- drawCursor( TRUE );
++ // Asian users regard selection text as cursor on candidate
++ // selection phase of input method, so ordinary cursor should be
++ // invisible if IM selection text exists.
++ drawCursor( !imSelection );
+
+ if ( undoEnabled && !isReadOnly() && undoRedoInfo.type != UndoRedoInfo::IME ) {
+ undoRedoInfo.d->text += txt;
+@@ -3056,7 +3143,13 @@
+ doc->setSelectionEnd( QTextDocument::Standard, *cursor );
+ repaintChanged();
+ }
+- updateMicroFocusHint();
++ // updateMicroFocusHint() should not be invoked here when this
++ // function is invoked from imComposeEvent() because cursor
++ // postion is incorrect yet. imComposeEvent() invokes
++ // updateMicroFocusHint() later.
++ if ( !imComposition ) {
++ updateMicroFocusHint();
++ }
+ setModified();
+ emit textChanged();
+ }
+@@ -5568,6 +5661,13 @@
+ #else
+ d->id[ IdSelectAll ] = popup->insertItem( tr( "Select All" ) + ACCEL_KEY( A ) );
+ #endif
++
++#ifndef QT_NO_IM
++ QInputContext *qic = getInputContext();
++ if ( qic )
++ qic->addMenusTo( popup );
++#endif
++
+ popup->setItemEnabled( d->id[ IdUndo ], !isReadOnly() && doc->commands()->isUndoAvailable() );
+ popup->setItemEnabled( d->id[ IdRedo ], !isReadOnly() && doc->commands()->isRedoAvailable() );
+ #ifndef QT_NO_CLIPBOARD
+--- src/widgets/qtextedit.h
++++ src/widgets/qtextedit.h
+@@ -211,7 +211,9 @@
+ enum TextInsertionFlags {
+ RedoIndentation = 0x0001,
+ CheckNewLines = 0x0002,
+- RemoveSelected = 0x0004
++ RemoveSelected = 0x0004,
++ AsIMCompositionText = 0x0008, // internal use
++ WithIMSelection = 0x0010 // internal use
+ };
+
+ QTextEdit( const QString& text, const QString& context = QString::null,
+@@ -439,6 +441,7 @@
+ void contentsDropEvent( QDropEvent *e );
+ #endif
+ void contentsContextMenuEvent( QContextMenuEvent *e );
++ bool sendMouseEventToInputContext( QMouseEvent *e );
+ bool focusNextPrevChild( bool next );
+ QTextDocument *document() const;
+ QTextCursor *textCursor() const;
+--- tools/qtconfig/mainwindowbase.ui
++++ tools/qtconfig/mainwindowbase.ui
+@@ -1016,6 +1016,19 @@
+ <number>0</number>
+ </property>
+ </widget>
++ <widget class="QLabel">
++ <property name="name">
++ <cstring>inputMethodLabel</cstring>
++ </property>
++ <property name="text">
++ <string>Default Input Method:</string>
++ </property>
++ </widget>
++ <widget class="QComboBox">
++ <property name="name">
++ <cstring>inputMethodCombo</cstring>
++ </property>
++ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>spacer5</cstring>
+@@ -1029,7 +1042,7 @@
+ <property name="sizeHint">
+ <size>
+ <width>20</width>
+- <height>40</height>
++ <height>30</height>
+ </size>
+ </property>
+ </spacer>
+@@ -1705,6 +1718,12 @@
+ <slot>somethingModified()</slot>
+ </connection>
+ <connection>
++ <sender>inputMethodCombo</sender>
++ <signal>activated(int)</signal>
++ <receiver>MainWindowBase</receiver>
++ <slot>somethingModified()</slot>
++ </connection>
++ <connection>
+ <sender>gstylecombo</sender>
+ <signal>activated(const QString&amp;)</signal>
+ <receiver>MainWindowBase</receiver>
+--- tools/qtconfig/mainwindow.cpp
++++ tools/qtconfig/mainwindow.cpp
+@@ -27,6 +27,7 @@
+ #include <qapplication.h>
+ #include <qcombobox.h>
+ #include <qstylefactory.h>
++#include <qinputcontextfactory.h>
+ #include <qobjectlist.h>
+ #include <qfontdatabase.h>
+ #include <qlineedit.h>
+@@ -361,13 +362,73 @@
+
+ rtlExtensions->setChecked( settings.readBoolEntry( "/qt/useRtlExtensions", FALSE ) );
+
+-#ifdef Q_WS_X11
++#if defined(Q_WS_X11)
+ inputStyle->setCurrentText( settings.readEntry( "/qt/XIMInputStyle", trUtf8( "On The Spot" ) ) );
+ #else
+ inputStyle->hide();
+ inputStyleLabel->hide();
+ #endif
+
++#if defined(Q_WS_X11) && !defined(QT_NO_IM_EXTENSIONS)
++ /*
++ This code makes it possible to set up default input method.
++
++ The list of identifier names of input method which can be used
++ is acquired using QInputContextFactory::keys(). And it is
++ translated to display name and set to inputMethodCombo which
++ displays the list of input method.
++ */
++ inputMethodIdentifiers = QInputContextFactory::keys();
++ QStringList imDispNames;
++ {
++ // input method switcher should named with "imsw-" prefix to
++ // prevent to be listed in ordinary input method list.
++ QStringList::Iterator imIt = inputMethodIdentifiers.begin();
++ while (imIt != inputMethodIdentifiers.end()) {
++ if ((*imIt).find("imsw-") == 0)
++ imIt = inputMethodIdentifiers.remove(imIt);
++ else
++ imIt++;
++ }
++ // we should not sort the list
++ //inputMethodIdentifiers.sort();
++ for (imIt = inputMethodIdentifiers.begin();
++ imIt != inputMethodIdentifiers.end();
++ imIt++) {
++ QString dispName = QInputContextFactory::displayName(*imIt);
++ if (dispName.isNull() || dispName.isEmpty())
++ dispName = *imIt;
++ imDispNames << dispName;
++ }
++ }
++ //inputMethodCombo->insertStringList(inputMethodIdentifiers);
++ inputMethodCombo->insertStringList(imDispNames);
++
++ /*
++ input method set up as a default in the past is chosen.
++ If nothing is set up, default input method in the platform is chosen.
++ */
++ // default input method is XIM in X11.
++ QString currentIM = settings.readEntry("/qt/DefaultInputMethod", "xim");
++ {
++ int index = inputMethodIdentifiers.findIndex(currentIM);
++ // set up Selected input method.
++ if (0 <= index && index < inputMethodIdentifiers.count()) {
++ inputMethodCombo->setCurrentItem(index);
++ } else {
++ // Give up. this part is executed when specified IM is not
++ // installed.
++ QString dispName = tr("Unknown Input Method") + " (" + currentIM + ")";
++ inputMethodCombo->insertItem(dispName);
++ inputMethodCombo->setCurrentItem(inputMethodCombo->count() - 1);
++ inputMethodIdentifiers << currentIM;
++ }
++ }
++#else
++ inputMethodCombo->hide();
++ inputMethodLabel->hide();
++#endif
++
+ fontembeddingcheckbox->setChecked( settings.readBoolEntry("/qt/embedFonts", TRUE) );
+ fontpaths = settings.readListEntry("/qt/fontPath", ':');
+ fontpathlistbox->insertStringList(fontpaths);
+@@ -444,6 +505,13 @@
+ else if ( style == trUtf8( "Root" ) )
+ str = "Root";
+ settings.writeEntry( "/qt/XIMInputStyle", inputStyle->currentText() );
++
++#if !defined(QT_NO_IM_EXTENSIONS)
++ QString imSwitcher = settings.readEntry("/qt/DefaultInputMethodSwitcher", "imsw-multi");
++ settings.writeEntry("/qt/DefaultInputMethodSwitcher", imSwitcher);
++ int imIndex = inputMethodCombo->currentItem();
++ settings.writeEntry("/qt/DefaultInputMethod", inputMethodIdentifiers[imIndex]);
++#endif
+ #endif
+
+ QStringList effects;
+--- tools/qtconfig/mainwindow.h
++++ tools/qtconfig/mainwindow.h
+@@ -83,6 +83,7 @@
+ QPalette editPalette, previewPalette;
+ QStyle *previewstyle;
+ QStringList fontpaths;
++ QStringList inputMethodIdentifiers;
+ bool modified;
+ };
+
diff --git a/opensuse/core/qt3/qt.patch b/opensuse/core/qt3/qt.patch
new file mode 100644
index 000000000..fb236265a
--- /dev/null
+++ b/opensuse/core/qt3/qt.patch
@@ -0,0 +1,270 @@
+--- src/dialogs/qcolordialog.cpp
++++ src/dialogs/qcolordialog.cpp
+@@ -60,6 +60,10 @@
+ QColor macGetColor( const QColor& initial, QWidget *parent, const char *name );
+ #endif
+
++#ifdef Q_WS_X11
++#include "private/qtkdeintegration_x11_p.h"
++#endif
++
+ //////////// QWellArray BEGIN
+
+ struct QWellArrayData;
+@@ -1478,7 +1482,10 @@
+ QColor QColorDialog::getColor( const QColor& initial, QWidget *parent,
+ const char *name )
+ {
+-#if defined(Q_WS_MAC)
++#if defined(Q_WS_X11)
++ if( QKDEIntegration::enabled())
++ return QKDEIntegration::getColor( initial, parent, name );
++#elif defined(Q_WS_MAC)
+ return macGetColor(initial, parent, name);
+ #endif
+
+@@ -1516,6 +1523,13 @@
+ QWidget *parent, const char* name )
+ {
+ #if defined(Q_WS_MAC)
++ if( QKDEIntegration::enabled()) {
++ QColor color = QKDEIntegration::getColor( QColor( initial ), parent, name );
++ if( ok )
++ *ok = color.isValid();
++ return color.rgba();
++ }
++#elif defined(Q_WS_MAC)
+ return macGetRgba(initial, ok, parent, name);
+ #endif
+
+--- src/dialogs/qfiledialog.cpp
++++ src/dialogs/qfiledialog.cpp
+@@ -92,6 +92,10 @@
+ #include "qvbox.h"
+ #include "qwidgetstack.h"
+
++#ifdef Q_WS_X11
++#include "private/qtkdeintegration_x11_p.h"
++#endif
++
+ #ifdef Q_WS_WIN
+ #ifdef QT_THREAD_SUPPORT
+ # include <private/qmutexpool_p.h>
+@@ -3464,7 +3468,11 @@
+ if ( workingDirectory->isNull() )
+ *workingDirectory = ::toRootIfNotExists( QDir::currentDirPath() );
+
+-#if defined(Q_WS_WIN)
++#if defined(Q_WS_X11)
++ if ( qt_use_native_dialogs && QKDEIntegration::enabled())
++ return QKDEIntegration::getOpenFileNames( filter, workingDirectory, parent, name,
++ caption, selectedFilter, false ).first();
++#elif defined(Q_WS_WIN)
+ if ( qt_use_native_dialogs && qApp->style().styleHint( QStyle::SH_GUIStyle ) == WindowsStyle )
+ return winGetOpenFileName( initialSelection, filter, workingDirectory,
+ parent, name, caption, selectedFilter );
+@@ -3585,7 +3593,11 @@
+ if ( workingDirectory->isNull() )
+ *workingDirectory = ::toRootIfNotExists( QDir::currentDirPath() );
+
+-#if defined(Q_WS_WIN)
++#if defined(Q_WS_X11)
++ if ( qt_use_native_dialogs && QKDEIntegration::enabled())
++ return QKDEIntegration::getSaveFileName( initialSelection, filter, workingDirectory,
++ parent, name, caption, selectedFilter );
++#elif defined(Q_WS_WIN)
+ if ( qt_use_native_dialogs && qApp->style().styleHint( QStyle::SH_GUIStyle ) == WindowsStyle )
+ return winGetSaveFileName( initialSelection, filter, workingDirectory,
+ parent, name, caption, selectedFilter );
+@@ -4475,7 +4487,17 @@
+ if ( workingDirectory )
+ wd = *workingDirectory;
+
+-#if defined(Q_WS_WIN)
++#if defined(Q_WS_X11)
++ QString initialDir;
++ if ( !dir.isEmpty() ) {
++ QUrlOperator u( dir );
++ if ( QFileInfo( u.path() ).isDir() )
++ initialDir = dir;
++ } else
++ initialDir = QString::null;
++ if ( qt_use_native_dialogs && QKDEIntegration::enabled())
++ return QKDEIntegration::getExistingDirectory( initialDir, parent, name, caption );
++#elif defined(Q_WS_WIN)
+ QString initialDir;
+ if ( !dir.isEmpty() ) {
+ QUrlOperator u( dir );
+@@ -5636,7 +5658,10 @@
+ }
+ }
+
+-#if defined(Q_WS_WIN)
++#if defined(Q_WS_X11)
++ if ( qt_use_native_dialogs && QKDEIntegration::enabled())
++ return QKDEIntegration::getOpenFileNames( filter, workingDirectory, parent, name, caption, selectedFilter, true );
++#elif defined(Q_WS_WIN)
+ if ( qt_use_native_dialogs && qApp->style().styleHint( QStyle::SH_GUIStyle ) == WindowsStyle )
+ return winGetOpenFileNames( filter, workingDirectory, parent, name, caption, selectedFilter );
+ #elif defined(Q_WS_MAC)
+--- src/dialogs/qfontdialog.cpp
++++ src/dialogs/qfontdialog.cpp
+@@ -56,6 +56,10 @@
+ #include <private/qfontdata_p.h>
+ #include <qvalidator.h>
+
++#ifdef Q_WS_X11
++#include "private/qtkdeintegration_x11_p.h"
++#endif
++
+ /*!
+ \class QFontDialog qfontdialog.h
+ \ingroup dialogs
+@@ -384,9 +388,15 @@
+ return getFont( ok, 0, parent, name );
+ }
+
++extern bool qt_use_native_dialogs;
++
+ QFont QFontDialog::getFont( bool *ok, const QFont *def,
+ QWidget *parent, const char* name)
+ {
++#if defined(Q_WS_X11)
++ if ( qt_use_native_dialogs && QKDEIntegration::enabled())
++ return QKDEIntegration::getFont( ok, def, parent, name );
++#endif
+ QFont result;
+ if ( def )
+ result = *def;
+--- src/dialogs/qmessagebox.cpp
++++ src/dialogs/qmessagebox.cpp
+@@ -54,6 +54,12 @@
+ #endif
+
+
++#ifdef Q_WS_X11
++#include "private/qtkdeintegration_x11_p.h"
++#endif
++
++extern bool qt_use_native_dialogs;
++
+ // Internal class - don't touch
+
+ class QMessageBoxLabel : public QLabel
+@@ -1110,6 +1116,10 @@
+ const QString& caption, const QString& text,
+ int button0, int button1, int button2 )
+ {
++#if defined(Q_WS_X11)
++ if ( qt_use_native_dialogs && QKDEIntegration::enabled())
++ return QKDEIntegration::information( parent, caption, text, button0, button1, button2 );
++#endif
+ QMessageBox *mb = new QMessageBox( caption, text, Information,
+ button0, button1, button2,
+ parent, "qt_msgbox_information", TRUE,
+@@ -1157,6 +1167,10 @@
+ const QString& caption, const QString& text,
+ int button0, int button1, int button2 )
+ {
++#if defined(Q_WS_X11)
++ if ( qt_use_native_dialogs && QKDEIntegration::enabled())
++ return QKDEIntegration::question( parent, caption, text, button0, button1, button2 );
++#endif
+ QMessageBox *mb = new QMessageBox( caption, text, Question,
+ button0, button1, button2,
+ parent, "qt_msgbox_information", TRUE,
+@@ -1205,6 +1219,10 @@
+ const QString& caption, const QString& text,
+ int button0, int button1, int button2 )
+ {
++#if defined(Q_WS_X11)
++ if ( qt_use_native_dialogs && QKDEIntegration::enabled())
++ return QKDEIntegration::warning( parent, caption, text, button0, button1, button2 );
++#endif
+ QMessageBox *mb = new QMessageBox( caption, text, Warning,
+ button0, button1, button2,
+ parent, "qt_msgbox_warning", TRUE,
+@@ -1253,6 +1271,10 @@
+ const QString& caption, const QString& text,
+ int button0, int button1, int button2 )
+ {
++#if defined(Q_WS_X11)
++ if ( qt_use_native_dialogs && QKDEIntegration::enabled())
++ return QKDEIntegration::critical( parent, caption, text, button0, button1, button2 );
++#endif
+ QMessageBox *mb = new QMessageBox( caption, text, Critical,
+ button0, button1, button2,
+ parent, "qt_msgbox_critical", TRUE,
+@@ -1400,6 +1422,11 @@
+ int defaultButtonNumber,
+ int escapeButtonNumber )
+ {
++#if defined(Q_WS_X11)
++ if ( qt_use_native_dialogs && QKDEIntegration::enabled())
++ return QKDEIntegration::information( parent, caption, text,
++ button0Text, button1Text, button2Text, defaultButtonNumber, escapeButtonNumber );
++#endif
+ return textBox( parent, Information, caption, text,
+ button0Text, button1Text, button2Text,
+ defaultButtonNumber, escapeButtonNumber );
+@@ -1442,6 +1469,11 @@
+ int defaultButtonNumber,
+ int escapeButtonNumber )
+ {
++#if defined(Q_WS_X11)
++ if ( qt_use_native_dialogs && QKDEIntegration::enabled())
++ return QKDEIntegration::question( parent, caption, text,
++ button0Text, button1Text, button2Text, defaultButtonNumber, escapeButtonNumber );
++#endif
+ return textBox( parent, Question, caption, text,
+ button0Text, button1Text, button2Text,
+ defaultButtonNumber, escapeButtonNumber );
+@@ -1486,6 +1518,11 @@
+ int defaultButtonNumber,
+ int escapeButtonNumber )
+ {
++#if defined(Q_WS_X11)
++ if ( qt_use_native_dialogs && QKDEIntegration::enabled())
++ return QKDEIntegration::warning( parent, caption, text,
++ button0Text, button1Text, button2Text, defaultButtonNumber, escapeButtonNumber );
++#endif
+ return textBox( parent, Warning, caption, text,
+ button0Text, button1Text, button2Text,
+ defaultButtonNumber, escapeButtonNumber );
+@@ -1526,6 +1563,11 @@
+ int defaultButtonNumber,
+ int escapeButtonNumber )
+ {
++#if defined(Q_WS_X11)
++ if ( qt_use_native_dialogs && QKDEIntegration::enabled())
++ return QKDEIntegration::critical( parent, caption, text,
++ button0Text, button1Text, button2Text, defaultButtonNumber, escapeButtonNumber );
++#endif
+ return textBox( parent, Critical, caption, text,
+ button0Text, button1Text, button2Text,
+ defaultButtonNumber, escapeButtonNumber );
+--- src/kernel/qt.h
++++ src/kernel/qt.h
+@@ -313,6 +313,10 @@
+ #endif // Private headers
+
+
++#ifdef Q_WS_X11
++#include "private/qtkdeintegration_x11_p.h"
++#endif
++
+ #ifdef Q_WS_MAC
+ #include <qaquastyle.h>
+ #include <qmacstyle_mac.h>
+--- src/kernel/qt_x11.pri
++++ src/kernel/qt_x11.pri
+@@ -10,6 +10,9 @@
+
+ SOURCES += $$KERNEL_CPP/qtaddons_x11.cpp
+ PRECOMPILED_HEADER = kernel/qt_pch.h
++
++ SOURCES += $$KERNEL_CPP/qtkdeintegration_x11.cpp
++ HEADERS += $$KERNEL_H/qtkdeintegration_x11_p.h
+ }
+
+ nas {
diff --git a/opensuse/core/qt3/qt3-3.3.8b-translations.tar.bz2 b/opensuse/core/qt3/qt3-3.3.8b-translations.tar.bz2
new file mode 100644
index 000000000..a94839aa5
--- /dev/null
+++ b/opensuse/core/qt3/qt3-3.3.8b-translations.tar.bz2
Binary files differ
diff --git a/opensuse/core/qt3/qt3-arm-gcc4.patch b/opensuse/core/qt3/qt3-arm-gcc4.patch
new file mode 100644
index 000000000..d9f38f547
--- /dev/null
+++ b/opensuse/core/qt3/qt3-arm-gcc4.patch
@@ -0,0 +1,22 @@
+--- src/tools/qglobal.h
++++ src/tools/qglobal.h
+@@ -317,7 +317,7 @@
+ supposedly know what you are doing.) */
+ # if (defined(__arm__) || defined(__ARMEL__)) && !defined(QT_MOC_CPP)
+ # define Q_PACKED __attribute__ ((packed))
+-# if __GNUC__ == 3 && __GNUC_MINOR__ >= 4
++# if (__GNUC__ == 3 && __GNUC_MINOR__ >= 4) || __GNUC__ > 3
+ # define Q_NO_PACKED_REFERENCE
+ # endif
+ # endif
+--- src/tools/qstring.h
++++ src/tools/qstring.h
+@@ -194,7 +194,7 @@
+ char latin1() const { return ucs > 0xff ? 0 : (char) ucs; }
+ ushort unicode() const { return ucs; }
+ #ifdef Q_NO_PACKED_REFERENCE
+- ushort &unicode() { return *(&ucs); }
++ ushort &unicode() { return *((ushort*)&ucs); }
+ #else
+ ushort &unicode() { return ucs; }
+ #endif
diff --git a/opensuse/core/qt3/qt3-devel-doc.changes b/opensuse/core/qt3/qt3-devel-doc.changes
new file mode 100644
index 000000000..db0df1efa
--- /dev/null
+++ b/opensuse/core/qt3/qt3-devel-doc.changes
@@ -0,0 +1,2475 @@
+-------------------------------------------------------------------
+Fri Sep 23 10:16:33 UTC 2011 - coolo@suse.com
+
+- fix qt3-extensions
+
+-------------------------------------------------------------------
+Fri Apr 22 18:31:12 UTC 2011 - anixx@opensuse.org
+
+- changed compression to .tar.bz2
+
+-------------------------------------------------------------------
+Thu Apr 21 11:40:38 CEST 2011 - pth@suse.de
+
+- Don't try to patch in the version twice in qt-3.3.8c.diff.
+- Resync those patches that don't apply without offset.
+- Mark scriptlets in profile.d as being configuration files.
+- Remove the calls to run_ldconfig.
+
+-------------------------------------------------------------------
+Mon Apr 18 18:46:34 UTC 2011 - robxu9@gmail.com
+
+- a fix to the 3.3.8c patch
+
+-------------------------------------------------------------------
+Thu Mar 31 18:15:29 UTC 2011 - coolo@novell.com
+
+- another gcc 4.6 fix
+
+-------------------------------------------------------------------
+Mon Jan 31 21:23:51 UTC 2011 - robxu9@gmail.com
+
+- Update to version 3.3.8c, by the Trinity Project
+- pre_checkin.sh was not run as this caused too many unneccesary
+ changes to occur.
+- The translations tarball was left at version 3.3.8b.
+
+-------------------------------------------------------------------
+Sat Nov 20 02:26:08 CET 2010 - dmueller@suse.de
+
+- fix build against gcc 4.6
+
+-------------------------------------------------------------------
+Mon Nov 1 10:09:40 UTC 2010 - coolo@novell.com
+
+- fix libpng dependencies
+
+-------------------------------------------------------------------
+Wed Sep 1 13:22:38 UTC 2010 - pgajdos@novell.com
+
+- port to libpng14
+
+-------------------------------------------------------------------
+Wed May 5 19:42:33 UTC 2010 - coolo@novell.com
+
+- do not patch the symlink
+
+-------------------------------------------------------------------
+Mon Apr 5 21:06:20 CEST 2010 - dmueller@suse.de
+
+- fix -devel package requires
+- simplify requires of sub-specfiles
+
+-------------------------------------------------------------------
+Mon Apr 5 16:00:15 CEST 2010 - dmueller@suse.de
+
+- build against libpng12
+
+-------------------------------------------------------------------
+Thu Jan 21 14:24:13 CET 2010 - dmueller@suse.de
+
+- recommend kdelibs3-default-style (bnc#544581)
+
+-------------------------------------------------------------------
+Fri Dec 18 17:04:51 CET 2009 - jengelh@medozas.de
+
+- add baselibs.conf as a source
+- add baselib definitions for SPARC
+
+-------------------------------------------------------------------
+Fri Nov 13 14:28:47 CET 2009 - dmueller@suse.de
+
+- fix patches to apply with fuzz=0
+
+-------------------------------------------------------------------
+Tue Nov 3 19:14:30 UTC 2009 - coolo@novell.com
+
+- updated patches to apply with fuzz=0
+
+-------------------------------------------------------------------
+Tue Aug 11 11:24:13 CEST 2009 - dmueller@suse.de
+
+- fix popen leak (bnc#529615)
+
+-------------------------------------------------------------------
+Mon Feb 9 12:08:04 CET 2009 - coolo@suse.de
+
+- strip out date from .la files
+
+-------------------------------------------------------------------
+Sat Feb 7 20:43:40 CET 2009 - coolo@suse.de
+
+- do not put timestamps in generated sources
+
+-------------------------------------------------------------------
+Wed Jan 7 12:34:56 CET 2009 - olh@suse.de
+
+- obsolete old -XXbit packages (bnc#437293)
+
+-------------------------------------------------------------------
+Tue Nov 11 16:57:56 CET 2008 - ro@suse.de
+
+- SLE-11 uses PPC64 instead of PPC, adapt baselibs.conf
+
+-------------------------------------------------------------------
+Wed Sep 10 18:50:12 CEST 2008 - dmueller@suse.de
+
+- remove qt3-static package
+
+-------------------------------------------------------------------
+Mon Jul 21 21:20:47 CEST 2008 - dmueller@suse.de
+
+- more verbose qtimer debug
+
+-------------------------------------------------------------------
+Sun Jun 22 13:00:45 CEST 2008 - schwab@suse.de
+
+- Fix invalid array reference in font name parser.
+
+-------------------------------------------------------------------
+Thu Apr 10 12:54:45 CEST 2008 - ro@suse.de
+
+- added baselibs.conf file to build xxbit packages
+ for multilib support
+
+-------------------------------------------------------------------
+Mon Mar 10 16:48:36 CET 2008 - dmueller@suse.de
+
+- fix build with updated x.org
+
+-------------------------------------------------------------------
+Thu Feb 7 17:51:25 CET 2008 - dmueller@suse.de
+
+- fix memory corruption when removing CRTc's dynamically
+
+-------------------------------------------------------------------
+Sat Jan 19 07:19:25 CET 2008 - stbinner@suse.de
+
+- This version adds the GNU Public License version 3 as a
+ possible choice for licenses to the Open Source releases of Qt 3.
+- upstreaming of patches and few other minor bugfixes
+
+-------------------------------------------------------------------
+Tue Jan 15 01:42:37 CET 2008 - dmueller@suse.de
+
+- fix xrandr resize race (#335410)
+
+-------------------------------------------------------------------
+Thu Dec 6 01:32:32 CET 2007 - dmueller@suse.de
+
+- fix the build key for gcc 4.3
+
+-------------------------------------------------------------------
+Mon Dec 3 15:12:36 CET 2007 - dmueller@suse.de
+
+- back out khmer "fix" from 3.3.8, which apparently
+ made it worse (#345459)
+
+-------------------------------------------------------------------
+Tue Nov 20 20:25:18 CET 2007 - dmueller@suse.de
+
+- fix build with gcc 4.3 again
+
+-------------------------------------------------------------------
+Mon Oct 1 11:48:51 CEST 2007 - dmueller@suse.de
+
+- fix build with gcc 4.3
+
+-------------------------------------------------------------------
+Fri Sep 7 12:32:22 CEST 2007 - dmueller@suse.de
+
+- fix off-by-one in utf8 decoder (#304249, CVE-2007-4137)
+- fix typo in QDate::fromString()
+
+-------------------------------------------------------------------
+Wed Aug 29 17:08:22 CEST 2007 - llunak@suse.cz
+
+- fix reading MNG files, visible in Kickoff (#278548)
+- remove patching of symlinks from the immodule patch
+- improve support for compositing (qt-copy patches #0079,#0080)
+
+-------------------------------------------------------------------
+Fri Aug 24 18:39:04 CEST 2007 - dmueller@suse.de
+
+- fix format string issues (#291754, CVE-2007-3388)
+- fix xrandr 1.2 detection
+
+-------------------------------------------------------------------
+Thu Jul 5 17:25:18 CEST 2007 - coolo@suse.de
+
+- package desktop files and png files
+
+-------------------------------------------------------------------
+Thu Jun 21 12:04:33 CEST 2007 - stbinner@suse.de
+
+- run fdupes in qt3-extensions.spec
+
+-------------------------------------------------------------------
+Thu May 24 19:15:38 CEST 2007 - dmueller@suse.de
+
+- redo the last change in the correct spec file
+
+-------------------------------------------------------------------
+Wed May 23 17:08:39 CEST 2007 - dmueller@suse.de
+
+- qt3-examples -> qt3-devel-examples
+
+-------------------------------------------------------------------
+Thu May 17 06:49:50 CEST 2007 - stbinner@suse.de
+
+- removed some historic stuff from the spec file
+
+-------------------------------------------------------------------
+Tue May 8 14:32:40 CEST 2007 - dmueller@suse.de
+
+- trust libxinerama only if it provides more screens
+ than xrandr crtcs (#264199)
+
+-------------------------------------------------------------------
+Fri May 4 19:06:40 CEST 2007 - dmueller@suse.de
+
+- fix permissions of qmake specs
+
+-------------------------------------------------------------------
+Wed May 2 11:50:07 CEST 2007 - coolo@suse.de
+
+- remove Suse-translate from desktop file
+- remove obsolete suse version support
+
+-------------------------------------------------------------------
+Mon Apr 30 14:39:40 CEST 2007 - stbinner@suse.de
+
+- fix build of qt3-devel-doc with desktop-file-validate run
+
+-------------------------------------------------------------------
+Mon Apr 16 16:10:59 CEST 2007 - dmueller@suse.de
+
+- temporarily disable Xrandr 1.2 support until (#264199) is
+ resolved
+- use -Bsymbolic-functions
+
+-------------------------------------------------------------------
+Sun Apr 1 20:40:04 CEST 2007 - dmueller@suse.de
+
+- fix utf8 decoder (#259187, CVE-2007-0242)
+
+-------------------------------------------------------------------
+Thu Mar 29 18:02:30 CEST 2007 - dmueller@suse.de
+
+- Fix XRandr 1.2 support
+
+-------------------------------------------------------------------
+Fri Mar 16 14:52:22 CET 2007 - dmueller@suse.de
+
+- call XftDefaultSubstitute (#255330)
+
+-------------------------------------------------------------------
+Thu Mar 15 11:07:44 CET 2007 - dmueller@suse.de
+
+- update font fix patch (#244579)
+
+-------------------------------------------------------------------
+Mon Mar 12 16:09:29 CET 2007 - dmueller@suse.de
+
+- enable tablet support (#253392)
+- add default substitution for font queries (#244579)
+
+-------------------------------------------------------------------
+Tue Mar 6 19:37:48 CET 2007 - dmueller@suse.de
+
+- fix mysql driver crash on shutdown (#251222)
+
+-------------------------------------------------------------------
+Sun Feb 25 11:52:26 CET 2007 - dmueller@suse.de
+
+- update to 3.3.8:
+ * changelog is under /usr/share/doc/packages/qt3/changes-3.3.8
+
+-------------------------------------------------------------------
+Wed Feb 21 13:00:52 CET 2007 - dmueller@suse.de
+
+- fix build for 9.3
+
+-------------------------------------------------------------------
+Wed Feb 7 10:39:13 CET 2007 - dmueller@suse.de
+
+- also build qt3-static as full-config
+
+-------------------------------------------------------------------
+Mon Feb 5 15:18:34 CET 2007 - stbinner@suse.de
+
+- fix build of qt3-extensions on 9.3
+
+-------------------------------------------------------------------
+Fri Feb 2 15:41:36 CET 2007 - stbinner@suse.de
+
+- fix changelog chronological order
+
+-------------------------------------------------------------------
+Wed Jan 31 21:40:07 CET 2007 - dmueller@suse.de
+
+- add a sanity check to ensure that we have a full version
+- fix compile warnings in headers
+
+-------------------------------------------------------------------
+Tue Jan 9 15:36:14 CET 2007 - dmueller@suse.de
+
+- drop misfuzzed patch
+
+-------------------------------------------------------------------
+Mon Jan 8 18:35:16 CET 2007 - dmueller@suse.de
+
+- add patch to fix indic rendering issue
+
+-------------------------------------------------------------------
+Tue Oct 31 13:18:44 CET 2006 - dmueller@suse.de
+
+- add patch to fix han localisation issue (#216183)
+- update qt-debug-timer patch to output more verbose debug
+- add patch to fix xinerama issue with popupmenus (#216235)
+
+-------------------------------------------------------------------
+Fri Oct 20 15:54:30 CEST 2006 - dmueller@suse.de
+
+- update to 3.3.7:
+ * include CVE-2006-4811 patch
+
+-------------------------------------------------------------------
+Thu Oct 19 15:21:51 CEST 2006 - dmueller@suse.de
+
+- add patch for integer overflow in QPixmap/QImage
+ (#212544, CVE-2006-4811)
+
+-------------------------------------------------------------------
+Tue Oct 10 23:31:01 CEST 2006 - dmueller@suse.de
+
+- add patch for qtimer debugging
+
+-------------------------------------------------------------------
+Wed Oct 4 19:39:56 CEST 2006 - dmueller@suse.de
+
+- fix headers to compile in -pedantic mode
+
+-------------------------------------------------------------------
+Thu Sep 14 13:27:03 CEST 2006 - dmueller@suse.de
+
+- don't install static libs as executable
+
+-------------------------------------------------------------------
+Fri Sep 1 16:18:07 CEST 2006 - llunak@suse.cz
+
+- Add patches with Xinerama improvements.
+
+-------------------------------------------------------------------
+Thu Aug 17 13:42:28 CEST 2006 - stbinner@suse.de
+
+- fix qt3-devel-tools file conflict with qt-devel-doc
+
+-------------------------------------------------------------------
+Tue Aug 1 14:47:18 CEST 2006 - stbinner@suse.de
+
+- disable noisy debug message in qt-x11-immodule-unified diff
+
+-------------------------------------------------------------------
+Sun Jul 9 21:39:54 CEST 2006 - stbinner@suse.de
+
+- fix {designer3,linguist}.desktop starting Qt4 versions (#190135)
+
+-------------------------------------------------------------------
+Tue Jul 04 15:12:18 CEST 2006 - mfabian@suse.de
+
+- update qt-x11-immodule-unified diff to 20060318 version.
+ This update already includes the following patches:
+ + fix-x11-immodule.diff
+ + disable-inputmethod-for-passords.patch
+ + qt-x11-immodule-capitalization-fix.diff
+ + fix-im-crash-on-exit.diff
+ + fix-immodule-buffer-overflow.diff
+ + qt-x11-immodule-qtextedit-fix.diff
+ + qt-x11-immodule-focus-handling.diff
+ + qt-x11-immodule-fix-inputcontext-crash.diff
+ which are thus removed.
+
+-------------------------------------------------------------------
+Wed Jun 28 10:07:30 CEST 2006 - dmueller@suse.de
+
+- fix $QT_SYSTEM_DIR (#188217)
+
+-------------------------------------------------------------------
+Fri Jun 9 15:25:49 CEST 2006 - llunak@suse.de
+
+- add $QT_SYSTEM_DIR (#183059)
+
+-------------------------------------------------------------------
+Wed May 31 15:51:01 CEST 2006 - adrian@suse.de
+
+- remove BuildRequires libdrm-devel
+
+-------------------------------------------------------------------
+Wed May 31 13:24:56 CEST 2006 - dmueller@suse.de
+
+- fix xpm image loading problem
+- add performance regression fix
+- add asian font loading fix
+
+-------------------------------------------------------------------
+Mon May 29 08:41:44 CEST 2006 - adrian@suse.de
+
+- revert requires macro, this breaks the build system mapping
+- require right packages in -devel for < 10.1
+
+-------------------------------------------------------------------
+Fri May 26 19:40:44 CEST 2006 - dmueller@suse.de
+
+- fix build
+
+-------------------------------------------------------------------
+Fri May 26 10:42:43 CEST 2006 - dmueller@suse.de
+
+- 3.3.6 update
+ * numerous bugfixes and translations
+
+-------------------------------------------------------------------
+Wed May 10 17:12:34 CEST 2006 - dmueller@suse.de
+
+- drop substitutions from global rc file (#171513)
+
+-------------------------------------------------------------------
+Fri Apr 14 01:46:36 CEST 2006 - dmueller@suse.de
+
+- drop linguist3.png/desktop as its unused and install
+ linguist.desktop instead (fixes build failure).
+
+-------------------------------------------------------------------
+Mon Apr 10 10:40:11 CEST 2006 - dmueller@suse.de
+
+- strip installed static libraries
+- fix file conflict with Qt4 packages
+
+-------------------------------------------------------------------
+Mon Apr 3 16:34:14 CEST 2006 - dmueller@suse.de
+
+- restore libraryPaths which broke instsys (#162930)
+
+-------------------------------------------------------------------
+Thu Mar 30 12:49:05 CEST 2006 - coolo@suse.de
+
+- update qtrc to the real values avoiding dark gray platinum even
+ if not overwritten with desktop settings
+
+-------------------------------------------------------------------
+Tue Mar 21 14:59:49 CET 2006 - dmueller@suse.de
+
+- update patch for QLabel layout issues to the one from Qt 3.3.7
+
+-------------------------------------------------------------------
+Fri Mar 17 18:39:04 CET 2006 - dmueller@suse.de
+
+- add patch for QLabel layout management issues (#153029)
+
+-------------------------------------------------------------------
+Fri Mar 17 12:23:30 CET 2006 - dmueller@suse.de
+
+- fix crash on painting > 32000 chars at once
+- fix error in wrapping japanese text
+- fix QFile::flush() not setting error status
+- fix window gravity being wrong for RTL
+
+-------------------------------------------------------------------
+Tue Mar 14 00:22:32 CET 2006 - dmueller@suse.de
+
+- fix filelist
+
+-------------------------------------------------------------------
+Mon Mar 13 17:02:09 CET 2006 - dmueller@suse.de
+
+- build qt3-devel-doc as noarch package
+
+-------------------------------------------------------------------
+Tue Mar 7 10:49:56 CET 2006 - dmueller@suse.de
+
+- moving libqassistantclient to -devel (#155519) and assistant
+ to qt3.
+- translation update
+- fix assistant invocation to prefer Qt3's assistant over Qt 4.x
+
+-------------------------------------------------------------------
+Wed Feb 22 14:00:00 CET 2006 - dmueller@suse.de
+
+- fix crash when not able to load imswitch (#117443)
+
+-------------------------------------------------------------------
+Sat Feb 18 01:15:54 CET 2006 - dmueller@suse.de
+
+- add more immodule fixes
+- fix build of qt3-extensions
+- remove sections for SL < 9.2
+
+-------------------------------------------------------------------
+Fri Feb 17 16:47:41 CET 2006 - dmueller@suse.de
+
+- fix crash on shutdown (#151831)
+
+-------------------------------------------------------------------
+Mon Feb 13 15:52:19 CET 2006 - coolo@suse.de
+
+- update translations
+
+-------------------------------------------------------------------
+Mon Feb 6 05:22:44 CET 2006 - zsu@suse.de
+
+- Add patch qt3-khmer-script.patch to fix a rendering issue of Khmer
+ script (by Jens Herden<jens@khmeros.info>, #147190).
+
+-------------------------------------------------------------------
+Sat Jan 28 10:48:06 CET 2006 - coolo@suse.de
+
+- really install the icon
+
+-------------------------------------------------------------------
+Fri Jan 27 20:02:59 CET 2006 - llunak@suse.cz
+
+- fix rubberband.diff to emit selectionChanged() properly (#132920)
+
+-------------------------------------------------------------------
+Fri Jan 27 12:24:41 CET 2006 - coolo@suse.de
+
+- avoid file conflict with qt package
+
+-------------------------------------------------------------------
+Fri Jan 27 08:08:10 CET 2006 - coolo@suse.de
+
+- fix qt3.sh
+
+-------------------------------------------------------------------
+Fri Jan 27 02:21:53 CET 2006 - mls@suse.de
+
+- converted neededforbuild to BuildRequires
+
+-------------------------------------------------------------------
+Wed Jan 25 18:06:26 CET 2006 - dmueller@suse.de
+
+- set $QTDIR in /etc/profile.d/qt3.(c)sh
+
+-------------------------------------------------------------------
+Sat Dec 3 14:30:43 CET 2005 - coolo@suse.de
+
+- build with -Bdirect if available
+- updating font patch
+
+-------------------------------------------------------------------
+Fri Dec 2 00:11:21 CET 2005 - dmueller@suse.de
+
+- build with -fno-strict-aliasing
+
+-------------------------------------------------------------------
+Wed Nov 23 10:18:29 CET 2005 - dmueller@suse.de
+
+- unify spec files via a common patch/sources section
+ and adjust spec files accordingly
+- add /etc/profile.d hook to put qmake in the path (#134377)
+- drop fast-malloc patch for all packages (#134563)
+
+-------------------------------------------------------------------
+Fri Nov 18 15:20:21 CET 2005 - stbinner@suse.de
+
+- only disable FcFontSort patch for released distributions
+
+-------------------------------------------------------------------
+Fri Nov 18 12:08:43 CET 2005 - stbinner@suse.de
+
+- disable FcFontSort patch because of immaturity
+
+-------------------------------------------------------------------
+Fri Nov 11 15:48:07 CET 2005 - dmueller@suse.de
+
+- avoid crashes after QListView::clear()
+
+-------------------------------------------------------------------
+Wed Nov 2 15:52:04 CET 2005 - coolo@suse.de
+
+- avoid FcFontSort as it's very expensive
+
+-------------------------------------------------------------------
+Thu Oct 27 14:38:16 CEST 2005 - stbinner@suse.de
+
+- extend fix-key-release-event-with-imm.diff to fix another Immodule
+ related key release event bug (#130727)
+
+-------------------------------------------------------------------
+Wed Oct 12 19:25:52 CEST 2005 - dmueller@suse.de
+
+- update -Werror patch to catch one more case
+
+-------------------------------------------------------------------
+Mon Oct 10 16:58:30 CEST 2005 - dmueller@suse.de
+
+- add patch to fix broken key compression (#121049)
+
+-------------------------------------------------------------------
+Sat Oct 8 00:04:41 CEST 2005 - dmueller@suse.de
+
+- patch cleanup
+
+-------------------------------------------------------------------
+Wed Oct 5 13:59:53 CEST 2005 - dmueller@suse.de
+
+- add 0065-fix_werror_with_gcc4.patch (#119209)
+
+-------------------------------------------------------------------
+Wed Sep 28 16:32:43 CEST 2005 - stbinner@suse.de
+
+- removed historic "Autoreqprov:off" leftover
+
+-------------------------------------------------------------------
+Wed Sep 28 15:27:34 CEST 2005 - stbinner@suse.de
+
+- add a patch to fix capitalization of Immodule strings
+
+-------------------------------------------------------------------
+Mon Sep 26 10:57:35 CEST 2005 - coolo@suse.de
+
+- fix build on x86_64
+
+-------------------------------------------------------------------
+Mon Sep 19 12:40:22 CEST 2005 - mfabian@suse.de
+
+- Bugzilla #117115: enable input methods in qlineedit widgets
+ only when "mode == Normal" (i.e. not when "mode == NoEcho" or
+ "mode == Password"). Using input methods while inputting
+ passwords is useless and confusing.
+
+-------------------------------------------------------------------
+Fri Sep 16 23:06:14 CEST 2005 - schwab@suse.de
+
+- Never strip gratuitously.
+
+-------------------------------------------------------------------
+Thu Sep 15 10:57:05 CEST 2005 - stbinner@suse.de
+
+- update to version 3.3.5
+
+-------------------------------------------------------------------
+Mon Sep 5 13:04:30 CEST 2005 - coolo@suse.de
+
+- layout popup menus correctly (#113048)
+
+-------------------------------------------------------------------
+Fri Aug 19 17:04:02 CEST 2005 - llunak@suse.cz
+
+- Place dialog properly for systray icons on xinerama (#104794).
+
+-------------------------------------------------------------------
+Fri Jul 29 18:24:24 CEST 2005 - dmueller@suse.de
+
+- add Q_EXPORT visibility support
+- Fix gcc 4.0.x compiler detection for qt plugin buildkey
+
+-------------------------------------------------------------------
+Thu Jun 23 14:37:00 CEST 2005 - mrueckert@suse.de
+
+- Applied patch from Lubos Lunak to fix drag'n'drop when the
+ visible window is not at the top of the window stack.
+
+-------------------------------------------------------------------
+Fri Jun 10 17:28:47 CEST 2005 - adrian@suse.de
+
+- Apply workaround from Simon Hausmann to avoid miscompilation with gcc4
+
+-------------------------------------------------------------------
+Tue Jun 7 16:15:54 CEST 2005 - adrian@suse.de
+
+- do not trigger -debug configure flag on -g, but use it for beta
+ distribution
+
+-------------------------------------------------------------------
+Tue May 31 10:49:30 CEST 2005 - adrian@suse.de
+
+- require freeglut-devel instead of XFree86-Mesa-devel
+
+-------------------------------------------------------------------
+Fri Apr 15 19:52:35 CEST 2005 - mfabian@suse.de
+
+- Bugzilla #74133: check for some more glyphs for Katakana and
+ Hiragana, especially also check for all the glyphs which are
+ checked for Han_Japanese. This usually guarantees that the same
+ font is used for Katakana and Hiragana as for Japanese Kanji,
+ which is what we want.
+
+-------------------------------------------------------------------
+Fri Apr 8 15:28:36 CEST 2005 - uli@suse.de
+
+- fixed to build with GCC4 on ARM
+
+-------------------------------------------------------------------
+Mon Apr 4 15:02:41 CEST 2005 - adrian@suse.de
+
+- apply patches from qt-copy, fixes for mouse handling in popups
+
+-------------------------------------------------------------------
+Thu Mar 24 09:57:01 CET 2005 - adrian@suse.de
+
+- update font mappings in qtrc for asian languages (#74363)
+
+-------------------------------------------------------------------
+Wed Mar 16 17:54:12 CET 2005 - adrian@suse.de
+
+- fix possible crash in qtranslator (#71968, by Lubos)
+
+-------------------------------------------------------------------
+Fri Mar 4 15:50:50 CET 2005 - adrian@suse.de
+
+- fix loading of style plugins for lib/lib64 mixed systesm (by Lubos)
+
+-------------------------------------------------------------------
+Fri Feb 25 13:26:56 CET 2005 - adrian@suse.de
+
+- fix all Exec= lines for menu entries
+
+-------------------------------------------------------------------
+Fri Feb 11 18:29:14 CET 2005 - adrian@suse.de
+
+- apply patch for rubberband selections from Andre Moreira Magalhaes
+
+-------------------------------------------------------------------
+Wed Feb 9 17:55:47 CET 2005 - adrian@suse.de
+
+- add qclipboard hack to avoid freezes from qt-copy again
+
+-------------------------------------------------------------------
+Wed Feb 2 16:35:44 CET 2005 - adrian@suse.de
+
+- fix plugin loading for the KDE integration
+
+-------------------------------------------------------------------
+Wed Jan 26 17:49:46 CET 2005 - adrian@suse.de
+
+- update to version 3.3.4
+- reenable limit size patch to keep BC
+- remove qclipboard fix, it got merged
+- remove bidi fixes, they got merged
+- remove gif handler fixes, they got merged
+- apply KDE dialog integration code from Lubos
+- revert some changes in imm code to solve a problem with missing
+ key release events
+
+-------------------------------------------------------------------
+Fri Jan 14 14:12:06 CET 2005 - adrian@suse.de
+
+- update imm patch to version from 20041203
+- disable image size patch for now, it broke printing of large images
+
+-------------------------------------------------------------------
+Wed Jan 5 13:37:00 CET 2005 - adrian@suse.de
+
+- reenable the SHM patch again
+- add qtimm patch to solve an issue with Opera
+- remove binary links from /usr/bin/, they do conflict with Qt 4
+
+-------------------------------------------------------------------
+Mon Nov 22 12:06:33 CET 2004 - ro@suse.de
+
+- "sed -i" does not work on old distributions
+
+-------------------------------------------------------------------
+Tue Nov 16 11:04:55 CET 2004 - adrian@suse.de
+
+- package icon files for desktop entries
+
+-------------------------------------------------------------------
+Mon Nov 8 16:07:11 CET 2004 - coolo@suse.de
+
+- improve Waldo's patch to limit image dimensions
+
+-------------------------------------------------------------------
+Fri Oct 29 23:29:44 CEST 2004 - schwab@suse.de
+
+- Revert last change to png writing.
+
+-------------------------------------------------------------------
+Tue Oct 26 10:51:34 CEST 2004 - adrian@suse.de
+
+- fix from Lubos for full screen mode switching on 64bit (#46972)
+
+-------------------------------------------------------------------
+Mon Oct 25 14:26:40 CEST 2004 - schwab@suse.de
+
+- Extend last change to png writing.
+
+-------------------------------------------------------------------
+Sat Oct 23 23:23:21 CEST 2004 - schwab@suse.de
+
+- Fix endian bug in png reading.
+
+-------------------------------------------------------------------
+Thu Oct 14 18:09:56 CEST 2004 - adrian@suse.de
+
+- fix assitant zoom functionality, patch by Waldo (#45688)
+
+-------------------------------------------------------------------
+Mon Oct 11 18:11:32 CEST 2004 - adrian@suse.de
+
+- fix requires of qt3-devel for new x.org packages
+
+-------------------------------------------------------------------
+Wed Sep 29 10:27:12 CEST 2004 - adrian@suse.de
+
+- prefer MiscGlyphSymbol fonts with tics over others (#46280)
+- enable BiDi support by default
+
+-------------------------------------------------------------------
+Tue Sep 28 11:45:55 CEST 2004 - mfabian@suse.de
+
+- Bugzilla #46216: make "On The Spot" the default input style
+ for Qt.
+
+-------------------------------------------------------------------
+Sat Sep 25 13:46:59 CEST 2004 - adrian@suse.de
+
+- prefer the .lib64.so extension on lib64 systems, but do not
+ require it anymore
+
+-------------------------------------------------------------------
+Fri Sep 24 22:10:29 CEST 2004 - adrian@suse.de
+
+- fix load of plugins on lib64 systems. The plugins do need a
+ .lib64.so extension now
+
+-------------------------------------------------------------------
+Wed Sep 15 17:52:55 CEST 2004 - adrian@suse.de
+
+- add two more glyphs to simplified chinese detection. (#44059)
+
+-------------------------------------------------------------------
+Tue Sep 14 13:57:01 CEST 2004 - adrian@suse.de
+
+- handle also hongkong chinese local in a correct way (#44059)
+- prefer chinese fonts via optional glyphs, but use also
+ the free ones, if no commercial font is avaible (#44059)
+
+-------------------------------------------------------------------
+Mon Sep 13 20:14:31 CEST 2004 - adrian@suse.de
+
+- hopefully solve the chinese font detection problems (#44059)
+
+-------------------------------------------------------------------
+Mon Sep 13 11:17:50 CEST 2004 - adrian@suse.de
+
+- fix build for old distributions
+- prepare qt for konsole transparency mode (via composite extension)
+
+-------------------------------------------------------------------
+Fri Sep 10 17:43:56 CEST 2004 - mfabian@suse.de
+
+- update to qt-x11-immodule-unified-qt3.3.3-20040910.diff which
+ merges the previous three patches (With help from Adrian to
+ make it build).
+
+-------------------------------------------------------------------
+Fri Sep 10 16:34:52 CEST 2004 - mfabian@suse.de
+
+- add qt-x11-immodule-unified-qt3.3.3-r123-event-inversion-20040909.diff
+ to fix the endless loop problem when using M17N-t-latin1-post
+ or M17N-vi-viqr. See also
+ http://freedesktop.org/pipermail/immodule-qt/2004-September/000447.html
+ and followups. Patch thanks to Yamaken.
+
+-------------------------------------------------------------------
+Wed Sep 8 10:13:26 CEST 2004 - adrian@suse.de
+
+- add 3.3.3 regression fixes in pre-3.3.4.diff
+- add bidi fixes from qt-copy
+- add qpixmap mitshm support from Lubos
+- update immodule patch to stable release 20040819
+- adding event inversion fix for immodule from Zhe Su
+
+-------------------------------------------------------------------
+Fri Sep 3 15:06:55 CEST 2004 - adrian@suse.de
+
+- udpate qt immodule patch to snapshot from 20040814
+
+-------------------------------------------------------------------
+Thu Aug 26 17:09:14 CEST 2004 - adrian@suse.de
+
+- disable explicit debug flags again
+
+-------------------------------------------------------------------
+Mon Aug 23 13:23:02 CEST 2004 - adrian@suse.de
+
+- apply workaround for broken focus handling cause by the xim
+ patch due to a bug in X for released distributions (by Lubos)
+
+-------------------------------------------------------------------
+Wed Aug 18 12:06:15 CEST 2004 - adrian@suse.de
+
+- enable full debug compile, if -g is in RPM_OPT_FLAGS
+
+-------------------------------------------------------------------
+Tue Aug 17 14:46:19 CEST 2004 - coolo@suse.de
+
+- install qt3 after grep
+
+-------------------------------------------------------------------
+Tue Aug 17 07:27:13 CEST 2004 - adrian@suse.de
+
+- apply patch from Waldo to be able to limit the size of loaded
+ images. Important for khtml (#43841)
+- apply fix to handle the side pixmap of the kmenu correctly (0047)
+- apply KToolBarButton fix (0051)
+
+-------------------------------------------------------------------
+Fri Aug 13 06:19:32 CEST 2004 - adrian@suse.de
+
+- fix gif handling (#43356)
+
+-------------------------------------------------------------------
+Thu Aug 12 08:23:16 CEST 2004 - adrian@suse.de
+
+- update to version 3.3.3
+- remove obsolete patches
+
+-------------------------------------------------------------------
+Tue Aug 3 16:16:53 CEST 2004 - adrian@suse.de
+
+- add patch to support scim
+
+-------------------------------------------------------------------
+Wed Jun 9 15:21:27 CEST 2004 - adrian@suse.de
+
+- update asian font mappings for commercial japanese fonts
+ (by mfabian)
+
+-------------------------------------------------------------------
+Wed Jun 2 16:17:53 CEST 2004 - adrian@suse.de
+
+- fix libGL loading in the right way, no .so link is needed anymore
+ again
+
+-------------------------------------------------------------------
+Wed May 26 16:47:34 CEST 2004 - adrian@suse.de
+
+- load libGL via .so link again (due to the different possible
+ setups #41118)
+- libXmu gets still loaded via hardcoded path and version
+
+-------------------------------------------------------------------
+Tue Apr 27 15:55:48 CEST 2004 - adrian@suse.de
+
+- update to version 3.3.2
+ * remove obsolete patches
+- do apply %patch16
+
+-------------------------------------------------------------------
+Fri Apr 23 09:26:44 CEST 2004 - adrian@suse.de
+
+- disable atk support for released distributions
+
+-------------------------------------------------------------------
+Thu Apr 22 11:40:17 CEST 2004 - coolo@suse.de
+
+- another try to fix wrong font caching also for japanese/chinese
+
+-------------------------------------------------------------------
+Tue Apr 20 11:34:13 CEST 2004 - coolo@suse.de
+
+- apply fix for wrong font caching (#39175)
+
+-------------------------------------------------------------------
+Fri Apr 16 11:42:30 CEST 2004 - adrian@suse.de
+
+- apply fix for opentype aliasing issues
+
+-------------------------------------------------------------------
+Tue Apr 13 10:50:22 CEST 2004 - adrian@suse.de
+
+- fix OpenGL support, if no -devel package is installed (#38857)
+- fix xcursor support
+- add current snapshot of Qt-ATK bridge patch
+ (disabled as long USE_QACCESSIBLE enviroment variable isn't set)
+
+-------------------------------------------------------------------
+Sat Apr 3 10:07:55 CEST 2004 - adrian@suse.de
+
+- apply 0043-fix_expired_cookie_crash.diff from qt-copy(by Dirk)
+ * qt based applications can crash in ssh sessions with new
+ openssh (#38185)
+
+-------------------------------------------------------------------
+Wed Mar 31 17:47:33 CEST 2004 - mfabian@suse.de
+
+- Bugzilla #37720:
+ add font substitutions for "SUSE*" fonts to default qtrc.
+
+-------------------------------------------------------------------
+Thu Mar 25 10:12:37 CET 2004 - coolo@suse.de
+
+- fix for richtext tags (in knotes)
+- fix for fonts with multiple scripts (#36583)
+- fix for custom resolutions
+
+-------------------------------------------------------------------
+Tue Mar 16 16:29:42 CET 2004 - adrian@suse.de
+
+- fix for command line handling (XIM in QApplication)(#35881)
+- fix double packaging of qassistant translations
+
+-------------------------------------------------------------------
+Mon Mar 15 17:55:57 CET 2004 - adrian@suse.de
+
+- define a default Font again. (Sans Serif with 10points)
+ (#36014)
+
+-------------------------------------------------------------------
+Wed Mar 10 08:44:03 CET 2004 - adrian@suse.de
+
+- fix for xcursor cache hangling (by Lubos)
+- move assistant to -devel-doc package
+
+-------------------------------------------------------------------
+Thu Mar 4 22:10:52 CET 2004 - adrian@suse.de
+
+- apply fix for not found monospaced fonts without Euro glyph
+ (Patch by Lars Knoll)
+
+-------------------------------------------------------------------
+Thu Mar 4 13:53:53 CET 2004 - adrian@suse.de
+
+- apply different bugfix and speed enhancement patches from qt-copy
+ as recommended by Lubos
+ * 0001: DnD optimisation
+ * 0002: Active Window Fix
+ * 0007: MITSHM extension support for QPixmap<>Qimage conversation
+ * 0037: dnd timestamp fix
+ * 0038: dragobject prefer fix
+
+-------------------------------------------------------------------
+Mon Mar 1 11:39:25 CET 2004 - adrian@suse.de
+
+- update to final 3.3.1 version
+- disable fast-malloc for > 9.0, nptl does work good enough
+- add qclipboard-recursion-fix from Lubos
+- further 64bit aliasing fixes
+
+-------------------------------------------------------------------
+Mon Feb 16 14:43:49 CET 2004 - adrian@suse.de
+
+- update to current snapshot (3.3.1-snapshot-20040216)
+- build opentype with -fno-strict-aliasing
+
+-------------------------------------------------------------------
+Mon Feb 9 17:02:41 CET 2004 - adrian@suse.de
+
+- fix non-latin1 QString handling
+ (patch from Roman Stepanov)
+
+-------------------------------------------------------------------
+Wed Feb 4 20:24:37 CET 2004 - adrian@suse.de
+
+- update to version 3.3.0 final
+- disable 3rdparty source and use system libraries
+
+-------------------------------------------------------------------
+Thu Jan 29 14:05:26 CET 2004 - adrian@suse.de
+
+- update to snapshot 20040129
+- use original qstring again, kprinter got fixed
+
+-------------------------------------------------------------------
+Sun Jan 25 17:53:03 CET 2004 - adrian@suse.de
+
+- update to snapshot 20040125
+- revert qstring changes
+
+-------------------------------------------------------------------
+Tue Jan 13 14:52:07 CET 2004 - adrian@suse.de
+
+- update to snapshot 20040113
+
+-------------------------------------------------------------------
+Mon Dec 29 11:48:49 CET 2003 - adrian@suse.de
+
+- update to snapshot from 20031229 to get KDE compiling again
+- remove upstream included translation files
+- cleanup stuff not anymore needed
+- do not build sqlite plugin with (broken) sqlite sources from qt
+ tar ball anymore
+
+-------------------------------------------------------------------
+Thu Dec 11 13:10:37 CET 2003 - adrian@suse.de
+
+- update to version 3.3 beta 1
+ * solves the remaining issues with dlopen GL
+
+-------------------------------------------------------------------
+Tue Dec 9 17:20:56 CET 2003 - adrian@suse.de
+
+- add KDE plugin path for qt 3.3
+
+-------------------------------------------------------------------
+Thu Dec 4 11:25:27 CET 2003 - adrian@suse.de
+
+- update to snapshot 20031204
+- do not link against GL libs anymore, but still support GL via dlopen
+ apps and libs beside libbqt* are still linked against GL for now
+- build fix for qt3-extensions
+
+-------------------------------------------------------------------
+Tue Dec 2 17:54:34 CET 2003 - adrian@suse.de
+
+- update to current 3.3 snapshot ( 20031202 - pre beta 1)
+ * obsoletes several patches
+ * IPv6 support
+- temporary disabled PostgreSQL support
+- add SQLite support
+
+-------------------------------------------------------------------
+Fri Nov 21 11:05:33 CET 2003 - adrian@suse.de
+
+- drop not applyed font_fixes patch and add the old Xft2 fixes
+ again, to support displays without Render extension.
+
+-------------------------------------------------------------------
+Fri Nov 14 14:30:11 CET 2003 - adrian@suse.de
+
+- update to version 3.2.3 and usual patch cleanup
+
+-------------------------------------------------------------------
+Thu Oct 23 09:52:28 CEST 2003 - adrian@suse.de
+
+- build without -mminimal-toc on ppc64
+- apply crash fix from TT for some fonts in XLFD mode
+
+-------------------------------------------------------------------
+Thu Oct 16 16:00:46 CEST 2003 - adrian@suse.de
+
+- update to version 3.2.2
+ * font fixes patch is not applied intentionaly, for testing
+ plain qt behaviour for now.
+
+-------------------------------------------------------------------
+Thu Oct 2 12:06:08 CEST 2003 - adrian@suse.de
+
+- require freeglut-devel, instead of mesaglut-devel for > 9.0
+
+-------------------------------------------------------------------
+Tue Sep 30 09:25:31 CEST 2003 - coolo@suse.de
+
+- using the right tool to compile translation files
+
+-------------------------------------------------------------------
+Thu Sep 25 13:05:03 CEST 2003 - adrian@suse.de
+
+- update fontconfig patch again, fixes multiple listing of fonts
+- do not complain anymore about not matching plugin
+
+-------------------------------------------------------------------
+Sun Sep 21 15:02:56 CEST 2003 - adrian@suse.de
+
+- prefer Nimbus fonts, instead of using asian fonts, if possible
+ (the asian fonts have some broken latin chars)
+
+-------------------------------------------------------------------
+Sun Sep 21 12:35:19 CEST 2003 - adrian@suse.de
+
+- install html docu to the same place as on 8.2, to solve
+ update problems (#31507). (install dir and symlink was
+ swapped for unknown reason)
+
+-------------------------------------------------------------------
+Fri Sep 19 15:48:11 CEST 2003 - adrian@suse.de
+
+- memory leak fix from Lars in QTextEngine
+
+-------------------------------------------------------------------
+Thu Sep 18 16:35:05 CEST 2003 - adrian@suse.de
+
+- updated patches from Lars
+ * fixing Unicode families and foundaries issues
+ * printing issues
+- clean up unused patches
+
+-------------------------------------------------------------------
+Wed Sep 17 18:31:56 CEST 2003 - adrian@suse.de
+
+- a bit more silence .. QPixmap before QApplication warning is away
+- new asian font mappings from mfabian
+
+-------------------------------------------------------------------
+Mon Sep 15 18:02:31 CEST 2003 - adrian@suse.de
+
+- new font fixes from Lars, the default size problem should be away
+- fix build for non-Xft2 distibutions
+
+-------------------------------------------------------------------
+Thu Sep 11 22:18:01 CEST 2003 - adrian@suse.de
+
+- silence on lib64 systems with 32bit plugins installed (#30559)
+- ensure to have a [3.2] section in old qtrc files
+
+-------------------------------------------------------------------
+Mon Sep 8 16:26:49 CEST 2003 - coolo@suse.de
+
+- apply fix from TT to fix konsole + setRawName
+
+-------------------------------------------------------------------
+Thu Sep 4 12:53:19 CEST 2003 - adrian@suse.de
+
+- add always lib and lib64 kde plugin path to qtrc
+
+-------------------------------------------------------------------
+Wed Sep 3 16:55:00 CEST 2003 - adrian@suse.de
+
+- apply fix from TT: "don't generate bogus mouse move events."
+- qt3-devel requires XFree86-Mesa-devel
+
+-------------------------------------------------------------------
+Tue Sep 2 17:20:05 CEST 2003 - adrian@suse.de
+
+- add slovak translation from Stanislav Visnovsky
+- add czech translation from Klara Cihlarova
+
+-------------------------------------------------------------------
+Tue Sep 2 16:20:15 CEST 2003 - adrian@suse.de
+
+- add asian mappings from 8.2 to qtrc again
+
+-------------------------------------------------------------------
+Mon Sep 1 18:13:33 CEST 2003 - meissner@suse.de
+
+- Don't do readlink checks for set*id programs (will break
+ in TLS startup sequence of glibc), just fall back to old
+ malloc. #29530
+
+-------------------------------------------------------------------
+Mon Sep 1 12:02:00 CEST 2003 - adrian@suse.de
+
+- apply qlineedit fix from TT
+
+-------------------------------------------------------------------
+Mon Sep 1 11:30:31 CEST 2003 - adrian@suse.de
+
+- qtconfig menu entry becomes unimportant
+
+-------------------------------------------------------------------
+Sun Aug 31 22:33:44 CEST 2003 - adrian@suse.de
+
+- generate .la file again
+
+-------------------------------------------------------------------
+Fri Aug 29 15:16:43 CEST 2003 - adrian@suse.de
+
+- use newer font_fixes patch from Lars
+- enforce usage of Xft2 even on non-Xrender displays
+- revert qclipboard changes to 3.1.2 code
+
+-------------------------------------------------------------------
+Wed Aug 27 13:38:51 CEST 2003 - adrian@suse.de
+
+- use official 3.2.1 tar ball instead of 3.2.0+patch
+
+-------------------------------------------------------------------
+Tue Aug 26 08:20:07 CEST 2003 - adrian@suse.de
+
+- new _big_ fix from Lars for fixing the remaining font issues
+
+-------------------------------------------------------------------
+Sun Aug 24 16:55:24 CEST 2003 - adrian@suse.de
+
+- apply fix from Lars for the foundary font problem, when
+ using pixmap fonts via Xft2. This makes the freetype2
+ foundary-family patch obsolete from qt view.
+
+-------------------------------------------------------------------
+Sat Aug 23 13:44:22 CEST 2003 - adrian@suse.de
+
+- apply 3.2.1 patch, until the official tar ball arrives
+
+-------------------------------------------------------------------
+Sat Aug 16 13:58:14 CEST 2003 - adrian@suse.de
+
+- justify Category of qtconfig
+
+-------------------------------------------------------------------
+Fri Aug 1 18:00:24 CEST 2003 - adrian@suse.de
+
+- add desktop file for qtconfig
+
+-------------------------------------------------------------------
+Wed Jul 23 16:20:03 CEST 2003 - adrian@suse.de
+
+- update to version 3.2.0 final
+
+-------------------------------------------------------------------
+Thu Jul 17 12:55:23 CEST 2003 - adrian@suse.de
+
+- fix .la files after build
+
+-------------------------------------------------------------------
+Tue Jul 15 08:49:39 CEST 2003 - adrian@suse.de
+
+- update to 3.2.0 beta 2
+- remove obsolete patches
+
+-------------------------------------------------------------------
+Sun Jun 15 12:19:14 CEST 2003 - coolo@suse.de
+
+- never strip explicitly
+- always build with -release to avoid debug output even with -g
+
+-------------------------------------------------------------------
+Thu Jun 12 09:07:58 CEST 2003 - coolo@suse.de
+
+- move the html docu into docdir and put the link in lib
+- package directories
+- fix directory permissions
+
+-------------------------------------------------------------------
+Fri May 30 15:04:29 CEST 2003 - adrian@suse.de
+
+- fix file conflicts
+
+-------------------------------------------------------------------
+Mon May 19 11:28:36 CEST 2003 - adrian@suse.de
+
+- revert source incompatibility to 3.1.x in qhbox constructor
+
+-------------------------------------------------------------------
+Sun May 18 14:03:31 CEST 2003 - adrian@suse.de
+
+- update to version 3.2 beta 1
+- big patch clean up
+- use largefile support api for > 8.2
+
+-------------------------------------------------------------------
+Thu Apr 10 17:01:32 CEST 2003 - coolo@suse.de
+
+- fixing long font names as returned by font-config
+
+-------------------------------------------------------------------
+Wed Mar 26 13:19:48 CET 2003 - adrian@suse.de
+
+- workaround rpm bug on 7.3-ppc
+
+-------------------------------------------------------------------
+Mon Mar 24 10:04:18 CET 2003 - adrian@suse.de
+
+- fix build on SuSE < 8.1
+
+-------------------------------------------------------------------
+Fri Mar 21 14:59:11 CET 2003 - adrian@suse.de
+
+- update to version 3.1.2 and remove obsolete patches
+
+-------------------------------------------------------------------
+Tue Mar 11 20:33:03 CET 2003 - coolo@suse.de
+
+- fixing the fix
+
+-------------------------------------------------------------------
+Tue Mar 11 13:35:31 CET 2003 - coolo@suse.de
+
+- applied patch by TT to fix kmail folder selection
+ (#24519 - also known as kde bug #48888)
+
+-------------------------------------------------------------------
+Fri Mar 7 21:16:17 CET 2003 - adrian@suse.de
+
+- do not use XListFonts, if X server supports Xft on >8.1 (Xft2)
+
+-------------------------------------------------------------------
+Fri Feb 28 00:25:14 CET 2003 - adrian@suse.de
+
+- fast malloc is back
+ (still 20% with glibc 2.3 without spinlock'ed-malloc)
+- extend blacklist
+- use fast malloc also on hammer
+
+-------------------------------------------------------------------
+Wed Feb 26 11:43:08 CET 2003 - adrian@suse.de
+
+- add [3.1] plugin path
+- add fix for mouse cursor bug over ssh
+
+-------------------------------------------------------------------
+Mon Feb 24 11:56:07 CET 2003 - adrian@suse.de
+
+- use correct kde plugin path on lib64 systems
+
+-------------------------------------------------------------------
+Mon Feb 3 11:39:24 CET 2003 - adrian@suse.de
+
+- fix missing symbols in libqt*
+
+-------------------------------------------------------------------
+Thu Jan 30 16:19:31 CET 2003 - adrian@suse.de
+
+- fix %pre script
+
+-------------------------------------------------------------------
+Sun Jan 26 14:05:56 CET 2003 - adrian@suse.de
+
+- prefix=/usr/lib/qt3
+ (third party apps installing translations into $QTDIR now)
+- modify qdesktopwidget resize patch to be BC with Qt 3.2
+- comment out non-official api extensions
+- remove private headers tar ball again
+ (qsa beta2 contains them)
+- fix qtrc enviroment patch
+- hardcode qt settings dir to /etc/X11 (no need for $QTDIR/etc/settings anymore)
+- enable all designer plugins
+
+-------------------------------------------------------------------
+Thu Jan 23 18:36:05 CET 2003 - adrian@suse.de
+
+- add xrandr extension from Qt 3.2
+- add resize event to qdesktopwidget (patch from Lubos)
+- compile codecs as plugins
+
+-------------------------------------------------------------------
+Tue Jan 21 12:52:33 CET 2003 - adrian@suse.de
+
+- use fast malloc only on %ix86
+
+-------------------------------------------------------------------
+Thu Jan 16 15:58:23 CET 2003 - adrian@suse.de
+
+- include qt default translations
+
+-------------------------------------------------------------------
+Fri Jan 10 15:12:46 CET 2003 - adrian@suse.de
+
+- hppa is parisc
+
+-------------------------------------------------------------------
+Thu Jan 9 14:44:06 CET 2003 - adrian@suse.de
+
+- fix some more qmake.conf entries
+ (esp. pathes to lib64 directories and flags based on $RPM_OPT_FLAGS)
+
+-------------------------------------------------------------------
+Tue Jan 7 16:42:59 CET 2003 - adrian@suse.de
+
+- use -ffunction-sections on hppa
+
+-------------------------------------------------------------------
+Thu Jan 2 13:07:01 CET 2003 - adrian@suse.de
+
+- fix build ( patch -p1 -> -p0 )
+
+-------------------------------------------------------------------
+Fri Dec 27 17:50:17 CET 2002 - adrian@suse.de
+
+- several small changes/fixes/workarounds to be able to compile qsa
+ (they will be changed in 3.1.2)
+
+-------------------------------------------------------------------
+Tue Dec 17 12:40:16 CET 2002 - adrian@suse.de
+
+- update to version 3.1.1 and cleanup patches
+- apply Xft speed-up patch from dfaure
+
+-------------------------------------------------------------------
+Wed Dec 4 15:10:17 CET 2002 - adrian@suse.de
+
+- drop fast-malloc, not needed since glibc 2.3
+
+-------------------------------------------------------------------
+Thu Nov 28 18:33:28 CET 2002 - adrian@suse.de
+
+- add qprinter fix from Lars
+
+-------------------------------------------------------------------
+Wed Nov 27 00:44:44 CET 2002 - ro@suse.de
+
+- added expat to neededforbuild
+
+-------------------------------------------------------------------
+Sat Nov 23 14:12:16 CET 2002 - adrian@suse.de
+
+- use Xft2 from XFree package now for > SuSE 8.1
+ (experimental fontconfig package is dropped)
+- build qt3-non-mt with extra spec file now
+- fix korean [Font Substitutions] (#19575)
+- fix broken qmake debug defaults (#21891)
+- fix requires of database plugin packages
+
+-------------------------------------------------------------------
+Fri Nov 15 10:33:53 CET 2002 - adrian@suse.de
+
+- update to 3.1.0 final version
+- apply qwidget/hideChildren patch from Harri
+- move libqui into qt3 main package
+
+-------------------------------------------------------------------
+Tue Nov 5 20:00:37 CET 2002 - adrian@suse.de
+
+- package also missing mkspecs/*
+
+-------------------------------------------------------------------
+Sun Nov 3 12:54:52 CET 2002 - adrian@suse.de
+
+- update to post 3.1 beta 2 snapshot (rc1 or rc2 ?)
+- big rework of spec file, lots of workarounds are not needed anymore :)
+- use experimental fontconfig/Xft2 package for > 8.1
+- enable nis & cups support
+
+-------------------------------------------------------------------
+Mon Oct 21 18:25:53 CEST 2002 - adrian@suse.de
+
+- swab %ifarch <> %if for old broken rpm's
+
+-------------------------------------------------------------------
+Mon Oct 21 13:44:15 CEST 2002 - adrian@suse.de
+
+- remove rpath again, which came back with 3.0.5 update (#20929)
+- disable qDebug lines in chinese patch (#20959)
+
+-------------------------------------------------------------------
+Wed Oct 9 11:47:44 CEST 2002 - adrian@suse.de
+
+- implement a blacklist of executables which should not use
+ the fast malloc implementation. (python and perl atm)
+- disable fast-malloc for >8.1
+- enable fast-malloc for x86_64
+
+-------------------------------------------------------------------
+Fri Sep 20 11:24:51 CEST 2002 - adrian@suse.de
+
+- qclipboard fix from Lubos. Copy from old X applications works again
+
+-------------------------------------------------------------------
+Mon Sep 16 12:07:53 CEST 2002 - adrian@suse.de
+
+- replace qt3-gb18030.diff patch with the new patch from
+ James Su<suzhe@turbolinux.com.cn> for chinese handling (#19399)
+- set XIMInputStyle for japanese input (#19387)
+- change Requires: from /usr/include/png.h to libpng-devel, since
+ connectivas apt can not handle this.
+
+-------------------------------------------------------------------
+Fri Aug 30 14:13:34 CEST 2002 - adrian@suse.de
+
+- remove the dlopen patch again. It is not needed anymore and may
+ cause crashes in rare cases.
+
+-------------------------------------------------------------------
+Wed Aug 28 15:26:02 CEST 2002 - adrian@suse.de
+
+- apply fix from Lubos for DND in kcontrol
+- apply fix to fix gb18030 encoding (from Turbolinux China)
+
+-------------------------------------------------------------------
+Mon Aug 26 16:25:40 CEST 2002 - adrian@suse.de
+
+- do not use -plugindir configure option anymore. it caused the
+ broken plugin support and remov $QTDIR/plugins again from qtrc
+ qtrc is also a (noreplace) config file again
+- s,getenv,__secure_getenv, as suggested by okir in plugin_path.dif
+
+-------------------------------------------------------------------
+Thu Aug 22 18:33:55 CEST 2002 - adrian@suse.de
+
+- add patch to set the qt settings dir to a non-default dir
+- add patches from qt 3.0.6 to fix asian copy&paste problems
+- set explicit plugin pathes in qtrc and replace them during update
+ (this is only a workaround until I know why qt does not use the
+ compiled path)
+
+-------------------------------------------------------------------
+Thu Aug 22 14:53:57 CEST 2002 - adrian@suse.de
+
+- remove dangeling symlink in /usr/lib/qt3/mkspecs/linux-g++
+- add plugin path to global qtrc
+
+-------------------------------------------------------------------
+Tue Aug 20 13:24:25 CEST 2002 - adrian@suse.de
+
+- fix #defines
+
+-------------------------------------------------------------------
+Tue Aug 20 00:24:37 CEST 2002 - adrian@suse.de
+
+- redo the plugin path patch again, we use now a implicit
+ subdirectory like "lib64", if needed.
+- qtconfig is patched to hide/not write back those entries
+
+-------------------------------------------------------------------
+Fri Aug 16 14:00:33 CEST 2002 - coolo@suse.de
+
+- fixing the patches
+
+-------------------------------------------------------------------
+Fri Aug 16 13:18:21 CEST 2002 - coolo@suse.de
+
+- applying the plugin path patches, so they actually do something
+ on lib64 platforms
+
+-------------------------------------------------------------------
+Fri Aug 9 17:35:58 CEST 2002 - adrian@suse.de
+
+- fix plugin installation
+
+-------------------------------------------------------------------
+Thu Aug 8 10:00:46 CEST 2002 - adrian@suse.de
+
+- use %suse_version macro instead of /etc/SuSE-release
+
+-------------------------------------------------------------------
+Fri Aug 2 14:41:33 CEST 2002 - coolo@suse.de
+
+- shut up if passed -noxim is passed and xim doesn't work
+
+-------------------------------------------------------------------
+Tue Jul 30 14:43:32 CEST 2002 - adrian@suse.de
+
+- disable pre-3.0.6 patches again, until focus problem is located
+- add zlib-devel to Requires for qt3-devel and SuSE 8.1
+- add %run_ldconfig
+
+-------------------------------------------------------------------
+Mon Jul 29 17:31:37 CEST 2002 - adrian@suse.de
+
+- apply shut-up.dif
+- clean up neededforbuild
+
+-------------------------------------------------------------------
+Fri Jul 26 16:33:25 CEST 2002 - adrian@suse.de
+
+- port Lea's fast malloc implementation to libqt-mt
+- designer sig11 fixes are not needed anymore
+- use some patches from qt-rsync
+
+-------------------------------------------------------------------
+Fri Jul 19 13:07:05 CEST 2002 - adrian@suse.de
+
+- fix designer sig11 really
+- kick warnings about unsuccesfull locks for non-root users
+
+-------------------------------------------------------------------
+Thu Jul 18 18:00:13 CEST 2002 - adrian@suse.de
+
+- don't strip when in debug mode
+- fix typo in build script
+
+-------------------------------------------------------------------
+Wed Jul 17 09:59:28 CEST 2002 - adrian@suse.de
+
+- update to 3.0.5 final
+ * lots of bugfixes, see changes-3.0.5 for details
+ * new, binary incompatible plugin system
+- fix sig11 in designer
+- clean spec file, drop all not applied patches
+
+-------------------------------------------------------------------
+Thu Jul 11 10:42:14 CEST 2002 - coolo@suse.de
+
+- reenable work around for transparenent images while printing
+ (PR16188)
+
+-------------------------------------------------------------------
+Wed Jul 10 17:51:47 CEST 2002 - adrian@suse.de
+
+- update to near 3.0.5-final snapshot 3.0.5-snapshot-20020710
+
+-------------------------------------------------------------------
+Fri Jul 5 14:16:16 CEST 2002 - adrian@suse.de
+
+- fix -g detection during build
+
+-------------------------------------------------------------------
+Fri Jun 21 00:21:28 CEST 2002 - adrian@suse.de
+
+- fix use of $RPM_OPT_FLAGS (broken since 3.0.4 update)
+- use -mminimal-toc on ppc64 to workaround compiler bug atm
+- update to pre-3.0.5 snapshot-20020620
+ * use buildkey for plugins instead of our own plugin hack
+ * lots of fixes (exact description in changes-3.0.5)
+- add lib64 to build key, if needed
+- remove obsolete patches
+
+-------------------------------------------------------------------
+Thu Jun 6 13:41:19 CEST 2002 - adrian@suse.de
+
+- rework plugin path patch for distributions > 8.0
+ change name of "plugins" directory instead of filenames
+ * plugins -- lib32 and multithreaded plugins
+ * plugins-non-mt -- lib32 and without multithread support
+ * plugins-lib64 -- lib64 and multithreaded plugins
+ * plugins-lib64-non-mt -- lib64 and without multithread support
+
+-------------------------------------------------------------------
+Thu May 30 20:03:50 CEST 2002 - adrian@suse.de
+
+- disable style-plugins again (too much qt apps have problems)
+- disable Xft/Xrender support also for SuSE 7.3 (XFree 4.1.0)
+ (no one reads READMES and too many people had crashes)
+
+-------------------------------------------------------------------
+Tue May 28 10:58:01 CEST 2002 - adrian@suse.de
+
+- fix %files
+
+-------------------------------------------------------------------
+Mon May 27 13:37:15 CEST 2002 - adrian@suse.de
+
+- move qconfig, qmake to qt3-devel-tools
+- build styles as plugin (except our default style: Platinum)
+
+-------------------------------------------------------------------
+Mon May 27 00:10:23 CEST 2002 - ro@suse.de
+
+- lib64: fix qtmake.conf: QTLIBDIR also has the trailing "64"
+- fix build-script for lib64 issues
+
+-------------------------------------------------------------------
+Mon May 20 23:26:35 CEST 2002 - adrian@suse.de
+
+- fix build (disable odbc during qt3.spec build)
+
+-------------------------------------------------------------------
+Mon May 20 10:13:55 CEST 2002 - adrian@suse.de
+
+- enable -tablet support if XFree86 provides it
+- compile with -debug mode, if -g is set in enviroment
+- fix postgres plugin build
+- enable unixODBC support for newer distributions
+- split sql drivers to extra packages
+- fix dlopen call
+
+-------------------------------------------------------------------
+Tue May 14 12:39:51 CEST 2002 - adrian@suse.de
+
+- fix lib64 patch to find OpenGL libs
+
+-------------------------------------------------------------------
+Thu May 9 21:54:41 CEST 2002 - adrian@suse.de
+
+- apply fix for NetAccess focus, insertTitle(), QTextEdit and
+ QToolbar from qt-copy
+
+-------------------------------------------------------------------
+Wed May 8 09:39:48 CEST 2002 - coolo@suse.de
+
+- fixing patch section (grr)
+
+-------------------------------------------------------------------
+Tue May 7 17:13:41 CEST 2002 - coolo@suse.de
+
+- adding fix for x86_64
+
+-------------------------------------------------------------------
+Tue May 7 14:32:39 MEST 2002 - coolo@suse.de
+
+- update to qt 3.0.4 - remove fixes that do
+ not apply any longer
+- disable asian patches as they do not apply
+ and I don't want to split them as I have no
+ idea if the problems they try to fix are still
+ there
+
+-------------------------------------------------------------------
+Wed Apr 24 16:09:09 CEST 2002 - coolo@suse.de
+
+- fix lib64 support
+- fix asian patch not to use arrays in unused arrays
+ (triggers compiler problem)
+
+-------------------------------------------------------------------
+Sun Apr 21 12:58:33 CEST 2002 - adrian@suse.de
+
+- improve image rendering speed (patch by Lubos)
+
+-------------------------------------------------------------------
+Tue Apr 9 16:21:07 CEST 2002 - adrian@suse.de
+
+- apply patch from Lubos to fix alpha channel in QMovie
+
+-------------------------------------------------------------------
+Fri Apr 5 15:29:03 CEST 2002 - adrian@suse.de
+
+- fixed print support in qpsprint
+- binary compatibility fixes by Lars for gbk encoding
+
+-------------------------------------------------------------------
+Wed Apr 3 21:33:26 CEST 2002 - adrian@suse.de
+
+- apply fixes/extensions for asian/utf-8-based languages
+ (assembled by Lars and Brad, thank you, verifed by mfabian)
+- 64bit fixes from Andreas Schwab (const char*) null pointer casts
+
+-------------------------------------------------------------------
+Sun Mar 24 13:23:18 CET 2002 - adrian@suse.de
+
+- apply qtabbar fix. Fixes crashes with kcm modules.
+
+-------------------------------------------------------------------
+Fri Mar 22 10:33:58 CET 2002 - adrian@suse.de
+
+- apply fix for sig11 in QCommonStyle (made by Waldo/Trolltech)
+- apply fix to use libpng instead of libmng to load pngs (by coolo)
+- add missing Requires for qt3-devel
+
+-------------------------------------------------------------------
+Wed Mar 20 22:47:59 CET 2002 - adrian@suse.de
+
+- verify 3.0.3 final version
+- add check for null pointer returned by libXft
+ (fix sig11 when no Xft fonts are configured)
+- fix scrollbar behaviour for QT Platinum style
+ (we are X Windows compatible instead of MS Windows)
+
+-------------------------------------------------------------------
+Tue Mar 19 10:36:42 CET 2002 - adrian@suse.de
+
+- update to version 3.0.3
+ (rc6 tar ball from troll, I have to check after the qt-3.0.3 release,
+ if this is really qt-3.0.3 final)
+
+-------------------------------------------------------------------
+Tue Mar 12 20:01:34 CET 2002 - adrian@suse.de
+
+- update to pre 3.0.3 snapshot (3.0.2.20020312)
+
+-------------------------------------------------------------------
+Mon Mar 4 09:44:37 CET 2002 - adrian@suse.de
+
+- more fixes
+ * fix auto-resizing with QMovie
+ * fix to correctly open submenues in right to left layout
+ * reduce number of mallocs by sharing QColorGroup
+ * Simplified static cleanup handlers.
+ * smarter tooltip placement
+- require "c++_compiler" for distributions newer than 7.3 only
+
+-------------------------------------------------------------------
+Sun Mar 3 02:31:31 CET 2002 - adrian@suse.de
+
+- apply some fixes from qt-copy
+ * 8 bit color depth image format fixes
+ * spinbox flicker fix
+ * qrichtext dangeling pointers fix
+ * qmenubar right to left layout mode cursor navigation fix
+ * qcombobox avoid emitting highlighted twice on keyPressEvent
+
+-------------------------------------------------------------------
+Mon Feb 25 17:34:15 CET 2002 - adrian@suse.de
+
+- update to version 3.0.2
+- remove compile fixes
+- fix symlink for qtconfig
+
+-------------------------------------------------------------------
+Thu Feb 14 01:05:14 CET 2002 - adrian@suse.de
+
+- fix Requires for qt3-devel (add g++ compiler)
+
+-------------------------------------------------------------------
+Tue Feb 12 01:01:31 CET 2002 - adrian@suse.de
+
+- fix build for lib64/s390x
+
+-------------------------------------------------------------------
+Wed Feb 6 21:08:43 CET 2002 - adrian@suse.de
+
+- add links in /usr/bin for qtconfig
+
+-------------------------------------------------------------------
+Sun Feb 3 14:57:30 CET 2002 - adrian@suse.de
+
+- fix dumb-packager-bug (s,%fi,%endif,)
+
+-------------------------------------------------------------------
+Sun Feb 3 12:23:35 CET 2002 - adrian@suse.de
+
+- compile fix for postrgres module
+- extend plugin patch to work on s390x and sparc64 to work with
+ lib64 plugins
+- add %{_libdir}/qt3 symlink for s390x and sparc64
+
+-------------------------------------------------------------------
+Sat Feb 2 13:00:38 CET 2002 - ro@suse.de
+
+- cleaned changes file
+
+-------------------------------------------------------------------
+Fri Feb 1 15:29:58 CET 2002 - adrian@suse.de
+
+- update to current qt-copy snapshot (needed for KDE 3.0 beta 2)
+- make threaded plugins as usual again
+- non-threaded plugins needs now the not compatible -non-mt.so
+ suffix
+
+-------------------------------------------------------------------
+Fri Feb 1 00:26:05 CET 2002 - ro@suse.de
+
+- changed neededforbuild <libpng> to <libpng-devel-packages>
+
+-------------------------------------------------------------------
+Tue Jan 29 16:29:15 CET 2002 - adrian@suse.de
+
+- enable AA for SuSE > 7.3
+
+-------------------------------------------------------------------
+Tue Jan 29 10:58:57 CET 2002 - schwab@suse.de
+
+- Fix use of varargs on 64 bit platforms.
+
+-------------------------------------------------------------------
+Wed Jan 23 22:56:28 CET 2002 - adrian@suse.de
+
+- patch plugin loader to load only plugins with -mt.so
+ extension
+- link direct against libpng
+- move qt3.conf file to susehelp
+- TODO: make plugin loader path depending on %_libdir
+
+-------------------------------------------------------------------
+Tue Jan 22 21:47:19 CET 2002 - adrian@suse.de
+
+- enable Xrender/Xft again for SuSE 7.3
+ (I was misleaded by a broken libXft :/ )
+- using qt plugin mechanism for picture format support
+- enable XRender by default, but leave Xft disabled by default
+ (kcontrol can switch Xft on for KDE applications now)
+- add additional include path for postgres 7.2b5
+
+-------------------------------------------------------------------
+Mon Jan 21 16:58:53 CET 2002 - adrian@suse.de
+
+- disable Xft for all distributions until 7.3
+ (XFree 4.2 is needed)
+- sync QClipboard fix from qt-copy
+
+-------------------------------------------------------------------
+Tue Jan 8 16:11:14 CET 2002 - adrian@suse.de
+
+- fix Requires
+- disable rpath
+
+-------------------------------------------------------------------
+Sun Jan 6 00:31:11 CET 2002 - adrian@suse.de
+
+- split non multithreaded librarys into qt3-non-mt package
+- split developer tutorial into qt3-tutorial package
+- use common config script to prepare build
+- move libs to /usr/lib/qt3/%{_libdir}
+- remove .prl files from file list again
+
+-------------------------------------------------------------------
+Thu Jan 3 16:48:59 CET 2002 - adrian@suse.de
+
+- rename qt3-designer subpackage to qt3-devel-tools
+- add default qtrc file
+ * disable Xft support by default
+ * use Platinum style
+ * set qt plugin path
+- move qtconfig to qt base package
+- apply fixes from qt-copy/KDE-cvs
+
+-------------------------------------------------------------------
+Thu Dec 13 10:42:07 CET 2001 - adrian@suse.de
+
+- use $RPM_OPT_FLAGS during compile
+- add missing .prl files to file list
+
+-------------------------------------------------------------------
+Wed Dec 12 16:39:16 CET 2001 - adrian@suse.de
+
+- update to version 3.0.1
+- build all extra tools
+- fix default mkspec symlink
+- include examples to devel-doc package
+
+-------------------------------------------------------------------
+Thu Nov 8 18:39:52 CET 2001 - ro@suse.de
+
+- use mesa-devel-packages in neededforbuild
+
+-------------------------------------------------------------------
+Tue Oct 16 11:13:50 CEST 2001 - adrian@suse.de
+
+- fix hardcoded install dir in libqt
+ (no $QTDIR is needed at runtime anymore)
+
+-------------------------------------------------------------------
+Mon Oct 15 18:16:49 CEST 2001 - adrian@suse.de
+
+- update to QT 3.0.0 final
+ (the KDE 3 battle begins :)
+
+-------------------------------------------------------------------
+Fri Oct 5 10:50:24 CEST 2001 - adrian@suse.de
+
+- add missing header files
+- cleanup workarounds in spec file and add some new (but less ;)
+
+-------------------------------------------------------------------
+Mon Oct 1 16:35:56 CEST 2001 - adrian@suse.de
+
+- update to beta6
+
+-------------------------------------------------------------------
+Tue Sep 18 08:54:02 CEST 2001 - adrian@suse.de
+
+- update to beta5
+
+-------------------------------------------------------------------
+Wed Sep 5 12:17:19 CEST 2001 - adrian@suse.de
+
+- okay, my last try ... cp -f has different return values on the
+ distributions :(
+
+-------------------------------------------------------------------
+Tue Sep 4 10:18:20 CEST 2001 - adrian@suse.de
+
+- disable postgres support for old distributions
+ (now it also builds with SuSE 6.4)
+
+-------------------------------------------------------------------
+Mon Sep 3 15:42:48 CEST 2001 - adrian@suse.de
+
+- fix broken links in include path
+
+-------------------------------------------------------------------
+Sun Sep 2 19:47:01 CEST 2001 - adrian@suse.de
+
+- workaround bugs in Makefile to install all needed files
+- remove -j4 behind make
+
+-------------------------------------------------------------------
+Tue Jun 19 15:26:54 CEST 2001 - adrian@suse.de
+
+- split documentation from qt3-devel to qt3-doc
+
+-------------------------------------------------------------------
+Fri May 25 11:57:34 CEST 2001 - adrian@suse.de
+
+- first try with QT 3.0.0 beta 1
+ ( this package is far away from being perfect )
+
+-------------------------------------------------------------------
+Sun May 6 10:52:33 CEST 2001 - adrian@suse.de
+
+- apply XftGlyph fix for qfont_x11.cpp from Keith Packard
+- fix build for distributions before 7.1
+
+-------------------------------------------------------------------
+Fri May 4 11:39:55 CEST 2001 - adrian@suse.de
+
+- add fix for buffer overflow on qfont_x11 and some minor glitches
+ in qt-png
+- qt-experimental is dropped, since we can enable AA in qt now.
+
+-------------------------------------------------------------------
+Fri Apr 27 15:29:17 CEST 2001 - adrian@suse.de
+
+- switch BuildIndex for SuSEhelp to false by default
+
+-------------------------------------------------------------------
+Mon Apr 23 22:22:19 CEST 2001 - adrian@suse.de
+
+- using -DNO_DEBUG
+- apply latin9 patch from mls@suse.de
+
+-------------------------------------------------------------------
+Wed Apr 4 22:48:01 CEST 2001 - mfabian@suse.de
+
+- add /etc/qt.fontguess (config file for Japanese and Korean
+ fonts)
+
+-------------------------------------------------------------------
+Wed Mar 21 17:43:49 CET 2001 - adrian@suse.de
+
+- disable AA by default (still to many problems)
+
+-------------------------------------------------------------------
+Sun Mar 18 09:46:50 CET 2001 - adrian@suse.de
+
+- reenable qt-experimental for SuSE distribution < 7.2
+ disable opengl module for these distris in this package
+
+-------------------------------------------------------------------
+Sat Mar 17 14:43:11 CET 2001 - adrian@suse.de
+
+- update to QT 2.3.0
+ this makes qt-experimental obsolete
+ (maybe still some problems with the nvidia driver, but the nv
+ should work fine and the users are warned about nvidia since
+ SuSE 7.1)
+
+-------------------------------------------------------------------
+Sun Mar 11 20:20:41 CET 2001 - mfabian@suse.de
+
+- fix spec-file to make it build with "rpm -ba"
+
+-------------------------------------------------------------------
+Fri Feb 9 19:55:09 CET 2001 - adrian@suse.de
+
+- use $RPM_OPT_FLAGS
+ drop signed char patch
+
+-------------------------------------------------------------------
+Sat Feb 3 14:12:01 CET 2001 - adrian@suse.de
+
+- update to QT 2.2.4
+ qt-static is an own package and no sub packages anymore
+ fix/patch for qprintdialog is no longer needed
+ add fix from Andreas Schwab for 64bit platforms
+
+-------------------------------------------------------------------
+Fri Jan 19 11:33:07 CET 2001 - adrian@suse.de
+
+- swap link and directory of html documentation. This makes
+ trouble during update from older distributions
+
+-------------------------------------------------------------------
+Sat Jan 13 21:18:58 CET 2001 - adrian@suse.de
+
+- remove not necessary susehelp/htdig conf file
+ remove file conflicts between qt-devel and qt-experimental
+
+-------------------------------------------------------------------
+Thu Jan 4 21:37:49 CET 2001 - adrian@suse.de
+
+- added qt-experimental,qt-japanese,qt-korean to Obsoletes:
+
+-------------------------------------------------------------------
+Wed Jan 3 02:24:50 CET 2001 - adrian@suse.de
+
+- fix qprintdialog
+ fix qrichtext (Thanks Stefan)
+
+-------------------------------------------------------------------
+Wed Jan 3 02:24:15 CET 2001 - adrian@suse.de
+
+- fix qprintdialog
+
+-------------------------------------------------------------------
+Mon Jan 1 17:18:43 CET 2001 - adrian@suse.de
+
+- spec file fix
+
+-------------------------------------------------------------------
+Sun Dec 31 13:18:17 CET 2000 - adrian@suse.de
+
+- added small tools to qt-devel (thanks Dirk)
+
+-------------------------------------------------------------------
+Fri Dec 22 20:46:34 CET 2000 - adrian@suse.de
+
+- remove asian patches from qt-experimental
+
+-------------------------------------------------------------------
+Wed Dec 20 18:51:44 CET 2000 - adrian@suse.de
+
+- fixe type in package name
+
+-------------------------------------------------------------------
+Wed Dec 20 18:44:44 CET 2000 - adrian@suse.de
+
+- move docu from qtlib2 to qt
+
+-------------------------------------------------------------------
+Sat Dec 16 17:02:47 CET 2000 - adrian@suse.de
+
+- initial package. support for font anti aliasing has been added
+ Also OpenGL module is active
+
+-------------------------------------------------------------------
+Thu Dec 14 11:51:41 CET 2000 - adrian@suse.de
+
+- update to 2.2.3 and remove all the unneeded fix patches.
+ added SuSE help conf files to qt-devel
+
+-------------------------------------------------------------------
+Tue Dec 12 15:32:01 CET 2000 - schwab@suse.de
+
+- Build with -O0 on ia64.
+
+-------------------------------------------------------------------
+Fri Dec 1 00:29:50 CET 2000 - adrian@suse.de
+
+- added rpath for uic/kdelibs and fixed uic fix ..
+ to drunk to drink more
+
+-------------------------------------------------------------------
+Thu Nov 30 11:31:36 CET 2000 - adrian@suse.de
+
+- fixed dif
+
+-------------------------------------------------------------------
+Thu Nov 30 00:33:26 CET 2000 - adrian@suse.de
+
+- added fix for uic and qiconview
+
+-------------------------------------------------------------------
+Wed Nov 29 11:33:51 CET 2000 - adrian@suse.de
+
+- fixed build on ppc
+
+-------------------------------------------------------------------
+Tue Nov 21 09:31:40 CET 2000 - ro@suse.de
+
+- spec fix
+
+-------------------------------------------------------------------
+Fri Nov 17 14:57:54 CET 2000 - ro@suse.de
+
+- fixed neededforbuild: += libmng-devel
+
+-------------------------------------------------------------------
+Mon Nov 13 21:40:29 CET 2000 - adrian@suse.de
+
+- new version 2.2.2
+ added qpngio fix from waldo
+
+-------------------------------------------------------------------
+Fri Nov 10 00:57:39 CET 2000 - adrian@suse.de
+
+- fixed static config for <6.4 distris (no libmng)
+
+-------------------------------------------------------------------
+Tue Oct 31 13:45:29 CET 2000 - adrian@suse.de
+
+- split the qt package in
+ qt
+ qt-devel
+ qt-extensions
+ qt-man
+ qt-static
+
+ Added an ugly patch to get an uic with KDE support. The designer
+ is broken in this package after this patch, so it is not packaged.
+ The designer can be found in the qt-designer package
+
+-------------------------------------------------------------------
+Tue Oct 17 09:59:23 MEST 2000 - adrian@suse.de
+
+- switch to -O0 for ppc
+
+-------------------------------------------------------------------
+Sat Oct 14 09:51:19 CEST 2000 - adrian@suse.de
+
+- drop OpenGL support. Problems with Nvidia's binary only driver
+
+- added fix from waldo (fixing memory leak in qpngio)
+
+-------------------------------------------------------------------
+Mon Oct 9 16:00:44 CEST 2000 - adrian@suse.de
+
+- update the tar archiv (which contains a corrected classes.html file)
+
+-------------------------------------------------------------------
+Fri Oct 6 12:46:48 CEST 2000 - adrian@suse.de
+
+- update to 2.2.1
+ added static libs for libqt and libqt-mt
+ added support for libmng
+
+-------------------------------------------------------------------
+Mon Oct 2 10:56:03 CEST 2000 - adrian@suse.de
+
+- added missing header files
+
+-------------------------------------------------------------------
+Tue Sep 19 16:03:56 MEST 2000 - adrian@suse.de
+
+- switch to -O0 for axp
+
+-------------------------------------------------------------------
+Fri Sep 8 17:09:15 CEST 2000 - schwab@suse.de
+
+- Update ia64 configuration.
+
+-------------------------------------------------------------------
+Fri Sep 8 15:36:30 CEST 2000 - adrian@suse.de
+
+- added missing libqt-mt.so
+ clean up in filelist
+ changed copyright/license to GPL
+
+-------------------------------------------------------------------
+Thu Sep 7 22:35:05 CEST 2000 - adrian@suse.de
+
+- update to qt 2.2.0 final
+
+-------------------------------------------------------------------
+Tue Aug 22 19:56:07 CEST 2000 - adrian@suse.de
+
+- removed uic/moc bindings to libGL and other
+
+-------------------------------------------------------------------
+Fri Aug 18 20:33:25 CEST 2000 - adrian@suse.de
+
+- update to qt 2.2.0 beta 2
+ spec file rewritten
+
+-------------------------------------------------------------------
+Tue Jul 4 15:11:10 CEST 2000 - adrian@suse.de
+
+- moved links from /usr/lib/qt/lib to /usr/lib/
+
+-------------------------------------------------------------------
+Thu Jun 22 15:59:04 CEST 2000 - adrian@suse.de
+
+- add libqt.so.2 links in /usr/lib/qt/lib
+
+-------------------------------------------------------------------
+Fri Jun 16 16:26:31 CEST 2000 - adrian@suse.de
+
+- moved libqt.so back to qtlib2, after religios war.
+
+-------------------------------------------------------------------
+Fri Jun 16 12:26:33 CEST 2000 - adrian@suse.de
+
+- enable gif support again
+
+-------------------------------------------------------------------
+Fri Jun 16 09:18:31 CEST 2000 - adrian@suse.de
+
+- moved static libs to qtdevel2
+
+-------------------------------------------------------------------
+Tue Jun 6 14:06:10 CEST 2000 - schwab@suse.de
+
+- Reduce opt level on ia64.
+
+-------------------------------------------------------------------
+Tue Jun 6 01:06:59 CEST 2000 - adrian@suse.de
+
+- fixed dependencies
+
+-------------------------------------------------------------------
+Tue May 30 23:02:56 CEST 2000 - adrian@suse.de
+
+- readded mesadev in neededforbuild
+
+-------------------------------------------------------------------
+Tue May 30 15:30:16 CEST 2000 - adrian@suse.de
+
+- update to 2.1.1
+
+-------------------------------------------------------------------
+Wed May 24 13:06:43 CEST 2000 - adrian@suse.de
+
+- added mesadev in neededforbuild
+ removed gif support (license issue)
+
+-------------------------------------------------------------------
+Tue May 16 21:44:53 CEST 2000 - adrian@suse.de
+
+- added -fno-exception (smaller binaries)
+
+-------------------------------------------------------------------
+Fri May 12 08:55:01 CEST 2000 - adrian@suse.de
+
+- fixed link /usr/doc/packages/html
+ using %{_defaultdocdir}
+ using %{_mandir}
+
+-------------------------------------------------------------------
+Fri Apr 14 15:14:19 CEST 2000 - adrian@suse.de
+
+- update to 2.1.0 final
+ new package for all man pages
+
+-------------------------------------------------------------------
+Thu Apr 6 19:16:55 CEST 2000 - adrian@suse.de
+
+- update to 2.1.0 beta 4
+
+-------------------------------------------------------------------
+Thu Mar 30 15:57:33 CEST 2000 - adrian@suse.de
+
+- update to qtlib 2.1.0 beta 3
+ the destination directory is not longer /usr/lib/qt !!!
+ QTDIR=/usr/lib/qt-2.1.0
+ There is also a link /usr/lib/qt2 to /usr/lib/qt-2.1.0
+
+-------------------------------------------------------------------
+Thu Mar 2 11:17:22 CET 2000 - ro@suse.de
+
+- removed obsolete part of patch
+
+-------------------------------------------------------------------
+Thu Mar 2 07:27:34 CET 2000 - ro@suse.de
+
+- configure doesn't know --mandir ... :(
+
+-------------------------------------------------------------------
+Thu Mar 2 01:59:58 CET 2000 - ro@suse.de
+
+- work-around for prepare-spec buglet
+
+-------------------------------------------------------------------
+Wed Mar 1 00:05:15 CET 2000 - ro@suse.de
+
+- man to /usr/share using macro
+
+-------------------------------------------------------------------
+Tue Feb 29 15:55:33 CET 2000 - kettner@suse.de
+
+- Apply patch for qfont_x11.cpp from warwick@warwick-bippy
+
+-------------------------------------------------------------------
+Mon Feb 28 18:26:18 CET 2000 - kettner@suse.de
+
+- increased font cache from 4MB to 9MB in order to
+ speed up UNICODE fonts for YaST2
+
+-------------------------------------------------------------------
+Thu Nov 11 20:00:14 MET 1999 - uli@suse.de
+
+- removed netscape from neededforbuild
+
+-------------------------------------------------------------------
+Tue Nov 9 11:12:48 MET 1999 - kettner@suse.de
+
+- Removed mesa from Requires, as it is not required
+
+-------------------------------------------------------------------
+Fri Oct 22 14:42:35 MEST 1999 - kettner@suse.de
+
+ - Patch extensions/imageio/src/Makefile.in in order to get
+ shared library of libimgio again. Worked in 2.00.
+
+-------------------------------------------------------------------
+Mon Oct 11 21:06:47 MEST 1999 - kettner@suse.de
+
+ - New version 2.0.2
+
+-------------------------------------------------------------------
+Tue Sep 28 18:09:12 MEST 1999 - uli@suse.de
+
+- switched from Motif to lesstif
+
+-------------------------------------------------------------------
+Mon Sep 27 16:31:01 CEST 1999 - bs@suse.de
+
+- fixed requirements for sub packages
+
+-------------------------------------------------------------------
+Fri Sep 17 11:28:09 MEST 1999 - kettner@suse.de
+
+- Reinserted old # Commandline line.
+
+-------------------------------------------------------------------
+Mon Sep 13 17:23:57 CEST 1999 - bs@suse.de
+
+- ran old prepare_spec on spec file to switch to new prepare_spec.
+
+-------------------------------------------------------------------
+Wed Jul 14 11:49:22 CEST 1999 - kettner@suse.de
+
+ - New version 2.00
+
+-------------------------------------------------------------------
+Tue Jul 13 19:31:56 CEST 1999 - kettner@suse.de
+
+ - New version 2.00
+
+-------------------------------------------------------------------
+Mon Jul 12 19:15:16 CEST 1999 - kettner@suse.de
+
+ - New version 2.00
+
diff --git a/opensuse/core/qt3/qt3-devel-doc.spec b/opensuse/core/qt3/qt3-devel-doc.spec
new file mode 100644
index 000000000..cf4a5e869
--- /dev/null
+++ b/opensuse/core/qt3/qt3-devel-doc.spec
@@ -0,0 +1,297 @@
+#
+# spec file for package qt3-devel-doc
+#
+# Copyright (c) 2011 SUSE LINUX Products GmbH, Nuernberg, Germany.
+#
+# All modifications and additions to the file contributed by third parties
+# remain the property of their copyright owners, unless otherwise agreed
+# upon. The license for this file, and modifications and additions to the
+# file, is the same license as for the pristine package itself (unless the
+# license for the pristine package is not an Open Source License, in which
+# case the license is the MIT License). An "Open Source License" is a
+# license that conforms to the Open Source Definition (Version 1.9)
+# published by the Open Source Initiative.
+
+# Please submit bugfixes or comments via http://bugs.opensuse.org/
+#
+
+# norootforbuild
+
+
+Name: qt3-devel-doc
+BuildRequires: cups-devel freeglut-devel freetype2-devel gcc-c++ pkgconfig qt3-devel update-desktop-files
+%if %suse_version < 1130
+BuildRequires: libpng-devel
+%else
+BuildRequires: libpng14-devel
+%endif
+Url: http://www.trolltech.com/
+License: GPL, QPL
+AutoReqProv: on
+Summary: Documentation for the Qt 3 Development Kit
+Group: Documentation/HTML
+Version: 3.3.8c
+Release: 1
+PreReq: /bin/grep
+BuildArch: noarch
+Provides: qt3-devel-tutorial
+Obsoletes: qt3-devel-tutorial
+Requires: qt3-devel
+%define x11_free -x11-free-
+%define rversion %version
+# COMMON-BEGIN
+# COMMON-BEGIN
+%define x11_free -x11-free-
+%define rversion 3.3.8b
+Source0: qt%{x11_free}%rversion.tar.bz2
+Source1: build_script.sh
+Source2: qtconfig3.desktop
+Source3: qtrc
+Source4: assistant3.png
+Source6: assistant3.desktop
+Source7: designer.desktop
+Source8: designer.png
+Source9: linguist.desktop
+Source5: linguist.png
+Source10: qt3.sh
+Source11: qt3.csh
+# Translations did not change at 3.3.8c
+Source12: qt3-3.3.8b-translations.tar.bz2
+Source100: qtkdeintegration_x11.cpp
+Source101: qtkdeintegration_x11_p.h
+Source102: baselibs.conf
+Source200: attributes
+Source201: update_spec.pl
+Patch1: aliasing.diff
+Patch2: head.diff
+Patch4: qt3-never-strip.diff
+Patch5: external-libs.diff
+Patch6: 0001-dnd_optimization.patch
+Patch7: 0002-dnd_active_window_fix.patch
+Patch8: 0007-qpixmap_constants.patch
+Patch11: 0038-dragobject-dont-prefer-unknown.patch
+Patch12: qtrc-path.diff
+Patch14: lib64-plugin-support.diff
+Patch15: pluginmanager-fix.diff
+Patch18: no-rpath.dif
+Patch19: shut-up.diff
+Patch20: rubberband.diff
+Patch21: fix-GL-loading.diff
+Patch23: fix-accessible.diff
+# From http://www.freedesktop.org/wiki/Software_2fImmoduleQtDownload
+# Current version from http://freedesktop.org/~daisuke/qt-x11-immodule-unified-qt3.3.5-20060318.diff.bz2
+Patch25: qt-x11-immodule-unified-qt3.3.8-20060318.diff
+Patch28: fix-key-release-event-with-imm.diff
+Patch29: 0047-fix-kmenu-width.diff
+Patch31: limit-image-size.diff
+Patch34: 0005-qpixmap_mitshm.patch
+Patch35: qt-transparency.patch
+Patch37: 0055-qtextedit_zoom.patch
+Patch38: 0048-qclipboard_hack_80072.patch
+Patch39: fix-qtranslator-crash.diff
+Patch40: 0059-qpopup_has_mouse.patch
+Patch41: 0060-qpopup_ignore_mousepos.patch
+Patch42: add_qexport_visibility.patch
+Patch43: 0056-khotkeys_input_84434.patch
+Source250: enable-designer-plugins.diff
+Patch53: fix-xinerama-dialog-placement.diff
+Patch54: kmenu-search-fix.diff
+Patch55: qt3-fix-cast.diff
+Patch100: qt.patch
+Patch101: qt3-arm-gcc4.patch
+Patch102: xinerama.patch
+Patch113: fix-assistant-path.patch
+Patch117: qtimer-debug.diff
+Patch119: xinerama-qpopupmenu.diff
+Patch121: qt3-warnings.diff
+Patch123: use-xrandr-1.2.diff
+Patch125: qcstring-format-warnings.diff
+Patch127: mng-reading-fix.patch
+Patch128: 0079-compositing-types.patch
+Patch129: 0080-net-wm-sync-request.patch
+Patch132: revert-qt-3.3.8-khmer-fix.diff
+Patch133: 0085-fix-buildkey.diff
+Patch134: fix-xinput-clash.diff
+Patch135: parseFontName.diff
+Patch136: qt3-no-date.diff
+Patch137: popen-leak-fix.diff
+Patch138: qt3-libpng14.diff
+Patch139: gcc46.diff
+
+# TQt integration
+Patch200: qt-3.3.8c.diff
+
+BuildRoot: %{_tmppath}/%{name}-%{version}-build
+
+%description
+This package contains the documentation for the Qt 3 Development Kit.
+
+You will find documentation, precompiled examples, and a tutorial for
+getting started with Qt in /usr/lib/qt3/doc.
+
+This package contains the documentation for the Qt 3 Development Kit.
+
+You will find documentation, precompiled examples, and a tutorial for
+getting started with Qt in /usr/lib/qt3/doc.
+
+This package contains the documentation for the Qt 3 Development Kit.
+
+You will find documentation, precompiled examples, and a tutorial for
+getting started with Qt in /usr/lib/qt3/doc.
+
+This package contains the documentation for the Qt 3 Development Kit.
+
+You will find documentation, precompiled examples, and a tutorial for
+getting started with Qt in /usr/lib/qt3/doc.
+
+%define build_sub_dirs src plugins/src tools/designer/uilib/ tools/designer/uic tools/qtconfig tools/assistant/lib tools/assistant tutorial
+
+%prep
+%setup -q -n qt%{x11_free}%rversion
+%patch1
+%patch2
+%patch4
+%patch5
+%patch6
+%patch7
+%patch8
+%patch11
+%patch12
+if [ "%_lib" = "lib64" ]; then
+%patch14
+fi
+%patch15
+%patch18
+%patch19
+%patch20
+%patch23
+%patch25
+%patch28
+%patch29
+%patch31
+%patch34
+%patch35
+%patch37
+%patch38
+%patch39
+%patch40
+%patch41
+%patch42
+%patch43
+%patch100
+%patch102
+%patch53
+%patch54
+%patch55
+%patch101
+%patch113
+%patch117
+%patch119
+%patch121
+%patch123
+ln -sf $PWD/src/inputmethod/qinputcontextfactory.h include/
+ln -sf $PWD/src/inputmethod/qinputcontextplugin.h include/
+ln -sf $PWD/src/kernel/qinputcontext.h include/
+ln -sf $PWD/src/kernel/qinputcontextinterface_p.h include/private/
+ln -sf $PWD/src/kernel/qximinputcontext_p.h include/private/
+if [ %_lib = "lib" ]; then
+sed 's,/lib64/,/lib/,' %PATCH21 | patch -p0
+else
+%patch21
+fi
+%patch125
+%patch127
+%patch128
+%patch129
+%patch132
+%patch133
+%patch134
+%patch135
+%patch136
+%patch137
+%if %suse_version > 1120
+%patch138 -p1
+%endif
+%patch139
+%patch200
+# copy qt kde integration files
+cp %SOURCE100 %SOURCE101 src/kernel/
+cp %SOURCE101 include/private/
+cd translations
+tar xvjf %SOURCE12
+cd ..
+# COMMON-END
+# COMMON-END
+
+%description
+This package contains the documentation for the Qt 3 Development Kit.
+
+You will find documentation, precompiled examples, and a tutorial for
+getting started with Qt in /usr/lib/qt3/doc.
+
+This package contains the documentation for the Qt 3 Development Kit.
+
+You will find documentation, precompiled examples, and a tutorial for
+getting started with Qt in /usr/lib/qt3/doc.
+
+This package contains the documentation for the Qt 3 Development Kit.
+
+You will find documentation, precompiled examples, and a tutorial for
+getting started with Qt in /usr/lib/qt3/doc.
+
+This package contains the documentation for the Qt 3 Development Kit.
+
+You will find documentation, precompiled examples, and a tutorial for
+getting started with Qt in /usr/lib/qt3/doc.
+
+%build
+export VERSION=%suse_version
+source %SOURCE1 %{version}
+export WLIB=%_lib
+export QTDIR=`pwd`
+if [ %_lib == "lib64" ]; then
+export RPM_OPT_FLAGS="$RPM_OPT_FLAGS -DUSE_LIB64_PATHES"
+fi
+export RPM_OPT_FLAGS="$RPM_OPT_FLAGS -fno-strict-aliasing"
+#
+# call build from build_script.rpmrc for threaded Qt library
+# only really needed tools will be builded here, all extra tools will be
+# builded in qt3.spec
+#
+call_configure -thread -shared -no-sql-mysql -no-sql-psql -no-sql-odbc -no-sql-sqlite $OPTIONS
+cd src
+make %{?jobs:-j%jobs}
+cd ..
+
+%install
+export VERSION=%suse_version
+export WLIB=%_lib
+export QTDIR=`pwd`
+source %SOURCE1 %{version}
+cd src
+make INSTALL_ROOT=$RPM_BUILD_ROOT install_htmldocs
+cd ..
+#
+# install menu entries
+#
+%suse_update_desktop_file -i -u qtconfig3 Qt Utility DesktopSettings
+%suse_update_desktop_file -i assistant3 Qt Development Documentation
+
+install -d -m 0755 ${RPM_BUILD_ROOT}/%{_defaultdocdir}/qt3/
+ln -sf /usr/lib/qt3/doc/html ${RPM_BUILD_ROOT}/%{_defaultdocdir}/qt3/
+mkdir -p $RPM_BUILD_ROOT/usr/share/pixmaps/
+install -m 0644 %SOURCE4 $RPM_BUILD_ROOT/usr/share/pixmaps/
+
+%clean
+rm -rf ${RPM_BUILD_ROOT}
+
+%files
+%defattr(-,root,root)
+%dir /usr/lib/qt3/doc
+%doc /usr/lib/qt3/doc/html
+%{_docdir}/qt3/html
+/usr/share/applications/qtconfig3.desktop
+/usr/share/applications/assistant3.desktop
+/usr/share/pixmaps/assistant3.png
+
+%changelog
diff --git a/opensuse/core/qt3/qt3-devel-doc.spec.in b/opensuse/core/qt3/qt3-devel-doc.spec.in
new file mode 100644
index 000000000..ad9fd3e99
--- /dev/null
+++ b/opensuse/core/qt3/qt3-devel-doc.spec.in
@@ -0,0 +1,93 @@
+#
+# spec file for package qt3 (Version 3.3.8b)
+#
+# Copyright (c) 2006 SUSE LINUX Products GmbH, Nuernberg, Germany.
+# This file and all modifications and additions to the pristine
+# package are under the same license as the package itself.
+#
+# Please submit bugfixes or comments via http://bugs.opensuse.org/
+#
+
+# norootforbuild
+
+Name: qt3-devel-doc
+BuildRequires: cups-devel freeglut-devel freetype2-devel gcc-c++ pkgconfig update-desktop-files qt3-devel
+%if %suse_version < 1130
+BuildRequires: libpng-devel
+%else
+BuildRequires: libpng14-devel
+%endif
+URL: http://www.trolltech.com/
+License: GPL, QPL
+Autoreqprov: on
+Summary: Qt 3 Development Kit
+Group: Documentation/HTML
+Version: 3.3.8c
+Release: 1
+PreReq: /bin/grep
+BuildArch: noarch
+Provides: qt3-devel-tutorial
+Obsoletes: qt3-devel-tutorial
+Requires: qt3-devel
+%define x11_free -x11-free-
+%define rversion %version
+# COMMON-BEGIN
+# COMMON-END
+
+%description
+You need this package if you want to compile programs with Qt 3. It
+contains the "Qt Crossplatform Development Kit 2". You will find
+include files, documentation, precompiled examples, and a tutorial for
+getting started with Qt in /usr/lib/qt3.
+
+%build
+export VERSION=%suse_version
+source %SOURCE1 %{version}
+export WLIB=%_lib
+export QTDIR=`pwd`
+if [ %_lib == "lib64" ]; then
+export RPM_OPT_FLAGS="$RPM_OPT_FLAGS -DUSE_LIB64_PATHES"
+fi
+export RPM_OPT_FLAGS="$RPM_OPT_FLAGS -fno-strict-aliasing"
+#
+# call build from build_script.rpmrc for threaded Qt library
+# only really needed tools will be builded here, all extra tools will be
+# builded in qt3.spec
+#
+call_configure -thread -shared -no-sql-mysql -no-sql-psql -no-sql-odbc -no-sql-sqlite $OPTIONS
+cd src
+make %{?jobs:-j%jobs}
+cd ..
+
+%install
+export VERSION=%suse_version
+export WLIB=%_lib
+export QTDIR=`pwd`
+source %SOURCE1 %{version}
+cd src
+make INSTALL_ROOT=$RPM_BUILD_ROOT install_htmldocs
+cd ..
+#
+# install menu entries
+#
+%suse_update_desktop_file -i -u qtconfig3 Qt Utility DesktopSettings
+%suse_update_desktop_file -i assistant3 Qt Development Documentation
+
+install -d -m 0755 ${RPM_BUILD_ROOT}/%{_defaultdocdir}/qt3/
+ln -sf /usr/lib/qt3/doc/html ${RPM_BUILD_ROOT}/%{_defaultdocdir}/qt3/
+mkdir -p $RPM_BUILD_ROOT/usr/share/pixmaps/
+install -m 0644 %SOURCE4 $RPM_BUILD_ROOT/usr/share/pixmaps/
+
+%clean
+rm -rf ${RPM_BUILD_ROOT}
+
+%files
+%defattr(-,root,root)
+%dir /usr/lib/qt3/doc
+%doc /usr/lib/qt3/doc/html
+%{_docdir}/qt3/html
+/usr/share/applications/qtconfig3.desktop
+/usr/share/applications/assistant3.desktop
+/usr/share/pixmaps/assistant3.png
+
+%changelog -n qt3
diff --git a/opensuse/core/qt3/qt3-extensions.changes b/opensuse/core/qt3/qt3-extensions.changes
new file mode 100644
index 000000000..db0df1efa
--- /dev/null
+++ b/opensuse/core/qt3/qt3-extensions.changes
@@ -0,0 +1,2475 @@
+-------------------------------------------------------------------
+Fri Sep 23 10:16:33 UTC 2011 - coolo@suse.com
+
+- fix qt3-extensions
+
+-------------------------------------------------------------------
+Fri Apr 22 18:31:12 UTC 2011 - anixx@opensuse.org
+
+- changed compression to .tar.bz2
+
+-------------------------------------------------------------------
+Thu Apr 21 11:40:38 CEST 2011 - pth@suse.de
+
+- Don't try to patch in the version twice in qt-3.3.8c.diff.
+- Resync those patches that don't apply without offset.
+- Mark scriptlets in profile.d as being configuration files.
+- Remove the calls to run_ldconfig.
+
+-------------------------------------------------------------------
+Mon Apr 18 18:46:34 UTC 2011 - robxu9@gmail.com
+
+- a fix to the 3.3.8c patch
+
+-------------------------------------------------------------------
+Thu Mar 31 18:15:29 UTC 2011 - coolo@novell.com
+
+- another gcc 4.6 fix
+
+-------------------------------------------------------------------
+Mon Jan 31 21:23:51 UTC 2011 - robxu9@gmail.com
+
+- Update to version 3.3.8c, by the Trinity Project
+- pre_checkin.sh was not run as this caused too many unneccesary
+ changes to occur.
+- The translations tarball was left at version 3.3.8b.
+
+-------------------------------------------------------------------
+Sat Nov 20 02:26:08 CET 2010 - dmueller@suse.de
+
+- fix build against gcc 4.6
+
+-------------------------------------------------------------------
+Mon Nov 1 10:09:40 UTC 2010 - coolo@novell.com
+
+- fix libpng dependencies
+
+-------------------------------------------------------------------
+Wed Sep 1 13:22:38 UTC 2010 - pgajdos@novell.com
+
+- port to libpng14
+
+-------------------------------------------------------------------
+Wed May 5 19:42:33 UTC 2010 - coolo@novell.com
+
+- do not patch the symlink
+
+-------------------------------------------------------------------
+Mon Apr 5 21:06:20 CEST 2010 - dmueller@suse.de
+
+- fix -devel package requires
+- simplify requires of sub-specfiles
+
+-------------------------------------------------------------------
+Mon Apr 5 16:00:15 CEST 2010 - dmueller@suse.de
+
+- build against libpng12
+
+-------------------------------------------------------------------
+Thu Jan 21 14:24:13 CET 2010 - dmueller@suse.de
+
+- recommend kdelibs3-default-style (bnc#544581)
+
+-------------------------------------------------------------------
+Fri Dec 18 17:04:51 CET 2009 - jengelh@medozas.de
+
+- add baselibs.conf as a source
+- add baselib definitions for SPARC
+
+-------------------------------------------------------------------
+Fri Nov 13 14:28:47 CET 2009 - dmueller@suse.de
+
+- fix patches to apply with fuzz=0
+
+-------------------------------------------------------------------
+Tue Nov 3 19:14:30 UTC 2009 - coolo@novell.com
+
+- updated patches to apply with fuzz=0
+
+-------------------------------------------------------------------
+Tue Aug 11 11:24:13 CEST 2009 - dmueller@suse.de
+
+- fix popen leak (bnc#529615)
+
+-------------------------------------------------------------------
+Mon Feb 9 12:08:04 CET 2009 - coolo@suse.de
+
+- strip out date from .la files
+
+-------------------------------------------------------------------
+Sat Feb 7 20:43:40 CET 2009 - coolo@suse.de
+
+- do not put timestamps in generated sources
+
+-------------------------------------------------------------------
+Wed Jan 7 12:34:56 CET 2009 - olh@suse.de
+
+- obsolete old -XXbit packages (bnc#437293)
+
+-------------------------------------------------------------------
+Tue Nov 11 16:57:56 CET 2008 - ro@suse.de
+
+- SLE-11 uses PPC64 instead of PPC, adapt baselibs.conf
+
+-------------------------------------------------------------------
+Wed Sep 10 18:50:12 CEST 2008 - dmueller@suse.de
+
+- remove qt3-static package
+
+-------------------------------------------------------------------
+Mon Jul 21 21:20:47 CEST 2008 - dmueller@suse.de
+
+- more verbose qtimer debug
+
+-------------------------------------------------------------------
+Sun Jun 22 13:00:45 CEST 2008 - schwab@suse.de
+
+- Fix invalid array reference in font name parser.
+
+-------------------------------------------------------------------
+Thu Apr 10 12:54:45 CEST 2008 - ro@suse.de
+
+- added baselibs.conf file to build xxbit packages
+ for multilib support
+
+-------------------------------------------------------------------
+Mon Mar 10 16:48:36 CET 2008 - dmueller@suse.de
+
+- fix build with updated x.org
+
+-------------------------------------------------------------------
+Thu Feb 7 17:51:25 CET 2008 - dmueller@suse.de
+
+- fix memory corruption when removing CRTc's dynamically
+
+-------------------------------------------------------------------
+Sat Jan 19 07:19:25 CET 2008 - stbinner@suse.de
+
+- This version adds the GNU Public License version 3 as a
+ possible choice for licenses to the Open Source releases of Qt 3.
+- upstreaming of patches and few other minor bugfixes
+
+-------------------------------------------------------------------
+Tue Jan 15 01:42:37 CET 2008 - dmueller@suse.de
+
+- fix xrandr resize race (#335410)
+
+-------------------------------------------------------------------
+Thu Dec 6 01:32:32 CET 2007 - dmueller@suse.de
+
+- fix the build key for gcc 4.3
+
+-------------------------------------------------------------------
+Mon Dec 3 15:12:36 CET 2007 - dmueller@suse.de
+
+- back out khmer "fix" from 3.3.8, which apparently
+ made it worse (#345459)
+
+-------------------------------------------------------------------
+Tue Nov 20 20:25:18 CET 2007 - dmueller@suse.de
+
+- fix build with gcc 4.3 again
+
+-------------------------------------------------------------------
+Mon Oct 1 11:48:51 CEST 2007 - dmueller@suse.de
+
+- fix build with gcc 4.3
+
+-------------------------------------------------------------------
+Fri Sep 7 12:32:22 CEST 2007 - dmueller@suse.de
+
+- fix off-by-one in utf8 decoder (#304249, CVE-2007-4137)
+- fix typo in QDate::fromString()
+
+-------------------------------------------------------------------
+Wed Aug 29 17:08:22 CEST 2007 - llunak@suse.cz
+
+- fix reading MNG files, visible in Kickoff (#278548)
+- remove patching of symlinks from the immodule patch
+- improve support for compositing (qt-copy patches #0079,#0080)
+
+-------------------------------------------------------------------
+Fri Aug 24 18:39:04 CEST 2007 - dmueller@suse.de
+
+- fix format string issues (#291754, CVE-2007-3388)
+- fix xrandr 1.2 detection
+
+-------------------------------------------------------------------
+Thu Jul 5 17:25:18 CEST 2007 - coolo@suse.de
+
+- package desktop files and png files
+
+-------------------------------------------------------------------
+Thu Jun 21 12:04:33 CEST 2007 - stbinner@suse.de
+
+- run fdupes in qt3-extensions.spec
+
+-------------------------------------------------------------------
+Thu May 24 19:15:38 CEST 2007 - dmueller@suse.de
+
+- redo the last change in the correct spec file
+
+-------------------------------------------------------------------
+Wed May 23 17:08:39 CEST 2007 - dmueller@suse.de
+
+- qt3-examples -> qt3-devel-examples
+
+-------------------------------------------------------------------
+Thu May 17 06:49:50 CEST 2007 - stbinner@suse.de
+
+- removed some historic stuff from the spec file
+
+-------------------------------------------------------------------
+Tue May 8 14:32:40 CEST 2007 - dmueller@suse.de
+
+- trust libxinerama only if it provides more screens
+ than xrandr crtcs (#264199)
+
+-------------------------------------------------------------------
+Fri May 4 19:06:40 CEST 2007 - dmueller@suse.de
+
+- fix permissions of qmake specs
+
+-------------------------------------------------------------------
+Wed May 2 11:50:07 CEST 2007 - coolo@suse.de
+
+- remove Suse-translate from desktop file
+- remove obsolete suse version support
+
+-------------------------------------------------------------------
+Mon Apr 30 14:39:40 CEST 2007 - stbinner@suse.de
+
+- fix build of qt3-devel-doc with desktop-file-validate run
+
+-------------------------------------------------------------------
+Mon Apr 16 16:10:59 CEST 2007 - dmueller@suse.de
+
+- temporarily disable Xrandr 1.2 support until (#264199) is
+ resolved
+- use -Bsymbolic-functions
+
+-------------------------------------------------------------------
+Sun Apr 1 20:40:04 CEST 2007 - dmueller@suse.de
+
+- fix utf8 decoder (#259187, CVE-2007-0242)
+
+-------------------------------------------------------------------
+Thu Mar 29 18:02:30 CEST 2007 - dmueller@suse.de
+
+- Fix XRandr 1.2 support
+
+-------------------------------------------------------------------
+Fri Mar 16 14:52:22 CET 2007 - dmueller@suse.de
+
+- call XftDefaultSubstitute (#255330)
+
+-------------------------------------------------------------------
+Thu Mar 15 11:07:44 CET 2007 - dmueller@suse.de
+
+- update font fix patch (#244579)
+
+-------------------------------------------------------------------
+Mon Mar 12 16:09:29 CET 2007 - dmueller@suse.de
+
+- enable tablet support (#253392)
+- add default substitution for font queries (#244579)
+
+-------------------------------------------------------------------
+Tue Mar 6 19:37:48 CET 2007 - dmueller@suse.de
+
+- fix mysql driver crash on shutdown (#251222)
+
+-------------------------------------------------------------------
+Sun Feb 25 11:52:26 CET 2007 - dmueller@suse.de
+
+- update to 3.3.8:
+ * changelog is under /usr/share/doc/packages/qt3/changes-3.3.8
+
+-------------------------------------------------------------------
+Wed Feb 21 13:00:52 CET 2007 - dmueller@suse.de
+
+- fix build for 9.3
+
+-------------------------------------------------------------------
+Wed Feb 7 10:39:13 CET 2007 - dmueller@suse.de
+
+- also build qt3-static as full-config
+
+-------------------------------------------------------------------
+Mon Feb 5 15:18:34 CET 2007 - stbinner@suse.de
+
+- fix build of qt3-extensions on 9.3
+
+-------------------------------------------------------------------
+Fri Feb 2 15:41:36 CET 2007 - stbinner@suse.de
+
+- fix changelog chronological order
+
+-------------------------------------------------------------------
+Wed Jan 31 21:40:07 CET 2007 - dmueller@suse.de
+
+- add a sanity check to ensure that we have a full version
+- fix compile warnings in headers
+
+-------------------------------------------------------------------
+Tue Jan 9 15:36:14 CET 2007 - dmueller@suse.de
+
+- drop misfuzzed patch
+
+-------------------------------------------------------------------
+Mon Jan 8 18:35:16 CET 2007 - dmueller@suse.de
+
+- add patch to fix indic rendering issue
+
+-------------------------------------------------------------------
+Tue Oct 31 13:18:44 CET 2006 - dmueller@suse.de
+
+- add patch to fix han localisation issue (#216183)
+- update qt-debug-timer patch to output more verbose debug
+- add patch to fix xinerama issue with popupmenus (#216235)
+
+-------------------------------------------------------------------
+Fri Oct 20 15:54:30 CEST 2006 - dmueller@suse.de
+
+- update to 3.3.7:
+ * include CVE-2006-4811 patch
+
+-------------------------------------------------------------------
+Thu Oct 19 15:21:51 CEST 2006 - dmueller@suse.de
+
+- add patch for integer overflow in QPixmap/QImage
+ (#212544, CVE-2006-4811)
+
+-------------------------------------------------------------------
+Tue Oct 10 23:31:01 CEST 2006 - dmueller@suse.de
+
+- add patch for qtimer debugging
+
+-------------------------------------------------------------------
+Wed Oct 4 19:39:56 CEST 2006 - dmueller@suse.de
+
+- fix headers to compile in -pedantic mode
+
+-------------------------------------------------------------------
+Thu Sep 14 13:27:03 CEST 2006 - dmueller@suse.de
+
+- don't install static libs as executable
+
+-------------------------------------------------------------------
+Fri Sep 1 16:18:07 CEST 2006 - llunak@suse.cz
+
+- Add patches with Xinerama improvements.
+
+-------------------------------------------------------------------
+Thu Aug 17 13:42:28 CEST 2006 - stbinner@suse.de
+
+- fix qt3-devel-tools file conflict with qt-devel-doc
+
+-------------------------------------------------------------------
+Tue Aug 1 14:47:18 CEST 2006 - stbinner@suse.de
+
+- disable noisy debug message in qt-x11-immodule-unified diff
+
+-------------------------------------------------------------------
+Sun Jul 9 21:39:54 CEST 2006 - stbinner@suse.de
+
+- fix {designer3,linguist}.desktop starting Qt4 versions (#190135)
+
+-------------------------------------------------------------------
+Tue Jul 04 15:12:18 CEST 2006 - mfabian@suse.de
+
+- update qt-x11-immodule-unified diff to 20060318 version.
+ This update already includes the following patches:
+ + fix-x11-immodule.diff
+ + disable-inputmethod-for-passords.patch
+ + qt-x11-immodule-capitalization-fix.diff
+ + fix-im-crash-on-exit.diff
+ + fix-immodule-buffer-overflow.diff
+ + qt-x11-immodule-qtextedit-fix.diff
+ + qt-x11-immodule-focus-handling.diff
+ + qt-x11-immodule-fix-inputcontext-crash.diff
+ which are thus removed.
+
+-------------------------------------------------------------------
+Wed Jun 28 10:07:30 CEST 2006 - dmueller@suse.de
+
+- fix $QT_SYSTEM_DIR (#188217)
+
+-------------------------------------------------------------------
+Fri Jun 9 15:25:49 CEST 2006 - llunak@suse.de
+
+- add $QT_SYSTEM_DIR (#183059)
+
+-------------------------------------------------------------------
+Wed May 31 15:51:01 CEST 2006 - adrian@suse.de
+
+- remove BuildRequires libdrm-devel
+
+-------------------------------------------------------------------
+Wed May 31 13:24:56 CEST 2006 - dmueller@suse.de
+
+- fix xpm image loading problem
+- add performance regression fix
+- add asian font loading fix
+
+-------------------------------------------------------------------
+Mon May 29 08:41:44 CEST 2006 - adrian@suse.de
+
+- revert requires macro, this breaks the build system mapping
+- require right packages in -devel for < 10.1
+
+-------------------------------------------------------------------
+Fri May 26 19:40:44 CEST 2006 - dmueller@suse.de
+
+- fix build
+
+-------------------------------------------------------------------
+Fri May 26 10:42:43 CEST 2006 - dmueller@suse.de
+
+- 3.3.6 update
+ * numerous bugfixes and translations
+
+-------------------------------------------------------------------
+Wed May 10 17:12:34 CEST 2006 - dmueller@suse.de
+
+- drop substitutions from global rc file (#171513)
+
+-------------------------------------------------------------------
+Fri Apr 14 01:46:36 CEST 2006 - dmueller@suse.de
+
+- drop linguist3.png/desktop as its unused and install
+ linguist.desktop instead (fixes build failure).
+
+-------------------------------------------------------------------
+Mon Apr 10 10:40:11 CEST 2006 - dmueller@suse.de
+
+- strip installed static libraries
+- fix file conflict with Qt4 packages
+
+-------------------------------------------------------------------
+Mon Apr 3 16:34:14 CEST 2006 - dmueller@suse.de
+
+- restore libraryPaths which broke instsys (#162930)
+
+-------------------------------------------------------------------
+Thu Mar 30 12:49:05 CEST 2006 - coolo@suse.de
+
+- update qtrc to the real values avoiding dark gray platinum even
+ if not overwritten with desktop settings
+
+-------------------------------------------------------------------
+Tue Mar 21 14:59:49 CET 2006 - dmueller@suse.de
+
+- update patch for QLabel layout issues to the one from Qt 3.3.7
+
+-------------------------------------------------------------------
+Fri Mar 17 18:39:04 CET 2006 - dmueller@suse.de
+
+- add patch for QLabel layout management issues (#153029)
+
+-------------------------------------------------------------------
+Fri Mar 17 12:23:30 CET 2006 - dmueller@suse.de
+
+- fix crash on painting > 32000 chars at once
+- fix error in wrapping japanese text
+- fix QFile::flush() not setting error status
+- fix window gravity being wrong for RTL
+
+-------------------------------------------------------------------
+Tue Mar 14 00:22:32 CET 2006 - dmueller@suse.de
+
+- fix filelist
+
+-------------------------------------------------------------------
+Mon Mar 13 17:02:09 CET 2006 - dmueller@suse.de
+
+- build qt3-devel-doc as noarch package
+
+-------------------------------------------------------------------
+Tue Mar 7 10:49:56 CET 2006 - dmueller@suse.de
+
+- moving libqassistantclient to -devel (#155519) and assistant
+ to qt3.
+- translation update
+- fix assistant invocation to prefer Qt3's assistant over Qt 4.x
+
+-------------------------------------------------------------------
+Wed Feb 22 14:00:00 CET 2006 - dmueller@suse.de
+
+- fix crash when not able to load imswitch (#117443)
+
+-------------------------------------------------------------------
+Sat Feb 18 01:15:54 CET 2006 - dmueller@suse.de
+
+- add more immodule fixes
+- fix build of qt3-extensions
+- remove sections for SL < 9.2
+
+-------------------------------------------------------------------
+Fri Feb 17 16:47:41 CET 2006 - dmueller@suse.de
+
+- fix crash on shutdown (#151831)
+
+-------------------------------------------------------------------
+Mon Feb 13 15:52:19 CET 2006 - coolo@suse.de
+
+- update translations
+
+-------------------------------------------------------------------
+Mon Feb 6 05:22:44 CET 2006 - zsu@suse.de
+
+- Add patch qt3-khmer-script.patch to fix a rendering issue of Khmer
+ script (by Jens Herden<jens@khmeros.info>, #147190).
+
+-------------------------------------------------------------------
+Sat Jan 28 10:48:06 CET 2006 - coolo@suse.de
+
+- really install the icon
+
+-------------------------------------------------------------------
+Fri Jan 27 20:02:59 CET 2006 - llunak@suse.cz
+
+- fix rubberband.diff to emit selectionChanged() properly (#132920)
+
+-------------------------------------------------------------------
+Fri Jan 27 12:24:41 CET 2006 - coolo@suse.de
+
+- avoid file conflict with qt package
+
+-------------------------------------------------------------------
+Fri Jan 27 08:08:10 CET 2006 - coolo@suse.de
+
+- fix qt3.sh
+
+-------------------------------------------------------------------
+Fri Jan 27 02:21:53 CET 2006 - mls@suse.de
+
+- converted neededforbuild to BuildRequires
+
+-------------------------------------------------------------------
+Wed Jan 25 18:06:26 CET 2006 - dmueller@suse.de
+
+- set $QTDIR in /etc/profile.d/qt3.(c)sh
+
+-------------------------------------------------------------------
+Sat Dec 3 14:30:43 CET 2005 - coolo@suse.de
+
+- build with -Bdirect if available
+- updating font patch
+
+-------------------------------------------------------------------
+Fri Dec 2 00:11:21 CET 2005 - dmueller@suse.de
+
+- build with -fno-strict-aliasing
+
+-------------------------------------------------------------------
+Wed Nov 23 10:18:29 CET 2005 - dmueller@suse.de
+
+- unify spec files via a common patch/sources section
+ and adjust spec files accordingly
+- add /etc/profile.d hook to put qmake in the path (#134377)
+- drop fast-malloc patch for all packages (#134563)
+
+-------------------------------------------------------------------
+Fri Nov 18 15:20:21 CET 2005 - stbinner@suse.de
+
+- only disable FcFontSort patch for released distributions
+
+-------------------------------------------------------------------
+Fri Nov 18 12:08:43 CET 2005 - stbinner@suse.de
+
+- disable FcFontSort patch because of immaturity
+
+-------------------------------------------------------------------
+Fri Nov 11 15:48:07 CET 2005 - dmueller@suse.de
+
+- avoid crashes after QListView::clear()
+
+-------------------------------------------------------------------
+Wed Nov 2 15:52:04 CET 2005 - coolo@suse.de
+
+- avoid FcFontSort as it's very expensive
+
+-------------------------------------------------------------------
+Thu Oct 27 14:38:16 CEST 2005 - stbinner@suse.de
+
+- extend fix-key-release-event-with-imm.diff to fix another Immodule
+ related key release event bug (#130727)
+
+-------------------------------------------------------------------
+Wed Oct 12 19:25:52 CEST 2005 - dmueller@suse.de
+
+- update -Werror patch to catch one more case
+
+-------------------------------------------------------------------
+Mon Oct 10 16:58:30 CEST 2005 - dmueller@suse.de
+
+- add patch to fix broken key compression (#121049)
+
+-------------------------------------------------------------------
+Sat Oct 8 00:04:41 CEST 2005 - dmueller@suse.de
+
+- patch cleanup
+
+-------------------------------------------------------------------
+Wed Oct 5 13:59:53 CEST 2005 - dmueller@suse.de
+
+- add 0065-fix_werror_with_gcc4.patch (#119209)
+
+-------------------------------------------------------------------
+Wed Sep 28 16:32:43 CEST 2005 - stbinner@suse.de
+
+- removed historic "Autoreqprov:off" leftover
+
+-------------------------------------------------------------------
+Wed Sep 28 15:27:34 CEST 2005 - stbinner@suse.de
+
+- add a patch to fix capitalization of Immodule strings
+
+-------------------------------------------------------------------
+Mon Sep 26 10:57:35 CEST 2005 - coolo@suse.de
+
+- fix build on x86_64
+
+-------------------------------------------------------------------
+Mon Sep 19 12:40:22 CEST 2005 - mfabian@suse.de
+
+- Bugzilla #117115: enable input methods in qlineedit widgets
+ only when "mode == Normal" (i.e. not when "mode == NoEcho" or
+ "mode == Password"). Using input methods while inputting
+ passwords is useless and confusing.
+
+-------------------------------------------------------------------
+Fri Sep 16 23:06:14 CEST 2005 - schwab@suse.de
+
+- Never strip gratuitously.
+
+-------------------------------------------------------------------
+Thu Sep 15 10:57:05 CEST 2005 - stbinner@suse.de
+
+- update to version 3.3.5
+
+-------------------------------------------------------------------
+Mon Sep 5 13:04:30 CEST 2005 - coolo@suse.de
+
+- layout popup menus correctly (#113048)
+
+-------------------------------------------------------------------
+Fri Aug 19 17:04:02 CEST 2005 - llunak@suse.cz
+
+- Place dialog properly for systray icons on xinerama (#104794).
+
+-------------------------------------------------------------------
+Fri Jul 29 18:24:24 CEST 2005 - dmueller@suse.de
+
+- add Q_EXPORT visibility support
+- Fix gcc 4.0.x compiler detection for qt plugin buildkey
+
+-------------------------------------------------------------------
+Thu Jun 23 14:37:00 CEST 2005 - mrueckert@suse.de
+
+- Applied patch from Lubos Lunak to fix drag'n'drop when the
+ visible window is not at the top of the window stack.
+
+-------------------------------------------------------------------
+Fri Jun 10 17:28:47 CEST 2005 - adrian@suse.de
+
+- Apply workaround from Simon Hausmann to avoid miscompilation with gcc4
+
+-------------------------------------------------------------------
+Tue Jun 7 16:15:54 CEST 2005 - adrian@suse.de
+
+- do not trigger -debug configure flag on -g, but use it for beta
+ distribution
+
+-------------------------------------------------------------------
+Tue May 31 10:49:30 CEST 2005 - adrian@suse.de
+
+- require freeglut-devel instead of XFree86-Mesa-devel
+
+-------------------------------------------------------------------
+Fri Apr 15 19:52:35 CEST 2005 - mfabian@suse.de
+
+- Bugzilla #74133: check for some more glyphs for Katakana and
+ Hiragana, especially also check for all the glyphs which are
+ checked for Han_Japanese. This usually guarantees that the same
+ font is used for Katakana and Hiragana as for Japanese Kanji,
+ which is what we want.
+
+-------------------------------------------------------------------
+Fri Apr 8 15:28:36 CEST 2005 - uli@suse.de
+
+- fixed to build with GCC4 on ARM
+
+-------------------------------------------------------------------
+Mon Apr 4 15:02:41 CEST 2005 - adrian@suse.de
+
+- apply patches from qt-copy, fixes for mouse handling in popups
+
+-------------------------------------------------------------------
+Thu Mar 24 09:57:01 CET 2005 - adrian@suse.de
+
+- update font mappings in qtrc for asian languages (#74363)
+
+-------------------------------------------------------------------
+Wed Mar 16 17:54:12 CET 2005 - adrian@suse.de
+
+- fix possible crash in qtranslator (#71968, by Lubos)
+
+-------------------------------------------------------------------
+Fri Mar 4 15:50:50 CET 2005 - adrian@suse.de
+
+- fix loading of style plugins for lib/lib64 mixed systesm (by Lubos)
+
+-------------------------------------------------------------------
+Fri Feb 25 13:26:56 CET 2005 - adrian@suse.de
+
+- fix all Exec= lines for menu entries
+
+-------------------------------------------------------------------
+Fri Feb 11 18:29:14 CET 2005 - adrian@suse.de
+
+- apply patch for rubberband selections from Andre Moreira Magalhaes
+
+-------------------------------------------------------------------
+Wed Feb 9 17:55:47 CET 2005 - adrian@suse.de
+
+- add qclipboard hack to avoid freezes from qt-copy again
+
+-------------------------------------------------------------------
+Wed Feb 2 16:35:44 CET 2005 - adrian@suse.de
+
+- fix plugin loading for the KDE integration
+
+-------------------------------------------------------------------
+Wed Jan 26 17:49:46 CET 2005 - adrian@suse.de
+
+- update to version 3.3.4
+- reenable limit size patch to keep BC
+- remove qclipboard fix, it got merged
+- remove bidi fixes, they got merged
+- remove gif handler fixes, they got merged
+- apply KDE dialog integration code from Lubos
+- revert some changes in imm code to solve a problem with missing
+ key release events
+
+-------------------------------------------------------------------
+Fri Jan 14 14:12:06 CET 2005 - adrian@suse.de
+
+- update imm patch to version from 20041203
+- disable image size patch for now, it broke printing of large images
+
+-------------------------------------------------------------------
+Wed Jan 5 13:37:00 CET 2005 - adrian@suse.de
+
+- reenable the SHM patch again
+- add qtimm patch to solve an issue with Opera
+- remove binary links from /usr/bin/, they do conflict with Qt 4
+
+-------------------------------------------------------------------
+Mon Nov 22 12:06:33 CET 2004 - ro@suse.de
+
+- "sed -i" does not work on old distributions
+
+-------------------------------------------------------------------
+Tue Nov 16 11:04:55 CET 2004 - adrian@suse.de
+
+- package icon files for desktop entries
+
+-------------------------------------------------------------------
+Mon Nov 8 16:07:11 CET 2004 - coolo@suse.de
+
+- improve Waldo's patch to limit image dimensions
+
+-------------------------------------------------------------------
+Fri Oct 29 23:29:44 CEST 2004 - schwab@suse.de
+
+- Revert last change to png writing.
+
+-------------------------------------------------------------------
+Tue Oct 26 10:51:34 CEST 2004 - adrian@suse.de
+
+- fix from Lubos for full screen mode switching on 64bit (#46972)
+
+-------------------------------------------------------------------
+Mon Oct 25 14:26:40 CEST 2004 - schwab@suse.de
+
+- Extend last change to png writing.
+
+-------------------------------------------------------------------
+Sat Oct 23 23:23:21 CEST 2004 - schwab@suse.de
+
+- Fix endian bug in png reading.
+
+-------------------------------------------------------------------
+Thu Oct 14 18:09:56 CEST 2004 - adrian@suse.de
+
+- fix assitant zoom functionality, patch by Waldo (#45688)
+
+-------------------------------------------------------------------
+Mon Oct 11 18:11:32 CEST 2004 - adrian@suse.de
+
+- fix requires of qt3-devel for new x.org packages
+
+-------------------------------------------------------------------
+Wed Sep 29 10:27:12 CEST 2004 - adrian@suse.de
+
+- prefer MiscGlyphSymbol fonts with tics over others (#46280)
+- enable BiDi support by default
+
+-------------------------------------------------------------------
+Tue Sep 28 11:45:55 CEST 2004 - mfabian@suse.de
+
+- Bugzilla #46216: make "On The Spot" the default input style
+ for Qt.
+
+-------------------------------------------------------------------
+Sat Sep 25 13:46:59 CEST 2004 - adrian@suse.de
+
+- prefer the .lib64.so extension on lib64 systems, but do not
+ require it anymore
+
+-------------------------------------------------------------------
+Fri Sep 24 22:10:29 CEST 2004 - adrian@suse.de
+
+- fix load of plugins on lib64 systems. The plugins do need a
+ .lib64.so extension now
+
+-------------------------------------------------------------------
+Wed Sep 15 17:52:55 CEST 2004 - adrian@suse.de
+
+- add two more glyphs to simplified chinese detection. (#44059)
+
+-------------------------------------------------------------------
+Tue Sep 14 13:57:01 CEST 2004 - adrian@suse.de
+
+- handle also hongkong chinese local in a correct way (#44059)
+- prefer chinese fonts via optional glyphs, but use also
+ the free ones, if no commercial font is avaible (#44059)
+
+-------------------------------------------------------------------
+Mon Sep 13 20:14:31 CEST 2004 - adrian@suse.de
+
+- hopefully solve the chinese font detection problems (#44059)
+
+-------------------------------------------------------------------
+Mon Sep 13 11:17:50 CEST 2004 - adrian@suse.de
+
+- fix build for old distributions
+- prepare qt for konsole transparency mode (via composite extension)
+
+-------------------------------------------------------------------
+Fri Sep 10 17:43:56 CEST 2004 - mfabian@suse.de
+
+- update to qt-x11-immodule-unified-qt3.3.3-20040910.diff which
+ merges the previous three patches (With help from Adrian to
+ make it build).
+
+-------------------------------------------------------------------
+Fri Sep 10 16:34:52 CEST 2004 - mfabian@suse.de
+
+- add qt-x11-immodule-unified-qt3.3.3-r123-event-inversion-20040909.diff
+ to fix the endless loop problem when using M17N-t-latin1-post
+ or M17N-vi-viqr. See also
+ http://freedesktop.org/pipermail/immodule-qt/2004-September/000447.html
+ and followups. Patch thanks to Yamaken.
+
+-------------------------------------------------------------------
+Wed Sep 8 10:13:26 CEST 2004 - adrian@suse.de
+
+- add 3.3.3 regression fixes in pre-3.3.4.diff
+- add bidi fixes from qt-copy
+- add qpixmap mitshm support from Lubos
+- update immodule patch to stable release 20040819
+- adding event inversion fix for immodule from Zhe Su
+
+-------------------------------------------------------------------
+Fri Sep 3 15:06:55 CEST 2004 - adrian@suse.de
+
+- udpate qt immodule patch to snapshot from 20040814
+
+-------------------------------------------------------------------
+Thu Aug 26 17:09:14 CEST 2004 - adrian@suse.de
+
+- disable explicit debug flags again
+
+-------------------------------------------------------------------
+Mon Aug 23 13:23:02 CEST 2004 - adrian@suse.de
+
+- apply workaround for broken focus handling cause by the xim
+ patch due to a bug in X for released distributions (by Lubos)
+
+-------------------------------------------------------------------
+Wed Aug 18 12:06:15 CEST 2004 - adrian@suse.de
+
+- enable full debug compile, if -g is in RPM_OPT_FLAGS
+
+-------------------------------------------------------------------
+Tue Aug 17 14:46:19 CEST 2004 - coolo@suse.de
+
+- install qt3 after grep
+
+-------------------------------------------------------------------
+Tue Aug 17 07:27:13 CEST 2004 - adrian@suse.de
+
+- apply patch from Waldo to be able to limit the size of loaded
+ images. Important for khtml (#43841)
+- apply fix to handle the side pixmap of the kmenu correctly (0047)
+- apply KToolBarButton fix (0051)
+
+-------------------------------------------------------------------
+Fri Aug 13 06:19:32 CEST 2004 - adrian@suse.de
+
+- fix gif handling (#43356)
+
+-------------------------------------------------------------------
+Thu Aug 12 08:23:16 CEST 2004 - adrian@suse.de
+
+- update to version 3.3.3
+- remove obsolete patches
+
+-------------------------------------------------------------------
+Tue Aug 3 16:16:53 CEST 2004 - adrian@suse.de
+
+- add patch to support scim
+
+-------------------------------------------------------------------
+Wed Jun 9 15:21:27 CEST 2004 - adrian@suse.de
+
+- update asian font mappings for commercial japanese fonts
+ (by mfabian)
+
+-------------------------------------------------------------------
+Wed Jun 2 16:17:53 CEST 2004 - adrian@suse.de
+
+- fix libGL loading in the right way, no .so link is needed anymore
+ again
+
+-------------------------------------------------------------------
+Wed May 26 16:47:34 CEST 2004 - adrian@suse.de
+
+- load libGL via .so link again (due to the different possible
+ setups #41118)
+- libXmu gets still loaded via hardcoded path and version
+
+-------------------------------------------------------------------
+Tue Apr 27 15:55:48 CEST 2004 - adrian@suse.de
+
+- update to version 3.3.2
+ * remove obsolete patches
+- do apply %patch16
+
+-------------------------------------------------------------------
+Fri Apr 23 09:26:44 CEST 2004 - adrian@suse.de
+
+- disable atk support for released distributions
+
+-------------------------------------------------------------------
+Thu Apr 22 11:40:17 CEST 2004 - coolo@suse.de
+
+- another try to fix wrong font caching also for japanese/chinese
+
+-------------------------------------------------------------------
+Tue Apr 20 11:34:13 CEST 2004 - coolo@suse.de
+
+- apply fix for wrong font caching (#39175)
+
+-------------------------------------------------------------------
+Fri Apr 16 11:42:30 CEST 2004 - adrian@suse.de
+
+- apply fix for opentype aliasing issues
+
+-------------------------------------------------------------------
+Tue Apr 13 10:50:22 CEST 2004 - adrian@suse.de
+
+- fix OpenGL support, if no -devel package is installed (#38857)
+- fix xcursor support
+- add current snapshot of Qt-ATK bridge patch
+ (disabled as long USE_QACCESSIBLE enviroment variable isn't set)
+
+-------------------------------------------------------------------
+Sat Apr 3 10:07:55 CEST 2004 - adrian@suse.de
+
+- apply 0043-fix_expired_cookie_crash.diff from qt-copy(by Dirk)
+ * qt based applications can crash in ssh sessions with new
+ openssh (#38185)
+
+-------------------------------------------------------------------
+Wed Mar 31 17:47:33 CEST 2004 - mfabian@suse.de
+
+- Bugzilla #37720:
+ add font substitutions for "SUSE*" fonts to default qtrc.
+
+-------------------------------------------------------------------
+Thu Mar 25 10:12:37 CET 2004 - coolo@suse.de
+
+- fix for richtext tags (in knotes)
+- fix for fonts with multiple scripts (#36583)
+- fix for custom resolutions
+
+-------------------------------------------------------------------
+Tue Mar 16 16:29:42 CET 2004 - adrian@suse.de
+
+- fix for command line handling (XIM in QApplication)(#35881)
+- fix double packaging of qassistant translations
+
+-------------------------------------------------------------------
+Mon Mar 15 17:55:57 CET 2004 - adrian@suse.de
+
+- define a default Font again. (Sans Serif with 10points)
+ (#36014)
+
+-------------------------------------------------------------------
+Wed Mar 10 08:44:03 CET 2004 - adrian@suse.de
+
+- fix for xcursor cache hangling (by Lubos)
+- move assistant to -devel-doc package
+
+-------------------------------------------------------------------
+Thu Mar 4 22:10:52 CET 2004 - adrian@suse.de
+
+- apply fix for not found monospaced fonts without Euro glyph
+ (Patch by Lars Knoll)
+
+-------------------------------------------------------------------
+Thu Mar 4 13:53:53 CET 2004 - adrian@suse.de
+
+- apply different bugfix and speed enhancement patches from qt-copy
+ as recommended by Lubos
+ * 0001: DnD optimisation
+ * 0002: Active Window Fix
+ * 0007: MITSHM extension support for QPixmap<>Qimage conversation
+ * 0037: dnd timestamp fix
+ * 0038: dragobject prefer fix
+
+-------------------------------------------------------------------
+Mon Mar 1 11:39:25 CET 2004 - adrian@suse.de
+
+- update to final 3.3.1 version
+- disable fast-malloc for > 9.0, nptl does work good enough
+- add qclipboard-recursion-fix from Lubos
+- further 64bit aliasing fixes
+
+-------------------------------------------------------------------
+Mon Feb 16 14:43:49 CET 2004 - adrian@suse.de
+
+- update to current snapshot (3.3.1-snapshot-20040216)
+- build opentype with -fno-strict-aliasing
+
+-------------------------------------------------------------------
+Mon Feb 9 17:02:41 CET 2004 - adrian@suse.de
+
+- fix non-latin1 QString handling
+ (patch from Roman Stepanov)
+
+-------------------------------------------------------------------
+Wed Feb 4 20:24:37 CET 2004 - adrian@suse.de
+
+- update to version 3.3.0 final
+- disable 3rdparty source and use system libraries
+
+-------------------------------------------------------------------
+Thu Jan 29 14:05:26 CET 2004 - adrian@suse.de
+
+- update to snapshot 20040129
+- use original qstring again, kprinter got fixed
+
+-------------------------------------------------------------------
+Sun Jan 25 17:53:03 CET 2004 - adrian@suse.de
+
+- update to snapshot 20040125
+- revert qstring changes
+
+-------------------------------------------------------------------
+Tue Jan 13 14:52:07 CET 2004 - adrian@suse.de
+
+- update to snapshot 20040113
+
+-------------------------------------------------------------------
+Mon Dec 29 11:48:49 CET 2003 - adrian@suse.de
+
+- update to snapshot from 20031229 to get KDE compiling again
+- remove upstream included translation files
+- cleanup stuff not anymore needed
+- do not build sqlite plugin with (broken) sqlite sources from qt
+ tar ball anymore
+
+-------------------------------------------------------------------
+Thu Dec 11 13:10:37 CET 2003 - adrian@suse.de
+
+- update to version 3.3 beta 1
+ * solves the remaining issues with dlopen GL
+
+-------------------------------------------------------------------
+Tue Dec 9 17:20:56 CET 2003 - adrian@suse.de
+
+- add KDE plugin path for qt 3.3
+
+-------------------------------------------------------------------
+Thu Dec 4 11:25:27 CET 2003 - adrian@suse.de
+
+- update to snapshot 20031204
+- do not link against GL libs anymore, but still support GL via dlopen
+ apps and libs beside libbqt* are still linked against GL for now
+- build fix for qt3-extensions
+
+-------------------------------------------------------------------
+Tue Dec 2 17:54:34 CET 2003 - adrian@suse.de
+
+- update to current 3.3 snapshot ( 20031202 - pre beta 1)
+ * obsoletes several patches
+ * IPv6 support
+- temporary disabled PostgreSQL support
+- add SQLite support
+
+-------------------------------------------------------------------
+Fri Nov 21 11:05:33 CET 2003 - adrian@suse.de
+
+- drop not applyed font_fixes patch and add the old Xft2 fixes
+ again, to support displays without Render extension.
+
+-------------------------------------------------------------------
+Fri Nov 14 14:30:11 CET 2003 - adrian@suse.de
+
+- update to version 3.2.3 and usual patch cleanup
+
+-------------------------------------------------------------------
+Thu Oct 23 09:52:28 CEST 2003 - adrian@suse.de
+
+- build without -mminimal-toc on ppc64
+- apply crash fix from TT for some fonts in XLFD mode
+
+-------------------------------------------------------------------
+Thu Oct 16 16:00:46 CEST 2003 - adrian@suse.de
+
+- update to version 3.2.2
+ * font fixes patch is not applied intentionaly, for testing
+ plain qt behaviour for now.
+
+-------------------------------------------------------------------
+Thu Oct 2 12:06:08 CEST 2003 - adrian@suse.de
+
+- require freeglut-devel, instead of mesaglut-devel for > 9.0
+
+-------------------------------------------------------------------
+Tue Sep 30 09:25:31 CEST 2003 - coolo@suse.de
+
+- using the right tool to compile translation files
+
+-------------------------------------------------------------------
+Thu Sep 25 13:05:03 CEST 2003 - adrian@suse.de
+
+- update fontconfig patch again, fixes multiple listing of fonts
+- do not complain anymore about not matching plugin
+
+-------------------------------------------------------------------
+Sun Sep 21 15:02:56 CEST 2003 - adrian@suse.de
+
+- prefer Nimbus fonts, instead of using asian fonts, if possible
+ (the asian fonts have some broken latin chars)
+
+-------------------------------------------------------------------
+Sun Sep 21 12:35:19 CEST 2003 - adrian@suse.de
+
+- install html docu to the same place as on 8.2, to solve
+ update problems (#31507). (install dir and symlink was
+ swapped for unknown reason)
+
+-------------------------------------------------------------------
+Fri Sep 19 15:48:11 CEST 2003 - adrian@suse.de
+
+- memory leak fix from Lars in QTextEngine
+
+-------------------------------------------------------------------
+Thu Sep 18 16:35:05 CEST 2003 - adrian@suse.de
+
+- updated patches from Lars
+ * fixing Unicode families and foundaries issues
+ * printing issues
+- clean up unused patches
+
+-------------------------------------------------------------------
+Wed Sep 17 18:31:56 CEST 2003 - adrian@suse.de
+
+- a bit more silence .. QPixmap before QApplication warning is away
+- new asian font mappings from mfabian
+
+-------------------------------------------------------------------
+Mon Sep 15 18:02:31 CEST 2003 - adrian@suse.de
+
+- new font fixes from Lars, the default size problem should be away
+- fix build for non-Xft2 distibutions
+
+-------------------------------------------------------------------
+Thu Sep 11 22:18:01 CEST 2003 - adrian@suse.de
+
+- silence on lib64 systems with 32bit plugins installed (#30559)
+- ensure to have a [3.2] section in old qtrc files
+
+-------------------------------------------------------------------
+Mon Sep 8 16:26:49 CEST 2003 - coolo@suse.de
+
+- apply fix from TT to fix konsole + setRawName
+
+-------------------------------------------------------------------
+Thu Sep 4 12:53:19 CEST 2003 - adrian@suse.de
+
+- add always lib and lib64 kde plugin path to qtrc
+
+-------------------------------------------------------------------
+Wed Sep 3 16:55:00 CEST 2003 - adrian@suse.de
+
+- apply fix from TT: "don't generate bogus mouse move events."
+- qt3-devel requires XFree86-Mesa-devel
+
+-------------------------------------------------------------------
+Tue Sep 2 17:20:05 CEST 2003 - adrian@suse.de
+
+- add slovak translation from Stanislav Visnovsky
+- add czech translation from Klara Cihlarova
+
+-------------------------------------------------------------------
+Tue Sep 2 16:20:15 CEST 2003 - adrian@suse.de
+
+- add asian mappings from 8.2 to qtrc again
+
+-------------------------------------------------------------------
+Mon Sep 1 18:13:33 CEST 2003 - meissner@suse.de
+
+- Don't do readlink checks for set*id programs (will break
+ in TLS startup sequence of glibc), just fall back to old
+ malloc. #29530
+
+-------------------------------------------------------------------
+Mon Sep 1 12:02:00 CEST 2003 - adrian@suse.de
+
+- apply qlineedit fix from TT
+
+-------------------------------------------------------------------
+Mon Sep 1 11:30:31 CEST 2003 - adrian@suse.de
+
+- qtconfig menu entry becomes unimportant
+
+-------------------------------------------------------------------
+Sun Aug 31 22:33:44 CEST 2003 - adrian@suse.de
+
+- generate .la file again
+
+-------------------------------------------------------------------
+Fri Aug 29 15:16:43 CEST 2003 - adrian@suse.de
+
+- use newer font_fixes patch from Lars
+- enforce usage of Xft2 even on non-Xrender displays
+- revert qclipboard changes to 3.1.2 code
+
+-------------------------------------------------------------------
+Wed Aug 27 13:38:51 CEST 2003 - adrian@suse.de
+
+- use official 3.2.1 tar ball instead of 3.2.0+patch
+
+-------------------------------------------------------------------
+Tue Aug 26 08:20:07 CEST 2003 - adrian@suse.de
+
+- new _big_ fix from Lars for fixing the remaining font issues
+
+-------------------------------------------------------------------
+Sun Aug 24 16:55:24 CEST 2003 - adrian@suse.de
+
+- apply fix from Lars for the foundary font problem, when
+ using pixmap fonts via Xft2. This makes the freetype2
+ foundary-family patch obsolete from qt view.
+
+-------------------------------------------------------------------
+Sat Aug 23 13:44:22 CEST 2003 - adrian@suse.de
+
+- apply 3.2.1 patch, until the official tar ball arrives
+
+-------------------------------------------------------------------
+Sat Aug 16 13:58:14 CEST 2003 - adrian@suse.de
+
+- justify Category of qtconfig
+
+-------------------------------------------------------------------
+Fri Aug 1 18:00:24 CEST 2003 - adrian@suse.de
+
+- add desktop file for qtconfig
+
+-------------------------------------------------------------------
+Wed Jul 23 16:20:03 CEST 2003 - adrian@suse.de
+
+- update to version 3.2.0 final
+
+-------------------------------------------------------------------
+Thu Jul 17 12:55:23 CEST 2003 - adrian@suse.de
+
+- fix .la files after build
+
+-------------------------------------------------------------------
+Tue Jul 15 08:49:39 CEST 2003 - adrian@suse.de
+
+- update to 3.2.0 beta 2
+- remove obsolete patches
+
+-------------------------------------------------------------------
+Sun Jun 15 12:19:14 CEST 2003 - coolo@suse.de
+
+- never strip explicitly
+- always build with -release to avoid debug output even with -g
+
+-------------------------------------------------------------------
+Thu Jun 12 09:07:58 CEST 2003 - coolo@suse.de
+
+- move the html docu into docdir and put the link in lib
+- package directories
+- fix directory permissions
+
+-------------------------------------------------------------------
+Fri May 30 15:04:29 CEST 2003 - adrian@suse.de
+
+- fix file conflicts
+
+-------------------------------------------------------------------
+Mon May 19 11:28:36 CEST 2003 - adrian@suse.de
+
+- revert source incompatibility to 3.1.x in qhbox constructor
+
+-------------------------------------------------------------------
+Sun May 18 14:03:31 CEST 2003 - adrian@suse.de
+
+- update to version 3.2 beta 1
+- big patch clean up
+- use largefile support api for > 8.2
+
+-------------------------------------------------------------------
+Thu Apr 10 17:01:32 CEST 2003 - coolo@suse.de
+
+- fixing long font names as returned by font-config
+
+-------------------------------------------------------------------
+Wed Mar 26 13:19:48 CET 2003 - adrian@suse.de
+
+- workaround rpm bug on 7.3-ppc
+
+-------------------------------------------------------------------
+Mon Mar 24 10:04:18 CET 2003 - adrian@suse.de
+
+- fix build on SuSE < 8.1
+
+-------------------------------------------------------------------
+Fri Mar 21 14:59:11 CET 2003 - adrian@suse.de
+
+- update to version 3.1.2 and remove obsolete patches
+
+-------------------------------------------------------------------
+Tue Mar 11 20:33:03 CET 2003 - coolo@suse.de
+
+- fixing the fix
+
+-------------------------------------------------------------------
+Tue Mar 11 13:35:31 CET 2003 - coolo@suse.de
+
+- applied patch by TT to fix kmail folder selection
+ (#24519 - also known as kde bug #48888)
+
+-------------------------------------------------------------------
+Fri Mar 7 21:16:17 CET 2003 - adrian@suse.de
+
+- do not use XListFonts, if X server supports Xft on >8.1 (Xft2)
+
+-------------------------------------------------------------------
+Fri Feb 28 00:25:14 CET 2003 - adrian@suse.de
+
+- fast malloc is back
+ (still 20% with glibc 2.3 without spinlock'ed-malloc)
+- extend blacklist
+- use fast malloc also on hammer
+
+-------------------------------------------------------------------
+Wed Feb 26 11:43:08 CET 2003 - adrian@suse.de
+
+- add [3.1] plugin path
+- add fix for mouse cursor bug over ssh
+
+-------------------------------------------------------------------
+Mon Feb 24 11:56:07 CET 2003 - adrian@suse.de
+
+- use correct kde plugin path on lib64 systems
+
+-------------------------------------------------------------------
+Mon Feb 3 11:39:24 CET 2003 - adrian@suse.de
+
+- fix missing symbols in libqt*
+
+-------------------------------------------------------------------
+Thu Jan 30 16:19:31 CET 2003 - adrian@suse.de
+
+- fix %pre script
+
+-------------------------------------------------------------------
+Sun Jan 26 14:05:56 CET 2003 - adrian@suse.de
+
+- prefix=/usr/lib/qt3
+ (third party apps installing translations into $QTDIR now)
+- modify qdesktopwidget resize patch to be BC with Qt 3.2
+- comment out non-official api extensions
+- remove private headers tar ball again
+ (qsa beta2 contains them)
+- fix qtrc enviroment patch
+- hardcode qt settings dir to /etc/X11 (no need for $QTDIR/etc/settings anymore)
+- enable all designer plugins
+
+-------------------------------------------------------------------
+Thu Jan 23 18:36:05 CET 2003 - adrian@suse.de
+
+- add xrandr extension from Qt 3.2
+- add resize event to qdesktopwidget (patch from Lubos)
+- compile codecs as plugins
+
+-------------------------------------------------------------------
+Tue Jan 21 12:52:33 CET 2003 - adrian@suse.de
+
+- use fast malloc only on %ix86
+
+-------------------------------------------------------------------
+Thu Jan 16 15:58:23 CET 2003 - adrian@suse.de
+
+- include qt default translations
+
+-------------------------------------------------------------------
+Fri Jan 10 15:12:46 CET 2003 - adrian@suse.de
+
+- hppa is parisc
+
+-------------------------------------------------------------------
+Thu Jan 9 14:44:06 CET 2003 - adrian@suse.de
+
+- fix some more qmake.conf entries
+ (esp. pathes to lib64 directories and flags based on $RPM_OPT_FLAGS)
+
+-------------------------------------------------------------------
+Tue Jan 7 16:42:59 CET 2003 - adrian@suse.de
+
+- use -ffunction-sections on hppa
+
+-------------------------------------------------------------------
+Thu Jan 2 13:07:01 CET 2003 - adrian@suse.de
+
+- fix build ( patch -p1 -> -p0 )
+
+-------------------------------------------------------------------
+Fri Dec 27 17:50:17 CET 2002 - adrian@suse.de
+
+- several small changes/fixes/workarounds to be able to compile qsa
+ (they will be changed in 3.1.2)
+
+-------------------------------------------------------------------
+Tue Dec 17 12:40:16 CET 2002 - adrian@suse.de
+
+- update to version 3.1.1 and cleanup patches
+- apply Xft speed-up patch from dfaure
+
+-------------------------------------------------------------------
+Wed Dec 4 15:10:17 CET 2002 - adrian@suse.de
+
+- drop fast-malloc, not needed since glibc 2.3
+
+-------------------------------------------------------------------
+Thu Nov 28 18:33:28 CET 2002 - adrian@suse.de
+
+- add qprinter fix from Lars
+
+-------------------------------------------------------------------
+Wed Nov 27 00:44:44 CET 2002 - ro@suse.de
+
+- added expat to neededforbuild
+
+-------------------------------------------------------------------
+Sat Nov 23 14:12:16 CET 2002 - adrian@suse.de
+
+- use Xft2 from XFree package now for > SuSE 8.1
+ (experimental fontconfig package is dropped)
+- build qt3-non-mt with extra spec file now
+- fix korean [Font Substitutions] (#19575)
+- fix broken qmake debug defaults (#21891)
+- fix requires of database plugin packages
+
+-------------------------------------------------------------------
+Fri Nov 15 10:33:53 CET 2002 - adrian@suse.de
+
+- update to 3.1.0 final version
+- apply qwidget/hideChildren patch from Harri
+- move libqui into qt3 main package
+
+-------------------------------------------------------------------
+Tue Nov 5 20:00:37 CET 2002 - adrian@suse.de
+
+- package also missing mkspecs/*
+
+-------------------------------------------------------------------
+Sun Nov 3 12:54:52 CET 2002 - adrian@suse.de
+
+- update to post 3.1 beta 2 snapshot (rc1 or rc2 ?)
+- big rework of spec file, lots of workarounds are not needed anymore :)
+- use experimental fontconfig/Xft2 package for > 8.1
+- enable nis & cups support
+
+-------------------------------------------------------------------
+Mon Oct 21 18:25:53 CEST 2002 - adrian@suse.de
+
+- swab %ifarch <> %if for old broken rpm's
+
+-------------------------------------------------------------------
+Mon Oct 21 13:44:15 CEST 2002 - adrian@suse.de
+
+- remove rpath again, which came back with 3.0.5 update (#20929)
+- disable qDebug lines in chinese patch (#20959)
+
+-------------------------------------------------------------------
+Wed Oct 9 11:47:44 CEST 2002 - adrian@suse.de
+
+- implement a blacklist of executables which should not use
+ the fast malloc implementation. (python and perl atm)
+- disable fast-malloc for >8.1
+- enable fast-malloc for x86_64
+
+-------------------------------------------------------------------
+Fri Sep 20 11:24:51 CEST 2002 - adrian@suse.de
+
+- qclipboard fix from Lubos. Copy from old X applications works again
+
+-------------------------------------------------------------------
+Mon Sep 16 12:07:53 CEST 2002 - adrian@suse.de
+
+- replace qt3-gb18030.diff patch with the new patch from
+ James Su<suzhe@turbolinux.com.cn> for chinese handling (#19399)
+- set XIMInputStyle for japanese input (#19387)
+- change Requires: from /usr/include/png.h to libpng-devel, since
+ connectivas apt can not handle this.
+
+-------------------------------------------------------------------
+Fri Aug 30 14:13:34 CEST 2002 - adrian@suse.de
+
+- remove the dlopen patch again. It is not needed anymore and may
+ cause crashes in rare cases.
+
+-------------------------------------------------------------------
+Wed Aug 28 15:26:02 CEST 2002 - adrian@suse.de
+
+- apply fix from Lubos for DND in kcontrol
+- apply fix to fix gb18030 encoding (from Turbolinux China)
+
+-------------------------------------------------------------------
+Mon Aug 26 16:25:40 CEST 2002 - adrian@suse.de
+
+- do not use -plugindir configure option anymore. it caused the
+ broken plugin support and remov $QTDIR/plugins again from qtrc
+ qtrc is also a (noreplace) config file again
+- s,getenv,__secure_getenv, as suggested by okir in plugin_path.dif
+
+-------------------------------------------------------------------
+Thu Aug 22 18:33:55 CEST 2002 - adrian@suse.de
+
+- add patch to set the qt settings dir to a non-default dir
+- add patches from qt 3.0.6 to fix asian copy&paste problems
+- set explicit plugin pathes in qtrc and replace them during update
+ (this is only a workaround until I know why qt does not use the
+ compiled path)
+
+-------------------------------------------------------------------
+Thu Aug 22 14:53:57 CEST 2002 - adrian@suse.de
+
+- remove dangeling symlink in /usr/lib/qt3/mkspecs/linux-g++
+- add plugin path to global qtrc
+
+-------------------------------------------------------------------
+Tue Aug 20 13:24:25 CEST 2002 - adrian@suse.de
+
+- fix #defines
+
+-------------------------------------------------------------------
+Tue Aug 20 00:24:37 CEST 2002 - adrian@suse.de
+
+- redo the plugin path patch again, we use now a implicit
+ subdirectory like "lib64", if needed.
+- qtconfig is patched to hide/not write back those entries
+
+-------------------------------------------------------------------
+Fri Aug 16 14:00:33 CEST 2002 - coolo@suse.de
+
+- fixing the patches
+
+-------------------------------------------------------------------
+Fri Aug 16 13:18:21 CEST 2002 - coolo@suse.de
+
+- applying the plugin path patches, so they actually do something
+ on lib64 platforms
+
+-------------------------------------------------------------------
+Fri Aug 9 17:35:58 CEST 2002 - adrian@suse.de
+
+- fix plugin installation
+
+-------------------------------------------------------------------
+Thu Aug 8 10:00:46 CEST 2002 - adrian@suse.de
+
+- use %suse_version macro instead of /etc/SuSE-release
+
+-------------------------------------------------------------------
+Fri Aug 2 14:41:33 CEST 2002 - coolo@suse.de
+
+- shut up if passed -noxim is passed and xim doesn't work
+
+-------------------------------------------------------------------
+Tue Jul 30 14:43:32 CEST 2002 - adrian@suse.de
+
+- disable pre-3.0.6 patches again, until focus problem is located
+- add zlib-devel to Requires for qt3-devel and SuSE 8.1
+- add %run_ldconfig
+
+-------------------------------------------------------------------
+Mon Jul 29 17:31:37 CEST 2002 - adrian@suse.de
+
+- apply shut-up.dif
+- clean up neededforbuild
+
+-------------------------------------------------------------------
+Fri Jul 26 16:33:25 CEST 2002 - adrian@suse.de
+
+- port Lea's fast malloc implementation to libqt-mt
+- designer sig11 fixes are not needed anymore
+- use some patches from qt-rsync
+
+-------------------------------------------------------------------
+Fri Jul 19 13:07:05 CEST 2002 - adrian@suse.de
+
+- fix designer sig11 really
+- kick warnings about unsuccesfull locks for non-root users
+
+-------------------------------------------------------------------
+Thu Jul 18 18:00:13 CEST 2002 - adrian@suse.de
+
+- don't strip when in debug mode
+- fix typo in build script
+
+-------------------------------------------------------------------
+Wed Jul 17 09:59:28 CEST 2002 - adrian@suse.de
+
+- update to 3.0.5 final
+ * lots of bugfixes, see changes-3.0.5 for details
+ * new, binary incompatible plugin system
+- fix sig11 in designer
+- clean spec file, drop all not applied patches
+
+-------------------------------------------------------------------
+Thu Jul 11 10:42:14 CEST 2002 - coolo@suse.de
+
+- reenable work around for transparenent images while printing
+ (PR16188)
+
+-------------------------------------------------------------------
+Wed Jul 10 17:51:47 CEST 2002 - adrian@suse.de
+
+- update to near 3.0.5-final snapshot 3.0.5-snapshot-20020710
+
+-------------------------------------------------------------------
+Fri Jul 5 14:16:16 CEST 2002 - adrian@suse.de
+
+- fix -g detection during build
+
+-------------------------------------------------------------------
+Fri Jun 21 00:21:28 CEST 2002 - adrian@suse.de
+
+- fix use of $RPM_OPT_FLAGS (broken since 3.0.4 update)
+- use -mminimal-toc on ppc64 to workaround compiler bug atm
+- update to pre-3.0.5 snapshot-20020620
+ * use buildkey for plugins instead of our own plugin hack
+ * lots of fixes (exact description in changes-3.0.5)
+- add lib64 to build key, if needed
+- remove obsolete patches
+
+-------------------------------------------------------------------
+Thu Jun 6 13:41:19 CEST 2002 - adrian@suse.de
+
+- rework plugin path patch for distributions > 8.0
+ change name of "plugins" directory instead of filenames
+ * plugins -- lib32 and multithreaded plugins
+ * plugins-non-mt -- lib32 and without multithread support
+ * plugins-lib64 -- lib64 and multithreaded plugins
+ * plugins-lib64-non-mt -- lib64 and without multithread support
+
+-------------------------------------------------------------------
+Thu May 30 20:03:50 CEST 2002 - adrian@suse.de
+
+- disable style-plugins again (too much qt apps have problems)
+- disable Xft/Xrender support also for SuSE 7.3 (XFree 4.1.0)
+ (no one reads READMES and too many people had crashes)
+
+-------------------------------------------------------------------
+Tue May 28 10:58:01 CEST 2002 - adrian@suse.de
+
+- fix %files
+
+-------------------------------------------------------------------
+Mon May 27 13:37:15 CEST 2002 - adrian@suse.de
+
+- move qconfig, qmake to qt3-devel-tools
+- build styles as plugin (except our default style: Platinum)
+
+-------------------------------------------------------------------
+Mon May 27 00:10:23 CEST 2002 - ro@suse.de
+
+- lib64: fix qtmake.conf: QTLIBDIR also has the trailing "64"
+- fix build-script for lib64 issues
+
+-------------------------------------------------------------------
+Mon May 20 23:26:35 CEST 2002 - adrian@suse.de
+
+- fix build (disable odbc during qt3.spec build)
+
+-------------------------------------------------------------------
+Mon May 20 10:13:55 CEST 2002 - adrian@suse.de
+
+- enable -tablet support if XFree86 provides it
+- compile with -debug mode, if -g is set in enviroment
+- fix postgres plugin build
+- enable unixODBC support for newer distributions
+- split sql drivers to extra packages
+- fix dlopen call
+
+-------------------------------------------------------------------
+Tue May 14 12:39:51 CEST 2002 - adrian@suse.de
+
+- fix lib64 patch to find OpenGL libs
+
+-------------------------------------------------------------------
+Thu May 9 21:54:41 CEST 2002 - adrian@suse.de
+
+- apply fix for NetAccess focus, insertTitle(), QTextEdit and
+ QToolbar from qt-copy
+
+-------------------------------------------------------------------
+Wed May 8 09:39:48 CEST 2002 - coolo@suse.de
+
+- fixing patch section (grr)
+
+-------------------------------------------------------------------
+Tue May 7 17:13:41 CEST 2002 - coolo@suse.de
+
+- adding fix for x86_64
+
+-------------------------------------------------------------------
+Tue May 7 14:32:39 MEST 2002 - coolo@suse.de
+
+- update to qt 3.0.4 - remove fixes that do
+ not apply any longer
+- disable asian patches as they do not apply
+ and I don't want to split them as I have no
+ idea if the problems they try to fix are still
+ there
+
+-------------------------------------------------------------------
+Wed Apr 24 16:09:09 CEST 2002 - coolo@suse.de
+
+- fix lib64 support
+- fix asian patch not to use arrays in unused arrays
+ (triggers compiler problem)
+
+-------------------------------------------------------------------
+Sun Apr 21 12:58:33 CEST 2002 - adrian@suse.de
+
+- improve image rendering speed (patch by Lubos)
+
+-------------------------------------------------------------------
+Tue Apr 9 16:21:07 CEST 2002 - adrian@suse.de
+
+- apply patch from Lubos to fix alpha channel in QMovie
+
+-------------------------------------------------------------------
+Fri Apr 5 15:29:03 CEST 2002 - adrian@suse.de
+
+- fixed print support in qpsprint
+- binary compatibility fixes by Lars for gbk encoding
+
+-------------------------------------------------------------------
+Wed Apr 3 21:33:26 CEST 2002 - adrian@suse.de
+
+- apply fixes/extensions for asian/utf-8-based languages
+ (assembled by Lars and Brad, thank you, verifed by mfabian)
+- 64bit fixes from Andreas Schwab (const char*) null pointer casts
+
+-------------------------------------------------------------------
+Sun Mar 24 13:23:18 CET 2002 - adrian@suse.de
+
+- apply qtabbar fix. Fixes crashes with kcm modules.
+
+-------------------------------------------------------------------
+Fri Mar 22 10:33:58 CET 2002 - adrian@suse.de
+
+- apply fix for sig11 in QCommonStyle (made by Waldo/Trolltech)
+- apply fix to use libpng instead of libmng to load pngs (by coolo)
+- add missing Requires for qt3-devel
+
+-------------------------------------------------------------------
+Wed Mar 20 22:47:59 CET 2002 - adrian@suse.de
+
+- verify 3.0.3 final version
+- add check for null pointer returned by libXft
+ (fix sig11 when no Xft fonts are configured)
+- fix scrollbar behaviour for QT Platinum style
+ (we are X Windows compatible instead of MS Windows)
+
+-------------------------------------------------------------------
+Tue Mar 19 10:36:42 CET 2002 - adrian@suse.de
+
+- update to version 3.0.3
+ (rc6 tar ball from troll, I have to check after the qt-3.0.3 release,
+ if this is really qt-3.0.3 final)
+
+-------------------------------------------------------------------
+Tue Mar 12 20:01:34 CET 2002 - adrian@suse.de
+
+- update to pre 3.0.3 snapshot (3.0.2.20020312)
+
+-------------------------------------------------------------------
+Mon Mar 4 09:44:37 CET 2002 - adrian@suse.de
+
+- more fixes
+ * fix auto-resizing with QMovie
+ * fix to correctly open submenues in right to left layout
+ * reduce number of mallocs by sharing QColorGroup
+ * Simplified static cleanup handlers.
+ * smarter tooltip placement
+- require "c++_compiler" for distributions newer than 7.3 only
+
+-------------------------------------------------------------------
+Sun Mar 3 02:31:31 CET 2002 - adrian@suse.de
+
+- apply some fixes from qt-copy
+ * 8 bit color depth image format fixes
+ * spinbox flicker fix
+ * qrichtext dangeling pointers fix
+ * qmenubar right to left layout mode cursor navigation fix
+ * qcombobox avoid emitting highlighted twice on keyPressEvent
+
+-------------------------------------------------------------------
+Mon Feb 25 17:34:15 CET 2002 - adrian@suse.de
+
+- update to version 3.0.2
+- remove compile fixes
+- fix symlink for qtconfig
+
+-------------------------------------------------------------------
+Thu Feb 14 01:05:14 CET 2002 - adrian@suse.de
+
+- fix Requires for qt3-devel (add g++ compiler)
+
+-------------------------------------------------------------------
+Tue Feb 12 01:01:31 CET 2002 - adrian@suse.de
+
+- fix build for lib64/s390x
+
+-------------------------------------------------------------------
+Wed Feb 6 21:08:43 CET 2002 - adrian@suse.de
+
+- add links in /usr/bin for qtconfig
+
+-------------------------------------------------------------------
+Sun Feb 3 14:57:30 CET 2002 - adrian@suse.de
+
+- fix dumb-packager-bug (s,%fi,%endif,)
+
+-------------------------------------------------------------------
+Sun Feb 3 12:23:35 CET 2002 - adrian@suse.de
+
+- compile fix for postrgres module
+- extend plugin patch to work on s390x and sparc64 to work with
+ lib64 plugins
+- add %{_libdir}/qt3 symlink for s390x and sparc64
+
+-------------------------------------------------------------------
+Sat Feb 2 13:00:38 CET 2002 - ro@suse.de
+
+- cleaned changes file
+
+-------------------------------------------------------------------
+Fri Feb 1 15:29:58 CET 2002 - adrian@suse.de
+
+- update to current qt-copy snapshot (needed for KDE 3.0 beta 2)
+- make threaded plugins as usual again
+- non-threaded plugins needs now the not compatible -non-mt.so
+ suffix
+
+-------------------------------------------------------------------
+Fri Feb 1 00:26:05 CET 2002 - ro@suse.de
+
+- changed neededforbuild <libpng> to <libpng-devel-packages>
+
+-------------------------------------------------------------------
+Tue Jan 29 16:29:15 CET 2002 - adrian@suse.de
+
+- enable AA for SuSE > 7.3
+
+-------------------------------------------------------------------
+Tue Jan 29 10:58:57 CET 2002 - schwab@suse.de
+
+- Fix use of varargs on 64 bit platforms.
+
+-------------------------------------------------------------------
+Wed Jan 23 22:56:28 CET 2002 - adrian@suse.de
+
+- patch plugin loader to load only plugins with -mt.so
+ extension
+- link direct against libpng
+- move qt3.conf file to susehelp
+- TODO: make plugin loader path depending on %_libdir
+
+-------------------------------------------------------------------
+Tue Jan 22 21:47:19 CET 2002 - adrian@suse.de
+
+- enable Xrender/Xft again for SuSE 7.3
+ (I was misleaded by a broken libXft :/ )
+- using qt plugin mechanism for picture format support
+- enable XRender by default, but leave Xft disabled by default
+ (kcontrol can switch Xft on for KDE applications now)
+- add additional include path for postgres 7.2b5
+
+-------------------------------------------------------------------
+Mon Jan 21 16:58:53 CET 2002 - adrian@suse.de
+
+- disable Xft for all distributions until 7.3
+ (XFree 4.2 is needed)
+- sync QClipboard fix from qt-copy
+
+-------------------------------------------------------------------
+Tue Jan 8 16:11:14 CET 2002 - adrian@suse.de
+
+- fix Requires
+- disable rpath
+
+-------------------------------------------------------------------
+Sun Jan 6 00:31:11 CET 2002 - adrian@suse.de
+
+- split non multithreaded librarys into qt3-non-mt package
+- split developer tutorial into qt3-tutorial package
+- use common config script to prepare build
+- move libs to /usr/lib/qt3/%{_libdir}
+- remove .prl files from file list again
+
+-------------------------------------------------------------------
+Thu Jan 3 16:48:59 CET 2002 - adrian@suse.de
+
+- rename qt3-designer subpackage to qt3-devel-tools
+- add default qtrc file
+ * disable Xft support by default
+ * use Platinum style
+ * set qt plugin path
+- move qtconfig to qt base package
+- apply fixes from qt-copy/KDE-cvs
+
+-------------------------------------------------------------------
+Thu Dec 13 10:42:07 CET 2001 - adrian@suse.de
+
+- use $RPM_OPT_FLAGS during compile
+- add missing .prl files to file list
+
+-------------------------------------------------------------------
+Wed Dec 12 16:39:16 CET 2001 - adrian@suse.de
+
+- update to version 3.0.1
+- build all extra tools
+- fix default mkspec symlink
+- include examples to devel-doc package
+
+-------------------------------------------------------------------
+Thu Nov 8 18:39:52 CET 2001 - ro@suse.de
+
+- use mesa-devel-packages in neededforbuild
+
+-------------------------------------------------------------------
+Tue Oct 16 11:13:50 CEST 2001 - adrian@suse.de
+
+- fix hardcoded install dir in libqt
+ (no $QTDIR is needed at runtime anymore)
+
+-------------------------------------------------------------------
+Mon Oct 15 18:16:49 CEST 2001 - adrian@suse.de
+
+- update to QT 3.0.0 final
+ (the KDE 3 battle begins :)
+
+-------------------------------------------------------------------
+Fri Oct 5 10:50:24 CEST 2001 - adrian@suse.de
+
+- add missing header files
+- cleanup workarounds in spec file and add some new (but less ;)
+
+-------------------------------------------------------------------
+Mon Oct 1 16:35:56 CEST 2001 - adrian@suse.de
+
+- update to beta6
+
+-------------------------------------------------------------------
+Tue Sep 18 08:54:02 CEST 2001 - adrian@suse.de
+
+- update to beta5
+
+-------------------------------------------------------------------
+Wed Sep 5 12:17:19 CEST 2001 - adrian@suse.de
+
+- okay, my last try ... cp -f has different return values on the
+ distributions :(
+
+-------------------------------------------------------------------
+Tue Sep 4 10:18:20 CEST 2001 - adrian@suse.de
+
+- disable postgres support for old distributions
+ (now it also builds with SuSE 6.4)
+
+-------------------------------------------------------------------
+Mon Sep 3 15:42:48 CEST 2001 - adrian@suse.de
+
+- fix broken links in include path
+
+-------------------------------------------------------------------
+Sun Sep 2 19:47:01 CEST 2001 - adrian@suse.de
+
+- workaround bugs in Makefile to install all needed files
+- remove -j4 behind make
+
+-------------------------------------------------------------------
+Tue Jun 19 15:26:54 CEST 2001 - adrian@suse.de
+
+- split documentation from qt3-devel to qt3-doc
+
+-------------------------------------------------------------------
+Fri May 25 11:57:34 CEST 2001 - adrian@suse.de
+
+- first try with QT 3.0.0 beta 1
+ ( this package is far away from being perfect )
+
+-------------------------------------------------------------------
+Sun May 6 10:52:33 CEST 2001 - adrian@suse.de
+
+- apply XftGlyph fix for qfont_x11.cpp from Keith Packard
+- fix build for distributions before 7.1
+
+-------------------------------------------------------------------
+Fri May 4 11:39:55 CEST 2001 - adrian@suse.de
+
+- add fix for buffer overflow on qfont_x11 and some minor glitches
+ in qt-png
+- qt-experimental is dropped, since we can enable AA in qt now.
+
+-------------------------------------------------------------------
+Fri Apr 27 15:29:17 CEST 2001 - adrian@suse.de
+
+- switch BuildIndex for SuSEhelp to false by default
+
+-------------------------------------------------------------------
+Mon Apr 23 22:22:19 CEST 2001 - adrian@suse.de
+
+- using -DNO_DEBUG
+- apply latin9 patch from mls@suse.de
+
+-------------------------------------------------------------------
+Wed Apr 4 22:48:01 CEST 2001 - mfabian@suse.de
+
+- add /etc/qt.fontguess (config file for Japanese and Korean
+ fonts)
+
+-------------------------------------------------------------------
+Wed Mar 21 17:43:49 CET 2001 - adrian@suse.de
+
+- disable AA by default (still to many problems)
+
+-------------------------------------------------------------------
+Sun Mar 18 09:46:50 CET 2001 - adrian@suse.de
+
+- reenable qt-experimental for SuSE distribution < 7.2
+ disable opengl module for these distris in this package
+
+-------------------------------------------------------------------
+Sat Mar 17 14:43:11 CET 2001 - adrian@suse.de
+
+- update to QT 2.3.0
+ this makes qt-experimental obsolete
+ (maybe still some problems with the nvidia driver, but the nv
+ should work fine and the users are warned about nvidia since
+ SuSE 7.1)
+
+-------------------------------------------------------------------
+Sun Mar 11 20:20:41 CET 2001 - mfabian@suse.de
+
+- fix spec-file to make it build with "rpm -ba"
+
+-------------------------------------------------------------------
+Fri Feb 9 19:55:09 CET 2001 - adrian@suse.de
+
+- use $RPM_OPT_FLAGS
+ drop signed char patch
+
+-------------------------------------------------------------------
+Sat Feb 3 14:12:01 CET 2001 - adrian@suse.de
+
+- update to QT 2.2.4
+ qt-static is an own package and no sub packages anymore
+ fix/patch for qprintdialog is no longer needed
+ add fix from Andreas Schwab for 64bit platforms
+
+-------------------------------------------------------------------
+Fri Jan 19 11:33:07 CET 2001 - adrian@suse.de
+
+- swap link and directory of html documentation. This makes
+ trouble during update from older distributions
+
+-------------------------------------------------------------------
+Sat Jan 13 21:18:58 CET 2001 - adrian@suse.de
+
+- remove not necessary susehelp/htdig conf file
+ remove file conflicts between qt-devel and qt-experimental
+
+-------------------------------------------------------------------
+Thu Jan 4 21:37:49 CET 2001 - adrian@suse.de
+
+- added qt-experimental,qt-japanese,qt-korean to Obsoletes:
+
+-------------------------------------------------------------------
+Wed Jan 3 02:24:50 CET 2001 - adrian@suse.de
+
+- fix qprintdialog
+ fix qrichtext (Thanks Stefan)
+
+-------------------------------------------------------------------
+Wed Jan 3 02:24:15 CET 2001 - adrian@suse.de
+
+- fix qprintdialog
+
+-------------------------------------------------------------------
+Mon Jan 1 17:18:43 CET 2001 - adrian@suse.de
+
+- spec file fix
+
+-------------------------------------------------------------------
+Sun Dec 31 13:18:17 CET 2000 - adrian@suse.de
+
+- added small tools to qt-devel (thanks Dirk)
+
+-------------------------------------------------------------------
+Fri Dec 22 20:46:34 CET 2000 - adrian@suse.de
+
+- remove asian patches from qt-experimental
+
+-------------------------------------------------------------------
+Wed Dec 20 18:51:44 CET 2000 - adrian@suse.de
+
+- fixe type in package name
+
+-------------------------------------------------------------------
+Wed Dec 20 18:44:44 CET 2000 - adrian@suse.de
+
+- move docu from qtlib2 to qt
+
+-------------------------------------------------------------------
+Sat Dec 16 17:02:47 CET 2000 - adrian@suse.de
+
+- initial package. support for font anti aliasing has been added
+ Also OpenGL module is active
+
+-------------------------------------------------------------------
+Thu Dec 14 11:51:41 CET 2000 - adrian@suse.de
+
+- update to 2.2.3 and remove all the unneeded fix patches.
+ added SuSE help conf files to qt-devel
+
+-------------------------------------------------------------------
+Tue Dec 12 15:32:01 CET 2000 - schwab@suse.de
+
+- Build with -O0 on ia64.
+
+-------------------------------------------------------------------
+Fri Dec 1 00:29:50 CET 2000 - adrian@suse.de
+
+- added rpath for uic/kdelibs and fixed uic fix ..
+ to drunk to drink more
+
+-------------------------------------------------------------------
+Thu Nov 30 11:31:36 CET 2000 - adrian@suse.de
+
+- fixed dif
+
+-------------------------------------------------------------------
+Thu Nov 30 00:33:26 CET 2000 - adrian@suse.de
+
+- added fix for uic and qiconview
+
+-------------------------------------------------------------------
+Wed Nov 29 11:33:51 CET 2000 - adrian@suse.de
+
+- fixed build on ppc
+
+-------------------------------------------------------------------
+Tue Nov 21 09:31:40 CET 2000 - ro@suse.de
+
+- spec fix
+
+-------------------------------------------------------------------
+Fri Nov 17 14:57:54 CET 2000 - ro@suse.de
+
+- fixed neededforbuild: += libmng-devel
+
+-------------------------------------------------------------------
+Mon Nov 13 21:40:29 CET 2000 - adrian@suse.de
+
+- new version 2.2.2
+ added qpngio fix from waldo
+
+-------------------------------------------------------------------
+Fri Nov 10 00:57:39 CET 2000 - adrian@suse.de
+
+- fixed static config for <6.4 distris (no libmng)
+
+-------------------------------------------------------------------
+Tue Oct 31 13:45:29 CET 2000 - adrian@suse.de
+
+- split the qt package in
+ qt
+ qt-devel
+ qt-extensions
+ qt-man
+ qt-static
+
+ Added an ugly patch to get an uic with KDE support. The designer
+ is broken in this package after this patch, so it is not packaged.
+ The designer can be found in the qt-designer package
+
+-------------------------------------------------------------------
+Tue Oct 17 09:59:23 MEST 2000 - adrian@suse.de
+
+- switch to -O0 for ppc
+
+-------------------------------------------------------------------
+Sat Oct 14 09:51:19 CEST 2000 - adrian@suse.de
+
+- drop OpenGL support. Problems with Nvidia's binary only driver
+
+- added fix from waldo (fixing memory leak in qpngio)
+
+-------------------------------------------------------------------
+Mon Oct 9 16:00:44 CEST 2000 - adrian@suse.de
+
+- update the tar archiv (which contains a corrected classes.html file)
+
+-------------------------------------------------------------------
+Fri Oct 6 12:46:48 CEST 2000 - adrian@suse.de
+
+- update to 2.2.1
+ added static libs for libqt and libqt-mt
+ added support for libmng
+
+-------------------------------------------------------------------
+Mon Oct 2 10:56:03 CEST 2000 - adrian@suse.de
+
+- added missing header files
+
+-------------------------------------------------------------------
+Tue Sep 19 16:03:56 MEST 2000 - adrian@suse.de
+
+- switch to -O0 for axp
+
+-------------------------------------------------------------------
+Fri Sep 8 17:09:15 CEST 2000 - schwab@suse.de
+
+- Update ia64 configuration.
+
+-------------------------------------------------------------------
+Fri Sep 8 15:36:30 CEST 2000 - adrian@suse.de
+
+- added missing libqt-mt.so
+ clean up in filelist
+ changed copyright/license to GPL
+
+-------------------------------------------------------------------
+Thu Sep 7 22:35:05 CEST 2000 - adrian@suse.de
+
+- update to qt 2.2.0 final
+
+-------------------------------------------------------------------
+Tue Aug 22 19:56:07 CEST 2000 - adrian@suse.de
+
+- removed uic/moc bindings to libGL and other
+
+-------------------------------------------------------------------
+Fri Aug 18 20:33:25 CEST 2000 - adrian@suse.de
+
+- update to qt 2.2.0 beta 2
+ spec file rewritten
+
+-------------------------------------------------------------------
+Tue Jul 4 15:11:10 CEST 2000 - adrian@suse.de
+
+- moved links from /usr/lib/qt/lib to /usr/lib/
+
+-------------------------------------------------------------------
+Thu Jun 22 15:59:04 CEST 2000 - adrian@suse.de
+
+- add libqt.so.2 links in /usr/lib/qt/lib
+
+-------------------------------------------------------------------
+Fri Jun 16 16:26:31 CEST 2000 - adrian@suse.de
+
+- moved libqt.so back to qtlib2, after religios war.
+
+-------------------------------------------------------------------
+Fri Jun 16 12:26:33 CEST 2000 - adrian@suse.de
+
+- enable gif support again
+
+-------------------------------------------------------------------
+Fri Jun 16 09:18:31 CEST 2000 - adrian@suse.de
+
+- moved static libs to qtdevel2
+
+-------------------------------------------------------------------
+Tue Jun 6 14:06:10 CEST 2000 - schwab@suse.de
+
+- Reduce opt level on ia64.
+
+-------------------------------------------------------------------
+Tue Jun 6 01:06:59 CEST 2000 - adrian@suse.de
+
+- fixed dependencies
+
+-------------------------------------------------------------------
+Tue May 30 23:02:56 CEST 2000 - adrian@suse.de
+
+- readded mesadev in neededforbuild
+
+-------------------------------------------------------------------
+Tue May 30 15:30:16 CEST 2000 - adrian@suse.de
+
+- update to 2.1.1
+
+-------------------------------------------------------------------
+Wed May 24 13:06:43 CEST 2000 - adrian@suse.de
+
+- added mesadev in neededforbuild
+ removed gif support (license issue)
+
+-------------------------------------------------------------------
+Tue May 16 21:44:53 CEST 2000 - adrian@suse.de
+
+- added -fno-exception (smaller binaries)
+
+-------------------------------------------------------------------
+Fri May 12 08:55:01 CEST 2000 - adrian@suse.de
+
+- fixed link /usr/doc/packages/html
+ using %{_defaultdocdir}
+ using %{_mandir}
+
+-------------------------------------------------------------------
+Fri Apr 14 15:14:19 CEST 2000 - adrian@suse.de
+
+- update to 2.1.0 final
+ new package for all man pages
+
+-------------------------------------------------------------------
+Thu Apr 6 19:16:55 CEST 2000 - adrian@suse.de
+
+- update to 2.1.0 beta 4
+
+-------------------------------------------------------------------
+Thu Mar 30 15:57:33 CEST 2000 - adrian@suse.de
+
+- update to qtlib 2.1.0 beta 3
+ the destination directory is not longer /usr/lib/qt !!!
+ QTDIR=/usr/lib/qt-2.1.0
+ There is also a link /usr/lib/qt2 to /usr/lib/qt-2.1.0
+
+-------------------------------------------------------------------
+Thu Mar 2 11:17:22 CET 2000 - ro@suse.de
+
+- removed obsolete part of patch
+
+-------------------------------------------------------------------
+Thu Mar 2 07:27:34 CET 2000 - ro@suse.de
+
+- configure doesn't know --mandir ... :(
+
+-------------------------------------------------------------------
+Thu Mar 2 01:59:58 CET 2000 - ro@suse.de
+
+- work-around for prepare-spec buglet
+
+-------------------------------------------------------------------
+Wed Mar 1 00:05:15 CET 2000 - ro@suse.de
+
+- man to /usr/share using macro
+
+-------------------------------------------------------------------
+Tue Feb 29 15:55:33 CET 2000 - kettner@suse.de
+
+- Apply patch for qfont_x11.cpp from warwick@warwick-bippy
+
+-------------------------------------------------------------------
+Mon Feb 28 18:26:18 CET 2000 - kettner@suse.de
+
+- increased font cache from 4MB to 9MB in order to
+ speed up UNICODE fonts for YaST2
+
+-------------------------------------------------------------------
+Thu Nov 11 20:00:14 MET 1999 - uli@suse.de
+
+- removed netscape from neededforbuild
+
+-------------------------------------------------------------------
+Tue Nov 9 11:12:48 MET 1999 - kettner@suse.de
+
+- Removed mesa from Requires, as it is not required
+
+-------------------------------------------------------------------
+Fri Oct 22 14:42:35 MEST 1999 - kettner@suse.de
+
+ - Patch extensions/imageio/src/Makefile.in in order to get
+ shared library of libimgio again. Worked in 2.00.
+
+-------------------------------------------------------------------
+Mon Oct 11 21:06:47 MEST 1999 - kettner@suse.de
+
+ - New version 2.0.2
+
+-------------------------------------------------------------------
+Tue Sep 28 18:09:12 MEST 1999 - uli@suse.de
+
+- switched from Motif to lesstif
+
+-------------------------------------------------------------------
+Mon Sep 27 16:31:01 CEST 1999 - bs@suse.de
+
+- fixed requirements for sub packages
+
+-------------------------------------------------------------------
+Fri Sep 17 11:28:09 MEST 1999 - kettner@suse.de
+
+- Reinserted old # Commandline line.
+
+-------------------------------------------------------------------
+Mon Sep 13 17:23:57 CEST 1999 - bs@suse.de
+
+- ran old prepare_spec on spec file to switch to new prepare_spec.
+
+-------------------------------------------------------------------
+Wed Jul 14 11:49:22 CEST 1999 - kettner@suse.de
+
+ - New version 2.00
+
+-------------------------------------------------------------------
+Tue Jul 13 19:31:56 CEST 1999 - kettner@suse.de
+
+ - New version 2.00
+
+-------------------------------------------------------------------
+Mon Jul 12 19:15:16 CEST 1999 - kettner@suse.de
+
+ - New version 2.00
+
diff --git a/opensuse/core/qt3/qt3-extensions.spec b/opensuse/core/qt3/qt3-extensions.spec
new file mode 100644
index 000000000..d914a2e06
--- /dev/null
+++ b/opensuse/core/qt3/qt3-extensions.spec
@@ -0,0 +1,477 @@
+#
+# spec file for package qt3-extensions
+#
+# Copyright (c) 2011 SUSE LINUX Products GmbH, Nuernberg, Germany.
+#
+# All modifications and additions to the file contributed by third parties
+# remain the property of their copyright owners, unless otherwise agreed
+# upon. The license for this file, and modifications and additions to the
+# file, is the same license as for the pristine package itself (unless the
+# license for the pristine package is not an Open Source License, in which
+# case the license is the MIT License). An "Open Source License" is a
+# license that conforms to the Open Source Definition (Version 1.9)
+# published by the Open Source Initiative.
+
+# Please submit bugfixes or comments via http://bugs.opensuse.org/
+#
+
+# norootforbuild
+
+
+Name: qt3-extensions
+BuildRequires: cups-devel krb5-devel mysql-devel postgresql-devel qt3-devel sqlite2-devel unixODBC-devel update-desktop-files
+%if %suse_version > 1020
+BuildRequires: fdupes
+%endif
+License: GPL, QPL
+Version: 3.3.8c
+Release: 1
+AutoReqProv: on
+Requires: qt3 = %version
+Group: Development/Tools/Other
+Summary: Qt3 Extensions
+# COMMON-BEGIN
+# COMMON-BEGIN
+%define x11_free -x11-free-
+%define rversion 3.3.8b
+Source0: qt%{x11_free}%rversion.tar.bz2
+Source1: build_script.sh
+Source2: qtconfig3.desktop
+Source3: qtrc
+Source4: assistant3.png
+Source6: assistant3.desktop
+Source7: designer.desktop
+Source8: designer.png
+Source9: linguist.desktop
+Source5: linguist.png
+Source10: qt3.sh
+Source11: qt3.csh
+# Translations did not change at 3.3.8c
+Source12: qt3-3.3.8b-translations.tar.bz2
+Source100: qtkdeintegration_x11.cpp
+Source101: qtkdeintegration_x11_p.h
+Source102: baselibs.conf
+Source200: attributes
+Source201: update_spec.pl
+Patch1: aliasing.diff
+Patch2: head.diff
+Patch4: qt3-never-strip.diff
+Patch5: external-libs.diff
+Patch6: 0001-dnd_optimization.patch
+Patch7: 0002-dnd_active_window_fix.patch
+Patch8: 0007-qpixmap_constants.patch
+Patch11: 0038-dragobject-dont-prefer-unknown.patch
+Patch12: qtrc-path.diff
+Patch14: lib64-plugin-support.diff
+Patch15: pluginmanager-fix.diff
+Patch18: no-rpath.dif
+Patch19: shut-up.diff
+Patch20: rubberband.diff
+Patch21: fix-GL-loading.diff
+Patch23: fix-accessible.diff
+# From http://www.freedesktop.org/wiki/Software_2fImmoduleQtDownload
+# Current version from http://freedesktop.org/~daisuke/qt-x11-immodule-unified-qt3.3.5-20060318.diff.bz2
+Patch25: qt-x11-immodule-unified-qt3.3.8-20060318.diff
+Patch28: fix-key-release-event-with-imm.diff
+Patch29: 0047-fix-kmenu-width.diff
+Patch31: limit-image-size.diff
+Patch34: 0005-qpixmap_mitshm.patch
+Patch35: qt-transparency.patch
+Patch37: 0055-qtextedit_zoom.patch
+Patch38: 0048-qclipboard_hack_80072.patch
+Patch39: fix-qtranslator-crash.diff
+Patch40: 0059-qpopup_has_mouse.patch
+Patch41: 0060-qpopup_ignore_mousepos.patch
+Patch42: add_qexport_visibility.patch
+Patch43: 0056-khotkeys_input_84434.patch
+Source250: enable-designer-plugins.diff
+Patch53: fix-xinerama-dialog-placement.diff
+Patch54: kmenu-search-fix.diff
+Patch55: qt3-fix-cast.diff
+Patch100: qt.patch
+Patch101: qt3-arm-gcc4.patch
+Patch102: xinerama.patch
+Patch113: fix-assistant-path.patch
+Patch117: qtimer-debug.diff
+Patch119: xinerama-qpopupmenu.diff
+Patch121: qt3-warnings.diff
+Patch123: use-xrandr-1.2.diff
+Patch125: qcstring-format-warnings.diff
+Patch127: mng-reading-fix.patch
+Patch128: 0079-compositing-types.patch
+Patch129: 0080-net-wm-sync-request.patch
+Patch132: revert-qt-3.3.8-khmer-fix.diff
+Patch133: 0085-fix-buildkey.diff
+Patch134: fix-xinput-clash.diff
+Patch135: parseFontName.diff
+Patch136: qt3-no-date.diff
+Patch137: popen-leak-fix.diff
+Patch138: qt3-libpng14.diff
+Patch139: gcc46.diff
+
+# TQt integration
+Patch200: qt-3.3.8c.diff
+
+BuildRoot: %{_tmppath}/%{name}-%{version}-build
+
+%description
+This package contains extension libraries for Qt 3, such as the
+Netscape plug-in modules.
+
+This package contains extension libraries for Qt 3, such as the
+Netscape plug-in modules.
+
+This package contains extension libraries for Qt 3, such as the
+Netscape plug-in modules.
+
+This package contains extension libraries for Qt 3, such as the
+Netscape plug-in modules.
+
+%define build_sub_dirs src plugins/src tools/designer/uilib/ tools/designer/uic tools/qtconfig tools/assistant/lib tools/assistant tutorial
+
+%prep
+%setup -q -n qt%{x11_free}%rversion
+%patch1
+%patch2
+%patch4
+%patch5
+%patch6
+%patch7
+%patch8
+%patch11
+%patch12
+if [ "%_lib" = "lib64" ]; then
+%patch14
+fi
+%patch15
+%patch18
+%patch19
+%patch20
+%patch23
+%patch25
+%patch28
+%patch29
+%patch31
+%patch34
+%patch35
+%patch37
+%patch38
+%patch39
+%patch40
+%patch41
+%patch42
+%patch43
+%patch100
+%patch102
+%patch53
+%patch54
+%patch55
+%patch101
+%patch113
+%patch117
+%patch119
+%patch121
+%patch123
+ln -sf $PWD/src/inputmethod/qinputcontextfactory.h include/
+ln -sf $PWD/src/inputmethod/qinputcontextplugin.h include/
+ln -sf $PWD/src/kernel/qinputcontext.h include/
+ln -sf $PWD/src/kernel/qinputcontextinterface_p.h include/private/
+ln -sf $PWD/src/kernel/qximinputcontext_p.h include/private/
+if [ %_lib = "lib" ]; then
+sed 's,/lib64/,/lib/,' %PATCH21 | patch -p0
+else
+%patch21
+fi
+%patch125
+%patch127
+%patch128
+%patch129
+%patch132
+%patch133
+%patch134
+%patch135
+%patch136
+%patch137
+%if %suse_version > 1120
+%patch138 -p1
+%endif
+%patch139
+%patch200
+# copy qt kde integration files
+cp %SOURCE100 %SOURCE101 src/kernel/
+cp %SOURCE101 include/private/
+cd translations
+tar xvjf %SOURCE12
+cd ..
+# COMMON-END
+# COMMON-END
+
+%description
+This package contains extension libraries for Qt 3, such as the
+Netscape plug-in modules.
+
+This package contains extension libraries for Qt 3, such as the
+Netscape plug-in modules.
+
+This package contains extension libraries for Qt 3, such as the
+Netscape plug-in modules.
+
+This package contains extension libraries for Qt 3, such as the
+Netscape plug-in modules.
+
+%package -n qt3-devel-examples
+Summary: Programming Examples for Qt 3
+AutoReqProv: on
+Group: Development/Sources
+Provides: qt3-examples
+Obsoletes: qt3-examples
+
+%description -n qt3-devel-examples
+This package contains small executables with code to demonstrate Qt
+programming.
+
+Have a look in /usr/share/doc/packages/qt3/examples/.
+
+%package -n qt3-mysql
+Summary: MySQL Plug-In for Qt
+Provides: qt3_database_plugin
+Group: Productivity/Databases/Clients
+
+%description -n qt3-mysql
+Plug-in for using the MySQL database with the generic Qt database
+interface.
+
+%package -n qt3-unixODBC
+Summary: A UnixODBC Plug-In for Qt
+Provides: qt3_database_plugin
+Group: Productivity/Databases/Clients
+
+%description -n qt3-unixODBC
+A plug-in for using UnixODBC supported databases with the generic Qt
+database interface.
+
+%package -n qt3-postgresql
+Summary: A PostgreSQL Plug-In for Qt
+Provides: qt3_database_plugin
+Group: Productivity/Databases/Clients
+
+%description -n qt3-postgresql
+A Plug-in for using the PostgreSQL database with the generic Qt
+database interface.
+
+%package -n qt3-sqlite
+Summary: SQLite Database Plug-In for Qt
+Provides: qt3_database_plugin
+Group: Development/Tools/Other
+
+%description -n qt3-sqlite
+The Qt database supports SQLite with this plug-in. (No configured and
+running daemon is required.)
+
+%package -n qt3-devel-tools
+Summary: User Interface Builder and other tools (designer, assistant, linguist)
+AutoReqProv: on
+Requires: qt3-devel = %version
+Provides: qt3-designer
+Obsoletes: qt3-designer
+Group: Development/Tools/GUI Builders
+
+%description -n qt3-devel-tools
+The designer creates .ui files. The uic generates C++ code from these
+files. The package also contains the Qt Assistant (Qt documentation
+browser) and the Qt Linguist (for translations).
+
+%package -n qt3-man
+Summary: Qt 3 Man Pages
+AutoReqProv: on
+Requires: qt3-devel = %version
+Conflicts: qtman qt-man
+Group: Documentation/Man
+
+%description -n qt3-man
+This package contains all the man pages for all the Qt 3 classes.
+
+%build
+export QTDIR=/usr/lib/qt3/
+export WLIB=%_lib
+export VERSION=%suse_version
+source %{SOURCE1} %{version}
+export RPM_OPT_FLAGS="$RPM_OPT_FLAGS -fno-strict-aliasing"
+#
+# compile threaded version to build all tools.
+# the lib itself becomes packaged from qt3.spec
+#
+call_configure -thread -shared -L$PWD/%_lib $OPTIONS
+ln -sf /usr/lib/qt3/%_lib/* lib/
+ln -sf /usr/lib/qt3/bin/* bin/
+cd plugins/src
+make %{?jobs:-j%jobs}
+make INSTALL_ROOT=$RPM_BUILD_ROOT install
+cd -
+#
+# build examples
+#
+cd tools/assistant/lib
+make %{?jobs:-j%jobs}
+cd -
+cd examples
+make %{?jobs:-j%jobs}
+cd -
+#
+# build extra tools
+#
+cd tools
+make %{?jobs:-j%jobs}
+make INSTALL_ROOT=$RPM_BUILD_ROOT install
+for i in qvfb qembed qconfig msg2qm mergetr ; do
+ cd "$i" && make %{?jobs:-j%jobs} && install -m 0755 $i ${RPM_BUILD_ROOT}/usr/lib/qt3/bin/ && cd -
+done
+cd ..
+install -m 0755 bin/findtr bin/qt20fix bin/qtrename140 ${RPM_BUILD_ROOT}/usr/lib/qt3/bin/
+if [ %_lib = lib64 ]; then
+ for i in $RPM_BUILD_ROOT/usr/lib/qt3/plugins/*/*.so; do
+ mv "$i" "${i%.so}.lib64.so"
+ done
+fi
+
+%install
+export WLIB=%_lib
+export VERSION=%suse_version
+source %{SOURCE1}
+post_install $RPM_BUILD_ROOT/usr/lib/qt3/
+#
+# create default doc dir
+#
+install -d -m 0755 ${RPM_BUILD_ROOT}/%{_docdir}/qt3/
+#
+# create links in ld.so.conf path
+#
+install -d -m 0755 ${RPM_BUILD_ROOT}/%{_libdir}
+#install -d -m 0755 ${RPM_BUILD_ROOT}/usr/bin/
+#ln -sf ../lib/qt3/bin/designer ${RPM_BUILD_ROOT}/usr/bin/designer
+#ln -sf ../lib/qt3/bin/linguist ${RPM_BUILD_ROOT}/usr/bin/linguist
+%suse_update_desktop_file -i designer Qt Development GUIDesigner
+%suse_update_desktop_file -i linguist Qt Development Translation
+mkdir -p $RPM_BUILD_ROOT/usr/share/pixmaps
+perl -pi -e 's/Icon=designer/Icon=designer3/' ${RPM_BUILD_ROOT}/usr/share/applications/designer.desktop
+perl -pi -e 's,Exec=designer,Exec=/usr/lib/qt3/bin/designer,' ${RPM_BUILD_ROOT}/usr/share/applications/designer.desktop
+mv ${RPM_BUILD_ROOT}/usr/share/applications/designer.desktop ${RPM_BUILD_ROOT}/usr/share/applications/designer3.desktop
+install -m 0644 tools/assistant/images/designer.png $RPM_BUILD_ROOT/usr/share/pixmaps/designer3.png
+rm -f ${RPM_BUILD_ROOT}/usr/share/pixmaps/designer.png
+perl -pi -e 's,Exec=linguist,Exec=/usr/lib/qt3/bin/linguist,' ${RPM_BUILD_ROOT}/usr/share/applications/linguist.desktop
+perl -pi -e 's,Icon=linguist,Icon=linguist3,' ${RPM_BUILD_ROOT}/usr/share/applications/linguist.desktop
+mv ${RPM_BUILD_ROOT}/usr/share/pixmaps/linguist.png ${RPM_BUILD_ROOT}/usr/share/pixmaps/linguist3.png
+
+##### these files are not getting installed by "make install" ... bug ?
+#
+#
+# install manpages
+#
+rm -rf $RPM_BUILD_ROOT/%{_mandir}
+install -d $RPM_BUILD_ROOT/%{_mandir}
+cp -a doc/man/* $RPM_BUILD_ROOT/%{_mandir}/
+#
+# install examples
+#
+install -d ${RPM_BUILD_ROOT}/usr/lib/qt3/doc/
+find ./examples/ \
+ -name \*.o -o -name .obj -o -name .moc -o -name Makefile \
+ | xargs rm -rf
+cp -a examples ${RPM_BUILD_ROOT}/usr/lib/qt3/doc/
+ln -sf /usr/lib/qt3/doc/examples ${RPM_BUILD_ROOT}/%{_docdir}/qt3/
+#
+# to be sure we do not package files which are packaged in other qt3 packages
+#
+rpm -ql qt3 qt3-devel qt3-devel-doc \
+ | while read i ; do
+ [ -d "$i" ] || rm -f $RPM_BUILD_ROOT/"$i"
+done
+#
+# we do have them in qt3-devel-doc already
+#
+rm -f $RPM_BUILD_ROOT/usr/lib/qt3/bin/assistant
+rm -f $RPM_BUILD_ROOT/usr/lib/qt3/%_lib/libqassistantclient.*
+rm -f $RPM_BUILD_ROOT/usr/lib/qt3/translations/assistant_de.qm
+
+for l in $RPM_BUILD_ROOT/usr/lib/qt3/%_lib/*.a; do
+ strip --strip-unneeded $l
+done
+
+%if %suse_version > 1020
+%fdupes -s $RPM_BUILD_ROOT
+%endif
+
+%pre
+if test -L usr/lib/qt3; then
+ rm usr/lib/qt3
+fi
+
+%clean
+rm -rf ${RPM_BUILD_ROOT}
+
+%post
+%run_ldconfig
+
+%post -n qt3-devel-tools
+%run_ldconfig
+
+%files
+%defattr(-,root,root)
+/usr/lib/qt3/bin/qembed
+/usr/lib/qt3/bin/qvfb
+
+%files -n qt3-mysql
+%defattr(-,root,root)
+%dir /usr/lib/qt3/plugins/sqldrivers
+/usr/lib/qt3/plugins/sqldrivers/libqsqlmysql*.so
+
+%files -n qt3-postgresql
+%defattr(-,root,root)
+%dir /usr/lib/qt3/plugins/sqldrivers
+/usr/lib/qt3/plugins/sqldrivers/libqsqlpsql*.so
+
+%files -n qt3-unixODBC
+%defattr(-,root,root)
+%dir /usr/lib/qt3/plugins/sqldrivers
+/usr/lib/qt3/plugins/sqldrivers/libqsqlodbc*.so
+
+%files -n qt3-sqlite
+%defattr(-,root,root)
+%dir /usr/lib/qt3/plugins/sqldrivers
+/usr/lib/qt3/plugins/sqldrivers/libqsqlite*.so
+
+%files -n qt3-devel-tools
+%defattr(-,root,root)
+#/usr/bin/designer
+#/usr/bin/linguist
+/usr/lib/qt3/bin/qconfig
+/usr/lib/qt3/bin/findtr
+/usr/lib/qt3/bin/qt20fix
+/usr/lib/qt3/bin/qtrename140
+/usr/lib/qt3/bin/msg2qm
+/usr/lib/qt3/bin/mergetr
+/usr/lib/qt3/bin/designer
+/usr/lib/qt3/bin/linguist
+/usr/lib/qt3/bin/qm2ts
+/usr/lib/qt3/bin/lrelease
+/usr/lib/qt3/bin/lupdate
+/usr/lib/qt3/templates
+/usr/lib/qt3/plugins/designer
+/usr/lib/qt3/phrasebooks
+/usr/lib/qt3/%_lib/libdesignercore.*
+/usr/lib/qt3/%_lib/libeditor.*
+/usr/share/applications/*
+/usr/share/pixmaps/designer3.png
+/usr/share/pixmaps/linguist3.png
+
+%files -n qt3-devel-examples
+%defattr(-,root,root)
+%dir /usr/lib/qt3/doc
+/%{_docdir}/qt3/examples
+/usr/lib/qt3/doc/examples
+
+%files -n qt3-man
+%defattr(-,root,root)
+%{_mandir}/man*/*
+
+%changelog
diff --git a/opensuse/core/qt3/qt3-extensions.spec.in b/opensuse/core/qt3/qt3-extensions.spec.in
new file mode 100644
index 000000000..e1014767a
--- /dev/null
+++ b/opensuse/core/qt3/qt3-extensions.spec.in
@@ -0,0 +1,358 @@
+#
+# spec file for package qt3-extensions (Version 3.3.8b)
+#
+# Copyright (c) 2005 SUSE LINUX Products GmbH, Nuernberg, Germany.
+# This file and all modifications and additions to the pristine
+# package are under the same license as the package itself.
+#
+# Please submit bugfixes or comments via http://bugs.opensuse.org
+#
+
+# norootforbuild
+
+Name: qt3-extensions
+BuildRequires: cups-devel krb5-devel mysql-devel postgresql-devel qt3-devel sqlite2-devel unixODBC-devel update-desktop-files
+%if %suse_version > 1020
+BuildRequires: fdupes
+%endif
+License: GPL, QPL
+Version: 3.3.8c
+Release: 1
+Autoreqprov: on
+Requires: qt3 = %version
+Group: Development/Tools/Other
+Summary: Qt3 Extensions
+# COMMON-BEGIN
+# COMMON-END
+
+%description
+Qt is a program library for developing applications with graphical user
+interfaces. It allows you to rapidly develop professional programs. The
+Qt library is available not only for Linux but for a great number of
+Unices and even for Windows. Thus it is possible to write programs that
+may be easily ported to those platforms.
+
+You need a license for using Qt with a non-GPL application, which can
+be acquired from sales@trolltech.com.
+
+See /usr/share/doc/packages/qt3 for details about the new features of
+the current Qt library!
+
+%package -n qt3-devel-examples
+Summary: Programming Examples for Qt 3
+Autoreqprov: on
+Group: Development/Sources
+Provides: qt3-examples
+Obsoletes: qt3-examples
+
+%description -n qt3-devel-examples
+Qt is a program library for developing applications with graphical user
+interfaces. It allows you to rapidly develop professional programs. The
+Qt library is available not only for Linux but for a great number of
+Unices and even for Windows. Thus it is possible to write programs that
+may be easily ported to those platforms.
+
+You need a license for using Qt with a non-GPL application, which can
+be acquired from sales@trolltech.com.
+
+See /usr/share/doc/packages/qt3 for details about the new features of
+the current Qt library!
+
+%package -n qt3-mysql
+Summary: MySQL Plug-In for Qt
+Provides: qt3_database_plugin
+Group: Productivity/Databases/Clients
+
+%description -n qt3-mysql
+Qt is a program library for developing applications with graphical user
+interfaces. It allows you to rapidly develop professional programs. The
+Qt library is available not only for Linux but for a great number of
+Unices and even for Windows. Thus it is possible to write programs that
+may be easily ported to those platforms.
+
+You need a license for using Qt with a non-GPL application, which can
+be acquired from sales@trolltech.com.
+
+See /usr/share/doc/packages/qt3 for details about the new features of
+the current Qt library!
+
+%package -n qt3-unixODBC
+Summary: A UnixODBC Plug-In for Qt
+Provides: qt3_database_plugin
+Group: Productivity/Databases/Clients
+
+%description -n qt3-unixODBC
+Qt is a program library for developing applications with graphical user
+interfaces. It allows you to rapidly develop professional programs. The
+Qt library is available not only for Linux but for a great number of
+Unices and even for Windows. Thus it is possible to write programs that
+may be easily ported to those platforms.
+
+You need a license for using Qt with a non-GPL application, which can
+be acquired from sales@trolltech.com.
+
+See /usr/share/doc/packages/qt3 for details about the new features of
+the current Qt library!
+
+%package -n qt3-postgresql
+Summary: A PostgreSQL Plug-In for Qt
+Provides: qt3_database_plugin
+Group: Productivity/Databases/Clients
+
+%description -n qt3-postgresql
+Qt is a program library for developing applications with graphical user
+interfaces. It allows you to rapidly develop professional programs. The
+Qt library is available not only for Linux but for a great number of
+Unices and even for Windows. Thus it is possible to write programs that
+may be easily ported to those platforms.
+
+You need a license for using Qt with a non-GPL application, which can
+be acquired from sales@trolltech.com.
+
+See /usr/share/doc/packages/qt3 for details about the new features of
+the current Qt library!
+
+%package -n qt3-sqlite
+Summary: SQLite Database Plug-In for Qt
+Provides: qt3_database_plugin
+Group: Development/Tools/Other
+
+%description -n qt3-sqlite
+Qt is a program library for developing applications with graphical user
+interfaces. It allows you to rapidly develop professional programs. The
+Qt library is available not only for Linux but for a great number of
+Unices and even for Windows. Thus it is possible to write programs that
+may be easily ported to those platforms.
+
+You need a license for using Qt with a non-GPL application, which can
+be acquired from sales@trolltech.com.
+
+See /usr/share/doc/packages/qt3 for details about the new features of
+the current Qt library!
+
+%package -n qt3-devel-tools
+Summary: User Interface Builder and other tools (designer, assistant, linguist)
+Autoreqprov: on
+Requires: qt3-devel = %version
+Provides: qt3-designer
+Obsoletes: qt3-designer
+Group: Development/Tools/GUI Builders
+
+%description -n qt3-devel-tools
+Qt is a program library for developing applications with graphical user
+interfaces. It allows you to rapidly develop professional programs. The
+Qt library is available not only for Linux but for a great number of
+Unices and even for Windows. Thus it is possible to write programs that
+may be easily ported to those platforms.
+
+You need a license for using Qt with a non-GPL application, which can
+be acquired from sales@trolltech.com.
+
+See /usr/share/doc/packages/qt3 for details about the new features of
+the current Qt library!
+
+%package -n qt3-man
+Summary: Qt 3 Man Pages
+Autoreqprov: on
+Requires: qt3-devel = %version
+Conflicts: qtman qt-man
+Group: Documentation/Man
+
+%description -n qt3-man
+Qt is a program library for developing applications with graphical user
+interfaces. It allows you to rapidly develop professional programs. The
+Qt library is available not only for Linux but for a great number of
+Unices and even for Windows. Thus it is possible to write programs that
+may be easily ported to those platforms.
+
+You need a license for using Qt with a non-GPL application, which can
+be acquired from sales@trolltech.com.
+
+See /usr/share/doc/packages/qt3 for details about the new features of
+the current Qt library!
+
+%build
+export QTDIR=/usr/lib/qt3/
+export WLIB=%_lib
+export VERSION=%suse_version
+source %{SOURCE1} %{version}
+export RPM_OPT_FLAGS="$RPM_OPT_FLAGS -fno-strict-aliasing"
+#
+# compile threaded version to build all tools.
+# the lib itself becomes packaged from qt3.spec
+#
+call_configure -thread -shared -L$PWD/%_lib $OPTIONS
+ln -sf /usr/lib/qt3/%_lib/* lib/
+ln -sf /usr/lib/qt3/bin/* bin/
+cd plugins/src
+make %{?jobs:-j%jobs}
+make INSTALL_ROOT=$RPM_BUILD_ROOT install
+cd -
+#
+# build examples
+#
+cd tools/assistant/lib
+make %{?jobs:-j%jobs}
+cd -
+cd examples
+make %{?jobs:-j%jobs}
+cd -
+#
+# build extra tools
+#
+cd tools
+make %{?jobs:-j%jobs}
+make INSTALL_ROOT=$RPM_BUILD_ROOT install
+for i in qvfb qembed qconfig msg2qm mergetr ; do
+ cd "$i" && make %{?jobs:-j%jobs} && install -m 0755 $i ${RPM_BUILD_ROOT}/usr/lib/qt3/bin/ && cd -
+done
+cd ..
+install -m 0755 bin/findtr bin/qt20fix bin/qtrename140 ${RPM_BUILD_ROOT}/usr/lib/qt3/bin/
+if [ %_lib = lib64 ]; then
+ for i in $RPM_BUILD_ROOT/usr/lib/qt3/plugins/*/*.so; do
+ mv "$i" "${i%.so}.lib64.so"
+ done
+fi
+
+%install
+export WLIB=%_lib
+export VERSION=%suse_version
+source %{SOURCE1}
+post_install $RPM_BUILD_ROOT/usr/lib/qt3/
+#
+# create default doc dir
+#
+install -d -m 0755 ${RPM_BUILD_ROOT}/%{_docdir}/qt3/
+#
+# create links in ld.so.conf path
+#
+install -d -m 0755 ${RPM_BUILD_ROOT}/%{_libdir}
+#install -d -m 0755 ${RPM_BUILD_ROOT}/usr/bin/
+#ln -sf ../lib/qt3/bin/designer ${RPM_BUILD_ROOT}/usr/bin/designer
+#ln -sf ../lib/qt3/bin/linguist ${RPM_BUILD_ROOT}/usr/bin/linguist
+%suse_update_desktop_file -i designer Qt Development GUIDesigner
+%suse_update_desktop_file -i linguist Qt Development Translation
+mkdir -p $RPM_BUILD_ROOT/usr/share/pixmaps
+perl -pi -e 's/Icon=designer/Icon=designer3/' ${RPM_BUILD_ROOT}/usr/share/applications/designer.desktop
+perl -pi -e 's,Exec=designer,Exec=/usr/lib/qt3/bin/designer,' ${RPM_BUILD_ROOT}/usr/share/applications/designer.desktop
+mv ${RPM_BUILD_ROOT}/usr/share/applications/designer.desktop ${RPM_BUILD_ROOT}/usr/share/applications/designer3.desktop
+install -m 0644 tools/assistant/images/designer.png $RPM_BUILD_ROOT/usr/share/pixmaps/designer3.png
+rm -f ${RPM_BUILD_ROOT}/usr/share/pixmaps/designer.png
+perl -pi -e 's,Exec=linguist,Exec=/usr/lib/qt3/bin/linguist,' ${RPM_BUILD_ROOT}/usr/share/applications/linguist.desktop
+perl -pi -e 's,Icon=linguist,Icon=linguist3,' ${RPM_BUILD_ROOT}/usr/share/applications/linguist.desktop
+mv ${RPM_BUILD_ROOT}/usr/share/pixmaps/linguist.png ${RPM_BUILD_ROOT}/usr/share/pixmaps/linguist3.png
+
+##### these files are not getting installed by "make install" ... bug ?
+#
+#
+# install manpages
+#
+rm -rf $RPM_BUILD_ROOT/%{_mandir}
+install -d $RPM_BUILD_ROOT/%{_mandir}
+cp -a doc/man/* $RPM_BUILD_ROOT/%{_mandir}/
+#
+# install examples
+#
+install -d ${RPM_BUILD_ROOT}/usr/lib/qt3/doc/
+find ./examples/ \
+ -name \*.o -o -name .obj -o -name .moc -o -name Makefile \
+ | xargs rm -rf
+cp -a examples ${RPM_BUILD_ROOT}/usr/lib/qt3/doc/
+ln -sf /usr/lib/qt3/doc/examples ${RPM_BUILD_ROOT}/%{_docdir}/qt3/
+#
+# to be sure we do not package files which are packaged in other qt3 packages
+#
+rpm -ql qt3 qt3-devel qt3-devel-doc \
+ | while read i ; do
+ [ -d "$i" ] || rm -f $RPM_BUILD_ROOT/"$i"
+done
+#
+# we do have them in qt3-devel-doc already
+#
+rm -f $RPM_BUILD_ROOT/usr/lib/qt3/bin/assistant
+rm -f $RPM_BUILD_ROOT/usr/lib/qt3/%_lib/libqassistantclient.*
+rm -f $RPM_BUILD_ROOT/usr/lib/qt3/translations/assistant_de.qm
+
+for l in $RPM_BUILD_ROOT/usr/lib/qt3/%_lib/*.a; do
+ strip --strip-unneeded $l
+done
+
+%if %suse_version > 1020
+%fdupes -s $RPM_BUILD_ROOT
+%endif
+
+
+%pre
+if test -L usr/lib/qt3; then
+ rm usr/lib/qt3
+fi
+
+%clean
+rm -rf ${RPM_BUILD_ROOT}
+
+%post
+%run_ldconfig
+
+%post -n qt3-devel-tools
+%run_ldconfig
+
+%files
+%defattr(-,root,root)
+/usr/lib/qt3/bin/qembed
+/usr/lib/qt3/bin/qvfb
+
+%files -n qt3-mysql
+%defattr(-,root,root)
+%dir /usr/lib/qt3/plugins/sqldrivers
+/usr/lib/qt3/plugins/sqldrivers/libqsqlmysql*.so
+
+%files -n qt3-postgresql
+%defattr(-,root,root)
+%dir /usr/lib/qt3/plugins/sqldrivers
+/usr/lib/qt3/plugins/sqldrivers/libqsqlpsql*.so
+
+%files -n qt3-unixODBC
+%defattr(-,root,root)
+%dir /usr/lib/qt3/plugins/sqldrivers
+/usr/lib/qt3/plugins/sqldrivers/libqsqlodbc*.so
+
+%files -n qt3-sqlite
+%defattr(-,root,root)
+%dir /usr/lib/qt3/plugins/sqldrivers
+/usr/lib/qt3/plugins/sqldrivers/libqsqlite*.so
+
+%files -n qt3-devel-tools
+%defattr(-,root,root)
+#/usr/bin/designer
+#/usr/bin/linguist
+/usr/lib/qt3/bin/qconfig
+/usr/lib/qt3/bin/findtr
+/usr/lib/qt3/bin/qt20fix
+/usr/lib/qt3/bin/qtrename140
+/usr/lib/qt3/bin/msg2qm
+/usr/lib/qt3/bin/mergetr
+/usr/lib/qt3/bin/designer
+/usr/lib/qt3/bin/linguist
+/usr/lib/qt3/bin/qm2ts
+/usr/lib/qt3/bin/lrelease
+/usr/lib/qt3/bin/lupdate
+/usr/lib/qt3/templates
+/usr/lib/qt3/plugins/designer
+/usr/lib/qt3/phrasebooks
+/usr/lib/qt3/%_lib/libdesignercore.*
+/usr/lib/qt3/%_lib/libeditor.*
+/usr/share/applications/*
+/usr/share/pixmaps/designer3.png
+/usr/share/pixmaps/linguist3.png
+
+%files -n qt3-devel-examples
+%defattr(-,root,root)
+%dir /usr/lib/qt3/doc
+/%{_docdir}/qt3/examples
+/usr/lib/qt3/doc/examples
+
+%files -n qt3-man
+%defattr(-,root,root)
+%{_mandir}/man*/*
+
+%changelog -n qt3-extensions
diff --git a/opensuse/core/qt3/qt3-fix-cast.diff b/opensuse/core/qt3/qt3-fix-cast.diff
new file mode 100644
index 000000000..5ad34108b
--- /dev/null
+++ b/opensuse/core/qt3/qt3-fix-cast.diff
@@ -0,0 +1,13 @@
+Index: tools/qvfb/qvfbview.cpp
+================================================================================
+--- tools/qvfb/qvfbview.cpp
++++ tools/qvfb/qvfbview.cpp
+@@ -115,7 +115,7 @@
+ data = (unsigned char *)shmat( shmId, 0, 0 );
+ }
+
+- if ( (int)data == -1 )
++ if ( (long)data == -1 )
+ qFatal( "Cannot attach to shared memory" );
+
+ hdr = (QVFbHeader *)data;
diff --git a/opensuse/core/qt3/qt3-libpng14.diff b/opensuse/core/qt3/qt3-libpng14.diff
new file mode 100644
index 000000000..8df6929fa
--- /dev/null
+++ b/opensuse/core/qt3/qt3-libpng14.diff
@@ -0,0 +1,22 @@
+Index: qt-x11-free-3.3.8b/src/kernel/qpngio.cpp
+===================================================================
+--- qt-x11-free-3.3.8b.orig/src/kernel/qpngio.cpp
++++ qt-x11-free-3.3.8b/src/kernel/qpngio.cpp
+@@ -162,7 +162,7 @@ void setup_qt( QImage& image, png_struct
+ image.setColor( i, qRgba(c,c,c,0xff) );
+ }
+ if ( png_get_valid(png_ptr, info_ptr, PNG_INFO_tRNS) ) {
+- const int g = info_ptr->trans_values.gray;
++ const int g = info_ptr->trans_color.gray;
+ if (g < ncols) {
+ image.setAlphaBuffer(TRUE);
+ image.setColor(g, image.color(g) & RGB_MASK);
+@@ -190,7 +190,7 @@ void setup_qt( QImage& image, png_struct
+ info_ptr->palette[i].red,
+ info_ptr->palette[i].green,
+ info_ptr->palette[i].blue,
+- info_ptr->trans[i]
++ info_ptr->trans_alpha[i]
+ )
+ );
+ i++;
diff --git a/opensuse/core/qt3/qt3-never-strip.diff b/opensuse/core/qt3/qt3-never-strip.diff
new file mode 100644
index 000000000..86e09c1ef
--- /dev/null
+++ b/opensuse/core/qt3/qt3-never-strip.diff
@@ -0,0 +1,11 @@
+--- qmake/generators/unix/unixmake.cpp
++++ qmake/generators/unix/unixmake.cpp
+@@ -836,7 +836,7 @@
+ ret += "\n\t";
+ ret += QString(resource ? "-$(INSTALL_DIR)" : "-$(INSTALL_FILE)") + " \"" +
+ src_targ + "\" \"" + dst_targ + "\"";
+- if(!project->isActiveConfig("debug") && !project->isEmpty("QMAKE_STRIP") &&
++ if(false && !project->isActiveConfig("debug") && !project->isEmpty("QMAKE_STRIP") &&
+ (project->first("TEMPLATE") != "lib" || !project->isActiveConfig("staticlib"))) {
+ ret += "\n\t-" + var("QMAKE_STRIP");
+ if(project->first("TEMPLATE") == "lib" && !project->isEmpty("QMAKE_STRIPFLAGS_LIB"))
diff --git a/opensuse/core/qt3/qt3-no-date.diff b/opensuse/core/qt3/qt3-no-date.diff
new file mode 100644
index 000000000..fd505da0e
--- /dev/null
+++ b/opensuse/core/qt3/qt3-no-date.diff
@@ -0,0 +1,65 @@
+--- src/moc/moc.y 2008-01-15 20:09:13.000000000 +0100
++++ src/moc/moc.y 2009-02-07 19:35:47.703930527 +0100
+@@ -2833,7 +2833,7 @@
+ {
+ const char *hdr1 = "/****************************************************************************\n"
+ "** %s meta object code from reading C++ file '%s'\n**\n";
+- const char *hdr2 = "** Created: %s\n"
++ const char *hdr2 = "** Created:\n"
+ const char *hdr3 = "** WARNING! All changes made in this file will be lost!\n";
+ const char *hdr4 = "*****************************************************************************/\n\n";
+ int i;
+@@ -2872,7 +2872,7 @@
+ if ( i >= 0 )
+ fn = &g->fileName[i];
+ fprintf( out, hdr1, (const char*)qualifiedClassName(),(const char*)fn);
+- fprintf( out, hdr2, (const char*)dstr );
++ fprintf( out, hdr2 );
+ fprintf( out, hdr3 );
+ fprintf( out, hdr4 );
+
+diff -ru src/moc/moc_yacc.cpp src/moc/moc_yacc.cpp
+--- src/moc/moc_yacc.cpp 2008-01-14 13:24:36.000000000 +0100
++++ src/moc/moc_yacc.cpp 2009-02-07 19:35:30.039680400 +0100
+@@ -2872,7 +2872,7 @@
+ {
+ const char *hdr1 = "/****************************************************************************\n"
+ "** %s meta object code from reading C++ file '%s'\n**\n";
+- const char *hdr2 = "** Created: %s\n"
++ const char *hdr2 = "** Created: \n"
+ "** by: The Qt MOC ($Id: qt/moc_yacc.cpp 3.3.8 edited Feb 2 14:59 $)\n**\n";
+ const char *hdr3 = "** WARNING! All changes made in this file will be lost!\n";
+ const char *hdr4 = "*****************************************************************************/\n\n";
+@@ -2912,7 +2912,7 @@
+ if ( i >= 0 )
+ fn = &g->fileName[i];
+ fprintf( out, hdr1, (const char*)qualifiedClassName(),(const char*)fn);
+- fprintf( out, hdr2, (const char*)dstr );
++ fprintf( out, hdr2 );
+ fprintf( out, hdr3 );
+ fprintf( out, hdr4 );
+
+diff -ru tools/designer/uic/embed.cpp tools/designer/uic/embed.cpp
+--- tools/designer/uic/embed.cpp 2008-01-15 20:09:14.000000000 +0100
++++ tools/designer/uic/embed.cpp 2009-02-07 19:36:25.950931409 +0100
+@@ -137,7 +137,7 @@
+ for ( it = images.begin(); it != images.end(); ++it )
+ out << "** " << *it << "\n";
+ out << "**\n";
+- out << "** Created: " << QDateTime::currentDateTime().toString() << "\n";
++ out << "** Created:\n";
+ out << "**\n";
+ out << "** WARNING! All changes made in this file will be lost!\n";
+ out << "****************************************************************************/\n";
+diff -ru tools/designer/uic/main.cpp tools/designer/uic/main.cpp
+--- tools/designer/uic/main.cpp 2008-01-15 20:09:14.000000000 +0100
++++ tools/designer/uic/main.cpp 2009-02-07 19:36:36.603680916 +0100
+@@ -320,7 +320,7 @@
+ out << "/****************************************************************************" << endl;
+ out << "** Form "<< (impl? "implementation" : "interface") << " generated from reading ui file '" << fileName << "'" << endl;
+ out << "**" << endl;
+- out << "** Created: " << QDateTime::currentDateTime().toString() << endl;
++ out << "** Created:" << endl;
+ out << "**" << endl;
+ out << "** WARNING! All changes made in this file will be lost!" << endl;
+ out << "****************************************************************************/" << endl << endl;
diff --git a/opensuse/core/qt3/qt3-warnings.diff b/opensuse/core/qt3/qt3-warnings.diff
new file mode 100644
index 000000000..870017ded
--- /dev/null
+++ b/opensuse/core/qt3/qt3-warnings.diff
@@ -0,0 +1,13 @@
+Index: src/kernel/qimage.h
+===================================================================
+--- src/kernel/qimage.h (revision 594273)
++++ src/kernel/qimage.h (working copy)
+@@ -55,7 +55,7 @@ public:
+ QCString lang;
+
+ bool operator< (const QImageTextKeyLang& other) const
+- { return key < other.key || key==other.key && lang < other.lang; }
++ { return key < other.key || (key==other.key && lang < other.lang); }
+ bool operator== (const QImageTextKeyLang& other) const
+ { return key==other.key && lang==other.lang; }
+ };
diff --git a/opensuse/core/qt3/qt3.changes b/opensuse/core/qt3/qt3.changes
new file mode 100644
index 000000000..db0df1efa
--- /dev/null
+++ b/opensuse/core/qt3/qt3.changes
@@ -0,0 +1,2475 @@
+-------------------------------------------------------------------
+Fri Sep 23 10:16:33 UTC 2011 - coolo@suse.com
+
+- fix qt3-extensions
+
+-------------------------------------------------------------------
+Fri Apr 22 18:31:12 UTC 2011 - anixx@opensuse.org
+
+- changed compression to .tar.bz2
+
+-------------------------------------------------------------------
+Thu Apr 21 11:40:38 CEST 2011 - pth@suse.de
+
+- Don't try to patch in the version twice in qt-3.3.8c.diff.
+- Resync those patches that don't apply without offset.
+- Mark scriptlets in profile.d as being configuration files.
+- Remove the calls to run_ldconfig.
+
+-------------------------------------------------------------------
+Mon Apr 18 18:46:34 UTC 2011 - robxu9@gmail.com
+
+- a fix to the 3.3.8c patch
+
+-------------------------------------------------------------------
+Thu Mar 31 18:15:29 UTC 2011 - coolo@novell.com
+
+- another gcc 4.6 fix
+
+-------------------------------------------------------------------
+Mon Jan 31 21:23:51 UTC 2011 - robxu9@gmail.com
+
+- Update to version 3.3.8c, by the Trinity Project
+- pre_checkin.sh was not run as this caused too many unneccesary
+ changes to occur.
+- The translations tarball was left at version 3.3.8b.
+
+-------------------------------------------------------------------
+Sat Nov 20 02:26:08 CET 2010 - dmueller@suse.de
+
+- fix build against gcc 4.6
+
+-------------------------------------------------------------------
+Mon Nov 1 10:09:40 UTC 2010 - coolo@novell.com
+
+- fix libpng dependencies
+
+-------------------------------------------------------------------
+Wed Sep 1 13:22:38 UTC 2010 - pgajdos@novell.com
+
+- port to libpng14
+
+-------------------------------------------------------------------
+Wed May 5 19:42:33 UTC 2010 - coolo@novell.com
+
+- do not patch the symlink
+
+-------------------------------------------------------------------
+Mon Apr 5 21:06:20 CEST 2010 - dmueller@suse.de
+
+- fix -devel package requires
+- simplify requires of sub-specfiles
+
+-------------------------------------------------------------------
+Mon Apr 5 16:00:15 CEST 2010 - dmueller@suse.de
+
+- build against libpng12
+
+-------------------------------------------------------------------
+Thu Jan 21 14:24:13 CET 2010 - dmueller@suse.de
+
+- recommend kdelibs3-default-style (bnc#544581)
+
+-------------------------------------------------------------------
+Fri Dec 18 17:04:51 CET 2009 - jengelh@medozas.de
+
+- add baselibs.conf as a source
+- add baselib definitions for SPARC
+
+-------------------------------------------------------------------
+Fri Nov 13 14:28:47 CET 2009 - dmueller@suse.de
+
+- fix patches to apply with fuzz=0
+
+-------------------------------------------------------------------
+Tue Nov 3 19:14:30 UTC 2009 - coolo@novell.com
+
+- updated patches to apply with fuzz=0
+
+-------------------------------------------------------------------
+Tue Aug 11 11:24:13 CEST 2009 - dmueller@suse.de
+
+- fix popen leak (bnc#529615)
+
+-------------------------------------------------------------------
+Mon Feb 9 12:08:04 CET 2009 - coolo@suse.de
+
+- strip out date from .la files
+
+-------------------------------------------------------------------
+Sat Feb 7 20:43:40 CET 2009 - coolo@suse.de
+
+- do not put timestamps in generated sources
+
+-------------------------------------------------------------------
+Wed Jan 7 12:34:56 CET 2009 - olh@suse.de
+
+- obsolete old -XXbit packages (bnc#437293)
+
+-------------------------------------------------------------------
+Tue Nov 11 16:57:56 CET 2008 - ro@suse.de
+
+- SLE-11 uses PPC64 instead of PPC, adapt baselibs.conf
+
+-------------------------------------------------------------------
+Wed Sep 10 18:50:12 CEST 2008 - dmueller@suse.de
+
+- remove qt3-static package
+
+-------------------------------------------------------------------
+Mon Jul 21 21:20:47 CEST 2008 - dmueller@suse.de
+
+- more verbose qtimer debug
+
+-------------------------------------------------------------------
+Sun Jun 22 13:00:45 CEST 2008 - schwab@suse.de
+
+- Fix invalid array reference in font name parser.
+
+-------------------------------------------------------------------
+Thu Apr 10 12:54:45 CEST 2008 - ro@suse.de
+
+- added baselibs.conf file to build xxbit packages
+ for multilib support
+
+-------------------------------------------------------------------
+Mon Mar 10 16:48:36 CET 2008 - dmueller@suse.de
+
+- fix build with updated x.org
+
+-------------------------------------------------------------------
+Thu Feb 7 17:51:25 CET 2008 - dmueller@suse.de
+
+- fix memory corruption when removing CRTc's dynamically
+
+-------------------------------------------------------------------
+Sat Jan 19 07:19:25 CET 2008 - stbinner@suse.de
+
+- This version adds the GNU Public License version 3 as a
+ possible choice for licenses to the Open Source releases of Qt 3.
+- upstreaming of patches and few other minor bugfixes
+
+-------------------------------------------------------------------
+Tue Jan 15 01:42:37 CET 2008 - dmueller@suse.de
+
+- fix xrandr resize race (#335410)
+
+-------------------------------------------------------------------
+Thu Dec 6 01:32:32 CET 2007 - dmueller@suse.de
+
+- fix the build key for gcc 4.3
+
+-------------------------------------------------------------------
+Mon Dec 3 15:12:36 CET 2007 - dmueller@suse.de
+
+- back out khmer "fix" from 3.3.8, which apparently
+ made it worse (#345459)
+
+-------------------------------------------------------------------
+Tue Nov 20 20:25:18 CET 2007 - dmueller@suse.de
+
+- fix build with gcc 4.3 again
+
+-------------------------------------------------------------------
+Mon Oct 1 11:48:51 CEST 2007 - dmueller@suse.de
+
+- fix build with gcc 4.3
+
+-------------------------------------------------------------------
+Fri Sep 7 12:32:22 CEST 2007 - dmueller@suse.de
+
+- fix off-by-one in utf8 decoder (#304249, CVE-2007-4137)
+- fix typo in QDate::fromString()
+
+-------------------------------------------------------------------
+Wed Aug 29 17:08:22 CEST 2007 - llunak@suse.cz
+
+- fix reading MNG files, visible in Kickoff (#278548)
+- remove patching of symlinks from the immodule patch
+- improve support for compositing (qt-copy patches #0079,#0080)
+
+-------------------------------------------------------------------
+Fri Aug 24 18:39:04 CEST 2007 - dmueller@suse.de
+
+- fix format string issues (#291754, CVE-2007-3388)
+- fix xrandr 1.2 detection
+
+-------------------------------------------------------------------
+Thu Jul 5 17:25:18 CEST 2007 - coolo@suse.de
+
+- package desktop files and png files
+
+-------------------------------------------------------------------
+Thu Jun 21 12:04:33 CEST 2007 - stbinner@suse.de
+
+- run fdupes in qt3-extensions.spec
+
+-------------------------------------------------------------------
+Thu May 24 19:15:38 CEST 2007 - dmueller@suse.de
+
+- redo the last change in the correct spec file
+
+-------------------------------------------------------------------
+Wed May 23 17:08:39 CEST 2007 - dmueller@suse.de
+
+- qt3-examples -> qt3-devel-examples
+
+-------------------------------------------------------------------
+Thu May 17 06:49:50 CEST 2007 - stbinner@suse.de
+
+- removed some historic stuff from the spec file
+
+-------------------------------------------------------------------
+Tue May 8 14:32:40 CEST 2007 - dmueller@suse.de
+
+- trust libxinerama only if it provides more screens
+ than xrandr crtcs (#264199)
+
+-------------------------------------------------------------------
+Fri May 4 19:06:40 CEST 2007 - dmueller@suse.de
+
+- fix permissions of qmake specs
+
+-------------------------------------------------------------------
+Wed May 2 11:50:07 CEST 2007 - coolo@suse.de
+
+- remove Suse-translate from desktop file
+- remove obsolete suse version support
+
+-------------------------------------------------------------------
+Mon Apr 30 14:39:40 CEST 2007 - stbinner@suse.de
+
+- fix build of qt3-devel-doc with desktop-file-validate run
+
+-------------------------------------------------------------------
+Mon Apr 16 16:10:59 CEST 2007 - dmueller@suse.de
+
+- temporarily disable Xrandr 1.2 support until (#264199) is
+ resolved
+- use -Bsymbolic-functions
+
+-------------------------------------------------------------------
+Sun Apr 1 20:40:04 CEST 2007 - dmueller@suse.de
+
+- fix utf8 decoder (#259187, CVE-2007-0242)
+
+-------------------------------------------------------------------
+Thu Mar 29 18:02:30 CEST 2007 - dmueller@suse.de
+
+- Fix XRandr 1.2 support
+
+-------------------------------------------------------------------
+Fri Mar 16 14:52:22 CET 2007 - dmueller@suse.de
+
+- call XftDefaultSubstitute (#255330)
+
+-------------------------------------------------------------------
+Thu Mar 15 11:07:44 CET 2007 - dmueller@suse.de
+
+- update font fix patch (#244579)
+
+-------------------------------------------------------------------
+Mon Mar 12 16:09:29 CET 2007 - dmueller@suse.de
+
+- enable tablet support (#253392)
+- add default substitution for font queries (#244579)
+
+-------------------------------------------------------------------
+Tue Mar 6 19:37:48 CET 2007 - dmueller@suse.de
+
+- fix mysql driver crash on shutdown (#251222)
+
+-------------------------------------------------------------------
+Sun Feb 25 11:52:26 CET 2007 - dmueller@suse.de
+
+- update to 3.3.8:
+ * changelog is under /usr/share/doc/packages/qt3/changes-3.3.8
+
+-------------------------------------------------------------------
+Wed Feb 21 13:00:52 CET 2007 - dmueller@suse.de
+
+- fix build for 9.3
+
+-------------------------------------------------------------------
+Wed Feb 7 10:39:13 CET 2007 - dmueller@suse.de
+
+- also build qt3-static as full-config
+
+-------------------------------------------------------------------
+Mon Feb 5 15:18:34 CET 2007 - stbinner@suse.de
+
+- fix build of qt3-extensions on 9.3
+
+-------------------------------------------------------------------
+Fri Feb 2 15:41:36 CET 2007 - stbinner@suse.de
+
+- fix changelog chronological order
+
+-------------------------------------------------------------------
+Wed Jan 31 21:40:07 CET 2007 - dmueller@suse.de
+
+- add a sanity check to ensure that we have a full version
+- fix compile warnings in headers
+
+-------------------------------------------------------------------
+Tue Jan 9 15:36:14 CET 2007 - dmueller@suse.de
+
+- drop misfuzzed patch
+
+-------------------------------------------------------------------
+Mon Jan 8 18:35:16 CET 2007 - dmueller@suse.de
+
+- add patch to fix indic rendering issue
+
+-------------------------------------------------------------------
+Tue Oct 31 13:18:44 CET 2006 - dmueller@suse.de
+
+- add patch to fix han localisation issue (#216183)
+- update qt-debug-timer patch to output more verbose debug
+- add patch to fix xinerama issue with popupmenus (#216235)
+
+-------------------------------------------------------------------
+Fri Oct 20 15:54:30 CEST 2006 - dmueller@suse.de
+
+- update to 3.3.7:
+ * include CVE-2006-4811 patch
+
+-------------------------------------------------------------------
+Thu Oct 19 15:21:51 CEST 2006 - dmueller@suse.de
+
+- add patch for integer overflow in QPixmap/QImage
+ (#212544, CVE-2006-4811)
+
+-------------------------------------------------------------------
+Tue Oct 10 23:31:01 CEST 2006 - dmueller@suse.de
+
+- add patch for qtimer debugging
+
+-------------------------------------------------------------------
+Wed Oct 4 19:39:56 CEST 2006 - dmueller@suse.de
+
+- fix headers to compile in -pedantic mode
+
+-------------------------------------------------------------------
+Thu Sep 14 13:27:03 CEST 2006 - dmueller@suse.de
+
+- don't install static libs as executable
+
+-------------------------------------------------------------------
+Fri Sep 1 16:18:07 CEST 2006 - llunak@suse.cz
+
+- Add patches with Xinerama improvements.
+
+-------------------------------------------------------------------
+Thu Aug 17 13:42:28 CEST 2006 - stbinner@suse.de
+
+- fix qt3-devel-tools file conflict with qt-devel-doc
+
+-------------------------------------------------------------------
+Tue Aug 1 14:47:18 CEST 2006 - stbinner@suse.de
+
+- disable noisy debug message in qt-x11-immodule-unified diff
+
+-------------------------------------------------------------------
+Sun Jul 9 21:39:54 CEST 2006 - stbinner@suse.de
+
+- fix {designer3,linguist}.desktop starting Qt4 versions (#190135)
+
+-------------------------------------------------------------------
+Tue Jul 04 15:12:18 CEST 2006 - mfabian@suse.de
+
+- update qt-x11-immodule-unified diff to 20060318 version.
+ This update already includes the following patches:
+ + fix-x11-immodule.diff
+ + disable-inputmethod-for-passords.patch
+ + qt-x11-immodule-capitalization-fix.diff
+ + fix-im-crash-on-exit.diff
+ + fix-immodule-buffer-overflow.diff
+ + qt-x11-immodule-qtextedit-fix.diff
+ + qt-x11-immodule-focus-handling.diff
+ + qt-x11-immodule-fix-inputcontext-crash.diff
+ which are thus removed.
+
+-------------------------------------------------------------------
+Wed Jun 28 10:07:30 CEST 2006 - dmueller@suse.de
+
+- fix $QT_SYSTEM_DIR (#188217)
+
+-------------------------------------------------------------------
+Fri Jun 9 15:25:49 CEST 2006 - llunak@suse.de
+
+- add $QT_SYSTEM_DIR (#183059)
+
+-------------------------------------------------------------------
+Wed May 31 15:51:01 CEST 2006 - adrian@suse.de
+
+- remove BuildRequires libdrm-devel
+
+-------------------------------------------------------------------
+Wed May 31 13:24:56 CEST 2006 - dmueller@suse.de
+
+- fix xpm image loading problem
+- add performance regression fix
+- add asian font loading fix
+
+-------------------------------------------------------------------
+Mon May 29 08:41:44 CEST 2006 - adrian@suse.de
+
+- revert requires macro, this breaks the build system mapping
+- require right packages in -devel for < 10.1
+
+-------------------------------------------------------------------
+Fri May 26 19:40:44 CEST 2006 - dmueller@suse.de
+
+- fix build
+
+-------------------------------------------------------------------
+Fri May 26 10:42:43 CEST 2006 - dmueller@suse.de
+
+- 3.3.6 update
+ * numerous bugfixes and translations
+
+-------------------------------------------------------------------
+Wed May 10 17:12:34 CEST 2006 - dmueller@suse.de
+
+- drop substitutions from global rc file (#171513)
+
+-------------------------------------------------------------------
+Fri Apr 14 01:46:36 CEST 2006 - dmueller@suse.de
+
+- drop linguist3.png/desktop as its unused and install
+ linguist.desktop instead (fixes build failure).
+
+-------------------------------------------------------------------
+Mon Apr 10 10:40:11 CEST 2006 - dmueller@suse.de
+
+- strip installed static libraries
+- fix file conflict with Qt4 packages
+
+-------------------------------------------------------------------
+Mon Apr 3 16:34:14 CEST 2006 - dmueller@suse.de
+
+- restore libraryPaths which broke instsys (#162930)
+
+-------------------------------------------------------------------
+Thu Mar 30 12:49:05 CEST 2006 - coolo@suse.de
+
+- update qtrc to the real values avoiding dark gray platinum even
+ if not overwritten with desktop settings
+
+-------------------------------------------------------------------
+Tue Mar 21 14:59:49 CET 2006 - dmueller@suse.de
+
+- update patch for QLabel layout issues to the one from Qt 3.3.7
+
+-------------------------------------------------------------------
+Fri Mar 17 18:39:04 CET 2006 - dmueller@suse.de
+
+- add patch for QLabel layout management issues (#153029)
+
+-------------------------------------------------------------------
+Fri Mar 17 12:23:30 CET 2006 - dmueller@suse.de
+
+- fix crash on painting > 32000 chars at once
+- fix error in wrapping japanese text
+- fix QFile::flush() not setting error status
+- fix window gravity being wrong for RTL
+
+-------------------------------------------------------------------
+Tue Mar 14 00:22:32 CET 2006 - dmueller@suse.de
+
+- fix filelist
+
+-------------------------------------------------------------------
+Mon Mar 13 17:02:09 CET 2006 - dmueller@suse.de
+
+- build qt3-devel-doc as noarch package
+
+-------------------------------------------------------------------
+Tue Mar 7 10:49:56 CET 2006 - dmueller@suse.de
+
+- moving libqassistantclient to -devel (#155519) and assistant
+ to qt3.
+- translation update
+- fix assistant invocation to prefer Qt3's assistant over Qt 4.x
+
+-------------------------------------------------------------------
+Wed Feb 22 14:00:00 CET 2006 - dmueller@suse.de
+
+- fix crash when not able to load imswitch (#117443)
+
+-------------------------------------------------------------------
+Sat Feb 18 01:15:54 CET 2006 - dmueller@suse.de
+
+- add more immodule fixes
+- fix build of qt3-extensions
+- remove sections for SL < 9.2
+
+-------------------------------------------------------------------
+Fri Feb 17 16:47:41 CET 2006 - dmueller@suse.de
+
+- fix crash on shutdown (#151831)
+
+-------------------------------------------------------------------
+Mon Feb 13 15:52:19 CET 2006 - coolo@suse.de
+
+- update translations
+
+-------------------------------------------------------------------
+Mon Feb 6 05:22:44 CET 2006 - zsu@suse.de
+
+- Add patch qt3-khmer-script.patch to fix a rendering issue of Khmer
+ script (by Jens Herden<jens@khmeros.info>, #147190).
+
+-------------------------------------------------------------------
+Sat Jan 28 10:48:06 CET 2006 - coolo@suse.de
+
+- really install the icon
+
+-------------------------------------------------------------------
+Fri Jan 27 20:02:59 CET 2006 - llunak@suse.cz
+
+- fix rubberband.diff to emit selectionChanged() properly (#132920)
+
+-------------------------------------------------------------------
+Fri Jan 27 12:24:41 CET 2006 - coolo@suse.de
+
+- avoid file conflict with qt package
+
+-------------------------------------------------------------------
+Fri Jan 27 08:08:10 CET 2006 - coolo@suse.de
+
+- fix qt3.sh
+
+-------------------------------------------------------------------
+Fri Jan 27 02:21:53 CET 2006 - mls@suse.de
+
+- converted neededforbuild to BuildRequires
+
+-------------------------------------------------------------------
+Wed Jan 25 18:06:26 CET 2006 - dmueller@suse.de
+
+- set $QTDIR in /etc/profile.d/qt3.(c)sh
+
+-------------------------------------------------------------------
+Sat Dec 3 14:30:43 CET 2005 - coolo@suse.de
+
+- build with -Bdirect if available
+- updating font patch
+
+-------------------------------------------------------------------
+Fri Dec 2 00:11:21 CET 2005 - dmueller@suse.de
+
+- build with -fno-strict-aliasing
+
+-------------------------------------------------------------------
+Wed Nov 23 10:18:29 CET 2005 - dmueller@suse.de
+
+- unify spec files via a common patch/sources section
+ and adjust spec files accordingly
+- add /etc/profile.d hook to put qmake in the path (#134377)
+- drop fast-malloc patch for all packages (#134563)
+
+-------------------------------------------------------------------
+Fri Nov 18 15:20:21 CET 2005 - stbinner@suse.de
+
+- only disable FcFontSort patch for released distributions
+
+-------------------------------------------------------------------
+Fri Nov 18 12:08:43 CET 2005 - stbinner@suse.de
+
+- disable FcFontSort patch because of immaturity
+
+-------------------------------------------------------------------
+Fri Nov 11 15:48:07 CET 2005 - dmueller@suse.de
+
+- avoid crashes after QListView::clear()
+
+-------------------------------------------------------------------
+Wed Nov 2 15:52:04 CET 2005 - coolo@suse.de
+
+- avoid FcFontSort as it's very expensive
+
+-------------------------------------------------------------------
+Thu Oct 27 14:38:16 CEST 2005 - stbinner@suse.de
+
+- extend fix-key-release-event-with-imm.diff to fix another Immodule
+ related key release event bug (#130727)
+
+-------------------------------------------------------------------
+Wed Oct 12 19:25:52 CEST 2005 - dmueller@suse.de
+
+- update -Werror patch to catch one more case
+
+-------------------------------------------------------------------
+Mon Oct 10 16:58:30 CEST 2005 - dmueller@suse.de
+
+- add patch to fix broken key compression (#121049)
+
+-------------------------------------------------------------------
+Sat Oct 8 00:04:41 CEST 2005 - dmueller@suse.de
+
+- patch cleanup
+
+-------------------------------------------------------------------
+Wed Oct 5 13:59:53 CEST 2005 - dmueller@suse.de
+
+- add 0065-fix_werror_with_gcc4.patch (#119209)
+
+-------------------------------------------------------------------
+Wed Sep 28 16:32:43 CEST 2005 - stbinner@suse.de
+
+- removed historic "Autoreqprov:off" leftover
+
+-------------------------------------------------------------------
+Wed Sep 28 15:27:34 CEST 2005 - stbinner@suse.de
+
+- add a patch to fix capitalization of Immodule strings
+
+-------------------------------------------------------------------
+Mon Sep 26 10:57:35 CEST 2005 - coolo@suse.de
+
+- fix build on x86_64
+
+-------------------------------------------------------------------
+Mon Sep 19 12:40:22 CEST 2005 - mfabian@suse.de
+
+- Bugzilla #117115: enable input methods in qlineedit widgets
+ only when "mode == Normal" (i.e. not when "mode == NoEcho" or
+ "mode == Password"). Using input methods while inputting
+ passwords is useless and confusing.
+
+-------------------------------------------------------------------
+Fri Sep 16 23:06:14 CEST 2005 - schwab@suse.de
+
+- Never strip gratuitously.
+
+-------------------------------------------------------------------
+Thu Sep 15 10:57:05 CEST 2005 - stbinner@suse.de
+
+- update to version 3.3.5
+
+-------------------------------------------------------------------
+Mon Sep 5 13:04:30 CEST 2005 - coolo@suse.de
+
+- layout popup menus correctly (#113048)
+
+-------------------------------------------------------------------
+Fri Aug 19 17:04:02 CEST 2005 - llunak@suse.cz
+
+- Place dialog properly for systray icons on xinerama (#104794).
+
+-------------------------------------------------------------------
+Fri Jul 29 18:24:24 CEST 2005 - dmueller@suse.de
+
+- add Q_EXPORT visibility support
+- Fix gcc 4.0.x compiler detection for qt plugin buildkey
+
+-------------------------------------------------------------------
+Thu Jun 23 14:37:00 CEST 2005 - mrueckert@suse.de
+
+- Applied patch from Lubos Lunak to fix drag'n'drop when the
+ visible window is not at the top of the window stack.
+
+-------------------------------------------------------------------
+Fri Jun 10 17:28:47 CEST 2005 - adrian@suse.de
+
+- Apply workaround from Simon Hausmann to avoid miscompilation with gcc4
+
+-------------------------------------------------------------------
+Tue Jun 7 16:15:54 CEST 2005 - adrian@suse.de
+
+- do not trigger -debug configure flag on -g, but use it for beta
+ distribution
+
+-------------------------------------------------------------------
+Tue May 31 10:49:30 CEST 2005 - adrian@suse.de
+
+- require freeglut-devel instead of XFree86-Mesa-devel
+
+-------------------------------------------------------------------
+Fri Apr 15 19:52:35 CEST 2005 - mfabian@suse.de
+
+- Bugzilla #74133: check for some more glyphs for Katakana and
+ Hiragana, especially also check for all the glyphs which are
+ checked for Han_Japanese. This usually guarantees that the same
+ font is used for Katakana and Hiragana as for Japanese Kanji,
+ which is what we want.
+
+-------------------------------------------------------------------
+Fri Apr 8 15:28:36 CEST 2005 - uli@suse.de
+
+- fixed to build with GCC4 on ARM
+
+-------------------------------------------------------------------
+Mon Apr 4 15:02:41 CEST 2005 - adrian@suse.de
+
+- apply patches from qt-copy, fixes for mouse handling in popups
+
+-------------------------------------------------------------------
+Thu Mar 24 09:57:01 CET 2005 - adrian@suse.de
+
+- update font mappings in qtrc for asian languages (#74363)
+
+-------------------------------------------------------------------
+Wed Mar 16 17:54:12 CET 2005 - adrian@suse.de
+
+- fix possible crash in qtranslator (#71968, by Lubos)
+
+-------------------------------------------------------------------
+Fri Mar 4 15:50:50 CET 2005 - adrian@suse.de
+
+- fix loading of style plugins for lib/lib64 mixed systesm (by Lubos)
+
+-------------------------------------------------------------------
+Fri Feb 25 13:26:56 CET 2005 - adrian@suse.de
+
+- fix all Exec= lines for menu entries
+
+-------------------------------------------------------------------
+Fri Feb 11 18:29:14 CET 2005 - adrian@suse.de
+
+- apply patch for rubberband selections from Andre Moreira Magalhaes
+
+-------------------------------------------------------------------
+Wed Feb 9 17:55:47 CET 2005 - adrian@suse.de
+
+- add qclipboard hack to avoid freezes from qt-copy again
+
+-------------------------------------------------------------------
+Wed Feb 2 16:35:44 CET 2005 - adrian@suse.de
+
+- fix plugin loading for the KDE integration
+
+-------------------------------------------------------------------
+Wed Jan 26 17:49:46 CET 2005 - adrian@suse.de
+
+- update to version 3.3.4
+- reenable limit size patch to keep BC
+- remove qclipboard fix, it got merged
+- remove bidi fixes, they got merged
+- remove gif handler fixes, they got merged
+- apply KDE dialog integration code from Lubos
+- revert some changes in imm code to solve a problem with missing
+ key release events
+
+-------------------------------------------------------------------
+Fri Jan 14 14:12:06 CET 2005 - adrian@suse.de
+
+- update imm patch to version from 20041203
+- disable image size patch for now, it broke printing of large images
+
+-------------------------------------------------------------------
+Wed Jan 5 13:37:00 CET 2005 - adrian@suse.de
+
+- reenable the SHM patch again
+- add qtimm patch to solve an issue with Opera
+- remove binary links from /usr/bin/, they do conflict with Qt 4
+
+-------------------------------------------------------------------
+Mon Nov 22 12:06:33 CET 2004 - ro@suse.de
+
+- "sed -i" does not work on old distributions
+
+-------------------------------------------------------------------
+Tue Nov 16 11:04:55 CET 2004 - adrian@suse.de
+
+- package icon files for desktop entries
+
+-------------------------------------------------------------------
+Mon Nov 8 16:07:11 CET 2004 - coolo@suse.de
+
+- improve Waldo's patch to limit image dimensions
+
+-------------------------------------------------------------------
+Fri Oct 29 23:29:44 CEST 2004 - schwab@suse.de
+
+- Revert last change to png writing.
+
+-------------------------------------------------------------------
+Tue Oct 26 10:51:34 CEST 2004 - adrian@suse.de
+
+- fix from Lubos for full screen mode switching on 64bit (#46972)
+
+-------------------------------------------------------------------
+Mon Oct 25 14:26:40 CEST 2004 - schwab@suse.de
+
+- Extend last change to png writing.
+
+-------------------------------------------------------------------
+Sat Oct 23 23:23:21 CEST 2004 - schwab@suse.de
+
+- Fix endian bug in png reading.
+
+-------------------------------------------------------------------
+Thu Oct 14 18:09:56 CEST 2004 - adrian@suse.de
+
+- fix assitant zoom functionality, patch by Waldo (#45688)
+
+-------------------------------------------------------------------
+Mon Oct 11 18:11:32 CEST 2004 - adrian@suse.de
+
+- fix requires of qt3-devel for new x.org packages
+
+-------------------------------------------------------------------
+Wed Sep 29 10:27:12 CEST 2004 - adrian@suse.de
+
+- prefer MiscGlyphSymbol fonts with tics over others (#46280)
+- enable BiDi support by default
+
+-------------------------------------------------------------------
+Tue Sep 28 11:45:55 CEST 2004 - mfabian@suse.de
+
+- Bugzilla #46216: make "On The Spot" the default input style
+ for Qt.
+
+-------------------------------------------------------------------
+Sat Sep 25 13:46:59 CEST 2004 - adrian@suse.de
+
+- prefer the .lib64.so extension on lib64 systems, but do not
+ require it anymore
+
+-------------------------------------------------------------------
+Fri Sep 24 22:10:29 CEST 2004 - adrian@suse.de
+
+- fix load of plugins on lib64 systems. The plugins do need a
+ .lib64.so extension now
+
+-------------------------------------------------------------------
+Wed Sep 15 17:52:55 CEST 2004 - adrian@suse.de
+
+- add two more glyphs to simplified chinese detection. (#44059)
+
+-------------------------------------------------------------------
+Tue Sep 14 13:57:01 CEST 2004 - adrian@suse.de
+
+- handle also hongkong chinese local in a correct way (#44059)
+- prefer chinese fonts via optional glyphs, but use also
+ the free ones, if no commercial font is avaible (#44059)
+
+-------------------------------------------------------------------
+Mon Sep 13 20:14:31 CEST 2004 - adrian@suse.de
+
+- hopefully solve the chinese font detection problems (#44059)
+
+-------------------------------------------------------------------
+Mon Sep 13 11:17:50 CEST 2004 - adrian@suse.de
+
+- fix build for old distributions
+- prepare qt for konsole transparency mode (via composite extension)
+
+-------------------------------------------------------------------
+Fri Sep 10 17:43:56 CEST 2004 - mfabian@suse.de
+
+- update to qt-x11-immodule-unified-qt3.3.3-20040910.diff which
+ merges the previous three patches (With help from Adrian to
+ make it build).
+
+-------------------------------------------------------------------
+Fri Sep 10 16:34:52 CEST 2004 - mfabian@suse.de
+
+- add qt-x11-immodule-unified-qt3.3.3-r123-event-inversion-20040909.diff
+ to fix the endless loop problem when using M17N-t-latin1-post
+ or M17N-vi-viqr. See also
+ http://freedesktop.org/pipermail/immodule-qt/2004-September/000447.html
+ and followups. Patch thanks to Yamaken.
+
+-------------------------------------------------------------------
+Wed Sep 8 10:13:26 CEST 2004 - adrian@suse.de
+
+- add 3.3.3 regression fixes in pre-3.3.4.diff
+- add bidi fixes from qt-copy
+- add qpixmap mitshm support from Lubos
+- update immodule patch to stable release 20040819
+- adding event inversion fix for immodule from Zhe Su
+
+-------------------------------------------------------------------
+Fri Sep 3 15:06:55 CEST 2004 - adrian@suse.de
+
+- udpate qt immodule patch to snapshot from 20040814
+
+-------------------------------------------------------------------
+Thu Aug 26 17:09:14 CEST 2004 - adrian@suse.de
+
+- disable explicit debug flags again
+
+-------------------------------------------------------------------
+Mon Aug 23 13:23:02 CEST 2004 - adrian@suse.de
+
+- apply workaround for broken focus handling cause by the xim
+ patch due to a bug in X for released distributions (by Lubos)
+
+-------------------------------------------------------------------
+Wed Aug 18 12:06:15 CEST 2004 - adrian@suse.de
+
+- enable full debug compile, if -g is in RPM_OPT_FLAGS
+
+-------------------------------------------------------------------
+Tue Aug 17 14:46:19 CEST 2004 - coolo@suse.de
+
+- install qt3 after grep
+
+-------------------------------------------------------------------
+Tue Aug 17 07:27:13 CEST 2004 - adrian@suse.de
+
+- apply patch from Waldo to be able to limit the size of loaded
+ images. Important for khtml (#43841)
+- apply fix to handle the side pixmap of the kmenu correctly (0047)
+- apply KToolBarButton fix (0051)
+
+-------------------------------------------------------------------
+Fri Aug 13 06:19:32 CEST 2004 - adrian@suse.de
+
+- fix gif handling (#43356)
+
+-------------------------------------------------------------------
+Thu Aug 12 08:23:16 CEST 2004 - adrian@suse.de
+
+- update to version 3.3.3
+- remove obsolete patches
+
+-------------------------------------------------------------------
+Tue Aug 3 16:16:53 CEST 2004 - adrian@suse.de
+
+- add patch to support scim
+
+-------------------------------------------------------------------
+Wed Jun 9 15:21:27 CEST 2004 - adrian@suse.de
+
+- update asian font mappings for commercial japanese fonts
+ (by mfabian)
+
+-------------------------------------------------------------------
+Wed Jun 2 16:17:53 CEST 2004 - adrian@suse.de
+
+- fix libGL loading in the right way, no .so link is needed anymore
+ again
+
+-------------------------------------------------------------------
+Wed May 26 16:47:34 CEST 2004 - adrian@suse.de
+
+- load libGL via .so link again (due to the different possible
+ setups #41118)
+- libXmu gets still loaded via hardcoded path and version
+
+-------------------------------------------------------------------
+Tue Apr 27 15:55:48 CEST 2004 - adrian@suse.de
+
+- update to version 3.3.2
+ * remove obsolete patches
+- do apply %patch16
+
+-------------------------------------------------------------------
+Fri Apr 23 09:26:44 CEST 2004 - adrian@suse.de
+
+- disable atk support for released distributions
+
+-------------------------------------------------------------------
+Thu Apr 22 11:40:17 CEST 2004 - coolo@suse.de
+
+- another try to fix wrong font caching also for japanese/chinese
+
+-------------------------------------------------------------------
+Tue Apr 20 11:34:13 CEST 2004 - coolo@suse.de
+
+- apply fix for wrong font caching (#39175)
+
+-------------------------------------------------------------------
+Fri Apr 16 11:42:30 CEST 2004 - adrian@suse.de
+
+- apply fix for opentype aliasing issues
+
+-------------------------------------------------------------------
+Tue Apr 13 10:50:22 CEST 2004 - adrian@suse.de
+
+- fix OpenGL support, if no -devel package is installed (#38857)
+- fix xcursor support
+- add current snapshot of Qt-ATK bridge patch
+ (disabled as long USE_QACCESSIBLE enviroment variable isn't set)
+
+-------------------------------------------------------------------
+Sat Apr 3 10:07:55 CEST 2004 - adrian@suse.de
+
+- apply 0043-fix_expired_cookie_crash.diff from qt-copy(by Dirk)
+ * qt based applications can crash in ssh sessions with new
+ openssh (#38185)
+
+-------------------------------------------------------------------
+Wed Mar 31 17:47:33 CEST 2004 - mfabian@suse.de
+
+- Bugzilla #37720:
+ add font substitutions for "SUSE*" fonts to default qtrc.
+
+-------------------------------------------------------------------
+Thu Mar 25 10:12:37 CET 2004 - coolo@suse.de
+
+- fix for richtext tags (in knotes)
+- fix for fonts with multiple scripts (#36583)
+- fix for custom resolutions
+
+-------------------------------------------------------------------
+Tue Mar 16 16:29:42 CET 2004 - adrian@suse.de
+
+- fix for command line handling (XIM in QApplication)(#35881)
+- fix double packaging of qassistant translations
+
+-------------------------------------------------------------------
+Mon Mar 15 17:55:57 CET 2004 - adrian@suse.de
+
+- define a default Font again. (Sans Serif with 10points)
+ (#36014)
+
+-------------------------------------------------------------------
+Wed Mar 10 08:44:03 CET 2004 - adrian@suse.de
+
+- fix for xcursor cache hangling (by Lubos)
+- move assistant to -devel-doc package
+
+-------------------------------------------------------------------
+Thu Mar 4 22:10:52 CET 2004 - adrian@suse.de
+
+- apply fix for not found monospaced fonts without Euro glyph
+ (Patch by Lars Knoll)
+
+-------------------------------------------------------------------
+Thu Mar 4 13:53:53 CET 2004 - adrian@suse.de
+
+- apply different bugfix and speed enhancement patches from qt-copy
+ as recommended by Lubos
+ * 0001: DnD optimisation
+ * 0002: Active Window Fix
+ * 0007: MITSHM extension support for QPixmap<>Qimage conversation
+ * 0037: dnd timestamp fix
+ * 0038: dragobject prefer fix
+
+-------------------------------------------------------------------
+Mon Mar 1 11:39:25 CET 2004 - adrian@suse.de
+
+- update to final 3.3.1 version
+- disable fast-malloc for > 9.0, nptl does work good enough
+- add qclipboard-recursion-fix from Lubos
+- further 64bit aliasing fixes
+
+-------------------------------------------------------------------
+Mon Feb 16 14:43:49 CET 2004 - adrian@suse.de
+
+- update to current snapshot (3.3.1-snapshot-20040216)
+- build opentype with -fno-strict-aliasing
+
+-------------------------------------------------------------------
+Mon Feb 9 17:02:41 CET 2004 - adrian@suse.de
+
+- fix non-latin1 QString handling
+ (patch from Roman Stepanov)
+
+-------------------------------------------------------------------
+Wed Feb 4 20:24:37 CET 2004 - adrian@suse.de
+
+- update to version 3.3.0 final
+- disable 3rdparty source and use system libraries
+
+-------------------------------------------------------------------
+Thu Jan 29 14:05:26 CET 2004 - adrian@suse.de
+
+- update to snapshot 20040129
+- use original qstring again, kprinter got fixed
+
+-------------------------------------------------------------------
+Sun Jan 25 17:53:03 CET 2004 - adrian@suse.de
+
+- update to snapshot 20040125
+- revert qstring changes
+
+-------------------------------------------------------------------
+Tue Jan 13 14:52:07 CET 2004 - adrian@suse.de
+
+- update to snapshot 20040113
+
+-------------------------------------------------------------------
+Mon Dec 29 11:48:49 CET 2003 - adrian@suse.de
+
+- update to snapshot from 20031229 to get KDE compiling again
+- remove upstream included translation files
+- cleanup stuff not anymore needed
+- do not build sqlite plugin with (broken) sqlite sources from qt
+ tar ball anymore
+
+-------------------------------------------------------------------
+Thu Dec 11 13:10:37 CET 2003 - adrian@suse.de
+
+- update to version 3.3 beta 1
+ * solves the remaining issues with dlopen GL
+
+-------------------------------------------------------------------
+Tue Dec 9 17:20:56 CET 2003 - adrian@suse.de
+
+- add KDE plugin path for qt 3.3
+
+-------------------------------------------------------------------
+Thu Dec 4 11:25:27 CET 2003 - adrian@suse.de
+
+- update to snapshot 20031204
+- do not link against GL libs anymore, but still support GL via dlopen
+ apps and libs beside libbqt* are still linked against GL for now
+- build fix for qt3-extensions
+
+-------------------------------------------------------------------
+Tue Dec 2 17:54:34 CET 2003 - adrian@suse.de
+
+- update to current 3.3 snapshot ( 20031202 - pre beta 1)
+ * obsoletes several patches
+ * IPv6 support
+- temporary disabled PostgreSQL support
+- add SQLite support
+
+-------------------------------------------------------------------
+Fri Nov 21 11:05:33 CET 2003 - adrian@suse.de
+
+- drop not applyed font_fixes patch and add the old Xft2 fixes
+ again, to support displays without Render extension.
+
+-------------------------------------------------------------------
+Fri Nov 14 14:30:11 CET 2003 - adrian@suse.de
+
+- update to version 3.2.3 and usual patch cleanup
+
+-------------------------------------------------------------------
+Thu Oct 23 09:52:28 CEST 2003 - adrian@suse.de
+
+- build without -mminimal-toc on ppc64
+- apply crash fix from TT for some fonts in XLFD mode
+
+-------------------------------------------------------------------
+Thu Oct 16 16:00:46 CEST 2003 - adrian@suse.de
+
+- update to version 3.2.2
+ * font fixes patch is not applied intentionaly, for testing
+ plain qt behaviour for now.
+
+-------------------------------------------------------------------
+Thu Oct 2 12:06:08 CEST 2003 - adrian@suse.de
+
+- require freeglut-devel, instead of mesaglut-devel for > 9.0
+
+-------------------------------------------------------------------
+Tue Sep 30 09:25:31 CEST 2003 - coolo@suse.de
+
+- using the right tool to compile translation files
+
+-------------------------------------------------------------------
+Thu Sep 25 13:05:03 CEST 2003 - adrian@suse.de
+
+- update fontconfig patch again, fixes multiple listing of fonts
+- do not complain anymore about not matching plugin
+
+-------------------------------------------------------------------
+Sun Sep 21 15:02:56 CEST 2003 - adrian@suse.de
+
+- prefer Nimbus fonts, instead of using asian fonts, if possible
+ (the asian fonts have some broken latin chars)
+
+-------------------------------------------------------------------
+Sun Sep 21 12:35:19 CEST 2003 - adrian@suse.de
+
+- install html docu to the same place as on 8.2, to solve
+ update problems (#31507). (install dir and symlink was
+ swapped for unknown reason)
+
+-------------------------------------------------------------------
+Fri Sep 19 15:48:11 CEST 2003 - adrian@suse.de
+
+- memory leak fix from Lars in QTextEngine
+
+-------------------------------------------------------------------
+Thu Sep 18 16:35:05 CEST 2003 - adrian@suse.de
+
+- updated patches from Lars
+ * fixing Unicode families and foundaries issues
+ * printing issues
+- clean up unused patches
+
+-------------------------------------------------------------------
+Wed Sep 17 18:31:56 CEST 2003 - adrian@suse.de
+
+- a bit more silence .. QPixmap before QApplication warning is away
+- new asian font mappings from mfabian
+
+-------------------------------------------------------------------
+Mon Sep 15 18:02:31 CEST 2003 - adrian@suse.de
+
+- new font fixes from Lars, the default size problem should be away
+- fix build for non-Xft2 distibutions
+
+-------------------------------------------------------------------
+Thu Sep 11 22:18:01 CEST 2003 - adrian@suse.de
+
+- silence on lib64 systems with 32bit plugins installed (#30559)
+- ensure to have a [3.2] section in old qtrc files
+
+-------------------------------------------------------------------
+Mon Sep 8 16:26:49 CEST 2003 - coolo@suse.de
+
+- apply fix from TT to fix konsole + setRawName
+
+-------------------------------------------------------------------
+Thu Sep 4 12:53:19 CEST 2003 - adrian@suse.de
+
+- add always lib and lib64 kde plugin path to qtrc
+
+-------------------------------------------------------------------
+Wed Sep 3 16:55:00 CEST 2003 - adrian@suse.de
+
+- apply fix from TT: "don't generate bogus mouse move events."
+- qt3-devel requires XFree86-Mesa-devel
+
+-------------------------------------------------------------------
+Tue Sep 2 17:20:05 CEST 2003 - adrian@suse.de
+
+- add slovak translation from Stanislav Visnovsky
+- add czech translation from Klara Cihlarova
+
+-------------------------------------------------------------------
+Tue Sep 2 16:20:15 CEST 2003 - adrian@suse.de
+
+- add asian mappings from 8.2 to qtrc again
+
+-------------------------------------------------------------------
+Mon Sep 1 18:13:33 CEST 2003 - meissner@suse.de
+
+- Don't do readlink checks for set*id programs (will break
+ in TLS startup sequence of glibc), just fall back to old
+ malloc. #29530
+
+-------------------------------------------------------------------
+Mon Sep 1 12:02:00 CEST 2003 - adrian@suse.de
+
+- apply qlineedit fix from TT
+
+-------------------------------------------------------------------
+Mon Sep 1 11:30:31 CEST 2003 - adrian@suse.de
+
+- qtconfig menu entry becomes unimportant
+
+-------------------------------------------------------------------
+Sun Aug 31 22:33:44 CEST 2003 - adrian@suse.de
+
+- generate .la file again
+
+-------------------------------------------------------------------
+Fri Aug 29 15:16:43 CEST 2003 - adrian@suse.de
+
+- use newer font_fixes patch from Lars
+- enforce usage of Xft2 even on non-Xrender displays
+- revert qclipboard changes to 3.1.2 code
+
+-------------------------------------------------------------------
+Wed Aug 27 13:38:51 CEST 2003 - adrian@suse.de
+
+- use official 3.2.1 tar ball instead of 3.2.0+patch
+
+-------------------------------------------------------------------
+Tue Aug 26 08:20:07 CEST 2003 - adrian@suse.de
+
+- new _big_ fix from Lars for fixing the remaining font issues
+
+-------------------------------------------------------------------
+Sun Aug 24 16:55:24 CEST 2003 - adrian@suse.de
+
+- apply fix from Lars for the foundary font problem, when
+ using pixmap fonts via Xft2. This makes the freetype2
+ foundary-family patch obsolete from qt view.
+
+-------------------------------------------------------------------
+Sat Aug 23 13:44:22 CEST 2003 - adrian@suse.de
+
+- apply 3.2.1 patch, until the official tar ball arrives
+
+-------------------------------------------------------------------
+Sat Aug 16 13:58:14 CEST 2003 - adrian@suse.de
+
+- justify Category of qtconfig
+
+-------------------------------------------------------------------
+Fri Aug 1 18:00:24 CEST 2003 - adrian@suse.de
+
+- add desktop file for qtconfig
+
+-------------------------------------------------------------------
+Wed Jul 23 16:20:03 CEST 2003 - adrian@suse.de
+
+- update to version 3.2.0 final
+
+-------------------------------------------------------------------
+Thu Jul 17 12:55:23 CEST 2003 - adrian@suse.de
+
+- fix .la files after build
+
+-------------------------------------------------------------------
+Tue Jul 15 08:49:39 CEST 2003 - adrian@suse.de
+
+- update to 3.2.0 beta 2
+- remove obsolete patches
+
+-------------------------------------------------------------------
+Sun Jun 15 12:19:14 CEST 2003 - coolo@suse.de
+
+- never strip explicitly
+- always build with -release to avoid debug output even with -g
+
+-------------------------------------------------------------------
+Thu Jun 12 09:07:58 CEST 2003 - coolo@suse.de
+
+- move the html docu into docdir and put the link in lib
+- package directories
+- fix directory permissions
+
+-------------------------------------------------------------------
+Fri May 30 15:04:29 CEST 2003 - adrian@suse.de
+
+- fix file conflicts
+
+-------------------------------------------------------------------
+Mon May 19 11:28:36 CEST 2003 - adrian@suse.de
+
+- revert source incompatibility to 3.1.x in qhbox constructor
+
+-------------------------------------------------------------------
+Sun May 18 14:03:31 CEST 2003 - adrian@suse.de
+
+- update to version 3.2 beta 1
+- big patch clean up
+- use largefile support api for > 8.2
+
+-------------------------------------------------------------------
+Thu Apr 10 17:01:32 CEST 2003 - coolo@suse.de
+
+- fixing long font names as returned by font-config
+
+-------------------------------------------------------------------
+Wed Mar 26 13:19:48 CET 2003 - adrian@suse.de
+
+- workaround rpm bug on 7.3-ppc
+
+-------------------------------------------------------------------
+Mon Mar 24 10:04:18 CET 2003 - adrian@suse.de
+
+- fix build on SuSE < 8.1
+
+-------------------------------------------------------------------
+Fri Mar 21 14:59:11 CET 2003 - adrian@suse.de
+
+- update to version 3.1.2 and remove obsolete patches
+
+-------------------------------------------------------------------
+Tue Mar 11 20:33:03 CET 2003 - coolo@suse.de
+
+- fixing the fix
+
+-------------------------------------------------------------------
+Tue Mar 11 13:35:31 CET 2003 - coolo@suse.de
+
+- applied patch by TT to fix kmail folder selection
+ (#24519 - also known as kde bug #48888)
+
+-------------------------------------------------------------------
+Fri Mar 7 21:16:17 CET 2003 - adrian@suse.de
+
+- do not use XListFonts, if X server supports Xft on >8.1 (Xft2)
+
+-------------------------------------------------------------------
+Fri Feb 28 00:25:14 CET 2003 - adrian@suse.de
+
+- fast malloc is back
+ (still 20% with glibc 2.3 without spinlock'ed-malloc)
+- extend blacklist
+- use fast malloc also on hammer
+
+-------------------------------------------------------------------
+Wed Feb 26 11:43:08 CET 2003 - adrian@suse.de
+
+- add [3.1] plugin path
+- add fix for mouse cursor bug over ssh
+
+-------------------------------------------------------------------
+Mon Feb 24 11:56:07 CET 2003 - adrian@suse.de
+
+- use correct kde plugin path on lib64 systems
+
+-------------------------------------------------------------------
+Mon Feb 3 11:39:24 CET 2003 - adrian@suse.de
+
+- fix missing symbols in libqt*
+
+-------------------------------------------------------------------
+Thu Jan 30 16:19:31 CET 2003 - adrian@suse.de
+
+- fix %pre script
+
+-------------------------------------------------------------------
+Sun Jan 26 14:05:56 CET 2003 - adrian@suse.de
+
+- prefix=/usr/lib/qt3
+ (third party apps installing translations into $QTDIR now)
+- modify qdesktopwidget resize patch to be BC with Qt 3.2
+- comment out non-official api extensions
+- remove private headers tar ball again
+ (qsa beta2 contains them)
+- fix qtrc enviroment patch
+- hardcode qt settings dir to /etc/X11 (no need for $QTDIR/etc/settings anymore)
+- enable all designer plugins
+
+-------------------------------------------------------------------
+Thu Jan 23 18:36:05 CET 2003 - adrian@suse.de
+
+- add xrandr extension from Qt 3.2
+- add resize event to qdesktopwidget (patch from Lubos)
+- compile codecs as plugins
+
+-------------------------------------------------------------------
+Tue Jan 21 12:52:33 CET 2003 - adrian@suse.de
+
+- use fast malloc only on %ix86
+
+-------------------------------------------------------------------
+Thu Jan 16 15:58:23 CET 2003 - adrian@suse.de
+
+- include qt default translations
+
+-------------------------------------------------------------------
+Fri Jan 10 15:12:46 CET 2003 - adrian@suse.de
+
+- hppa is parisc
+
+-------------------------------------------------------------------
+Thu Jan 9 14:44:06 CET 2003 - adrian@suse.de
+
+- fix some more qmake.conf entries
+ (esp. pathes to lib64 directories and flags based on $RPM_OPT_FLAGS)
+
+-------------------------------------------------------------------
+Tue Jan 7 16:42:59 CET 2003 - adrian@suse.de
+
+- use -ffunction-sections on hppa
+
+-------------------------------------------------------------------
+Thu Jan 2 13:07:01 CET 2003 - adrian@suse.de
+
+- fix build ( patch -p1 -> -p0 )
+
+-------------------------------------------------------------------
+Fri Dec 27 17:50:17 CET 2002 - adrian@suse.de
+
+- several small changes/fixes/workarounds to be able to compile qsa
+ (they will be changed in 3.1.2)
+
+-------------------------------------------------------------------
+Tue Dec 17 12:40:16 CET 2002 - adrian@suse.de
+
+- update to version 3.1.1 and cleanup patches
+- apply Xft speed-up patch from dfaure
+
+-------------------------------------------------------------------
+Wed Dec 4 15:10:17 CET 2002 - adrian@suse.de
+
+- drop fast-malloc, not needed since glibc 2.3
+
+-------------------------------------------------------------------
+Thu Nov 28 18:33:28 CET 2002 - adrian@suse.de
+
+- add qprinter fix from Lars
+
+-------------------------------------------------------------------
+Wed Nov 27 00:44:44 CET 2002 - ro@suse.de
+
+- added expat to neededforbuild
+
+-------------------------------------------------------------------
+Sat Nov 23 14:12:16 CET 2002 - adrian@suse.de
+
+- use Xft2 from XFree package now for > SuSE 8.1
+ (experimental fontconfig package is dropped)
+- build qt3-non-mt with extra spec file now
+- fix korean [Font Substitutions] (#19575)
+- fix broken qmake debug defaults (#21891)
+- fix requires of database plugin packages
+
+-------------------------------------------------------------------
+Fri Nov 15 10:33:53 CET 2002 - adrian@suse.de
+
+- update to 3.1.0 final version
+- apply qwidget/hideChildren patch from Harri
+- move libqui into qt3 main package
+
+-------------------------------------------------------------------
+Tue Nov 5 20:00:37 CET 2002 - adrian@suse.de
+
+- package also missing mkspecs/*
+
+-------------------------------------------------------------------
+Sun Nov 3 12:54:52 CET 2002 - adrian@suse.de
+
+- update to post 3.1 beta 2 snapshot (rc1 or rc2 ?)
+- big rework of spec file, lots of workarounds are not needed anymore :)
+- use experimental fontconfig/Xft2 package for > 8.1
+- enable nis & cups support
+
+-------------------------------------------------------------------
+Mon Oct 21 18:25:53 CEST 2002 - adrian@suse.de
+
+- swab %ifarch <> %if for old broken rpm's
+
+-------------------------------------------------------------------
+Mon Oct 21 13:44:15 CEST 2002 - adrian@suse.de
+
+- remove rpath again, which came back with 3.0.5 update (#20929)
+- disable qDebug lines in chinese patch (#20959)
+
+-------------------------------------------------------------------
+Wed Oct 9 11:47:44 CEST 2002 - adrian@suse.de
+
+- implement a blacklist of executables which should not use
+ the fast malloc implementation. (python and perl atm)
+- disable fast-malloc for >8.1
+- enable fast-malloc for x86_64
+
+-------------------------------------------------------------------
+Fri Sep 20 11:24:51 CEST 2002 - adrian@suse.de
+
+- qclipboard fix from Lubos. Copy from old X applications works again
+
+-------------------------------------------------------------------
+Mon Sep 16 12:07:53 CEST 2002 - adrian@suse.de
+
+- replace qt3-gb18030.diff patch with the new patch from
+ James Su<suzhe@turbolinux.com.cn> for chinese handling (#19399)
+- set XIMInputStyle for japanese input (#19387)
+- change Requires: from /usr/include/png.h to libpng-devel, since
+ connectivas apt can not handle this.
+
+-------------------------------------------------------------------
+Fri Aug 30 14:13:34 CEST 2002 - adrian@suse.de
+
+- remove the dlopen patch again. It is not needed anymore and may
+ cause crashes in rare cases.
+
+-------------------------------------------------------------------
+Wed Aug 28 15:26:02 CEST 2002 - adrian@suse.de
+
+- apply fix from Lubos for DND in kcontrol
+- apply fix to fix gb18030 encoding (from Turbolinux China)
+
+-------------------------------------------------------------------
+Mon Aug 26 16:25:40 CEST 2002 - adrian@suse.de
+
+- do not use -plugindir configure option anymore. it caused the
+ broken plugin support and remov $QTDIR/plugins again from qtrc
+ qtrc is also a (noreplace) config file again
+- s,getenv,__secure_getenv, as suggested by okir in plugin_path.dif
+
+-------------------------------------------------------------------
+Thu Aug 22 18:33:55 CEST 2002 - adrian@suse.de
+
+- add patch to set the qt settings dir to a non-default dir
+- add patches from qt 3.0.6 to fix asian copy&paste problems
+- set explicit plugin pathes in qtrc and replace them during update
+ (this is only a workaround until I know why qt does not use the
+ compiled path)
+
+-------------------------------------------------------------------
+Thu Aug 22 14:53:57 CEST 2002 - adrian@suse.de
+
+- remove dangeling symlink in /usr/lib/qt3/mkspecs/linux-g++
+- add plugin path to global qtrc
+
+-------------------------------------------------------------------
+Tue Aug 20 13:24:25 CEST 2002 - adrian@suse.de
+
+- fix #defines
+
+-------------------------------------------------------------------
+Tue Aug 20 00:24:37 CEST 2002 - adrian@suse.de
+
+- redo the plugin path patch again, we use now a implicit
+ subdirectory like "lib64", if needed.
+- qtconfig is patched to hide/not write back those entries
+
+-------------------------------------------------------------------
+Fri Aug 16 14:00:33 CEST 2002 - coolo@suse.de
+
+- fixing the patches
+
+-------------------------------------------------------------------
+Fri Aug 16 13:18:21 CEST 2002 - coolo@suse.de
+
+- applying the plugin path patches, so they actually do something
+ on lib64 platforms
+
+-------------------------------------------------------------------
+Fri Aug 9 17:35:58 CEST 2002 - adrian@suse.de
+
+- fix plugin installation
+
+-------------------------------------------------------------------
+Thu Aug 8 10:00:46 CEST 2002 - adrian@suse.de
+
+- use %suse_version macro instead of /etc/SuSE-release
+
+-------------------------------------------------------------------
+Fri Aug 2 14:41:33 CEST 2002 - coolo@suse.de
+
+- shut up if passed -noxim is passed and xim doesn't work
+
+-------------------------------------------------------------------
+Tue Jul 30 14:43:32 CEST 2002 - adrian@suse.de
+
+- disable pre-3.0.6 patches again, until focus problem is located
+- add zlib-devel to Requires for qt3-devel and SuSE 8.1
+- add %run_ldconfig
+
+-------------------------------------------------------------------
+Mon Jul 29 17:31:37 CEST 2002 - adrian@suse.de
+
+- apply shut-up.dif
+- clean up neededforbuild
+
+-------------------------------------------------------------------
+Fri Jul 26 16:33:25 CEST 2002 - adrian@suse.de
+
+- port Lea's fast malloc implementation to libqt-mt
+- designer sig11 fixes are not needed anymore
+- use some patches from qt-rsync
+
+-------------------------------------------------------------------
+Fri Jul 19 13:07:05 CEST 2002 - adrian@suse.de
+
+- fix designer sig11 really
+- kick warnings about unsuccesfull locks for non-root users
+
+-------------------------------------------------------------------
+Thu Jul 18 18:00:13 CEST 2002 - adrian@suse.de
+
+- don't strip when in debug mode
+- fix typo in build script
+
+-------------------------------------------------------------------
+Wed Jul 17 09:59:28 CEST 2002 - adrian@suse.de
+
+- update to 3.0.5 final
+ * lots of bugfixes, see changes-3.0.5 for details
+ * new, binary incompatible plugin system
+- fix sig11 in designer
+- clean spec file, drop all not applied patches
+
+-------------------------------------------------------------------
+Thu Jul 11 10:42:14 CEST 2002 - coolo@suse.de
+
+- reenable work around for transparenent images while printing
+ (PR16188)
+
+-------------------------------------------------------------------
+Wed Jul 10 17:51:47 CEST 2002 - adrian@suse.de
+
+- update to near 3.0.5-final snapshot 3.0.5-snapshot-20020710
+
+-------------------------------------------------------------------
+Fri Jul 5 14:16:16 CEST 2002 - adrian@suse.de
+
+- fix -g detection during build
+
+-------------------------------------------------------------------
+Fri Jun 21 00:21:28 CEST 2002 - adrian@suse.de
+
+- fix use of $RPM_OPT_FLAGS (broken since 3.0.4 update)
+- use -mminimal-toc on ppc64 to workaround compiler bug atm
+- update to pre-3.0.5 snapshot-20020620
+ * use buildkey for plugins instead of our own plugin hack
+ * lots of fixes (exact description in changes-3.0.5)
+- add lib64 to build key, if needed
+- remove obsolete patches
+
+-------------------------------------------------------------------
+Thu Jun 6 13:41:19 CEST 2002 - adrian@suse.de
+
+- rework plugin path patch for distributions > 8.0
+ change name of "plugins" directory instead of filenames
+ * plugins -- lib32 and multithreaded plugins
+ * plugins-non-mt -- lib32 and without multithread support
+ * plugins-lib64 -- lib64 and multithreaded plugins
+ * plugins-lib64-non-mt -- lib64 and without multithread support
+
+-------------------------------------------------------------------
+Thu May 30 20:03:50 CEST 2002 - adrian@suse.de
+
+- disable style-plugins again (too much qt apps have problems)
+- disable Xft/Xrender support also for SuSE 7.3 (XFree 4.1.0)
+ (no one reads READMES and too many people had crashes)
+
+-------------------------------------------------------------------
+Tue May 28 10:58:01 CEST 2002 - adrian@suse.de
+
+- fix %files
+
+-------------------------------------------------------------------
+Mon May 27 13:37:15 CEST 2002 - adrian@suse.de
+
+- move qconfig, qmake to qt3-devel-tools
+- build styles as plugin (except our default style: Platinum)
+
+-------------------------------------------------------------------
+Mon May 27 00:10:23 CEST 2002 - ro@suse.de
+
+- lib64: fix qtmake.conf: QTLIBDIR also has the trailing "64"
+- fix build-script for lib64 issues
+
+-------------------------------------------------------------------
+Mon May 20 23:26:35 CEST 2002 - adrian@suse.de
+
+- fix build (disable odbc during qt3.spec build)
+
+-------------------------------------------------------------------
+Mon May 20 10:13:55 CEST 2002 - adrian@suse.de
+
+- enable -tablet support if XFree86 provides it
+- compile with -debug mode, if -g is set in enviroment
+- fix postgres plugin build
+- enable unixODBC support for newer distributions
+- split sql drivers to extra packages
+- fix dlopen call
+
+-------------------------------------------------------------------
+Tue May 14 12:39:51 CEST 2002 - adrian@suse.de
+
+- fix lib64 patch to find OpenGL libs
+
+-------------------------------------------------------------------
+Thu May 9 21:54:41 CEST 2002 - adrian@suse.de
+
+- apply fix for NetAccess focus, insertTitle(), QTextEdit and
+ QToolbar from qt-copy
+
+-------------------------------------------------------------------
+Wed May 8 09:39:48 CEST 2002 - coolo@suse.de
+
+- fixing patch section (grr)
+
+-------------------------------------------------------------------
+Tue May 7 17:13:41 CEST 2002 - coolo@suse.de
+
+- adding fix for x86_64
+
+-------------------------------------------------------------------
+Tue May 7 14:32:39 MEST 2002 - coolo@suse.de
+
+- update to qt 3.0.4 - remove fixes that do
+ not apply any longer
+- disable asian patches as they do not apply
+ and I don't want to split them as I have no
+ idea if the problems they try to fix are still
+ there
+
+-------------------------------------------------------------------
+Wed Apr 24 16:09:09 CEST 2002 - coolo@suse.de
+
+- fix lib64 support
+- fix asian patch not to use arrays in unused arrays
+ (triggers compiler problem)
+
+-------------------------------------------------------------------
+Sun Apr 21 12:58:33 CEST 2002 - adrian@suse.de
+
+- improve image rendering speed (patch by Lubos)
+
+-------------------------------------------------------------------
+Tue Apr 9 16:21:07 CEST 2002 - adrian@suse.de
+
+- apply patch from Lubos to fix alpha channel in QMovie
+
+-------------------------------------------------------------------
+Fri Apr 5 15:29:03 CEST 2002 - adrian@suse.de
+
+- fixed print support in qpsprint
+- binary compatibility fixes by Lars for gbk encoding
+
+-------------------------------------------------------------------
+Wed Apr 3 21:33:26 CEST 2002 - adrian@suse.de
+
+- apply fixes/extensions for asian/utf-8-based languages
+ (assembled by Lars and Brad, thank you, verifed by mfabian)
+- 64bit fixes from Andreas Schwab (const char*) null pointer casts
+
+-------------------------------------------------------------------
+Sun Mar 24 13:23:18 CET 2002 - adrian@suse.de
+
+- apply qtabbar fix. Fixes crashes with kcm modules.
+
+-------------------------------------------------------------------
+Fri Mar 22 10:33:58 CET 2002 - adrian@suse.de
+
+- apply fix for sig11 in QCommonStyle (made by Waldo/Trolltech)
+- apply fix to use libpng instead of libmng to load pngs (by coolo)
+- add missing Requires for qt3-devel
+
+-------------------------------------------------------------------
+Wed Mar 20 22:47:59 CET 2002 - adrian@suse.de
+
+- verify 3.0.3 final version
+- add check for null pointer returned by libXft
+ (fix sig11 when no Xft fonts are configured)
+- fix scrollbar behaviour for QT Platinum style
+ (we are X Windows compatible instead of MS Windows)
+
+-------------------------------------------------------------------
+Tue Mar 19 10:36:42 CET 2002 - adrian@suse.de
+
+- update to version 3.0.3
+ (rc6 tar ball from troll, I have to check after the qt-3.0.3 release,
+ if this is really qt-3.0.3 final)
+
+-------------------------------------------------------------------
+Tue Mar 12 20:01:34 CET 2002 - adrian@suse.de
+
+- update to pre 3.0.3 snapshot (3.0.2.20020312)
+
+-------------------------------------------------------------------
+Mon Mar 4 09:44:37 CET 2002 - adrian@suse.de
+
+- more fixes
+ * fix auto-resizing with QMovie
+ * fix to correctly open submenues in right to left layout
+ * reduce number of mallocs by sharing QColorGroup
+ * Simplified static cleanup handlers.
+ * smarter tooltip placement
+- require "c++_compiler" for distributions newer than 7.3 only
+
+-------------------------------------------------------------------
+Sun Mar 3 02:31:31 CET 2002 - adrian@suse.de
+
+- apply some fixes from qt-copy
+ * 8 bit color depth image format fixes
+ * spinbox flicker fix
+ * qrichtext dangeling pointers fix
+ * qmenubar right to left layout mode cursor navigation fix
+ * qcombobox avoid emitting highlighted twice on keyPressEvent
+
+-------------------------------------------------------------------
+Mon Feb 25 17:34:15 CET 2002 - adrian@suse.de
+
+- update to version 3.0.2
+- remove compile fixes
+- fix symlink for qtconfig
+
+-------------------------------------------------------------------
+Thu Feb 14 01:05:14 CET 2002 - adrian@suse.de
+
+- fix Requires for qt3-devel (add g++ compiler)
+
+-------------------------------------------------------------------
+Tue Feb 12 01:01:31 CET 2002 - adrian@suse.de
+
+- fix build for lib64/s390x
+
+-------------------------------------------------------------------
+Wed Feb 6 21:08:43 CET 2002 - adrian@suse.de
+
+- add links in /usr/bin for qtconfig
+
+-------------------------------------------------------------------
+Sun Feb 3 14:57:30 CET 2002 - adrian@suse.de
+
+- fix dumb-packager-bug (s,%fi,%endif,)
+
+-------------------------------------------------------------------
+Sun Feb 3 12:23:35 CET 2002 - adrian@suse.de
+
+- compile fix for postrgres module
+- extend plugin patch to work on s390x and sparc64 to work with
+ lib64 plugins
+- add %{_libdir}/qt3 symlink for s390x and sparc64
+
+-------------------------------------------------------------------
+Sat Feb 2 13:00:38 CET 2002 - ro@suse.de
+
+- cleaned changes file
+
+-------------------------------------------------------------------
+Fri Feb 1 15:29:58 CET 2002 - adrian@suse.de
+
+- update to current qt-copy snapshot (needed for KDE 3.0 beta 2)
+- make threaded plugins as usual again
+- non-threaded plugins needs now the not compatible -non-mt.so
+ suffix
+
+-------------------------------------------------------------------
+Fri Feb 1 00:26:05 CET 2002 - ro@suse.de
+
+- changed neededforbuild <libpng> to <libpng-devel-packages>
+
+-------------------------------------------------------------------
+Tue Jan 29 16:29:15 CET 2002 - adrian@suse.de
+
+- enable AA for SuSE > 7.3
+
+-------------------------------------------------------------------
+Tue Jan 29 10:58:57 CET 2002 - schwab@suse.de
+
+- Fix use of varargs on 64 bit platforms.
+
+-------------------------------------------------------------------
+Wed Jan 23 22:56:28 CET 2002 - adrian@suse.de
+
+- patch plugin loader to load only plugins with -mt.so
+ extension
+- link direct against libpng
+- move qt3.conf file to susehelp
+- TODO: make plugin loader path depending on %_libdir
+
+-------------------------------------------------------------------
+Tue Jan 22 21:47:19 CET 2002 - adrian@suse.de
+
+- enable Xrender/Xft again for SuSE 7.3
+ (I was misleaded by a broken libXft :/ )
+- using qt plugin mechanism for picture format support
+- enable XRender by default, but leave Xft disabled by default
+ (kcontrol can switch Xft on for KDE applications now)
+- add additional include path for postgres 7.2b5
+
+-------------------------------------------------------------------
+Mon Jan 21 16:58:53 CET 2002 - adrian@suse.de
+
+- disable Xft for all distributions until 7.3
+ (XFree 4.2 is needed)
+- sync QClipboard fix from qt-copy
+
+-------------------------------------------------------------------
+Tue Jan 8 16:11:14 CET 2002 - adrian@suse.de
+
+- fix Requires
+- disable rpath
+
+-------------------------------------------------------------------
+Sun Jan 6 00:31:11 CET 2002 - adrian@suse.de
+
+- split non multithreaded librarys into qt3-non-mt package
+- split developer tutorial into qt3-tutorial package
+- use common config script to prepare build
+- move libs to /usr/lib/qt3/%{_libdir}
+- remove .prl files from file list again
+
+-------------------------------------------------------------------
+Thu Jan 3 16:48:59 CET 2002 - adrian@suse.de
+
+- rename qt3-designer subpackage to qt3-devel-tools
+- add default qtrc file
+ * disable Xft support by default
+ * use Platinum style
+ * set qt plugin path
+- move qtconfig to qt base package
+- apply fixes from qt-copy/KDE-cvs
+
+-------------------------------------------------------------------
+Thu Dec 13 10:42:07 CET 2001 - adrian@suse.de
+
+- use $RPM_OPT_FLAGS during compile
+- add missing .prl files to file list
+
+-------------------------------------------------------------------
+Wed Dec 12 16:39:16 CET 2001 - adrian@suse.de
+
+- update to version 3.0.1
+- build all extra tools
+- fix default mkspec symlink
+- include examples to devel-doc package
+
+-------------------------------------------------------------------
+Thu Nov 8 18:39:52 CET 2001 - ro@suse.de
+
+- use mesa-devel-packages in neededforbuild
+
+-------------------------------------------------------------------
+Tue Oct 16 11:13:50 CEST 2001 - adrian@suse.de
+
+- fix hardcoded install dir in libqt
+ (no $QTDIR is needed at runtime anymore)
+
+-------------------------------------------------------------------
+Mon Oct 15 18:16:49 CEST 2001 - adrian@suse.de
+
+- update to QT 3.0.0 final
+ (the KDE 3 battle begins :)
+
+-------------------------------------------------------------------
+Fri Oct 5 10:50:24 CEST 2001 - adrian@suse.de
+
+- add missing header files
+- cleanup workarounds in spec file and add some new (but less ;)
+
+-------------------------------------------------------------------
+Mon Oct 1 16:35:56 CEST 2001 - adrian@suse.de
+
+- update to beta6
+
+-------------------------------------------------------------------
+Tue Sep 18 08:54:02 CEST 2001 - adrian@suse.de
+
+- update to beta5
+
+-------------------------------------------------------------------
+Wed Sep 5 12:17:19 CEST 2001 - adrian@suse.de
+
+- okay, my last try ... cp -f has different return values on the
+ distributions :(
+
+-------------------------------------------------------------------
+Tue Sep 4 10:18:20 CEST 2001 - adrian@suse.de
+
+- disable postgres support for old distributions
+ (now it also builds with SuSE 6.4)
+
+-------------------------------------------------------------------
+Mon Sep 3 15:42:48 CEST 2001 - adrian@suse.de
+
+- fix broken links in include path
+
+-------------------------------------------------------------------
+Sun Sep 2 19:47:01 CEST 2001 - adrian@suse.de
+
+- workaround bugs in Makefile to install all needed files
+- remove -j4 behind make
+
+-------------------------------------------------------------------
+Tue Jun 19 15:26:54 CEST 2001 - adrian@suse.de
+
+- split documentation from qt3-devel to qt3-doc
+
+-------------------------------------------------------------------
+Fri May 25 11:57:34 CEST 2001 - adrian@suse.de
+
+- first try with QT 3.0.0 beta 1
+ ( this package is far away from being perfect )
+
+-------------------------------------------------------------------
+Sun May 6 10:52:33 CEST 2001 - adrian@suse.de
+
+- apply XftGlyph fix for qfont_x11.cpp from Keith Packard
+- fix build for distributions before 7.1
+
+-------------------------------------------------------------------
+Fri May 4 11:39:55 CEST 2001 - adrian@suse.de
+
+- add fix for buffer overflow on qfont_x11 and some minor glitches
+ in qt-png
+- qt-experimental is dropped, since we can enable AA in qt now.
+
+-------------------------------------------------------------------
+Fri Apr 27 15:29:17 CEST 2001 - adrian@suse.de
+
+- switch BuildIndex for SuSEhelp to false by default
+
+-------------------------------------------------------------------
+Mon Apr 23 22:22:19 CEST 2001 - adrian@suse.de
+
+- using -DNO_DEBUG
+- apply latin9 patch from mls@suse.de
+
+-------------------------------------------------------------------
+Wed Apr 4 22:48:01 CEST 2001 - mfabian@suse.de
+
+- add /etc/qt.fontguess (config file for Japanese and Korean
+ fonts)
+
+-------------------------------------------------------------------
+Wed Mar 21 17:43:49 CET 2001 - adrian@suse.de
+
+- disable AA by default (still to many problems)
+
+-------------------------------------------------------------------
+Sun Mar 18 09:46:50 CET 2001 - adrian@suse.de
+
+- reenable qt-experimental for SuSE distribution < 7.2
+ disable opengl module for these distris in this package
+
+-------------------------------------------------------------------
+Sat Mar 17 14:43:11 CET 2001 - adrian@suse.de
+
+- update to QT 2.3.0
+ this makes qt-experimental obsolete
+ (maybe still some problems with the nvidia driver, but the nv
+ should work fine and the users are warned about nvidia since
+ SuSE 7.1)
+
+-------------------------------------------------------------------
+Sun Mar 11 20:20:41 CET 2001 - mfabian@suse.de
+
+- fix spec-file to make it build with "rpm -ba"
+
+-------------------------------------------------------------------
+Fri Feb 9 19:55:09 CET 2001 - adrian@suse.de
+
+- use $RPM_OPT_FLAGS
+ drop signed char patch
+
+-------------------------------------------------------------------
+Sat Feb 3 14:12:01 CET 2001 - adrian@suse.de
+
+- update to QT 2.2.4
+ qt-static is an own package and no sub packages anymore
+ fix/patch for qprintdialog is no longer needed
+ add fix from Andreas Schwab for 64bit platforms
+
+-------------------------------------------------------------------
+Fri Jan 19 11:33:07 CET 2001 - adrian@suse.de
+
+- swap link and directory of html documentation. This makes
+ trouble during update from older distributions
+
+-------------------------------------------------------------------
+Sat Jan 13 21:18:58 CET 2001 - adrian@suse.de
+
+- remove not necessary susehelp/htdig conf file
+ remove file conflicts between qt-devel and qt-experimental
+
+-------------------------------------------------------------------
+Thu Jan 4 21:37:49 CET 2001 - adrian@suse.de
+
+- added qt-experimental,qt-japanese,qt-korean to Obsoletes:
+
+-------------------------------------------------------------------
+Wed Jan 3 02:24:50 CET 2001 - adrian@suse.de
+
+- fix qprintdialog
+ fix qrichtext (Thanks Stefan)
+
+-------------------------------------------------------------------
+Wed Jan 3 02:24:15 CET 2001 - adrian@suse.de
+
+- fix qprintdialog
+
+-------------------------------------------------------------------
+Mon Jan 1 17:18:43 CET 2001 - adrian@suse.de
+
+- spec file fix
+
+-------------------------------------------------------------------
+Sun Dec 31 13:18:17 CET 2000 - adrian@suse.de
+
+- added small tools to qt-devel (thanks Dirk)
+
+-------------------------------------------------------------------
+Fri Dec 22 20:46:34 CET 2000 - adrian@suse.de
+
+- remove asian patches from qt-experimental
+
+-------------------------------------------------------------------
+Wed Dec 20 18:51:44 CET 2000 - adrian@suse.de
+
+- fixe type in package name
+
+-------------------------------------------------------------------
+Wed Dec 20 18:44:44 CET 2000 - adrian@suse.de
+
+- move docu from qtlib2 to qt
+
+-------------------------------------------------------------------
+Sat Dec 16 17:02:47 CET 2000 - adrian@suse.de
+
+- initial package. support for font anti aliasing has been added
+ Also OpenGL module is active
+
+-------------------------------------------------------------------
+Thu Dec 14 11:51:41 CET 2000 - adrian@suse.de
+
+- update to 2.2.3 and remove all the unneeded fix patches.
+ added SuSE help conf files to qt-devel
+
+-------------------------------------------------------------------
+Tue Dec 12 15:32:01 CET 2000 - schwab@suse.de
+
+- Build with -O0 on ia64.
+
+-------------------------------------------------------------------
+Fri Dec 1 00:29:50 CET 2000 - adrian@suse.de
+
+- added rpath for uic/kdelibs and fixed uic fix ..
+ to drunk to drink more
+
+-------------------------------------------------------------------
+Thu Nov 30 11:31:36 CET 2000 - adrian@suse.de
+
+- fixed dif
+
+-------------------------------------------------------------------
+Thu Nov 30 00:33:26 CET 2000 - adrian@suse.de
+
+- added fix for uic and qiconview
+
+-------------------------------------------------------------------
+Wed Nov 29 11:33:51 CET 2000 - adrian@suse.de
+
+- fixed build on ppc
+
+-------------------------------------------------------------------
+Tue Nov 21 09:31:40 CET 2000 - ro@suse.de
+
+- spec fix
+
+-------------------------------------------------------------------
+Fri Nov 17 14:57:54 CET 2000 - ro@suse.de
+
+- fixed neededforbuild: += libmng-devel
+
+-------------------------------------------------------------------
+Mon Nov 13 21:40:29 CET 2000 - adrian@suse.de
+
+- new version 2.2.2
+ added qpngio fix from waldo
+
+-------------------------------------------------------------------
+Fri Nov 10 00:57:39 CET 2000 - adrian@suse.de
+
+- fixed static config for <6.4 distris (no libmng)
+
+-------------------------------------------------------------------
+Tue Oct 31 13:45:29 CET 2000 - adrian@suse.de
+
+- split the qt package in
+ qt
+ qt-devel
+ qt-extensions
+ qt-man
+ qt-static
+
+ Added an ugly patch to get an uic with KDE support. The designer
+ is broken in this package after this patch, so it is not packaged.
+ The designer can be found in the qt-designer package
+
+-------------------------------------------------------------------
+Tue Oct 17 09:59:23 MEST 2000 - adrian@suse.de
+
+- switch to -O0 for ppc
+
+-------------------------------------------------------------------
+Sat Oct 14 09:51:19 CEST 2000 - adrian@suse.de
+
+- drop OpenGL support. Problems with Nvidia's binary only driver
+
+- added fix from waldo (fixing memory leak in qpngio)
+
+-------------------------------------------------------------------
+Mon Oct 9 16:00:44 CEST 2000 - adrian@suse.de
+
+- update the tar archiv (which contains a corrected classes.html file)
+
+-------------------------------------------------------------------
+Fri Oct 6 12:46:48 CEST 2000 - adrian@suse.de
+
+- update to 2.2.1
+ added static libs for libqt and libqt-mt
+ added support for libmng
+
+-------------------------------------------------------------------
+Mon Oct 2 10:56:03 CEST 2000 - adrian@suse.de
+
+- added missing header files
+
+-------------------------------------------------------------------
+Tue Sep 19 16:03:56 MEST 2000 - adrian@suse.de
+
+- switch to -O0 for axp
+
+-------------------------------------------------------------------
+Fri Sep 8 17:09:15 CEST 2000 - schwab@suse.de
+
+- Update ia64 configuration.
+
+-------------------------------------------------------------------
+Fri Sep 8 15:36:30 CEST 2000 - adrian@suse.de
+
+- added missing libqt-mt.so
+ clean up in filelist
+ changed copyright/license to GPL
+
+-------------------------------------------------------------------
+Thu Sep 7 22:35:05 CEST 2000 - adrian@suse.de
+
+- update to qt 2.2.0 final
+
+-------------------------------------------------------------------
+Tue Aug 22 19:56:07 CEST 2000 - adrian@suse.de
+
+- removed uic/moc bindings to libGL and other
+
+-------------------------------------------------------------------
+Fri Aug 18 20:33:25 CEST 2000 - adrian@suse.de
+
+- update to qt 2.2.0 beta 2
+ spec file rewritten
+
+-------------------------------------------------------------------
+Tue Jul 4 15:11:10 CEST 2000 - adrian@suse.de
+
+- moved links from /usr/lib/qt/lib to /usr/lib/
+
+-------------------------------------------------------------------
+Thu Jun 22 15:59:04 CEST 2000 - adrian@suse.de
+
+- add libqt.so.2 links in /usr/lib/qt/lib
+
+-------------------------------------------------------------------
+Fri Jun 16 16:26:31 CEST 2000 - adrian@suse.de
+
+- moved libqt.so back to qtlib2, after religios war.
+
+-------------------------------------------------------------------
+Fri Jun 16 12:26:33 CEST 2000 - adrian@suse.de
+
+- enable gif support again
+
+-------------------------------------------------------------------
+Fri Jun 16 09:18:31 CEST 2000 - adrian@suse.de
+
+- moved static libs to qtdevel2
+
+-------------------------------------------------------------------
+Tue Jun 6 14:06:10 CEST 2000 - schwab@suse.de
+
+- Reduce opt level on ia64.
+
+-------------------------------------------------------------------
+Tue Jun 6 01:06:59 CEST 2000 - adrian@suse.de
+
+- fixed dependencies
+
+-------------------------------------------------------------------
+Tue May 30 23:02:56 CEST 2000 - adrian@suse.de
+
+- readded mesadev in neededforbuild
+
+-------------------------------------------------------------------
+Tue May 30 15:30:16 CEST 2000 - adrian@suse.de
+
+- update to 2.1.1
+
+-------------------------------------------------------------------
+Wed May 24 13:06:43 CEST 2000 - adrian@suse.de
+
+- added mesadev in neededforbuild
+ removed gif support (license issue)
+
+-------------------------------------------------------------------
+Tue May 16 21:44:53 CEST 2000 - adrian@suse.de
+
+- added -fno-exception (smaller binaries)
+
+-------------------------------------------------------------------
+Fri May 12 08:55:01 CEST 2000 - adrian@suse.de
+
+- fixed link /usr/doc/packages/html
+ using %{_defaultdocdir}
+ using %{_mandir}
+
+-------------------------------------------------------------------
+Fri Apr 14 15:14:19 CEST 2000 - adrian@suse.de
+
+- update to 2.1.0 final
+ new package for all man pages
+
+-------------------------------------------------------------------
+Thu Apr 6 19:16:55 CEST 2000 - adrian@suse.de
+
+- update to 2.1.0 beta 4
+
+-------------------------------------------------------------------
+Thu Mar 30 15:57:33 CEST 2000 - adrian@suse.de
+
+- update to qtlib 2.1.0 beta 3
+ the destination directory is not longer /usr/lib/qt !!!
+ QTDIR=/usr/lib/qt-2.1.0
+ There is also a link /usr/lib/qt2 to /usr/lib/qt-2.1.0
+
+-------------------------------------------------------------------
+Thu Mar 2 11:17:22 CET 2000 - ro@suse.de
+
+- removed obsolete part of patch
+
+-------------------------------------------------------------------
+Thu Mar 2 07:27:34 CET 2000 - ro@suse.de
+
+- configure doesn't know --mandir ... :(
+
+-------------------------------------------------------------------
+Thu Mar 2 01:59:58 CET 2000 - ro@suse.de
+
+- work-around for prepare-spec buglet
+
+-------------------------------------------------------------------
+Wed Mar 1 00:05:15 CET 2000 - ro@suse.de
+
+- man to /usr/share using macro
+
+-------------------------------------------------------------------
+Tue Feb 29 15:55:33 CET 2000 - kettner@suse.de
+
+- Apply patch for qfont_x11.cpp from warwick@warwick-bippy
+
+-------------------------------------------------------------------
+Mon Feb 28 18:26:18 CET 2000 - kettner@suse.de
+
+- increased font cache from 4MB to 9MB in order to
+ speed up UNICODE fonts for YaST2
+
+-------------------------------------------------------------------
+Thu Nov 11 20:00:14 MET 1999 - uli@suse.de
+
+- removed netscape from neededforbuild
+
+-------------------------------------------------------------------
+Tue Nov 9 11:12:48 MET 1999 - kettner@suse.de
+
+- Removed mesa from Requires, as it is not required
+
+-------------------------------------------------------------------
+Fri Oct 22 14:42:35 MEST 1999 - kettner@suse.de
+
+ - Patch extensions/imageio/src/Makefile.in in order to get
+ shared library of libimgio again. Worked in 2.00.
+
+-------------------------------------------------------------------
+Mon Oct 11 21:06:47 MEST 1999 - kettner@suse.de
+
+ - New version 2.0.2
+
+-------------------------------------------------------------------
+Tue Sep 28 18:09:12 MEST 1999 - uli@suse.de
+
+- switched from Motif to lesstif
+
+-------------------------------------------------------------------
+Mon Sep 27 16:31:01 CEST 1999 - bs@suse.de
+
+- fixed requirements for sub packages
+
+-------------------------------------------------------------------
+Fri Sep 17 11:28:09 MEST 1999 - kettner@suse.de
+
+- Reinserted old # Commandline line.
+
+-------------------------------------------------------------------
+Mon Sep 13 17:23:57 CEST 1999 - bs@suse.de
+
+- ran old prepare_spec on spec file to switch to new prepare_spec.
+
+-------------------------------------------------------------------
+Wed Jul 14 11:49:22 CEST 1999 - kettner@suse.de
+
+ - New version 2.00
+
+-------------------------------------------------------------------
+Tue Jul 13 19:31:56 CEST 1999 - kettner@suse.de
+
+ - New version 2.00
+
+-------------------------------------------------------------------
+Mon Jul 12 19:15:16 CEST 1999 - kettner@suse.de
+
+ - New version 2.00
+
diff --git a/opensuse/core/qt3/qt3.csh b/opensuse/core/qt3/qt3.csh
new file mode 100644
index 000000000..e8faf01e9
--- /dev/null
+++ b/opensuse/core/qt3/qt3.csh
@@ -0,0 +1,2 @@
+set -l path=($path /usr/lib/qt3/bin)
+setenv QTDIR /usr/lib/qt3
diff --git a/opensuse/core/qt3/qt3.sh b/opensuse/core/qt3/qt3.sh
new file mode 100644
index 000000000..628ee669e
--- /dev/null
+++ b/opensuse/core/qt3/qt3.sh
@@ -0,0 +1,6 @@
+case ":${PATH}:" in
+ *:/usr/lib/qt3/bin:*) ;;
+ *) PATH=$PATH:/usr/lib/qt3/bin
+esac
+QTDIR=/usr/lib/qt3
+export QTDIR
diff --git a/opensuse/core/qt3/qt3.spec b/opensuse/core/qt3/qt3.spec
new file mode 100644
index 000000000..326d2c03f
--- /dev/null
+++ b/opensuse/core/qt3/qt3.spec
@@ -0,0 +1,415 @@
+#
+# spec file for package qt3
+#
+# Copyright (c) 2011 SUSE LINUX Products GmbH, Nuernberg, Germany.
+#
+# All modifications and additions to the file contributed by third parties
+# remain the property of their copyright owners, unless otherwise agreed
+# upon. The license for this file, and modifications and additions to the
+# file, is the same license as for the pristine package itself (unless the
+# license for the pristine package is not an Open Source License, in which
+# case the license is the MIT License). An "Open Source License" is a
+# license that conforms to the Open Source Definition (Version 1.9)
+# published by the Open Source Initiative.
+
+# Please submit bugfixes or comments via http://bugs.opensuse.org/
+#
+
+
+
+Name: qt3
+#Remember also to modify Requires in -devel package
+BuildRequires: Mesa-devel c++_compiler cups-devel freetype2-devel libjpeg-devel libmng-devel pkgconfig update-desktop-files xorg-x11-devel
+Url: http://www.trolltech.com/
+License: GPLv2 ; GPLv3 ; QPL ..
+%if %suse_version > 1120
+BuildRequires: libpng14-compat-devel
+%else
+BuildRequires: libpng-devel
+%endif
+Group: System/Libraries
+# bug437293
+%ifarch ppc64
+Obsoletes: qt3-64bit
+%endif
+#
+Summary: A library for developing applications with graphical user interfaces
+Version: 3.3.8c
+Release: 110
+Provides: qt_library_%version
+Recommends: kdelibs3-default-style
+PreReq: /bin/grep
+# COMMON-BEGIN
+%define x11_free -x11-free-
+%define rversion 3.3.8b
+Source0: qt%{x11_free}%rversion.tar.bz2
+Source1: build_script.sh
+Source2: qtconfig3.desktop
+Source3: qtrc
+Source4: assistant3.png
+Source6: assistant3.desktop
+Source7: designer.desktop
+Source8: designer.png
+Source9: linguist.desktop
+Source5: linguist.png
+Source10: qt3.sh
+Source11: qt3.csh
+# Translations did not change at 3.3.8c
+Source12: qt3-3.3.8b-translations.tar.bz2
+Source100: qtkdeintegration_x11.cpp
+Source101: qtkdeintegration_x11_p.h
+Source102: baselibs.conf
+Source200: attributes
+Source201: update_spec.pl
+Patch1: aliasing.diff
+Patch2: head.diff
+Patch4: qt3-never-strip.diff
+Patch5: external-libs.diff
+Patch6: 0001-dnd_optimization.patch
+Patch7: 0002-dnd_active_window_fix.patch
+Patch8: 0007-qpixmap_constants.patch
+Patch11: 0038-dragobject-dont-prefer-unknown.patch
+Patch12: qtrc-path.diff
+Patch14: lib64-plugin-support.diff
+Patch15: pluginmanager-fix.diff
+Patch18: no-rpath.dif
+Patch19: shut-up.diff
+Patch20: rubberband.diff
+Patch21: fix-GL-loading.diff
+Patch23: fix-accessible.diff
+# From http://www.freedesktop.org/wiki/Software_2fImmoduleQtDownload
+# Current version from http://freedesktop.org/~daisuke/qt-x11-immodule-unified-qt3.3.5-20060318.diff.bz2
+Patch25: qt-x11-immodule-unified-qt3.3.8-20060318.diff
+Patch28: fix-key-release-event-with-imm.diff
+Patch29: 0047-fix-kmenu-width.diff
+Patch31: limit-image-size.diff
+Patch34: 0005-qpixmap_mitshm.patch
+Patch35: qt-transparency.patch
+Patch37: 0055-qtextedit_zoom.patch
+Patch38: 0048-qclipboard_hack_80072.patch
+Patch39: fix-qtranslator-crash.diff
+Patch40: 0059-qpopup_has_mouse.patch
+Patch41: 0060-qpopup_ignore_mousepos.patch
+Patch42: add_qexport_visibility.patch
+Patch43: 0056-khotkeys_input_84434.patch
+Source250: enable-designer-plugins.diff
+Patch53: fix-xinerama-dialog-placement.diff
+Patch54: kmenu-search-fix.diff
+Patch55: qt3-fix-cast.diff
+Patch100: qt.patch
+Patch101: qt3-arm-gcc4.patch
+Patch102: xinerama.patch
+Patch113: fix-assistant-path.patch
+Patch117: qtimer-debug.diff
+Patch119: xinerama-qpopupmenu.diff
+Patch121: qt3-warnings.diff
+Patch123: use-xrandr-1.2.diff
+Patch125: qcstring-format-warnings.diff
+Patch127: mng-reading-fix.patch
+Patch128: 0079-compositing-types.patch
+Patch129: 0080-net-wm-sync-request.patch
+Patch132: revert-qt-3.3.8-khmer-fix.diff
+Patch133: 0085-fix-buildkey.diff
+Patch134: fix-xinput-clash.diff
+Patch135: parseFontName.diff
+Patch136: qt3-no-date.diff
+Patch137: popen-leak-fix.diff
+Patch138: qt3-libpng14.diff
+Patch139: gcc46.diff
+
+# TQt integration
+Patch200: qt-3.3.8c.diff
+
+BuildRoot: %{_tmppath}/%{name}-%{version}-build
+
+%description
+Qt is a program library for developing applications with graphical user
+interfaces. It allows you to rapidly develop professional programs. The
+Qt library is available not only for Linux but for a great number of
+Unices and even for Windows. Thus it is possible to write programs that
+may be easily ported to those platforms.
+
+You need a license for using Qt with a non-GPL application, which can
+be acquired from sales@trolltech.com.
+
+See /usr/share/doc/packages/qt3 for details about the new features of
+the current Qt library!
+
+%define build_sub_dirs src plugins/src tools/designer/uilib/ tools/designer/uic tools/qtconfig tools/assistant/lib tools/assistant tutorial
+
+%prep
+%setup -q -n qt%{x11_free}%rversion
+%patch1
+%patch2
+%patch4
+%patch5
+%patch6
+%patch7
+%patch8
+%patch11
+%patch12
+if [ "%_lib" = "lib64" ]; then
+%patch14
+fi
+%patch15
+%patch18
+%patch19
+%patch20
+%patch23
+%patch25
+%patch28
+%patch29
+%patch31
+%patch34
+%patch35
+%patch37
+%patch38
+%patch39
+%patch40
+%patch41
+%patch42
+%patch43
+%patch100
+%patch102
+%patch53
+%patch54
+%patch55
+%patch101
+%patch113
+%patch117
+%patch119
+%patch121
+%patch123
+ln -sf $PWD/src/inputmethod/qinputcontextfactory.h include/
+ln -sf $PWD/src/inputmethod/qinputcontextplugin.h include/
+ln -sf $PWD/src/kernel/qinputcontext.h include/
+ln -sf $PWD/src/kernel/qinputcontextinterface_p.h include/private/
+ln -sf $PWD/src/kernel/qximinputcontext_p.h include/private/
+if [ %_lib = "lib" ]; then
+sed 's,/lib64/,/lib/,' %PATCH21 | patch -p0
+else
+%patch21
+fi
+%patch125
+%patch127
+%patch128
+%patch129
+%patch132
+%patch133
+%patch134
+%patch135
+%patch136
+%patch137
+%if %suse_version > 1120
+%patch138 -p1
+%endif
+%patch139
+%patch200
+# copy qt kde integration files
+cp %SOURCE100 %SOURCE101 src/kernel/
+cp %SOURCE101 include/private/
+cd translations
+tar xvjf %SOURCE12
+cd ..
+# COMMON-END
+
+%package devel
+License: GPLv2 ; GPLv3 ; QPL ..
+Summary: Include Files and Libraries mandatory for Development
+Requires: qt3 = %version
+Requires: pkgconfig cups-devel freetype2-devel libmng-devel libjpeg-devel c++_compiler xorg-x11-devel
+%if %suse_version > 1120
+Recommends: libpng14-compat-devel
+Requires: libpng-devel
+%else
+Requires: libpng-devel
+%endif
+%if %suse_version > 1000
+Requires: Mesa-devel
+%else
+Requires: xorg-x11-Mesa xorg-x11-Mesa-devel
+%endif
+%ifnarch x86_64 s390x sparc64 ppc64 mips64
+Conflicts: devel_libs-32bit
+%endif
+# bug437293
+%ifarch ppc64
+Obsoletes: qt3-devel-64bit
+%endif
+#
+Group: Development/Libraries/X11
+
+%description devel
+You need this package if you want to compile programs with Qt 3. It
+contains the "Qt Crossplatform Development Kit 2". Under /usr/lib/qt3
+you will find include files.
+
+You need a license for using Qt with a non-GPL application. A license
+can be acquired at sales@trolltech.com.
+
+%build
+export VERSION=%suse_version
+source %SOURCE1 %{version}
+export WLIB=%_lib
+export QTDIR=`pwd`
+if [ %_lib == "lib64" ]; then
+export RPM_OPT_FLAGS="$RPM_OPT_FLAGS -DUSE_LIB64_PATHES"
+fi
+export RPM_OPT_FLAGS="$RPM_OPT_FLAGS -fno-strict-aliasing"
+#
+# call build from build_script.rpmrc for threaded Qt library
+# only really needed tools will be builded here, all extra tools will be
+# builded in qt3.spec
+#
+call_configure -v -thread -shared -no-sql-mysql -no-sql-psql -no-sql-odbc -no-sql-sqlite $OPTIONS
+for i in %build_sub_dirs ; do
+ cd $i
+ make %{?jobs:-j%jobs}
+ cd -
+done
+
+%install
+export VERSION=%suse_version
+export WLIB=%_lib
+export QTDIR=`pwd`
+source %SOURCE1 %{version}
+for i in %build_sub_dirs ; do
+ cd $i
+ make INSTALL_ROOT=$RPM_BUILD_ROOT install
+ cd -
+done
+post_install $RPM_BUILD_ROOT/usr/lib/qt3/
+mkdir -p $RPM_BUILD_ROOT/usr/share/pixmaps/
+sed -i -e 's, on: .*,,' $RPM_BUILD_ROOT/usr/lib/qt3/%_lib/*.la
+#
+# copy additional files
+#
+install -m 0755 bin/qmake bin/moc ${RPM_BUILD_ROOT}/usr/lib/qt3/bin/
+install -m 0755 -d ${RPM_BUILD_ROOT}/usr/lib/qt3/translations/
+install -m 0644 translations/*.qm ${RPM_BUILD_ROOT}/usr/lib/qt3/translations/
+if [ %_lib = lib64 ]; then
+ for i in $RPM_BUILD_ROOT/usr/lib/qt3/plugins/*/*.so; do
+ mv "$i" "${i%.so}.lib64.so"
+ done
+fi
+#
+# move pkgconfig files
+#
+mkdir -p $RPM_BUILD_ROOT/%_libdir/pkgconfig
+mv $RPM_BUILD_ROOT/usr/lib/qt3/%_lib/pkgconfig/*.pc \
+ $RPM_BUILD_ROOT/%_libdir/pkgconfig
+rmdir $RPM_BUILD_ROOT/usr/lib/qt3/%_lib/pkgconfig
+#
+# move docs in doc dir
+#
+install -d -m 0755 ${RPM_BUILD_ROOT}/%{_defaultdocdir}/qt3/
+install -d -m 0755 ${RPM_BUILD_ROOT}/usr/lib/qt3/mkspecs/
+install -d -m 0755 ${RPM_BUILD_ROOT}/usr/lib/qt3/mkspecs/
+cp -a mkspecs/* ${RPM_BUILD_ROOT}/usr/lib/qt3/mkspecs/
+if [ %_lib == "lib64" ]; then
+ ln -sf linux-g++-64 ${RPM_BUILD_ROOT}/usr/lib/qt3/mkspecs/default
+else
+ ln -sf linux-g++ ${RPM_BUILD_ROOT}/usr/lib/qt3/mkspecs/default
+fi
+find ${RPM_BUILD_ROOT}/usr/lib/qt3/mkspecs -type f -perm /111 -print0 | xargs -0 chmod a-x
+#
+# create links in ld.so.conf path
+#
+install -d -m 0755 ${RPM_BUILD_ROOT}/%{_libdir}
+ln -sf ../lib/qt3/%{_lib}/libqt-mt.so.3 ${RPM_BUILD_ROOT}/%{_libdir}/libqt-mt.so.3
+ln -sf ../lib/qt3/%{_lib}/libqui.so.1 ${RPM_BUILD_ROOT}/%{_libdir}/libqui.so.1
+[ "lib" != "%{_lib}" ] && \
+ ln -sf ../lib/qt3 ${RPM_BUILD_ROOT}/%{_libdir}/qt3
+mkdir -p ${RPM_BUILD_ROOT}/etc/profile.d
+install -m 644 %SOURCE10 %SOURCE11 ${RPM_BUILD_ROOT}/etc/profile.d
+#
+# default qt settings
+#
+mkdir -p ${RPM_BUILD_ROOT}/etc/X11
+mkdir -p ${RPM_BUILD_ROOT}/usr/lib/qt3/etc/
+ln -sf /etc/X11/ ${RPM_BUILD_ROOT}/usr/lib/qt3/etc/settings
+install -m 0644 %SOURCE3 ${RPM_BUILD_ROOT}/etc/X11/qtrc
+#
+# clean broken links
+#
+if [ %_lib == "lib64" ]; then
+ rm ${RPM_BUILD_ROOT}/usr/lib/qt3/mkspecs/linux-g++-64/linux-g++-64
+else
+ rm ${RPM_BUILD_ROOT}/usr/lib/qt3/mkspecs/linux-g++/linux-g++
+fi
+rm -rf ${RPM_BUILD_ROOT}/usr/lib/qt3/doc/html
+
+%pre
+if test -L usr/lib/qt3; then
+ rm usr/lib/qt3
+fi
+
+%post
+/sbin/ldconfig
+if ! grep -q '^\[3.3\]' etc/X11/qtrc ; then
+echo "" >> etc/X11/qtrc
+echo "[3.3]" >> etc/X11/qtrc
+echo "libraryPath=/opt/kde3/lib64/kde3/plugins/:/opt/kde3/lib/kde3/plugins/" >> etc/X11/qtrc
+fi
+
+%postun -p /sbin/ldconfig
+
+%files
+%defattr(-,root,root,755)
+# FIXME provide new changelog if kb9vqf will give one
+%doc changes-3.3.8b README* LICENSE* MANIFEST FAQ
+%dir /usr/lib/qt3/translations
+%dir /usr/lib/qt3
+%dir /usr/lib/qt3/bin
+%dir /usr/lib/qt3/%{_lib}
+%{_libdir}/libqt-mt.so.*
+%{_libdir}/libqui.so.*
+/usr/lib/qt3/bin/qtconfig
+/usr/lib/qt3/%{_lib}/libqt-mt.so.*
+/usr/lib/qt3/%{_lib}/libqui.so.*
+%dir /usr/lib/qt3/etc
+/usr/lib/qt3/etc/settings
+/usr/lib/qt3/plugins
+/usr/lib/qt3/bin/assistant
+%lang(de) /usr/lib/qt3/translations/assistant_de.qm
+%lang(ar) /usr/lib/qt3/translations/qt_ar.qm
+%lang(ca) /usr/lib/qt3/translations/qt_ca.qm
+%lang(cs) /usr/lib/qt3/translations/qt_cs.qm
+%lang(de) /usr/lib/qt3/translations/qt_de.qm
+%lang(es) /usr/lib/qt3/translations/qt_es.qm
+%lang(fr) /usr/lib/qt3/translations/qt_fr.qm
+%lang(he) /usr/lib/qt3/translations/qt_he.qm
+%lang(ru) /usr/lib/qt3/translations/qt_ru.qm
+%lang(sk) /usr/lib/qt3/translations/qt_sk.qm
+%lang(it) /usr/lib/qt3/translations/qt_it.qm
+%lang(ja) /usr/lib/qt3/translations/qt_ja.qm
+%lang(nb) /usr/lib/qt3/translations/qt_nb.qm
+%lang(pl) /usr/lib/qt3/translations/qt_pl.qm
+%lang(pt) /usr/lib/qt3/translations/qt_pt-br.qm
+%lang(pt) /usr/lib/qt3/translations/qt_pt.qm
+%lang(zh) /usr/lib/qt3/translations/qt_zh-cn.qm
+%lang(zh) /usr/lib/qt3/translations/qt_zh-tw.qm
+%config(noreplace) /etc/X11/qtrc
+%ifarch s390x sparc64 x86_64 ppc64 mips64
+%dir %{_libdir}/qt3
+%endif
+
+%files devel
+%defattr(-,root,root,755)
+# FIXME provide new changelog if kb9vqf will give one
+%doc changes-3.3.8b
+/usr/lib/qt3/bin/moc
+/usr/lib/qt3/bin/qmake
+/usr/lib/qt3/bin/uic
+/usr/lib/qt3/include
+/usr/lib/qt3/%{_lib}/libqt-mt.la
+/usr/lib/qt3/%{_lib}/libqt-mt.so
+/usr/lib/qt3/%{_lib}/libqt-mt.prl
+/usr/lib/qt3/%{_lib}/libqui.so
+/usr/lib/qt3/%{_lib}/libqui.prl
+/usr/lib/qt3/mkspecs
+/%_libdir/pkgconfig/qt-mt.pc
+/usr/lib/qt3/%_lib/libqassistantclient.*
+%config /etc/profile.d/qt3.*
+
+%changelog
diff --git a/opensuse/core/qt3/qtconfig3.desktop b/opensuse/core/qt3/qtconfig3.desktop
new file mode 100644
index 000000000..f7dc027db
--- /dev/null
+++ b/opensuse/core/qt3/qtconfig3.desktop
@@ -0,0 +1,10 @@
+[Desktop Entry]
+Categories=Qt;Settings;
+Encoding=UTF-8
+Exec=/usr/lib/qt3/bin/qtconfig
+Name=Qt Settings
+X-KDE-StartupNotify=true
+Icon=designer3
+Terminal=false
+Type=Application
+
diff --git a/opensuse/core/qt3/qtimer-debug.diff b/opensuse/core/qt3/qtimer-debug.diff
new file mode 100644
index 000000000..5511f2a16
--- /dev/null
+++ b/opensuse/core/qt3/qtimer-debug.diff
@@ -0,0 +1,48 @@
+--- src/kernel/qeventloop_unix.cpp
++++ src/kernel/qeventloop_unix.cpp
+@@ -514,6 +528,17 @@
+ return (tm->tv_sec*1000) + (tm->tv_usec/1000);
+ }
+
++static QString fullName(QObject* obj)
++{
++ QString oname;
++ if (obj && obj->name())
++ oname = QString(obj->name()) + "(" + QString(obj->className()) + ")";
++
++ if (obj && obj->parent())
++ return fullName(obj->parent()) + "/" + oname;
++ return oname;
++}
++
+ int QEventLoop::activateTimers()
+ {
+ if ( !timerList || !timerList->count() ) // no timers
+@@ -549,9 +574,27 @@
+ t->timeout += t->interval;
+ if ( t->timeout < currentTime )
+ t->timeout = currentTime + t->interval;
++ // prefer system clock ticks for low resolution timers
++ // to save cpu power
++ if (t->interval.tv_sec * 1000 + t->interval.tv_usec / 1000 >= 1000) {
++ timeval drift;
++ drift.tv_sec = 0;
++ drift.tv_usec = (t->interval.tv_usec / 8) + (t->interval.tv_sec % 8) * 1000 * 1000 / 8;
++ timeval synced = t->timeout + drift;
++ if (synced.tv_usec < 2 * drift.tv_usec)
++ synced.tv_usec = 0;
++ t->timeout = synced;
++ }
+ insertTimer( t ); // relink timer
+ if ( t->interval.tv_usec > 0 || t->interval.tv_sec > 0 )
+ n_act++;
++
++ if (t->obj && getenv("QT_DEBUG_TIMER"))
++ qDebug("qtimer: %ld/%s %d ms for %p/%s %s",
++ getpid(), qApp && qApp->name() ? qApp->name() : "",
++ t->interval.tv_sec * 1000 + t->interval.tv_usec / 1000,
++ t->obj, fullName(t->obj).latin1(), t->obj->className());
++
+ QTimerEvent e( t->id );
+ QApplication::sendEvent( t->obj, &e ); // send event
+ if ( timerList->findRef( begin ) == -1 )
diff --git a/opensuse/core/qt3/qtkdeintegration_x11.cpp b/opensuse/core/qt3/qtkdeintegration_x11.cpp
new file mode 100644
index 000000000..8f837b412
--- /dev/null
+++ b/opensuse/core/qt3/qtkdeintegration_x11.cpp
@@ -0,0 +1,242 @@
+#define QT_CLEAN_NAMESPACE
+#include "qtkdeintegration_x11_p.h"
+
+#include <qcolordialog.h>
+#include <qfiledialog.h>
+#include <qfontdialog.h>
+#include <qlibrary.h>
+#include <qregexp.h>
+#include <qmessagebox.h>
+#include <stdlib.h>
+
+bool QKDEIntegration::inited = false;
+bool QKDEIntegration::enable = false;
+
+bool QKDEIntegration::enabled()
+ {
+ if( !inited )
+ initLibrary();
+ return enable;
+ }
+
+static QCString findLibrary()
+ {
+ if( getenv( "QT_NO_KDE_INTEGRATION" ) == NULL
+ || getenv( "QT_NO_KDE_INTEGRATION" )[ 0 ] == '0' )
+ {
+#ifdef USE_LIB64_PATHES
+ return "/opt/kde3/lib64/kde3/plugins/integration/libqtkde";
+#else
+ return "/opt/kde3/lib/kde3/plugins/integration/libqtkde";
+#endif
+ }
+ return "";
+ }
+
+inline static long widgetToWinId( const QWidget* w )
+ {
+ return w != NULL ? w->winId() : 0;
+ }
+
+inline static QFont fontPtrToFontRef( const QFont* f )
+ {
+ return f != NULL ? *f : QFont();
+ }
+
+// ---
+static bool (*qtkde_initializeIntegration)( );
+static QStringList (*qtkde_getOpenFileNames)( const QString& filter, QString* workingDirectory,
+ long parent, const QCString& name, const QString& caption, QString* selectedFilter,
+ bool multiple );
+static QString (*qtkde_getSaveFileName)( const QString& initialSelection, const QString& filter,
+ QString* workingDirectory, long parent, const QCString& name, const QString& caption,
+ QString* selectedFilter );
+static QString (*qtkde_getExistingDirectory)( const QString& initialDirectory, long parent,
+ const QCString& name, const QString& caption );
+static QColor (*qtkde_getColor)( const QColor& color, long parent, const QCString& name );
+static QFont (*qtkde_getFont)( bool* ok, const QFont& def, long parent, const QCString& name );
+static int (*qtkde_messageBox1)( int type, long parent, const QString& caption, const QString& text,
+ int button0, int button1, int button2 );
+static int (*qtkde_messageBox2)( int type, long parent, const QString& caption, const QString& text,
+ const QString& button0Text, const QString& button1Text, const QString& button2Text,
+ int defaultButton, int escapeButton );
+
+void QKDEIntegration::initLibrary()
+ {
+ if( !inited )
+ {
+ enable = false;
+ inited = true;
+ QString libpath = findLibrary();
+ if( libpath.isEmpty())
+ return;
+ QLibrary lib( libpath );
+ lib.setAutoUnload( false );
+ qtkde_initializeIntegration = (
+ bool (*)( )
+ )
+ lib.resolve("initializeIntegration");
+ if( qtkde_initializeIntegration == NULL )
+ return;
+ qtkde_getOpenFileNames = (
+ QStringList (*)( const QString& filter, QString* workingDirectory, long parent,
+ const QCString& name, const QString& caption, QString* selectedFilter,
+ bool multiple )
+ )
+ lib.resolve("getOpenFileNames");
+ if( qtkde_getOpenFileNames == NULL )
+ return;
+ qtkde_getSaveFileName = (
+ QString (*)( const QString& initialSelection, const QString& filter, QString* workingDirectory,
+ long parent, const QCString& name, const QString& caption, QString* selectedFilter )
+ )
+ lib.resolve("getSaveFileName");
+ if( qtkde_getSaveFileName == NULL )
+ return;
+ qtkde_getExistingDirectory = (
+ QString (*)( const QString& initialDirectory, long parent, const QCString& name,
+ const QString& caption )
+ )
+ lib.resolve("getExistingDirectory");
+ if( qtkde_getExistingDirectory == NULL )
+ return;
+ qtkde_getColor = (
+ QColor (*)( const QColor& color, long parent, const QCString& name )
+ )
+ lib.resolve("getColor");
+ if( qtkde_getColor == NULL )
+ return;
+ qtkde_getFont = (
+ QFont (*)( bool* ok, const QFont& def, long parent, const QCString& name )
+ )
+ lib.resolve("getFont");
+ if( qtkde_getFont == NULL )
+ return;
+ qtkde_messageBox1 = (
+ int (*)( int type, long parent, const QString& caption, const QString& text,
+ int button0, int button1, int button2 )
+ )
+ lib.resolve("messageBox1");
+ if( qtkde_messageBox1 == NULL )
+ return;
+ qtkde_messageBox2 = (
+ int (*)( int type, long parent, const QString& caption, const QString& text,
+ const QString& button0Text, const QString& button1Text, const QString& button2Text,
+ int defaultButton, int escapeButton )
+ )
+ lib.resolve("messageBox2");
+ if( qtkde_messageBox2 == NULL )
+ return;
+ enable = qtkde_initializeIntegration();
+ }
+ }
+
+bool QKDEIntegration::initializeIntegration( )
+ {
+ return qtkde_initializeIntegration(
+ );
+ }
+QStringList QKDEIntegration::getOpenFileNames( const QString& filter, QString* workingDirectory,
+ QWidget* parent, const char* name, const QString& caption, QString* selectedFilter,
+ bool multiple )
+ {
+ return qtkde_getOpenFileNames(
+ filter, workingDirectory, widgetToWinId( parent ), name, caption, selectedFilter, multiple );
+ }
+QString QKDEIntegration::getSaveFileName( const QString& initialSelection, const QString& filter,
+ QString* workingDirectory, QWidget* parent, const char* name, const QString& caption,
+ QString* selectedFilter )
+ {
+ return qtkde_getSaveFileName(
+ initialSelection, filter, workingDirectory, widgetToWinId( parent ), name, caption, selectedFilter );
+ }
+QString QKDEIntegration::getExistingDirectory( const QString& initialDirectory, QWidget* parent,
+ const char* name, const QString& caption )
+ {
+ return qtkde_getExistingDirectory(
+ initialDirectory, widgetToWinId( parent ), name, caption );
+ }
+QColor QKDEIntegration::getColor( const QColor& color, QWidget* parent, const char* name )
+ {
+ return qtkde_getColor(
+ color, widgetToWinId( parent ), name );
+ }
+QFont QKDEIntegration::getFont( bool* ok, const QFont* def, QWidget* parent, const char* name )
+ {
+ return qtkde_getFont(
+ ok, fontPtrToFontRef( def ), widgetToWinId( parent ), name );
+ }
+int QKDEIntegration::messageBox1( int type, QWidget* parent, const QString& caption,
+ const QString& text, int button0, int button1, int button2 )
+ {
+ return qtkde_messageBox1(
+ type, widgetToWinId( parent ), caption, text, button0, button1, button2 );
+ }
+int QKDEIntegration::messageBox2( int type, QWidget* parent, const QString& caption,
+ const QString& text, const QString& button0Text, const QString& button1Text, const QString& button2Text,
+ int defaultButton, int escapeButton )
+ {
+ return qtkde_messageBox2(
+ type, widgetToWinId( parent ), caption, text, button0Text, button1Text, button2Text, defaultButton, escapeButton );
+ }
+// ---
+
+int QKDEIntegration::information( QWidget* parent, const QString& caption,
+ const QString& text, int button0, int button1, int button2 )
+ {
+ return qtkde_messageBox1(
+ QMessageBox::Information, widgetToWinId( parent ), caption, text, button0, button1, button2 );
+ }
+
+int QKDEIntegration::question( QWidget* parent, const QString& caption,
+ const QString& text, int button0, int button1, int button2 )
+ {
+ return qtkde_messageBox1(
+ QMessageBox::Question, widgetToWinId( parent ), caption, text, button0, button1, button2 );
+ }
+
+int QKDEIntegration::warning( QWidget* parent, const QString& caption,
+ const QString& text, int button0, int button1, int button2 )
+ {
+ return qtkde_messageBox1(
+ QMessageBox::Warning, widgetToWinId( parent ), caption, text, button0, button1, button2 );
+ }
+
+int QKDEIntegration::critical( QWidget* parent, const QString& caption,
+ const QString& text, int button0, int button1, int button2 )
+ {
+ return qtkde_messageBox1(
+ QMessageBox::Critical, widgetToWinId( parent ), caption, text, button0, button1, button2 );
+ }
+
+int QKDEIntegration::information( QWidget* parent, const QString& caption,
+ const QString& text, const QString& button0Text, const QString& button1Text, const QString& button2Text,
+ int defaultButton, int escapeButton )
+ {
+ return qtkde_messageBox2(
+ QMessageBox::Information, widgetToWinId( parent ), caption, text, button0Text, button1Text, button2Text, defaultButton, escapeButton );
+ }
+
+int QKDEIntegration::question( QWidget* parent, const QString& caption,
+ const QString& text, const QString& button0Text, const QString& button1Text, const QString& button2Text,
+ int defaultButton, int escapeButton )
+ {
+ return qtkde_messageBox2(
+ QMessageBox::Question, widgetToWinId( parent ), caption, text, button0Text, button1Text, button2Text, defaultButton, escapeButton );
+ }
+
+int QKDEIntegration::warning( QWidget* parent, const QString& caption,
+ const QString& text, const QString& button0Text, const QString& button1Text, const QString& button2Text,
+ int defaultButton, int escapeButton )
+ {
+ return qtkde_messageBox2(
+ QMessageBox::Warning, widgetToWinId( parent ), caption, text, button0Text, button1Text, button2Text, defaultButton, escapeButton );
+ }
+
+int QKDEIntegration::critical( QWidget* parent, const QString& caption,
+ const QString& text, const QString& button0Text, const QString& button1Text, const QString& button2Text,
+ int defaultButton, int escapeButton )
+ {
+ return qtkde_messageBox2(
+ QMessageBox::Critical, widgetToWinId( parent ), caption, text, button0Text, button1Text, button2Text, defaultButton, escapeButton );
+ }
diff --git a/opensuse/core/qt3/qtkdeintegration_x11_p.h b/opensuse/core/qt3/qtkdeintegration_x11_p.h
new file mode 100644
index 000000000..9c1676ddb
--- /dev/null
+++ b/opensuse/core/qt3/qtkdeintegration_x11_p.h
@@ -0,0 +1,59 @@
+#ifndef QKDEINTEGRATION_H
+#define QKDEINTEGRATION_H
+
+#include <qstringlist.h>
+
+class QLibrary;
+class QWidget;
+class QColor;
+class QFont;
+
+class QKDEIntegration
+ {
+ public:
+ static bool enabled();
+// ---
+ static bool initializeIntegration( );
+ static QStringList getOpenFileNames( const QString& filter, QString* workingDirectory,
+ QWidget* parent, const char* name, const QString& caption, QString* selectedFilter,
+ bool multiple );
+ static QString getSaveFileName( const QString& initialSelection, const QString& filter,
+ QString* workingDirectory, QWidget* parent, const char* name, const QString& caption,
+ QString* selectedFilter );
+ static QString getExistingDirectory( const QString& initialDirectory, QWidget* parent,
+ const char* name, const QString& caption );
+ static QColor getColor( const QColor& color, QWidget* parent, const char* name );
+ static QFont getFont( bool* ok, const QFont* def, QWidget* parent, const char* name );
+ static int messageBox1( int type, QWidget* parent, const QString& caption,
+ const QString& text, int button0, int button1, int button2 );
+ static int information( QWidget* parent, const QString& caption, const QString& text,
+ int button0, int button1, int button2 );
+ static int question( QWidget* parent, const QString& caption, const QString& text,
+ int button0, int button1, int button2 );
+ static int warning( QWidget* parent, const QString& caption, const QString& text,
+ int button0, int button1, int button2 );
+ static int critical( QWidget* parent, const QString& caption, const QString& text,
+ int button0, int button1, int button2 );
+ static int messageBox2( int type, QWidget* parent, const QString& caption,
+ const QString& text, const QString& button0Text, const QString& button1Text,
+ const QString& button2Text, int defaultButton, int escapeButton );
+ static int information( QWidget* parent, const QString& caption, const QString& text,
+ const QString& button0Text, const QString& button1Text, const QString& button2Text,
+ int defaultButton, int escapeButton );
+ static int question( QWidget* parent, const QString& caption, const QString& text,
+ const QString& button0Text, const QString& button1Text, const QString& button2Text,
+ int defaultButton, int escapeButton );
+ static int warning( QWidget* parent, const QString& caption, const QString& text,
+ const QString& button0Text, const QString& button1Text, const QString& button2Text,
+ int defaultButton, int escapeButton );
+ static int critical( QWidget* parent, const QString& caption, const QString& text,
+ const QString& button0Text, const QString& button1Text, const QString& button2Text,
+ int defaultButton, int escapeButton );
+// ---
+ private:
+ static void initLibrary();
+ static bool inited;
+ static bool enable;
+ };
+
+#endif
diff --git a/opensuse/core/qt3/qtrc b/opensuse/core/qt3/qtrc
new file mode 100644
index 000000000..de342fa33
--- /dev/null
+++ b/opensuse/core/qt3/qtrc
@@ -0,0 +1,28 @@
+[General]
+font=Sans Serif,10,-1,5,50,0,0,0,0,0
+style=plastik
+enableXft=true
+useXft=true
+XIMInputStyle=On The Spot
+resolveSymlinks=false
+useRtlExtensions=true
+
+[3.3]
+libraryPath=/opt/kde3/lib64/kde3/plugins/:/opt/kde3/lib/kde3/plugins
+
+[KWinPalette]
+activeBackground=#3067a1
+activeBlend=#2fb1dd
+activeForeground=#ffffff
+activeTitleBtnBg=#dcdcdc
+frame=#eeeaee
+inactiveBackground=#6e6e6e
+inactiveBlend=#949494
+inactiveForeground=#ffffff
+inactiveFrame=#eeeaee
+inactiveTitleBtnBg=#494949
+
+[Palette]
+active=#000000^e#f4f4f4^e#ffffff^e#ffffff^e#555555^e#c6c6c6^e#000000^e#ffffff^e#000000^e#ffffff^e#eeeaee^e#000000^e#447bcd^e#ffffff^e#535378^e#004000^e
+disabled=#808080^e#f4f4f4^e#ffffff^e#ffffff^e#555555^e#c6c3c6^e#c6c3c6^e#ffffff^e#808080^e#ffffff^e#eeeaee^e#000000^e#000080^e#ffffff^e#535378^e#004000^e
+inactive=#000000^e#f4f4f4^e#ffffff^e#ffffff^e#555555^e#c6c3c6^e#000000^e#ffffff^e#000000^e#ffffff^e#eeeaee^e#000000^e#447bcd^e#ffffff^e#535378^e#004000^e
diff --git a/opensuse/core/qt3/qtrc-path.diff b/opensuse/core/qt3/qtrc-path.diff
new file mode 100644
index 000000000..41830d988
--- /dev/null
+++ b/opensuse/core/qt3/qtrc-path.diff
@@ -0,0 +1,47 @@
+--- src/tools/qsettings.cpp
++++ src/tools/qsettings.cpp
+@@ -36,6 +36,7 @@
+ **********************************************************************/
+
+ #include "qplatformdefs.h"
++#include <stdlib.h>
+
+ // POSIX Large File Support redefines open -> open64
+ static inline int qt_open( const char *pathname, int flags, mode_t mode )
+@@ -465,8 +466,18 @@
+ Q_UNUSED( format );
+ #endif
+
+- QString appSettings(QDir::homeDirPath() + "/.qt/");
+- QString defPath;
++ QString home;
++ home = getenv("QT_HOME_DIR");
++ if ( !home.isEmpty() ){
++ home += "/";
++ QFileInfo i( home + "qtrc" );
++ if ( !i.isReadable() )
++ home = QDir::homeDirPath() + "/.qt/";
++ }else
++ home = QDir::homeDirPath() + "/.qt/";
++ QString appSettings(home);
++
++ QString defPath("/etc/X11/");
+ #ifdef Q_WS_WIN
+ #ifdef Q_OS_TEMP
+ TCHAR path[MAX_PATH];
+@@ -514,6 +525,15 @@
+
+ if ( !!defPath )
+ searchPaths.append(defPath);
++
++ QString system;
++ system = getenv("QT_SYSTEM_DIR");
++ if ( !system.isEmpty() && system[0] == '/') {
++ QFileInfo i( system + "/qtrc" );
++ if ( i.isReadable() )
++ searchPaths.append(system);
++ }
++
+ searchPaths.append(dir.path());
+ }
+
diff --git a/opensuse/core/qt3/revert-qt-3.3.8-khmer-fix.diff b/opensuse/core/qt3/revert-qt-3.3.8-khmer-fix.diff
new file mode 100644
index 000000000..385e6111a
--- /dev/null
+++ b/opensuse/core/qt3/revert-qt-3.3.8-khmer-fix.diff
@@ -0,0 +1,36 @@
+
+according to bug 345459, this fix for stacking letters from 3.3.8
+made it only a lot worse. revert.
+
+
+--- src/kernel/qfontengine_x11.cpp
++++ src/kernel/qfontengine_x11.cpp
+@@ -2672,23 +2655,16 @@ bool QOpenType::positionAndAdd(QShaperIt
+ // ###### fix the case where we have y advances. How do we handle this in Uniscribe?????
+ if (positions[i].new_advance) {
+ item->advances[i] = item->flags & QTextEngine::RightToLeft
+- ? -qRound((positions[i].x_advance >> 6)*scale)
++ ? -qRound((positions[i].x_advance >> 6)*scale)
+ : qRound((positions[i].x_advance >> 6)*scale);
+ } else {
+ item->advances[i] += item->flags & QTextEngine::RightToLeft
+- ? -qRound((positions[i].x_advance >> 6)*scale)
++ ? -qRound((positions[i].x_advance >> 6)*scale)
+ : qRound((positions[i].x_advance >> 6)*scale);
+ }
+- int back = 0;
+- item->offsets[i].x = qRound((positions[i].x_pos >> 6)*scale);
+- item->offsets[i].y = qRound((positions[i].y_pos >> 6)*scale);
+- while (positions[i-back].back) {
+- back += positions[i - back].back;
+- item->offsets[i].x += qRound((positions[i - back].x_pos >> 6)*scale);
+- item->offsets[i].y += qRound((positions[i - back].y_pos >> 6)*scale);
+- }
+- item->offsets[i].y = -item->offsets[i].y;
+- back = positions[i].back;
++ item->offsets[i].x = qRound((positions[i].x_pos >> 6)*scale);
++ item->offsets[i].y = -qRound((positions[i].y_pos >> 6)*scale);
++ int back = positions[i].back;
+ if (item->flags & QTextEngine::RightToLeft) {
+ while (back--) {
+ item->offsets[i].x -= item->advances[i-back];
diff --git a/opensuse/core/qt3/rubberband.diff b/opensuse/core/qt3/rubberband.diff
new file mode 100644
index 000000000..e02b17a98
--- /dev/null
+++ b/opensuse/core/qt3/rubberband.diff
@@ -0,0 +1,339 @@
+--- src/iconview/qiconview.cpp
++++ src/iconview/qiconview.cpp
+@@ -261,6 +261,7 @@
+
+ QIconViewToolTip *toolTip;
+ QPixmapCache maskCache;
++ QPixmap *backrubber;
+ QPtrDict<QIconViewItem> selectedItems;
+
+ struct ItemContainer {
+@@ -1975,14 +1976,27 @@
+ if ( picture() ) {
+ QPicture *pic = picture();
+ if ( isSelected() ) {
+- p->fillRect( pixmapRect( FALSE ), QBrush( cg.highlight(), QBrush::Dense4Pattern) );
++ p->setBrush( QBrush( cg.highlight(), QBrush::Dense4Pattern ) );
++ p->setPen( QPen( cg.highlight(), QBrush::Dense4Pattern ) );
++ p->drawRoundRect( pixmapRect( FALSE ),
++ 1000 / pixmapRect( FALSE ).width(),
++ 1000 / pixmapRect( FALSE ).height() );
+ }
+ p->drawPicture( x()-pic->boundingRect().x(), y()-pic->boundingRect().y(), *pic );
+ if ( isSelected() ) {
+- p->fillRect( textRect( FALSE ), cg.highlight() );
++ p->setBrush( QBrush( cg.highlight() ) );
++ p->setPen( QPen( cg.highlight() ) );
++ p->drawRoundRect( textRect( FALSE ),
++ 1000 / textRect( FALSE ).width(),
++ 1000 / textRect( FALSE ).height() );
+ p->setPen( QPen( cg.highlightedText() ) );
+- } else if ( view->d->itemTextBrush != NoBrush )
+- p->fillRect( textRect( FALSE ), view->d->itemTextBrush );
++ } else if ( view->d->itemTextBrush != NoBrush ) {
++ p->setBrush( view->d->itemTextBrush );
++ p->setPen( QPen( view->d->itemTextBrush.color() ) );
++ p->drawRoundRect( textRect( FALSE ),
++ 1000 / textRect( FALSE ).width(),
++ 1000 / textRect( FALSE ).height() );
++ }
+
+ int align = view->itemTextPos() == QIconView::Bottom ? AlignHCenter : AlignAuto;
+ if ( view->d->wordWrapIconText )
+@@ -2040,10 +2054,19 @@
+
+ p->save();
+ if ( isSelected() ) {
+- p->fillRect( textRect( FALSE ), cg.highlight() );
++ p->setBrush( QBrush( cg.highlight() ) );
++ p->setPen( QPen( cg.highlight() ) );
++ p->drawRoundRect( textRect( FALSE ),
++ 1000 / textRect( FALSE ).width(),
++ 1000 / textRect( FALSE ).height() );
+ p->setPen( QPen( cg.highlightedText() ) );
+- } else if ( view->d->itemTextBrush != NoBrush )
+- p->fillRect( textRect( FALSE ), view->d->itemTextBrush );
++ } else if ( view->d->itemTextBrush != NoBrush ) {
++ p->setBrush( view->d->itemTextBrush );
++ p->setPen( QPen( view->d->itemTextBrush.color() ) );
++ p->drawRoundRect( textRect( FALSE ),
++ 1000 / textRect( FALSE ).width(),
++ 1000 / textRect( FALSE ).height() );
++ }
+
+ int align = AlignHCenter;
+ if ( view->d->wordWrapIconText )
+@@ -2059,31 +2082,13 @@
+ /*!
+ Paints the focus rectangle of the item using the painter \a p and
+ the color group \a cg.
++
++ The default implementation does nothing; subclasses may
++ reimplement this function.
+ */
+
+-void QIconViewItem::paintFocus( QPainter *p, const QColorGroup &cg )
++void QIconViewItem::paintFocus( QPainter *, const QColorGroup & )
+ {
+- if ( !view )
+- return;
+-
+- view->style().drawPrimitive(QStyle::PE_FocusRect, p,
+- QRect( textRect( FALSE ).x(), textRect( FALSE ).y(),
+- textRect( FALSE ).width(),
+- textRect( FALSE ).height() ), cg,
+- (isSelected() ?
+- QStyle::Style_FocusAtBorder :
+- QStyle::Style_Default),
+- QStyleOption(isSelected() ? cg.highlight() : cg.base()));
+-
+- if ( this != view->d->currentItem ) {
+- view->style().drawPrimitive(QStyle::PE_FocusRect, p,
+- QRect( pixmapRect( FALSE ).x(),
+- pixmapRect( FALSE ).y(),
+- pixmapRect( FALSE ).width(),
+- pixmapRect( FALSE ).height() ),
+- cg, QStyle::Style_Default,
+- QStyleOption(cg.base()));
+- }
+ }
+
+ /*!
+@@ -2781,6 +2786,7 @@
+ d->renamingItem = 0;
+ d->drawActiveSelection = TRUE;
+ d->drawDragShapes = FALSE;
++ d->backrubber = 0;
+
+ connect( d->adjustTimer, SIGNAL( timeout() ),
+ this, SLOT( adjustItems() ) );
+@@ -3265,7 +3271,7 @@
+
+ void QIconView::doAutoScroll()
+ {
+- QRect oldRubber = QRect( *d->rubber );
++ QRect oldRubber = *d->rubber;
+
+ QPoint vp = viewport()->mapFromGlobal( QCursor::pos() );
+ QPoint pos = viewportToContents( vp );
+@@ -3282,7 +3288,6 @@
+ bool block = signalsBlocked();
+
+ QRect rr;
+- QRegion region( 0, 0, visibleWidth(), visibleHeight() );
+
+ blockSignals( TRUE );
+ viewport()->setUpdatesEnabled( FALSE );
+@@ -3308,9 +3313,6 @@
+ item->setSelected( TRUE, TRUE );
+ changed = TRUE;
+ rr = rr.unite( item->rect() );
+- } else {
+- region = region.subtract( QRect( contentsToViewport( item->pos() ),
+- item->size() ) );
+ }
+
+ minx = QMIN( minx, item->x() - 1 );
+@@ -3327,42 +3329,77 @@
+ viewport()->setUpdatesEnabled( TRUE );
+ blockSignals( block );
+
+- QRect r = *d->rubber;
+- *d->rubber = oldRubber;
+-
+- QPainter p;
+- p.begin( viewport() );
+- p.setRasterOp( NotROP );
+- p.setPen( QPen( color0, 1 ) );
+- p.setBrush( NoBrush );
+- drawRubber( &p );
+- d->dragging = FALSE;
+- p.end();
+-
+- *d->rubber = r;
+-
+- if ( changed ) {
+- d->drawAllBack = FALSE;
+- d->clipRegion = region;
+- repaintContents( rr, FALSE );
+- d->drawAllBack = TRUE;
++ // static bool drawAll;
++ if ( d->backrubber == 0 ) {
++ d->backrubber = new QPixmap( viewport()->rect().size() );
++ d->backrubber->fill( viewport(), viewport()->rect().topLeft() );
++ // drawAll = true;
+ }
+
++ // int oldX = 0, oldY = 0;
++ // if ( !drawAll && d->scrollTimer ) {
++ // oldX = contentsX();
++ // oldY = contentsY();
++ // }
+ ensureVisible( pos.x(), pos.y() );
++ // if ( !drawAll && d->scrollTimer && ( oldX != contentsX() || oldY != contentsY() ) )
++ // drawAll = true;
+
+- p.begin( viewport() );
+- p.setRasterOp( NotROP );
+- p.setPen( QPen( color0, 1 ) );
+- p.setBrush( NoBrush );
+- drawRubber( &p );
+- d->dragging = TRUE;
++ QRect allRect = oldRubber.normalize();
++ if ( changed )
++ allRect |= rr.normalize();
++ allRect |= d->rubber->normalize();
++ QPoint point = contentsToViewport( allRect.topLeft() );
++ allRect = QRect( point.x(), point.y(), allRect.width(), allRect.height() );
++ allRect &= viewport()->rect();
++
++ d->dragging = FALSE;
++
++ QPainter p( d->backrubber );
++ p.translate( -contentsX(), -contentsY() );
++#if 0
++ if ( !drawAll ) {
++ oldRubber = oldRubber.normalize();
++ point = contentsToViewport( oldRubber.topLeft() );
++ oldRubber = QRect( point.x(), point.y(), oldRubber.width(), oldRubber.height() );
++ oldRubber &= viewport()->rect();
++
++ point = contentsToViewport( nr.topLeft() );
++ nr = QRect( point.x(), point.y(), nr.width(), nr.height() );
++ nr &= viewport()->rect();
++
++ QRegion region;
++ if ( allRect != nr )
++ region = QRegion(allRect).subtract( QRegion( nr ) );
++ if ( allRect != oldRubber )
++ region += QRegion(allRect).subtract( QRegion( oldRubber ) );
++
++ QMemArray< QRect > ar = region.rects();
++ for ( uint i = 0; i < ar.size(); ++i ) {
++ ar[i].addCoords( -2, -2, 4, 4 );
++ ar[i] = ar[i].normalize();
++
++ p.setClipRect( ar[i] );
++ drawContents( &p, contentsX() + ar[i].left(), contentsY() + ar[i].top(), ar[i].width(), ar[i].height() );
++ }
++ }
++ else
++#endif
++ {
++ drawContents( &p,
++ contentsX() + allRect.left(), contentsY() + allRect.top(),
++ allRect.width(), allRect.height() );
++ }
+
+ p.end();
++ // drawAll = false;
++ d->dragging = TRUE;
++ bitBlt( viewport(), allRect.topLeft(), d->backrubber, allRect );
+
+ if ( changed ) {
+ emit selectionChanged();
+- if ( d->selectionMode == Single )
+- emit selectionChanged( d->currentItem );
++ if ( d->selectionMode == Single )
++ emit selectionChanged( d->currentItem );
+ }
+
+ if ( !QRect( 50, 50, viewport()->width()-100, viewport()->height()-100 ).contains( vp ) &&
+@@ -3389,9 +3426,7 @@
+
+ void QIconView::drawContents( QPainter *p, int cx, int cy, int cw, int ch )
+ {
+- if ( d->dragging && d->rubber )
+- drawRubber( p );
+-
++ p->save();
+ QRect r = QRect( cx, cy, cw, ch );
+
+ QIconViewPrivate::ItemContainer *c = d->firstContainer;
+@@ -3465,8 +3500,16 @@
+ d->currentItem->paintFocus( p, colorGroup() );
+ }
+
+- if ( d->dragging && d->rubber )
+- drawRubber( p );
++ p->restore();
++ if ( d->rubber ) {
++ p->save();
++ p->translate( contentsX(), contentsY() );
++ p->setRasterOp( NotROP );
++ p->setPen( QPen( color0, 1 ) );
++ p->setBrush( NoBrush );
++ drawRubber( p );
++ p->restore();
++ }
+ }
+
+ /*!
+@@ -4365,17 +4408,15 @@
+ void QIconView::contentsMousePressEventEx( QMouseEvent *e )
+ {
+ if ( d->rubber ) {
+- QPainter p;
+- p.begin( viewport() );
+- p.setRasterOp( NotROP );
+- p.setPen( QPen( color0, 1 ) );
+- p.setBrush( NoBrush );
++ QRect r( d->rubber->normalize() );
++ delete d->rubber;
++ d->rubber = 0;
++
++ repaintContents( r, FALSE );
++ d->dragging = FALSE;
+
+- drawRubber( &p );
+- d->dragging = FALSE;
+- p.end();
+- delete d->rubber;
+- d->rubber = 0;
++ delete d->backrubber;
++ d->backrubber = 0;
+
+ if ( d->scrollTimer ) {
+ disconnect( d->scrollTimer, SIGNAL( timeout() ), this, SLOT( doAutoScroll() ) );
+@@ -4560,21 +4601,17 @@
+ d->startDragItem = 0;
+
+ if ( d->rubber ) {
+- QPainter p;
+- p.begin( viewport() );
+- p.setRasterOp( NotROP );
+- p.setPen( QPen( color0, 1 ) );
+- p.setBrush( NoBrush );
+-
+- drawRubber( &p );
+- d->dragging = FALSE;
+- p.end();
+-
++ QRect r(d->rubber->normalize());
++
+ if ( ( d->rubber->topLeft() - d->rubber->bottomRight() ).manhattanLength() >
+ QApplication::startDragDistance() )
+ emitClicked = FALSE;
+ delete d->rubber;
+- d->rubber = 0;
++ d->rubber = 0;
++ repaintContents(r, FALSE);
++ d->dragging = FALSE;
++ delete d->backrubber;
++ d->backrubber = 0;
+ d->currentItem = d->tmpCurrentItem;
+ d->tmpCurrentItem = 0;
+ if ( d->currentItem )
+@@ -5334,9 +5371,9 @@
+ QPoint pnt( d->rubber->x(), d->rubber->y() );
+ pnt = contentsToViewport( pnt );
+
+- style().drawPrimitive(QStyle::PE_RubberBand, p,
+- QRect(pnt.x(), pnt.y(), d->rubber->width(), d->rubber->height()),
+- colorGroup(), QStyle::Style_Default, QStyleOption(colorGroup().base()));
++ style().drawPrimitive( QStyle::PE_RubberBand, p,
++ QRect( pnt.x(), pnt.y(), d->rubber->width(), d->rubber->height() ).normalize(),
++ colorGroup(), QStyle::Style_Default, QStyleOption(colorGroup().base()) );
+ }
+
+ /*!
diff --git a/opensuse/core/qt3/shut-up.diff b/opensuse/core/qt3/shut-up.diff
new file mode 100644
index 000000000..6191c5d93
--- /dev/null
+++ b/opensuse/core/qt3/shut-up.diff
@@ -0,0 +1,45 @@
+--- src/kernel/qpixmap_x11.cpp
++++ src/kernel/qpixmap_x11.cpp
+@@ -288,8 +288,9 @@
+ {
+ #if defined(QT_CHECK_STATE)
+ if ( qApp->type() == QApplication::Tty ) {
+- qWarning( "QPixmap: Cannot create a QPixmap when no GUI "
+- "is being used" );
++// qWarning( "QPixmap: Cannot create a QPixmap when no GUI "
++// "is being used" );
++ ;
+ }
+ #endif
+
+--- src/tools/qcomlibrary.cpp
++++ src/tools/qcomlibrary.cpp
+@@ -102,25 +102,11 @@
+ (const char*) QFile::encodeName(library) );
+ } else if ( ( version > QT_VERSION ) ||
+ ( ( QT_VERSION & 0xff0000 ) > ( version & 0xff0000 ) ) ) {
+- if ( warn )
+- qWarning( "Conflict in %s:\n"
+- " Plugin uses incompatible Qt library (%d.%d.%d)!",
+- (const char*) QFile::encodeName(library),
+- (version&0xff0000) >> 16, (version&0xff00) >> 8, version&0xff );
++ return FALSE;
+ } else if ( (flags & 2) != (our_flags & 2) ) {
+- if ( warn )
+- qWarning( "Conflict in %s:\n"
+- " Plugin uses %s Qt library!",
+- (const char*) QFile::encodeName(library),
+- (flags & 2) ? "multi threaded" : "single threaded" );
++ return FALSE;
+ } else if ( key != QT_BUILD_KEY ) {
+- if ( warn )
+- qWarning( "Conflict in %s:\n"
+- " Plugin uses incompatible Qt library!\n"
+- " expected build key \"%s\", got \"%s\".",
+- (const char*) QFile::encodeName(library),
+- QT_BUILD_KEY,
+- key.isEmpty() ? "<null>" : (const char *) key );
++ return FALSE;
+ } else {
+ return TRUE;
+ }
diff --git a/opensuse/core/qt3/update_spec.pl b/opensuse/core/qt3/update_spec.pl
new file mode 100644
index 000000000..8c67241dc
--- /dev/null
+++ b/opensuse/core/qt3/update_spec.pl
@@ -0,0 +1,106 @@
+#! /usr/bin/perl
+
+my $name = $ARGV[0];
+$name =~ s,.*/,,;
+$name =~ s,\.spec.*,,;
+
+my %attributes = ();
+open(FILE, $ARGV[1]) || die 'no attributes';
+my $pack = undef;
+my $text = undef;
+while ( <FILE> ) {
+ if (/^\+(.*)$/) { $pack = $1; $text = ''; next }
+ if (/^-(.*)$/) {
+ if ($pack ne $1) {
+ die "$pack and $1 do not match";
+ }
+ $text =~ s,^\s*,,;
+ $text =~ s,\s*$,,;
+ $attributes{$pack} = $text;
+ $text = undef;
+ $pack = undef;
+ next;
+ }
+ if (defined $text) {
+ $text .= $_;
+ } elsif (/^(\S*)\s*(.*)$/) {
+ my $attr = $1;
+ my $string = $2;
+ $string =~ s,^\s*,,;
+ $string =~ s,\s*$,,;
+ $attributes{$attr} = $string;
+ }
+}
+close(FILE);
+
+open(FILE, $ARGV[0]);
+
+sub description()
+{
+ if (/^%description\s*(.*)\s*/) {
+ my $suffix = $1;
+ my $pname = $name;
+
+ if ($suffix =~ m/-n\s*(.*)/) {
+ $pname = $1;
+ } else {
+ $pname = "$name-$suffix" if ($suffix);
+ }
+
+ if (defined $attributes{"description.$pname"}) {
+ print $_;
+ my $descr = $attributes{"description.$pname"};
+ print "$descr\n";
+ $_ = '';
+ do {
+ $_ = <FILE>;
+ } while ( $_ !~ /^%/ && $_ !~ /^@/ );
+ print "\n";
+ description();
+ }
+ }
+
+}
+
+# current subpackage
+my $pname = $name;
+
+while ( <FILE> )
+{
+ if (/^Name:\s*(.*)/) {
+ $name = $1;
+ $pname = $1;
+ }
+ description();
+
+ if (/^%package\s*(.*)/) {
+ my $suffix = $1;
+ if ($suffix =~ m/-n\s*(.*)/) {
+ $pname = $1;
+ } else {
+ $pname = "$name-$1";
+ }
+ }
+
+ if (/^(Summary:\s*)(.*)$/) {
+ if (defined $attributes{"summary.$pname"}) {
+ print $1 . $attributes{"summary.$pname"} ."\n";
+ next;
+ }
+ }
+ if (/^(License:\s*)(.*)$/) {
+ if (defined $attributes{"license.$pname"}) {
+ print $1 . $attributes{"license.$pname"} ."\n";
+ next;
+ }
+ }
+ if (/^(Group:\s*)(.*)$/) {
+ if (defined $attributes{"group.$pname"}) {
+ print $1 . $attributes{"group.$pname"} ."\n";
+ next;
+ }
+ }
+ print $_;
+}
+
+close(FILE);
diff --git a/opensuse/core/qt3/use-xrandr-1.2.diff b/opensuse/core/qt3/use-xrandr-1.2.diff
new file mode 100644
index 000000000..4ec4174e7
--- /dev/null
+++ b/opensuse/core/qt3/use-xrandr-1.2.diff
@@ -0,0 +1,106 @@
+qt-bugs@ issue :
+bugs.kde.org number :
+applied: no
+author: Dirk Mueller <mueller@kde.org>
+
+support xrandr 1.2 configurations. same patch like for trunk qt-copy,
+please see there for details.
+
+
+--- src/kernel/qdesktopwidget_x11.cpp
++++ src/kernel/qdesktopwidget_x11.cpp
+@@ -107,7 +107,7 @@ QDesktopWidgetPrivate::~QDesktopWidgetPr
+ screens[i] = 0;
+ }
+
+- delete [] screens;
++ free(screens);
+ }
+
+ if ( rects ) delete [] rects;
+@@ -119,30 +119,33 @@ void QDesktopWidgetPrivate::init()
+ // get the screen count
+ #ifndef QT_NO_XINERAMA
+ XineramaScreenInfo *xinerama_screeninfo = 0;
+- int unused;
++ int unused, newScreenCount;
+ use_xinerama = (XineramaQueryExtension(QPaintDevice::x11AppDisplay(),
+ &unused, &unused) &&
+ XineramaIsActive(QPaintDevice::x11AppDisplay()));
+
+ if (use_xinerama) {
+ xinerama_screeninfo =
+- XineramaQueryScreens(QPaintDevice::x11AppDisplay(), &screenCount);
++ XineramaQueryScreens(QPaintDevice::x11AppDisplay(), &newScreenCount);
++
++ if (xinerama_screeninfo)
+ defaultScreen = 0;
+ } else
+ #endif // QT_NO_XINERAMA
+ {
+ defaultScreen = DefaultScreen(QPaintDevice::x11AppDisplay());
+- screenCount = ScreenCount(QPaintDevice::x11AppDisplay());
++ newScreenCount = ScreenCount(QPaintDevice::x11AppDisplay());
++ use_xinerama = false;
+ }
+
+ delete [] rects;
+- rects = new QRect[ screenCount ];
++ rects = new QRect[ newScreenCount ];
+ delete [] workareas;
+- workareas = new QRect[ screenCount ];
++ workareas = new QRect[ newScreenCount ];
+
+ // get the geometry of each screen
+- int i, x, y, w, h;
+- for ( i = 0; i < screenCount; i++ ) {
++ int i, j, x, y, w, h;
++ for ( i = 0, j = 0; i < newScreenCount; i++ ) {
+
+ #ifndef QT_NO_XINERAMA
+ if (use_xinerama) {
+@@ -159,11 +162,33 @@ void QDesktopWidgetPrivate::init()
+ h = HeightOfScreen(ScreenOfDisplay(QPaintDevice::x11AppDisplay(), i));
+ }
+
+- rects[i].setRect(x, y, w, h);
+ workareas[i] = QRect();
++ rects[j].setRect(x, y, w, h);
++
++ // overlapping?
++ if (j > 0 && rects[j-1].intersects(rects[j])) {
++ // pick the bigger one, ignore the other
++ if ((rects[j].width()*rects[j].height()) >
++ (rects[j-1].width()*rects[j-1].height()))
++ rects[j-1] = rects[j];
++ }
++ else
++ j++;
+ }
+
++ if (screens) {
++ // leaks QWidget* pointers on purpose, can't delete them as pointer escapes
++ screens = (QWidget**) realloc(screens, j * sizeof(QWidget*));
++ if (j > screenCount)
++ memset(&screens[screenCount], 0, (j-screenCount) * sizeof(QWidget*));
++ }
++
++ screenCount = j;
++
+ #ifndef QT_NO_XINERAMA
++ if (use_xinerama && screenCount == 1)
++ use_xinerama = false;
++
+ if (xinerama_screeninfo)
+ XFree(xinerama_screeninfo);
+ #endif // QT_NO_XINERAMA
+@@ -216,8 +241,7 @@ QWidget *QDesktopWidget::screen( int scr
+ screen = d->defaultScreen;
+
+ if ( ! d->screens ) {
+- d->screens = new QWidget*[ d->screenCount ];
+- memset( d->screens, 0, d->screenCount * sizeof( QWidget * ) );
++ d->screens = (QWidget**) calloc( d->screenCount, sizeof(QWidget*));
+ d->screens[ d->defaultScreen ] = this;
+ }
+
diff --git a/opensuse/core/qt3/xinerama-qpopupmenu.diff b/opensuse/core/qt3/xinerama-qpopupmenu.diff
new file mode 100644
index 000000000..07927206f
--- /dev/null
+++ b/opensuse/core/qt3/xinerama-qpopupmenu.diff
@@ -0,0 +1,104 @@
+--- src/widgets/qpopupmenu.cpp.sav
++++ src/widgets/qpopupmenu.cpp
+@@ -457,6 +457,15 @@
+ menuContentsChanged();
+ }
+
++QRect QPopupMenu::screenRect( const QPoint& pos )
++{
++ int screen_num = QApplication::desktop()->screenNumber( pos );
++#ifdef Q_WS_MAC
++ return QApplication::desktop()->availableGeometry( screen_num );
++#else
++ return QApplication::desktop()->screenGeometry( screen_num );
++#endif
++}
+ /*!
+ Displays the popup menu so that the item number \a indexAtPoint
+ will be at the specified \e global position \a pos. To translate a
+@@ -501,6 +510,15 @@
+ // point.
+ #endif
+
++ QRect screen = screenRect( geometry().center());
++ QRect screen2 = screenRect( QApplication::reverseLayout()
++ ? pos+QPoint(width(),0) : pos );
++ // if the widget is not in the screen given by the position, move it
++ // there, so that updateSize() uses the right size of the screen
++ if( screen != screen2 ) {
++ screen = screen2;
++ move( screen.x(), screen.y());
++ }
+ if(d->scroll.scrollable) {
+ d->scroll.scrollable = QPopupMenuPrivate::Scroll::ScrollNone;
+ d->scroll.topScrollableIndex = d->scroll.scrollableSize = 0;
+@@ -520,18 +538,6 @@
+ updateSize(TRUE);
+ }
+
+- int screen_num;
+- if (QApplication::desktop()->isVirtualDesktop())
+- screen_num =
+- QApplication::desktop()->screenNumber( QApplication::reverseLayout() ?
+- pos+QPoint(width(),0) : pos );
+- else
+- screen_num = QApplication::desktop()->screenNumber( this );
+-#ifdef Q_WS_MAC
+- QRect screen = QApplication::desktop()->availableGeometry( screen_num );
+-#else
+- QRect screen = QApplication::desktop()->screenGeometry( screen_num );
+-#endif
+ int sw = screen.width(); // screen width
+ int sh = screen.height(); // screen height
+ int sx = screen.x(); // screen pos
+@@ -1059,7 +1065,7 @@
+ mi->iconSet()->pixmap( QIconSet::Small, QIconSet::Normal ).width() + 4 );
+ }
+
+- int dh = QApplication::desktop()->height();
++ int dh = screenRect( geometry().center()).height();
+ ncols = 1;
+
+ for ( QMenuItemListIt it2( *mitems ); it2.current(); ++it2 ) {
+@@ -2313,9 +2319,9 @@
+ bool right = FALSE;
+ if ( ( parentMenu && parentMenu->isPopupMenu &&
+ ((QPopupMenu*)parentMenu)->geometry().x() < geometry().x() ) ||
+- p.x() < 0 )
++ p.x() < screenRect( p ).left())
+ right = TRUE;
+- if ( right && (ps.width() > QApplication::desktop()->width() - mapToGlobal( r.topRight() ).x() ) )
++ if ( right && (ps.width() > screenRect( p ).right() - mapToGlobal( r.topRight() ).x() ) )
+ right = FALSE;
+ if ( right )
+ p.setX( mapToGlobal( r.topRight() ).x() );
+@@ -2326,7 +2332,7 @@
+ bool left = FALSE;
+ if ( ( parentMenu && parentMenu->isPopupMenu &&
+ ((QPopupMenu*)parentMenu)->geometry().x() > geometry().x() ) ||
+- p.x() + ps.width() > QApplication::desktop()->width() )
++ p.x() + ps.width() > screenRect( p ).right() )
+ left = TRUE;
+ if ( left && (ps.width() > mapToGlobal( r.topLeft() ).x() ) )
+ left = FALSE;
+@@ -2334,8 +2340,8 @@
+ p.setX( mapToGlobal( r.topLeft() ).x() - ps.width() );
+ }
+ QRect pr = popup->itemGeometry(popup->count() - 1);
+- if (p.y() + ps.height() > QApplication::desktop()->height() &&
+- p.y() - ps.height() + (QCOORD) pr.height() >= 0)
++ if (p.y() + ps.height() > screenRect( p ).bottom() &&
++ p.y() - ps.height() + (QCOORD) pr.height() >= screenRect( p ).top())
+ p.setY( p.y() - ps.height() + (QCOORD) pr.height());
+
+ if ( style().styleHint(QStyle::SH_PopupMenu_SloppySubMenus, this )) {
+--- src/widgets/qpopupmenu.h.sav
++++ src/widgets/qpopupmenu.h
+@@ -152,6 +152,7 @@
+
+ QSize updateSize(bool force_recalc=FALSE, bool do_resize=TRUE);
+ void updateRow( int row );
++ QRect screenRect(const QPoint& pos);
+ #ifndef QT_NO_ACCEL
+ void updateAccel( QWidget * );
+ void enableAccel( bool );
diff --git a/opensuse/core/qt3/xinerama.patch b/opensuse/core/qt3/xinerama.patch
new file mode 100644
index 000000000..1fee04aae
--- /dev/null
+++ b/opensuse/core/qt3/xinerama.patch
@@ -0,0 +1,49 @@
+--- src/dialogs/qdialog.cpp
++++ src/dialogs/qdialog.cpp
+@@ -670,6 +670,11 @@
+
+ #if defined(Q_WS_X11)
+ extern "C" { int XSetTransientForHint( Display *, unsigned long, unsigned long ); }
++#include <private/qt_x11_p.h>
++#undef FocusIn
++// defined in qapplication_x11.cpp
++extern Atom qt_net_wm_full_placement;
++extern bool qt_net_supports(Atom atom);
+ #endif // Q_WS_X11
+
+ /*!
+@@ -691,10 +696,12 @@
+
+ if ( !did_resize )
+ adjustSize();
+- if ( has_relpos && !did_move ) {
+- adjustPositionInternal( parentWidget(), TRUE );
+- } else if ( !did_move ) {
+- adjustPositionInternal( parentWidget() );
++ if( !qt_net_supports( qt_net_wm_full_placement )) {
++ if ( has_relpos && !did_move ) {
++ adjustPositionInternal( parentWidget(), TRUE );
++ } else if ( !did_move ) {
++ adjustPositionInternal( parentWidget() );
++ }
+ }
+
+ if (windowState() != state)
+--- src/kernel/qapplication_x11.cpp
++++ src/kernel/qapplication_x11.cpp
+@@ -273,6 +273,7 @@
+ Atom qt_net_wm_state_stays_on_top = 0; // KDE extension
+ Atom qt_net_wm_pid = 0;
+ Atom qt_net_wm_user_time = 0;
++Atom qt_net_wm_full_placement = 0; // KDE extension
+ // Enlightenment support
+ Atom qt_enlightenment_desktop = 0;
+
+@@ -1989,6 +1990,7 @@
+ &qt_net_wm_state_stays_on_top );
+ qt_x11_intern_atom( "_NET_WM_PID", &qt_net_wm_pid );
+ qt_x11_intern_atom( "_NET_WM_USER_TIME", &qt_net_wm_user_time );
++ qt_x11_intern_atom( "_NET_WM_FULL_PLACEMENT", &qt_net_wm_full_placement );
+ qt_x11_intern_atom( "ENLIGHTENMENT_DESKTOP", &qt_enlightenment_desktop );
+ qt_x11_intern_atom( "_NET_WM_NAME", &qt_net_wm_name );
+ qt_x11_intern_atom( "_NET_WM_ICON_NAME", &qt_net_wm_icon_name );
diff --git a/opensuse/core/tde-filesystem/macros.tde b/opensuse/core/tde-filesystem/macros.tde
index b488ea8e7..20998b9b9 100644
--- a/opensuse/core/tde-filesystem/macros.tde
+++ b/opensuse/core/tde-filesystem/macros.tde
@@ -24,7 +24,7 @@
%_tde_docdir %{_tde_sharedir}/doc/
%_tde_htmldir %{_tde_sharedir}/doc/HTML
%_tde_wallpapersdir %{_tde_sharedir}/wallpapers
-%_tde_icondir %{_tde_sharedir}/icons
+%_tde_icondir %{_tde_iconsdir}
%_tde_sounddir %{_tde_sharedir}/sounds
%_tde_locale %{_tde_sharedir}/locale
%_tde_mimedir %{_tde_sharedir}/mimelnk
@@ -42,7 +42,7 @@
%_tde_platform_version 3.5.13
-%tde_runtime_requires Requires: tdebase3-runtime >= %_tde_platform_version qt3 >= 3.3.8c
+%tde_runtime_requires Requires: tdebase3-runtime >= %_tde_platform_version qt3 >= 3.3.8d
%_tde_build_type release
diff --git a/opensuse/core/tdebase/tdebase.spec b/opensuse/core/tdebase/tdebase.spec
index 52d6c3c81..1d37c16ca 100644
--- a/opensuse/core/tdebase/tdebase.spec
+++ b/opensuse/core/tdebase/tdebase.spec
@@ -1,7 +1,7 @@
#
-# spec file for package kdebase3
+# spec file for package tdebase (version 3.5.13)
#
-# Copyright (c) 2011 SUSE LINUX Products GmbH, Nuernberg, Germany.
+# copyright (c) 2011 the Trinity Project
#
# All modifications and additions to the file contributed by third parties
# remain the property of their copyright owners, unless otherwise agreed
@@ -11,70 +11,41 @@
# case the license is the MIT License). An "Open Source License" is a
# license that conforms to the Open Source Definition (Version 1.9)
# published by the Open Source Initiative.
-
-# Please submit bugfixes or comments via http://bugs.opensuse.org/
-#
+#
+# Please submit bugfixes or comments to http://bugs.trinitydesktop.org/
# norootforbuild
-%if %suse_version < 1210 || 0%{?is_kde_kde3} > 0
-%define with_hal 1
-%else
-%define with_hal 0
-%endif
-
-Name: kdebase3
-BuildRequires: OpenEXR-devel cups-devel db-devel doxygen graphviz kdelibs3-devel krb5-devel libsmbclient-devel mDNSResponder-devel openldap2 openldap2-devel openmotif openmotif-devel openslp-devel openssh pam-devel pcsc-lite-devel qt3-devel-doc samba-client utempter xorg-x11
-BuildRequires: unsermake xorg-x11-libfontenc-devel
+Name: tdebase
+BuildRequires: OpenEXR-devel cups-devel db-devel doxygen graphviz tdelibs-devel krb5-devel libsmbclient-devel mDNSResponder-devel openldap2 openldap2-devel openmotif openmotif-devel openslp-devel openssh pam-devel pcsc-lite-devel qt3-devel-doc samba-client utempter xorg-x11
+BuildRequires: libtqt4-devel tde-filesystem cmake xorg-x11-libfontenc-devel
BuildRequires: liblazy-devel
-%if %suse_version >= 1130
BuildRequires: libusb-compat-devel
-%endif
-%if 0%{?with_hal} > 0
-BuildRequires: hal-devel
-Provides: kdebase3-with-hal-enabled
-%endif
BuildRequires: fdupes libbz2-devel
-%ifnarch s390 s390x
BuildRequires: libsensors4-devel
-%endif
%define qt_path /usr/lib/qt3
-%define kde_path /opt/kde3
+%define kde_path %{_tde_prefix}
Provides: windowmanager kfontinst kdebase3-konqueror kdebase3-khotkeys
Obsoletes: kfontinst kdebase3-konqueror kdebase3-khotkeys
-# bug437293
-%ifarch ppc64
-Obsoletes: kdebase3-64bit
-%endif
-#
-Requires: kdelibs3 >= %( echo `rpm -q --queryformat '%{VERSION}' kdelibs3`)
+Requires: tdelibs >= %( echo `rpm -q --queryformat '%{VERSION}' tdelibs`)
Requires: xorg-x11 misc-console-font
-Recommends: kdelibs3_doc
+Recommends: tdelibs_doc
Recommends: gdb
PreReq: fileshareset
%define fileshare_prefix %{_prefix}
-Conflicts: kdebase3-SuSE <= 9.0
PreReq: /bin/sh fileutils permissions
-%if %suse_version < 1120
-Requires: kdebase3-apps kdebase3-workspace
-%endif
-%if %suse_version > 1130
-Provides: kdebase3-beagle = 3.5.10
-Obsoletes: kdebase3-beagle <= 3.5.10
-%endif
License: GPLv2+
-Group: System/GUI/KDE
-Summary: The KDE Core Components
+Group: System/GUI/TDE
+Summary: The Trinity Desktop Core Components
BuildRoot: %{_tmppath}/%{name}-%{version}-build
-Url: http://www.kde.org/
-Version: 3.5.10.1
-Release: 17
-%define kde_version 3.5.10
-Requires: kdebase3-runtime == %{version}
-Source0: kdebase-%{kde_version}.tar.bz2
+URL: http://www.trinitydesktop.org/
+Version: 3.5.13
+Release: 1
+Requires: %{name}-runtime == %{version}
+Source0: tdebase-%{version}.tar.bz2
Source1: baselibs.conf
Source3: startkde.suse.sh
-Source4: kdebase3.fillup
+Source4: tdebase.fillup
Source6: ksysguardd.init
# we append this file for older dist verions
Source8: mp3-info.tar.bz2
@@ -238,23 +209,23 @@ Patch243: taskbar.patch
Patch244: mtab-reenable.patch
%description
-This package contains kdebase, one of the basic packages of the K
-Desktop Environment. It contains, among others, kwin (the KDE window
-manager), Konqueror (the KDE Web browser), and KControl (the
+This package contains tdebase, one of the basic packages of the Trinity Desktop Environment. It contains, among others, kwin (the window
+manager), Konqueror (the Web browser), and KControl (the
configuration program)
-This package is needed if you want to use the KDE Desktop. It is not
-needed if you only want to start some KDE applications.
+This package is needed if you want to use the Trinity Desktop. It is not
+needed if you only want to start some Trinity applications.
Authors:
--------
+ Timothy Pearson <kb9vqf@pearsoncomputing.net>
The KDE Team <kde@kde.org>
%package -n misc-console-font
License: GPLv2+
-Group: System/GUI/KDE
+Group: System/GUI/TDE
Summary: A font for terminal usage
%description -n misc-console-font
@@ -264,36 +235,35 @@ This package contains the Misc Console font as shipped with KDE.
Authors:
--------
+ Timothy Pearson <kb9vqf@pearsoncomputing.net>
The KDE Team <kde@kde.org>
%package runtime
License: GPLv2+
-Summary: Runtime Dependencies of KDE3 Applications
-Group: System/GUI/KDE
+Summary: Runtime Dependencies of Trinity Applications
+Group: System/GUI/TDE
Provides: kio_fish
Obsoletes: kio_fish
-Provides: kdebase3:/opt/kde3/%_lib/libkonq.so.4
+Provides: tdebase:%{_tde_libdir}/libkonq.so.4
%description runtime
-This package contains runtime dependencies of KDE3 applications like
+This package contains runtime dependencies of Trinity applications like
KIO-slaves.
Authors:
--------
+ Timothy Pearson <kb9vqf@pearsoncomputing.net>
The KDE Team <kde@kde.org>
%package workspace
License: GPLv2+
-Summary: Workspace Components of KDE3 Desktop
-Group: System/GUI/KDE
-Requires: kdebase3 == %{version}
-Provides: kdebase3:/opt/kde3/bin/kicker
-Recommends: kdebase3-ksysguardd == %{version}
-%if 0%{?with_hal} > 0
-Recommends: kdebase3-with-hal-enabled
-%endif
+Summary: Workspace Components of Trinity Desktop
+Group: System/GUI/TDE
+Requires: %{name} == %{version}
+Provides: tdebase:%{_tde_bindir}/kicker
+Recommends: %{name}-ksysguardd == %{version}
%description workspace
This package contains the wrkspace components of kdebase3 like
@@ -302,14 +272,15 @@ kdesktop, kicker and kwin.
Authors:
--------
+ Timothy Pearson <kb9vqf@pearsoncomputing.net>
The KDE Team <kde@kde.org>
%package apps
License: GPLv2+
-Summary: Major Applications KDE3 Desktop
-Group: System/GUI/KDE
-Requires: kdebase3 == %{version}
-Provides: kdebase3:/opt/kde3/bin/konsole
+Summary: Trinity's Major Applications
+Group: System/GUI/TDE
+Requires: %{name} == %{version}
+Provides: %{name}:%{_tde_bindir}/konsole
%description apps
This package contains the major applications kdebase3 like
@@ -318,55 +289,53 @@ Kate, Konqueror and KWrite.
Authors:
--------
+ Timothy Pearson <kb9vqf@pearsoncomputing.net>
The KDE Team <kde@kde.org>
%package devel
License: GPLv2+
-Requires: kdelibs3-devel kdebase3 = %version kdebase3-apps = %version kdebase3-runtime = %version kdebase3-workspace = %version
-Summary: KDE Base Package: Base, Build Environment
-Group: System/GUI/KDE
+Requires: tdelibs-devel %{name} = %{version} %{name}-apps = %{version} %{name}-runtime = %{version} %{name}-workspace = %{version}
+Summary: Trinity Base, Build Environment
+Group: System/GUI/TDE
%description devel
-This package contains KDEbase, one of the basic packages of the K
-Desktop Environment. It contains, among other things, KWIN, the KDE
-window manager; Konqueror, the KDE web and file browser; and KControl,
-the KDE configuration program.
+This package contains the development files for the Trinity Desktop Environent Base Package, including runtime, workspace, and core applications.
-This package is not needed if you do not want to compile high level KDE
+It is not needed if you do not want to compile high level KDE
applications.
Authors:
--------
+ Timothy Pearson <kb9vqf@pearsoncomputing.net>
The KDE Team <kde@kde.org>
%package kdm
License: GPLv2+
# usesubdirs kdm
-Summary: The KDE login and display manager
-Provides: kdebase3:/opt/kde3/bin/kdm
-Provides: kdebase:/opt/kde2/bin/kdm
-Provides: kdebase3-kdm-SLD:/opt/kde3/bin/kdm
+Summary: The Trinity login and display manager
+Provides: tdebase:%{_tde_bindir}/kdm
Requires: xorg-x11
-Requires: kdebase3-runtime >= %version
-Group: System/GUI/KDE
+Requires: %{name}-runtime >= %version
+Group: System/GUI/TDE
PreReq: %fillup_prereq /bin/grep
%description kdm
-This package contains kdm, the login and session manager for KDE.
-
+This package contains kdm, the login and session manager for Trinity.
+Note that the RC symlink for Trinity's KDM is /usr/sbin/tdm.
Authors:
--------
+ Timothy Pearson <kb9vqf@pearsoncomputing.net>
The KDE Team <kde@kde.org>
%package samba
License: GPLv2+
# usesubdirs kioslave/smb kcontrol/samba
-Summary: KDE Base package: Windows Connection Module
-Group: System/GUI/KDE
+Summary: Trinity's Windows Connection Module
+Group: System/GUI/TDE
%description samba
This package provides the "smb://" protocol, to connect to and from
@@ -376,13 +345,14 @@ Windows and Samba shares.
Authors:
--------
+ Timothy Pearson <kb9vqf@pearsoncomputing.net>
The KDE Team <kde@kde.org>
%package extra
License: GPLv2+
# usesubdirs kpersonalizer kcontrol/thememgr
-Summary: KDE Base package: Extra Applications
-Group: System/GUI/KDE
+Summary: Trinity's Extra Applications
+Group: System/GUI/TDE
%description extra
This package contains applications which are usually not needed on
@@ -396,17 +366,18 @@ SUSE.
Authors:
--------
+ Timothy Pearson <kb9vqf@pearsoncomputing.net>
The KDE Team <kde@kde.org>
%package nsplugin
License: GPLv2+
-%ifarch x86_64 ppc64 s390x ia64
+%ifarch x86_64
Requires: nspluginwrapper
%endif
-Supplements: kdebase3 >= %version
-Requires: kdebase3 = %version
-Summary: Netscape plugin support for KDE
-Group: System/GUI/KDE
+Supplements: tdebase >= %version
+Requires: tdebase = %version
+Summary: Netscape plugin support for Konqueror
+Group: System/GUI/TDE
%description nsplugin
This package contains support for Netscape plug-ins in konqueror. You
@@ -416,78 +387,57 @@ have to enable JavaScript for this.
Authors:
--------
+ Timothy Pearson <kb9vqf@pearsoncomputing.net>
The KDE Team <kde@kde.org>
%package ksysguardd
License: GPLv2+
PreReq: %insserv_prereq %fillup_prereq aaa_base
-Summary: KDE base package: ksysguard daemon
-Group: System/GUI/KDE
-Provides: kdebase4-workspace-ksysguardd
+Summary: Trinity's ksysguard daemon
+Group: System/GUI/TDE
%description ksysguardd
This package contains the ksysguard daemon. It is needed for ksysguard.
-This package can be installed on servers without any other KDE packages
-to guard the system from remote computers.
+This package can be installed on servers without any other Trinity
+packages to guard the system from remote computers.
Authors:
--------
+ Timothy Pearson <kb9vqf@pearsoncomputing.net>
The KDE Team <kde@kde.org>
%package session
License: GPLv2+
-Summary: The KDE Session
-Group: System/GUI/KDE
-Provides: kdebase3:/usr/bin/kde
+Summary: The Trinity Session
+Group: System/GUI/TDE
+Provides: tdebase:/usr/bin/tde
Requires: kdebase3-workspace
%description session
-This package contains the startup scripts necessary to start a KDE
-session from kdm.
+This package contains the startup scripts necessary to start a Trinity
+session from the login screen.
Authors:
--------
+ Timothy Pearson <kb9vqf@pearsoncomputing.net>
The KDE Team <kde@kde.org>
-%if %suse_version < 1140
-
-%package beagle
-License: GPLv2+
-Summary: Beagle dependent plugins for KDE desktop
-Group: System/GUI/KDE
-Requires: beagle >= 0.3.0
-Requires: kdebase3-workspace = %version
-Supplements: packageand(kdebase3-session:beagle)
-BuildRequires: libbeagle-devel
-
-%description beagle
-This package contains kdebase plugins which provide additional search
-functionality via Beagle.
-
-
-
-Authors:
---------
- The KDE Team <kde@kde.org>
-
-%endif
-
%package -n fileshareset
License: GPLv2+
Summary: Set and list fileshares
Group: System/Management
Version: 2.0
-Release: 578
+Release: 579
%description -n fileshareset
-This package contains the the fileshareset utility to allow users to
+This package contains the the fieshareset utility to allow users to
add or remove file shares. It's also possible to list currently shared
locations. /etc/security/fileshare.conf is the main configuration file.
@@ -497,10 +447,8 @@ Authors:
--------
Uwe Gansert <uwe.gansert at SuSE dot de>
-%define sysconfdir /etc
-
%prep
-%setup -q -b 8 -b 13 -n kdebase-%{kde_version}
+%setup -q -b 8 -b 13 -n tdebase-%{version}
%patch0
%patch3
%patch5
@@ -543,10 +491,8 @@ Authors:
# default-to-halt
%patch81
%patch82
-%if %suse_version > 1010
%patch83
%patch77
-%endif
%patch200
%patch215
%patch84
@@ -555,16 +501,9 @@ Authors:
%patch22
%patch92
%patch88
-%if %suse_version > 1020
%patch96
-%else
-%patch996
-%endif
# xcursor
%patch99
-%ifnarch %ix86 x86_64
-%patch80
-%endif
%patch62
%patch69
%patch104
@@ -585,7 +524,6 @@ Authors:
%patch156
%patch157
%patch160
-%if %suse_version > 1010
%patch161
pushd kicker
%patch162
@@ -593,16 +531,10 @@ pushd ../kcontrol/kicker
%patch158
popd
popd
-%if %suse_version > 1010
-%if %suse_version < 1140
-%patch159
-%endif
-%endif
%patch165
%patch166
%patch167
tar xvfj %SOURCE20
-%endif
%patch163
%patch125
%patch169
@@ -614,15 +546,11 @@ tar xvfj %SOURCE20
%patch177
%patch179
%patch180
-%if %suse_version > 1010
%patch189
-%endif
%patch190
%patch195
-%if %suse_version > 1020
%patch198
%patch199
-%endif
%patch203
%patch204
%patch205
@@ -645,24 +573,13 @@ popd
%patch206
%patch227
%patch228
-%if %suse_version > 1030
-%if %suse_version < 1140
-pushd kicker
-%patch1629
-popd
-%patch229
-%patch230
-%endif
-%endif
%patch231
%patch232
%patch233
%patch234
%patch235
%patch236
-%if %suse_version > 1010
%patch237
-%endif
%patch238
%patch239
%patch240 -p1
@@ -674,105 +591,58 @@ popd
rm -rf kappfinder
rm pics/crystalsvg/cr??-*emacs.png
cp %SOURCE17 l10n/tw/flag.png
-. /etc/opt/kde3/common_options
cd ../fileshareset2
aclocal
autoconf
automake -a -c
-cd ../kdebase-%{kde_version}
+cd ../%{name}-%{version}
update_admin
%build
-. /etc/opt/kde3/common_options
-DEBUG="--disable-debug"
-FINAL="--enable-final"
-PARANOIA=""
-%ifnarch s390
-PARANOIA="--with-cdparanoia"
-%endif
- LDAP="--with-ldap"
-%if %suse_version > 1010
- MOTIF_INCLUDE="/usr/include"
-X_SERVER=/usr/bin/X RUN_KAPPFINDER=no \
-%else
- MOTIF_INCLUDE="/usr/X11R6/include"
-X_SERVER=/usr/X11R6/bin/X RUN_KAPPFINDER=no \
-%endif
-./configure \
- $configkde \
- $PARANOIA \
- $LDAP \
- $FLAGS \
- $XINERAMA \
-%if %suse_version > 1010
- --with-motif-libraries=/usr/%{_lib}/ \
-%else
- --with-motif-libraries=/usr/X11R6/%{_lib}/ \
-%endif
- --with-motif-includes=$MOTIF_INCLUDE \
- --with-samba-libs \
- --with-pam=xdm \
- --with-kdm-xconsole \
- --with-kdm-pam=xdm \
- --with-kcp-pam=kcheckpass \
- --with-kss-pam=kcheckpass
- do_make %{?_smp_mflags}
+
+%cmake_tde -d build -- -DCMAKE_SKIP_RPATH=OFF \
+ -DWITH_HAL=OFF \
+ -DWITH_LDAP=ON \
+ -DWITH_ARTS=ON \
+ -DWITH_SAMBA=ON \
+ -DWITH_SASL=ON \
+ -DWITH_LIBUSB=ON \
+ -DWITH_PAM=ON \
+ -DBUILD_ALL=ON
+
+%make_tde -d build
+
cd ../fileshareset2
./configure --prefix=%{fileshare_prefix}
make %{?_smp_mflags}
%install
-. /etc/opt/kde3/common_options
# relabel smb icon
grep -v ^Icon= kioslave/smb/smb-network.desktop | grep -v ^Name > w
mv w kioslave/smb/smb-network.desktop
echo "Icon=samba" >> kioslave/smb/smb-network.desktop
echo "Name=SMB Shares" >> kioslave/smb/smb-network.desktop
# install
-do_make DESTDIR=$RPM_BUILD_ROOT $INSTALL_TARGET
-rm $RPM_BUILD_ROOT/opt/kde3/share/applnk/System/kmenuedit.desktop
-rm $RPM_BUILD_ROOT/opt/kde3/share/applnk/System/kpersonalizer.desktop
-rm $RPM_BUILD_ROOT/opt/kde3/share/applnk/Utilities/kpager.desktop
-rm $RPM_BUILD_ROOT/opt/kde3/share/applnk/Internet/keditbookmarks.desktop
-rm $RPM_BUILD_ROOT/opt/kde3/share/applnk/Toys/ktip.desktop
-install -m 0644 %SOURCE12 $RPM_BUILD_ROOT/opt/kde3/share/fonts/
-%if %suse_version > 1100
+%makeinstall_tde -d build
+rm $RPM_BUILD_ROOT/%{_tde_appsdir}/System/kmenuedit.desktop
+rm $RPM_BUILD_ROOT/%{_tde_appsdir}/System/kpersonalizer.desktop
+rm $RPM_BUILD_ROOT/%{_tde_appsdir}/Utilities/kpager.desktop
+rm $RPM_BUILD_ROOT/%{_tde_appsdir}/Internet/keditbookmarks.desktop
+rm $RPM_BUILD_ROOT/%{_tde_appsdir}/Toys/ktip.desktop
+install -m 0644 %SOURCE12 $RPM_BUILD_ROOT/%{_tde_sharedir}/fonts/
install -D -m 0644 %SOURCE21 $RPM_BUILD_ROOT/etc/pam.d/kcheckpass
-%else
-%if %suse_version > 1010
-install -D -m 0644 %SOURCE921 $RPM_BUILD_ROOT/etc/pam.d/kcheckpass
-%else
-install -D -m 0644 %SOURCE914 $RPM_BUILD_ROOT/etc/pam.d/xdm-np
-install -D -m 0644 %SOURCE9921 $RPM_BUILD_ROOT/etc/pam.d/kcheckpass
-%endif
-%endif
-install -m 0644 %SOURCE22 $RPM_BUILD_ROOT/opt/kde3/share/services/searchproviders/
-install -m 0644 %SOURCE23 $RPM_BUILD_ROOT/opt/kde3/share/services/searchproviders/
-%if %suse_version < 1011
-mkdir -p $RPM_BUILD_ROOT/usr/X11R6/bin
-%endif
-mkdir -p ${RPM_BUILD_ROOT}/usr/bin \
- ${RPM_BUILD_ROOT}/usr/sbin \
+install -m 0644 %SOURCE22 $RPM_BUILD_ROOT/%{_tde_servicesdir}/searchproviders/
+install -m 0644 %SOURCE23 $RPM_BUILD_ROOT/%{_tde_servicesdir}/searchproviders/
+mkdir -p ${RPM_BUILD_ROOT}/%{_bindir} \
+ ${RPM_BUILD_ROOT}/%{_sbindir} \
${RPM_BUILD_ROOT}/var/run/xdmctl
-%if %suse_version > 1010
- ln -fs /opt/kde3/bin/startkde $RPM_BUILD_ROOT/usr/bin/kde
- ln -fs /opt/kde3/bin/startkde $RPM_BUILD_ROOT/usr/bin/startkde3
-%else
- ln -fs /opt/kde3/bin/startkde $RPM_BUILD_ROOT/usr/X11R6/bin/kde
-%endif
-ln -sf rcxdm ${RPM_BUILD_ROOT}/usr/sbin/rckdm
-#%if %suse_version > 1020
-#rm ${RPM_BUILD_ROOT}/opt/kde3/bin/ksysguardd
-#rm ${RPM_BUILD_ROOT}/etc/ksysguarddrc
-#%else
-mv ${RPM_BUILD_ROOT}/opt/kde3/bin/ksysguardd ${RPM_BUILD_ROOT}/usr/bin/ksysguardd
-ln -sf /usr/bin/ksysguardd ${RPM_BUILD_ROOT}/opt/kde3/bin/ksysguardd
-#%endif
-install -d ${RPM_BUILD_ROOT}/opt/kde3/env
-%if %suse_version < 1001
-install -m 0755 %SOURCE3 ${RPM_BUILD_ROOT}/opt/kde3/env
-%endif
-install -D -m 0755 %SOURCE16 ${RPM_BUILD_ROOT}/opt/kde3/shutdown/stopkde.suse.sh
+ln -fs %{_tde_bindir}/startkde $RPM_BUILD_ROOT/usr/bin/tde
+ln -fs %{_tde_bindir}/startkde $RPM_BUILD_ROOT/usr/bin/starttde
+ln -sf rcxdm ${RPM_BUILD_ROOT}/usr/sbin/rctdm
+mv ${RPM_BUILD_ROOT}/%{_tde_bindir}/ksysguardd ${RPM_BUILD_ROOT}/%{_bindir}/ksysguardd
+ln -sf %{_bindir}/ksysguardd ${RPM_BUILD_ROOT}/%{_tde_bindir}/ksysguardd
+install -d ${RPM_BUILD_ROOT}/%{_tde_prefix}/env
+install -D -m 0755 %SOURCE16 ${RPM_BUILD_ROOT}/%{_tde_prefix}/shutdown/stopkde.suse.sh
mkdir -p "${RPM_BUILD_ROOT}"/etc/security/
echo "RESTRICT=yes" > "${RPM_BUILD_ROOT}"/etc/security/fileshare.conf
#
@@ -780,71 +650,88 @@ echo "RESTRICT=yes" > "${RPM_BUILD_ROOT}"/etc/security/fileshare.conf
#
mkdir -p $RPM_BUILD_ROOT/var/adm/fillup-templates
mkdir -p $RPM_BUILD_ROOT/etc/init.d/
-install -m 0644 %SOURCE9 ${RPM_BUILD_ROOT}/opt/kde3/share/apps/kdewizard/pics/wizard_small.png
-#%if %suse_version < 1031
+install -m 0644 %SOURCE9 ${RPM_BUILD_ROOT}/%{_tde_datadir}/kdewizard/pics/wizard_small.png
install -m 0744 %SOURCE6 $RPM_BUILD_ROOT/etc/init.d/ksysguardd
-#%endif
-mkdir -p $RPM_BUILD_ROOT/opt/kde3/share/apps/kdm/faces/
-ln -s ../pics/users/root1.png $RPM_BUILD_ROOT/opt/kde3/share/apps/kdm/faces/root.face.icon
-ln -s ../pics/users/default2.png $RPM_BUILD_ROOT/opt/kde3/share/apps/kdm/faces/.default.face.icon
-#%if %suse_version < 1031
-ln -sf /etc/init.d/ksysguardd $RPM_BUILD_ROOT/usr/sbin/rcksysguardd
+mkdir -p $RPM_BUILD_ROOT/%{_tde_datadir}/kdm/faces/
+ln -s ../pics/users/root1.png $RPM_BUILD_ROOT/%{_tde_datadir}/kdm/faces/root.face.icon
+ln -s ../pics/users/default2.png $RPM_BUILD_ROOT/%{_tde_datadir}/kdm/faces/.default.face.icon
+ln -sf /etc/init.d/ksysguardd $RPM_BUILD_ROOT/%{_sbindir}/rcksysguardd
install -D -m 644 %SOURCE15 $RPM_BUILD_ROOT/etc/slp.reg.d/ksysguardd.reg
-#%endif
# even if we use smbro
-install -D -m 644 kioslave/smb/smb-network.desktop $RPM_BUILD_ROOT/opt/kde3/share/apps/konqueror/dirtree/remote/smb-network.desktop
+install -D -m 644 kioslave/smb/smb-network.desktop $RPM_BUILD_ROOT/{%{_tde_datadir}/konqueror/dirtree/remote/smb-network.desktop
#
# install kde session file
#
install -m 0755 -d $RPM_BUILD_ROOT/usr/share/xsessions/
-mv $RPM_BUILD_ROOT/opt/kde3/share/apps/kdm/sessions/kde.desktop $RPM_BUILD_ROOT/usr/share/xsessions/
+mv $RPM_BUILD_ROOT/%{_tde_datadir}/kdm/sessions/tde.desktop $RPM_BUILD_ROOT/usr/share/xsessions/
# for those we have a package for remove the backup and rely on the package
for wm in gnome xfce4 xfce wmaker blackbox fvwm95 fvwm icewm enlightenment; do
- rm -f $RPM_BUILD_ROOT/opt/kde3/share/apps/kdm/sessions/$wm.desktop
+ rm -f $RPM_BUILD_ROOT/%{_tde_datadir}/kdm/sessions/$wm.desktop
done
-%suse_update_desktop_file $RPM_BUILD_ROOT/usr/share/xsessions/kde.desktop
+%suse_update_desktop_file $RPM_BUILD_ROOT/usr/share/xsessions/tde.desktop
#
# delete unwanted/double files
#
-rm $RPM_BUILD_ROOT/opt/kde3/share/apps/kdesktop/DesktopLinks/Home.desktop
-rm $RPM_BUILD_ROOT/opt/kde3/share/apps/kdesktop/DesktopLinks/System.desktop
-rm $RPM_BUILD_ROOT/opt/kde3/share/icons/*/*/apps/kvirc.*
-mkdir -p $RPM_BUILD_ROOT/usr/share
-mv $RPM_BUILD_ROOT/opt/kde3/share/wallpapers $RPM_BUILD_ROOT/usr/share
+rm $RPM_BUILD_ROOT/%{_tde_datadir}/kdesktop/DesktopLinks/Home.desktop
+rm $RPM_BUILD_ROOT/%{_tde_datadir}/kdesktop/DesktopLinks/System.desktop
+rm $RPM_BUILD_ROOT/%{_tde_iconsdir}/*/*/apps/kvirc.*
+mkdir -p $RPM_BUILD_ROOT/%{_datadir}
+mv $RPM_BUILD_ROOT/%{_tde_wallpapersdir} $RPM_BUILD_ROOT/%{_datadir}
cd ../fileshareset2/src
-rm -f $RPM_BUILD_ROOT/opt/kde3/bin/fileshare{set,list}
+rm -f $RPM_BUILD_ROOT/%{_tde_bindir}/fileshare{set,list}
make DESTDIR=$RPM_BUILD_ROOT install
chmod 0755 $RPM_BUILD_ROOT/%{fileshare_prefix}/bin/fileshareset
cd ..
FILLUP_DIR=$RPM_BUILD_ROOT/var/adm/fillup-templates
-install -m 644 -D %SOURCE4 $FILLUP_DIR/sysconfig.windowmanager-kdebase3
-mkdir -p $RPM_BUILD_ROOT/opt/kde3/share/icons/hicolor/{16x16,22x22,32x32,48x48,64x64,128x128}/apps/
-for i in {16,32,48,64,128}; do cp $BUILD_ROOT/opt/kde3/share/icons/crystalsvg/"$i"x"$i"/mimetypes/misc.png $RPM_BUILD_ROOT/opt/kde3/share/icons/hicolor/"$i"x"$i"/apps/kcmcomponentchooser.png;done
-for i in {16,22,32,48,128}; do cp $BUILD_ROOT/opt/kde3/share/icons/crystalsvg/"$i"x"$i"/actions/launch.png $RPM_BUILD_ROOT/opt/kde3/share/icons/hicolor/"$i"x"$i"/apps/kcmperformance.png;done
-cp $BUILD_ROOT/opt/kde3/share/icons/crystalsvg/16x16/actions/services.png $RPM_BUILD_ROOT/opt/kde3/share/icons/hicolor/16x16/apps/kcmkded.png
-for i in {16,22,32,48}; do cp $BUILD_ROOT/opt/kde3/share/icons/crystalsvg/"$i"x"$i"/actions/exit.png $RPM_BUILD_ROOT/opt/kde3/share/icons/hicolor/"$i"x"$i"/apps/kcmsmserver.png;done
-for i in {16,22,32}; do cp $BUILD_ROOT/opt/kde3/share/icons/crystalsvg/"$i"x"$i"/actions/spellcheck.png $RPM_BUILD_ROOT/opt/kde3/share/icons/hicolor/"$i"x"$i"/apps/kcmspellchecking.png;done
-for i in {16,22,32,48,64,128}; do cp $BUILD_ROOT/opt/kde3/share/icons/crystalsvg/"$i"x"$i"/filesystems/desktop.png $RPM_BUILD_ROOT/opt/kde3/share/icons/hicolor/"$i"x"$i"/apps/kcmdesktopbehavior.png;done
-for i in {16,22,32,48,64,128}; do cp $BUILD_ROOT/opt/kde3/share/icons/crystalsvg/"$i"x"$i"/filesystems/desktop.png $RPM_BUILD_ROOT/opt/kde3/share/icons/hicolor/"$i"x"$i"/apps/kcmdesktop.png;done
-for i in {16,22,32,48,64,128}; do cp $BUILD_ROOT/opt/kde3/share/icons/crystalsvg/"$i"x"$i"/apps/kmenu.png $RPM_BUILD_ROOT/opt/kde3/share/icons/hicolor/"$i"x"$i"/apps/kcmtaskbar.png;done
-for i in {16,22,32,48,64,128}; do cp $BUILD_ROOT/opt/kde3/share/icons/crystalsvg/"$i"x"$i"/mimetypes/colorscm.png $RPM_BUILD_ROOT/opt/kde3/share/icons/hicolor/"$i"x"$i"/apps/kcmcolors.png;done
-for i in {16,22,32,48,128}; do cp $BUILD_ROOT/opt/kde3/share/icons/crystalsvg/"$i"x"$i"/actions/launch.png $RPM_BUILD_ROOT/opt/kde3/share/icons/hicolor/"$i"x"$i"/apps/kcmlaunch.png;done
-for i in {16,22,32}; do cp $BUILD_ROOT/opt/kde3/share/icons/crystalsvg/"$i"x"$i"/actions/filter.png $RPM_BUILD_ROOT/opt/kde3/share/icons/hicolor/"$i"x"$i"/apps/kcmkhtml_filter.png;done
-for i in {16,22,32}; do cp $BUILD_ROOT/opt/kde3/share/icons/crystalsvg/"$i"x"$i"/actions/run.png $RPM_BUILD_ROOT/opt/kde3/share/icons/hicolor/"$i"x"$i"/apps/kcmcgi.png;done
-for i in {16,22}; do cp $BUILD_ROOT/opt/kde3/share/icons/crystalsvg/"$i"x"$i"/actions/history.png $RPM_BUILD_ROOT/opt/kde3/share/icons/hicolor/"$i"x"$i"/apps/kcmhistory.png;done
-for i in {16,22,32,48,64,128}; do cp $BUILD_ROOT/opt/kde3/share/icons/crystalsvg/"$i"x"$i"/filesystems/network.png $RPM_BUILD_ROOT/opt/kde3/share/icons/hicolor/"$i"x"$i"/apps/kcmnetpref.png;done
-for i in {16,32,48,64,128}; do cp $BUILD_ROOT/opt/kde3/share/icons/crystalsvg/"$i"x"$i"/devices/blockdevice.png $RPM_BUILD_ROOT/opt/kde3/share/icons/hicolor/"$i"x"$i"/apps/kcmkdnssd.png;done
-for i in {16,22,32,48,64}; do cp $BUILD_ROOT/opt/kde3/share/icons/crystalsvg/"$i"x"$i"/devices/joystick.png $RPM_BUILD_ROOT/opt/kde3/share/icons/hicolor/"$i"x"$i"/apps/kcmjoystick.png;done
-for i in {16,32,48,64,128}; do cp $BUILD_ROOT/opt/kde3/share/icons/crystalsvg/"$i"x"$i"/devices/mouse.png $RPM_BUILD_ROOT/opt/kde3/share/icons/hicolor/"$i"x"$i"/apps/kcmmouse.png;done
-for i in {16,22,32,48,64,128}; do cp $BUILD_ROOT/opt/kde3/share/icons/crystalsvg/"$i"x"$i"/devices/system.png $RPM_BUILD_ROOT/opt/kde3/share/icons/hicolor/"$i"x"$i"/apps/kcmmedia.png;done
-for i in {16,22,32}; do cp $BUILD_ROOT/opt/kde3/share/icons/crystalsvg/"$i"x"$i"/actions/encrypted.png $RPM_BUILD_ROOT/opt/kde3/share/icons/hicolor/"$i"x"$i"/apps/kcmcrypto.png;done
-for i in {16,22,32,48,64,128}; do cp $BUILD_ROOT/opt/kde3/share/icons/crystalsvg/"$i"x"$i"/filesystems/trashcan_empty.png $RPM_BUILD_ROOT/opt/kde3/share/icons/hicolor/"$i"x"$i"/apps/kcmprivacy.png;done
-for i in {16,22,32,48,64,128}; do cp $BUILD_ROOT/opt/kde3/share/icons/crystalsvg/"$i"x"$i"/filesystems/network.png $RPM_BUILD_ROOT/opt/kde3/share/icons/hicolor/"$i"x"$i"/apps/kcmnic.png;done
+install -m 644 -D %SOURCE4 $FILLUP_DIR/sysconfig.windowmanager-tdebase
+mkdir -p $RPM_BUILD_ROOT/%{_tde_iconsdir}/hicolor/{16x16,22x22,32x32,48x48,64x64,128x128}/apps/
+
+for i in {16,32,48,64,128}; do cp %{buildroot}/%{_tde_iconsdir}/crystalsvg/"$i"x"$i"/mimetypes/misc.png $RPM_BUILD_ROOT/%{_tde_iconsdir}/hicolor/"$i"x"$i"/apps/kcmcomponentchooser.png;done
+
+for i in {16,22,32,48,128}; do cp %{buildroot}/%{_tde_iconsdir}/crystalsvg/"$i"x"$i"/actions/launch.png $RPM_BUILD_ROOT/%{_tde_iconsdir}/hicolor/"$i"x"$i"/apps/kcmperformance.png;done
+
+cp %{buildroot}/%{_tde_iconsdir}/crystalsvg/16x16/actions/services.png $RPM_BUILD_ROOT/%{_tde_iconsdir}/hicolor/16x16/apps/kcmkded.png
+
+for i in {16,22,32,48}; do cp %{buildroot}/%{_tde_iconsdir}/crystalsvg/"$i"x"$i"/actions/exit.png $RPM_BUILD_ROOT/%{_tde_iconsdir}/hicolor/"$i"x"$i"/apps/kcmsmserver.png;done
+
+for i in {16,22,32}; do cp %{buildroot}/%{_tde_iconsdir}/crystalsvg/"$i"x"$i"/actions/spellcheck.png $RPM_BUILD_ROOT/%{_tde_iconsdir}/hicolor/"$i"x"$i"/apps/kcmspellchecking.png;done
+
+for i in {16,22,32,48,64,128}; do cp %{buildroot}/%{_tde_iconsdir}/crystalsvg/"$i"x"$i"/filesystems/desktop.png $RPM_BUILD_ROOT/%{_tde_iconsdir}/hicolor/"$i"x"$i"/apps/kcmdesktopbehavior.png;done
+
+for i in {16,22,32,48,64,128}; do cp %{buildroot}/%{_tde_iconsdir}/crystalsvg/"$i"x"$i"/filesystems/desktop.png $RPM_BUILD_ROOT/%{_tde_iconsdir}/hicolor/"$i"x"$i"/apps/kcmdesktop.png;done
+
+for i in {16,22,32,48,64,128}; do cp %{buildroot}/%{_tde_iconsdir}/crystalsvg/"$i"x"$i"/apps/kmenu.png $RPM_BUILD_ROOT/%{_tde_iconsdir}/hicolor/"$i"x"$i"/apps/kcmtaskbar.png;done
+
+for i in {16,22,32,48,64,128}; do cp %{buildroot}/%{_tde_iconsdir}/crystalsvg/"$i"x"$i"/mimetypes/colorscm.png $RPM_BUILD_ROOT/%{_tde_iconsdir}/hicolor/"$i"x"$i"/apps/kcmcolors.png;done
+
+for i in {16,22,32,48,128}; do cp %{buildroot}/%{_tde_iconsdir}/crystalsvg/"$i"x"$i"/actions/launch.png $RPM_BUILD_ROOT/%{_tde_iconsdir}/hicolor/"$i"x"$i"/apps/kcmlaunch.png;done
+
+for i in {16,22,32}; do cp %{buildroot}/%{_tde_iconsdir}/crystalsvg/"$i"x"$i"/actions/filter.png $RPM_BUILD_ROOT/%{_tde_iconsdir}/hicolor/"$i"x"$i"/apps/kcmkhtml_filter.png;done
+
+for i in {16,22,32}; do cp %{buildroot}/%{_tde_iconsdir}/crystalsvg/"$i"x"$i"/actions/run.png $RPM_BUILD_ROOT/%{_tde_iconsdir}/hicolor/"$i"x"$i"/apps/kcmcgi.png;done
+
+for i in {16,22}; do cp %{buildroot}/%{_tde_iconsdir}/crystalsvg/"$i"x"$i"/actions/history.png $RPM_BUILD_ROOT/%{_tde_iconsdir}/hicolor/"$i"x"$i"/apps/kcmhistory.png;done
+
+for i in {16,22,32,48,64,128}; do cp %{buildroot}/%{_tde_iconsdir}/crystalsvg/"$i"x"$i"/filesystems/network.png $RPM_BUILD_ROOT/%{_tde_iconsdir}/hicolor/"$i"x"$i"/apps/kcmnetpref.png;done
+
+for i in {16,32,48,64,128}; do cp %{buildroot}/%{_tde_iconsdir}/crystalsvg/"$i"x"$i"/devices/blockdevice.png $RPM_BUILD_ROOT/%{_tde_iconsdir}/hicolor/"$i"x"$i"/apps/kcmkdnssd.png;done
+
+for i in {16,22,32,48,64}; do cp %{buildroot}/%{_tde_iconsdir}/crystalsvg/"$i"x"$i"/devices/joystick.png $RPM_BUILD_ROOT/%{_tde_iconsdir}/hicolor/"$i"x"$i"/apps/kcmjoystick.png;done
+
+for i in {16,32,48,64,128}; do cp %{buildroot}/%{_tde_iconsdir}/crystalsvg/"$i"x"$i"/devices/mouse.png $RPM_BUILD_ROOT/%{_tde_iconsdir}/hicolor/"$i"x"$i"/apps/kcmmouse.png;done
+
+for i in {16,22,32,48,64,128}; do cp %{buildroot}/%{_tde_iconsdir}/crystalsvg/"$i"x"$i"/devices/system.png $RPM_BUILD_ROOT/%{_tde_iconsdir}/hicolor/"$i"x"$i"/apps/kcmmedia.png;done
+
+for i in {16,22,32}; do cp %{buildroot}/%{_tde_iconsdir}/crystalsvg/"$i"x"$i"/actions/encrypted.png $RPM_BUILD_ROOT/%{_tde_iconsdir}/hicolor/"$i"x"$i"/apps/kcmcrypto.png;done
+
+for i in {16,22,32,48,64,128}; do cp %{buildroot}/%{_tde_iconsdir}/crystalsvg/"$i"x"$i"/filesystems/trashcan_empty.png $RPM_BUILD_ROOT/%{_tde_iconsdir}/hicolor/"$i"x"$i"/apps/kcmprivacy.png;done
+
+for i in {16,22,32,48,64,128}; do cp %{buildroot}/%{_tde_iconsdir}/crystalsvg/"$i"x"$i"/filesystems/network.png $RPM_BUILD_ROOT/%{_tde_iconsdir}/hicolor/"$i"x"$i"/apps/kcmnic.png;done
#
# solve file conflicts with theme packages ...
#
-mv $RPM_BUILD_ROOT/opt/kde3/share/apps/ksplash/pics $RPM_BUILD_ROOT/opt/kde3/share/apps/ksplash/pics-default
-ln -s pics-default $RPM_BUILD_ROOT/opt/kde3/share/apps/ksplash/pics
+mv $RPM_BUILD_ROOT/%{_tde_datadir}/ksplash/pics $RPM_BUILD_ROOT/%{_tde_datadir}/ksplash/pics-default
+ln -s pics-default $RPM_BUILD_ROOT/%{_tde_datadir}/ksplash/pics
chmod 0755 $RPM_BUILD_ROOT/%{fileshare_prefix}/bin/fileshareset
%suse_update_desktop_file kate TextEditor
%suse_update_desktop_file kwrite TextEditor
@@ -870,34 +757,34 @@ chmod 0755 $RPM_BUILD_ROOT/%{fileshare_prefix}/bin/fileshareset
%suse_update_desktop_file knetattach System Network
%suse_update_desktop_file -r kfontview Graphics Viewer
%suse_update_desktop_file -r krandrtray Applet X-KDE-settings-desktop
-%suse_update_desktop_file $RPM_BUILD_ROOT/opt/kde3/share/apps/remoteview/smb-network.desktop
-for i in $RPM_BUILD_ROOT/opt/kde3/share/applnk/System/ScreenSavers/*.desktop ; do
+%suse_update_desktop_file $RPM_BUILD_ROOT/%{_tde_datadir}/remoteview/smb-network.desktop
+for i in $RPM_BUILD_ROOT/%{_tde_appsdir}/System/ScreenSavers/*.desktop ; do
sed -e '/^\[Desktop Entry\]/a\
Categories=Screensaver;' $i > ${i}_
mv ${i}_ $i
%suse_update_desktop_file "$i"
done
-install -d $RPM_BUILD_ROOT/opt/kde3/share/applnk/apps
-ln -sf /opt/kde3/share/applnk/System/ScreenSavers $RPM_BUILD_ROOT/opt/kde3/share/applnk/apps/ScreenSavers
-
-for i in $RPM_BUILD_ROOT/opt/kde3/share/applications/kde/*.desktop \
- $RPM_BUILD_ROOT/opt/kde3/share/apps/konqueror/servicemenus/*.desktop \
- $RPM_BUILD_ROOT/opt/kde3/share/apps/kicker/*/*.desktop \
- $RPM_BUILD_ROOT/opt/kde3/share/apps/kicker/*/*/*.desktop \
- $RPM_BUILD_ROOT/opt/kde3/share/apps/kicker/*/*/*.desktop \
- $RPM_BUILD_ROOT/usr/share/wallpapers/*.desktop \
- $RPM_BUILD_ROOT/opt/kde3/share/apps/konqsidebartng/virtual_folders/services/*.desktop; do
+install -d $RPM_BUILD_ROOT/%{_tde_appsdir}/apps
+ln -sf %{_tde_appsdir}/System/ScreenSavers $RPM_BUILD_ROOT/%{_tde_appsdir}/apps/ScreenSavers
+
+for i in $RPM_BUILD_ROOT/%{_tde_applicationsdir}/kde/*.desktop \
+ $RPM_BUILD_ROOT/%{_tde_datadir}/konqueror/servicemenus/*.desktop \
+ $RPM_BUILD_ROOT/%{_tde_datadir}/kicker/*/*.desktop \
+ $RPM_BUILD_ROOT/%{_tde_datadir}/kicker/*/*/*.desktop \
+ $RPM_BUILD_ROOT/%{_tde_datadir}/kicker/*/*/*.desktop \
+ $RPM_BUILD_ROOT/%{_datadir}/wallpapers/*.desktop \
+ $RPM_BUILD_ROOT/%{_tde_datadir}/konqsidebartng/virtual_folders/services/*.desktop; do
[ "`sed -n '/^\[Desktop Entry\]/,/^\[/ s,NoDisplay=\(.*\),\1,p' "$i"`" = "true" ] && continue
[ "`sed -n '/^\[Desktop Entry\]/,/^\[/ s,Hidden=\(.*\),\1,p' "$i"`" = "true" ] && continue
grep -q X-SuSE-translate "$i" && continue
%suse_update_desktop_file "$i"
done
-rm -f $RPM_BUILD_ROOT/opt/kde3/share/config/kdm/README
-rm -f $RPM_BUILD_ROOT/opt/kde3/share/apps/kdm/sessions/icewm.desktop
+rm -f $RPM_BUILD_ROOT/%{_tde_configdir}/kdm/README
+rm -f $RPM_BUILD_ROOT/%{_tde_datadir}/kdm/sessions/icewm.desktop
#
# gimp 2.0 does have a different named icon
#
-for i in $RPM_BUILD_ROOT//opt/kde3/share/icons/*/*/apps/gimp.png; do
+for i in $RPM_BUILD_ROOT/%{_tde_iconsdir}/*/*/apps/gimp.png; do
ln "$i" "${i%/*}/wilber-icon.png"
done
mkdir -p -m 755 $RPM_BUILD_ROOT/%_mandir/man8
@@ -908,33 +795,33 @@ rm $RPM_BUILD_ROOT/%_mandir/man1/kate.*
rm $RPM_BUILD_ROOT/%_mandir/man1/kdesu.*
rm $RPM_BUILD_ROOT/%_mandir/man1/kbookmarkmerger.*
rm $RPM_BUILD_ROOT/%_mandir/man1/kfind.*
-kde_post_install
-%if %suse_version > 1020
-%fdupes $RPM_BUILD_ROOT/opt/kde3/share
-%endif
+%tde_post_install
+%fdupes $RPM_BUILD_ROOT/%{_tde_sharedir}
# move konqueror.desktop back to old position (#281572)
-mv $RPM_BUILD_ROOT/opt/kde3/share/applications/kde/konqueror.desktop $RPM_BUILD_ROOT/opt/kde3/share/applnk/konqueror.desktop
-
-%if 0%{?with_hal} == 0
-cp -f %{SOURCE24} $RPM_BUILD_ROOT/opt/kde3/bin
-chmod +x $RPM_BUILD_ROOT/opt/kde3/bin/devmon-automounter.sh
-sed -i 5i\ '/opt/kde3/bin/devmon-automounter.sh &' $RPM_BUILD_ROOT/opt/kde3/bin/startkde
-%endif
+mv $RPM_BUILD_ROOT/%{_tde_applicationsdir}/kde/konqueror.desktop $RPM_BUILD_ROOT/%{_tde_appsdir}/konqueror.desktop
+
+# while this script uses udisks, it's better to be fully integrated
+# into Trinity.
+#%if 0%{?with_hal} == 0
+#cp -f %{SOURCE24} $RPM_BUILD_ROOT/opt/kde3/bin
+#chmod +x $RPM_BUILD_ROOT/opt/kde3/bin/devmon-automounter.sh
+#sed -i 5i\ '/opt/kde3/bin/devmon-automounter.sh &' $RPM_BUILD_ROOT/opt/kde3/bin/startkde
+#%endif
%pre
# we have this as link
-if test -e opt/kde3/share/apps/ksplash/pics -a ! -L opt/kde3/share/apps/ksplash/pics ;
+if test -e opt/tde/share/apps/ksplash/pics -a ! -L opt/tde/share/apps/ksplash/pics ;
then
- if test -e opt/kde3/share/apps/ksplash/pics-default; then
- rm -rf opt/kde3/share/apps/ksplash/pics
+ if test -e opt/tde/share/apps/ksplash/pics-default; then
+ rm -rf opt/tde/share/apps/ksplash/pics
else
- mv opt/kde3/share/apps/ksplash/pics opt/kde3/share/apps/ksplash/pics-default
+ mv opt/tde/share/apps/ksplash/pics opt/tde/share/apps/ksplash/pics-default
fi
fi
-kdmrc=/opt/kde3/share/config/kdm/kdmrc
-# if the /opt/kde3 one is obviously wrong and we have one in /etc we move that one over to
+kdmrc=/opt/tde/share/config/kdm/kdmrc
+# if the /opt/tde one is obviously wrong and we have one in /etc we move that one over to
# avoid confusion on update what's the right kdmrc
-if test -f $kdmrc && grep -q "Session=/opt/kde3/share/config/kdm/Xsession" $kdmrc && test -f /etc$kdmrc; then
+if test -f $kdmrc && grep -q "Session=/opt/tde/share/config/kdm/Xsession" $kdmrc && test -f /etc$kdmrc; then
mv /etc$kdmrc $kdmrc
fi
@@ -943,12 +830,12 @@ fi
%run_permissions
%post kdm
-%{fillup_only -an windowmanager-kdebase3}
-/opt/kde3/bin/genkdmconf
+%{fillup_only -an windowmanager-tdebase}
+/opt/tde/bin/genkdmconf
if test -f /etc/sysconfig/displaymanager ; then
. /etc/sysconfig/displaymanager
fi
-%{fillup_only -n displaymanager -s kdebase3-SuSE}
+%{fillup_only -n displaymanager -s tdebase-SuSE}
%{remove_and_set -n displaymanager KDM_SHUTDOWN}
if test -n "$KDM_SHUTDOWN" -a "$KDM_SHUTDOWN" != "no"; then
if test "$KDM_SHUTDOWN" = "local" ; then
@@ -970,31 +857,12 @@ fi
%postun
%insserv_cleanup
/sbin/ldconfig
-%if %suse_version < 1031
-
-%post ksysguardd
-%{fillup_and_insserv -sn kdebase3-ksysguardd ksysguardd RUN_KSYSGUARDD}
-%verifyscript
-%verify_permissions -e /opt/kde3/bin/kcheckpass
-%verify_permissions -e /opt/kde3/bin/kdesud
-%verify_permissions -e /opt/kde3/bin/khc_indexbuilder
-
-%postun ksysguardd
-%restart_on_update ksysguardd
-%insserv_cleanup
-
-%preun ksysguardd
-%stop_on_removal ksysguardd
-%endif
%post runtime -p /sbin/ldconfig
%postun runtime -p /sbin/ldconfig
%post workspace -p /sbin/ldconfig
-%if %suse_version > 1110 && 0%{?with_hal} > 0
-chkconfig haldaemon on
-%endif
%postun workspace -p /sbin/ldconfig
@@ -1008,566 +876,511 @@ rm -rf $RPM_BUILD_ROOT
%files -n misc-console-font
%defattr(-,root,root)
%doc COPYING
-/opt/kde3/share/fonts/console8x16.pcf.gz
+%{_tde_sharedir}/fonts/console8x16.pcf.gz
%files
%defattr(-,root,root)
%doc AUTHORS COPYING README README.pam ../lame.spec ../README.mp3
-%exclude /opt/kde3/share/fonts/console8x16.pcf.gz
-%dir /opt/kde3/share/icons/hicolor/*
-%dir /opt/kde3/%_lib/kconf_update_bin
-%dir /opt/kde3/share/apps/plugin
-%dir /opt/kde3/share/applnk/
-%dir /opt/kde3/share/applnk/Settings
-%dir /opt/kde3/share/applnk/Settings/WebBrowsing
-%dir /opt/kde3/share/applnk/System/ScreenSavers
-%dir /opt/kde3/share/applnk/apps
-/opt/kde3/share/applnk/apps/ScreenSavers
+%exclude %{_tde_sharedir}/fonts/console8x16.pcf.gz
+%dir %{_tde_iconsdir}/hicolor/*
+%dir %{_tde_libdir}/kconf_update_bin
+%dir %{_tde_datadir}/plugin
+%dir %{_tde_appsdir}
+%dir %{_tde_appsdir}/Settings
+%dir %{_tde_appsdir}/Settings/WebBrowsing
+%dir %{_tde_appsdir}/System/ScreenSavers
+%dir %{_tde_appsdir}/apps
+%{_tde_appsdir}/apps/ScreenSavers
/etc/xdg/menus/*.menu
/etc/xdg/menus/applications-merged
-%verify(not mode) %attr(2755,root,nogroup) /opt/kde3/bin/kdesud
-%verify(not mode) %attr(0755,root,man) /opt/kde3/bin/khc_indexbuilder
-/opt/kde3/env
-/opt/kde3/bin/arts-start
-/opt/kde3/bin/drkonqi
-/opt/kde3/bin/kaccess
-/opt/kde3/bin/kblankscrn.kss
-/opt/kde3/bin/kbookmarkmerger
-/opt/kde3/bin/kcminit
-/opt/kde3/bin/kcminit_startup
-/opt/kde3/%_lib/kde3/kcminit_startup.*
-/opt/kde3/bin/kcontrol*
-/opt/kde3/bin/kdeinstallktheme
-/opt/kde3/bin/kdepasswd
-/opt/kde3/bin/kdcop
-/opt/kde3/bin/kdebugdialog
-/opt/kde3/bin/kdeeject
-/opt/kde3/bin/kdeprintfax
-/opt/kde3/bin/keditfiletype
-/opt/kde3/bin/khelpcenter
-/opt/kde3/bin/kjobviewer
-/opt/kde3/bin/kcheckrunning
-/opt/kde3/bin/kpm
-/opt/kde3/bin/krandom.kss
-/opt/kde3/bin/krdb
-/opt/kde3/bin/kxkb
-/opt/kde3/bin/kdialog
-/opt/kde3/bin/klocaldomainurifilterhelper
-/opt/kde3/bin/kio_media_mounthelper
-/opt/kde3/bin/knetattach
-/opt/kde3/bin/ktrash
-/opt/kde3/bin/khc_docbookdig.pl
-/opt/kde3/bin/khc_mansearch.pl
-/opt/kde3/bin/khc_htdig.pl
-/opt/kde3/bin/khc_htsearch.pl
-/opt/kde3/bin/kapplymousetheme
-/opt/kde3/bin/kio_system_documenthelper
-%if %suse_version > 1010
-/opt/kde3/bin/runupdater
-%endif
-/opt/kde3/bin/kstart
-/opt/kde3/bin/ksystraycmd
-/opt/kde3/%_lib/kde3/cursorthumbnail.*
-/opt/kde3/%_lib/kde3/htmlthumbnail.*
-/opt/kde3/%_lib/kde3/imagethumbnail.*
-/opt/kde3/%_lib/kde3/kcm_a*
-/opt/kde3/%_lib/kde3/kcm_bell*
-/opt/kde3/%_lib/kde3/kcm_keyboard*
-/opt/kde3/%_lib/kde3/kcm_c*
-/opt/kde3/%_lib/kde3/kcm_d*
-/opt/kde3/%_lib/kde3/kcm_e*
-/opt/kde3/%_lib/kde3/kcm_f*
-/opt/kde3/%_lib/kde3/kcm_h*
-/opt/kde3/%_lib/kde3/kcm_i*
-/opt/kde3/%_lib/kde3/kcm_l*
-/opt/kde3/%_lib/kde3/kcm_nic.*
-/opt/kde3/%_lib/kde3/kcm_p*
-/opt/kde3/%_lib/kde3/kcm_smserver.*
-/opt/kde3/%_lib/kde3/kcm_spellchecking.*
-/opt/kde3/%_lib/kde3/kcm_style.*
-/opt/kde3/%_lib/kde3/kcm_usb.*
-/opt/kde3/%_lib/kde3/khelpcenter.*
-/opt/kde3/%_lib/kde3/kcm_xinerama.*
-/opt/kde3/%_lib/kde3/kxkb.*
-/opt/kde3/%_lib/kde3/djvuthumbnail.*
-/opt/kde3/%_lib/kde3/kaccess.*
-/opt/kde3/%_lib/kde3/kcminit.*
-/opt/kde3/%_lib/kde3/kcm_nsplugins.*
-/opt/kde3/%_lib/kde3/kcontrol.*
-/opt/kde3/%_lib/kde3/keditbookmarks.*
-/opt/kde3/%_lib/kde3/kfmclient.*
-/opt/kde3/%_lib/kde3/kjobviewer.*
-/opt/kde3/%_lib/kde3/kprinter.*
-/opt/kde3/%_lib/kde3/libkdeprint_part.*
-/opt/kde3/%_lib/kde3/libkshorturifilter.*
-/opt/kde3/%_lib/kde3/libkuri*
-/opt/kde3/%_lib/kde3/libkonsolepart.*
-/opt/kde3/%_lib/kde3/textthumbnail.*
-/opt/kde3/%_lib/kde3/kcm_joystick.*
-/opt/kde3/%_lib/kde3/kcm_useraccount.*
-/opt/kde3/%_lib/kde3/kcontroledit.*
-/opt/kde3/%_lib/kde3/kded_kwrited.*
-/opt/kde3/%_lib/kde3/kstyle_keramik_config.*
-/opt/kde3/%_lib/kde3/libkmanpart.*
-/opt/kde3/%_lib/kde3/liblocaldomainurifilter.*
-%if %suse_version > 1010
-/opt/kde3/%_lib/kde3/runupdater.*
-/opt/kde3/%_lib/libkdeinit_runupdater.so
-%endif
-/opt/kde3/%_lib/libkdeinit_kaccess.so
-/opt/kde3/%_lib/libkdeinit_kcminit.so
-/opt/kde3/%_lib/libkdeinit_kcminit_startup.so
-/opt/kde3/%_lib/libkdeinit_kcontrol.so
-/opt/kde3/%_lib/libkdeinit_kcontroledit.so
-/opt/kde3/%_lib/libkdeinit_keditbookmarks.so
-/opt/kde3/%_lib/libkdeinit_kfmclient.so
-/opt/kde3/%_lib/libkdeinit_khelpcenter.so
-/opt/kde3/%_lib/libkdeinit_kjobviewer.so
-/opt/kde3/%_lib/libkdeinit_kxkb.so
-/opt/kde3/%_lib/kde3/libnsplugin.*
-/opt/kde3/%_lib/kde3/kded_remotedirnotify.*
-/opt/kde3/%_lib/kde3/kded_systemdirnotify.*
-/opt/kde3/%_lib/kde3/libkhtmlkttsdplugin.*
-/opt/kde3/%_lib/kde3/kcm_media.la
-/opt/kde3/%_lib/kde3/kcm_media.so
-/opt/kde3/%_lib/kde3/kded_homedirnotify.la
-/opt/kde3/%_lib/kde3/kded_homedirnotify.so
-/opt/kde3/%_lib/kde3/kded_medianotifier.la
-/opt/kde3/%_lib/kde3/kded_medianotifier.so
-%if 0%{?with_hal} > 0
-/opt/kde3/%_lib/kde3/media_propsdlgplugin.*
-%endif
-/opt/kde3/%_lib/kde3/kcm_kded.*
-/opt/kde3/%_lib/kde3/kcm_kdnssd.*
-/opt/kde3/%_lib/kde3/kcm_keyboard.*
-/opt/kde3/%_lib/kde3/kcm_keys.*
-/opt/kde3/%_lib/kde3/kcm_kio.*
-/opt/kde3/%_lib/kde3/kcm_knotify.*
-/opt/kde3/%_lib/kde3/kcm_konq.*
-/opt/kde3/%_lib/kde3/kcm_konqhtml.*
-/opt/kde3/%_lib/kde3/kcm_kthememanager.*
-/opt/kde3/%_lib/kde3/kcm_kurifilt.*
-/opt/kde3/share/applications/kde/khtml_filter.desktop
-/opt/kde3/share/applications/kde/media.desktop
-/opt/kde3/share/applications/kde/joystick.desktop
-/opt/kde3/share/applications/kde/kcm_useraccount.desktop
-/opt/kde3/share/applications/kde/kdepasswd.desktop
-/opt/kde3/share/applications/kde/kthememanager.desktop
-/opt/kde3/share/applications/kde/Help.desktop
-/opt/kde3/share/applications/kde/KControl.desktop
-/opt/kde3/share/applications/kde/arts.desktop
-/opt/kde3/share/applications/kde/bell.desktop
-/opt/kde3/share/applications/kde/cache.desktop
-/opt/kde3/share/applications/kde/colors.desktop
-/opt/kde3/share/applications/kde/componentchooser.desktop
-/opt/kde3/share/applications/kde/cookies.desktop
-/opt/kde3/share/applications/kde/crypto.desktop
-/opt/kde3/share/applications/kde/display.desktop
-/opt/kde3/share/applications/kde/dma.desktop
-/opt/kde3/share/applications/kde/ebrowsing.desktop
-/opt/kde3/share/applications/kde/filebrowser.desktop
-/opt/kde3/share/applications/kde/filetypes.desktop
-/opt/kde3/share/applications/kde/fonts.desktop
-/opt/kde3/share/applications/kde/clock.desktop
-/opt/kde3/share/applications/kde/icons.desktop
-/opt/kde3/share/applications/kde/interrupts.desktop
-/opt/kde3/share/applications/kde/installktheme.desktop
-/opt/kde3/share/applications/kde/ioports.desktop
-/opt/kde3/share/applications/kde/ioslaveinfo.desktop
-/opt/kde3/share/applications/kde/kcmaccess.desktop
-/opt/kde3/share/applications/kde/kcmcgi.desktop
-/opt/kde3/share/applications/kde/kcmcss.desktop
-/opt/kde3/share/applications/kde/kcmhistory.desktop
-/opt/kde3/share/applications/kde/kcmkded.desktop
-/opt/kde3/share/applications/kde/kcmlaunch.desktop
-/opt/kde3/share/applications/kde/kcm_kdnssd.desktop
-/opt/kde3/share/applications/kde/kcmnotify.desktop
-/opt/kde3/share/applications/kde/kcmperformance.desktop
-/opt/kde3/share/applications/kde/kcmusb.desktop
-/opt/kde3/share/applications/kde/kdeprintfax.desktop
-/opt/kde3/share/applications/kde/keyboard.desktop
-/opt/kde3/share/applications/kde/keyboard_layout.desktop
-/opt/kde3/share/applications/kde/keys.desktop
-/opt/kde3/share/applications/kde/kfmclient.desktop
-/opt/kde3/share/applications/kde/kfmclient_dir.desktop
-/opt/kde3/share/applications/kde/kfmclient_html.desktop
-/opt/kde3/share/applications/kde/kfmclient_war.desktop
-/opt/kde3/share/applications/kde/khtml_behavior.desktop
-/opt/kde3/share/applications/kde/khtml_fonts.desktop
-/opt/kde3/share/applications/kde/khtml_java_js.desktop
-/opt/kde3/share/applications/kde/khtml_plugins.desktop
-/opt/kde3/share/applications/kde/kjobviewer.desktop
-/opt/kde3/share/applications/kde/lanbrowser.desktop
-/opt/kde3/share/applications/kde/language.desktop
-/opt/kde3/share/applications/kde/memory.desktop
-/opt/kde3/share/applications/kde/mouse.desktop
-/opt/kde3/share/applications/kde/netpref.desktop
-/opt/kde3/share/applications/kde/nic.desktop
-/opt/kde3/share/applications/kde/partitions.desktop
-/opt/kde3/share/applications/kde/pci.desktop
-/opt/kde3/share/applications/kde/printers.desktop
-/opt/kde3/share/applications/kde/privacy.desktop
-/opt/kde3/share/applications/kde/processor.desktop
-/opt/kde3/share/applications/kde/proxy.desktop
-/opt/kde3/share/applications/kde/scsi.desktop
-/opt/kde3/share/applications/kde/smbstatus.desktop
-/opt/kde3/share/applications/kde/sound.desktop
-/opt/kde3/share/applications/kde/spellchecking.desktop
-/opt/kde3/share/applications/kde/style.desktop
-/opt/kde3/share/applications/kde/useragent.desktop
-/opt/kde3/share/applications/kde/xserver.desktop
-/opt/kde3/share/applications/kde/cdinfo.desktop
-/opt/kde3/share/applnk/.hidden
-/opt/kde3/share/applnk/Settings/Information
-/opt/kde3/share/applnk/Settings/LookNFeel
-/opt/kde3/share/applnk/Settings/WebBrowsing/khtml_appearance.desktop
-/opt/kde3/share/applnk/Settings/WebBrowsing/smb.desktop
-/opt/kde3/share/apps/drkonqi
-/opt/kde3/share/apps/kc*
-/opt/kde3/share/apps/kdcop
-/opt/kde3/share/apps/kdeprint*
-/opt/kde3/share/apps/kdewizard
-/opt/kde3/share/apps/kdisplay
-/opt/kde3/share/apps/khelpcenter/searchhandlers/docbook.desktop
-/opt/kde3/share/apps/khelpcenter
-/opt/kde3/share/apps/kio*
-/opt/kde3/share/apps/kjobviewer
-/opt/kde3/share/apps/konsole
-/opt/kde3/share/apps/khtml/kpartplugins
-/opt/kde3/share/apps/kthememanager
-/opt/kde3/share/apps/remoteview
-/opt/kde3/share/apps/systemview
-/opt/kde3/share/apps/kaccess
-/opt/kde3/share/config.kcfg/klaunch.kcfg
-/opt/kde3/share/config.kcfg/khelpcenter.kcfg
-/opt/kde3/share/config.kcfg/keditbookmarks.kcfg
-/opt/kde3/share/config.kcfg/launcherapplet.kcfg
-/opt/kde3/share/config.kcfg/mediamanagersettings.kcfg
-/opt/kde3/share/mimelnk/inode/system_directory.desktop
-/opt/kde3/share/services/kded/remotedirnotify.desktop
-/opt/kde3/share/services/kded/systemdirnotify.desktop
-%if 0%{?with_hal} > 0
-/opt/kde3/share/services/media_propsdlgplugin.desktop
-
-%endif
-%config(noreplace) /opt/kde3/share/config/kshorturifilterrc
-%config(noreplace) /opt/kde3/share/config/kxkb_groups
-/opt/kde3/share/desktop-directories
-%exclude /opt/kde3/share/doc/HTML/en/kioslave
-%dir /opt/kde3/share/fonts
-%dir /opt/kde3/share/fonts/override
-%verify(not md5 size mtime) /opt/kde3/share/fonts/override/fonts.dir
-%dir /opt/kde3/share/icons/*/*/*
-/opt/kde3/share/config.kcfg/kcm_useraccount.kcfg
-/opt/kde3/share/config.kcfg/kcm_useraccount_pass.kcfg
-%exclude /opt/kde3/share/icons/*/*/*/style.*
-%exclude /opt/kde3/share/icons/*/*/*/looknfeel.*
-%exclude /opt/kde3/share/icons/*/*/*/energy.*
-%exclude /opt/kde3/share/icons/*/*/*/date.*
-%exclude /opt/kde3/share/icons/*/*/*/filetypes.*
-%exclude /opt/kde3/share/icons/*/*/*/personal.*
-/opt/kde3/share/icons/*/*/*/a*.*
-/opt/kde3/share/icons/*/*/*/b*.*
-/opt/kde3/share/icons/*/*/*/c*.*
-/opt/kde3/share/icons/*/*/*/d*.*
-/opt/kde3/share/icons/*/*/*/f*.*
-/opt/kde3/share/icons/*/*/*/g*.*
-/opt/kde3/share/icons/*/*/*/help_index.*
-/opt/kde3/share/icons/*/*/*/icons.*
-/opt/kde3/share/icons/*/*/*/input_devices_settings.*
-/opt/kde3/share/icons/*/*/*/kcmx.*
-/opt/kde3/share/icons/*/*/*/kcmdf.*
-/opt/kde3/share/icons/*/*/*/kbinaryclock.*
-/opt/kde3/share/icons/*/*/apps/kcmcgi.*
-/opt/kde3/share/icons/*/*/apps/kcmcolors.*
-/opt/kde3/share/icons/*/*/apps/kcmcomponentchooser.*
-/opt/kde3/share/icons/*/*/apps/kcmcrypto.*
-/opt/kde3/share/icons/*/*/apps/kcmhistory.*
-/opt/kde3/share/icons/*/*/apps/kcmjoystick.*
-/opt/kde3/share/icons/*/*/apps/kcmkded.*
-/opt/kde3/share/icons/*/*/apps/kcmkdnssd.*
-/opt/kde3/share/icons/*/*/apps/kcmkhtml_filter.*
-/opt/kde3/share/icons/*/*/apps/kcmlaunch.*
-/opt/kde3/share/icons/*/*/apps/kcmmedia.*
-/opt/kde3/share/icons/*/*/apps/kcmmouse.*
-/opt/kde3/share/icons/*/*/apps/kcmnetpref.*
-/opt/kde3/share/icons/*/*/apps/kcmnic.*
-/opt/kde3/share/icons/*/*/apps/kcmperformance.*
-/opt/kde3/share/icons/*/*/apps/kcmprivacy.*
-/opt/kde3/share/icons/*/*/apps/kcmspellchecking.*
-/opt/kde3/share/icons/*/*/*/ieee1394.*
-/opt/kde3/share/icons/*/*/*/kdeprintfax.*
-/opt/kde3/share/icons/*/*/*/kdisknav.*
-/opt/kde3/share/icons/*/*/*/knetattach.*
-/opt/kde3/share/icons/*/*/*/key_bindings.*
-/opt/kde3/share/icons/*/*/*/keyboard_layout.*
-/opt/kde3/share/icons/*/*/*/kfm_home.*
-/opt/kde3/share/icons/*/*/*/khelpcenter.*
-/opt/kde3/share/icons/*/*/*/kjobviewer.*
-/opt/kde3/share/icons/*/*/*/konsole.*
-/opt/kde3/share/icons/*/*/*/l*.*
-/opt/kde3/share/icons/*/*/*/m*.*
-/opt/kde3/share/icons/*/*/*/ne*.*
-/opt/kde3/share/icons/*/*/*/opera.*
-/opt/kde3/share/icons/*/*/*/r*.*
-/opt/kde3/share/icons/*/*/*/s*.*
-/opt/kde3/share/icons/*/*/*/usb.*
-/opt/kde3/share/icons/*/*/*/vnc.*
-/opt/kde3/share/icons/*/*/*/w*.*
-/opt/kde3/share/icons/*/*/*/e*.*
-/opt/kde3/share/icons/*/*/*/kcmdevices.*
-/opt/kde3/share/icons/*/*/*/kcmdrkonqi.*
-/opt/kde3/share/icons/*/*/*/kcmmemory.*
-/opt/kde3/share/icons/*/*/*/kcmmidi.*
-/opt/kde3/share/icons/*/*/*/kcmpartitions.*
-/opt/kde3/share/icons/*/*/*/kcmpci.*
-/opt/kde3/share/icons/*/*/*/kcmprocessor.*
-/opt/kde3/share/icons/*/*/*/kcmscsi.*
-/opt/kde3/share/icons/*/*/*/kthememgr.*
-/opt/kde3/share/icons/*/*/*/kcontrol.*
-/opt/kde3/share/icons/*/*/*/kxkb.*
-/opt/kde3/share/icons/*/*/*/p*.*
-/opt/kde3/share/icons/*/*/*/t*.*
-/opt/kde3/share/icons/*/*/*/qtella.*
-/opt/kde3/share/icons/*/*/*/x*.*
+%verify(not mode) %attr(2755,root,nogroup) %{_tde_bindir}/kdesud
+%verify(not mode) %attr(0755,root,man) %{_tde_bindir}/khc_indexbuilder
+%{_tde_prefix}/env
+%{_tde_bindir}/arts-start
+%{_tde_bindir}/drkonqi
+%{_tde_bindir}/kaccess
+%{_tde_bindir}/kblankscrn.kss
+%{_tde_bindir}/kbookmarkmerger
+%{_tde_bindir}/kcminit
+%{_tde_bindir}/kcminit_startup
+%{_tde_modulesdir}/kcminit_startup.*
+%{_tde_bindir}/kcontrol*
+%{_tde_bindir}/kdeinstallktheme
+%{_tde_bindir}/kdepasswd
+%{_tde_bindir}/kdcop
+%{_tde_bindir}/kdebugdialog
+%{_tde_bindir}/kdeeject
+%{_tde_bindir}/kdeprintfax
+%{_tde_bindir}/keditfiletype
+%{_tde_bindir}/khelpcenter
+%{_tde_bindir}/kjobviewer
+%{_tde_bindir}/kcheckrunning
+%{_tde_bindir}/kpm
+%{_tde_bindir}/krandom.kss
+%{_tde_bindir}/krdb
+%{_tde_bindir}/kxkb
+%{_tde_bindir}/kdialog
+%{_tde_bindir}/klocaldomainurifilterhelper
+%{_tde_bindir}/kio_media_mounthelper
+%{_tde_bindir}/knetattach
+%{_tde_bindir}/ktrash
+%{_tde_bindir}/khc_docbookdig.pl
+%{_tde_bindir}/khc_mansearch.pl
+%{_tde_bindir}/khc_htdig.pl
+%{_tde_bindir}/khc_htsearch.pl
+%{_tde_bindir}/kapplymousetheme
+%{_tde_bindir}/kio_system_documenthelper
+%{_tde_bindir}/runupdater
+%{_tde_bindir}/kstart
+%{_tde_bindir}/ksystraycmd
+%{_tde_modulesdir}/cursorthumbnail.*
+%{_tde_modulesdir}/htmlthumbnail.*
+%{_tde_modulesdir}/imagethumbnail.*
+%{_tde_modulesdir}/kcm_a*
+%{_tde_modulesdir}/kcm_bell*
+%{_tde_modulesdir}/kcm_keyboard*
+%{_tde_modulesdir}/kcm_c*
+%{_tde_modulesdir}/kcm_d*
+%{_tde_modulesdir}/kcm_e*
+%{_tde_modulesdir}/kcm_f*
+%{_tde_modulesdir}/kcm_h*
+%{_tde_modulesdir}/kcm_i*
+%{_tde_modulesdir}/kcm_l*
+%{_tde_modulesdir}/kcm_nic.*
+%{_tde_modulesdir}/kcm_p*
+%{_tde_modulesdir}/kcm_smserver.*
+%{_tde_modulesdir}/kcm_spellchecking.*
+%{_tde_modulesdir}/kcm_style.*
+%{_tde_modulesdir}/kcm_usb.*
+%{_tde_modulesdir}/khelpcenter.*
+%{_tde_modulesdir}/kcm_xinerama.*
+%{_tde_modulesdir}/kxkb.*
+%{_tde_modulesdir}/djvuthumbnail.*
+%{_tde_modulesdir}/kaccess.*
+%{_tde_modulesdir}/kcminit.*
+%{_tde_modulesdir}/kcm_nsplugins.*
+%{_tde_modulesdir}/kcontrol.*
+%{_tde_modulesdir}/keditbookmarks.*
+%{_tde_modulesdir}/kfmclient.*
+%{_tde_modulesdir}/kjobviewer.*
+%{_tde_modulesdir}/kprinter.*
+%{_tde_modulesdir}/libkdeprint_part.*
+%{_tde_modulesdir}/libkshorturifilter.*
+%{_tde_modulesdir}/libkuri*
+%{_tde_modulesdir}/libkonsolepart.*
+%{_tde_modulesdir}/textthumbnail.*
+%{_tde_modulesdir}/kcm_joystick.*
+%{_tde_modulesdir}/kcm_useraccount.*
+%{_tde_modulesdir}/kcontroledit.*
+%{_tde_modulesdir}/kded_kwrited.*
+%{_tde_modulesdir}/kstyle_keramik_config.*
+%{_tde_modulesdir}/libkmanpart.*
+%{_tde_modulesdir}/liblocaldomainurifilter.*
+%{_tde_modulesdir}/runupdater.*
+%{_tde_libdir}/libkdeinit_runupdater.so
+%{_tde_libdir}/libkdeinit_kaccess.so
+%{_tde_libdir}/libkdeinit_kcminit.so
+%{_tde_libdir}/libkdeinit_kcminit_startup.so
+%{_tde_libdir}/libkdeinit_kcontrol.so
+%{_tde_libdir}/libkdeinit_kcontroledit.so
+%{_tde_libdir}/libkdeinit_keditbookmarks.so
+%{_tde_libdir}/libkdeinit_kfmclient.so
+%{_tde_libdir}/libkdeinit_khelpcenter.so
+%{_tde_libdir}/libkdeinit_kjobviewer.so
+%{_tde_libdir}/libkdeinit_kxkb.so
+%{_tde_modulesdir}/libnsplugin.*
+%{_tde_modulesdir}/kded_remotedirnotify.*
+%{_tde_modulesdir}/kded_systemdirnotify.*
+%{_tde_modulesdir}/libkhtmlkttsdplugin.*
+%{_tde_modulesdir}/kcm_media.la
+%{_tde_modulesdir}/kcm_media.so
+%{_tde_modulesdir}/kded_homedirnotify.la
+%{_tde_modulesdir}/kded_homedirnotify.so
+%{_tde_modulesdir}/kded_medianotifier.la
+%{_tde_modulesdir}/kded_medianotifier.so
+%{_tde_modulesdir}/kcm_kded.*
+%{_tde_modulesdir}/kcm_kdnssd.*
+%{_tde_modulesdir}/kcm_keyboard.*
+%{_tde_modulesdir}/kcm_keys.*
+%{_tde_modulesdir}/kcm_kio.*
+%{_tde_modulesdir}/kcm_knotify.*
+%{_tde_modulesdir}/kcm_konq.*
+%{_tde_modulesdir}/kcm_konqhtml.*
+%{_tde_modulesdir}/kcm_kthememanager.*
+%{_tde_modulesdir}/kcm_kurifilt.*
+%{_tde_applicationsdir}/kde/khtml_filter.desktop
+%{_tde_applicationsdir}/kde/media.desktop
+%{_tde_applicationsdir}/kde/joystick.desktop
+%{_tde_applicationsdir}/kde/kcm_useraccount.desktop
+%{_tde_applicationsdir}/kde/kdepasswd.desktop
+%{_tde_applicationsdir}/kde/kthememanager.desktop
+%{_tde_applicationsdir}/kde/Help.desktop
+%{_tde_applicationsdir}/kde/KControl.desktop
+%{_tde_applicationsdir}/kde/arts.desktop
+%{_tde_applicationsdir}/kde/bell.desktop
+%{_tde_applicationsdir}/kde/cache.desktop
+%{_tde_applicationsdir}/kde/colors.desktop
+%{_tde_applicationsdir}/kde/componentchooser.desktop
+%{_tde_applicationsdir}/kde/cookies.desktop
+%{_tde_applicationsdir}/kde/crypto.desktop
+%{_tde_applicationsdir}/kde/display.desktop
+%{_tde_applicationsdir}/kde/dma.desktop
+%{_tde_applicationsdir}/kde/ebrowsing.desktop
+%{_tde_applicationsdir}/kde/filebrowser.desktop
+%{_tde_applicationsdir}/kde/filetypes.desktop
+%{_tde_applicationsdir}/kde/fonts.desktop
+%{_tde_applicationsdir}/kde/clock.desktop
+%{_tde_applicationsdir}/kde/icons.desktop
+%{_tde_applicationsdir}/kde/interrupts.desktop
+%{_tde_applicationsdir}/kde/installktheme.desktop
+%{_tde_applicationsdir}/kde/ioports.desktop
+%{_tde_applicationsdir}/kde/ioslaveinfo.desktop
+%{_tde_applicationsdir}/kde/kcmaccess.desktop
+%{_tde_applicationsdir}/kde/kcmcgi.desktop
+%{_tde_applicationsdir}/kde/kcmcss.desktop
+%{_tde_applicationsdir}/kde/kcmhistory.desktop
+%{_tde_applicationsdir}/kde/kcmkded.desktop
+%{_tde_applicationsdir}/kde/kcmlaunch.desktop
+%{_tde_applicationsdir}/kde/kcm_kdnssd.desktop
+%{_tde_applicationsdir}/kde/kcmnotify.desktop
+%{_tde_applicationsdir}/kde/kcmperformance.desktop
+%{_tde_applicationsdir}/kde/kcmusb.desktop
+%{_tde_applicationsdir}/kde/kdeprintfax.desktop
+%{_tde_applicationsdir}/kde/keyboard.desktop
+%{_tde_applicationsdir}/kde/keyboard_layout.desktop
+%{_tde_applicationsdir}/kde/keys.desktop
+%{_tde_applicationsdir}/kde/kfmclient.desktop
+%{_tde_applicationsdir}/kde/kfmclient_dir.desktop
+%{_tde_applicationsdir}/kde/kfmclient_html.desktop
+%{_tde_applicationsdir}/kde/kfmclient_war.desktop
+%{_tde_applicationsdir}/kde/khtml_behavior.desktop
+%{_tde_applicationsdir}/kde/khtml_fonts.desktop
+%{_tde_applicationsdir}/kde/khtml_java_js.desktop
+%{_tde_applicationsdir}/kde/khtml_plugins.desktop
+%{_tde_applicationsdir}/kde/kjobviewer.desktop
+%{_tde_applicationsdir}/kde/lanbrowser.desktop
+%{_tde_applicationsdir}/kde/language.desktop
+%{_tde_applicationsdir}/kde/memory.desktop
+%{_tde_applicationsdir}/kde/mouse.desktop
+%{_tde_applicationsdir}/kde/netpref.desktop
+%{_tde_applicationsdir}/kde/nic.desktop
+%{_tde_applicationsdir}/kde/partitions.desktop
+%{_tde_applicationsdir}/kde/pci.desktop
+%{_tde_applicationsdir}/kde/printers.desktop
+%{_tde_applicationsdir}/kde/privacy.desktop
+%{_tde_applicationsdir}/kde/processor.desktop
+%{_tde_applicationsdir}/kde/proxy.desktop
+%{_tde_applicationsdir}/kde/scsi.desktop
+%{_tde_applicationsdir}/kde/smbstatus.desktop
+%{_tde_applicationsdir}/kde/sound.desktop
+%{_tde_applicationsdir}/kde/spellchecking.desktop
+%{_tde_applicationsdir}/kde/style.desktop
+%{_tde_applicationsdir}/kde/useragent.desktop
+%{_tde_applicationsdir}/kde/xserver.desktop
+%{_tde_applicationsdir}/kde/cdinfo.desktop
+%{_tde_appsdir}/.hidden
+%{_tde_appsdir}/Settings/Information
+%{_tde_appsdir}/Settings/LookNFeel
+%{_tde_appsdir}/Settings/WebBrowsing/khtml_appearance.desktop
+%{_tde_appsdir}/Settings/WebBrowsing/smb.desktop
+%{_tde_datadir}/drkonqi
+%{_tde_datadir}/kc*
+%{_tde_datadir}/kdcop
+%{_tde_datadir}/kdeprint*
+%{_tde_datadir}/kdewizard
+%{_tde_datadir}/kdisplay
+%{_tde_datadir}/khelpcenter/searchhandlers/docbook.desktop
+%{_tde_datadir}/khelpcenter
+%{_tde_datadir}/kio*
+%{_tde_datadir}/kjobviewer
+%{_tde_datadir}/konsole
+%{_tde_datadir}/khtml/kpartplugins
+%{_tde_datadir}/kthememanager
+%{_tde_datadir}/remoteview
+%{_tde_datadir}/systemview
+%{_tde_datadir}/kaccess
+%{_tde_configdir}.kcfg/klaunch.kcfg
+%{_tde_configdir}.kcfg/khelpcenter.kcfg
+%{_tde_configdir}.kcfg/keditbookmarks.kcfg
+%{_tde_configdir}.kcfg/launcherapplet.kcfg
+%{_tde_configdir}.kcfg/mediamanagersettings.kcfg
+%{_tde_mimedir}/inode/system_directory.desktop
+%{_tde_servicesdir}/kded/remotedirnotify.desktop
+%{_tde_servicesdir}/kded/systemdirnotify.desktop
+%config(noreplace) %{_tde_configdir}/kshorturifilterrc
+%config(noreplace) %{_tde_configdir}/kxkb_groups
+%{_tde_sharedir}/desktop-directories
+%exclude %{_tde_htmldir}/en/kioslave
+%dir %{_tde_sharedir}/fonts
+%dir %{_tde_sharedir}/fonts/override
+%verify(not md5 size mtime) %{_tde_sharedir}/fonts/override/fonts.dir
+%dir %{_tde_iconsdir}/*/*/*
+%{_tde_configdir}.kcfg/kcm_useraccount.kcfg
+%{_tde_configdir}.kcfg/kcm_useraccount_pass.kcfg
+%exclude %{_tde_iconsdir}/*/*/*/style.*
+%exclude %{_tde_iconsdir}/*/*/*/looknfeel.*
+%exclude %{_tde_iconsdir}/*/*/*/energy.*
+%exclude %{_tde_iconsdir}/*/*/*/date.*
+%exclude %{_tde_iconsdir}/*/*/*/filetypes.*
+%exclude %{_tde_iconsdir}/*/*/*/personal.*
+%{_tde_iconsdir}/*/*/*/a*.*
+%{_tde_iconsdir}/*/*/*/b*.*
+%{_tde_iconsdir}/*/*/*/c*.*
+%{_tde_iconsdir}/*/*/*/d*.*
+%{_tde_iconsdir}/*/*/*/f*.*
+%{_tde_iconsdir}/*/*/*/g*.*
+%{_tde_iconsdir}/*/*/*/help_index.*
+%{_tde_iconsdir}/*/*/*/icons.*
+%{_tde_iconsdir}/*/*/*/input_devices_settings.*
+%{_tde_iconsdir}/*/*/*/kcmx.*
+%{_tde_iconsdir}/*/*/*/kcmdf.*
+%{_tde_iconsdir}/*/*/*/kbinaryclock.*
+%{_tde_iconsdir}/*/*/apps/kcmcgi.*
+%{_tde_iconsdir}/*/*/apps/kcmcolors.*
+%{_tde_iconsdir}/*/*/apps/kcmcomponentchooser.*
+%{_tde_iconsdir}/*/*/apps/kcmcrypto.*
+%{_tde_iconsdir}/*/*/apps/kcmhistory.*
+%{_tde_iconsdir}/*/*/apps/kcmjoystick.*
+%{_tde_iconsdir}/*/*/apps/kcmkded.*
+%{_tde_iconsdir}/*/*/apps/kcmkdnssd.*
+%{_tde_iconsdir}/*/*/apps/kcmkhtml_filter.*
+%{_tde_iconsdir}/*/*/apps/kcmlaunch.*
+%{_tde_iconsdir}/*/*/apps/kcmmedia.*
+%{_tde_iconsdir}/*/*/apps/kcmmouse.*
+%{_tde_iconsdir}/*/*/apps/kcmnetpref.*
+%{_tde_iconsdir}/*/*/apps/kcmnic.*
+%{_tde_iconsdir}/*/*/apps/kcmperformance.*
+%{_tde_iconsdir}/*/*/apps/kcmprivacy.*
+%{_tde_iconsdir}/*/*/apps/kcmspellchecking.*
+%{_tde_iconsdir}/*/*/*/ieee1394.*
+%{_tde_iconsdir}/*/*/*/kdeprintfax.*
+%{_tde_iconsdir}/*/*/*/kdisknav.*
+%{_tde_iconsdir}/*/*/*/knetattach.*
+%{_tde_iconsdir}/*/*/*/key_bindings.*
+%{_tde_iconsdir}/*/*/*/keyboard_layout.*
+%{_tde_iconsdir}/*/*/*/kfm_home.*
+%{_tde_iconsdir}/*/*/*/khelpcenter.*
+%{_tde_iconsdir}/*/*/*/kjobviewer.*
+%{_tde_iconsdir}/*/*/*/konsole.*
+%{_tde_iconsdir}/*/*/*/l*.*
+%{_tde_iconsdir}/*/*/*/m*.*
+%{_tde_iconsdir}/*/*/*/ne*.*
+%{_tde_iconsdir}/*/*/*/opera.*
+%{_tde_iconsdir}/*/*/*/r*.*
+%{_tde_iconsdir}/*/*/*/s*.*
+%{_tde_iconsdir}/*/*/*/usb.*
+%{_tde_iconsdir}/*/*/*/vnc.*
+%{_tde_iconsdir}/*/*/*/w*.*
+%{_tde_iconsdir}/*/*/*/e*.*
+%{_tde_iconsdir}/*/*/*/kcmdevices.*
+%{_tde_iconsdir}/*/*/*/kcmdrkonqi.*
+%{_tde_iconsdir}/*/*/*/kcmmemory.*
+%{_tde_iconsdir}/*/*/*/kcmmidi.*
+%{_tde_iconsdir}/*/*/*/kcmpartitions.*
+%{_tde_iconsdir}/*/*/*/kcmpci.*
+%{_tde_iconsdir}/*/*/*/kcmprocessor.*
+%{_tde_iconsdir}/*/*/*/kcmscsi.*
+%{_tde_iconsdir}/*/*/*/kthememgr.*
+%{_tde_iconsdir}/*/*/*/kcontrol.*
+%{_tde_iconsdir}/*/*/*/kxkb.*
+%{_tde_iconsdir}/*/*/*/p*.*
+%{_tde_iconsdir}/*/*/*/t*.*
+%{_tde_iconsdir}/*/*/*/qtella.*
+%{_tde_iconsdir}/*/*/*/x*.*
# these have no PNG
-/opt/kde3/share/icons/*/scalable/apps/hardware.svgz
-/opt/kde3/share/icons/*/scalable/apps/kate2.svgz
-/opt/kde3/share/icons/*/scalable/apps/kwrite2.svgz
-/opt/kde3/share/icons/*/scalable/apps/openoffice.svgz
-/opt/kde3/share/icons/*/scalable/apps/quicktime.svgz
-/opt/kde3/share/locale
-/opt/kde3/share/mimelnk/application/x-konsole.desktop
-/opt/kde3/share/mimelnk/application/x-ktheme.desktop
-/opt/kde3/share/mimelnk/application/x-smb-server.desktop
-/opt/kde3/share/mimelnk/print
-/opt/kde3/share/services/textthumbnail.desktop
-/opt/kde3/share/services/htmlthumbnail.desktop
-/opt/kde3/share/services/ka*.desktop
-/opt/kde3/share/services/kdeprint_part.desktop
-/opt/kde3/share/services/konsolepart.desktop
-/opt/kde3/share/services/konsole-script.desktop
-/opt/kde3/share/services/kshorturifilter.desktop
-/opt/kde3/share/services/ku*.desktop
-/opt/kde3/share/services/searchproviders
-/opt/kde3/share/services/useragentstrings
-/opt/kde3/share/services/imagethumbnail.desktop
-/opt/kde3/share/services/kxkb.desktop
-/opt/kde3/share/services/kmanpart.desktop
-/opt/kde3/share/services/localdomainurifilter.desktop
-/opt/kde3/share/services/kwrited.desktop
-/opt/kde3/share/services/djvuthumbnail.desktop
-/opt/kde3/share/services/kded/kwrited.desktop
-/opt/kde3/share/servicetypes/terminalemulator.desktop
-/opt/kde3/share/servicetypes/kateplugin.desktop
-/opt/kde3/share/servicetypes/findpart.desktop
-/opt/kde3/share/servicetypes/searchprovider.desktop
-/opt/kde3/share/servicetypes/thumbcreator.desktop
-/opt/kde3/share/servicetypes/uasprovider.desktop
-%exclude /opt/kde3/share/sounds/KDE_Close_Window*
-%exclude /opt/kde3/share/sounds/KDE_Dialog*
-%exclude /opt/kde3/share/sounds/KDE_Desktop*
-%exclude /opt/kde3/share/sounds/KDE_Logout*
-%exclude /opt/kde3/share/sounds/KDE_Startup*
-%exclude /opt/kde3/share/sounds/KDE_Window*
-/opt/kde3/share/sounds
-/opt/kde3/share/templates
-/opt/kde3/share/services/khelpcenter.desktop
-/opt/kde3/bin/keditbookmarks
-/opt/kde3/bin/kfm*
-/opt/kde3/share/apps/kbookmark
-/opt/kde3/share/apps/keditbookmarks
-/opt/kde3/share/icons/*/*/*/keditbookmarks.*
-/opt/kde3/share/icons/*/*/*/kfm.*
-/opt/kde3/share/icons/*/*/*/konqueror.*
-/opt/kde3/share/services/konq*
-/opt/kde3/share/servicetypes/konq*
-/opt/kde3/share/services/cursorthumbnail.desktop
-/opt/kde3/%_lib/kde3/kcm_randr.*
-/opt/kde3/bin/krandrtray
-/opt/kde3/share/applications/kde/krandrtray.desktop
-/opt/kde3/%_lib/kde3/kded_mediamanager.*
-/opt/kde3/%_lib/kde3/kfile_media.*
-/opt/kde3/%_lib/kde3/kfile_trash.*
-/opt/kde3/share/applications/kde/devices.desktop
-/opt/kde3/share/applications/kde/knetattach.desktop
-/opt/kde3/share/applications/kde/opengl.desktop
-/opt/kde3/share/icons/*/*/*/kcmopengl.*
-/opt/kde3/share/mimelnk/media
-/opt/kde3/share/services/kded/mediamanager.desktop
-/opt/kde3/share/services/kded/homedirnotify.desktop
-/opt/kde3/share/services/kded/medianotifier.desktop
-/opt/kde3/share/services/kfile_media.desktop
-/opt/kde3/share/services/kfile_trash.desktop
-/opt/kde3/share/services/kfile_trash_system.desktop
-/opt/kde3/share/mimelnk/fonts/package.desktop
-/opt/kde3/%_lib/kde3/exrthumbnail.*
-/opt/kde3/share/services/exrthumbnail.desktop
-%dir /opt/kde3/share/mimelnk/fonts
-/opt/kde3/bin/kfontinst
-/opt/kde3/%_lib/kde3/fontthumbnail.*
-/opt/kde3/%_lib/kde3/kfile_font.*
-/opt/kde3/%_lib/kde3/libkfontviewpart.*
-%dir /opt/kde3/share/apps/kfontview
-/opt/kde3/share/apps/kfontview/kfontviewpart.rc
-/opt/kde3/share/applications/kde/kcmfontinst.desktop
-/opt/kde3/share/mimelnk/fonts/folder.desktop
-/opt/kde3/share/mimelnk/fonts/system-folder.desktop
-/opt/kde3/share/services/fontthumbnail.desktop
-/opt/kde3/share/services/kfile_font.desktop
-/opt/kde3/share/services/kfontviewpart.desktop
+%{_tde_iconsdir}/*/scalable/apps/hardware.svgz
+%{_tde_iconsdir}/*/scalable/apps/kate2.svgz
+%{_tde_iconsdir}/*/scalable/apps/kwrite2.svgz
+%{_tde_iconsdir}/*/scalable/apps/openoffice.svgz
+%{_tde_iconsdir}/*/scalable/apps/quicktime.svgz
+%{_tde_sharedir}/locale
+%{_tde_mimedir}/application/x-konsole.desktop
+%{_tde_mimedir}/application/x-ktheme.desktop
+%{_tde_mimedir}/application/x-smb-server.desktop
+%{_tde_mimedir}/print
+%{_tde_servicesdir}/textthumbnail.desktop
+%{_tde_servicesdir}/htmlthumbnail.desktop
+%{_tde_servicesdir}/ka*.desktop
+%{_tde_servicesdir}/kdeprint_part.desktop
+%{_tde_servicesdir}/konsolepart.desktop
+%{_tde_servicesdir}/konsole-script.desktop
+%{_tde_servicesdir}/kshorturifilter.desktop
+%{_tde_servicesdir}/ku*.desktop
+%{_tde_servicesdir}/searchproviders
+%{_tde_servicesdir}/useragentstrings
+%{_tde_servicesdir}/imagethumbnail.desktop
+%{_tde_servicesdir}/kxkb.desktop
+%{_tde_servicesdir}/kmanpart.desktop
+%{_tde_servicesdir}/localdomainurifilter.desktop
+%{_tde_servicesdir}/kwrited.desktop
+%{_tde_servicesdir}/djvuthumbnail.desktop
+%{_tde_servicesdir}/kded/kwrited.desktop
+%{_tde_servicetypesdir}/terminalemulator.desktop
+%{_tde_servicetypesdir}/kateplugin.desktop
+%{_tde_servicetypesdir}/findpart.desktop
+%{_tde_servicetypesdir}/searchprovider.desktop
+%{_tde_servicetypesdir}/thumbcreator.desktop
+%{_tde_servicetypesdir}/uasprovider.desktop
+%exclude %{_tde_sounddir}/KDE_Close_Window*
+%exclude %{_tde_sounddir}/KDE_Dialog*
+%exclude %{_tde_sounddir}/KDE_Desktop*
+%exclude %{_tde_sounddir}/KDE_Logout*
+%exclude %{_tde_sounddir}/KDE_Startup*
+%exclude %{_tde_sounddir}/KDE_Window*
+%{_tde_sounddir}
+%{_tde_sharedir}/templates
+%{_tde_servicesdir}/khelpcenter.desktop
+%{_tde_bindir}/keditbookmarks
+%{_tde_bindir}/kfm*
+%{_tde_datadir}/kbookmark
+%{_tde_datadir}/keditbookmarks
+%{_tde_iconsdir}/*/*/*/keditbookmarks.*
+%{_tde_iconsdir}/*/*/*/kfm.*
+%{_tde_iconsdir}/*/*/*/konqueror.*
+%{_tde_servicesdir}/konq*
+%{_tde_servicetypesdir}/konq*
+%{_tde_servicesdir}/cursorthumbnail.desktop
+%{_tde_modulesdir}/kcm_randr.*
+%{_tde_bindir}/krandrtray
+%{_tde_applicationsdir}/kde/krandrtray.desktop
+%{_tde_modulesdir}/kded_mediamanager.*
+%{_tde_modulesdir}/kfile_media.*
+%{_tde_modulesdir}/kfile_trash.*
+%{_tde_applicationsdir}/kde/devices.desktop
+%{_tde_applicationsdir}/kde/knetattach.desktop
+%{_tde_applicationsdir}/kde/opengl.desktop
+%{_tde_iconsdir}/*/*/*/kcmopengl.*
+%{_tde_mimedir}/media
+%{_tde_servicesdir}/kded/mediamanager.desktop
+%{_tde_servicesdir}/kded/homedirnotify.desktop
+%{_tde_servicesdir}/kded/medianotifier.desktop
+%{_tde_servicesdir}/kfile_media.desktop
+%{_tde_servicesdir}/kfile_trash.desktop
+%{_tde_servicesdir}/kfile_trash_system.desktop
+%{_tde_mimedir}/fonts/package.desktop
+%{_tde_modulesdir}/exrthumbnail.*
+%{_tde_servicesdir}/exrthumbnail.desktop
+%dir %{_tde_mimedir}/fonts
+%{_tde_bindir}/kfontinst
+%{_tde_modulesdir}/fontthumbnail.*
+%{_tde_modulesdir}/kfile_font.*
+%{_tde_modulesdir}/libkfontviewpart.*
+%dir %{_tde_datadir}/kfontview
+%{_tde_datadir}/kfontview/kfontviewpart.rc
+%{_tde_applicationsdir}/kde/kcmfontinst.desktop
+%{_tde_mimedir}/fonts/folder.desktop
+%{_tde_mimedir}/fonts/system-folder.desktop
+%{_tde_servicesdir}/fontthumbnail.desktop
+%{_tde_servicesdir}/kfile_font.desktop
+%{_tde_servicesdir}/kfontviewpart.desktop
%_mandir/man1/*
-%if %suse_version < 1001
-%config(noreplace) /etc/security/fileshare.conf
-/opt/kde3/bin/filesharelist
-%verify(not mode) /opt/kde3/bin/fileshareset
-%endif
%{_mandir}/man8/kcheckpass.8.gz
-%doc %lang(en) /opt/kde3/share/doc/HTML/en/kcontrol
-%doc %lang(en) /opt/kde3/share/doc/HTML/en/kdcop
-%doc %lang(en) /opt/kde3/share/doc/HTML/en/kdebugdialog
-%doc %lang(en) /opt/kde3/share/doc/HTML/en/kdeprint
-%doc %lang(en) /opt/kde3/share/doc/HTML/en/kdesu
-%exclude /opt/kde3/share/doc/HTML/en/khelpcenter/userguide
-%exclude /opt/kde3/share/doc/HTML/en/khelpcenter/visualdict
-%doc %lang(en) /opt/kde3/share/doc/HTML/en/khelpcenter
-%doc %lang(en) /opt/kde3/share/doc/HTML/en/knetattach
-/opt/kde3/share/applications/kde/desktoppath.desktop
+%doc %lang(en) %{_tde_htmldir}/en/kcontrol
+%doc %lang(en) %{_tde_htmldir}/en/kdcop
+%doc %lang(en) %{_tde_htmldir}/en/kdebugdialog
+%doc %lang(en) %{_tde_htmldir}/en/kdeprint
+%doc %lang(en) %{_tde_htmldir}/en/kdesu
+%exclude %{_tde_htmldir}/en/khelpcenter/userguide
+%exclude %{_tde_htmldir}/en/khelpcenter/visualdict
+%doc %lang(en) %{_tde_htmldir}/en/khelpcenter
+%doc %lang(en) %{_tde_htmldir}/en/knetattach
+%{_tde_applicationsdir}/kde/desktoppath.desktop
%files samba
%defattr(-,root,root)
-/opt/kde3/%_lib/kde3/kcm_samba.*
-/opt/kde3/%_lib/kde3/kio_smb.*
-/opt/kde3/share/services/smb.protocol
-%dir /opt/kde3/share/apps/konqueror/dirtree
-%dir /opt/kde3/share/apps/konqueror/dirtree/remote
-/opt/kde3/share/apps/konqueror/dirtree/remote/smb-network.desktop
-/opt/kde3/share/mimelnk/application/x-smb-workgroup.desktop
+%{_tde_modulesdir}/kcm_samba.*
+%{_tde_modulesdir}/kio_smb.*
+%{_tde_servicesdir}/smb.protocol
+%dir %{_tde_datadir}/konqueror/dirtree
+%dir %{_tde_datadir}/konqueror/dirtree/remote
+%{_tde_datadir}/konqueror/dirtree/remote/smb-network.desktop
+%{_tde_mimedir}/application/x-smb-workgroup.desktop
%files kdm
%defattr(-,root,root)
-%dir /opt/kde3/share/doc/kdm
-/opt/kde3/bin/genkdmconf
-/opt/kde3/bin/kdm*
-/opt/kde3/bin/krootimage
-/opt/kde3/share/apps/kdm
-/opt/kde3/%_lib/kde3/kgreet_pam.*
-%doc /opt/kde3/share/doc/kdm/README
-%if %suse_version < 1020
-%config /etc/pam.d/xdm-np
-%endif
-%dir /opt/kde3/share/config/kdm
-%config(noreplace) /opt/kde3/share/config/kdm/kdmrc
-%config(noreplace) /opt/kde3/share/config/kdm/backgroundrc
-%if %suse_version < 1010
-%config /opt/kde3/share/config/kdm/Xaccess
-%config /opt/kde3/share/config/kdm/Xreset
-%config /opt/kde3/share/config/kdm/Xresources
-%config /opt/kde3/share/config/kdm/Xsession
-%config /opt/kde3/share/config/kdm/Xsetup
-%config /opt/kde3/share/config/kdm/Xstartup
-%config /opt/kde3/share/config/kdm/Xwilling
-%endif
+%dir %{_tde_docdir}/kdm
+%{_tde_bindir}/genkdmconf
+%{_tde_bindir}/kdm*
+%{_tde_bindir}/krootimage
+%{_tde_datadir}/kdm
+%{_tde_modulesdir}/kgreet_pam.*
+%doc %{_tde_docdir}/kdm/README
+%dir %{_tde_configdir}/kdm
+%config(noreplace) %{_tde_configdir}/kdm/kdmrc
+%config(noreplace) %{_tde_configdir}/kdm/backgroundrc
%ghost /var/run/xdmctl
-/usr/sbin/rckdm
-/opt/kde3/share/applications/kde/kdm.desktop
-/opt/kde3/share/icons/*/*/*/kdmconfig.*
-/opt/kde3/%_lib/kde3/kcm_kdm.*
-%doc %lang(en) /opt/kde3/share/doc/HTML/en/kdm
+# kdm has not been renamed.
+%{_sbindir}/rckdm
+%{_tde_applicationsdir}/kde/kdm.desktop
+%{_tde_iconsdir}/*/*/*/kdmconfig.*
+%{_tde_modulesdir}/kcm_kdm.*
+%doc %lang(en) %{_tde_htmldir}/en/kdm
%files session
%defattr(-,root,root)
-%if %suse_version > 1010
-/usr/bin/kde
-/usr/bin/startkde3
-%else
-/usr/X11R6/bin/kde
-%endif
-%if %suse_version < 1030
-%dir /usr/share/xsessions
-%endif
+/usr/bin/tde
+/usr/bin/starttde
/usr/share/xsessions/kde.desktop
%files extra
%defattr(-,root,root)
-/opt/kde3/bin/kpersonalizer
-/opt/kde3/share/applications/kde/kpersonalizer.desktop
-/opt/kde3/share/apps/kpersonalizer
-/opt/kde3/share/icons/*/*/*/kpersonalizer.*
-/opt/kde3/bin/kfontview
-/opt/kde3/share/applications/kde/kfontview.desktop
-/opt/kde3/share/apps/kfontview/kfontviewui.rc
-/opt/kde3/%_lib/kde3/khotkeys_arts.*
+%{_tde_bindir}/kpersonalizer
+%{_tde_applicationsdir}/kde/kpersonalizer.desktop
+%{_tde_datadir}/kpersonalizer
+%{_tde_iconsdir}/*/*/*/kpersonalizer.*
+%{_tde_bindir}/kfontview
+%{_tde_applicationsdir}/kde/kfontview.desktop
+%{_tde_datadir}/kfontview/kfontviewui.rc
+%{_tde_modulesdir}/khotkeys_arts.*
%files nsplugin
%defattr(-,root,root)
-/opt/kde3/bin/nsplugin*
-/opt/kde3/share/apps/plugin/nspluginpart.rc
-%dir /opt/kde3/share/applnk/Settings/WebBrowsing
-/opt/kde3/share/applnk/Settings/WebBrowsing/nsplugin.desktop
+%{_tde_bindir}/nsplugin*
+%{_tde_datadir}/plugin/nspluginpart.rc
+%dir %{_tde_appsdir}/Settings/WebBrowsing
+%{_tde_appsdir}/Settings/WebBrowsing/nsplugin.desktop
%files devel
%defattr(-,root,root)
-/opt/kde3/include/*
-/opt/kde3/%_lib/libkonq.so
-/opt/kde3/%_lib/libkdecorations.so
-/opt/kde3/%_lib/libkonqsidebarplugin.so
-/opt/kde3/%_lib/libkickermain.so
-/opt/kde3/%_lib/libtask*.so
-/opt/kde3/%_lib/libksgrd.so
-%if %suse_version > 1010
-/opt/kde3/%_lib/libkickoffsearch_interfaces.so
-/opt/kde3/%_lib/libkickoffsearch_interfaces.la
-%endif
-/opt/kde3/%_lib/libksplashthemes.so
-/opt/kde3/%_lib/libkateinterfaces.so
-/opt/kde3/%_lib/libkateutils.so
-/opt/kde3/%_lib/libkhotkeys_shared.so
-/opt/kde3/%_lib/libkateinterfaces.la
-/opt/kde3/%_lib/libkateutils.la
-/opt/kde3/%_lib/libkdecorations.la
-/opt/kde3/%_lib/libkfontinst.la
-/opt/kde3/%_lib/libkfontinst.so
-/opt/kde3/%_lib/libkhotkeys_shared.la
-/opt/kde3/%_lib/libkickermain.la
-/opt/kde3/%_lib/libkonq.la
-/opt/kde3/%_lib/libkonqsidebarplugin.la
-/opt/kde3/%_lib/libksgrd.la
-/opt/kde3/%_lib/libksplashthemes.la
-/opt/kde3/%_lib/libtaskbar.la
-/opt/kde3/%_lib/libtaskmanager.la
-/opt/kde3/%_lib/libkasbar.so
-/opt/kde3/%_lib/libkasbar.la
+%{_tde_includedir}/*
+%{_tde_libdir}/libkonq.so
+%{_tde_libdir}/libkdecorations.so
+%{_tde_libdir}/libkonqsidebarplugin.so
+%{_tde_libdir}/libkickermain.so
+%{_tde_libdir}/libtask*.so
+%{_tde_libdir}/libksgrd.so
+%{_tde_libdir}/libkickoffsearch_interfaces.so
+%{_tde_libdir}/libkickoffsearch_interfaces.la
+%{_tde_libdir}/libksplashthemes.so
+%{_tde_libdir}/libkateinterfaces.so
+%{_tde_libdir}/libkateutils.so
+%{_tde_libdir}/libkhotkeys_shared.so
+%{_tde_libdir}/libkateinterfaces.la
+%{_tde_libdir}/libkateutils.la
+%{_tde_libdir}/libkdecorations.la
+%{_tde_libdir}/libkfontinst.la
+%{_tde_libdir}/libkfontinst.so
+%{_tde_libdir}/libkhotkeys_shared.la
+%{_tde_libdir}/libkickermain.la
+%{_tde_libdir}/libkonq.la
+%{_tde_libdir}/libkonqsidebarplugin.la
+%{_tde_libdir}/libksgrd.la
+%{_tde_libdir}/libksplashthemes.la
+%{_tde_libdir}/libtaskbar.la
+%{_tde_libdir}/libtaskmanager.la
+%{_tde_libdir}/libkasbar.so
+%{_tde_libdir}/libkasbar.la
%files ksysguardd
%defattr(-,root,root)
%dir /etc/slp.reg.d
-#%if %suse_version < 1020
-/usr/bin/ksysguardd
-/opt/kde3/bin/ksysguardd
+%{_bindir}/ksysguardd
+%{_tde_bindir}/ksysguardd
%config(noreplace) /etc/ksysguarddrc
-#%endif
-#%if %suse_version > 1030
-#/usr/bin/ksysguardd
-#%config(noreplace) /etc/ksysguarddrc
-#%endif
/etc/init.d/ksysguardd
-/usr/sbin/rcksysguardd
+%{_sbindir}/rcksysguardd
%config(noreplace) /etc/slp.reg.d/*
-%if %suse_version > 1010
-%if %suse_version < 1140
-
-%files beagle
-%defattr(-,root,root)
-/opt/kde3/bin/khc_beagle_search.pl
-/opt/kde3/bin/khc_beagle_index.pl
-/opt/kde3/share/apps/khelpcenter/searchhandlers/docbook.desktop
-/opt/kde3/%_lib/kde3/kickoffsearch_beagle.*
-/opt/kde3/share/services/kickoffsearch_beagle.desktop
-%endif
-%endif
-
%files -n fileshareset
%defattr(-,root,root)
%config(noreplace) /etc/security/fileshare.conf
@@ -1577,275 +1390,270 @@ rm -rf $RPM_BUILD_ROOT
%files apps
%defattr(-,root,root)
-/opt/kde3/bin/konsole*
-/opt/kde3/%_lib/kde3/konsole.*
-/opt/kde3/%_lib/kde3/kcm_konsole.*
-/opt/kde3/%_lib/libkdeinit_konsole.so
-/opt/kde3/share/applications/kde/konsole.desktop
-/opt/kde3/share/applications/kde/konsolesu.desktop
-%doc %lang(en) /opt/kde3/share/doc/HTML/en/konsole
-/opt/kde3/share/applications/kde/Home.desktop
-/opt/kde3/%_lib/libkdeinit_konqueror.so
-/opt/kde3/share/apps/konqueror/konq-simplebrowser.rc
-/opt/kde3/share/applications/kde/konquerorsu.desktop
-/opt/kde3/share/applnk/konqueror.desktop
-%doc %lang(en) /opt/kde3/share/doc/HTML/en/konqueror
-/opt/kde3/share/config.kcfg/konqueror.kcfg
-/opt/kde3/bin/konqueror
-/opt/kde3/%_lib/kde3/konq*.so
-/opt/kde3/%_lib/kde3/konq*.la
-%dir /opt/kde3/share/apps/konqueror
-/opt/kde3/share/apps/konqueror/tiles
-/opt/kde3/share/apps/konqueror/about
-/opt/kde3/share/apps/konqueror/icons
-/opt/kde3/share/apps/konqueror/konqueror.rc
-/opt/kde3/share/apps/konqueror/p*
-/opt/kde3/share/apps/konqueror/servicemenus
-/opt/kde3/%_lib/kde3/konqueror.*
-/opt/kde3/share/apps/konqiconview
-/opt/kde3/share/apps/konqlistview
-/opt/kde3/share/apps/konqsidebartng
-/opt/kde3/%_lib/kde3/kded_konqy_preloader.*
-/opt/kde3/share/services/kded/konqy_preloader.desktop
-/opt/kde3/share/applications/kde/konqbrowser.desktop
-/opt/kde3/share/applications/kde/konqfilemgr.desktop
-/opt/kde3/share/config.kcfg/konq_listview.kcfg
-%config(noreplace) /opt/kde3/share/config/konqsidebartng.rc
-/opt/kde3/bin/kfind
-/opt/kde3/%_lib/kde3/libkfindpart.*
-/opt/kde3/share/applications/kde/Kfind.desktop
-/opt/kde3/share/apps/kfindpart
-/opt/kde3/share/icons/*/*/*/kfind.*
-/opt/kde3/share/services/kfindpart.desktop
-%doc %lang(en) /opt/kde3/share/doc/HTML/en/kfind
-/opt/kde3/bin/kwrite
-/opt/kde3/%_lib/kde3/kwrite.*
-/opt/kde3/%_lib/libkdeinit_kwrite.so
-/opt/kde3/share/applications/kde/kwrite.desktop
-/opt/kde3/share/apps/kwrite
-/opt/kde3/share/icons/*/*/*/kwrite.*
-%doc %lang(en) /opt/kde3/share/doc/HTML/en/kwrite
-/opt/kde3/bin/kate
-/opt/kde3/%_lib/kde3/kate.*
-/opt/kde3/%_lib/libkateinterfaces.so.*
-/opt/kde3/%_lib/libkateutils.so.*
-/opt/kde3/%_lib/libkdeinit_kate.so
-/opt/kde3/share/applications/kde/kate.desktop
-/opt/kde3/share/apps/kate
-/opt/kde3/share/config/katerc
-/opt/kde3/share/icons/*/*/*/kate.*
-%doc %lang(en) /opt/kde3/share/doc/HTML/en/kate
+%{_tde_bindir}/konsole*
+%{_tde_modulesdir}/konsole.*
+%{_tde_modulesdir}/kcm_konsole.*
+%{_tde_libdir}/libkdeinit_konsole.so
+%{_tde_applicationsdir}/kde/konsole.desktop
+%{_tde_applicationsdir}/kde/konsolesu.desktop
+%doc %lang(en) %{_tde_htmldir}/en/konsole
+%{_tde_applicationsdir}/kde/Home.desktop
+%{_tde_libdir}/libkdeinit_konqueror.so
+%{_tde_datadir}/konqueror/konq-simplebrowser.rc
+%{_tde_applicationsdir}/kde/konquerorsu.desktop
+%{_tde_appsdir}/konqueror.desktop
+%doc %lang(en) %{_tde_htmldir}/en/konqueror
+%{_tde_configdir}.kcfg/konqueror.kcfg
+%{_tde_bindir}/konqueror
+%{_tde_modulesdir}/konq*.so
+%{_tde_modulesdir}/konq*.la
+%dir %{_tde_datadir}/konqueror
+%{_tde_datadir}/konqueror/tiles
+%{_tde_datadir}/konqueror/about
+%{_tde_datadir}/konqueror/icons
+%{_tde_datadir}/konqueror/konqueror.rc
+%{_tde_datadir}/konqueror/p*
+%{_tde_datadir}/konqueror/servicemenus
+%{_tde_modulesdir}/konqueror.*
+%{_tde_datadir}/konqiconview
+%{_tde_datadir}/konqlistview
+%{_tde_datadir}/konqsidebartng
+%{_tde_modulesdir}/kded_konqy_preloader.*
+%{_tde_servicesdir}/kded/konqy_preloader.desktop
+%{_tde_applicationsdir}/kde/konqbrowser.desktop
+%{_tde_applicationsdir}/kde/konqfilemgr.desktop
+%{_tde_configdir}.kcfg/konq_listview.kcfg
+%config(noreplace) %{_tde_configdir}/konqsidebartng.rc
+%{_tde_bindir}/kfind
+%{_tde_modulesdir}/libkfindpart.*
+%{_tde_applicationsdir}/kde/Kfind.desktop
+%{_tde_datadir}/kfindpart
+%{_tde_iconsdir}/*/*/*/kfind.*
+%{_tde_servicesdir}/kfindpart.desktop
+%doc %lang(en) %{_tde_htmldir}/en/kfind
+%{_tde_bindir}/kwrite
+%{_tde_modulesdir}/kwrite.*
+%{_tde_libdir}/libkdeinit_kwrite.so
+%{_tde_applicationsdir}/kde/kwrite.desktop
+%{_tde_datadir}/kwrite
+%{_tde_iconsdir}/*/*/*/kwrite.*
+%doc %lang(en) %{_tde_htmldir}/en/kwrite
+%{_tde_bindir}/kate
+%{_tde_modulesdir}/kate.*
+%{_tde_libdir}/libkateinterfaces.so.*
+%{_tde_libdir}/libkateutils.so.*
+%{_tde_libdir}/libkdeinit_kate.so
+%{_tde_applicationsdir}/kde/kate.desktop
+%{_tde_datadir}/kate
+%{_tde_configdir}/katerc
+%{_tde_iconsdir}/*/*/*/kate.*
+%doc %lang(en) %{_tde_htmldir}/en/kate
%files workspace
%defattr(-,root,root)
-%exclude /usr/share/wallpapers/default_blue.*
-%doc %lang(en) /opt/kde3/share/doc/HTML/en/kicker
-/usr/share/wallpapers
-/opt/kde3/bin/startkde
-/opt/kde3/bin/kdesktop
-/opt/kde3/bin/kdesktop_lock
-/opt/kde3/bin/ksmserver
-/opt/kde3/%_lib/libkdeinit_ksmserver.so
-/opt/kde3/bin/ksplash
-/opt/kde3/bin/ksplashsimple
-/opt/kde3/%_lib/kde3/kdesktop.*
-/opt/kde3/share/apps/kdesktop
-/opt/kde3/share/config.kcfg/kdesktop.kcfg
-%config(noreplace) /opt/kde3/share/config/kdesktop_custom_menu*
-/opt/kde3/bin/kicker
-/opt/kde3/%_lib/kde3/kicker*
-/opt/kde3/%_lib/kde3/kcm_kicker*
-/opt/kde3/%_lib/libkickermain.so.*
-/opt/kde3/share/applications/kde/kcmkicker.desktop
-/opt/kde3/share/apps/kicker
-/opt/kde3/share/config.kcfg/kickerSettings.kcfg
-/opt/kde3/share/icons/*/*/*/kcmkicker.*
-/opt/kde3/share/icons/*/*/*/kicker.*
-/opt/kde3/%_lib/kconf_update_bin/kicker-3.4-reverseLayout
-/opt/kde3/bin/kwin
-/opt/kde3/bin/kwin_killer_helper
-/opt/kde3/bin/kwin_rules_dialog
-/opt/kde3/%_lib/kde3/kwin_*
-/opt/kde3/share/apps/kwin
-/opt/kde3/%_lib/kde3/kwin.*
-/opt/kde3/%_lib/kde3/kwin3_*
-/opt/kde3/%_lib/kconf_update_bin/kwin_update_default_rules
-/opt/kde3/%_lib/kconf_update_bin/kwin_update_window_settings
-/opt/kde3/share/applications/kde/kwinrules.desktop
-/opt/kde3/share/applications/kde/kwindecoration.desktop
-/opt/kde3/share/applications/kde/kwinoptions.desktop
-/opt/kde3/share/config.kcfg/kwin.kcfg
-/opt/kde3/share/icons/*/*/*/kwin.*
+%exclude %{_datadir}/default_blue.*
+%doc %lang(en) %{_tde_htmldir}/en/kicker
+%{_datadir}/wallpapers
+%{_tde_bindir}/startkde
+%{_tde_bindir}/kdesktop
+%{_tde_bindir}/kdesktop_lock
+%{_tde_bindir}/ksmserver
+%{_tde_libdir}/libkdeinit_ksmserver.so
+%{_tde_bindir}/ksplash
+%{_tde_bindir}/ksplashsimple
+%{_tde_modulesdir}/kdesktop.*
+%{_tde_datadir}/kdesktop
+%{_tde_configdir}.kcfg/kdesktop.kcfg
+%config(noreplace) %{_tde_configdir}/kdesktop_custom_menu*
+%{_tde_bindir}/kicker
+%{_tde_modulesdir}/kicker*
+%{_tde_modulesdir}/kcm_kicker*
+%{_tde_libdir}/libkickermain.so.*
+%{_tde_applicationsdir}/kde/kcmkicker.desktop
+%{_tde_datadir}/kicker
+%{_tde_configdir}.kcfg/kickerSettings.kcfg
+%{_tde_iconsdir}/*/*/*/kcmkicker.*
+%{_tde_iconsdir}/*/*/*/kicker.*
+%{_tde_libdir}/kconf_update_bin/kicker-3.4-reverseLayout
+%{_tde_bindir}/kwin
+%{_tde_bindir}/kwin_killer_helper
+%{_tde_bindir}/kwin_rules_dialog
+%{_tde_modulesdir}/kwin_*
+%{_tde_datadir}/kwin
+%{_tde_modulesdir}/kwin.*
+%{_tde_modulesdir}/kwin3_*
+%{_tde_libdir}/kconf_update_bin/kwin_update_default_rules
+%{_tde_libdir}/kconf_update_bin/kwin_update_window_settings
+%{_tde_applicationsdir}/kde/kwinrules.desktop
+%{_tde_applicationsdir}/kde/kwindecoration.desktop
+%{_tde_applicationsdir}/kde/kwinoptions.desktop
+%{_tde_configdir}.kcfg/kwin.kcfg
+%{_tde_iconsdir}/*/*/*/kwin.*
/var/adm/fillup-templates/sysconfig.windowmanager-kdebase3
-/opt/kde3/share/apps/ksplash
-/opt/kde3/share/services/ksplash.desktop
-/opt/kde3/share/services/ksplashdefault.desktop
-/opt/kde3/share/services/ksplashredmond.desktop
-/opt/kde3/share/services/ksplashstandard.desktop
-/opt/kde3/share/servicetypes/ksplashplugins.desktop
-/opt/kde3/share/icons/*/*/*/ksplash.*
-/opt/kde3/%_lib/kde3/ksplash*
-/opt/kde3/%_lib/libksplashthemes.so.*
-/opt/kde3/share/icons/*/*/apps/kcmsmserver.*
-/opt/kde3/share/applications/kde/kcmsmserver.desktop
-/opt/kde3/%_lib/kde3/ksmserver.*
-/opt/kde3/share/apps/ksmserver
-/opt/kde3/%_lib/kde3/clock_panelapplet.*
-/opt/kde3/%_lib/kde3/dockbar_panelextension.*
-/opt/kde3/%_lib/kde3/kasbar_panelextension.*
-/opt/kde3/%_lib/kde3/menu_panelapplet.*
-/opt/kde3/%_lib/kde3/klipper_panelapplet.*
-/opt/kde3/%_lib/kde3/launcher_panelapplet.*
-/opt/kde3/%_lib/kde3/lockout_panelapplet.*
-/opt/kde3/%_lib/kde3/minipager_panelapplet.*
-/opt/kde3/%_lib/kde3/naughty_panelapplet.*
-/opt/kde3/%_lib/kde3/run_panelapplet.*
-/opt/kde3/%_lib/kde3/sidebar_panelextension.*
-/opt/kde3/share/applications/kde/panel.desktop
-/opt/kde3/share/applications/kde/panel_appearance.desktop
-/opt/kde3/%_lib/kde3/media_panelapplet.*
-/opt/kde3/%_lib/kde3/kcm_taskbar.*
-/opt/kde3/share/applications/kde/kcmtaskbar.desktop
-/opt/kde3/share/config.kcfg/taskbar.kcfg
-/opt/kde3/share/icons/*/*/apps/kcmtaskbar.*
-/opt/kde3/%_lib/kde3/kcm_screensaver.*
-/opt/kde3/share/applications/kde/screensaver.desktop
-/opt/kde3/share/applnk/System/ScreenSavers/KBlankscreen.desktop
-/opt/kde3/share/applnk/System/ScreenSavers/KRandom.desktop
-/opt/kde3/bin/kwebdesktop
-/opt/kde3/share/config.kcfg/kwebdesktop.kcfg
-/opt/kde3/share/applications/kde/background.desktop
-/opt/kde3/%_lib/kde3/kcm_background*
-/opt/kde3/bin/default_desktop_aligning
-/opt/kde3/share/applications/kde/desktop.desktop
-/opt/kde3/share/applications/kde/desktopbehavior.desktop
-/opt/kde3/share/applications/kde/ksplashthememgr.desktop
-/opt/kde3/share/icons/*/*/apps/kcmdesktop.*
-/opt/kde3/share/icons/*/*/apps/kcmdesktopbehavior.*
-/opt/kde3/%_lib/kde3/kcm_ksplashthemes.*
-/opt/kde3/%_lib/kde3/kcm_kwindecoration.*
-/opt/kde3/%_lib/kde3/kcm_kwinoptions.*
-/opt/kde3/%_lib/kde3/kcm_kwinrules.*
-%doc %lang(en) /opt/kde3/share/doc/HTML/en/ksplashml
-/opt/kde3/shutdown
-%if %suse_version > 1010
-/opt/kde3/%_lib/libkickoffsearch_interfaces.so.*
-/opt/kde3/share/servicetypes/kickoffsearchplugin.desktop
-%endif
-/opt/kde3/share/autostart/*
-/opt/kde3/share/apps/naughtyapplet
-/opt/kde3/%_lib/libtask*.so.*
-/opt/kde3/bin/extensionproxy
-/opt/kde3/bin/appletproxy
-/opt/kde3/%_lib/kde3/appletproxy.*
-/opt/kde3/%_lib/kde3/extensionproxy.*
-/opt/kde3/%_lib/kde3/taskbar*
-/opt/kde3/%_lib/kde3/trash_panelapplet*
-/opt/kde3/%_lib/kde3/sys*
-/opt/kde3/share/apps/clockapplet
-/opt/kde3/bin/kasbar
-/opt/kde3/%_lib/libkasbar.so.*
-/opt/kde3/%_lib/libkdeinit_kicker.so
-/opt/kde3/%_lib/libkdeinit_appletproxy.so
-/opt/kde3/%_lib/libkdeinit_extensionproxy.so
-/opt/kde3/%_lib/libkdeinit_kdesktop.so
-/opt/kde3/%_lib/libkdeinit_kwin.so
-/opt/kde3/%_lib/libkdeinit_kwin_rules_dialog.so
-/opt/kde3/bin/ktip
-/opt/kde3/share/appl*/*/ktip.desktop
-/opt/kde3/share/icons/*/*/*/ktip.*
-/opt/kde3/bin/kpager
-/opt/kde3/share/appl*/*/kpager.desktop
-/opt/kde3/share/icons/*/*/*/kpager.*
-%doc %lang(en) /opt/kde3/share/doc/HTML/en/kpager
-/opt/kde3/bin/klipper
-/opt/kde3/%_lib/kde3/klipper.*
-/opt/kde3/%_lib/libkdeinit_klipper.so
-/opt/kde3/share/applications/kde/klipper.desktop
-%config(noreplace) /opt/kde3/share/config/klipperrc
-/opt/kde3/share/icons/*/*/*/klipper.*
-%doc %lang(en) /opt/kde3/share/doc/HTML/en/klipper
-/opt/kde3/share/applications/kde/kmenuedit.desktop
-/opt/kde3/share/apps/kmenuedit
-/opt/kde3/share/icons/*/*/*/kmenuedit.*
-%doc %lang(en) /opt/kde3/share/doc/HTML/en/kmenuedit
-/opt/kde3/bin/kmenuedit
-/opt/kde3/%_lib/kde3/kmenuedit.*
-/opt/kde3/%_lib/libkdeinit_kmenuedit.so
-/opt/kde3/bin/kinfocenter
-/opt/kde3/share/applications/kde/kinfocenter.desktop
-/opt/kde3/share/apps/kinfocenter
-%doc %lang(en) /opt/kde3/share/doc/HTML/en/kinfocenter
-%doc %lang(en) /opt/kde3/share/doc/HTML/en/khelpcenter/userguide
-%doc %lang(en) /opt/kde3/share/doc/HTML/en/khelpcenter/visualdict
-/opt/kde3/share/sounds/KDE_Close_Window*
-/opt/kde3/share/sounds/KDE_Dialog*
-/opt/kde3/share/sounds/KDE_Desktop*
-/opt/kde3/share/sounds/KDE_Logout*
-/opt/kde3/share/sounds/KDE_Startup*
-/opt/kde3/share/sounds/KDE_Window*
-/opt/kde3/%_lib/libkdeinit_khotkeys.so
-/opt/kde3/%_lib/kde3/kcm_khotkeys.*
-/opt/kde3/%_lib/kde3/kcm_khotkeys_init.*
-/opt/kde3/share/icons/*/*/*/khotkeys.*
-/opt/kde3/bin/khotkeys
-/opt/kde3/%_lib/kconf_update_bin/khotkeys_update
-/opt/kde3/%_lib/kde3/khotkeys.*
-/opt/kde3/%_lib/kde3/kded_khotkeys.*
-/opt/kde3/%_lib/libkhotkeys_shared.so.*
-/opt/kde3/share/applications/kde/khotkeys.desktop
-/opt/kde3/share/apps/khotkeys
-/opt/kde3/share/services/kded/khotkeys.desktop
-/opt/kde3/bin/ksysguard
-/opt/kde3/share/applications/kde/ksysguard.desktop
-/opt/kde3/share/apps/ksysguard
-/opt/kde3/share/icons/*/*/*/ksysguard.*
-/opt/kde3/share/mimelnk/application/x-ksysguard.desktop
-%doc %lang(en) /opt/kde3/share/doc/HTML/en/ksysguard
-%doc %lang(en) /opt/kde3/share/doc/HTML/en/kxkb
-/opt/kde3/%_lib/libksgrd.so.*
-/opt/kde3/bin/kompmgr
-%doc %lang(en) /opt/kde3/share/doc/HTML/en/kompmgr
-%if 0%{?with_hal} == 0
-/opt/kde3/bin/devmon-automounter.sh
-%endif
+%{_tde_datadir}/ksplash
+%{_tde_servicesdir}/ksplash.desktop
+%{_tde_servicesdir}/ksplashdefault.desktop
+%{_tde_servicesdir}/ksplashredmond.desktop
+%{_tde_servicesdir}/ksplashstandard.desktop
+%{_tde_servicetypesdir}/ksplashplugins.desktop
+%{_tde_iconsdir}/*/*/*/ksplash.*
+%{_tde_modulesdir}/ksplash*
+%{_tde_libdir}/libksplashthemes.so.*
+%{_tde_iconsdir}/*/*/apps/kcmsmserver.*
+%{_tde_applicationsdir}/kde/kcmsmserver.desktop
+%{_tde_modulesdir}/ksmserver.*
+%{_tde_datadir}/ksmserver
+%{_tde_modulesdir}/clock_panelapplet.*
+%{_tde_modulesdir}/dockbar_panelextension.*
+%{_tde_modulesdir}/kasbar_panelextension.*
+%{_tde_modulesdir}/menu_panelapplet.*
+%{_tde_modulesdir}/klipper_panelapplet.*
+%{_tde_modulesdir}/launcher_panelapplet.*
+%{_tde_modulesdir}/lockout_panelapplet.*
+%{_tde_modulesdir}/minipager_panelapplet.*
+%{_tde_modulesdir}/naughty_panelapplet.*
+%{_tde_modulesdir}/run_panelapplet.*
+%{_tde_modulesdir}/sidebar_panelextension.*
+%{_tde_applicationsdir}/kde/panel.desktop
+%{_tde_applicationsdir}/kde/panel_appearance.desktop
+%{_tde_modulesdir}/media_panelapplet.*
+%{_tde_modulesdir}/kcm_taskbar.*
+%{_tde_applicationsdir}/kde/kcmtaskbar.desktop
+%{_tde_configdir}.kcfg/taskbar.kcfg
+%{_tde_iconsdir}/*/*/apps/kcmtaskbar.*
+%{_tde_modulesdir}/kcm_screensaver.*
+%{_tde_applicationsdir}/kde/screensaver.desktop
+%{_tde_appsdir}/System/ScreenSavers/KBlankscreen.desktop
+%{_tde_appsdir}/System/ScreenSavers/KRandom.desktop
+%{_tde_bindir}/kwebdesktop
+%{_tde_configdir}.kcfg/kwebdesktop.kcfg
+%{_tde_applicationsdir}/kde/background.desktop
+%{_tde_modulesdir}/kcm_background*
+%{_tde_bindir}/default_desktop_aligning
+%{_tde_applicationsdir}/kde/desktop.desktop
+%{_tde_applicationsdir}/kde/desktopbehavior.desktop
+%{_tde_applicationsdir}/kde/ksplashthememgr.desktop
+%{_tde_iconsdir}/*/*/apps/kcmdesktop.*
+%{_tde_iconsdir}/*/*/apps/kcmdesktopbehavior.*
+%{_tde_modulesdir}/kcm_ksplashthemes.*
+%{_tde_modulesdir}/kcm_kwindecoration.*
+%{_tde_modulesdir}/kcm_kwinoptions.*
+%{_tde_modulesdir}/kcm_kwinrules.*
+%doc %lang(en) %{_tde_htmldir}/en/ksplashml
+%{_tde_prefix}/shutdown
+%{_tde_libdir}/libkickoffsearch_interfaces.so.*
+%{_tde_servicetypesdir}/kickoffsearchplugin.desktop
+%{_tde_sharedir}/autostart/*
+%{_tde_datadir}/naughtyapplet
+%{_tde_libdir}/libtask*.so.*
+%{_tde_bindir}/extensionproxy
+%{_tde_bindir}/appletproxy
+%{_tde_modulesdir}/appletproxy.*
+%{_tde_modulesdir}/extensionproxy.*
+%{_tde_modulesdir}/taskbar*
+%{_tde_modulesdir}/trash_panelapplet*
+%{_tde_modulesdir}/sys*
+%{_tde_datadir}/clockapplet
+%{_tde_bindir}/kasbar
+%{_tde_libdir}/libkasbar.so.*
+%{_tde_libdir}/libkdeinit_kicker.so
+%{_tde_libdir}/libkdeinit_appletproxy.so
+%{_tde_libdir}/libkdeinit_extensionproxy.so
+%{_tde_libdir}/libkdeinit_kdesktop.so
+%{_tde_libdir}/libkdeinit_kwin.so
+%{_tde_libdir}/libkdeinit_kwin_rules_dialog.so
+%{_tde_bindir}/ktip
+%{_tde_sharedir}/appl*/*/ktip.desktop
+%{_tde_iconsdir}/*/*/*/ktip.*
+%{_tde_bindir}/kpager
+%{_tde_sharedir}/appl*/*/kpager.desktop
+%{_tde_iconsdir}/*/*/*/kpager.*
+%doc %lang(en) %{_tde_htmldir}/en/kpager
+%{_tde_bindir}/klipper
+%{_tde_modulesdir}/klipper.*
+%{_tde_libdir}/libkdeinit_klipper.so
+%{_tde_applicationsdir}/kde/klipper.desktop
+%config(noreplace) %{_tde_configdir}/klipperrc
+%{_tde_iconsdir}/*/*/*/klipper.*
+%doc %lang(en) %{_tde_htmldir}/en/klipper
+%{_tde_applicationsdir}/kde/kmenuedit.desktop
+%{_tde_datadir}/kmenuedit
+%{_tde_iconsdir}/*/*/*/kmenuedit.*
+%doc %lang(en) %{_tde_htmldir}/en/kmenuedit
+%{_tde_bindir}/kmenuedit
+%{_tde_modulesdir}/kmenuedit.*
+%{_tde_libdir}/libkdeinit_kmenuedit.so
+%{_tde_bindir}/kinfocenter
+%{_tde_applicationsdir}/kde/kinfocenter.desktop
+%{_tde_datadir}/kinfocenter
+%doc %lang(en) %{_tde_htmldir}/en/kinfocenter
+%doc %lang(en) %{_tde_htmldir}/en/khelpcenter/userguide
+%doc %lang(en) %{_tde_htmldir}/en/khelpcenter/visualdict
+%{_tde_sounddir}/KDE_Close_Window*
+%{_tde_sounddir}/KDE_Dialog*
+%{_tde_sounddir}/KDE_Desktop*
+%{_tde_sounddir}/KDE_Logout*
+%{_tde_sounddir}/KDE_Startup*
+%{_tde_sounddir}/KDE_Window*
+%{_tde_libdir}/libkdeinit_khotkeys.so
+%{_tde_modulesdir}/kcm_khotkeys.*
+%{_tde_modulesdir}/kcm_khotkeys_init.*
+%{_tde_iconsdir}/*/*/*/khotkeys.*
+%{_tde_bindir}/khotkeys
+%{_tde_libdir}/kconf_update_bin/khotkeys_update
+%{_tde_modulesdir}/khotkeys.*
+%{_tde_modulesdir}/kded_khotkeys.*
+%{_tde_libdir}/libkhotkeys_shared.so.*
+%{_tde_applicationsdir}/kde/khotkeys.desktop
+%{_tde_datadir}/khotkeys
+%{_tde_servicesdir}/kded/khotkeys.desktop
+%{_tde_bindir}/ksysguard
+%{_tde_applicationsdir}/kde/ksysguard.desktop
+%{_tde_datadir}/ksysguard
+%{_tde_iconsdir}/*/*/*/ksysguard.*
+%{_tde_mimedir}/application/x-ksysguard.desktop
+%doc %lang(en) %{_tde_htmldir}/en/ksysguard
+%doc %lang(en) %{_tde_htmldir}/en/kxkb
+%{_tde_libdir}/libksgrd.so.*
+%{_tde_bindir}/kompmgr
+%doc %lang(en) %{_tde_htmldir}/en/kompmgr
%files runtime
%defattr(-,root,root)
-%doc %lang(en) /opt/kde3/share/doc/HTML/en/kioslave
-%exclude /opt/kde3/%_lib/kde3/kio_smb.*
-%exclude /opt/kde3/share/services/smb.protocol
-/opt/kde3/bin/kde3
-/opt/kde3/bin/kreadconfig
-/opt/kde3/bin/kwriteconfig
-/opt/kde3/bin/kprinter
-/opt/kde3/%_lib/libkdeinit_kprinter.so
-/opt/kde3/bin/kdesu
-/opt/kde3/%_lib/kde3/kio_*
-/opt/kde3/%_lib/libkfontinst.so.*
-/opt/kde3/share/services/*.protocol
-/opt/kde3/%_lib/libkonq.so.*
-/opt/kde3/%_lib/libkonqsidebarplugin.so.*
-/opt/kde3/%_lib/kde3/kded_favicons.*
-/opt/kde3/share/services/kded/favicons.desktop
-/opt/kde3/%_lib/libkdecorations.so.*
-/opt/kde3/%_lib/kde3/kgreet_winbind.*
-/opt/kde3/%_lib/kde3/kgreet_classic.*
+%doc %lang(en) %{_tde_htmldir}/en/kioslave
+%exclude %{_tde_modulesdir}/kio_smb.*
+%exclude %{_tde_servicesdir}/smb.protocol
+%{_tde_bindir}/kde3
+%{_tde_bindir}/kreadconfig
+%{_tde_bindir}/kwriteconfig
+%{_tde_bindir}/kprinter
+%{_tde_libdir}/libkdeinit_kprinter.so
+%{_tde_bindir}/kdesu
+%{_tde_modulesdir}/kio_*
+%{_tde_libdir}/libkfontinst.so.*
+%{_tde_servicesdir}/*.protocol
+%{_tde_libdir}/libkonq.so.*
+%{_tde_libdir}/libkonqsidebarplugin.so.*
+%{_tde_modulesdir}/kded_favicons.*
+%{_tde_servicesdir}/kded/favicons.desktop
+%{_tde_libdir}/libkdecorations.so.*
+%{_tde_modulesdir}/kgreet_winbind.*
+%{_tde_modulesdir}/kgreet_classic.*
%config /etc/pam.d/kcheckpass
-%verify(not mode) %attr(4755,root,shadow) /opt/kde3/bin/kcheckpass
-/opt/kde3/share/icons/*/*/*/knotify.*
-/opt/kde3/share/icons/*/*/*/kscreensaver.*
-/opt/kde3/share/icons/*/*/*/style.*
-/opt/kde3/share/icons/*/*/*/looknfeel.*
-/opt/kde3/share/icons/*/*/*/iconthemes.*
-/opt/kde3/share/icons/*/*/*/keyboard.*
-/opt/kde3/share/icons/*/*/*/kcmsound.*
-/opt/kde3/share/icons/*/*/*/energy.*
-/opt/kde3/share/icons/*/*/*/kcmkwm.*
-/opt/kde3/share/icons/*/*/*/hwinfo.*
-/opt/kde3/share/icons/*/*/*/date.*
-/opt/kde3/share/icons/*/*/*/filetypes.*
-/opt/kde3/share/icons/*/*/*/kcmsystem.*
-/opt/kde3/share/icons/*/*/*/personal.*
+%verify(not mode) %attr(4755,root,shadow) %{_tde_bindir}/kcheckpass
+%{_tde_iconsdir}/*/*/*/knotify.*
+%{_tde_iconsdir}/*/*/*/kscreensaver.*
+%{_tde_iconsdir}/*/*/*/style.*
+%{_tde_iconsdir}/*/*/*/looknfeel.*
+%{_tde_iconsdir}/*/*/*/iconthemes.*
+%{_tde_iconsdir}/*/*/*/keyboard.*
+%{_tde_iconsdir}/*/*/*/kcmsound.*
+%{_tde_iconsdir}/*/*/*/energy.*
+%{_tde_iconsdir}/*/*/*/kcmkwm.*
+%{_tde_iconsdir}/*/*/*/hwinfo.*
+%{_tde_iconsdir}/*/*/*/date.*
+%{_tde_iconsdir}/*/*/*/filetypes.*
+%{_tde_iconsdir}/*/*/*/kcmsystem.*
+%{_tde_iconsdir}/*/*/*/personal.*
%changelog
diff --git a/opensuse/core/tdelibs/tdelibs.spec b/opensuse/core/tdelibs/tdelibs.spec
index 4e238d06f..2576ad4d8 100644
--- a/opensuse/core/tdelibs/tdelibs.spec
+++ b/opensuse/core/tdelibs/tdelibs.spec
@@ -26,7 +26,7 @@ BuildRequires: db-devel libacl-devel libattr-devel unsermake update-desktop-fil
BuildRequires: unzip
BuildRequires: avahi-compat-mDNSResponder-devel fdupes libbz2-devel libjasper-devel
BuildRequires: libdrm-devel tde-filesystem cmake
-URL: http://www.trinitydesktop.org
+URL: http://www.trinitydesktop.org/
License: BSD3c(or similar) ; GPLv2+ ; LGPLv2.1+
Group: System/GUI/TDE
BuildRoot: %{_tmppath}/%{name}-%{version}-build
@@ -40,6 +40,7 @@ Requires: openssl tdelibs-default-style
Requires: hicolor-icon-theme
Recommends: ispell enscript
Requires: sudo
+Requires: libtqt4
Source0: kdelibs-%{version}.tar.bz2
Source3: baselibs.conf
Source4: api_docu_description
@@ -366,7 +367,8 @@ CXXFLAGS="$CXXFLAGS -fno-strict-aliasing"
export PATH=/usr/lib/mit/bin:$PATH
# fast-malloc is not needed anymore
-%cmake_tde -d build \
+%cmake_tde -d build -- \
+ -DCMAKE_SKIP_RPATH=OFF \
-DKDE_MALLOC_FULL=OFF \
-DKDE_MALLOC=OFF \
-DKDE_DISTRIBUTION="$DISTRI" \