rev 9365 - trunk/packages/qt-x11-free/debian/patches

Fathi Boudra fabo at alioth.debian.org
Sat Feb 9 10:43:48 UTC 2008


Author: fabo
Date: 2008-02-09 10:43:48 +0000 (Sat, 09 Feb 2008)
New Revision: 9365

Added:
   trunk/packages/qt-x11-free/debian/patches/02_various_fixes.diff
   trunk/packages/qt-x11-free/debian/patches/03_qt_fontlist_fix.diff
   trunk/packages/qt-x11-free/debian/patches/04_qsql_odbc.diff
   trunk/packages/qt-x11-free/debian/patches/05_qvfb_cpp.diff
   trunk/packages/qt-x11-free/debian/patches/06_disable_rpath.diff
   trunk/packages/qt-x11-free/debian/patches/08_thread_default.diff
   trunk/packages/qt-x11-free/debian/patches/09_amd64_lib64.diff
   trunk/packages/qt-x11-free/debian/patches/10_arm_gcc4.diff
   trunk/packages/qt-x11-free/debian/patches/11_qt_rubberband.diff
   trunk/packages/qt-x11-free/debian/patches/12_disable_includehints.diff
   trunk/packages/qt-x11-free/debian/patches/13_qt335_qlistview_crash_fix.diff
   trunk/packages/qt-x11-free/debian/patches/15_unify_declarations_glibc.diff
   trunk/packages/qt-x11-free/debian/patches/16_fix_opengl_check.diff
   trunk/packages/qt-x11-free/debian/patches/17_qlistview_crash_iterator.diff
   trunk/packages/qt-x11-free/debian/patches/18_fix_makeqpf_qembed.diff
   trunk/packages/qt-x11-free/debian/patches/19_qfontdatabase_hack.diff
   trunk/packages/qt-x11-free/debian/patches/20_hppa_FTBFS.diff
   trunk/packages/qt-x11-free/debian/patches/22_fix_ftbfs_amd64.diff
   trunk/packages/qt-x11-free/debian/patches/32_gtkstyle.diff
   trunk/packages/qt-x11-free/debian/patches/45_immodule_unified.diff
   trunk/packages/qt-x11-free/debian/patches/46_immodule_keyrelease_fix.diff
   trunk/packages/qt-x11-free/debian/patches/47_immodule_nodebug_fix.diff
   trunk/packages/qt-x11-free/debian/patches/48_immodule_xim_fix.diff
   trunk/packages/qt-x11-free/debian/patches/60_gnu_hurd_support.diff
   trunk/packages/qt-x11-free/debian/patches/61_fcfontmatch_fontwidth_fix.diff
   trunk/packages/qt-x11-free/debian/patches/63_qmake_hurd.diff
   trunk/packages/qt-x11-free/debian/patches/65_gcc-4.2_qbuttons.h-fix.diff
   trunk/packages/qt-x11-free/debian/patches/66_gcc-4.3_compile-fix.diff
   trunk/packages/qt-x11-free/debian/patches/68_use-lfbclient_not-lgds.diff
   trunk/packages/qt-x11-free/debian/patches/70_bad_typecast_amd64.diff
   trunk/packages/qt-x11-free/debian/patches/72_dont_trust_uname-m_use_dpkg-arch_instead.diff
   trunk/packages/qt-x11-free/debian/patches/90_armeabi.diff
Log:
The new shiny replacement ;)


Added: trunk/packages/qt-x11-free/debian/patches/02_various_fixes.diff
===================================================================
--- trunk/packages/qt-x11-free/debian/patches/02_various_fixes.diff	                        (rev 0)
+++ trunk/packages/qt-x11-free/debian/patches/02_various_fixes.diff	2008-02-09 10:43:48 UTC (rev 9365)
@@ -0,0 +1,92 @@
+author: Martin Loschwitz <madkiss at madkiss.org>
+
+Fixes various smaller mistakes
+
+--- a/tools/designer/integration/designer.el
++++ b/tools/designer/integration/designer.el
+@@ -1,9 +1,9 @@
+-(defvar designer-exec (concat (getenv "QTDIR") "/bin/designer"))
++(defvar designer-exec "/usr/bin/designer")
+ 
+ (defun designer-open-ui-file ()
+   (interactive)
+   (defvar procname "designer")
+-  (start-process procname nil designer-exec "-style" "windows" "-client" buffer-file-name)
++  (start-process procname nil designer-exec "-client" buffer-file-name)
+ )
+ 
+ (defun designer-create-ui-file (&optional arg)
+--- a/tools/tools.pro
++++ b/tools/tools.pro
+@@ -6,7 +6,12 @@
+ 		      designer \
+ 		      assistant \
+ 		      linguist
+-    unix:SUBDIRS	+= qtconfig
++    unix:SUBDIRS	+= qtconfig \
++			mergetr \
++			qconfig \
++			makeqpf \
++			msg2qm \
++			qembed
+ }
+ 
+ CONFIG+=ordered
+--- a/tools/designer/designer.pro
++++ b/tools/designer/designer.pro
+@@ -5,7 +5,9 @@
+ SUBDIRS	=  uic \
+ 	   uilib \
+ 	   designer \
+-	   app
++	   app \
++	   tools/createcw \
++	   tools/conv2ui
+ 
+ dll:SUBDIRS *=  editor plugins
+ shared:SUBDIRS *=  editor plugins
+--- a/tools/designer/tools/createcw/createcw.pro
++++ b/tools/designer/tools/createcw/createcw.pro
+@@ -3,3 +3,6 @@
+ HEADERS		=
+ SOURCES		= main.cpp
+ TARGET		= createcw
++
++target.path = $$bins.path
++INSTALLS += target
+--- a/tools/makeqpf/makeqpf.pro
++++ b/tools/makeqpf/makeqpf.pro
+@@ -5,3 +5,6 @@
+ INTERFACES	=
+ TARGET		= makeqpf
+ REQUIRES=full-config nocrosscompiler
++
++target.path = $$bins.path
++INSTALLS += target
+--- a/tools/mergetr/mergetr.pro
++++ b/tools/mergetr/mergetr.pro
+@@ -4,3 +4,6 @@
+ SOURCES		= mergetr.cpp
+ TARGET		= mergetr
+ REQUIRES=full-config nocrosscompiler
++
++target.path = $$bins.path
++INSTALLS += target
+--- a/tools/msg2qm/msg2qm.pro
++++ b/tools/msg2qm/msg2qm.pro
+@@ -5,3 +5,6 @@
+ SOURCES		= msg2qm.cpp
+ TARGET		= msg2qm
+ REQUIRES=full-config nocrosscompiler
++
++target.path = $$bins.path
++INSTALLS += target
+--- a/tools/qembed/qembed.pro
++++ b/tools/qembed/qembed.pro
+@@ -2,3 +2,6 @@
+ SOURCES = qembed.cpp
+ TARGET  = qembed
+ REQUIRES=full-config nocrosscompiler
++
++target.path = $$bins.path
++INSTALLS += target

Added: trunk/packages/qt-x11-free/debian/patches/03_qt_fontlist_fix.diff
===================================================================
--- trunk/packages/qt-x11-free/debian/patches/03_qt_fontlist_fix.diff	                        (rev 0)
+++ trunk/packages/qt-x11-free/debian/patches/03_qt_fontlist_fix.diff	2008-02-09 10:43:48 UTC (rev 9365)
@@ -0,0 +1,29 @@
+author: Martin Loschwitz <madkiss at debian.org>
+
+Fix fonts list to show only the fonts we can use
+
+--- a/src/kernel/qfontdatabase_x11.cpp
++++ b/src/kernel/qfontdatabase_x11.cpp
+@@ -721,6 +721,9 @@
+     if ( fontFamily && fontFamily->xlfdLoaded )
+ 	return;
+ 
++#ifdef QT_XFT2
++    if ( !qt_has_xft ) {
++#endif // QT_XFT2
+     int fontCount;
+     // force the X server to give us XLFDs
+     QCString xlfd_pattern = "-*-";
+@@ -822,8 +825,11 @@
+     }
+ 
+     XFreeFontNames( fontList );
+-}
+ 
++#ifdef QT_XFT2
++    }
++#endif // QT_XFT2
++}
+ 
+ #ifndef QT_NO_XFTFREETYPE
+ static int getXftWeight(int xftweight)

Added: trunk/packages/qt-x11-free/debian/patches/04_qsql_odbc.diff
===================================================================
--- trunk/packages/qt-x11-free/debian/patches/04_qsql_odbc.diff	                        (rev 0)
+++ trunk/packages/qt-x11-free/debian/patches/04_qsql_odbc.diff	2008-02-09 10:43:48 UTC (rev 9365)
@@ -0,0 +1,54 @@
+author: Martin Loschwitz <madkiss at madkiss.org>
+
+Make the package build with libiodbc2-dev instead of unixodbc-dev
+
+--- a/plugins/src/sqldrivers/odbc/odbc.pro
++++ b/plugins/src/sqldrivers/odbc/odbc.pro
+@@ -17,7 +17,7 @@
+ unix {
+ 	OBJECTS_DIR	= .obj
+ 	!contains( LIBS, .*odbc.* ) {
+-	    LIBS 	*= -lodbc
++	    LIBS 	*= -liodbc
+ 	}
+ }
+ 
+--- /dev/null
++++ b/src/sql/drivers/odbc/debian_qsql_odbc.h
+@@ -0,0 +1,10 @@
++#ifdef UNICODE
++typedef SQLWCHAR        SQLTCHAR;
++#else
++typedef SQLCHAR         SQLTCHAR;
++#endif
++
++#define SQL_WCHAR              (-8)
++#define SQL_WVARCHAR           (-9)
++#define SQL_WLONGVARCHAR       (-10)
++#define SQL_C_WCHAR            SQL_WCHAR
+--- a/src/sql/drivers/odbc/qsql_odbc.h
++++ b/src/sql/drivers/odbc/qsql_odbc.h
+@@ -78,11 +78,8 @@
+ #  undef _MSC_VER
+ #endif
+ 
+-#ifndef Q_ODBC_VERSION_2
+-#include <sqlucode.h>
+-#endif
+-
+ #include <sqlext.h>
++#include "debian_qsql_odbc.h"
+ 
+ class QODBCPrivate;
+ class QODBCDriver;
+--- a/src/sql/qt_sql.pri
++++ b/src/sql/qt_sql.pri
+@@ -116,7 +116,7 @@
+ 
+ 		unix {
+ 			!contains( LIBS, .*odbc.* ) {
+-				LIBS        *= -lodbc
++				LIBS        *= -liodbc
+ 			}
+ 		}
+ 

Added: trunk/packages/qt-x11-free/debian/patches/05_qvfb_cpp.diff
===================================================================
--- trunk/packages/qt-x11-free/debian/patches/05_qvfb_cpp.diff	                        (rev 0)
+++ trunk/packages/qt-x11-free/debian/patches/05_qvfb_cpp.diff	2008-02-09 10:43:48 UTC (rev 9365)
@@ -0,0 +1,19 @@
+--- a/tools/qvfb/pda.skin
++++ b/tools/qvfb/pda.skin
+@@ -1,4 +1,4 @@
+-pda_up.png pda_down.png
++/usr/share/qvfb/pda_up.png /usr/share/qvfb/pda_down.png
+ 57 81
+ 240 320
+ 0.5
+--- a/tools/qvfb/qvfb.cpp
++++ b/tools/qvfb/qvfb.cpp
+@@ -94,7 +94,7 @@
+ 	bool vis = isVisible();
+ 	if ( vis ) hide();
+ 	menuBar()->hide();
+-	Skin *skin = new Skin( this, skin_name, w, h );
++	Skin *skin = new Skin( this, QString::fromLatin1( "/etc/qt3/qvfb/" ) + skin_name, w, h );
+ 	view = new QVFbView( display_id, w, h, d, skin );
+ 	skin->setView( view );
+ 	view->setMargin( 0 );

Added: trunk/packages/qt-x11-free/debian/patches/06_disable_rpath.diff
===================================================================
--- trunk/packages/qt-x11-free/debian/patches/06_disable_rpath.diff	                        (rev 0)
+++ trunk/packages/qt-x11-free/debian/patches/06_disable_rpath.diff	2008-02-09 10:43:48 UTC (rev 9365)
@@ -0,0 +1,26 @@
+author: Martin Loschwitz <madkiss at madkiss.org>
+
+Disables the rpath settings in qmake.conf
+
+--- a/mkspecs/linux-g++/qmake.conf
++++ b/mkspecs/linux-g++/qmake.conf
+@@ -55,7 +55,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
+--- a/mkspecs/linux-g++-64/qmake.conf
++++ b/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

Added: trunk/packages/qt-x11-free/debian/patches/08_thread_default.diff
===================================================================
--- trunk/packages/qt-x11-free/debian/patches/08_thread_default.diff	                        (rev 0)
+++ trunk/packages/qt-x11-free/debian/patches/08_thread_default.diff	2008-02-09 10:43:48 UTC (rev 9365)
@@ -0,0 +1,11 @@
+--- a/mkspecs/linux-g++/qmake.conf
++++ b/mkspecs/linux-g++/qmake.conf
+@@ -5,7 +5,7 @@
+ 
+ MAKEFILE_GENERATOR	= UNIX
+ TEMPLATE		= app
+-CONFIG			+= qt warn_on release incremental link_prl
++CONFIG			+= qt warn_on release incremental link_prl thread
+ QMAKE_INCREMENTAL_STYLE = sublib
+ 
+ QMAKE_CC		= gcc

Added: trunk/packages/qt-x11-free/debian/patches/09_amd64_lib64.diff
===================================================================
--- trunk/packages/qt-x11-free/debian/patches/09_amd64_lib64.diff	                        (rev 0)
+++ trunk/packages/qt-x11-free/debian/patches/09_amd64_lib64.diff	2008-02-09 10:43:48 UTC (rev 9365)
@@ -0,0 +1,16 @@
+--- a/mkspecs/linux-g++-64/qmake.conf
++++ b/mkspecs/linux-g++-64/qmake.conf
+@@ -43,11 +43,11 @@
+ QMAKE_INCDIR		=
+ QMAKE_LIBDIR		=
+ QMAKE_INCDIR_X11	= /usr/X11R6/include
+-QMAKE_LIBDIR_X11	= /usr/X11R6/lib64
++QMAKE_LIBDIR_X11	= /usr/X11R6/lib
+ QMAKE_INCDIR_QT		= $(QTDIR)/include
+ QMAKE_LIBDIR_QT		= $(QTDIR)/lib
+ QMAKE_INCDIR_OPENGL	= /usr/X11R6/include
+-QMAKE_LIBDIR_OPENGL	= /usr/X11R6/lib64
++QMAKE_LIBDIR_OPENGL	= /usr/X11R6/lib
+ 
+ QMAKE_LINK		= g++
+ QMAKE_LINK_SHLIB	= g++

Added: trunk/packages/qt-x11-free/debian/patches/10_arm_gcc4.diff
===================================================================
--- trunk/packages/qt-x11-free/debian/patches/10_arm_gcc4.diff	                        (rev 0)
+++ trunk/packages/qt-x11-free/debian/patches/10_arm_gcc4.diff	2008-02-09 10:43:48 UTC (rev 9365)
@@ -0,0 +1,22 @@
+--- a/src/tools/qglobal.h
++++ b/src/tools/qglobal.h
+@@ -320,7 +320,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
+--- a/src/tools/qstring.h
++++ b/src/tools/qstring.h
+@@ -197,7 +197,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

Added: trunk/packages/qt-x11-free/debian/patches/11_qt_rubberband.diff
===================================================================
--- trunk/packages/qt-x11-free/debian/patches/11_qt_rubberband.diff	                        (rev 0)
+++ trunk/packages/qt-x11-free/debian/patches/11_qt_rubberband.diff	2008-02-09 10:43:48 UTC (rev 9365)
@@ -0,0 +1,339 @@
+--- a/src/iconview/qiconview.cpp
++++ b/src/iconview/qiconview.cpp
+@@ -264,6 +264,7 @@
+ 
+     QIconViewToolTip *toolTip;
+     QPixmapCache maskCache;
++    QPixmap *backrubber;    
+     QPtrDict<QIconViewItem> selectedItems;
+ 
+     struct ItemContainer {
+@@ -1998,14 +1999,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 )
+@@ -2063,10 +2077,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 )
+@@ -2082,31 +2105,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()));
+-    }
+ }
+ 
+ /*!
+@@ -2804,6 +2809,7 @@
+     d->renamingItem = 0;
+     d->drawActiveSelection = TRUE;
+     d->drawDragShapes = FALSE;
++    d->backrubber = 0;    
+ 
+     connect( d->adjustTimer, SIGNAL( timeout() ),
+ 	     this, SLOT( adjustItems() ) );
+@@ -3288,7 +3294,7 @@
+ 
+ void QIconView::doAutoScroll()
+ {
+-    QRect oldRubber = QRect( *d->rubber );
++    QRect oldRubber = *d->rubber;
+ 
+     QPoint vp = viewport()->mapFromGlobal( QCursor::pos() );
+     QPoint pos = viewportToContents( vp );
+@@ -3305,7 +3311,6 @@
+     bool block = signalsBlocked();
+ 
+     QRect rr;
+-    QRegion region( 0, 0, visibleWidth(), visibleHeight() );
+ 
+     blockSignals( TRUE );
+     viewport()->setUpdatesEnabled( FALSE );
+@@ -3331,9 +3336,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 );
+@@ -3350,42 +3352,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 ) &&
+@@ -3412,9 +3449,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;
+@@ -3488,8 +3523,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();
++    }
+ }
+ 
+ /*!
+@@ -4388,17 +4431,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() ) );
+@@ -4583,21 +4624,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 )
+@@ -5357,9 +5394,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()) );
+ }
+ 
+ /*!

Added: trunk/packages/qt-x11-free/debian/patches/12_disable_includehints.diff
===================================================================
--- trunk/packages/qt-x11-free/debian/patches/12_disable_includehints.diff	                        (rev 0)
+++ trunk/packages/qt-x11-free/debian/patches/12_disable_includehints.diff	2008-02-09 10:43:48 UTC (rev 9365)
@@ -0,0 +1,20 @@
+--- a/tools/designer/uic/form.cpp
++++ b/tools/designer/uic/form.cpp
+@@ -733,16 +733,7 @@
+ 		}
+ 		n2 = n2.nextSibling().toElement();
+ 	    }
+-        } else if ( n.tagName() == "includehints" ) {
+-            QDomElement n2 = n.firstChild().toElement();
+-            while ( !n2.isNull() ) {
+-                if ( n2.tagName() == "includehint" ) {
+-                    QString file = n2.firstChild().toText().data();
+-                    localIncludes += file;
+-                }
+-                n2 = n2.nextSibling().toElement();
+-            }
+-        }
++	}
+     }
+ 
+     // additional includes (local or global) and forward declaractions

Added: trunk/packages/qt-x11-free/debian/patches/13_qt335_qlistview_crash_fix.diff
===================================================================
--- trunk/packages/qt-x11-free/debian/patches/13_qt335_qlistview_crash_fix.diff	                        (rev 0)
+++ trunk/packages/qt-x11-free/debian/patches/13_qt335_qlistview_crash_fix.diff	2008-02-09 10:43:48 UTC (rev 9365)
@@ -0,0 +1,10 @@
+--- a/src/widgets/qlistview.cpp
++++ b/src/widgets/qlistview.cpp
+@@ -4563,6 +4563,7 @@
+     }
+     emitClicked = emitClicked && d->pressedItem == i;
+     d->pressedItem = 0;
++    d->highlighted = 0;
+ 
+     if ( emitClicked ) {
+ 	if ( !i || ( i && i->isEnabled() ) ) {

Added: trunk/packages/qt-x11-free/debian/patches/15_unify_declarations_glibc.diff
===================================================================
--- trunk/packages/qt-x11-free/debian/patches/15_unify_declarations_glibc.diff	                        (rev 0)
+++ trunk/packages/qt-x11-free/debian/patches/15_unify_declarations_glibc.diff	2008-02-09 10:43:48 UTC (rev 9365)
@@ -0,0 +1,74 @@
+Robert Millan <rmh at debian.org>
+
+unify declarations for Glibc-based systems in upstream files
+
+--- a/configure
++++ b/configure
+@@ -1324,7 +1324,7 @@
+ 	    XPLATFORM="qws/solaris-$CFG_EMBEDDED-g++"
+ 	fi
+ 	;;
+-    Linux:*)
++    Linux:*|GNU:*|GNU/*:*)
+ 	if [ -z "$PLATFORM" ]; then
+ 	    case "$UNAME_MACHINE" in
+ 	    *86)
+@@ -1379,9 +1379,6 @@
+      QNX:*)
+ 	PLATFORM=qnx-g++
+ 	;;
+-     GNU:*)
+-	PLATFORM=hurd-g++
+-	;;
+      dgux:*)
+ 	PLATFORM=dgux-g++
+ 	;;
+@@ -1428,7 +1425,7 @@
+ 	    - Also available for Tru64: tru64-g++
+ 	"
+ 	;;
+-     Linux:*)
++     Linux:*|GNU:*|GNU/*:*)
+ 	PLATFORM=linux-g++
+ 	PLATFORM_NOTES="
+ 	    - Also available for Linux: linux-kcc linux-icc linux-cxx
+--- a/doc/html/qglobal-h.html
++++ b/doc/html/qglobal-h.html
+@@ -151,7 +151,7 @@
+ #  define Q_OS_ULTRIX
+ #elif defined(sinix)
+ #  define Q_OS_RELIANT
+-#elif defined(__linux__) || defined(__linux)
++#elif defined(__linux__) || defined(__linux) || defined(__GNU__) || defined(__GLIBC__)
+ #  define Q_OS_LINUX
+ #elif defined(__FreeBSD__) || defined(__DragonFly__)
+ #  define Q_OS_FREEBSD
+@@ -173,8 +173,6 @@
+ #  define Q_OS_AIX
+ #elif defined(__Lynx__)
+ #  define Q_OS_LYNX
+-#elif defined(__GNU_HURD__)
+-#  define Q_OS_HURD
+ #elif defined(__DGUX__)
+ #  define Q_OS_DGUX
+ #elif defined(__QNXNTO__)
+--- a/src/tools/qglobal.h
++++ b/src/tools/qglobal.h
+@@ -115,7 +115,7 @@
+ #  define Q_OS_ULTRIX
+ #elif defined(sinix)
+ #  define Q_OS_RELIANT
+-#elif defined(__linux__) || defined(__linux)
++#elif defined(__linux__) || defined(__linux) || defined(__GNU__) || defined(__GLIBC__)
+ #  define Q_OS_LINUX
+ #elif defined(__FreeBSD__) || defined(__DragonFly__)
+ #  define Q_OS_FREEBSD
+@@ -137,8 +137,6 @@
+ #  define Q_OS_AIX
+ #elif defined(__Lynx__)
+ #  define Q_OS_LYNX
+-#elif defined(__GNU_HURD__)
+-#  define Q_OS_HURD
+ #elif defined(__DGUX__)
+ #  define Q_OS_DGUX
+ #elif defined(__QNXNTO__)

Added: trunk/packages/qt-x11-free/debian/patches/16_fix_opengl_check.diff
===================================================================
--- trunk/packages/qt-x11-free/debian/patches/16_fix_opengl_check.diff	                        (rev 0)
+++ trunk/packages/qt-x11-free/debian/patches/16_fix_opengl_check.diff	2008-02-09 10:43:48 UTC (rev 9365)
@@ -0,0 +1,30 @@
+--- a/src/opengl/qgl_x11.cpp
++++ b/src/opengl/qgl_x11.cpp
+@@ -128,7 +128,7 @@
+     if (gl_syms_resolved)
+ 	return TRUE;
+ 
+-    QLibrary gl("GL");
++    QLibrary gl("GL.so.1");
+     gl.setAutoUnload(FALSE);
+ 
+     qt_glCallLists = (_glCallLists) gl.resolve("glCallLists");
+@@ -286,7 +286,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
+--- a/src/tools/qlibrary.cpp
++++ b/src/tools/qlibrary.cpp
+@@ -429,6 +429,7 @@
+ 	    } else {
+ 		tmpfilename = QString( "lib%1" ).arg( filename );
+ 	    }
++	    if ( !filename.contains(".so") )
+ 	    tmpfilename += filter;
+ 	    if(QFile::exists(tmpfilename) || it == filters.end()) {
+ 		filename = tmpfilename;

Added: trunk/packages/qt-x11-free/debian/patches/17_qlistview_crash_iterator.diff
===================================================================
--- trunk/packages/qt-x11-free/debian/patches/17_qlistview_crash_iterator.diff	                        (rev 0)
+++ trunk/packages/qt-x11-free/debian/patches/17_qlistview_crash_iterator.diff	2008-02-09 10:43:48 UTC (rev 9365)
@@ -0,0 +1,37 @@
+--- a/src/widgets/qlistview.cpp
++++ b/src/widgets/qlistview.cpp
+@@ -7577,21 +7577,21 @@
+ 
+ QListViewItemIterator &QListViewItemIterator::operator++()
+ {
+-    if ( !curr )
+-	return *this;
++    do {
++        if ( !curr )
++	    return *this;
+ 
+-    QListViewItem *item = curr->firstChild();
+-    if ( !item ) {
+-	while ( (item = curr->nextSibling()) == 0  ) {
+-	    curr = curr->parent();
+-	    if ( curr == 0 )
+-		break;
++	QListViewItem *item = curr->firstChild();
++	if ( !item ) {
++	    while ( (item = curr->nextSibling()) == 0  ) {
++		curr = curr->parent();
++		if ( curr == 0 )
++		    break;
++	    }
+ 	}
+-    }
+-    curr = item;
+-    // if the next one doesn't match the flags we try one more ahead
+-    if ( curr && !matchesFlags( curr ) )
+-	++( *this );
++	curr = item;
++	// if the next one doesn't match the flags we try one more ahead
++    } while  ( curr && !matchesFlags( curr ) );
+     return *this;
+ }
+ 

Added: trunk/packages/qt-x11-free/debian/patches/18_fix_makeqpf_qembed.diff
===================================================================
--- trunk/packages/qt-x11-free/debian/patches/18_fix_makeqpf_qembed.diff	                        (rev 0)
+++ trunk/packages/qt-x11-free/debian/patches/18_fix_makeqpf_qembed.diff	2008-02-09 10:43:48 UTC (rev 9365)
@@ -0,0 +1,24 @@
+author: Martin Loschwitz <madkiss at madkiss.org>
+
+Fix makeqpf by make it not use stuff defined in Qt embedded
+
+--- a/tools/makeqpf/main.cpp
++++ b/tools/makeqpf/main.cpp
+@@ -137,8 +137,6 @@
+     }
+ };
+ 
+-extern QString qws_topdir();
+-
+ class MakeQPF : public QMainWindow
+ {
+     Q_OBJECT
+@@ -152,7 +150,7 @@
+ 	view->addColumn("Weight");
+ 	view->addColumn("Style");
+ 	setCentralWidget(view);
+-	QString fontdir = qws_topdir() + "/lib/fonts";
++	QString fontdir = QString(getenv("QTDIR")) + "/lib/fonts";
+ 	readFontDir(fontdir);
+ 
+ 	connect(view,SIGNAL(selectionChanged(QListViewItem*)),

Added: trunk/packages/qt-x11-free/debian/patches/19_qfontdatabase_hack.diff
===================================================================
--- trunk/packages/qt-x11-free/debian/patches/19_qfontdatabase_hack.diff	                        (rev 0)
+++ trunk/packages/qt-x11-free/debian/patches/19_qfontdatabase_hack.diff	2008-02-09 10:43:48 UTC (rev 9365)
@@ -0,0 +1,13 @@
+--- a/src/kernel/qfontdatabase.cpp
++++ b/src/kernel/qfontdatabase.cpp
+@@ -689,6 +689,10 @@
+     }
+ 
+     FM_DEBUG( "          best style has distance 0x%x", dist );
++    if (!foundry->count) {
++        QtFontStyle *temp = NULL;
++        return temp;
++    }
+     return foundry->styles[best];
+ }
+ 

Added: trunk/packages/qt-x11-free/debian/patches/20_hppa_FTBFS.diff
===================================================================
--- trunk/packages/qt-x11-free/debian/patches/20_hppa_FTBFS.diff	                        (rev 0)
+++ trunk/packages/qt-x11-free/debian/patches/20_hppa_FTBFS.diff	2008-02-09 10:43:48 UTC (rev 9365)
@@ -0,0 +1,29 @@
+--- a/src/tools/qlocale.cpp
++++ b/src/tools/qlocale.cpp
+@@ -125,13 +125,24 @@
+ #endif
+ 
+ // We can't rely on -NAN, since all operations on a NAN should return a NAN.
++static double be_neg_nan; 
++static double le_neg_nan;
+ static const unsigned char be_neg_nan_bytes[] = { 0xff, 0xf8, 0, 0, 0, 0, 0, 0 };
+ static const unsigned char le_neg_nan_bytes[] = { 0, 0, 0, 0, 0, 0, 0xf8, 0xff };
++static bool neg_nan_init = false;
++
+ static inline double negNan()
+ {
++    if (!neg_nan_init)
++    {
++        memcpy(&be_neg_nan,be_neg_nan_bytes,sizeof(be_neg_nan_bytes));
++        memcpy(&le_neg_nan,le_neg_nan_bytes,sizeof(le_neg_nan_bytes));
++        neg_nan_init = true;
++    }
+     return (ByteOrder == BigEndian ?
+-            *((const double *) be_neg_nan_bytes) :
+-            *((const double *) le_neg_nan_bytes));
++            be_neg_nan : 
++            le_neg_nan);
++            
+ }
+ 
+ // Sizes as defined by the ISO C99 standard - fallback

Added: trunk/packages/qt-x11-free/debian/patches/22_fix_ftbfs_amd64.diff
===================================================================
--- trunk/packages/qt-x11-free/debian/patches/22_fix_ftbfs_amd64.diff	                        (rev 0)
+++ trunk/packages/qt-x11-free/debian/patches/22_fix_ftbfs_amd64.diff	2008-02-09 10:43:48 UTC (rev 9365)
@@ -0,0 +1,32 @@
+--- a/tools/qvfb/qvfbview.cpp
++++ b/tools/qvfb/qvfbview.cpp
+@@ -128,7 +128,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;
+--- a/examples/demo/opengl/fbm.c
++++ b/examples/demo/opengl/fbm.c
+@@ -50,6 +50,8 @@
+ 	r1 = r0 - 1.;
+ #define at3(rx,ry,rz) ( rx * q[0] + ry * q[1] + rz * q[2] )
+ 
++static float noise3(float vec[3]);
++
+ /* Fractional Brownian Motion function */
+ 
+ double fBm( Vector point, double H, double lacunarity, double octaves,
+--- a/examples/demo/opengl/fbm.h
++++ b/examples/demo/opengl/fbm.h
+@@ -26,7 +26,6 @@
+     double z;
+ } Vector;
+     
+-float noise3(float vec[]);
+ double fBm( Vector point, double H, double lacunarity, double octaves, 
+ 	    int init );
+ #endif

Added: trunk/packages/qt-x11-free/debian/patches/32_gtkstyle.diff
===================================================================
--- trunk/packages/qt-x11-free/debian/patches/32_gtkstyle.diff	                        (rev 0)
+++ trunk/packages/qt-x11-free/debian/patches/32_gtkstyle.diff	2008-02-09 10:43:48 UTC (rev 9365)
@@ -0,0 +1,114 @@
+--- a/src/widgets/qmenubar.cpp
++++ b/src/widgets/qmenubar.cpp
+@@ -231,6 +231,10 @@
+ static const int motifItemHMargin	= 5;	// menu item hor text margin
+ static const int motifItemVMargin	= 4;	// menu item ver text margin
+ 
++// The others are 0
++static const int gtkItemHMargin = 8;
++static const int gtkItemVMargin = 8;
++
+ /*
+ 
+ +-----------------------------
+@@ -295,7 +299,14 @@
+     setFrameStyle( QFrame::MenuBarPanel | QFrame::Raised );
+ 
+     QFontMetrics fm = fontMetrics();
+-    int h = 2*motifBarVMargin + fm.height() + motifItemVMargin + 2*frameWidth() + 2*motifItemFrame;
++
++    int h;
++    int gs = style().styleHint(QStyle::SH_GUIStyle);
++    if (gs == GtkStyle) {
++        h = fm.height() + gtkItemVMargin;
++    } else {
++        h = 2*motifBarVMargin + fm.height() + motifItemVMargin + 2*frameWidth() + 2*motifItemFrame;
++    }
+ 
+     setGeometry( 0, 0, width(), h );
+ 
+@@ -949,12 +960,19 @@
+ 	    h = QMAX( mi->pixmap()->height() + 4, QApplication::globalStrut().height() );
+ 	} else if ( !mi->text().isNull() ) {	// text item
+ 	    QString s = mi->text();
+-	    w = fm.boundingRect( s ).width()
+-		+ 2*motifItemHMargin;
++        if ( gs == GtkStyle ) {
++            w = fm.boundingRect( s ).width() + 2*gtkItemHMargin;
++        } else {
++	        w = fm.boundingRect( s ).width() + 2*motifItemHMargin;
++        }
+ 	    w -= s.contains('&')*fm.width('&');
+ 	    w += s.contains("&&")*fm.width('&');
+ 	    w = QMAX( w, QApplication::globalStrut().width() );
+-	    h = QMAX( fm.height() + motifItemVMargin, QApplication::globalStrut().height() );
++        if (gs == GtkStyle ) {
++            h = QMAX( fm.height() + gtkItemVMargin, QApplication::globalStrut().height() );
++        } else {
++	        h = QMAX( fm.height() + motifItemVMargin, QApplication::globalStrut().height() );
++        }
+ 	} else if ( mi->isSeparator() ) {	// separator item
+ 	    if ( style().styleHint(QStyle::SH_GUIStyle) == MotifStyle )
+ 		separator = i; //### only motif?
+--- a/src/widgets/qpopupmenu.cpp
++++ b/src/widgets/qpopupmenu.cpp
+@@ -68,6 +68,8 @@
+ static const int motifArrowHMargin	= 6;	// arrow horizontal margin
+ static const int motifArrowVMargin	= 2;	// arrow vertical margin
+ 
++static const int gtkArrowHMargin	= 0;	// arrow horizontal margin
++static const int gtkArrowVMargin	= 0;	// arrow vertical margin
+ 
+ /*
+ 
+@@ -2348,8 +2350,18 @@
+     QRect r( itemGeometry( actItem ) );
+     QPoint p;
+     QSize ps = popup->sizeHint();
++    // GUI Style
++    int gs = style().styleHint(QStyle::SH_GUIStyle);
++    int arrowHMargin, arrowVMargin;
++    if (gs == GtkStyle) {
++        arrowHMargin = gtkArrowHMargin;
++        arrowVMargin = gtkArrowVMargin;
++    } else {
++        arrowHMargin = motifArrowHMargin;
++        arrowVMargin = motifArrowVMargin;
++    }
+     if( QApplication::reverseLayout() ) {
+-	p = QPoint( r.left() + motifArrowHMargin - ps.width(), r.top() + motifArrowVMargin );
++	p = QPoint( r.left() + arrowHMargin - ps.width(), r.top() + arrowVMargin );
+ 	p = mapToGlobal( p );
+ 
+ 	bool right = FALSE;
+@@ -2362,7 +2374,7 @@
+ 	if ( right )
+ 	    p.setX( mapToGlobal( r.topRight() ).x() );
+     } else {
+-	p = QPoint( r.right() - motifArrowHMargin, r.top() + motifArrowVMargin );
++	p = QPoint( r.right() - arrowHMargin, r.top() + arrowVMargin );
+ 	p = mapToGlobal( p );
+ 
+ 	bool left = FALSE;
+--- a/src/kernel/qnamespace.h
++++ b/src/kernel/qnamespace.h
+@@ -297,7 +297,8 @@
+ #ifdef QT_NO_COMPAT
+     enum GUIStyle {
+ 	WindowsStyle = 1,     // ### Qt 4.0: either remove the obsolete enums or clean up compat vs.
+-	MotifStyle = 4        // ### QT_NO_COMPAT by reordering or combination into one enum.
++	MotifStyle = 4,       // ### QT_NO_COMPAT by reordering or combination into one enum.
++    GtkStyle = 6          // Gtk compability mode
+     };
+ #else
+     enum GUIStyle {
+@@ -305,7 +306,8 @@
+ 	WindowsStyle,
+ 	Win3Style, // OBSOLETE
+ 	PMStyle, // OBSOLETE
+-	MotifStyle
++	MotifStyle,
++    GtkStyle = 6          // Gtk compability mode
+     };
+ #endif
+ 

Added: trunk/packages/qt-x11-free/debian/patches/45_immodule_unified.diff
===================================================================
--- trunk/packages/qt-x11-free/debian/patches/45_immodule_unified.diff	                        (rev 0)
+++ trunk/packages/qt-x11-free/debian/patches/45_immodule_unified.diff	2008-02-09 10:43:48 UTC (rev 9365)
@@ -0,0 +1,16172 @@
+--- /dev/null
++++ b/ChangeLog.immodule
+@@ -0,0 +1,2027 @@
++2004-09-10  YamaKen  <yamaken at bp.iij4u.or.jp>
++	
++	* changes.immodule
++	  - Describe a bugfix
++	
++2004-09-10  YamaKen  <yamaken at 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 at 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 at 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 at 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 at 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 at bp.iij4u.or.jp>
++	
++	* Rename input module subdirectory from "input" to "inputmethod"
++	
++2004-09-08  YamaKen  <yamaken at 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 at bp.iij4u.or.jp>
++	
++	* src/input/qinputcontextfactory.cpp
++	  - (keys): Modify the function description comment
++	
++2004-08-18  YamaKen  <yamaken at bp.iij4u.or.jp>
++	
++	* src/input/qinputcontextfactory.cpp
++	  - (create_manager): Fix plugin directory from "/input" to "/inputmethods"
++	
++2004-08-18  YamaKen  <yamaken at bp.iij4u.or.jp>
++	
++	* src/kernel/qapplication_x11.cpp
++	  - (KeyTbl): Add translations for Japanese and Korean alias keys
++	
++2004-08-18  YamaKen  <yamaken at 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 at 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 at 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 at 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 at 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 at 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 at bp.iij4u.or.jp>
++	
++	* This is preparation for qt-x11-immodule-unified-qt3.3.2-20040814
++	
++	* ChangeLog.immodule
++	  - Update
++	
++2004-08-14  YamaKen  <yamaken at 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 at gmail.com>
++	
++	cleanup: get rid of some warnings
++2004-08-12  YamaKen  <yamaken at 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 at bp.iij4u.or.jp>
++	
++	* This is preparation for qt-x11-immodule-unified-qt3.3.2-20040812
++	
++	* ChangeLog.immodule
++	  - Update
++	
++2004-08-12  YamaKen  <yamaken at bp.iij4u.or.jp>
++	
++	* src/kernel/qwidget_x11.cpp
++	  - (changeInputContext, createInputContext): Fix qic location
++	  - (destroyInputContext): Add safety check
++	
++2004-08-12  YamaKen  <yamaken at 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 at gmail.com>
++	
++	fixed a compile issue in my gentoo box (gcc 3.3.3, glibc 2.3.3
++2004-08-12  YamaKen  <yamaken at bp.iij4u.or.jp>
++	
++	* configure
++	  - Fix option consistency handling between '-im' and '-im-ext'
++	
++	* README.immodule
++	  - Fix a typo
++	
++2004-08-11  YamaKen  <yamaken at bp.iij4u.or.jp>
++	
++	* README.immodule
++	  - Modify a little
++	
++2004-08-11  YamaKen  <yamaken at bp.iij4u.or.jp>
++	
++	* README.immodule
++	  - New file. Some explanation has been described
++	
++	* ChangeLog.immodule
++	  - New file
++	
++2004-08-11  YamaKen  <yamaken at 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 at 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 at 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 at 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 at 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 at 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 at 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 at 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 at 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 at 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 at 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 at 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 at 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 at 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 at 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 at 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 at 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 at 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 at 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 at hct.zaq.ne.jp>
++	
++	* plugins/src/inputmethods/simple/qsimpleinputcontext.cpp
++	  - add full dead/multi key entries
++	  - fix some bugs
++	
++2004-08-10  YamaKen  <yamaken at 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 at 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 at 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 at hct.zaq.ne.jp>
++	
++	* src/input/qmultiinputcontext.cpp
++	  - use QInputContextFactory::description and set whatsthis help
++	
++2004-08-03  YamaKen  <yamaken at 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 at 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 at 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 at 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 at gmail.com>
++	
++	new environment variable QT_IM_MODULE to overwrite the default inputmethod plugin
++2004-07-31  LiuCougar  <liucougar at gmail.com>
++	
++	"deleteLater" is safer then "delete" QObject directly
++2004-07-30  YamaKen  <yamaken at 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 at 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 at 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 at 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 at 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 at 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 at 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 at 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 at 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 at 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 at 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 at 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 at 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 at 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 at hct.zaq.ne.jp>
++	
++	* src/input/qsimpleinputcontext.cpp
++	  - OOps. fix typo.
++	
++2004-07-23  Kazuki Ohta  <mover at hct.zaq.ne.jp>
++	
++	* src/input/qsimpleinputcontext.cpp
++	  - follow Qt coding rule
++	  - more valid capitalize case 
++	
++2004-07-23  Kazuki Ohta  <mover at hct.zaq.ne.jp>
++	
++	* src/input/qinputcontextfactory.cpp
++	  - enable QSimpleInputContext by specifying in qtrc "DefaultInputMethod=simple"
++	
++2004-07-23  Kazuki Ohta  <mover at 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 at hct.zaq.ne.jp>
++	
++	* kernel/qapplication_x11.cpp, kernel/qnamespace.h
++	  - add dead key entries
++	
++2004-07-22  YamaKen  <yamaken at 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 at 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 at 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 at bp.iij4u.or.jp>
++	
++	* src/input/qmultiinputcontext.cpp
++	  - (changeInputMethod): Fix invalid imIndex circulation. Thanks
++	    to Kazuki for reporting
++	
++2004-07-20  YamaKen  <yamaken at 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 at 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 at bp.iij4u.or.jp>
++	
++	* src/input/qmultiinputcontext.cpp
++	  - (changeInputMethod): Fix the conversion to const char * from
++	    identifierName()
++	
++2004-07-20  YamaKen  <yamaken at 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 at 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 at gmail.com>
++	
++	use virtual insert version to make subclasses work as expected (merged from bc-branch r19)
++2004-07-16  Kazuki Ohta  <mover at hct.zaq.ne.jp>
++	
++	* src/input/qinputcontextfactory.h: not the definition of QInputContextPlugin
++	
++2004-07-13  YamaKen  <yamaken at 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 at 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 at 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 at gmail.com>
++	
++	replace sendEvent with postEvent in qinputcontext to improve the process performance of IMCompose events
++2004-07-08  YamaKen  <yamaken at 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 at 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 at cc.rim.or.jp>
++	
++	"QLineEdit should only setMicroFocus if the cursorRect has changed" by cougar
++	
++2004-07-06  Daisuke Kameda  <kaminmat at cc.rim.or.jp>
++	
++	Re-Creating immodule for Qt/X11 trunk
++
++2004-06-22  YamaKen  <yamaken at 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 at 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 at 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 at 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 at 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 at 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 at 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 at 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 at 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 at 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 at 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 at bp.iij4u.or.jp>
++
++	* src/input/qximinputcontext_x11.cpp (x11FilterEvent): Fix
++	  commit problem except for on-the-spot style
++
++2004-05-31  YamaKen  <yamaken at bp.iij4u.or.jp>
++
++	* First 'Simplified API' patch. A lot of changes to be described
++
++2004-03-16  Daisuke Kameda  <kaminmat at cc.rim.or.jp>
++
++	* A lot of changes to be described before this date. Almost
++	  of code are written by Daisuke Kameda
+--- /dev/null
++++ b/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
+--- a/configure
++++ b/configure
+@@ -222,7 +222,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
+@@ -269,6 +269,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
+@@ -400,6 +403,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
+@@ -1019,6 +1028,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
+ 	;;
+@@ -1895,6 +1918,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
+@@ -2202,6 +2232,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:
+@@ -2250,6 +2294,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"
+--- /dev/null
++++ b/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 .
++
+--- /dev/null
++++ b/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
+--- /dev/null
++++ b/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 at 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 at 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 at 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
+--- /dev/null
++++ b/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 at 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 at 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 at 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
+--- /dev/null
++++ b/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 at 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 at 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 at 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
+--- /dev/null
++++ b/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 at 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 at 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 at 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
+--- /dev/null
++++ b/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
+--- /dev/null
++++ b/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 at 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 at 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 at 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
+--- /dev/null
++++ b/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 at 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 at 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 at 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
+--- /dev/null
++++ b/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
+--- /dev/null
++++ b/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 at 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 at 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 at 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 at 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) )
++};
+--- /dev/null
++++ b/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 at 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 at 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 at 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;
++}
++
+--- /dev/null
++++ b/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 at 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 at 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 at 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
+--- /dev/null
++++ b/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 at 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 at 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 at 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
+--- /dev/null
++++ b/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 at 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 at 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 at 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
+--- /dev/null
++++ b/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
+--- /dev/null
++++ b/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 at 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 at 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 at 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
++}
+--- /dev/null
++++ b/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 at 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 at 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
+--- /dev/null
++++ b/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 at 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 at 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 at 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
+--- /dev/null
++++ b/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 at 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 at 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 at 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
+--- /dev/null
++++ b/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 at 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 at 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
+--- /dev/null
++++ b/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
+--- a/plugins/src/src.pro
++++ b/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
+ }
+--- /dev/null
++++ b/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
+--- /dev/null
++++ b/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 at 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 at 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
+--- /dev/null
++++ b/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 at 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 at 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
+--- /dev/null
++++ b/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 at 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 at 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
+--- /dev/null
++++ b/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 at 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 at 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
+--- /dev/null
++++ b/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 at 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 at 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
+--- /dev/null
++++ b/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
++}
+--- a/src/kernel/qapplication.cpp
++++ b/src/kernel/qapplication.cpp
+@@ -3164,6 +3164,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 );
+@@ -3310,6 +3339,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;
+ 
+@@ -3328,18 +3374,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;
++    }
+ }
+ 
+ 
+@@ -3524,6 +3576,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 ) {
+--- a/src/kernel/qapplication.h
++++ b/src/kernel/qapplication.h
+@@ -54,6 +54,9 @@
+ class QStyle;
+ class QTranslator;
+ class QEventLoop;
++#if defined(Q_WS_X11)
++class QIMEvent;
++#endif
+ #if defined(Q_WS_QWS)
+ class QWSDecoration;
+ #endif
+@@ -275,8 +278,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();
+@@ -331,6 +345,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
+@@ -380,9 +400,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
+@@ -399,6 +422,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;
+--- a/src/kernel/qapplication_x11.cpp
++++ b/src/kernel/qapplication_x11.cpp
+@@ -92,7 +92,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)
+@@ -192,10 +194,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
+@@ -411,14 +412,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;
+@@ -531,8 +532,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 * );
+@@ -549,114 +549,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
+ }
+ 
+@@ -664,6 +670,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
+@@ -671,7 +714,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()) {
+@@ -679,9 +725,8 @@
+ 	++it;
+     }
+     delete list;
+-#endif // QT_NO_XIM
+ }
+-
++#endif
+ 
+ /*****************************************************************************
+   Default X error handlers
+@@ -1052,18 +1097,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
+ 
+@@ -1099,19 +1166,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 );
+ }
+@@ -1549,6 +1616,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
+@@ -1639,10 +1708,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
+@@ -1662,17 +1728,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
+@@ -2139,34 +2205,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,
+@@ -2415,9 +2460,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 ) {
+@@ -3280,77 +3328,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
+@@ -3502,34 +3532,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;
+ 	}
+@@ -4824,6 +4828,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
+ 
+@@ -5041,9 +5131,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
+@@ -5090,6 +5180,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;
+@@ -5098,13 +5193,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 );
+@@ -5181,15 +5277,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;
+ 	}
+     }
+ 
+@@ -5199,10 +5298,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.
+@@ -5216,7 +5319,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
+@@ -5267,8 +5370,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;
+@@ -5446,8 +5549,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 ) ||
+@@ -5506,7 +5635,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 (;;) {
+--- a/src/kernel/qevent.cpp
++++ b/src/kernel/qevent.cpp
+@@ -735,6 +735,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()
+ */
+ 
+--- /dev/null
++++ b/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 at 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 at 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
+--- /dev/null
++++ b/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 at 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 at 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
+--- a/src/kernel/qinputcontext_x11.cpp
++++ b/src/kernel/qinputcontext_x11.cpp
+@@ -36,500 +36,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
+--- a/src/kernel/qnamespace.h
++++ b/src/kernel/qnamespace.h
+@@ -402,6 +402,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,
+@@ -474,6 +555,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,
+--- a/src/kernel/qrichtext.cpp
++++ b/src/kernel/qrichtext.cpp
+@@ -665,7 +665,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;
+@@ -683,7 +683,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
+@@ -724,7 +724,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 ) {
+@@ -746,14 +746,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
+@@ -4879,6 +4886,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();
+ 	    }
+--- a/src/kernel/qrichtext_p.h
++++ b/src/kernel/qrichtext_p.h
+@@ -365,7 +365,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();
+ 
+ 
+--- a/src/kernel/qt_kernel.pri
++++ b/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 \
+--- a/src/kernel/qwidget.cpp
++++ b/src/kernel/qwidget.cpp
+@@ -3285,8 +3285,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 {
+@@ -3294,9 +3310,8 @@
+ 	}
+ #endif
+ 	qApp->focus_widget = this;
+-#if defined(Q_WS_X11)
+-	focusInputContext();
+-#endif
++	if( isInputMethodEnabled() )
++	    focusInputContext();
+ 
+ #if defined(Q_WS_WIN)
+ 	if ( !topLevelWidget()->isPopup() )
+@@ -3344,7 +3359,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;
+@@ -4670,7 +4689,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;
+--- a/src/kernel/qwidget.h
++++ b/src/kernel/qwidget.h
+@@ -52,6 +52,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;
+@@ -550,6 +554,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,
+@@ -581,13 +597,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();
+ 
+ #ifndef QT_NO_XSYNC
+@@ -667,6 +686,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
+@@ -972,7 +994,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
+ #ifndef QT_NO_XSYNC
+     ulong    syncCounter;
+     uint     syncRequestValue[2];
+--- a/src/kernel/qwidget_x11.cpp
++++ b/src/kernel/qwidget_x11.cpp
+@@ -64,11 +64,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
+@@ -682,6 +680,10 @@
+ 
+     if ( destroyw )
+ 	qt_XDestroyWindow( this, dpy, destroyw );
++
++#if !defined(QT_NO_IM_EXTENSIONS)
++    ic = 0;
++#endif
+ }
+ 
+ 
+@@ -748,6 +750,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 );
++	}
+     }
+ }
+ 
+@@ -784,11 +796,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();
+     }
+ 
+@@ -1006,7 +1018,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.
+@@ -1016,22 +1029,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
+@@ -1501,7 +1507,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();
+     }
+ }
+ 
+@@ -2481,8 +2487,10 @@
+ 
+ void QWidget::createTLSysExtra()
+ {
++#if defined(QT_NO_IM_EXTENSIONS)
+     // created lazily
+     extra->topextra->xic = 0;
++#endif
+ #ifndef QT_NO_XSYNC
+     extra->topextra->syncCounter = 0;
+     extra->topextra->syncRequestValue[0] = 0;
+@@ -2492,7 +2500,8 @@
+ 
+ void QWidget::deleteTLSysExtra()
+ {
+-    destroyInputContext();
++    // don't destroy input context here. it will be destroyed in
++    // QWidget::destroy() destroyInputContext();
+ }
+ 
+ /*
+@@ -2769,76 +2778,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)
+ {
+--- a/src/qt.pro
++++ b/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)
+--- a/src/tools/qfeatures.h
++++ b/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
++
+--- a/src/widgets/qlineedit.cpp
++++ b/src/widgets/qlineedit.cpp
+@@ -40,6 +40,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"
+@@ -248,12 +254,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;
+@@ -591,6 +602,7 @@
+ 	return;
+     d->echoMode = mode;
+     d->updateTextLayout();
++    setInputMethodEnabled( mode == Normal );
+     update();
+ }
+ 
+@@ -1422,6 +1434,8 @@
+ */
+ void QLineEdit::mousePressEvent( QMouseEvent* e )
+ {
++    if ( sendMouseEventToInputContext( e ) )
++	return;
+     if ( e->button() == RightButton )
+ 	return;
+     if ( d->tripleClickTimer && ( e->pos() - d->tripleClick ).manhattanLength() <
+@@ -1451,7 +1465,8 @@
+ */
+ void QLineEdit::mouseMoveEvent( QMouseEvent * e )
+ {
+-
++    if ( sendMouseEventToInputContext( e ) )
++	return;
+ #ifndef QT_NO_CURSOR
+     if ( ( e->state() & MouseButtonMask ) == 0 ) {
+ 	if ( !d->readOnly && d->dragEnabled
+@@ -1480,6 +1495,8 @@
+ */
+ void QLineEdit::mouseReleaseEvent( QMouseEvent* e )
+ {
++    if ( sendMouseEventToInputContext( e ) )
++	return;
+ #ifndef QT_NO_DRAGANDDROP
+     if ( e->button() == LeftButton ) {
+ 	if ( d->dndTimer ) {
+@@ -1506,6 +1523,8 @@
+ */
+ void QLineEdit::mouseDoubleClickEvent( QMouseEvent* e )
+ {
++    if ( sendMouseEventToInputContext( e ) )
++	return;
+     if ( e->button() == Qt::LeftButton ) {
+ 	deselect();
+ 	d->cursor = d->xToPos( e->pos().x() );
+@@ -1775,6 +1794,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 )
+@@ -1835,6 +1881,8 @@
+     }
+     if( !hasSelectedText() || style().styleHint( QStyle::SH_BlinkCursorWhenTextSelected ) )
+ 	d->setCursorVisible( TRUE );
++    if ( d->hasIMSelection() )
++	d->cursor = d->imselstart;
+     d->updateMicroFocusHint();
+ }
+ 
+@@ -1919,6 +1967,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());
+ 
+@@ -1959,7 +2015,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();
+@@ -1972,11 +2028,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();
+@@ -2004,7 +2065,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 );
+@@ -2119,6 +2184,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)
+@@ -2172,6 +2241,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
+@@ -2305,7 +2381,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 ) {
+@@ -2314,7 +2390,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;
+ }
+ 
+ 
+@@ -2335,9 +2417,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() );
++	}
+     }
+ }
+ 
+--- a/src/widgets/qlineedit.h
++++ b/src/widgets/qlineedit.h
+@@ -199,6 +199,7 @@
+     void dropEvent( QDropEvent * );
+ #endif
+     void contextMenuEvent( QContextMenuEvent * );
++    bool sendMouseEventToInputContext( QMouseEvent *e );
+     virtual QPopupMenu *createPopupMenu();
+     void windowActivationChange( bool );
+ #ifndef QT_NO_COMPAT
+--- a/src/widgets/qtextedit.cpp
++++ b/src/widgets/qtextedit.cpp
+@@ -42,6 +42,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"
+@@ -111,6 +116,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
+@@ -1081,6 +1088,10 @@
+ 	    l += v;
+ 	}
+     }
++
++    // This invocation is required to follow dragging of active window
++    // by the showed candidate window.
++    updateMicroFocusHint();
+ }
+ 
+ /*!
+@@ -1556,6 +1567,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 )
+@@ -1585,11 +1625,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) {
+@@ -1601,14 +1647,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
+ 	}
+     }
+ 
+@@ -1632,11 +1684,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;
+ 
+@@ -2127,6 +2180,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 );
+@@ -2201,6 +2261,9 @@
+     }
+ #endif
+ 
++    if ( sendMouseEventToInputContext( e ) )
++	return;
++
+     if ( d->trippleClickTimer->isActive() &&
+ 	 ( e->globalPos() - d->trippleClickPoint ).manhattanLength() <
+ 	 QApplication::startDragDistance() ) {
+@@ -2306,7 +2369,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();
+@@ -2363,7 +2428,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 );
+@@ -2374,6 +2439,8 @@
+ 	return;
+     }
+ #endif
++    if ( sendMouseEventToInputContext( e ) )
++	return;
+     QTextCursor oldCursor = *cursor;
+     if ( scrollTimer->isActive() )
+ 	scrollTimer->stop();
+@@ -2467,7 +2534,7 @@
+ 
+ void QTextEdit::contentsMouseDoubleClickEvent( QMouseEvent * e )
+ {
+-    if ( e->button() != Qt::LeftButton ) {
++    if ( e->button() != Qt::LeftButton && !d->composeMode() ) {
+ 	e->ignore();
+ 	return;
+     }
+@@ -2498,6 +2565,9 @@
+     } else
+ #endif
+     {
++	if ( sendMouseEventToInputContext( e ) )
++	    return;
++
+ 	QTextCursor c1 = *cursor;
+ 	QTextCursor c2 = *cursor;
+ #if defined(Q_OS_MAC)
+@@ -2673,10 +2743,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() );
+@@ -2826,6 +2901,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)) {
+@@ -2834,7 +2915,8 @@
+             c.setIndex(index);
+         }
+     }
+-
++#endif
++    
+     if ( hasFocus() || viewport()->hasFocus() ) {
+ 	int h = c.paragraph()->lineHeightOfChar( cursor->index() );
+ 	if ( !readonly ) {
+@@ -2998,6 +3080,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 )
+@@ -3037,7 +3121,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;
+@@ -3059,7 +3146,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();
+ }
+@@ -5571,6 +5664,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
+--- a/src/widgets/qtextedit.h
++++ b/src/widgets/qtextedit.h
+@@ -214,7 +214,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,
+@@ -442,6 +444,7 @@
+     void contentsDropEvent( QDropEvent *e );
+ #endif
+     void contentsContextMenuEvent( QContextMenuEvent *e );
++    bool sendMouseEventToInputContext( QMouseEvent *e );
+     bool focusNextPrevChild( bool next );
+     QTextDocument *document() const;
+     QTextCursor *textCursor() const;
+--- a/tools/qtconfig/mainwindowbase.ui
++++ b/tools/qtconfig/mainwindowbase.ui
+@@ -1029,6 +1029,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>
+@@ -1042,7 +1055,7 @@
+                         <property name="sizeHint">
+                             <size>
+                                 <width>20</width>
+-                                <height>40</height>
++                                <height>30</height>
+                             </size>
+                         </property>
+                     </spacer>
+@@ -1718,6 +1731,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>
+--- a/tools/qtconfig/mainwindow.cpp
++++ b/tools/qtconfig/mainwindow.cpp
+@@ -40,6 +40,7 @@
+ #include <qapplication.h>
+ #include <qcombobox.h>
+ #include <qstylefactory.h>
++#include <qinputcontextfactory.h>
+ #include <qobjectlist.h>
+ #include <qfontdatabase.h>
+ #include <qlineedit.h>
+@@ -374,13 +375,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);
+@@ -457,6 +518,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;
+--- a/tools/qtconfig/mainwindow.h
++++ b/tools/qtconfig/mainwindow.h
+@@ -96,6 +96,7 @@
+     QPalette editPalette, previewPalette;
+     QStyle *previewstyle;
+     QStringList fontpaths;
++    QStringList inputMethodIdentifiers;
+     bool modified;
+ };
+ 

Added: trunk/packages/qt-x11-free/debian/patches/46_immodule_keyrelease_fix.diff
===================================================================
--- trunk/packages/qt-x11-free/debian/patches/46_immodule_keyrelease_fix.diff	                        (rev 0)
+++ trunk/packages/qt-x11-free/debian/patches/46_immodule_keyrelease_fix.diff	2008-02-09 10:43:48 UTC (rev 9365)
@@ -0,0 +1,17 @@
+--- a/src/kernel/qapplication_x11.cpp
++++ b/src/kernel/qapplication_x11.cpp
+@@ -5264,11 +5264,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);
+ 	}
+     }

Added: trunk/packages/qt-x11-free/debian/patches/47_immodule_nodebug_fix.diff
===================================================================
--- trunk/packages/qt-x11-free/debian/patches/47_immodule_nodebug_fix.diff	                        (rev 0)
+++ trunk/packages/qt-x11-free/debian/patches/47_immodule_nodebug_fix.diff	2008-02-09 10:43:48 UTC (rev 9365)
@@ -0,0 +1,83 @@
+--- a/plugins/src/inputmethods/simple/qsimpleinputcontext.cpp
++++ b/plugins/src/inputmethods/simple/qsimpleinputcontext.cpp
+@@ -141,7 +141,7 @@
+         // only one character. See description of
+         // QInputContext::filterEvent() about key compression.
+         val = text[0].unicode();
+-        qDebug( "str = %s", (const char*)keyevent->text().local8Bit() );
++       // qDebug( "str = %s", (const char*)keyevent->text().local8Bit() );
+     }
+ 
+     // Store value
+@@ -165,14 +165,14 @@
+ 
+ void QSimpleInputContext::setFocus()
+ {
+-    qDebug( "QSimpleInputContext: %p->setFocus(), focusWidget()=%p",
+-            this, focusWidget() );
++    //qDebug( "QSimpleInputContext: %p->setFocus(), focusWidget()=%p",
++            //this, focusWidget() );
+ }
+ 
+ void QSimpleInputContext::unsetFocus()
+ {
+-    qDebug( "QSimpleInputContext: %p->unsetFocus(), focusWidget()=%p",
+-            this, focusWidget() );
++    //qDebug( "QSimpleInputContext: %p->unsetFocus(), focusWidget()=%p",
++            //this, focusWidget() );
+     reset();
+ }
+ 
+@@ -189,8 +189,8 @@
+     case QEvent::MouseButtonRelease:
+     case QEvent::MouseButtonDblClick:
+     case QEvent::MouseMove:
+-        qDebug( "QSimpleInputContext::mouseHandler: "
+-                "x=%d, type=%d, button=%d, state=%d", x, type, button, state );
++       // qDebug( "QSimpleInputContext::mouseHandler: "
++               // "x=%d, type=%d, button=%d, state=%d", x, type, button, state );
+         break;
+     default:
+         break;
+@@ -241,7 +241,7 @@
+ 
+     // no entries were found
+     if ( p == composeTable->data + composeTable->size ) {
+-        qDebug( "no match" );
++       // qDebug( "no match" );
+         clearComposeBuffer();
+         return FALSE;
+     }
+@@ -251,18 +251,18 @@
+ 
+         // check if partial match
+         if ( composeBuffer[i] == 0 && p->keys[i] ) {
+-            qDebug("partial match");
++            // qDebug("partial match");
+             return TRUE;
+         }
+ 
+         if ( composeBuffer[i] != p->keys[i] ) {
+-            qDebug("different entry");
++          // qDebug("different entry");
+             clearComposeBuffer();
+             return i!=0;
+         }
+     }
+ 
+-    qDebug("match exactly");
++   // qDebug("match exactly");
+ 
+     // match exactly
+     commitChar( p->value );
+--- a/plugins/src/inputmethods/xim/qximinputcontext_x11.cpp
++++ b/plugins/src/inputmethods/xim/qximinputcontext_x11.cpp
+@@ -361,7 +361,7 @@
+     }
+ 
+     if (! widget->isTopLevel()) {
+-	qWarning("QInputContext: cannot create input context for non-toplevel widgets");
++       // qWarning("QInputContext: cannot create input context for non-toplevel widgets");
+ 	return;
+     }
+ 

Added: trunk/packages/qt-x11-free/debian/patches/48_immodule_xim_fix.diff
===================================================================
--- trunk/packages/qt-x11-free/debian/patches/48_immodule_xim_fix.diff	                        (rev 0)
+++ trunk/packages/qt-x11-free/debian/patches/48_immodule_xim_fix.diff	2008-02-09 10:43:48 UTC (rev 9365)
@@ -0,0 +1,48 @@
+--- a/src/kernel/qapplication_x11.cpp
++++ b/src/kernel/qapplication_x11.cpp
+@@ -3337,11 +3337,11 @@
+     // filtering opportunity first to ensure all input methods work
+     // properly regardless of application design.
+ 
+-#ifndef QT_NO_IM_EXTENSIONS
++// #ifndef QT_NO_IM_EXTENSIONS
+     if( keywidget && keywidget->isEnabled() && keywidget->isInputMethodEnabled() ) {
+-#else
+-    if( keywidget && keywidget->isEnabled() ) {
+-#endif
++// #else
++//    if( keywidget && keywidget->isEnabled() ) {
++// #endif
+ 	if( ( event->type==XKeyPress || event->type==XKeyRelease ) &&
+ 	    sm_blockUserInput ) // block user interaction during session management
+ 	    return TRUE;
+--- a/src/kernel/qwidget_x11.cpp
++++ b/src/kernel/qwidget_x11.cpp
+@@ -2807,11 +2807,12 @@
+ {
+     QInputContext *qic = 0;
+ 
+-#if !defined(QT_NO_IM_EXTENSIONS)
++// #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;
+@@ -2862,10 +2863,10 @@
+ */
+ void QWidget::createInputContext()
+ {
+-#if !defined(QT_NO_IM_EXTENSIONS)
++// #if !defined(QT_NO_IM_EXTENSIONS)
+     if( !isInputMethodEnabled() || QApplication::closingDown() )
+ 	return;
+-#endif
++// #endif
+ 
+     QWidget *icWidget = icHolderWidget();
+ #ifndef QT_NO_IM

Added: trunk/packages/qt-x11-free/debian/patches/60_gnu_hurd_support.diff
===================================================================
--- trunk/packages/qt-x11-free/debian/patches/60_gnu_hurd_support.diff	                        (rev 0)
+++ trunk/packages/qt-x11-free/debian/patches/60_gnu_hurd_support.diff	2008-02-09 10:43:48 UTC (rev 9365)
@@ -0,0 +1,173 @@
+author: Cyril Brulebois <cyril.brulebois at enst-bretagne.fr>
+
+Add support for GNU/Hurd, by fixing POSIX incompatibilities and
+fixing proper compiler options
+
+--- a/mkspecs/hurd-g++/qmake.conf
++++ b/mkspecs/hurd-g++/qmake.conf
+@@ -15,7 +15,7 @@
+ QMAKE_LEXFLAGS		= 
+ QMAKE_YACC		= yacc
+ QMAKE_YACCFLAGS		= -d
+-QMAKE_CFLAGS		=
++QMAKE_CFLAGS		= -pipe
+ QMAKE_CFLAGS_DEPS	= -M
+ QMAKE_CFLAGS_WARN_ON	= -Wall -W
+ QMAKE_CFLAGS_WARN_OFF	= -w
+@@ -23,6 +23,7 @@
+ QMAKE_CFLAGS_DEBUG	= -g
+ QMAKE_CFLAGS_SHLIB	= -fPIC
+ QMAKE_CFLAGS_YACC	= -Wno-unused -Wno-parentheses
++QMAKE_CFLAGS_THREAD	= -D_REENTRANT
+ 
+ QMAKE_CXX		= g++
+ QMAKE_CXXFLAGS		= $$QMAKE_CFLAGS
+@@ -33,6 +34,7 @@
+ QMAKE_CXXFLAGS_DEBUG	= $$QMAKE_CFLAGS_DEBUG
+ QMAKE_CXXFLAGS_SHLIB	= $$QMAKE_CFLAGS_SHLIB
+ QMAKE_CXXFLAGS_YACC	= $$QMAKE_CFLAGS_YACC
++QMAKE_CXXFLAGS_THREAD	= $$QMAKE_CFLAGS_THREAD
+ 
+ QMAKE_INCDIR		=
+ QMAKE_LIBDIR		=
+@@ -51,14 +53,19 @@
+ QMAKE_LFLAGS_SHLIB	= -shared
+ QMAKE_LFLAGS_PLUGIN	= $$QMAKE_LFLAGS_SHLIB
+ QMAKE_LFLAGS_SONAME	= -Wl,-soname,
++QMAKE_LFLAGS_THREAD	=
+ 
+-QMAKE_LIBS		=
++# The following trick (QMAKE_LIBS{,_THREAD}) is needed at the moment
++QMAKE_LIBS		= -lpthread
+ QMAKE_LIBS_DYNLOAD	= -ldl
+ QMAKE_LIBS_X11		= -lXext -lX11 -lm
++QMAKE_LIBS_X11SM	= -lSM -lICE
++QMAKE_LIBS_NIS		= -lnsl
+ QMAKE_LIBS_QT		= -lqt
+-
++QMAKE_LIBS_QT_THREAD	= -lqt-mt
+ QMAKE_LIBS_OPENGL	= -lGLU -lGL -lXmu
+ QMAKE_LIBS_OPENGL_QT	= -lGL -lXmu
++QMAKE_LIBS_THREAD	= 
+ 
+ QMAKE_MOC		= $(QTDIR)/bin/moc
+ QMAKE_UIC		= $(QTDIR)/bin/uic
+--- a/src/tools/qdir_unix.cpp
++++ b/src/tools/qdir_unix.cpp
+@@ -74,6 +74,20 @@
+ QString QDir::canonicalPath() const
+ {
+     QString r;
++#if defined(__GLIBC__) && !defined(PATH_MAX)
++    char *cur = ::get_current_dir_name();
++    if ( cur ) {
++        char *tmp = canonicalize_file_name( QFile::encodeName( dPath ).data() );
++        if ( tmp ) {
++            r = QFile::decodeName( tmp );
++            free( tmp );
++        }
++        slashify( r );
++    	// always make sure we go back to the current dir
++        ::chdir( cur );
++        free( cur );
++    }
++#else
+     char cur[PATH_MAX+1];
+     if ( ::getcwd( cur, PATH_MAX ) ) {
+ 	char tmp[PATH_MAX+1];
+@@ -86,6 +100,7 @@
+     	// always make sure we go back to the current dir
+ 	::chdir( cur );
+     }
++#endif  /* __GLIBC__ && !PATH_MAX */
+     return r;
+ }
+ 
+@@ -147,9 +162,17 @@
+ 
+     struct stat st;
+     if ( ::stat( ".", &st ) == 0 ) {
++#if defined(__GLIBC__)  && !defined(PATH_MAX)
++        char *currentName = ::get_current_dir_name();
++        if ( currentName ) {
++            result = QFile::decodeName(currentName);
++            free( currentName );
++        }
++#else
+ 	char currentName[PATH_MAX+1];
+ 	if ( ::getcwd( currentName, PATH_MAX ) )
+ 	    result = QFile::decodeName(currentName);
++#endif /* __GLIBC__ && !PATH_MAX */
+ #if defined(QT_DEBUG)
+ 	if ( result.isNull() )
+ 	    qWarning( "QDir::currentDirPath: getcwd() failed" );
+--- a/src/tools/qfileinfo_unix.cpp
++++ b/src/tools/qfileinfo_unix.cpp
+@@ -48,6 +48,9 @@
+ #if !defined(QWS) && defined(Q_OS_MAC)
+ # include <qt_mac.h>
+ #endif
++#if defined(Q_OS_HURD)
++# include <stdlib.h>
++#endif
+ 
+ void QFileInfo::slashify( QString& )
+ {
+@@ -127,16 +130,43 @@
+ 
+ QString QFileInfo::readLink() const
+ {
++    if ( !isSymLink() )
++        return QString();
+ #if defined(Q_OS_UNIX) && !defined(Q_OS_OS2EMX)
++#if defined(__GLIBC__) && !defined(PATH_MAX)
++    int size = 256;
++    char *s = NULL, *s2;
++
++    while (1)
++    {
++        s2 = (char *) realloc (s, size);
++        if (s2 == NULL) {
++            free( s );
++            return QString();
++        }
++        s = s2;
++        int len = readlink ( QFile::encodeName(fn).data(), s, size );
++        if ( len < 0 ) {
++            free( s );
++            return QString();
++        }
++        if ( len < size ) {
++            s[len] = '\0';
++            QString str = QFile::decodeName(s);
++            free(s);
++            return str;
++        }
++        size *= 2;
++    }
++#else
+     char s[PATH_MAX+1];
+-    if ( !isSymLink() )
+-	return QString();
+     int len = readlink( QFile::encodeName(fn).data(), s, PATH_MAX );
+     if ( len >= 0 ) {
+ 	s[len] = '\0';
+ 	return QFile::decodeName(s);
+     }
+-#endif
++#endif /* __GLIBC__ && !PATH_MAX */
++#endif /* Q_OS_UNIX && !Q_OS_OS2EMX */
+ #if !defined(QWS) && defined(Q_OS_MAC)
+     {
+         FSRef fref;
+--- a/src/tools/qglobal.h
++++ b/src/tools/qglobal.h
+@@ -115,6 +115,8 @@
+ #  define Q_OS_ULTRIX
+ #elif defined(sinix)
+ #  define Q_OS_RELIANT
++#elif defined(__GNU__)
++#  define Q_OS_HURD
+ #elif defined(__linux__) || defined(__linux) || defined(__GNU__) || defined(__GLIBC__)
+ #  define Q_OS_LINUX
+ #elif defined(__FreeBSD__) || defined(__DragonFly__)

Added: trunk/packages/qt-x11-free/debian/patches/61_fcfontmatch_fontwidth_fix.diff
===================================================================
--- trunk/packages/qt-x11-free/debian/patches/61_fcfontmatch_fontwidth_fix.diff	                        (rev 0)
+++ trunk/packages/qt-x11-free/debian/patches/61_fcfontmatch_fontwidth_fix.diff	2008-02-09 10:43:48 UTC (rev 9365)
@@ -0,0 +1,47 @@
+author: Modestas Vainius <geromanas at mailas.com>
+
+Follow fontconfig API. Fix matching for some font families
+e.g. for "Sans" Dejavu Sans "Condensed" variant was selected
+     while the rest of the system (GTK2) selected "Book" variant
+
+--- a/src/kernel/qfontdatabase_x11.cpp
++++ b/src/kernel/qfontdatabase_x11.cpp
+@@ -1513,13 +1513,24 @@
+       convert the pixel size to a point size and request that.
+     */
+     double size_value = request.pixelSize;
++    double dpi = QPaintDevice::x11AppDpiY(fp->screen);
+     double scale = 1.;
+     if ( size_value > MAXFONTSIZE_XFT ) {
+ 	scale = (double)size_value/(double)MAXFONTSIZE_XFT;
+ 	size_value = MAXFONTSIZE_XFT;
+     }
+-
+-    size_value = size_value*72./QPaintDevice::x11AppDpiY(fp->screen);
++#ifdef QT_XFT2
++    /*
++     2006-12-28 If QT is not compiled against xft1, there is no need
++     for the workaround above (confirmed). Thus, in addition, add
++     font pixelsize to the pattern to avoid fontconfig making wrong
++     guesses. Also provide a DPI value for fontconfig so it never
++     attempts to fallback to its default.
++    */
++    XftPatternAddDouble(pattern, XFT_PIXEL_SIZE, size_value);
++    XftPatternAddDouble(pattern, XFT_DPI, dpi);
++#endif
++    size_value = size_value*72./dpi;
+     XftPatternAddDouble( pattern, XFT_SIZE, size_value );
+ 
+ #ifdef XFT_MATRIX
+@@ -1877,6 +1888,11 @@
+     FcResult result;
+         FcFontSet *fs = 0;
+         FcPattern *fsp = 0;
++
++	// Properly conform to fontconfig API. We need to call FcDefaultSubstitute()
++	// before FcFontSort()/FcFontMatch().
++	FcDefaultSubstitute(pattern);
++
+         if( use_fontsort ) {
+             fs = FcFontSort(0, pattern, FcFalse, 0, &result);
+     if (!fs)

Added: trunk/packages/qt-x11-free/debian/patches/63_qmake_hurd.diff
===================================================================
--- trunk/packages/qt-x11-free/debian/patches/63_qmake_hurd.diff	                        (rev 0)
+++ trunk/packages/qt-x11-free/debian/patches/63_qmake_hurd.diff	2008-02-09 10:43:48 UTC (rev 9365)
@@ -0,0 +1,15 @@
+author: Michael Banck <mbanck at debian.org>
+
+Fixes the view of some bengali char
+
+--- a/qmake/option.cpp
++++ b/qmake/option.cpp
+@@ -67,7 +67,7 @@
+ //all modes
+ int Option::warn_level = WarnLogic;
+ int Option::debug_level = 0;
+-QFile Option::output;
++QFile Option::output("");
+ QString Option::output_dir;
+ QStringList Option::before_user_vars;
+ QStringList Option::after_user_vars;

Added: trunk/packages/qt-x11-free/debian/patches/65_gcc-4.2_qbuttons.h-fix.diff
===================================================================
--- trunk/packages/qt-x11-free/debian/patches/65_gcc-4.2_qbuttons.h-fix.diff	                        (rev 0)
+++ trunk/packages/qt-x11-free/debian/patches/65_gcc-4.2_qbuttons.h-fix.diff	2008-02-09 10:43:48 UTC (rev 9365)
@@ -0,0 +1,24 @@
+author: Sune Vuorela <debian at pusling.com>
+
+fixes compilation issues of programs using qbuttons.h with gcc4.2
+
+--- a/src/widgets/qbutton.h
++++ b/src/widgets/qbutton.h
+@@ -183,7 +183,7 @@
+ 
+ inline bool QButton::isToggleButton() const
+ {
+-    return toggleTyp != SingleShot;
++    return ToggleType(toggleTyp) != SingleShot;
+ }
+ 
+ inline  bool QButton::isDown() const
+@@ -193,7 +193,7 @@
+ 
+ inline bool QButton::isOn() const
+ {
+-    return stat != Off;
++    return ToggleState(stat) != Off;
+ }
+ 
+ #ifndef QT_NO_COMPAT

Added: trunk/packages/qt-x11-free/debian/patches/66_gcc-4.3_compile-fix.diff
===================================================================
--- trunk/packages/qt-x11-free/debian/patches/66_gcc-4.3_compile-fix.diff	                        (rev 0)
+++ trunk/packages/qt-x11-free/debian/patches/66_gcc-4.3_compile-fix.diff	2008-02-09 10:43:48 UTC (rev 9365)
@@ -0,0 +1,47 @@
+author: Fathi Boudra <fabo at debian.org>
+
+Fixes compilation issues with gcc 4.3
+
+--- a/src/kernel/qapplication_x11.cpp
++++ b/src/kernel/qapplication_x11.cpp
+@@ -116,6 +116,7 @@
+ #include <string.h>
+ #include <ctype.h>
+ #include <locale.h>
++#include <cstdlib>
+ 
+ //#define X_NOT_BROKEN
+ #ifdef X_NOT_BROKEN
+--- a/tools/makeqpf/main.cpp
++++ b/tools/makeqpf/main.cpp
+@@ -47,7 +47,7 @@
+ #include <qmemorymanager_qws.h>
+ #endif
+ 
+-#include <stdlib.h>
++#include <cstdlib>
+ 
+ 
+ class FontViewItem : public QListViewItem {
+--- a/plugins/src/inputmethods/imsw-none/qnoneinputcontextplugin.cpp
++++ b/plugins/src/inputmethods/imsw-none/qnoneinputcontextplugin.cpp
+@@ -44,7 +44,7 @@
+ #include "qnoneinputcontextplugin.h"
+ #include <qinputcontextfactory.h>
+ #include <qsettings.h>
+-#include <stdlib.h>
++#include <cstdlib>
+ 
+ 
+ QNoneInputContextPlugin::QNoneInputContextPlugin()
+--- a/plugins/src/inputmethods/imsw-multi/qmultiinputcontext.cpp
++++ b/plugins/src/inputmethods/imsw-multi/qmultiinputcontext.cpp
+@@ -49,7 +49,7 @@
+ #include <qsettings.h>
+ #endif
+ 
+-#include <stdlib.h>
++#include <cstdlib>
+ 
+ #define QT_NO_IM_QMULTIINPUTCONTEXT_IMINDEX
+ 

Added: trunk/packages/qt-x11-free/debian/patches/68_use-lfbclient_not-lgds.diff
===================================================================
--- trunk/packages/qt-x11-free/debian/patches/68_use-lfbclient_not-lgds.diff	                        (rev 0)
+++ trunk/packages/qt-x11-free/debian/patches/68_use-lfbclient_not-lgds.diff	2008-02-09 10:43:48 UTC (rev 9365)
@@ -0,0 +1,37 @@
+author: Sune Vuorela <debian at pusling.com>
+
+Use -lfbclient instead of -lgds, as it is not shipped anymore
+
+--- a/configure
++++ b/configure
+@@ -1645,7 +1645,7 @@
+     ODBC_REQ="-lodbc sql.h sqlext.h"
+     TDS_REQ="-lsybdb sybfront.h sybdb.h"
+     DB2_REQ="-ldb2 sqlcli.h sqlcli1.h"
+-    IBASE_REQ="-lgds ibase.h"
++    IBASE_REQ="-lfbclient ibase.h"
+     for _SQLDR in $CFG_SQL_AVAILABLE; do
+ 	case $_SQLDR in
+ 	mysql)
+--- a/plugins/src/sqldrivers/ibase/ibase.pro
++++ b/plugins/src/sqldrivers/ibase/ibase.pro
+@@ -12,7 +12,7 @@
+ 	OBJECTS_DIR = .obj
+ 
+ 	!contains( LIBS, .*gds.* ):!contains( LIBS, .*libfb.* ) {
+-	    LIBS    *= -lgds
++	    LIBS    *= -lfbclient
+ 	}
+ }
+ win32 {
+--- a/src/sql/qt_sql.pri
++++ b/src/sql/qt_sql.pri
+@@ -188,7 +188,7 @@
+                 SOURCES += $$SQL_CPP/drivers/ibase/qsql_ibase.cpp
+                 DEFINES += QT_SQL_IBASE
+                 unix {
+-                        LIBS *= -lgds
++                        LIBS *= -lfbclient
+                 }
+                 win32 {
+ 			!win32-borland:LIBS *= gds32_ms.lib

Added: trunk/packages/qt-x11-free/debian/patches/70_bad_typecast_amd64.diff
===================================================================
--- trunk/packages/qt-x11-free/debian/patches/70_bad_typecast_amd64.diff	                        (rev 0)
+++ trunk/packages/qt-x11-free/debian/patches/70_bad_typecast_amd64.diff	2008-02-09 10:43:48 UTC (rev 9365)
@@ -0,0 +1,14 @@
+author: Damyan Ivanov <dmn at debian.org>
+
+ at DPATCH@
+--- a/src/sql/drivers/ibase/qsql_ibase.cpp
++++ b/src/sql/drivers/ibase/qsql_ibase.cpp
+@@ -767,7 +767,7 @@
+     : QSqlDriver(parent, name ? name : QIBASE_DRIVER_NAME)
+ {
+     d = new QIBaseDriverPrivate(this);
+-    d->ibase = (isc_db_handle)connection;
++    d->ibase = (isc_db_handle)(long int)connection;
+     setOpen(TRUE);
+     setOpenError(FALSE);
+ }

Added: trunk/packages/qt-x11-free/debian/patches/72_dont_trust_uname-m_use_dpkg-arch_instead.diff
===================================================================
--- trunk/packages/qt-x11-free/debian/patches/72_dont_trust_uname-m_use_dpkg-arch_instead.diff	                        (rev 0)
+++ trunk/packages/qt-x11-free/debian/patches/72_dont_trust_uname-m_use_dpkg-arch_instead.diff	2008-02-09 10:43:48 UTC (rev 9365)
@@ -0,0 +1,50 @@
+author: Sune Vuorela <debian at pusling.com>
+
+--- a/configure
++++ b/configure
+@@ -34,7 +34,44 @@
+ #-------------------------------------------------------------------------------
+ 
+ # need that throughout the script
+-UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown
++DPKG_ARCH=`(dpkg-architecture -qDEB_HOST_ARCH) 2>/dev/null` || UNAME_MACHINE=unknown
++case $DPKG_ARCH in 
++	amd64)
++		UNAME_MACHINE="x86_64"
++	;;
++	arm)
++		UNAME_MACHINE="armv4l"
++	;;
++	armel)
++		UNAME_MACHINE="armv5tel"
++	;;
++	hppa)
++		UNAME_MACHINE="parisc64"
++	;;
++	hurd-i386)
++		UNAME_MACHINE="i686-AT386"
++	;;
++	i386)
++		UNAME_MACHINE="i686"
++	;;
++	kfreebsd-amd64)
++		UNAME_MACHINE="x86_64"
++	;;
++	kfreebsd-i386)
++		UNAME_MACHINE="i586"
++	;;
++	mipsel)
++		UNAME_MACHINE="mips"
++	;;
++	powerpc)
++		UNAME_MACHINE="ppc"
++	;;
++	*)
++		UNAME_MACHINE="$DPKG_ARCH"
++	;;
++
++
++esac
+ UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown
+ UNAME_SYSTEM=`(uname -s) 2>/dev/null`  || UNAME_SYSTEM=unknown
+ UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown

Added: trunk/packages/qt-x11-free/debian/patches/90_armeabi.diff
===================================================================
--- trunk/packages/qt-x11-free/debian/patches/90_armeabi.diff	                        (rev 0)
+++ trunk/packages/qt-x11-free/debian/patches/90_armeabi.diff	2008-02-09 10:43:48 UTC (rev 9365)
@@ -0,0 +1,15 @@
+author: Lennert Buytenhek <buytenh at wantstofly.org>
+
+Add support for EABI ARM platforms to Qt
+
+--- a/src/tools/qglobal.h
++++ b/src/tools/qglobal.h
+@@ -318,7 +318,7 @@
+    QString bloat. However, gcc 3.4 doesn't allow us to create references to
+    members of a packed struct. (Pointers are OK, because then you
+    supposedly know what you are doing.) */
+-#  if (defined(__arm__) || defined(__ARMEL__)) && !defined(QT_MOC_CPP)
++#  if (defined(__arm__) || defined(__ARMEL__)) && !defined(__ARM_EABI__) && !defined(QT_MOC_CPP)
+ #    define Q_PACKED __attribute__ ((packed))
+ #    if __GNUC__ == 3 && __GNUC_MINOR__ >= 4 || __GNUC__ > 3
+ #      define Q_NO_PACKED_REFERENCE




More information about the pkg-kde-commits mailing list