From cd1f97695be1245ab19058d4fbc34e5697cc5383 Mon Sep 17 00:00:00 2001 From: Robert Xu Date: Sat, 12 Nov 2011 18:13:39 -0500 Subject: fix up tdebase and add qt3 --- opensuse/core/qt3/0001-dnd_optimization.patch | 180 + opensuse/core/qt3/0002-dnd_active_window_fix.patch | 162 + opensuse/core/qt3/0005-qpixmap_mitshm.patch | 569 + opensuse/core/qt3/0007-qpixmap_constants.patch | 384 + .../qt3/0038-dragobject-dont-prefer-unknown.patch | 19 + opensuse/core/qt3/0047-fix-kmenu-width.diff | 23 + opensuse/core/qt3/0048-qclipboard_hack_80072.patch | 51 + opensuse/core/qt3/0055-qtextedit_zoom.patch | 39 + opensuse/core/qt3/0056-khotkeys_input_84434.patch | 22 + opensuse/core/qt3/0059-qpopup_has_mouse.patch | 69 + .../core/qt3/0060-qpopup_ignore_mousepos.patch | 60 + opensuse/core/qt3/0079-compositing-types.patch | 413 + opensuse/core/qt3/0080-net-wm-sync-request.patch | 301 + opensuse/core/qt3/0085-fix-buildkey.diff | 22 + opensuse/core/qt3/add_qexport_visibility.patch | 63 + opensuse/core/qt3/aliasing.diff | 11 + opensuse/core/qt3/assistant3.desktop | 10 + opensuse/core/qt3/assistant3.png | Bin 0 -> 2353 bytes opensuse/core/qt3/attributes | 72 + opensuse/core/qt3/baselibs.conf | 12 + opensuse/core/qt3/build_script.sh | 99 + opensuse/core/qt3/designer.desktop | 11 + opensuse/core/qt3/designer.png | Bin 0 -> 324 bytes opensuse/core/qt3/enable-designer-plugins.diff | 11 + opensuse/core/qt3/external-libs.diff | 78 + opensuse/core/qt3/fix-GL-loading.diff | 44 + opensuse/core/qt3/fix-accessible.diff | 10 + opensuse/core/qt3/fix-assistant-path.patch | 11 + .../core/qt3/fix-key-release-event-with-imm.diff | 55 + opensuse/core/qt3/fix-qtranslator-crash.diff | 11 + .../core/qt3/fix-xinerama-dialog-placement.diff | 13 + opensuse/core/qt3/fix-xinput-clash.diff | 37 + opensuse/core/qt3/gcc46.diff | 56 + opensuse/core/qt3/head.diff | 60 + opensuse/core/qt3/kmenu-search-fix.diff | 10 + opensuse/core/qt3/lib64-plugin-support.diff | 12 + opensuse/core/qt3/limit-image-size.diff | 103 + opensuse/core/qt3/linguist.desktop | 11 + opensuse/core/qt3/linguist.png | Bin 0 -> 1936 bytes opensuse/core/qt3/mng-reading-fix.patch | 30 + opensuse/core/qt3/no-rpath.dif | 21 + opensuse/core/qt3/parseFontName.diff | 18 + opensuse/core/qt3/pluginmanager-fix.diff | 11 + opensuse/core/qt3/popen-leak-fix.diff | 10 + opensuse/core/qt3/pre_checkin.sh | 14 + opensuse/core/qt3/qcstring-format-warnings.diff | 15 + opensuse/core/qt3/qt-3.3.8c.diff | 58 + opensuse/core/qt3/qt-transparency.patch | 49 + opensuse/core/qt3/qt-x11-free-3.3.8b.tar.bz2 | Bin 0 -> 14344869 bytes .../qt-x11-immodule-unified-qt3.3.8-20060318.diff | 16169 +++++++++++++++++++ opensuse/core/qt3/qt.patch | 270 + opensuse/core/qt3/qt3-3.3.8b-translations.tar.bz2 | Bin 0 -> 19248 bytes opensuse/core/qt3/qt3-arm-gcc4.patch | 22 + opensuse/core/qt3/qt3-devel-doc.changes | 2475 +++ opensuse/core/qt3/qt3-devel-doc.spec | 297 + opensuse/core/qt3/qt3-devel-doc.spec.in | 93 + opensuse/core/qt3/qt3-extensions.changes | 2475 +++ opensuse/core/qt3/qt3-extensions.spec | 477 + opensuse/core/qt3/qt3-extensions.spec.in | 358 + opensuse/core/qt3/qt3-fix-cast.diff | 13 + opensuse/core/qt3/qt3-libpng14.diff | 22 + opensuse/core/qt3/qt3-never-strip.diff | 11 + opensuse/core/qt3/qt3-no-date.diff | 65 + opensuse/core/qt3/qt3-warnings.diff | 13 + opensuse/core/qt3/qt3.changes | 2475 +++ opensuse/core/qt3/qt3.csh | 2 + opensuse/core/qt3/qt3.sh | 6 + opensuse/core/qt3/qt3.spec | 415 + opensuse/core/qt3/qtconfig3.desktop | 10 + opensuse/core/qt3/qtimer-debug.diff | 48 + opensuse/core/qt3/qtkdeintegration_x11.cpp | 242 + opensuse/core/qt3/qtkdeintegration_x11_p.h | 59 + opensuse/core/qt3/qtrc | 28 + opensuse/core/qt3/qtrc-path.diff | 47 + opensuse/core/qt3/revert-qt-3.3.8-khmer-fix.diff | 36 + opensuse/core/qt3/rubberband.diff | 339 + opensuse/core/qt3/shut-up.diff | 45 + opensuse/core/qt3/update_spec.pl | 106 + opensuse/core/qt3/use-xrandr-1.2.diff | 106 + opensuse/core/qt3/xinerama-qpopupmenu.diff | 104 + opensuse/core/qt3/xinerama.patch | 49 + opensuse/core/tde-filesystem/macros.tde | 4 +- opensuse/core/tdebase/tdebase.spec | 2060 ++- opensuse/core/tdelibs/tdelibs.spec | 6 +- 84 files changed, 31157 insertions(+), 1130 deletions(-) create mode 100644 opensuse/core/qt3/0001-dnd_optimization.patch create mode 100644 opensuse/core/qt3/0002-dnd_active_window_fix.patch create mode 100644 opensuse/core/qt3/0005-qpixmap_mitshm.patch create mode 100644 opensuse/core/qt3/0007-qpixmap_constants.patch create mode 100644 opensuse/core/qt3/0038-dragobject-dont-prefer-unknown.patch create mode 100644 opensuse/core/qt3/0047-fix-kmenu-width.diff create mode 100644 opensuse/core/qt3/0048-qclipboard_hack_80072.patch create mode 100644 opensuse/core/qt3/0055-qtextedit_zoom.patch create mode 100644 opensuse/core/qt3/0056-khotkeys_input_84434.patch create mode 100644 opensuse/core/qt3/0059-qpopup_has_mouse.patch create mode 100644 opensuse/core/qt3/0060-qpopup_ignore_mousepos.patch create mode 100644 opensuse/core/qt3/0079-compositing-types.patch create mode 100644 opensuse/core/qt3/0080-net-wm-sync-request.patch create mode 100644 opensuse/core/qt3/0085-fix-buildkey.diff create mode 100644 opensuse/core/qt3/add_qexport_visibility.patch create mode 100644 opensuse/core/qt3/aliasing.diff create mode 100644 opensuse/core/qt3/assistant3.desktop create mode 100644 opensuse/core/qt3/assistant3.png create mode 100644 opensuse/core/qt3/attributes create mode 100644 opensuse/core/qt3/baselibs.conf create mode 100644 opensuse/core/qt3/build_script.sh create mode 100644 opensuse/core/qt3/designer.desktop create mode 100644 opensuse/core/qt3/designer.png create mode 100644 opensuse/core/qt3/enable-designer-plugins.diff create mode 100644 opensuse/core/qt3/external-libs.diff create mode 100644 opensuse/core/qt3/fix-GL-loading.diff create mode 100644 opensuse/core/qt3/fix-accessible.diff create mode 100644 opensuse/core/qt3/fix-assistant-path.patch create mode 100644 opensuse/core/qt3/fix-key-release-event-with-imm.diff create mode 100644 opensuse/core/qt3/fix-qtranslator-crash.diff create mode 100644 opensuse/core/qt3/fix-xinerama-dialog-placement.diff create mode 100644 opensuse/core/qt3/fix-xinput-clash.diff create mode 100644 opensuse/core/qt3/gcc46.diff create mode 100644 opensuse/core/qt3/head.diff create mode 100644 opensuse/core/qt3/kmenu-search-fix.diff create mode 100644 opensuse/core/qt3/lib64-plugin-support.diff create mode 100644 opensuse/core/qt3/limit-image-size.diff create mode 100644 opensuse/core/qt3/linguist.desktop create mode 100644 opensuse/core/qt3/linguist.png create mode 100644 opensuse/core/qt3/mng-reading-fix.patch create mode 100644 opensuse/core/qt3/no-rpath.dif create mode 100644 opensuse/core/qt3/parseFontName.diff create mode 100644 opensuse/core/qt3/pluginmanager-fix.diff create mode 100644 opensuse/core/qt3/popen-leak-fix.diff create mode 100644 opensuse/core/qt3/pre_checkin.sh create mode 100644 opensuse/core/qt3/qcstring-format-warnings.diff create mode 100644 opensuse/core/qt3/qt-3.3.8c.diff create mode 100644 opensuse/core/qt3/qt-transparency.patch create mode 100644 opensuse/core/qt3/qt-x11-free-3.3.8b.tar.bz2 create mode 100644 opensuse/core/qt3/qt-x11-immodule-unified-qt3.3.8-20060318.diff create mode 100644 opensuse/core/qt3/qt.patch create mode 100644 opensuse/core/qt3/qt3-3.3.8b-translations.tar.bz2 create mode 100644 opensuse/core/qt3/qt3-arm-gcc4.patch create mode 100644 opensuse/core/qt3/qt3-devel-doc.changes create mode 100644 opensuse/core/qt3/qt3-devel-doc.spec create mode 100644 opensuse/core/qt3/qt3-devel-doc.spec.in create mode 100644 opensuse/core/qt3/qt3-extensions.changes create mode 100644 opensuse/core/qt3/qt3-extensions.spec create mode 100644 opensuse/core/qt3/qt3-extensions.spec.in create mode 100644 opensuse/core/qt3/qt3-fix-cast.diff create mode 100644 opensuse/core/qt3/qt3-libpng14.diff create mode 100644 opensuse/core/qt3/qt3-never-strip.diff create mode 100644 opensuse/core/qt3/qt3-no-date.diff create mode 100644 opensuse/core/qt3/qt3-warnings.diff create mode 100644 opensuse/core/qt3/qt3.changes create mode 100644 opensuse/core/qt3/qt3.csh create mode 100644 opensuse/core/qt3/qt3.sh create mode 100644 opensuse/core/qt3/qt3.spec create mode 100644 opensuse/core/qt3/qtconfig3.desktop create mode 100644 opensuse/core/qt3/qtimer-debug.diff create mode 100644 opensuse/core/qt3/qtkdeintegration_x11.cpp create mode 100644 opensuse/core/qt3/qtkdeintegration_x11_p.h create mode 100644 opensuse/core/qt3/qtrc create mode 100644 opensuse/core/qt3/qtrc-path.diff create mode 100644 opensuse/core/qt3/revert-qt-3.3.8-khmer-fix.diff create mode 100644 opensuse/core/qt3/rubberband.diff create mode 100644 opensuse/core/qt3/shut-up.diff create mode 100644 opensuse/core/qt3/update_spec.pl create mode 100644 opensuse/core/qt3/use-xrandr-1.2.diff create mode 100644 opensuse/core/qt3/xinerama-qpopupmenu.diff create mode 100644 opensuse/core/qt3/xinerama.patch (limited to 'opensuse/core') diff --git a/opensuse/core/qt3/0001-dnd_optimization.patch b/opensuse/core/qt3/0001-dnd_optimization.patch new file mode 100644 index 000000000..a464765cd --- /dev/null +++ b/opensuse/core/qt3/0001-dnd_optimization.patch @@ -0,0 +1,180 @@ +--- src/kernel/qdnd_x11.cpp ++++ src/kernel/qdnd_x11.cpp +@@ -49,13 +49,15 @@ + #include "qdragobject.h" + #include "qobjectlist.h" + #include "qcursor.h" ++#include "qbitmap.h" ++#include "qpainter.h" + + #include "qt_x11_p.h" + + // conflict resolution + +-// unused, may be used again later: const int XKeyPress = KeyPress; +-// unused, may be used again later: const int XKeyRelease = KeyRelease; ++const int XKeyPress = KeyPress; ++const int XKeyRelease = KeyRelease; + #undef KeyPress + #undef KeyRelease + +@@ -252,20 +254,47 @@ + public: + QShapedPixmapWidget(int screen = -1) : + QWidget(QApplication::desktop()->screen( screen ), +- 0, WStyle_Customize | WStyle_Tool | WStyle_NoBorder | WX11BypassWM ) ++ 0, WStyle_Customize | WStyle_Tool | WStyle_NoBorder | WX11BypassWM ), oldpmser( 0 ), oldbmser( 0 ) + { + } + +- void setPixmap(QPixmap pm) ++ void setPixmap(QPixmap pm, QPoint hot) + { +- if ( pm.mask() ) { ++ int bmser = pm.mask() ? pm.mask()->serialNumber() : 0; ++ if( oldpmser == pm.serialNumber() && oldbmser == bmser ++ && oldhot == hot ) ++ return; ++ oldpmser = pm.serialNumber(); ++ oldbmser = bmser; ++ oldhot = hot; ++ bool hotspot_in = !(hot.x() < 0 || hot.y() < 0 || hot.x() >= pm.width() || hot.y() >= pm.height()); ++// if the pixmap has hotspot in its area, make a "hole" in it at that position ++// this will allow XTranslateCoordinates() to find directly the window below the cursor instead ++// of finding this pixmap, and therefore there won't be needed any (slow) search for the window ++// using findRealWindow() ++ if( hotspot_in ) { ++ QBitmap mask = pm.mask() ? *pm.mask() : QBitmap( pm.width(), pm.height()); ++ if( !pm.mask()) ++ mask.fill( Qt::color1 ); ++ QPainter p( &mask ); ++ p.setPen( Qt::color0 ); ++ p.drawPoint( hot.x(), hot.y()); ++ p.end(); ++ pm.setMask( mask ); ++ setMask( mask ); ++ } else if ( pm.mask() ) { + setMask( *pm.mask() ); + } else { + clearMask(); + } + resize(pm.width(),pm.height()); + setErasePixmap(pm); ++ erase(); + } ++private: ++ int oldpmser; ++ int oldbmser; ++ QPoint oldhot; + }; + + static QShapedPixmapWidget * qt_xdnd_deco = 0; +@@ -862,6 +891,45 @@ + move( QCursor::pos() ); + } + ++static bool qt_xdnd_was_move = false; ++static bool qt_xdnd_found = false; ++// check whole incoming X queue for move events ++// checking whole queue is done by always returning False in the predicate ++// if there's another move event in the queue, and there's not a mouse button ++// or keyboard or ClientMessage event before it, the current move event ++// may be safely discarded ++// this helps avoiding being overloaded by being flooded from many events ++// from the XServer ++static ++Bool qt_xdnd_predicate( Display*, XEvent* ev, XPointer ) ++{ ++ if( qt_xdnd_found ) ++ return False; ++ if( ev->type == MotionNotify ) ++ { ++ qt_xdnd_was_move = true; ++ qt_xdnd_found = true; ++ } ++ if( ev->type == ButtonPress || ev->type == ButtonRelease ++ || ev->type == XKeyPress || ev->type == XKeyRelease ++ || ev->type == ClientMessage ) ++ { ++ qt_xdnd_was_move = false; ++ qt_xdnd_found = true; ++ } ++ return False; ++} ++ ++static ++bool qt_xdnd_another_movement() ++{ ++ qt_xdnd_was_move = false; ++ qt_xdnd_found = false; ++ XEvent dummy; ++ XCheckIfEvent( qt_xdisplay(), &dummy, qt_xdnd_predicate, NULL ); ++ return qt_xdnd_was_move; ++} ++ + bool QDragManager::eventFilter( QObject * o, QEvent * e) + { + if ( beingCancelled ) { +@@ -884,8 +952,10 @@ + + if ( e->type() == QEvent::MouseMove ) { + QMouseEvent* me = (QMouseEvent *)e; +- updateMode(me->stateAfter()); +- move( me->globalPos() ); ++ if( !qt_xdnd_another_movement()) { ++ updateMode(me->stateAfter()); ++ move( me->globalPos() ); ++ } + return TRUE; + } else if ( e->type() == QEvent::MouseButtonRelease ) { + qApp->removeEventFilter( this ); +@@ -1126,7 +1196,7 @@ + qt_xdnd_deco->grabMouse(); + } + } +- updatePixmap(); ++ updatePixmap( globalPos ); + + if ( qt_xdnd_source_sameanswer.contains( globalPos ) && + qt_xdnd_source_sameanswer.isValid() ) { +@@ -1717,7 +1787,7 @@ + // qt_xdnd_source_object persists until we get an xdnd_finish message + } + +-void QDragManager::updatePixmap() ++void QDragManager::updatePixmap( const QPoint& cursorPos ) + { + if ( qt_xdnd_deco ) { + QPixmap pm; +@@ -1732,9 +1802,8 @@ + defaultPm = new QPixmap(default_pm); + pm = *defaultPm; + } +- qt_xdnd_deco->setPixmap(pm); +- qt_xdnd_deco->move(QCursor::pos()-pm_hot); +- qt_xdnd_deco->repaint(FALSE); ++ qt_xdnd_deco->setPixmap(pm, pm_hot); ++ qt_xdnd_deco->move(cursorPos-pm_hot); + //if ( willDrop ) { + qt_xdnd_deco->show(); + //} else { +@@ -1743,4 +1812,9 @@ + } + } + ++void QDragManager::updatePixmap() ++{ ++ updatePixmap( QCursor::pos()); ++} ++ + #endif // QT_NO_DRAGANDDROP +--- src/kernel/qdragobject.h ++++ src/kernel/qdragobject.h +@@ -245,6 +245,7 @@ + void move( const QPoint & ); + void drop(); + void updatePixmap(); ++ void updatePixmap( const QPoint& cursorPos ); + + private: + QDragObject * object; diff --git a/opensuse/core/qt3/0002-dnd_active_window_fix.patch b/opensuse/core/qt3/0002-dnd_active_window_fix.patch new file mode 100644 index 000000000..417c313e1 --- /dev/null +++ b/opensuse/core/qt3/0002-dnd_active_window_fix.patch @@ -0,0 +1,162 @@ +--- src/kernel/qapplication_x11.cpp ++++ src/kernel/qapplication_x11.cpp +@@ -3972,7 +3972,7 @@ + // Keyboard event translation + // + +-static int translateButtonState( int s ) ++int qt_x11_translateButtonState( int s ) + { + int bst = 0; + if ( s & Button1Mask ) +@@ -4038,7 +4038,7 @@ + pos.ry() = lastMotion.y; + globalPos.rx() = lastMotion.x_root; + globalPos.ry() = lastMotion.y_root; +- state = translateButtonState( lastMotion.state ); ++ state = qt_x11_translateButtonState( lastMotion.state ); + if ( qt_button_down && (state & (LeftButton | + MidButton | + RightButton ) ) == 0 ) +@@ -4062,7 +4062,7 @@ + pos.ry() = xevent->xcrossing.y; + globalPos.rx() = xevent->xcrossing.x_root; + globalPos.ry() = xevent->xcrossing.y_root; +- state = translateButtonState( xevent->xcrossing.state ); ++ state = qt_x11_translateButtonState( xevent->xcrossing.state ); + if ( qt_button_down && (state & (LeftButton | + MidButton | + RightButton ) ) == 0 ) +@@ -4074,7 +4074,7 @@ + pos.ry() = event->xbutton.y; + globalPos.rx() = event->xbutton.x_root; + globalPos.ry() = event->xbutton.y_root; +- state = translateButtonState( event->xbutton.state ); ++ state = qt_x11_translateButtonState( event->xbutton.state ); + switch ( event->xbutton.button ) { + case Button1: button = LeftButton; break; + case Button2: button = MidButton; break; +@@ -5020,7 +5020,7 @@ + XKeyEvent xkeyevent = event->xkey; + + // save the modifier state, we will use the keystate uint later by passing +- // it to translateButtonState ++ // it to qt_x11_translateButtonState + uint keystate = event->xkey.state; + // remove the modifiers where mode_switch exists... HPUX machines seem + // to have alt *AND* mode_switch both in Mod1Mask, which causes +@@ -5134,7 +5134,7 @@ + } + #endif // !QT_NO_XIM + +- state = translateButtonState( keystate ); ++ state = qt_x11_translateButtonState( keystate ); + + static int directionKeyEvent = 0; + if ( qt_use_rtl_extensions && type == QEvent::KeyRelease ) { +--- src/kernel/qdnd_x11.cpp ++++ src/kernel/qdnd_x11.cpp +@@ -115,6 +115,8 @@ + Atom qt_xdnd_type_list; + const int qt_xdnd_version = 4; + ++extern int qt_x11_translateButtonState( int s ); ++ + // Actions + // + // The Xdnd spec allows for user-defined actions. This could be implemented +@@ -199,6 +201,8 @@ + static int qt_xdnd_current_screen = -1; + // state of dragging... true if dragging, false if not + bool qt_xdnd_dragging = FALSE; ++// need to check state of keyboard modifiers ++static bool need_modifiers_check = FALSE; + + // dict of payload data, sorted by type atom + static QIntDict * qt_xdnd_target_data = 0; +@@ -887,8 +891,20 @@ + + void QDragManager::timerEvent( QTimerEvent* e ) + { +- if ( e->timerId() == heartbeat && qt_xdnd_source_sameanswer.isNull() ) +- move( QCursor::pos() ); ++ if ( e->timerId() == heartbeat ) { ++ if( need_modifiers_check ) { ++ Window root, child; ++ int root_x, root_y, win_x, win_y; ++ unsigned int mask; ++ XQueryPointer( qt_xdisplay(), qt_xrootwin( qt_xdnd_current_screen ), ++ &root, &child, &root_x, &root_y, &win_x, &win_y, &mask ); ++ if( updateMode( (ButtonState)qt_x11_translateButtonState( mask ))) ++ qt_xdnd_source_sameanswer = QRect(); // force move ++ } ++ need_modifiers_check = TRUE; ++ if( qt_xdnd_source_sameanswer.isNull() ) ++ move( QCursor::pos() ); ++ } + } + + static bool qt_xdnd_was_move = false; +@@ -956,6 +972,7 @@ + updateMode(me->stateAfter()); + move( me->globalPos() ); + } ++ need_modifiers_check = FALSE; + return TRUE; + } else if ( e->type() == QEvent::MouseButtonRelease ) { + qApp->removeEventFilter( this ); +@@ -994,9 +1011,11 @@ + beingCancelled = FALSE; + qApp->exit_loop(); + } else { +- updateMode(ke->stateAfter()); +- qt_xdnd_source_sameanswer = QRect(); // force move +- move( QCursor::pos() ); ++ if( updateMode(ke->stateAfter())) { ++ qt_xdnd_source_sameanswer = QRect(); // force move ++ move( QCursor::pos() ); ++ } ++ need_modifiers_check = FALSE; + } + return TRUE; // Eat all key events + } +@@ -1023,10 +1042,10 @@ + + + static Qt::ButtonState oldstate; +-void QDragManager::updateMode( ButtonState newstate ) ++bool QDragManager::updateMode( ButtonState newstate ) + { + if ( newstate == oldstate ) +- return; ++ return false; + const int both = ShiftButton|ControlButton; + if ( (newstate & both) == both ) { + global_requested_action = QDropEvent::Link; +@@ -1050,6 +1069,7 @@ + } + } + oldstate = newstate; ++ return true; + } + + +@@ -1754,6 +1774,7 @@ + qt_xdnd_source_sameanswer = QRect(); + move(QCursor::pos()); + heartbeat = startTimer(200); ++ need_modifiers_check = FALSE; + + #ifndef QT_NO_CURSOR + qApp->setOverrideCursor( arrowCursor ); +--- src/kernel/qdragobject.h ++++ src/kernel/qdragobject.h +@@ -249,7 +249,7 @@ + + private: + QDragObject * object; +- void updateMode( ButtonState newstate ); ++ bool updateMode( ButtonState newstate ); + void updateCursor(); + #if defined(Q_WS_X11) + void createCursors(); diff --git a/opensuse/core/qt3/0005-qpixmap_mitshm.patch b/opensuse/core/qt3/0005-qpixmap_mitshm.patch new file mode 100644 index 000000000..e6683f726 --- /dev/null +++ b/opensuse/core/qt3/0005-qpixmap_mitshm.patch @@ -0,0 +1,569 @@ +qt-bugs@ issue : 11790 (part of) +applied: no +author: Lubos Lunak + +NOTE: Needs #define QT_MITSHM in the matching qplatformdefs.h file. This + patch does so only for linux-g++ and linux-g++-distcc platforms. + +MITSHM extension support for QPixmap<->QImage conversions. + +Hello, + + the review and apply the attached patches that improve performance of +QImage->QPixmap conversions. They should be applied in order +'mitshm','more_local' and 'fast', but they're independent from each other +(well, besides merging problems). + + Mitshm patch adds MITSHM extension support for both +QPixmap::convertFromImage() and QPixmap::convertToImage(). I've noticed there +was some MITSHM support already, turned off by default, but it was used only +for QPixmap::xForm() , and it used shared pixmaps (and I'd bet nobody uses +it). My patch adds shared ximages support for faster pixmap<->image +conversions. Since I don't understand the xForm() code much, and I didn't +want to do anything with it, I added three #define's: + - QT_MITSHM generally enabling MITSHM support, which should be set in +qplatformsdefs.h (or wherever you setup platform specific stuff), it can be +enabled at least on Linux + - QT_MITSHM_CONVERSIONS - this is for my new code + - QT_MITSHM_XFORM - this is for the xForm() code + There's one more #define, QT_MITSHM_RMID_IGNORES_REFCOUNT. Glibc +documentation of shmctl( ... IPC_RMID ) quite clearly says that the memory +segment is freed only after the refcount increased by shmat() and decreased +by shmdt() is 0. However, at least according to +http://bugs.kde.org/show_bug.cgi?id=27517 , this doesn't happen on other +platforms for some strange reason. Such platforms should have this #define if +you ever consider supporting MITSHM on them. + + The lower limit for using MITSHM for the image is about 8KiB +(width*height*depth > 100*100*32 ). Also, BestOptim in such case doesn't keep +the ximage, as the shared ximage is always freed before the function returns +(I don't know if it's worth copying it). + + The second patch ('more_local'), in short, does nothing. Besides improving +performance by about 10% by making variables more "local", making few of them +const, and also making some of them unsigned (this help gcc for some reason). + + The last one, 'fast', moves some if's out of the loops, and handles some most +common case specially (15bpp, 16bpp and 32bpp ximage depths). 32bpp case, if +the endianess matches, is simply uses memcpy(), for the 15/16bpp depth, +variables are replaced directly by matching values, statements are a bit +reordered and merged when suitable, and again, in case endianess matches, +pixels are written simply as Q_INT16. Most probably it would also help to +process two pixels at once and write them as Q_INT32, but I didn't want to +complicate the code too much (later >;) ). + + The last snippet of 'fast' handles case when xi->bytes_per_line is not equal +to width for 8bpp ximage. I'm not actually sure if that can ever happen, but +since I've already written it *shrug*. + + The 'more_local' and 'fast' patches change only convertFromImage(), as I +don't think convertToImage() is that performance critical (but it's as +unoptimized as convertFromImage() was). + + Maybe some numbers. The difference is of course mainly visible with larger +pixmaps. The two optimizations alone reduce the time to 50% for 32bpp, to 70% +for 16bpp. The MITSHM support, when other patches are already applied too, +for 32bpp images saves about 33%. Together, the total time is reduced to +about 40% for 32bpp. Imlib probably still beats that, but at least this +obsoletes KPixmapIO. + + +--- src/kernel/qpixmap_x11.cpp ++++ src/kernel/qpixmap_x11.cpp +@@ -37,7 +37,19 @@ + + // NOT REVISED + ++#include "qplatformdefs.h" ++ ++#if defined(Q_OS_WIN32) && defined(QT_MITSHM) ++#undef QT_MITSHM ++#endif ++ ++#ifdef QT_MITSHM ++ ++// Use the MIT Shared Memory extension for pixmap<->image conversions ++#define QT_MITSHM_CONVERSIONS ++ + // Uncomment the next line to enable the MIT Shared Memory extension ++// for QPixmap::xForm() + // + // WARNING: This has some problems: + // +@@ -45,14 +57,13 @@ + // 2. Qt does not handle the ShmCompletion message, so you will + // get strange effects if you xForm() repeatedly. + // +-// #define QT_MITSHM ++// #define QT_MITSHM_XFORM + +-#if defined(Q_OS_WIN32) && defined(QT_MITSHM) +-#undef QT_MITSHM ++#else ++#undef QT_MITSHM_CONVERSIONS ++#undef QT_MITSHM_XFORM + #endif + +-#include "qplatformdefs.h" +- + #include "qbitmap.h" + #include "qpaintdevicemetrics.h" + #include "qimage.h" +@@ -91,7 +102,7 @@ inline static void qSafeXDestroyImage( X + MIT Shared Memory Extension support: makes xForm noticeably (~20%) faster. + *****************************************************************************/ + +-#if defined(QT_MITSHM) ++#if defined(QT_MITSHM_XFORM) + + static bool xshminit = FALSE; + static XShmSegmentInfo xshminfo; +@@ -173,8 +184,100 @@ static bool qt_create_mitshm_buffer( con + // return FALSE; + // } + +-#endif // QT_MITSHM ++#endif // QT_MITSHM_XFORM ++ ++#ifdef QT_MITSHM_CONVERSIONS ++ ++static bool qt_mitshm_error = false; ++static int qt_mitshm_errorhandler( Display*, XErrorEvent* ) ++{ ++ qt_mitshm_error = true; ++ return 0; ++} ++ ++static XImage* qt_XShmCreateImage( Display* dpy, Visual* visual, unsigned int depth, ++ int format, int /*offset*/, char* /*data*/, unsigned int width, unsigned int height, ++ int /*bitmap_pad*/, int /*bytes_per_line*/, XShmSegmentInfo* shminfo ) ++{ ++ if( width * height * depth < 100*100*32 ) ++ return NULL; ++ static int shm_inited = -1; ++ if( shm_inited == -1 ) { ++ if( XShmQueryExtension( dpy )) ++ shm_inited = 1; ++ else ++ shm_inited = 0; ++ } ++ if( shm_inited == 0 ) ++ return NULL; ++ XImage* xi = XShmCreateImage( dpy, visual, depth, format, NULL, shminfo, width, ++ height ); ++ if( xi == NULL ) ++ return NULL; ++ shminfo->shmid = shmget( IPC_PRIVATE, xi->bytes_per_line * xi->height, ++ IPC_CREAT|0600); ++ if( shminfo->shmid < 0 ) { ++ XDestroyImage( xi ); ++ return NULL; ++ } ++ shminfo->readOnly = False; ++ shminfo->shmaddr = (char*)shmat( shminfo->shmid, 0, 0 ); ++ if( shminfo->shmaddr == (char*)-1 ) { ++ XDestroyImage( xi ); ++ shmctl( shminfo->shmid, IPC_RMID, 0 ); ++ return NULL; ++ } ++ xi->data = shminfo->shmaddr; ++#ifndef QT_MITSHM_RMID_IGNORES_REFCOUNT ++ // mark as deleted to automatically free the memory in case ++ // of a crash (but this doesn't work e.g. on Solaris) ++ shmctl( shminfo->shmid, IPC_RMID, 0 ); ++#endif ++ if( shm_inited == 1 ) { // first time ++ XErrorHandler old_h = XSetErrorHandler( qt_mitshm_errorhandler ); ++ XShmAttach( dpy, shminfo ); ++ shm_inited = 2; ++ XSync( dpy, False ); ++ XSetErrorHandler( old_h ); ++ if( qt_mitshm_error ) { // oops ... perhaps we are remote? ++ shm_inited = 0; ++ XDestroyImage( xi ); ++ shmdt( shminfo->shmaddr ); ++#ifdef QT_MITSHM_RMID_IGNORES_REFCOUNT ++ shmctl( shminfo->shmid, IPC_RMID, 0 ); ++#endif ++ return NULL; ++ } ++ } else ++ XShmAttach( dpy, shminfo ); ++ return xi; ++} ++ ++static void qt_XShmDestroyImage( XImage* xi, XShmSegmentInfo* shminfo ) ++{ ++ XShmDetach( QPaintDevice::x11AppDisplay(), shminfo ); ++ XDestroyImage( xi ); ++ shmdt( shminfo->shmaddr ); ++#ifdef QT_MITSHM_RMID_IGNORES_REFCOUNT ++ shmctl( shminfo->shmid, IPC_RMID, 0 ); ++#endif ++} ++ ++static XImage* qt_XShmGetImage( const QPixmap* pix, int format, ++ XShmSegmentInfo* shminfo ) ++{ ++ XImage* xi = qt_XShmCreateImage( pix->x11Display(), (Visual*)pix->x11Visual(), ++ pix->depth(), format, 0, 0, pix->width(), pix->height(), 32, 0, shminfo ); ++ if( xi == NULL ) ++ return NULL; ++ if( XShmGetImage( pix->x11Display(), pix->handle(), xi, 0, 0, AllPlanes ) == False ) { ++ qt_XShmDestroyImage( xi, shminfo ); ++ return NULL; ++ } ++ return xi; ++} + ++#endif // QT_MITSHM_CONVERSIONS + + /***************************************************************************** + Internal functions +@@ -627,9 +730,20 @@ QImage QPixmap::convertToImage() const + d = 32; // > 8 ==> 32 + + XImage *xi = (XImage *)data->ximage; // any cached ximage? +- if ( !xi ) // fetch data from X server ++#ifdef QT_MITSHM_CONVERSIONS ++ bool mitshm_ximage = false; ++ XShmSegmentInfo shminfo; ++#endif ++ if ( !xi ) { // fetch data from X server ++#ifdef QT_MITSHM_CONVERSIONS ++ xi = qt_XShmGetImage( this, mono ? XYPixmap : ZPixmap, &shminfo ); ++ if( xi ) { ++ mitshm_ximage = true; ++ } else ++#endif + xi = XGetImage( x11Display(), hd, 0, 0, w, h, AllPlanes, + mono ? XYPixmap : ZPixmap ); ++ } + Q_CHECK_PTR( xi ); + if (!xi) + return image; // null image +@@ -640,15 +754,31 @@ QImage QPixmap::convertToImage() const + QImage::LittleEndian : QImage::BigEndian; + } + image.create( w, h, d, 0, bitOrder ); +- if ( image.isNull() ) // could not create image ++ if ( image.isNull() ) { // could not create image ++#ifdef QT_MITSHM_CONVERSIONS ++ if( mitshm_ximage ) ++ qt_XShmDestroyImage( xi, &shminfo ); ++ else ++#endif ++ qSafeXDestroyImage( xi ); + return image; ++ } + + const QPixmap* msk = mask(); + const QPixmap *alf = data->alphapm; + + QImage alpha; + if (alf) { +- XImage *axi = XGetImage(x11Display(), alf->hd, 0, 0, w, h, AllPlanes, ZPixmap); ++ XImage* axi; ++#ifdef QT_MITSHM_CONVERSIONS ++ bool mitshm_aximage = false; ++ XShmSegmentInfo ashminfo; ++ axi = qt_XShmGetImage( alf, ZPixmap, &ashminfo ); ++ if( axi ) { ++ mitshm_aximage = true; ++ } else ++#endif ++ axi = XGetImage(x11Display(), alf->hd, 0, 0, w, h, AllPlanes, ZPixmap); + + if (axi) { + image.setAlphaBuffer( TRUE ); +@@ -662,6 +792,11 @@ QImage QPixmap::convertToImage() const + src += axi->bytes_per_line; + } + ++#ifdef QT_MITSHM_CONVERSIONS ++ if( mitshm_aximage ) ++ qt_XShmDestroyImage( axi, &ashminfo ); ++ else ++#endif + qSafeXDestroyImage( axi ); + } + } else if (msk) { +@@ -804,6 +939,12 @@ QImage QPixmap::convertToImage() const + xi->bits_per_pixel ); + #endif + image.reset(); ++#ifdef QT_MITSHM_CONVERSIONS ++ if( mitshm_ximage ) ++ qt_XShmDestroyImage( xi, &shminfo ); ++ else ++#endif ++ qSafeXDestroyImage( xi ); + return image; + } + +@@ -909,10 +1050,22 @@ QImage QPixmap::convertToImage() const + delete [] carr; + } + if ( data->optim != BestOptim ) { // throw away image data ++#ifdef QT_MITSHM_CONVERSIONS ++ if( mitshm_ximage ) ++ qt_XShmDestroyImage( xi, &shminfo ); ++ else ++#endif + qSafeXDestroyImage( xi ); + ((QPixmap*)this)->data->ximage = 0; +- } else // keep ximage data ++ } else { // keep ximage data ++#ifdef QT_MITSHM_CONVERSIONS ++ if( mitshm_ximage ) { // copy the XImage? ++ qt_XShmDestroyImage( xi, &shminfo ); ++ xi = 0; ++ } ++#endif + ((QPixmap*)this)->data->ximage = xi; ++ } + + return image; + } +@@ -1085,6 +1238,11 @@ bool QPixmap::convertFromImage( const QI + bool trucol = (visual->c_class == TrueColor || visual->c_class == DirectColor); + int nbytes = image.numBytes(); + uchar *newbits= 0; ++ int newbits_size = 0; ++#ifdef QT_MITSHM_CONVERSIONS ++ bool mitshm_ximage = false; ++ XShmSegmentInfo shminfo; ++#endif + + if ( trucol ) { // truecolor display + QRgb pix[256]; // pixel translation table +@@ -1113,10 +1271,18 @@ bool QPixmap::convertFromImage( const QI + } + } + ++#ifdef QT_MITSHM_CONVERSIONS ++ xi = qt_XShmCreateImage( dpy, visual, dd, ZPixmap, 0, 0, w, h, 32, 0, &shminfo ); ++ if( xi != NULL ) { ++ mitshm_ximage = true; ++ newbits = (uchar*)xi->data; ++ } ++ else ++#endif + xi = XCreateImage( dpy, visual, dd, ZPixmap, 0, 0, w, h, 32, 0 ); +- Q_CHECK_PTR( xi ); + if (!xi) + return false; ++ if( newbits == NULL ) + newbits = (uchar *)malloc( xi->bytes_per_line*h ); + Q_CHECK_PTR( newbits ); + if ( !newbits ) // no memory +@@ -1323,6 +1489,7 @@ bool QPixmap::convertFromImage( const QI + } + + newbits = (uchar *)malloc( nbytes ); // copy image into newbits ++ newbits_size = nbytes; + Q_CHECK_PTR( newbits ); + if ( !newbits ) // no memory + return FALSE; +@@ -1440,11 +1607,18 @@ bool QPixmap::convertFromImage( const QI + } + + if ( !xi ) { // X image not created ++#ifdef QT_MITSHM_CONVERSIONS ++ xi = qt_XShmCreateImage( dpy, visual, dd, ZPixmap, 0, 0, w, h, 32, 0, &shminfo ); ++ if( xi != NULL ) ++ mitshm_ximage = true; ++ else ++#endif + xi = XCreateImage( dpy, visual, dd, ZPixmap, 0, 0, w, h, 32, 0 ); + if ( xi->bits_per_pixel == 16 ) { // convert 8 bpp ==> 16 bpp + ushort *p2; + int p2inc = xi->bytes_per_line/sizeof(ushort); + ushort *newerbits = (ushort *)malloc( xi->bytes_per_line * h ); ++ newbits_size = xi->bytes_per_line * h; + Q_CHECK_PTR( newerbits ); + if ( !newerbits ) // no memory + return FALSE; +@@ -1462,6 +1636,14 @@ bool QPixmap::convertFromImage( const QI + "(bpp=%d)", xi->bits_per_pixel ); + #endif + } ++#ifdef QT_MITSHM_CONVERSIONS ++ if( newbits_size > 0 && mitshm_ximage ) { // need to copy to shared memory ++ memcpy( xi->data, newbits, newbits_size ); ++ free( newbits ); ++ newbits = (uchar*)xi->data; ++ } ++ else ++#endif + xi->data = (char *)newbits; + } + +@@ -1495,19 +1677,24 @@ bool QPixmap::convertFromImage( const QI + + } + ++#ifdef QT_MITSHM_CONVERSIONS ++ if( mitshm_ximage ) ++ XShmPutImage( dpy, hd, qt_xget_readonly_gc( x11Screen(), FALSE ), ++ xi, 0, 0, 0, 0, w, h, False ); ++ else ++#endif + XPutImage( dpy, hd, qt_xget_readonly_gc( x11Screen(), FALSE ), + xi, 0, 0, 0, 0, w, h ); + +- if ( data->optim != BestOptim ) { // throw away image +- qSafeXDestroyImage( xi ); +- data->ximage = 0; +- } else { // keep ximage that we created +- data->ximage = xi; +- } + data->w = w; + data->h = h; + data->d = dd; + ++ XImage* axi = NULL; ++#ifdef QT_MITSHM_CONVERSIONS ++ bool mitshm_aximage = false; ++ XShmSegmentInfo ashminfo; ++#endif + if ( image.hasAlphaBuffer() ) { + QBitmap m; + m = image.createAlphaMask( conversion_flags ); +@@ -1543,13 +1730,22 @@ bool QPixmap::convertFromImage( const QI + data->alphapm->rendhd = + (HANDLE) XftDrawCreateAlpha( x11Display(), data->alphapm->hd, 8 ); + +- XImage *axi = XCreateImage(x11Display(), (Visual *) x11Visual(), ++#ifdef QT_MITSHM_CONVERSIONS ++ axi = qt_XShmCreateImage( x11Display(), (Visual*)x11Visual(), ++ 8, ZPixmap, 0, 0, w, h, 8, 0, &ashminfo ); ++ if( axi != NULL ) ++ mitshm_aximage = true; ++ else ++#endif ++ axi = XCreateImage(x11Display(), (Visual *) x11Visual(), + 8, ZPixmap, 0, 0, w, h, 8, 0); + + if (axi) { ++ if( axi->data==NULL ) { + // the data is deleted by qSafeXDestroyImage + axi->data = (char *) malloc(h * axi->bytes_per_line); + Q_CHECK_PTR( axi->data ); ++ } + char *aptr = axi->data; + + if (image.depth() == 32) { +@@ -1567,14 +1763,48 @@ bool QPixmap::convertFromImage( const QI + } + + GC gc = XCreateGC(x11Display(), data->alphapm->hd, 0, 0); ++ #ifdef QT_MITSHM_CONVERSIONS ++ if( mitshm_aximage ) ++ XShmPutImage( dpy, data->alphapm->hd, gc, axi, 0, 0, 0, 0, w, h, False ); ++ else ++#endif + XPutImage(dpy, data->alphapm->hd, gc, axi, 0, 0, 0, 0, w, h); + XFreeGC(x11Display(), gc); +- qSafeXDestroyImage(axi); + } + } + #endif // QT_NO_XFTFREETYPE + } + ++#ifdef QT_MITSHM_CONVERSIONS ++ if( mitshm_ximage || mitshm_aximage ) ++ XSync( x11Display(), False ); // wait until processed ++#endif ++ ++ if ( data->optim != BestOptim ) { // throw away image ++#ifdef QT_MITSHM_CONVERSIONS ++ if( mitshm_ximage ) ++ qt_XShmDestroyImage( xi, &shminfo ); ++ else ++#endif ++ qSafeXDestroyImage( xi ); ++ data->ximage = 0; ++ } else { // keep ximage that we created ++#ifdef QT_MITSHM_CONVERSIONS ++ if( mitshm_ximage ) { // copy the XImage? ++ qt_XShmDestroyImage( xi, &shminfo ); ++ xi = 0; ++ } ++#endif ++ data->ximage = xi; ++ } ++ if( axi ) { ++#ifdef QT_MITSHM_CONVERSIONS ++ if( mitshm_aximage ) ++ qt_XShmDestroyImage( axi, &ashminfo ); ++ else ++#endif ++ qSafeXDestroyImage(axi); ++ } + return TRUE; + } + +@@ -1737,7 +1967,7 @@ QPixmap QPixmap::xForm( const QWMatrix & + return pm; + } + +-#if defined(QT_MITSHM) ++#if defined(QT_MITSHM_XFORM) + static bool try_once = TRUE; + if (try_once) { + try_once = FALSE; +@@ -1770,7 +2000,7 @@ QPixmap QPixmap::xForm( const QWMatrix & + dbpl = ((w*bpp+31)/32)*4; + dbytes = dbpl*h; + +-#if defined(QT_MITSHM) ++#if defined(QT_MITSHM_XFORM) + if ( use_mitshm ) { + dptr = (uchar *)xshmimg->data; + uchar fillbyte = bpp == 8 ? white.pixel() : 0xff; +@@ -1786,7 +2016,7 @@ QPixmap QPixmap::xForm( const QWMatrix & + memset( dptr, Qt::white.pixel( x11Screen() ), dbytes ); + else + memset( dptr, 0xff, dbytes ); +-#if defined(QT_MITSHM) ++#if defined(QT_MITSHM_XFORM) + } + #endif + +@@ -1817,7 +2047,7 @@ QPixmap QPixmap::xForm( const QWMatrix & + } else { + xbpl = (w*bpp)/8; + p_inc = dbpl - xbpl; +-#if defined(QT_MITSHM) ++#if defined(QT_MITSHM_XFORM) + if ( use_mitshm ) + p_inc = xshmimg->bytes_per_line - xbpl; + #endif +@@ -1854,7 +2084,7 @@ QPixmap QPixmap::xForm( const QWMatrix & + QPixmap pm( w, h ); + pm.data->uninit = FALSE; + pm.x11SetScreen( x11Screen() ); +-#if defined(QT_MITSHM) ++#if defined(QT_MITSHM_XFORM) + if ( use_mitshm ) { + XCopyArea( dpy, xshmpm, pm.handle(), gc, 0, 0, w, h, 0, 0 ); + } else { +@@ -1863,7 +2093,7 @@ QPixmap QPixmap::xForm( const QWMatrix & + ZPixmap, 0, (char *)dptr, w, h, 32, 0 ); + XPutImage( dpy, pm.handle(), gc, xi, 0, 0, 0, 0, w, h); + qSafeXDestroyImage( xi ); +-#if defined(QT_MITSHM) ++#if defined(QT_MITSHM_XFORM) + } + #endif + +--- mkspecs/linux-g++/qplatformdefs.h ++++ mkspecs/linux-g++/qplatformdefs.h +@@ -102,5 +102,6 @@ + #define QT_VSNPRINTF ::vsnprintf + #endif + ++#define QT_MITSHM + + #endif // QPLATFORMDEFS_H diff --git a/opensuse/core/qt3/0007-qpixmap_constants.patch b/opensuse/core/qt3/0007-qpixmap_constants.patch new file mode 100644 index 000000000..65f9cd64b --- /dev/null +++ b/opensuse/core/qt3/0007-qpixmap_constants.patch @@ -0,0 +1,384 @@ +qt-bugs@ issue : 11790 (part of) +applied: no +author: Lubos Lunak + +See 0005-qpixmap_mitshm.patch for details. + + +--- src/kernel/qpixmap_x11.cpp ++++ src/kernel/qpixmap_x11.cpp +@@ -1123,9 +1123,6 @@ bool QPixmap::convertFromImage( const QI + return FALSE; + int bppc = xi->bits_per_pixel; + +- if ( bppc > 8 && xi->byte_order == LSBFirst ) +- bppc++; +- + bool contig_bits = n_bits(red_mask) == rbits && + n_bits(green_mask) == gbits && + n_bits(blue_mask) == bbits; +@@ -1174,32 +1171,70 @@ bool QPixmap::convertFromImage( const QI + } + init=TRUE; + } ++ ++ enum { BPP8, ++ BPP16_8_3_M3, BPP16_7_2_M3, BPP16_MSB, BPP16_LSB, ++ BPP24_MSB, BPP24_LSB, ++ BPP32_16_8_0, BPP32_MSB, BPP32_LSB ++ } mode = BPP8; + +- for ( uint y=0; ybytes_per_line*y; +- QRgb* p = (QRgb *)src; ++ if ( bppc > 8 && xi->byte_order == LSBFirst ) ++ bppc++; + +-#define GET_RGB \ +- int r = qRed ( *p ); \ +- int g = qGreen( *p ); \ +- int b = qBlue ( *p++ ); \ +- r = red_shift > 0 \ +- ? r << red_shift : r >> -red_shift; \ +- g = green_shift > 0 \ +- ? g << green_shift : g >> -green_shift; \ +- b = blue_shift > 0 \ +- ? b << blue_shift : b >> -blue_shift; ++ int wordsize; ++ bool bigendian; ++ qSysInfo( &wordsize, &bigendian ); ++ bool same_msb_lsb = ( xi->byte_order == MSBFirst ) == ( bigendian ); ++ ++ if( bppc == 8 ) // 8 bit ++ mode = BPP8; ++ else if( bppc == 16 || bppc == 17 ) { // 16 bit MSB/LSB ++ if( red_shift == 8 && green_shift == 3 && blue_shift == -3 ++ && !d8 && same_msb_lsb ) ++ mode = BPP16_8_3_M3; ++ else if( red_shift == 7 && green_shift == 2 && blue_shift == -3 ++ && !d8 && same_msb_lsb ) ++ mode = BPP16_7_2_M3; ++ else ++ mode = bppc == 17 ? BPP16_LSB : BPP16_MSB; ++ } else if( bppc == 24 || bppc == 25 ) { // 24 bit MSB/LSB ++ mode = bppc == 25 ? BPP24_LSB : BPP24_MSB; ++ } else if( bppc == 32 || bppc == 33 ) { // 32 bit MSB/LSB ++ if( red_shift == 16 && green_shift == 8 && blue_shift == 0 ++ && !d8 && same_msb_lsb ) ++ mode = BPP32_16_8_0; ++ else ++ mode = bppc == 33 ? BPP32_LSB : BPP32_MSB; ++ } else ++ qFatal("Logic error 3"); + + #define GET_PIXEL \ + int pixel; \ + if ( d8 ) pixel = pix[*src++]; \ + else { \ +- GET_RGB \ +- pixel = (b & blue_mask)|(g & green_mask) | (r & red_mask) \ ++ int r = qRed ( *p ); \ ++ int g = qGreen( *p ); \ ++ int b = qBlue ( *p++ ); \ ++ r = red_shift > 0 \ ++ ? r << red_shift : r >> -red_shift; \ ++ g = green_shift > 0 \ ++ ? g << green_shift : g >> -green_shift; \ ++ b = blue_shift > 0 \ ++ ? b << blue_shift : b >> -blue_shift; \ ++ pixel = (r & red_mask)|(g & green_mask) | (b & blue_mask) \ + | ~(blue_mask | green_mask | red_mask); \ + } + ++// optimized case - no d8 case, shift only once instead of twice, mask only once instead of twice, ++// use direct values instead of variables, and use only one statement ++// (*p >> 16), (*p >> 8 ) and (*p) are qRed(),qGreen() and qBlue() without masking ++// shifts have to be passed including the shift operator (e.g. '>>3'), because of the direction ++#define GET_PIXEL_OPT(red_shift,green_shift,blue_shift,red_mask,green_mask,blue_mask) \ ++ int pixel = ((( *p >> 16 ) red_shift ) & red_mask ) \ ++ | ((( *p >> 8 ) green_shift ) & green_mask ) \ ++ | ((( *p ) blue_shift ) & blue_mask ); \ ++ ++p; ++ + #define GET_PIXEL_DITHER_TC \ + int r = qRed ( *p ); \ + int g = qGreen( *p ); \ +@@ -1220,91 +1255,177 @@ bool QPixmap::convertFromImage( const QI + ? g << green_shift : g >> -green_shift; \ + b = blue_shift > 0 \ + ? b << blue_shift : b >> -blue_shift; \ +- int pixel = (b & blue_mask)|(g & green_mask) | (r & red_mask); ++ int pixel = (r & red_mask)|(g & green_mask) | (b & blue_mask); + +- if ( dither_tc ) { +- uint x; +- switch ( bppc ) { +- case 16: // 16 bit MSB +- for ( x=0; x> 8); +- *dst++ = pixel; +- } ++// again, optimized case ++// can't be optimized that much :( ++#define GET_PIXEL_DITHER_TC_OPT(red_shift,green_shift,blue_shift,red_mask,green_mask,blue_mask, \ ++ rbits,gbits,bbits) \ ++ const int thres = D[x%16][y%16]; \ ++ int r = qRed ( *p ); \ ++ if ( r <= (255-(1<<(8-rbits))) && ((r< thres) \ ++ r += (1<<(8-rbits)); \ ++ int g = qGreen( *p ); \ ++ if ( g <= (255-(1<<(8-gbits))) && ((g< thres) \ ++ g += (1<<(8-gbits)); \ ++ int b = qBlue ( *p++ ); \ ++ if ( b <= (255-(1<<(8-bbits))) && ((b< thres) \ ++ b += (1<<(8-bbits)); \ ++ int pixel = (( r red_shift ) & red_mask ) \ ++ | (( g green_shift ) & green_mask ) \ ++ | (( b blue_shift ) & blue_mask ); ++ ++#define CYCLE(body) \ ++ for ( uint y=0; ybytes_per_line*y; \ ++ QRgb* p = (QRgb *)src; \ ++ body \ ++ } ++ ++ if ( dither_tc ) { ++ switch ( mode ) { ++ case BPP16_8_3_M3: ++ CYCLE( ++ Q_INT16* dst16 = (Q_INT16*)dst; ++ for ( uint x=0; x>3,0xf800,0x7e0,0x1f,5,6,5) ++ *dst16++ = pixel; ++ } ++ ) + break; +- case 17: // 16 bit LSB +- for ( x=0; x> 8; +- } ++ case BPP16_7_2_M3: ++ CYCLE( ++ Q_INT16* dst16 = (Q_INT16*)dst; ++ for ( uint x=0; x>3,0x7c00,0x3e0,0x1f,5,5,5) ++ *dst16++ = pixel; ++ } ++ ) ++ break; ++ case BPP16_MSB: // 16 bit MSB ++ CYCLE( ++ for ( uint x=0; x> 8); ++ *dst++ = pixel; ++ } ++ ) ++ break; ++ case BPP16_LSB: // 16 bit LSB ++ CYCLE( ++ for ( uint x=0; x> 8; ++ } ++ ) + break; + default: + qFatal("Logic error"); + } +- } else { +- uint x; +- switch ( bppc ) { +- case 8: // 8 bit +- for ( x=0; x> 8); +- *dst++ = pixel; +- } ++ case BPP16_8_3_M3: ++ CYCLE( ++ Q_INT16* dst16 = (Q_INT16*)dst; ++ for ( uint x=0; x>3,0xf800,0x7e0,0x1f) ++ *dst16++ = pixel; ++ } ++ ) + break; +- case 17: // 16 bit LSB +- for ( x=0; x> 8; +- } ++ case BPP16_7_2_M3: ++ CYCLE( ++ Q_INT16* dst16 = (Q_INT16*)dst; ++ for ( uint x=0; x>3,0x7c00,0x3e0,0x1f) ++ *dst16++ = pixel; ++ } ++ ) + break; +- case 24: // 24 bit MSB +- for ( x=0; x> 16; +- *dst++ = pixel >> 8; +- *dst++ = pixel; +- } ++ case BPP16_MSB: // 16 bit MSB ++ CYCLE( ++ for ( uint x=0; x> 8); ++ *dst++ = pixel; ++ } ++ ) + break; +- case 25: // 24 bit LSB +- for ( x=0; x> 8; +- *dst++ = pixel >> 16; +- } ++ case BPP16_LSB: // 16 bit LSB ++ CYCLE( ++ for ( uint x=0; x> 8; ++ } ++ ) + break; +- case 32: // 32 bit MSB +- for ( x=0; x> 24; +- *dst++ = pixel >> 16; +- *dst++ = pixel >> 8; +- *dst++ = pixel; +- } ++ case BPP24_MSB: // 24 bit MSB ++ CYCLE( ++ for ( uint x=0; x> 16; ++ *dst++ = pixel >> 8; ++ *dst++ = pixel; ++ } ++ ) + break; +- case 33: // 32 bit LSB +- for ( x=0; x> 8; +- *dst++ = pixel >> 16; +- *dst++ = pixel >> 24; +- } ++ case BPP24_LSB: // 24 bit LSB ++ CYCLE( ++ for ( uint x=0; x> 8; ++ *dst++ = pixel >> 16; ++ } ++ ) + break; +- default: +- qFatal("Logic error 2"); +- } +- } +- } +- xi->data = (char *)newbits; ++ case BPP32_16_8_0: ++ CYCLE( ++ memcpy( dst, p, w * 4 ); ++ ) ++ break; ++ case BPP32_MSB: // 32 bit MSB ++ CYCLE( ++ for ( uint x=0; x> 24; ++ *dst++ = pixel >> 16; ++ *dst++ = pixel >> 8; ++ *dst++ = pixel; ++ } ++ ) ++ break; ++ case BPP32_LSB: // 32 bit LSB ++ CYCLE( ++ for ( uint x=0; x> 8; ++ *dst++ = pixel >> 16; ++ *dst++ = pixel >> 24; ++ } ++ ) ++ break; ++ default: ++ qFatal("Logic error 2"); ++ } ++ } ++ xi->data = (char *)newbits; + } + + if ( d == 8 && !trucol ) { // 8 bit pixmap +@@ -1554,15 +1675,24 @@ bool QPixmap::convertFromImage( const QI + + if (image.depth() == 32) { + const int *iptr = (const int *) image.bits(); +- int max = w * h; +- while (max--) +- *aptr++ = *iptr++ >> 24; // squirt ++ if( axi->bytes_per_line == (int)w ) { ++ int max = w * h; ++ while (max--) ++ *aptr++ = *iptr++ >> 24; // squirt ++ } else { ++ for (uint i = 0; i < h; ++i ) { ++ for (uint j = 0; j < w; ++j ) ++ *aptr++ = *iptr++ >> 24; // squirt ++ aptr += ( axi->bytes_per_line - w ); ++ } ++ } + } else if (image.depth() == 8) { + const QRgb * const rgb = image.colorTable(); + for (uint y = 0; y < h; ++y) { + const uchar *iptr = image.scanLine(y); + for (uint x = 0; x < w; ++x) + *aptr++ = qAlpha(rgb[*iptr++]); ++ aptr += ( axi->bytes_per_line - w ); + } + } + diff --git a/opensuse/core/qt3/0038-dragobject-dont-prefer-unknown.patch b/opensuse/core/qt3/0038-dragobject-dont-prefer-unknown.patch new file mode 100644 index 000000000..d9a7275e9 --- /dev/null +++ b/opensuse/core/qt3/0038-dragobject-dont-prefer-unknown.patch @@ -0,0 +1,19 @@ +--- src/kernel/qdragobject.cpp ++++ src/kernel/qdragobject.cpp +@@ -893,6 +893,16 @@ + { + if(!e) + return FALSE; ++ ++ // when subtype is not specified, try text/plain first, otherwise this may read ++ // things like text/x-moz-url even though better targets are available ++ if( subtype.isNull()) { ++ QCString subtmp = "plain"; ++ if( decode( e, str, subtmp )) { ++ subtype = subtmp; ++ return true; ++ } ++ } + + if ( e->cacheType == QMimeSource::Text ) { + str = *e->cache.txt.str; diff --git a/opensuse/core/qt3/0047-fix-kmenu-width.diff b/opensuse/core/qt3/0047-fix-kmenu-width.diff new file mode 100644 index 000000000..398ca0cc4 --- /dev/null +++ b/opensuse/core/qt3/0047-fix-kmenu-width.diff @@ -0,0 +1,23 @@ +qt-bugs@ issue: N46882 +bugs.kde.org number: 77545 +applied: no +author: Stephan Binner + +Fix wrong K menu width for the case of enabled side pixmap and a menu title +(like "Recently Used Applications") being longer than every other entry. + +Solution: Respect PanelKMenu::setMaximumSize() as up to Qt 3.2.3 + +Index: src/widgets/qpopupmenu.cpp +================================================================================ +--- src/widgets/qpopupmenu.cpp ++++ src/widgets/qpopupmenu.cpp +@@ -2530,7 +2530,7 @@ + constPolish(); + QPopupMenu* that = (QPopupMenu*) this; + //We do not need a resize here, just the sizeHint.. +- return that->updateSize(FALSE, FALSE).expandedTo( QApplication::globalStrut() ); ++ return that->updateSize(FALSE).expandedTo( QApplication::globalStrut() ); + } + + diff --git a/opensuse/core/qt3/0048-qclipboard_hack_80072.patch b/opensuse/core/qt3/0048-qclipboard_hack_80072.patch new file mode 100644 index 000000000..2f508019b --- /dev/null +++ b/opensuse/core/qt3/0048-qclipboard_hack_80072.patch @@ -0,0 +1,51 @@ +qt-bugs@ issue : none, probably even won't be +bugs.kde.org number : 80072 +applied: no +author: Lubos Lunak + +A crude hack for KDE #80072. No good idea how to fix it properly yet :(. + +================================================================================ +Index: src/kernel/qclipboard_x11.cpp +=================================================================== +--- src/kernel/qclipboard_x11.cpp.orig ++++ src/kernel/qclipboard_x11.cpp +@@ -112,6 +112,7 @@ static int pending_timer_id = 0; + static bool pending_clipboard_changed = FALSE; + static bool pending_selection_changed = FALSE; + ++Q_EXPORT bool qt_qclipboard_bailout_hack = false; + + // event capture mechanism for qt_xclb_wait_for_event + static bool waiting_for_data = FALSE; +@@ -464,6 +465,15 @@ static Bool checkForClipboardEvents(Disp + || e->xselectionclear.selection == qt_xa_clipboard))); + } + ++static bool selection_request_pending = false; ++ ++static Bool check_selection_request_pending( Display*, XEvent* e, XPointer ) ++ { ++ if( e->type == SelectionRequest && e->xselectionrequest.owner == owner->winId()) ++ selection_request_pending = true; ++ return False; ++ } ++ + bool qt_xclb_wait_for_event( Display *dpy, Window win, int type, XEvent *event, + int timeout ) + { +@@ -515,6 +525,14 @@ bool qt_xclb_wait_for_event( Display *dp + do { + if ( XCheckTypedWindowEvent(dpy,win,type,event) ) + return TRUE; ++ if( qt_qclipboard_bailout_hack ) { ++ XEvent dummy; ++ selection_request_pending = false; ++ if ( owner != NULL ) ++ XCheckIfEvent(dpy,&dummy,check_selection_request_pending,NULL); ++ if( selection_request_pending ) ++ return TRUE; ++ } + + // process other clipboard events, since someone is probably requesting data from us + XEvent e; diff --git a/opensuse/core/qt3/0055-qtextedit_zoom.patch b/opensuse/core/qt3/0055-qtextedit_zoom.patch new file mode 100644 index 000000000..ad4174a1f --- /dev/null +++ b/opensuse/core/qt3/0055-qtextedit_zoom.patch @@ -0,0 +1,39 @@ +qt-bugs@ issue : +bugs.kde.org number : +applied: yes +author: Waldo Bastian + +QTextEdit::zoomIn /QTextEdit::zoomOut does not work if the original +font had its size specified in pixels instead of points. +pointSize() returns 0 in such case. + +Index: widgets/qtextedit.cpp +================================================================================ +--- src/widgets/qtextedit.cpp ++++ src/widgets/qtextedit.cpp +@@ -5767,7 +5767,11 @@ + void QTextEdit::zoomIn( int range ) + { + QFont f( QScrollView::font() ); +- f.setPointSize( QFontInfo(f).pointSize() + range ); ++ QFontInfo fi(f); ++ if (fi.pointSize() <= 0) ++ f.setPixelSize( fi.pixelSize() + range ); ++ else ++ f.setPointSize( fi.pointSize() + range ); + setFont( f ); + } + +@@ -5782,7 +5786,11 @@ + void QTextEdit::zoomOut( int range ) + { + QFont f( QScrollView::font() ); +- f.setPointSize( QMAX( 1, QFontInfo(f).pointSize() - range ) ); ++ QFontInfo fi(f); ++ if (fi.pointSize() <= 0) ++ f.setPixelSize( QMAX( 1, fi.pixelSize() - range ) ); ++ else ++ f.setPointSize( QMAX( 1, fi.pointSize() - range ) ); + setFont( f ); + } + diff --git a/opensuse/core/qt3/0056-khotkeys_input_84434.patch b/opensuse/core/qt3/0056-khotkeys_input_84434.patch new file mode 100644 index 000000000..d6092c3e9 --- /dev/null +++ b/opensuse/core/qt3/0056-khotkeys_input_84434.patch @@ -0,0 +1,22 @@ +qt-bugs@ issue : 58251 +bugs.kde.org number : 84434 +applied: no +author: Lubos Lunak + +Fixes keyboard input action in KHotKeys (see bug #84434). + +================================================================================ +--- src/kernel/qapplication_x11.cpp ++++ src/kernel/qapplication_x11.cpp +@@ -5401,8 +5401,10 @@ + qt_auto_repeat_data *d = (qt_auto_repeat_data *) arg; + if (d->error || + event->xkey.window != d->window || +- event->xkey.keycode != d->keycode) ++ event->xkey.keycode != d->keycode) { ++ d->error = TRUE; + return FALSE; ++ } + + if (event->type == XKeyPress) { + d->error = (! d->release || event->xkey.time - d->timestamp > 10); diff --git a/opensuse/core/qt3/0059-qpopup_has_mouse.patch b/opensuse/core/qt3/0059-qpopup_has_mouse.patch new file mode 100644 index 000000000..18ae0081d --- /dev/null +++ b/opensuse/core/qt3/0059-qpopup_has_mouse.patch @@ -0,0 +1,69 @@ +qt-bugs@ issue : 49417 +bugs.kde.org number : 58719 +applied: no +author: Lubos Lunak + +Hello, + + please consider applying the two attached QPopupMenu patches fixing KDE bugs + #58719 and #74778 (http://bugs.kde.org/show_bug.cgi?id=58719, + http://bugs.kde.org/show_bug.cgi?id=74778), which complain about keyboard + navigation in popup menus being very uncomfortable because of being affected + by mouse position despite mouse not being used at all. + + - hasmouse.patch - (#58719) - use keyboard to open and navigate in any popup + menu and "accidentally" hit your mouse. Depending on the mouse cursor + position either no popup entry is selected or the random popup entry + happening to be at the cursor position becomes highlighted. The patch + basically copies the 'hasmouse' code from QMenuBar which prevents the mouse + having any effect on the popup if it's outside the popup geometry. + + [ ... #74778 ... ] + +================================================================================ +--- src/widgets/qpopupmenu.cpp ++++ src/widgets/qpopupmenu.cpp +@@ -253,6 +253,7 @@ + } scroll; + QSize calcSize; + QRegion mouseMoveBuffer; ++ uint hasmouse : 1; + }; + + static QPopupMenu* active_popup_menu = 0; +@@ -272,6 +273,7 @@ + d->scroll.scrollableSize = d->scroll.topScrollableIndex = 0; + d->scroll.scrollable = QPopupMenuPrivate::Scroll::ScrollNone; + d->scroll.scrolltimer = 0; ++ d->hasmouse = 0; + isPopupMenu = TRUE; + #ifndef QT_NO_ACCEL + autoaccel = 0; +@@ -1741,6 +1743,11 @@ + + int item = itemAtPos( e->pos() ); + if ( item == -1 ) { // no valid item ++ if( !d->hasmouse ) { ++ tryMenuBar( e ); ++ return; ++ } ++ d->hasmouse = 0; + int lastActItem = actItem; + actItem = -1; + if ( lastActItem >= 0 ) +@@ -1752,6 +1759,7 @@ + } + } else { // mouse on valid item + // but did not register mouse press ++ d->hasmouse = 1; + if ( (e->state() & Qt::MouseButtonMask) && !mouseBtDn ) + mouseBtDn = TRUE; // so mouseReleaseEvent will pop down + +@@ -2160,6 +2168,7 @@ + */ + void QPopupMenu::leaveEvent( QEvent * ) + { ++ d->hasmouse = 0; + if ( testWFlags( WStyle_Tool ) && style().styleHint(QStyle::SH_PopupMenu_MouseTracking, this) ) { + int lastActItem = actItem; + actItem = -1; diff --git a/opensuse/core/qt3/0060-qpopup_ignore_mousepos.patch b/opensuse/core/qt3/0060-qpopup_ignore_mousepos.patch new file mode 100644 index 000000000..50d48bd35 --- /dev/null +++ b/opensuse/core/qt3/0060-qpopup_ignore_mousepos.patch @@ -0,0 +1,60 @@ +qt-bugs@ issue : 49417 +bugs.kde.org number : 74778 +applied: no +author: Lubos Lunak + + Hello, + + please consider applying the two attached QPopupMenu patches fixing KDE bugs + #58719 and #74778 (http://bugs.kde.org/show_bug.cgi?id=58719, + http://bugs.kde.org/show_bug.cgi?id=74778), which complain about keyboard + navigation in popup menus being very uncomfortable because of being affected + by mouse position despite mouse not being used at all. + + [... #58719 ... ] + + - ignoremousepos.patch - (#74778) - use keyboard to open some popup which + doesn't show up at mouse position (e.g. Alt+F3 with KWin or the context menu + key with some file selected in Konqueror). If the mouse is positioned in the + area where the popup shows, the random entry happening to be at the cursor + position becomes highlighted. + The patch fixes this by ignoring mouse events that happen at mouse position + which was current when the popup was shown, i.e. all mouse move events that + actually aren't triggered by mouse move are ignored. I first wanted to ignore + only the very first mouse move event (which should be caused by EnterNotify + for the popup) but I realized that Qt's event handling causes the popup to + possibly get more than just one initial move event, caused by LeaveNotify + events for normal widgets being transformed to mouse move events for the + popup, so I have no better idea how to solve this problem. + +================================================================================ +--- src/widgets/qpopupmenu.cpp ++++ src/widgets/qpopupmenu.cpp +@@ -254,6 +254,7 @@ + QSize calcSize; + QRegion mouseMoveBuffer; + uint hasmouse : 1; ++ QPoint ignoremousepos; + }; + + static QPopupMenu* active_popup_menu = 0; +@@ -1356,6 +1357,7 @@ + popupActive = -1; + if(style().styleHint(QStyle::SH_PopupMenu_SubMenuPopupDelay, this)) + d->mouseMoveBuffer = QRegion(); ++ d->ignoremousepos = QCursor::pos(); + } + + /*! +@@ -1703,6 +1705,11 @@ + + void QPopupMenu::mouseMoveEvent( QMouseEvent *e ) + { ++ if( e->globalPos() == d->ignoremousepos ) { ++ return; ++ } ++ d->ignoremousepos = QPoint(); ++ + motion++; + + if ( parentMenu && parentMenu->isPopupMenu ) { diff --git a/opensuse/core/qt3/0079-compositing-types.patch b/opensuse/core/qt3/0079-compositing-types.patch new file mode 100644 index 000000000..7899cf584 --- /dev/null +++ b/opensuse/core/qt3/0079-compositing-types.patch @@ -0,0 +1,413 @@ +qt-bugs@ issue : none +bugs.kde.org number : none +applied: no +author: Lubos Lunak + +This patch adds support for window types used for compositing (popup menu, dropdown menu, +tooltip, combobox, dnd). + +--- src/kernel/qdnd_x11.cpp.sav 2007-05-25 18:56:23.000000000 +0200 ++++ src/kernel/qdnd_x11.cpp 2007-05-31 10:30:58.000000000 +0200 +@@ -261,6 +261,7 @@ public: + QWidget(QApplication::desktop()->screen( screen ), + 0, WStyle_Customize | WStyle_Tool | WStyle_NoBorder | WX11BypassWM ), oldpmser( 0 ), oldbmser( 0 ) + { ++ x11SetWindowType( X11WindowTypeDND ); + } + + void setPixmap(QPixmap pm, QPoint hot) +@@ -1221,6 +1222,7 @@ void QDragManager::move( const QPoint & + // recreate the pixmap on the new screen... + delete qt_xdnd_deco; + qt_xdnd_deco = new QShapedPixmapWidget( screen ); ++ qt_xdnd_deco->x11SetWindowTransient( dragSource->topLevelWidget()); + if (!QWidget::mouseGrabber()) { + updatePixmap(); + qt_xdnd_deco->grabMouse(); +@@ -1774,6 +1776,7 @@ bool QDragManager::drag( QDragObject * o + + dragSource = (QWidget *)(object->parent()); + ++ qt_xdnd_deco->x11SetWindowTransient( dragSource->topLevelWidget()); + qApp->installEventFilter( this ); + qt_xdnd_source_current_time = qt_x_time; + XSetSelectionOwner( QPaintDevice::x11AppDisplay(), qt_xdnd_selection, +--- src/kernel/qapplication_x11.cpp.sav 2007-05-29 16:24:58.000000000 +0200 ++++ src/kernel/qapplication_x11.cpp 2007-05-31 10:30:58.000000000 +0200 +@@ -268,6 +268,11 @@ Atom qt_net_wm_window_type_menu = 0; + Atom qt_net_wm_window_type_utility = 0; + Atom qt_net_wm_window_type_splash = 0; + Atom qt_net_wm_window_type_override = 0; // KDE extension ++Atom qt_net_wm_window_type_dropdown_menu = 0; ++Atom qt_net_wm_window_type_popup_menu = 0; ++Atom qt_net_wm_window_type_tooltip = 0; ++Atom qt_net_wm_window_type_combo = 0; ++Atom qt_net_wm_window_type_dnd = 0; + Atom qt_net_wm_frame_strut = 0; // KDE extension + Atom qt_net_wm_state_stays_on_top = 0; // KDE extension + Atom qt_net_wm_pid = 0; +@@ -1920,6 +1925,11 @@ void qt_init_internal( int *argcptr, cha + qt_x11_intern_atom( "_NET_WM_WINDOW_TYPE_UTILITY", &qt_net_wm_window_type_utility ); + qt_x11_intern_atom( "_NET_WM_WINDOW_TYPE_SPLASH", &qt_net_wm_window_type_splash ); + qt_x11_intern_atom( "_KDE_NET_WM_WINDOW_TYPE_OVERRIDE", &qt_net_wm_window_type_override ); ++ qt_x11_intern_atom( "_NET_WM_WINDOW_TYPE_DROPDOWN_MENU", &qt_net_wm_window_type_dropdown_menu ); ++ qt_x11_intern_atom( "_NET_WM_WINDOW_TYPE_POPUP_MENU", &qt_net_wm_window_type_popup_menu ); ++ qt_x11_intern_atom( "_NET_WM_WINDOW_TYPE_TOOLTIP", &qt_net_wm_window_type_tooltip ); ++ qt_x11_intern_atom( "_NET_WM_WINDOW_TYPE_COMBO", &qt_net_wm_window_type_combo ); ++ qt_x11_intern_atom( "_NET_WM_WINDOW_TYPE_DND", &qt_net_wm_window_type_dnd ); + qt_x11_intern_atom( "_KDE_NET_WM_FRAME_STRUT", &qt_net_wm_frame_strut ); + qt_x11_intern_atom( "_NET_WM_STATE_STAYS_ON_TOP", + &qt_net_wm_state_stays_on_top ); +--- src/kernel/qwidget_x11.cpp.sav 2007-05-25 18:56:23.000000000 +0200 ++++ src/kernel/qwidget_x11.cpp 2007-05-31 10:30:58.000000000 +0200 +@@ -125,6 +125,11 @@ extern Atom qt_net_wm_window_type_menu; + extern Atom qt_net_wm_window_type_utility; + extern Atom qt_net_wm_window_type_splash; + extern Atom qt_net_wm_window_type_override; ++extern Atom qt_net_wm_window_type_dropdown_menu; ++extern Atom qt_net_wm_window_type_popup_menu; ++extern Atom qt_net_wm_window_type_combo; ++extern Atom qt_net_wm_window_type_dnd; ++extern Atom qt_net_wm_window_type_tooltip; + extern Atom qt_net_wm_pid; + extern Atom qt_net_wm_user_time; + extern Atom qt_enlightenment_desktop; +@@ -448,10 +453,6 @@ void QWidget::create( WId window, bool i + x11Colormap() ); + #endif // QT_NO_XFTFREETYPE + +- // NET window types +- long net_wintypes[7] = { 0, 0, 0, 0, 0, 0, 0 }; +- int curr_wintype = 0; +- + // NET window states + long net_winstates[6] = { 0, 0, 0, 0, 0, 0 }; + int curr_winstate = 0; +@@ -473,7 +474,6 @@ void QWidget::create( WId window, bool i + if ( testWFlags(WStyle_Splash) ) { + if (qt_net_supports(qt_net_wm_window_type_splash)) { + clearWFlags( WX11BypassWM ); +- net_wintypes[curr_wintype++] = qt_net_wm_window_type_splash; + } else { + setWFlags( WX11BypassWM | WStyle_Tool | WStyle_NoBorder ); + } +@@ -482,27 +482,22 @@ void QWidget::create( WId window, bool i + mwmhints.decorations = 0L; + mwmhints.flags |= (1L << 1); // MWM_HINTS_DECORATIONS + +- if ( testWFlags( WStyle_NoBorder ) ) { +- // override netwm type - quick and easy for KDE noborder +- net_wintypes[curr_wintype++] = qt_net_wm_window_type_override; +- } else { +- if ( testWFlags( WStyle_NormalBorder | WStyle_DialogBorder ) ) { +- mwmhints.decorations |= (1L << 1); // MWM_DECOR_BORDER +- mwmhints.decorations |= (1L << 2); // MWM_DECOR_RESIZEH +- } ++ if ( testWFlags( WStyle_NormalBorder | WStyle_DialogBorder ) ) { ++ mwmhints.decorations |= (1L << 1); // MWM_DECOR_BORDER ++ mwmhints.decorations |= (1L << 2); // MWM_DECOR_RESIZEH ++ } + +- if ( testWFlags( WStyle_Title ) ) +- mwmhints.decorations |= (1L << 3); // MWM_DECOR_TITLE ++ if ( testWFlags( WStyle_Title ) ) ++ mwmhints.decorations |= (1L << 3); // MWM_DECOR_TITLE + +- if ( testWFlags( WStyle_SysMenu ) ) +- mwmhints.decorations |= (1L << 4); // MWM_DECOR_MENU ++ if ( testWFlags( WStyle_SysMenu ) ) ++ mwmhints.decorations |= (1L << 4); // MWM_DECOR_MENU + +- if ( testWFlags( WStyle_Minimize ) ) +- mwmhints.decorations |= (1L << 5); // MWM_DECOR_MINIMIZE ++ if ( testWFlags( WStyle_Minimize ) ) ++ mwmhints.decorations |= (1L << 5); // MWM_DECOR_MINIMIZE + +- if ( testWFlags( WStyle_Maximize ) ) +- mwmhints.decorations |= (1L << 6); // MWM_DECOR_MAXIMIZE +- } ++ if ( testWFlags( WStyle_Maximize ) ) ++ mwmhints.decorations |= (1L << 6); // MWM_DECOR_MAXIMIZE + + if (testWFlags(WStyle_Tool)) { + wsa.save_under = True; +@@ -522,23 +517,6 @@ void QWidget::create( WId window, bool i + } + } + +- // ### need a better way to do this +- if (inherits("QPopupMenu")) { +- // menu netwm type +- net_wintypes[curr_wintype++] = qt_net_wm_window_type_menu; +- } else if (inherits("QToolBar")) { +- // toolbar netwm type +- net_wintypes[curr_wintype++] = qt_net_wm_window_type_toolbar; +- } else if (testWFlags(WStyle_Customize) && testWFlags(WStyle_Tool)) { +- // utility netwm type +- net_wintypes[curr_wintype++] = qt_net_wm_window_type_utility; +- } +- +- if (dialog) // dialog netwm type +- net_wintypes[curr_wintype++] = qt_net_wm_window_type_dialog; +- // normal netwm type - default +- net_wintypes[curr_wintype++] = qt_net_wm_window_type_normal; +- + // stays on top + if (testWFlags(WStyle_StaysOnTop)) { + net_winstates[curr_winstate++] = qt_net_wm_state_above; +@@ -573,6 +551,7 @@ void QWidget::create( WId window, bool i + wsa.save_under = True; + XChangeWindowAttributes( dpy, id, CWOverrideRedirect | CWSaveUnder, + &wsa ); ++ x11SetWindowType(); + } else if ( topLevel && !desktop ) { // top-level widget + QWidget *p = parentWidget(); // real parent + if (p) +@@ -632,12 +611,7 @@ void QWidget::create( WId window, bool i + else + XDeleteProperty(dpy, id, qt_xa_motif_wm_hints); + +- // set _NET_WM_WINDOW_TYPE +- if (curr_wintype > 0) +- XChangeProperty(dpy, id, qt_net_wm_window_type, XA_ATOM, 32, PropModeReplace, +- (unsigned char *) net_wintypes, curr_wintype); +- else +- XDeleteProperty(dpy, id, qt_net_wm_window_type); ++ x11SetWindowType(); + + // set _NET_WM_WINDOW_STATE + if (curr_winstate > 0) +@@ -896,6 +870,64 @@ void QWidget::reparentSys( QWidget *pare + setMouseTracking(mouse_tracking); + } + ++// Sets the EWMH (netwm) window type. Needed as a separate function ++// because create() may be too soon in some cases. ++void QWidget::x11SetWindowType( X11WindowType type ) ++{ ++ // NET window types ++ long net_wintypes[7] = { 0, 0, 0, 0, 0, 0, 0 }; ++ int curr_wintype = 0; ++ if( testWFlags(WType_Desktop)) ++ return; ++ if( type == X11WindowTypeSelect ) { ++ if ( testWFlags(WStyle_Splash)) { ++ if (qt_net_supports(qt_net_wm_window_type_splash)) { ++ net_wintypes[curr_wintype++] = qt_net_wm_window_type_splash; ++ } ++ } else if (inherits("QToolBar")) { ++ // toolbar netwm type ++ net_wintypes[curr_wintype++] = qt_net_wm_window_type_toolbar; ++ } else if (testWFlags(WStyle_Customize) && testWFlags(WStyle_Tool)) { ++ // utility netwm type ++ net_wintypes[curr_wintype++] = qt_net_wm_window_type_utility; ++ } else if (testWFlags(WType_Dialog)) { ++ // dialog netwm type ++ net_wintypes[curr_wintype++] = qt_net_wm_window_type_dialog; ++ } ++ } else if( type == X11WindowTypeCombo ) { ++ // combo netwm type ++ net_wintypes[curr_wintype++] = qt_net_wm_window_type_combo; ++ } else if( type == X11WindowTypeDND ) { ++ // dnd netwm type ++ net_wintypes[curr_wintype++] = qt_net_wm_window_type_dnd; ++ } else if( type == X11WindowTypeDropdown ) { ++ // dropdown netwm type ++ net_wintypes[curr_wintype++] = qt_net_wm_window_type_dropdown_menu; ++ } else if( type == X11WindowTypePopup ) { ++ // popup netwm type ++ net_wintypes[curr_wintype++] = qt_net_wm_window_type_popup_menu; ++ } else if( type == X11WindowTypeMenu ) { ++ // menu netwm type ++ net_wintypes[curr_wintype++] = qt_net_wm_window_type_menu; ++ } else if( type == X11WindowTypeTooltip ) { ++ // tooltip netwm type ++ net_wintypes[curr_wintype++] = qt_net_wm_window_type_tooltip; ++ } ++ ++ // normal netwm type - default ++ net_wintypes[curr_wintype++] = qt_net_wm_window_type_normal; ++ // set _NET_WM_WINDOW_TYPE ++ if (curr_wintype > 0) ++ XChangeProperty(x11Display(), winId(), qt_net_wm_window_type, XA_ATOM, 32, PropModeReplace, ++ (unsigned char *) net_wintypes, curr_wintype); ++ else ++ XDeleteProperty(x11Display(), winId(), qt_net_wm_window_type); ++} ++ ++void QWidget::x11SetWindowTransient( QWidget* parent ) ++{ ++ XSetTransientForHint( x11Display(), winId(), parent->winId()); ++} + + /*! + Translates the widget coordinate \a pos to global screen +--- src/kernel/qwidget.h.sav 2007-05-25 18:56:23.000000000 +0200 ++++ src/kernel/qwidget.h 2007-05-31 10:30:58.000000000 +0200 +@@ -464,7 +464,19 @@ public: + CGContextRef macCGContext(bool clipped=TRUE) const; + #endif + #endif +- ++#if defined(Q_WS_X11) ++ enum X11WindowType { ++ X11WindowTypeSelect, ++ X11WindowTypeCombo, ++ X11WindowTypeDND, ++ X11WindowTypeTooltip, ++ X11WindowTypeMenu, // torn-off ++ X11WindowTypeDropdown, ++ X11WindowTypePopup ++ }; ++ void x11SetWindowType( X11WindowType type = X11WindowTypeSelect ); ++ void x11SetWindowTransient( QWidget* parent ); ++#endif + void setWindowOpacity(double level); + double windowOpacity() const; + +--- src/dialogs/qdialog.cpp.sav 2007-05-25 18:56:23.000000000 +0200 ++++ src/dialogs/qdialog.cpp 2007-05-31 10:30:58.000000000 +0200 +@@ -705,7 +701,7 @@ void QDialog::show() + && qApp->mainWidget() && qApp->mainWidget()->isVisible() + && !qApp->mainWidget()->isMinimized()) { + // make sure the transient for hint is set properly for modal dialogs +- XSetTransientForHint( x11Display(), winId(), qApp->mainWidget()->winId() ); ++ x11SetWindowTransient( qApp->mainWidget()); + } + #endif // Q_WS_X11 + +--- src/widgets/qtooltip.cpp.sav 2007-05-25 18:56:23.000000000 +0200 ++++ src/widgets/qtooltip.cpp 2007-05-31 10:30:58.000000000 +0200 +@@ -72,6 +72,7 @@ public: + polish(); + setText(text); + adjustSize(); ++ x11SetWindowType( X11WindowTypeTooltip ); + } + void setWidth( int w ) { resize( sizeForWidth( w ) ); } + }; +@@ -528,6 +529,10 @@ void QTipManager::showTip() + if (!widget) + return; + ++#ifdef Q_WS_X11 ++ label->x11SetWindowTransient( widget->topLevelWidget()); ++#endif ++ + #ifdef Q_WS_MAC + QRect screen = QApplication::desktop()->availableGeometry( scr ); + #else +--- src/widgets/qcombobox.cpp.sav 2007-05-25 18:56:23.000000000 +0200 ++++ src/widgets/qcombobox.cpp 2007-05-31 10:49:13.000000000 +0200 +@@ -389,12 +389,8 @@ public: + inline QListBox * listBox() { return lBox; } + inline QComboBoxPopup * popup() { return pop; } + void updateLinedGeometry(); +- +- void setListBox( QListBox *l ) { lBox = l ; usingLBox = TRUE; +- l->setMouseTracking( TRUE );} +- +- void setPopupMenu( QComboBoxPopup * pm, bool isPopup=TRUE ) +- { pop = pm; if(isPopup) usingLBox = FALSE; } ++ void setListBox( QListBox *l ); ++ void setPopupMenu( QComboBoxPopup * pm, bool isPopup=TRUE ); + + int current; + int maxCount; +@@ -440,6 +436,30 @@ void QComboBoxData::updateLinedGeometry( + ed->setGeometry( r ); + } + ++void QComboBoxData::setListBox( QListBox *l ) ++{ ++ lBox = l; ++ usingLBox = TRUE; ++ l->setMouseTracking( TRUE ); ++#ifdef Q_WS_X11 ++ l->x11SetWindowType( QWidget::X11WindowTypeCombo ); ++ l->x11SetWindowTransient( combo->topLevelWidget()); ++#endif ++} ++ ++void QComboBoxData::setPopupMenu( QComboBoxPopup * pm, bool isPopup ) ++{ ++ pop = pm; ++ if(isPopup) ++ usingLBox = FALSE; ++#ifdef Q_WS_X11 ++ if( pm ) { ++ pm->x11SetWindowType( QWidget::X11WindowTypeCombo ); ++ pm->x11SetWindowTransient( combo->topLevelWidget()); ++ } ++#endif ++} ++ + static inline bool checkInsertIndex( const char *method, const char * name, + int count, int *index) + { +--- src/widgets/qpopupmenu.cpp.sav 2007-05-25 18:56:23.000000000 +0200 ++++ src/widgets/qpopupmenu.cpp 2007-05-31 11:09:22.000000000 +0200 +@@ -298,6 +298,9 @@ QPopupMenu::QPopupMenu( QWidget *parent, + connectModalRecursionSafety = 0; + + setFocusPolicy( StrongFocus ); ++#ifdef Q_WS_X11 ++ x11SetWindowType( X11WindowTypePopup ); ++#endif + } + + /*! +@@ -537,6 +540,29 @@ void QPopupMenu::popup( const QPoint &po + emit aboutToShow(); + updateSize(TRUE); + } ++#ifdef Q_WS_X11 ++#ifndef QT_NO_MENUBAR ++ QMenuData *top = this; // find top level ++ while ( top->parentMenu ) ++ top = top->parentMenu; ++ if( top->isMenuBar ) ++ x11SetWindowType( X11WindowTypeDropdown ); ++ if( parentMenu && parentMenu->isMenuBar ) ++ x11SetWindowTransient( static_cast< QMenuBar* >( parentMenu )->topLevelWidget()); ++#endif ++ if( parentMenu && !parentMenu->isMenuBar ) ++ x11SetWindowTransient( static_cast< QPopupMenu* >( parentMenu )); ++ if( !parentMenu ) { ++ // hackish ... try to find the main window related to this popup ++ QWidget* parent = parentWidget() ? parentWidget()->topLevelWidget() : NULL; ++ if( parent == NULL ) ++ parent = QApplication::widgetAt( pos ); ++ if( parent == NULL ) ++ parent = qApp->activeWindow(); ++ if( parent != NULL ) ++ x11SetWindowTransient( parent ); ++ } ++#endif + + int sw = screen.width(); // screen width + int sh = screen.height(); // screen height +@@ -1390,6 +1416,13 @@ void QPopupMenu::hide() + #if defined(QT_ACCESSIBILITY_SUPPORT) + QAccessible::updateAccessibility( this, 0, QAccessible::PopupMenuEnd ); + #endif ++#ifndef QT_NO_MENUBAR ++ QMenuData *top = this; // find top level ++ while ( top->parentMenu ) ++ top = top->parentMenu; ++ if( top->isMenuBar ) ++ x11SetWindowType( X11WindowTypePopup ); // reset ++#endif + parentMenu = 0; + hidePopups(); + QWidget::hide(); +@@ -2713,6 +2746,9 @@ void QPopupMenu::toggleTearOff() + geometry().topLeft(), FALSE ); + p->mitems->setAutoDelete( FALSE ); + p->tornOff = TRUE; ++#ifdef Q_WS_X11 ++ p->x11SetWindowType( X11WindowTypeMenu ); ++#endif + for ( QMenuItemListIt it( *mitems ); it.current(); ++it ) { + if ( it.current()->id() != QMenuData::d->aInt && !it.current()->widget() ) + p->mitems->append( it.current() ); diff --git a/opensuse/core/qt3/0080-net-wm-sync-request.patch b/opensuse/core/qt3/0080-net-wm-sync-request.patch new file mode 100644 index 000000000..b3e23cd13 --- /dev/null +++ b/opensuse/core/qt3/0080-net-wm-sync-request.patch @@ -0,0 +1,301 @@ +This qt-copy patch has been slightly modified to apply to the SUSE package +(does not apply directly because of the immodule patch). + +--- src/kernel/qwidget_x11.cpp.sav 2007-08-29 15:04:42.000000000 +0200 ++++ src/kernel/qwidget_x11.cpp 2007-08-29 15:06:17.000000000 +0200 +@@ -85,6 +85,12 @@ static QWidget *keyboardGrb = 0; + extern Time qt_x_time; + extern Time qt_x_user_time; + ++#ifndef QT_NO_XSYNC ++extern Atom qt_net_wm_sync_request_counter; ++extern Atom qt_net_wm_sync_request; ++extern bool qt_use_xsync; ++#endif ++ + // defined in qfont_x11.cpp + extern bool qt_has_xft; + +@@ -593,11 +599,14 @@ void QWidget::create( WId window, bool i + + XResizeWindow( dpy, id, crect.width(), crect.height() ); + XStoreName( dpy, id, qAppName() ); +- Atom protocols[4]; ++ Atom protocols[5]; + int n = 0; + protocols[n++] = qt_wm_delete_window; // support del window protocol + protocols[n++] = qt_wm_take_focus; // support take focus window protocol + protocols[n++] = qt_net_wm_ping; // support _NET_WM_PING protocol ++#ifndef QT_NO_XSYNC ++ protocols[n++] = qt_net_wm_sync_request;// support the _NET_WM_SYNC_REQUEST protocol ++#endif + if ( testWFlags( WStyle_ContextHelp ) ) + protocols[n++] = qt_net_wm_context_help; + XSetWMProtocols( dpy, id, protocols, n ); +@@ -623,6 +632,14 @@ void QWidget::create( WId window, bool i + XChangeProperty(dpy, id, qt_net_wm_pid, XA_CARDINAL, 32, PropModeReplace, + (unsigned char *) &curr_pid, 1); + ++#ifndef QT_NO_XSYNC ++ // set _NET_WM_SYNC_COUNTER ++ createSyncCounter(); ++ long counterVal = topData()->syncCounter; ++ XChangeProperty( dpy, id, qt_net_wm_sync_request_counter, XA_CARDINAL, 32, PropModeReplace, ++ (unsigned char*) &counterVal, 1); ++#endif ++ + // when we create a toplevel widget, the frame strut should be dirty + fstrut_dirty = 1; + +@@ -722,6 +739,9 @@ void QWidget::destroy( bool destroyWindo + if ( destroyWindow ) + qt_XDestroyWindow( this, x11Display(), winid ); + } ++#ifndef QT_NO_XSYNC ++ destroySyncCounter(); ++#endif + setWinId( 0 ); + + extern void qPRCleanup( QWidget *widget ); // from qapplication_x11.cpp +@@ -781,6 +801,10 @@ void QWidget::reparentSys( QWidget *pare + destroyInputContext(); + } + ++#ifndef QT_NO_XSYNC ++ destroySyncCounter(); ++#endif ++ + if ( isTopLevel() || !parent ) // we are toplevel, or reparenting to toplevel + topData()->parentWinId = 0; + +@@ -2464,6 +2488,11 @@ void QWidget::createTLSysExtra() + // created lazily + extra->topextra->xic = 0; + #endif ++#ifndef QT_NO_XSYNC ++ extra->topextra->syncCounter = 0; ++ extra->topextra->syncRequestValue[0] = 0; ++ extra->topextra->syncRequestValue[1] = 0; ++#endif + } + + void QWidget::deleteTLSysExtra() +@@ -2510,6 +2539,51 @@ void QWidget::checkChildrenDnd() + } + } + ++ ++#ifndef QT_NO_XSYNC ++// create a window's XSyncCounter ++void QWidget::createSyncCounter() ++{ ++ if( !qt_use_xsync || !isTopLevel() || topData()->syncCounter ) ++ return; ++ XSyncValue zero; ++ XSyncIntToValue( &zero, 0 ); ++ topData()->syncCounter = XSyncCreateCounter( x11Display(), zero ); ++} ++ ++// destroy a window's XSyncCounter ++void QWidget::destroySyncCounter() ++{ ++ if( !qt_use_xsync || !extra || !extra->topextra ++ || !extra->topextra->syncCounter ) ++ return; ++ XSyncDestroyCounter( x11Display(), extra->topextra->syncCounter ); ++ extra->topextra->syncCounter = 0; ++} ++ ++// increment a window's XSyncCounter ++void QWidget::incrementSyncCounter() ++{ ++ if( qt_use_xsync && topData()->syncCounter && ++ !(topData()->syncRequestValue[0] == 0 && ++ topData()->syncRequestValue[1] == 0) ) { ++ XSyncValue val; ++ XSyncIntsToValue( &val, topData()->syncRequestValue[ 0 ], topData()->syncRequestValue[ 1 ] ); ++ XSyncSetCounter( x11Display(), topData()->syncCounter, val ); ++ topData()->syncRequestValue[0] = topData()->syncRequestValue[1] = 0; ++ } ++} ++ ++// handle _NET_WM_SYNC_REQUEST ++void QWidget::handleSyncRequest( void* ev ) ++{ ++ XEvent* xev = (XEvent*)ev; ++ topData()->syncRequestValue[ 0 ] = xev->xclient.data.l[ 2 ]; ++ topData()->syncRequestValue[ 1 ] = xev->xclient.data.l[ 3 ]; ++} ++#endif // QT_NO_XSYNC ++ ++ + /*! + \property QWidget::acceptDrops + \brief whether drop events are enabled for this widget +--- src/kernel/qt_x11_p.h.sav 2007-08-29 15:04:42.000000000 +0200 ++++ src/kernel/qt_x11_p.h 2007-08-29 15:05:27.000000000 +0200 +@@ -174,6 +174,11 @@ extern "C" { + #endif // QT_NO_XRENDER + + ++#ifndef QT_NO_XSYNC ++# include ++#endif // QT_NO_XSYNC ++ ++ + #ifndef QT_NO_XKB + # include + #endif // QT_NO_XKB +--- src/kernel/qwidget.h.sav 2007-08-29 15:04:42.000000000 +0200 ++++ src/kernel/qwidget.h 2007-08-29 15:05:52.000000000 +0200 +@@ -605,6 +605,14 @@ private: + void focusInputContext(); + void unfocusInputContext(); + void checkChildrenDnd(); ++ ++#ifndef QT_NO_XSYNC ++ void createSyncCounter(); ++ void destroySyncCounter(); ++ void incrementSyncCounter(); ++ void handleSyncRequest( void* ev ); ++#endif ++ + #elif defined(Q_WS_MAC) + uint own_id : 1, macDropEnabled : 1; + EventHandlerRef window_event; +@@ -986,6 +994,10 @@ struct Q_EXPORT QTLWExtra { + #if defined(QT_NO_IM_EXTENSIONS) + void *xic; // Input Context + #endif ++#ifndef QT_NO_XSYNC ++ ulong syncCounter; ++ uint syncRequestValue[2]; ++#endif + #endif + #if defined(Q_WS_MAC) + WindowGroupRef group; +--- src/kernel/qapplication_x11.cpp.sav 2007-08-29 15:04:42.000000000 +0200 ++++ src/kernel/qapplication_x11.cpp 2007-08-29 15:05:27.000000000 +0200 +@@ -288,6 +288,11 @@ Atom *qt_net_supported_list = 0; + Window *qt_net_virtual_root_list = 0; + + ++// X11 SYNC support ++#ifndef QT_NO_XSYNC ++Atom qt_net_wm_sync_request_counter = 0; ++Atom qt_net_wm_sync_request = 0; ++#endif + + // client leader window + Window qt_x11_wm_client_leader = 0; +@@ -312,6 +317,13 @@ static int xrandr_eventbase; + // Display + Q_EXPORT bool qt_use_xrender = FALSE; + ++#ifndef QT_NO_XSYNC ++// True if SYNC extension exists on the connected display ++bool qt_use_xsync = FALSE; ++static int xsync_eventbase; ++static int xsync_errorbase; ++#endif ++ + // modifier masks for alt/meta - detected when the application starts + static long qt_alt_mask = 0; + static long qt_meta_mask = 0; +@@ -2007,6 +2019,11 @@ void qt_init_internal( int *argcptr, cha + qt_x11_intern_atom( "UTF8_STRING", &qt_utf8_string ); + qt_x11_intern_atom( "_SGI_DESKS_MANAGER", &qt_sgi_desks_manager ); + ++#ifndef QT_NO_XSYNC ++ qt_x11_intern_atom( "_NET_WM_SYNC_REQUEST_COUNTER", &qt_net_wm_sync_request_counter ); ++ qt_x11_intern_atom( "_NET_WM_SYNC_REQUEST", &qt_net_wm_sync_request ); ++#endif ++ + qt_xdnd_setup(); + qt_x11_motifdnd_init(); + +@@ -2043,6 +2060,15 @@ void qt_init_internal( int *argcptr, cha + } + #endif // QT_NO_XRENDER + ++#ifndef QT_NO_XSYNC ++ // Try to initialize SYNC extension on the connected display ++ int xsync_major, xsync_minor; ++ if ( XSyncQueryExtension( appDpy, &xsync_eventbase, &xsync_errorbase ) && ++ XSyncInitialize( appDpy, &xsync_major, &xsync_minor ) ) { ++ qt_use_xsync = TRUE; ++ } ++#endif ++ + #ifndef QT_NO_XKB + // If XKB is detected, set the GrabsUseXKBState option so input method + // compositions continue to work (ie. deadkeys) +@@ -3196,6 +3222,10 @@ int QApplication::x11ClientMessage(QWidg + XSendEvent( event->xclient.display, event->xclient.window, + False, SubstructureNotifyMask|SubstructureRedirectMask, event ); + } ++#ifndef QT_NO_XSYNC ++ } else if (a == qt_net_wm_sync_request ) { ++ widget->handleSyncRequest( event ); ++#endif + } + } else if ( event->xclient.message_type == qt_qt_scrolldone ) { + widget->translateScrollDoneEvent(event); +@@ -5818,6 +5848,21 @@ bool QETWidget::translateScrollDoneEvent + return FALSE; + } + ++#if defined(Q_C_CALLBACKS) ++extern "C" { ++#endif ++#ifndef QT_NO_XSYNC ++static Bool qt_net_wm_sync_request_scanner(Display*, XEvent* event, XPointer arg) ++{ ++ return (event->type == ClientMessage && event->xclient.window == *(Window*)arg ++ && event->xclient.message_type == qt_wm_protocols ++ && event->xclient.data.l[ 0 ] == qt_net_wm_sync_request ); ++} ++#endif ++ ++#if defined(Q_C_CALLBACKS) ++} ++#endif + + // + // ConfigureNotify (window move and resize) event translation +@@ -5849,6 +5894,7 @@ bool QETWidget::translateConfigEvent( co + if (! extra || extra->compress_events) { + // ConfigureNotify compression for faster opaque resizing + XEvent otherEvent; ++ int compressed_configs = 0; + while ( XCheckTypedWindowEvent( x11Display(), winId(), ConfigureNotify, + &otherEvent ) ) { + if ( qt_x11EventFilter( &otherEvent ) ) +@@ -5869,7 +5915,18 @@ bool QETWidget::translateConfigEvent( co + newCPos.ry() = otherEvent.xconfigure.y + + otherEvent.xconfigure.border_width; + } ++ ++compressed_configs; ++ } ++#ifndef QT_NO_XSYNC ++ // _NET_WM_SYNC_REQUEST compression ++ Window wid = winId(); ++ while ( compressed_configs && ++ XCheckIfEvent( x11Display(), &otherEvent, ++ qt_net_wm_sync_request_scanner, (XPointer)&wid ) ) { ++ handleSyncRequest( (void*)&otherEvent ); ++ --compressed_configs; + } ++#endif + } + + QRect cr ( geometry() ); +@@ -5923,6 +5980,8 @@ bool QETWidget::translateConfigEvent( co + repaint( !testWFlags(WResizeNoErase) || transbg ); + } + ++ incrementSyncCounter(); ++ + return TRUE; + } + diff --git a/opensuse/core/qt3/0085-fix-buildkey.diff b/opensuse/core/qt3/0085-fix-buildkey.diff new file mode 100644 index 000000000..5891d6144 --- /dev/null +++ b/opensuse/core/qt3/0085-fix-buildkey.diff @@ -0,0 +1,22 @@ +--- configure ++++ configure +@@ -3140,15 +3140,15 @@ case "$COMPILER" in + g++*) + # GNU C++ + QMAKE_CONF_COMPILER=`grep "QMAKE_CXX[^_A-Z0-9a-z]" $QMAKESPEC/qmake.conf | sed "s,.* *= *\(.*\)$,\1,"` +- COMPILER_VERSION=`${QMAKE_CONF_COMPILER} --version 2>/dev/null` ++ COMPILER_VERSION=`${QMAKE_CONF_COMPILER} --version 2>/dev/null | sed 's,^[^0-9]*,,g'` + case "$COMPILER_VERSION" in +- *2.95.*) ++ 2.95.*) + COMPILER_VERSION="2.95.*" + ;; +- *3.*) ++ 3.*) + COMPILER_VERSION="3.*" + ;; +- *4.*) ++ 4.*) + COMPILER_VERSION="4" + ;; + *) diff --git a/opensuse/core/qt3/add_qexport_visibility.patch b/opensuse/core/qt3/add_qexport_visibility.patch new file mode 100644 index 000000000..da256192c --- /dev/null +++ b/opensuse/core/qt3/add_qexport_visibility.patch @@ -0,0 +1,63 @@ +Index: src/kernel/qgplugin.h +================================================================================ +--- src/kernel/qgplugin.h ++++ src/kernel/qgplugin.h +@@ -90,35 +90,19 @@ + return i->iface(); \ + } + +-# ifdef Q_WS_WIN +-# ifdef Q_CC_BOR +-# define Q_EXPORT_PLUGIN(PLUGIN) \ +- Q_PLUGIN_VERIFICATION_DATA \ +- Q_EXTERN_C __declspec(dllexport) \ +- const char * __stdcall qt_ucm_query_verification_data() \ +- { return qt_ucm_verification_data; } \ +- Q_EXTERN_C __declspec(dllexport) QUnknownInterface* \ +- __stdcall ucm_instantiate() \ +- Q_PLUGIN_INSTANTIATE( PLUGIN ) +-# else +-# define Q_EXPORT_PLUGIN(PLUGIN) \ +- Q_PLUGIN_VERIFICATION_DATA \ +- Q_EXTERN_C __declspec(dllexport) \ +- const char *qt_ucm_query_verification_data() \ +- { return qt_ucm_verification_data; } \ +- Q_EXTERN_C __declspec(dllexport) QUnknownInterface* ucm_instantiate() \ +- Q_PLUGIN_INSTANTIATE( PLUGIN ) +-# endif +-# else +-# define Q_EXPORT_PLUGIN(PLUGIN) \ ++#if defined(Q_WS_WIN) && defined(Q_CC_BOR) ++# define Q_STDCALL __stdcall ++#else ++# define Q_STDCALL ++#endif ++ ++#define Q_EXPORT_PLUGIN(PLUGIN) \ + Q_PLUGIN_VERIFICATION_DATA \ +- Q_EXTERN_C \ +- const char *qt_ucm_query_verification_data() \ ++ Q_EXTERN_C Q_EXPORT \ ++ const char * Q_STDCALL qt_ucm_query_verification_data() \ + { return qt_ucm_verification_data; } \ +- Q_EXTERN_C QUnknownInterface* ucm_instantiate() \ ++ Q_EXTERN_C Q_EXPORT QUnknownInterface* Q_STDCALL ucm_instantiate() \ + Q_PLUGIN_INSTANTIATE( PLUGIN ) +-# endif +- + #endif + + struct QUnknownInterface; +--- src/tools/qglobal.h ++++ src/tools/qglobal.h +@@ -882,6 +882,10 @@ + # define Q_TEMPLATE_EXTERN + # undef Q_DISABLE_COPY /* avoid unresolved externals */ + # endif ++#elif defined(Q_CC_GNU) && __GNUC__ - 0 >= 4 ++# define Q_EXPORT __attribute__((visibility("default"))) ++# undef QT_MAKEDLL /* ignore these for other platforms */ ++# undef QT_DLL + #else + # undef QT_MAKEDLL /* ignore these for other platforms */ + # undef QT_DLL diff --git a/opensuse/core/qt3/aliasing.diff b/opensuse/core/qt3/aliasing.diff new file mode 100644 index 000000000..88ef366b5 --- /dev/null +++ b/opensuse/core/qt3/aliasing.diff @@ -0,0 +1,11 @@ +--- src/qt.pro ++++ src/qt.pro +@@ -40,6 +40,8 @@ + XML_CPP = xml + STYLES_CPP = styles + EMBEDDED_CPP = embedded ++QMAKE_CFLAGS += -fno-strict-aliasing ++QMAKE_CFLAGS_MT += -fno-strict-aliasing + + win32 { + contains(QT_PRODUCT,qt-internal) { diff --git a/opensuse/core/qt3/assistant3.desktop b/opensuse/core/qt3/assistant3.desktop new file mode 100644 index 000000000..8cb79809c --- /dev/null +++ b/opensuse/core/qt3/assistant3.desktop @@ -0,0 +1,10 @@ +[Desktop Entry] +Categories=Qt;Development; +Encoding=UTF-8 +Exec=/usr/lib/qt3/bin/assistant +Name=Qt Assistant +GenericName=Document Browser +X-KDE-StartupNotify=true +Icon=assistant3 +Terminal=false +Type=Application diff --git a/opensuse/core/qt3/assistant3.png b/opensuse/core/qt3/assistant3.png new file mode 100644 index 000000000..a50dc9ccb Binary files /dev/null and b/opensuse/core/qt3/assistant3.png differ diff --git a/opensuse/core/qt3/attributes b/opensuse/core/qt3/attributes new file mode 100644 index 000000000..d43c40132 --- /dev/null +++ b/opensuse/core/qt3/attributes @@ -0,0 +1,72 @@ +summary.qt3 A library for developing applications with graphical user interfaces +summary.qt3-devel Include Files and Libraries mandatory for Development +summary.qt3-devel-doc Documentation for the Qt 3 Development Kit +summary.qt3-devel-examples Programming Examples for Qt 3 +summary.qt3-devel-tools User Interface Builder and other tools (designer, assistant, linguist) +summary.qt3-extensions Qt3 Extensions +summary.qt3-man Qt 3 Man Pages +summary.qt3-mysql MySQL Plug-In for Qt +summary.qt3-postgresql A PostgreSQL Plug-In for Qt +summary.qt3-sqlite SQLite Database Plug-In for Qt +summary.qt3-unixODBC A UnixODBC Plug-In for Qt ++description.qt3 +Qt is a program library for developing applications with graphical user +interfaces. It allows you to rapidly develop professional programs. The +Qt library is available not only for Linux but for a great number of +Unices and even for Windows. Thus it is possible to write programs that +may be easily ported to those platforms. + +You need a license for using Qt with a non-GPL application, which can +be acquired from sales@trolltech.com. + +See /usr/share/doc/packages/qt3 for details about the new features of +the current Qt library! +-description.qt3 ++description.qt3-devel +You need this package if you want to compile programs with Qt 3. It +contains the "Qt Crossplatform Development Kit 2". Under /usr/lib/qt3 +you will find include files. + +You need a license for using Qt with a non-GPL application. A license +can be acquired at sales@trolltech.com. +-description.qt3-devel ++description.qt3-devel-doc +This package contains the documentation for the Qt 3 Development Kit. + +You will find documentation, precompiled examples, and a tutorial for +getting started with Qt in /usr/lib/qt3/doc. +-description.qt3-devel-doc ++description.qt3-devel-examples +This package contains small executables with code to demonstrate Qt +programming. + +Have a look in /usr/share/doc/packages/qt3/examples/. +-description.qt3-devel-examples ++description.qt3-devel-tools +The designer creates .ui files. The uic generates C++ code from these +files. The package also contains the Qt Assistant (Qt documentation +browser) and the Qt Linguist (for translations). +-description.qt3-devel-tools ++description.qt3-extensions +This package contains extension libraries for Qt 3, such as the +Netscape plug-in modules. +-description.qt3-extensions ++description.qt3-man +This package contains all the man pages for all the Qt 3 classes. +-description.qt3-man ++description.qt3-mysql +Plug-in for using the MySQL database with the generic Qt database +interface. +-description.qt3-mysql ++description.qt3-postgresql +A Plug-in for using the PostgreSQL database with the generic Qt +database interface. +-description.qt3-postgresql ++description.qt3-sqlite +The Qt database supports SQLite with this plug-in. (No configured and +running daemon is required.) +-description.qt3-sqlite ++description.qt3-unixODBC +A plug-in for using UnixODBC supported databases with the generic Qt +database interface. +-description.qt3-unixODBC diff --git a/opensuse/core/qt3/baselibs.conf b/opensuse/core/qt3/baselibs.conf new file mode 100644 index 000000000..5f7a62512 --- /dev/null +++ b/opensuse/core/qt3/baselibs.conf @@ -0,0 +1,12 @@ +qt3 +qt3-devel +arch ppc package qt3-devel-doc +arch sparcv9 package qt3-devel-doc +arch ppc package qt3-devel-tools +arch sparcv9 package qt3-devel-tools +arch ppc package qt3-mysql +arch sparcv9 package qt3-mysql +arch ppc package qt3-postgresql +arch sparcv9 package qt3-postgresql +arch ppc package qt3-unixODBC +arch sparcv9 package qt3-unixODBC diff --git a/opensuse/core/qt3/build_script.sh b/opensuse/core/qt3/build_script.sh new file mode 100644 index 000000000..e9c47db13 --- /dev/null +++ b/opensuse/core/qt3/build_script.sh @@ -0,0 +1,99 @@ + +function fix_qconfig_h { + mv include/qconfig.h include/qconfig.h.orig + sed -e '1i\ +#ifndef SuSE_QCONFIG_ALREADY_INCLUDED \ +#define SuSE_QCONFIG_ALREADY_INCLUDED 1 \ +#define PLUGIN_PATH_EXTENSION "'$PLUGIN_PATH'" \ + ' -e s@${RPM_BUILD_ROOT}@/@ -e '$a\ +#endif' include/qconfig.h.orig \ + > include/qconfig.h + +} + +function call_configure { + EXTRA_OPTIONS=$@ + OPENGL="-dlopen-opengl" + case $EXTRA_OPTIONS in + *-static*) + OPENGL="-no-dlopen-opengl" + ;; + *) + ;; + esac + + [ "$WLIB" == "lib64" ] && PLATFORM=linux-g++-64 || PLATFORM=linux-g++ + LARGEFILE="-largefile" + XCURSOR="-xcursor" + XFT="-xft -xrender -I/usr/include/freetype2/ " + [ -e /usr/$WLIB/libmng.so ] && LIBMNG="-system-libmng -plugin-imgfmt-mng" || LIBMNG="-qt-libmng " + PGSQL="-plugin-sql-psql -I/usr/include -I/usr/include/pgsql/ -I/usr/include/pgsql/server" + ODBC="-plugin-sql-odbc" + + if [ -f /.buildenv ] && grep -q BUILD_BASENAME=beta- /.buildenv ; then + export NO_BRP_STRIP_DEBUG=true + export DEBUG="-debug" + else + export DEBUG="-release" + fi + + PREFIX=/usr/lib/qt3/ + export LD_LIBRARY_PATH="/${PWD}/lib/" + ORACLE="/opt/oracle/product/8.1.6/rdbms/demo/" + [ -d $ORACLE ] && \ + ORACLE="-plugin-sql-oci -I$ORACLE" || \ + ORACLE="" + + for i in mkspecs/linux-*/qmake.conf ; do + sed \ +-e "s,QMAKE_CFLAGS_RELEASE[\t ]*=.*,QMAKE_CFLAGS_RELEASE = $RPM_OPT_FLAGS," \ +-e "s,QMAKE_CFLAGS[\t ]*=.*,QMAKE_CFLAGS = -pipe $RPM_OPT_FLAGS," \ +-e "s,QMAKE_INCDIR[\t ]*=.*,QMAKE_INCDIR = /usr/include/," \ +-e "s,QMAKE_LIBDIR[\t ]*=.*,QMAKE_LIBDIR = /usr/$WLIB/," \ +-e "s,QMAKE_LIBDIR_X11[\t ]*=.*,QMAKE_LIBDIR_X11 = /usr/X11R6/$WLIB/," \ +-e "s,QMAKE_LIBDIR_QT[\t ]*=.*,QMAKE_LIBDIR_QT = \$(QTDIR)/$WLIB/," \ +-e "s,QMAKE_INCDIR_OPENGL[\t ]*=.*,QMAKE_INCDIR_OPENGL = /usr/include/," \ +-e "s,QMAKE_LIBDIR_OPENGL[\t ]*=.*,QMAKE_LIBDIR_OPENGL = /usr/$WLIB/," \ + $i > ${i}.new &&\ + mv ${i}.new $i + done + sed -e "s/^CXXFLAGS=/CXXFLAGS= $RPM_OPT_FLAGS/" < qmake/Makefile.unix > qmake/Makefile.unix.tmp && mv qmake/Makefile.unix.tmp qmake/Makefile.unix +# ld -Bsymbolic-functions -v >& /dev/null && perl -pi -e 's/^QMAKE_VARS=$/QMAKE_VARS="QMAKE_LFLAGS=-Wl,-Bdirect QMAKE_LFLAGS+=-Wl,-Bsymbolic-functions"/' configure + +# png is direct linked, other picture formats are loaded at runtime + OPTIONS="-platform $PLATFORM -qt-gif -stl $DEBUG \ + -system-zlib -system-libjpeg -system-libpng \ + -plugin-imgfmt-jpeg -inputmethod \ + -nis -cups -ipv6 $OPENGL \ + -xkb $LIBMNG -no-g++-exceptions $LARGEFILE $XCURSOR \ + $XFT $XINERAMA -sm -L/usr/$WLIB -L/usr/X11R6/$WLIB \ + -plugin-sql-mysql -I/usr/include/mysql/ \ + -tablet $ORACLE $PGSQL $ODBC -plugin-sql-sqlite $NEWABI \ + -prefix $PREFIX -libdir $PREFIX/$WLIB" + +# use styles as plugins, beside platinum. leave windowsxp disabled +# nice idea, but too many dumb apps have a hardcoded style list :( +# for i in plugins/src/styles/* ; do +# if [ -d $i -a ${i##*/} != "platinum" -a ${i##*/} != "windowsxp" ] +# then OPTIONS="$OPTIONS -plugin-style-${i##*/}" +# fi +# done + + [ -e /usr/$WLIB/mysql/ ] && OPTIONS="$OPTIONS -L/usr/$WLIB/mysql/" + +# get sure we use the lib from the system + rm -rf src/3rdparty/{libjpeg,libmng,libpng,sqlite,zlib} + + export PATH=$PWD/bin:$PATH + echo yes|./configure $OPTIONS $EXTRA_OPTIONS + +# make sure we don't have a crippled qt + grep -q "full-config\"" include/qconfig.h || { echo "build key is wrong"; exit 42; } +} + +function post_install { + if echo $RPM_OPT_FLAGS | grep -q -- -g ; then + export NO_BRP_STRIP_DEBUG=true + fi +} + diff --git a/opensuse/core/qt3/designer.desktop b/opensuse/core/qt3/designer.desktop new file mode 100644 index 000000000..e0026aef9 --- /dev/null +++ b/opensuse/core/qt3/designer.desktop @@ -0,0 +1,11 @@ +[Desktop Entry] +Encoding=UTF-8 +Exec=designer +Name=Qt Designer +GenericName=Interface Designer +X-KDE-StartupNotify=true +MimeType=application/x-designer; +Icon=designer +Terminal=false +Type=Application + diff --git a/opensuse/core/qt3/designer.png b/opensuse/core/qt3/designer.png new file mode 100644 index 000000000..3f6fa7a10 Binary files /dev/null and b/opensuse/core/qt3/designer.png differ diff --git a/opensuse/core/qt3/enable-designer-plugins.diff b/opensuse/core/qt3/enable-designer-plugins.diff new file mode 100644 index 000000000..41147984d --- /dev/null +++ b/opensuse/core/qt3/enable-designer-plugins.diff @@ -0,0 +1,11 @@ +--- tools/designer/plugins/plugins.pro ++++ tools/designer/plugins/plugins.pro +@@ -4,6 +4,7 @@ + dlg \ + glade \ + rc \ +- kdevdlg ++ kdevdlg \ ++ glade + shared:SUBDIRS *= $$PLUGIN_DIRS + dll:SUBDIRS *= $$PLUGIN_DIRS diff --git a/opensuse/core/qt3/external-libs.diff b/opensuse/core/qt3/external-libs.diff new file mode 100644 index 000000000..dcf7f04ae --- /dev/null +++ b/opensuse/core/qt3/external-libs.diff @@ -0,0 +1,78 @@ +--- plugins/src/sqldrivers/sqlite/sqlite.pro ++++ plugins/src/sqldrivers/sqlite/sqlite.pro +@@ -10,6 +10,9 @@ + + unix { + OBJECTS_DIR = .obj ++ !contains( LIBS, .*sqlite.* ) { ++ LIBS *= -lsqlite ++ } + } + + win32 { +@@ -23,54 +26,6 @@ + # } + } + +-!contains( LIBS, .*sqlite.* ) { +- INCLUDEPATH += ../../../../src/3rdparty/sqlite +- +- HEADERS += ../../../../src/3rdparty/sqlite/btree.h \ +- ../../../../src/3rdparty/sqlite/config.h \ +- ../../../../src/3rdparty/sqlite/hash.h \ +- ../../../../src/3rdparty/sqlite/opcodes.h \ +- ../../../../src/3rdparty/sqlite/os.h \ +- ../../../../src/3rdparty/sqlite/pager.h \ +- ../../../../src/3rdparty/sqlite/parse.h \ +- ../../../../src/3rdparty/sqlite/sqlite.h \ +- ../../../../src/3rdparty/sqlite/sqliteInt.h \ +- ../../../../src/3rdparty/sqlite/vdbe.h \ +- ../../../../src/3rdparty/sqlite/vdbeInt.h +- +- SOURCES += ../../../../src/3rdparty/sqlite/attach.c \ +- ../../../../src/3rdparty/sqlite/auth.c \ +- ../../../../src/3rdparty/sqlite/btree.c \ +- ../../../../src/3rdparty/sqlite/btree_rb.c \ +- ../../../../src/3rdparty/sqlite/build.c \ +- ../../../../src/3rdparty/sqlite/copy.c \ +- ../../../../src/3rdparty/sqlite/date.c \ +- ../../../../src/3rdparty/sqlite/delete.c \ +- ../../../../src/3rdparty/sqlite/expr.c \ +- ../../../../src/3rdparty/sqlite/func.c \ +- ../../../../src/3rdparty/sqlite/hash.c \ +- ../../../../src/3rdparty/sqlite/insert.c \ +- ../../../../src/3rdparty/sqlite/main.c \ +- ../../../../src/3rdparty/sqlite/opcodes.c \ +- ../../../../src/3rdparty/sqlite/os.c \ +- ../../../../src/3rdparty/sqlite/pager.c \ +- ../../../../src/3rdparty/sqlite/parse.c \ +- ../../../../src/3rdparty/sqlite/pragma.c \ +- ../../../../src/3rdparty/sqlite/printf.c \ +- ../../../../src/3rdparty/sqlite/random.c \ +- ../../../../src/3rdparty/sqlite/select.c \ +- ../../../../src/3rdparty/sqlite/shell.c \ +- ../../../../src/3rdparty/sqlite/table.c \ +- ../../../../src/3rdparty/sqlite/tokenize.c \ +- ../../../../src/3rdparty/sqlite/trigger.c \ +- ../../../../src/3rdparty/sqlite/update.c \ +- ../../../../src/3rdparty/sqlite/util.c \ +- ../../../../src/3rdparty/sqlite/vacuum.c \ +- ../../../../src/3rdparty/sqlite/vdbe.c \ +- ../../../../src/3rdparty/sqlite/vdbeaux.c \ +- ../../../../src/3rdparty/sqlite/where.c +-} +- + REQUIRES = sql + + target.path += $$plugins.path/sqldrivers +--- src/tools/qcstring.cpp ++++ src/tools/qcstring.cpp +@@ -50,7 +50,7 @@ + #include + #include + #ifndef QT_NO_COMPRESS +-#include "../3rdparty/zlib/zlib.h" ++#include + #endif + + /***************************************************************************** diff --git a/opensuse/core/qt3/fix-GL-loading.diff b/opensuse/core/qt3/fix-GL-loading.diff new file mode 100644 index 000000000..61c2f379a --- /dev/null +++ b/opensuse/core/qt3/fix-GL-loading.diff @@ -0,0 +1,44 @@ +--- src/opengl/qgl_x11.cpp ++++ src/opengl/qgl_x11.cpp 2004/04/13 14:56:00 +@@ -267,7 +267,7 @@ + typedef Status (*_XmuLookupStandardColormap)( Display *dpy, int screen, VisualID visualid, unsigned int depth, + Atom property, Bool replace, Bool retain ); + _XmuLookupStandardColormap qt_XmuLookupStandardColormap; +- qt_XmuLookupStandardColormap = (_XmuLookupStandardColormap) QLibrary::resolve("Xmu", "XmuLookupStandardColormap"); ++ qt_XmuLookupStandardColormap = (_XmuLookupStandardColormap) QLibrary::resolve("Xmu.so.6", "XmuLookupStandardColormap"); + if (!qt_XmuLookupStandardColormap) + qFatal("Unable to resolve Xmu symbols - please check your Xmu library installation."); + #define XmuLookupStandardColormap qt_XmuLookupStandardColormap +Index: src/tools/qlibrary.cpp +=================================================================== +RCS file: /home/kde/qt-copy/src/tools/qlibrary.cpp,v +retrieving revision 1.26 +diff -u -3 -p -r1.26 qlibrary.cpp +--- src/tools/qlibrary.cpp 4 Feb 2004 14:25:02 -0000 1.26 ++++ src/tools/qlibrary.cpp 2 Jun 2004 08:26:21 -0000 +@@ -424,7 +424,8 @@ QString QLibrary::library() const + } else { + tmpfilename = QString( "lib%1" ).arg( filename ); + } +- tmpfilename += filter; ++ if ( !filename.contains(".so") ) ++ tmpfilename += filter; + if(QFile::exists(tmpfilename) || it == filters.end()) { + filename = tmpfilename; + break; +Index: src/opengl/qgl_x11.cpp +=================================================================== +RCS file: /home/kde/qt-copy/src/opengl/qgl_x11.cpp,v +retrieving revision 1.34 +diff -u -3 -p -r1.34 qgl_x11.cpp +--- src/opengl/qgl_x11.cpp 21 Dec 2003 00:48:09 -0000 1.34 ++++ src/opengl/qgl_x11.cpp 2 Jun 2004 08:26:21 -0000 +@@ -116,7 +116,7 @@ bool qt_resolve_gl_symbols(bool fatal) + if (gl_syms_resolved) + return TRUE; + +- QLibrary gl("GL"); ++ QLibrary gl("GL.so.1"); + gl.setAutoUnload(FALSE); + + qt_glCallLists = (_glCallLists) gl.resolve("glCallLists"); diff --git a/opensuse/core/qt3/fix-accessible.diff b/opensuse/core/qt3/fix-accessible.diff new file mode 100644 index 000000000..9b0aca13b --- /dev/null +++ b/opensuse/core/qt3/fix-accessible.diff @@ -0,0 +1,10 @@ +--- plugins/src/accessible/widgets/widgets.pro ++++ plugins/src/accessible/widgets/widgets.pro +@@ -13,3 +13,7 @@ + + HEADERS += qaccessiblewidget.h \ + qaccessiblemenu.h ++ ++target.path += $$plugins.path/accessible ++INSTALLS += target ++ diff --git a/opensuse/core/qt3/fix-assistant-path.patch b/opensuse/core/qt3/fix-assistant-path.patch new file mode 100644 index 000000000..3f30e7013 --- /dev/null +++ b/opensuse/core/qt3/fix-assistant-path.patch @@ -0,0 +1,11 @@ +--- tools/assistant/lib/qassistantclient.cpp ++++ tools/assistant/lib/qassistantclient.cpp +@@ -128,7 +128,7 @@ + : QObject( parent, name ), host ( "localhost" ) + { + if ( path.isEmpty() ) +- assistantCommand = "assistant"; ++ assistantCommand = "/usr/lib/qt3/bin/assistant"; + else { + QFileInfo fi( path ); + if ( fi.isDir() ) diff --git a/opensuse/core/qt3/fix-key-release-event-with-imm.diff b/opensuse/core/qt3/fix-key-release-event-with-imm.diff new file mode 100644 index 000000000..3bd1b8da2 --- /dev/null +++ b/opensuse/core/qt3/fix-key-release-event-with-imm.diff @@ -0,0 +1,55 @@ +--- src/kernel/qapplication_x11.cpp ++++ src/kernel/qapplication_x11.cpp +@@ -3294,11 +3294,7 @@ + // filtering opportunity first to ensure all input methods work + // properly regardless of application design. + +-#ifndef QT_NO_IM_EXTENSIONS + if( keywidget && keywidget->isEnabled() && keywidget->isInputMethodEnabled() ) { +-#else +- if( keywidget && keywidget->isEnabled() ) { +-#endif + if( ( event->type==XKeyPress || event->type==XKeyRelease ) && + sm_blockUserInput ) // block user interaction during session management + return TRUE; +@@ -5220,11 +5216,12 @@ + } else { + key = (int)(long)keyDict->find( keycode ); + if ( key ) +- if( !willRepeat ) // Take out key of dictionary only if this call. ++ if( !willRepeat && statefulTranslation ) // Take out key of dictionary only if this call. + keyDict->take( keycode ); + long s = (long)textDict->find( keycode ); + if ( s ) { +- textDict->take( keycode ); ++ if( statefulTranslation ) ++ textDict->take( keycode ); + ascii = (char)(s-256); + } + } +--- src/kernel/qwidget_x11.cpp ++++ src/kernel/qwidget_x11.cpp +@@ -2699,11 +2699,10 @@ + { + QInputContext *qic = 0; + +-#if !defined(QT_NO_IM_EXTENSIONS) + if ( isInputMethodEnabled() ) { ++#if !defined(QT_NO_IM_EXTENSIONS) + qic = icHolderWidget()->ic; + #else +- { + // icHolderWidget is always topLevelWidget + QTLWExtra *topdata = icHolderWidget()->topData(); + qic = (QInputContext *)topdata->xic; +@@ -2754,10 +2753,8 @@ + */ + void QWidget::createInputContext() + { +-#if !defined(QT_NO_IM_EXTENSIONS) + if( !isInputMethodEnabled() || QApplication::closingDown() ) + return; +-#endif + + QWidget *icWidget = icHolderWidget(); + #ifndef QT_NO_IM diff --git a/opensuse/core/qt3/fix-qtranslator-crash.diff b/opensuse/core/qt3/fix-qtranslator-crash.diff new file mode 100644 index 000000000..e28d7126a --- /dev/null +++ b/opensuse/core/qt3/fix-qtranslator-crash.diff @@ -0,0 +1,11 @@ +--- src/kernel/qtranslator.cpp ++++ src/kernel/qtranslator.cpp +@@ -1012,7 +1012,7 @@ + char con[256]; + for ( ;; ) { + t >> len; +- if ( len == 0 ) ++ if ( len == 0 || t.atEnd()) + return QTranslatorMessage(); + t.readRawBytes( con, len ); + con[len] = '\0'; diff --git a/opensuse/core/qt3/fix-xinerama-dialog-placement.diff b/opensuse/core/qt3/fix-xinerama-dialog-placement.diff new file mode 100644 index 000000000..26ca37c16 --- /dev/null +++ b/opensuse/core/qt3/fix-xinerama-dialog-placement.diff @@ -0,0 +1,13 @@ +--- src/dialogs/qdialog.cpp ++++ src/dialogs/qdialog.cpp +@@ -803,7 +803,9 @@ + w = w->topLevelWidget(); + QRect desk; + if ( w ) { +- scrn = QApplication::desktop()->screenNumber( w ); ++ // Use mapToGlobal rather than geometry() in case w might ++ // be embedded in another application ++ scrn = QApplication::desktop()->screenNumber( w->mapToGlobal( QPoint(0,0) ) ); + } else if ( QApplication::desktop()->isVirtualDesktop() ) { + scrn = QApplication::desktop()->screenNumber( QCursor::pos() ); + } else { diff --git a/opensuse/core/qt3/fix-xinput-clash.diff b/opensuse/core/qt3/fix-xinput-clash.diff new file mode 100644 index 000000000..2a7011681 --- /dev/null +++ b/opensuse/core/qt3/fix-xinput-clash.diff @@ -0,0 +1,37 @@ +--- src/kernel/qtaddons_x11.cpp ++++ src/kernel/qtaddons_x11.cpp +@@ -22,6 +22,10 @@ + * PERFORMANCE OF THIS SOFTWARE. + */ + ++#ifndef QT_CLEAN_NAMESPACE ++#define QT_CLEAN_NAMESPACE ++#endif ++ + #include "qt_x11_p.h" + + #if !defined(QT_NO_XFTFREETYPE) && !defined(QT_XFT2) +--- src/kernel/qt_x11_p.h ++++ src/kernel/qt_x11_p.h +@@ -86,7 +86,7 @@ + + + // the wacom tablet (currently just the IRIX version) +-#if defined (QT_TABLET_SUPPORT) ++#if defined (QT_TABLET_SUPPORT) && defined (QT_CLEAN_NAMESPACE) + # include + #if defined (Q_OS_IRIX) + # include // wacom driver defines for IRIX (quite handy) +--- src/kernel/qwidget_x11.cpp ++++ src/kernel/qwidget_x11.cpp +@@ -38,6 +38,10 @@ + ** + **********************************************************************/ + ++#ifndef QT_CLEAN_NAMESPACE ++#define QT_CLEAN_NAMESPACE ++#endif ++ + #include "qapplication.h" + #include "qapplication_p.h" + #include "qnamespace.h" diff --git a/opensuse/core/qt3/gcc46.diff b/opensuse/core/qt3/gcc46.diff new file mode 100644 index 000000000..beae96ff2 --- /dev/null +++ b/opensuse/core/qt3/gcc46.diff @@ -0,0 +1,56 @@ +Index: src/tools/qvaluelist.h +=================================================================== +--- src/tools/qvaluelist.h.orig 2011-03-31 20:14:47.200973928 +0200 ++++ src/tools/qvaluelist.h 2011-03-31 20:14:55.352615654 +0200 +@@ -50,6 +50,7 @@ + #ifndef QT_NO_STL + #include + #include ++#include + #endif + + //#define QT_CHECK_VALUELIST_RANGE +Index: src/tools/qvaluevector.h +=================================================================== +--- src/tools/qvaluevector.h.orig 2008-01-15 20:09:13.000000000 +0100 ++++ src/tools/qvaluevector.h 2011-03-31 20:15:15.904712567 +0200 +@@ -244,7 +244,7 @@ public: + typedef const value_type& const_reference; + typedef size_t size_type; + #ifndef QT_NO_STL +- typedef ptrdiff_t difference_type; ++ typedef std::ptrdiff_t difference_type; + #else + typedef int difference_type; + #endif +Index: src/tools/qmap.h +=================================================================== +--- src/tools/qmap.h.orig 2008-01-15 20:09:13.000000000 +0100 ++++ src/tools/qmap.h 2011-03-31 20:24:35.802101605 +0200 +@@ -107,7 +107,7 @@ class QMapIterator + #endif + typedef T value_type; + #ifndef QT_NO_STL +- typedef ptrdiff_t difference_type; ++ typedef std::ptrdiff_t difference_type; + #else + typedef int difference_type; + #endif +@@ -223,7 +223,7 @@ class QMapConstIterator + #endif + typedef T value_type; + #ifndef QT_NO_STL +- typedef ptrdiff_t difference_type; ++ typedef std::ptrdiff_t difference_type; + #else + typedef int difference_type; + #endif +@@ -604,7 +604,7 @@ public: + typedef value_type& reference; + typedef const value_type& const_reference; + #ifndef QT_NO_STL +- typedef ptrdiff_t difference_type; ++ typedef std::ptrdiff_t difference_type; + #else + typedef int difference_type; + #endif diff --git a/opensuse/core/qt3/head.diff b/opensuse/core/qt3/head.diff new file mode 100644 index 000000000..ccc2da0f5 --- /dev/null +++ b/opensuse/core/qt3/head.diff @@ -0,0 +1,60 @@ +--- src/3rdparty/libmng/aclocal.m4 ++++ src/3rdparty/libmng/aclocal.m4 +@@ -1607,7 +1607,7 @@ + # If the export-symbols file already is a .def file (1st line + # is EXPORTS), use it as is. + # If DATA tags from a recent dlltool are present, honour them! +- archive_expsym_cmds='if test "x`head -1 $export_symbols`" = xEXPORTS; then ++ archive_expsym_cmds='if test "x`head -n 1 $export_symbols`" = xEXPORTS; then + cp $export_symbols $output_objdir/$soname-def; + else + echo EXPORTS > $output_objdir/$soname-def; +@@ -3546,7 +3546,7 @@ + lt_cv_file_magic_cmd='/usr/bin/file -L' + case "$host_os" in + rhapsody* | darwin1.[[012]]) +- lt_cv_file_magic_test_file=`echo /System/Library/Frameworks/System.framework/Versions/*/System | head -1` ++ lt_cv_file_magic_test_file=`echo /System/Library/Frameworks/System.framework/Versions/*/System | head -n 1` + ;; + *) # Darwin 1.3 on + lt_cv_file_magic_test_file='/usr/lib/libSystem.dylib' +--- src/3rdparty/libmng/config.guess ++++ src/3rdparty/libmng/config.guess +@@ -319,7 +319,7 @@ + echo m68k-sun-sunos${UNAME_RELEASE} + exit 0 ;; + sun*:*:4.2BSD:*) +- UNAME_RELEASE=`(head -1 /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null` ++ UNAME_RELEASE=`(head -n 1 /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null` + test "x${UNAME_RELEASE}" = "x" && UNAME_RELEASE=3 + case "`/bin/arch`" in + sun3) +@@ -506,7 +506,7 @@ + fi + exit 0 ;; + *:AIX:*:[45]) +- IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | head -1 | awk '{ print $1 }'` ++ IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | head -n 1 | awk '{ print $1 }'` + if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then + IBM_ARCH=rs6000 + else +--- src/3rdparty/libmng/configure ++++ src/3rdparty/libmng/configure +@@ -1956,7 +1956,7 @@ + lt_cv_file_magic_cmd='/usr/bin/file -L' + case "$host_os" in + rhapsody* | darwin1.[012]) +- lt_cv_file_magic_test_file=`echo /System/Library/Frameworks/System.framework/Versions/*/System | head -1` ++ lt_cv_file_magic_test_file=`echo /System/Library/Frameworks/System.framework/Versions/*/System | head -n 1` + ;; + *) # Darwin 1.3 on + lt_cv_file_magic_test_file='/usr/lib/libSystem.dylib' +@@ -3433,7 +3433,7 @@ + # If the export-symbols file already is a .def file (1st line + # is EXPORTS), use it as is. + # If DATA tags from a recent dlltool are present, honour them! +- archive_expsym_cmds='if test "x`head -1 $export_symbols`" = xEXPORTS; then ++ archive_expsym_cmds='if test "x`head -n 1 $export_symbols`" = xEXPORTS; then + cp $export_symbols $output_objdir/$soname-def; + else + echo EXPORTS > $output_objdir/$soname-def; diff --git a/opensuse/core/qt3/kmenu-search-fix.diff b/opensuse/core/qt3/kmenu-search-fix.diff new file mode 100644 index 000000000..8aff068ad --- /dev/null +++ b/opensuse/core/qt3/kmenu-search-fix.diff @@ -0,0 +1,10 @@ +--- src/widgets/qpopupmenu.cpp ++++ src/widgets/qpopupmenu.cpp +@@ -1354,6 +1354,7 @@ + performDelayedChanges(); + updateSize(TRUE); + QWidget::show(); ++ updateSize(); + popupActive = -1; + if(style().styleHint(QStyle::SH_PopupMenu_SubMenuPopupDelay, this)) + d->mouseMoveBuffer = QRegion(); diff --git a/opensuse/core/qt3/lib64-plugin-support.diff b/opensuse/core/qt3/lib64-plugin-support.diff new file mode 100644 index 000000000..384673269 --- /dev/null +++ b/opensuse/core/qt3/lib64-plugin-support.diff @@ -0,0 +1,12 @@ +--- src/tools/qgpluginmanager.cpp ++++ src/tools/qgpluginmanager.cpp 2004/09/25 11:46:41 +@@ -377,6 +377,9 @@ + QString basename = (*git).left( (*git).find( QChar(0xfffd) ) ); + ++git; + ++ // WARNING: this line should only exist on lib64 systems ! ++ basename += ".lib64"; ++ + QStringList sameBasename; + while( git != group.end() && + basename == (*git).left( (*git).find( QChar(0xfffd) ) ) ) { diff --git a/opensuse/core/qt3/limit-image-size.diff b/opensuse/core/qt3/limit-image-size.diff new file mode 100644 index 000000000..dcf8d6f21 --- /dev/null +++ b/opensuse/core/qt3/limit-image-size.diff @@ -0,0 +1,103 @@ +Index: kernel/qasyncimageio.cpp +================================================================================ +--- src/kernel/qasyncimageio.cpp ++++ src/kernel/qasyncimageio.cpp +@@ -901,7 +901,12 @@ + sheight = newtop + newheight; + + if (img.isNull()) { +- img.create(swidth, sheight, 32); ++ bool ok = img.create(swidth, sheight, 32); ++ if (!ok) ++ { ++ state = Error; ++ break; ++ } + memset( img.bits(), 0, img.numBytes() ); + if (consumer) consumer->setSize(swidth, sheight); + } +@@ -956,9 +961,15 @@ + if (backingstore.width() < w + || backingstore.height() < h) { + // We just use the backing store as a byte array +- backingstore.create( QMAX(backingstore.width(), w), ++ bool ok = backingstore.create( ++ QMAX(backingstore.width(), w), + QMAX(backingstore.height(), h), + 32); ++ if (!ok) ++ { ++ state = Error; ++ break; ++ } + memset( img.bits(), 0, img.numBytes() ); + } + for (int ln=0; lnalpha = enable; + } + ++QSize QImage::maxImageSize() ++{ ++ if (!qt_max_image_height || !qt_max_image_width) ++ return QSize(); ++ return QSize(qt_max_image_height, qt_max_image_width); ++} ++ ++void QImage::setMaxImageSize(const QSize &size) ++{ ++ if (size.isValid()) ++ { ++ qt_max_image_height = size.height(); ++ qt_max_image_width = size.width(); ++ } ++ else ++ { ++ qt_max_image_height = 0; ++ qt_max_image_width = 0; ++ } ++} ++ ++ + + /*! + Sets the image \a width, \a height, \a depth, its number of colors +@@ -1230,6 +1254,14 @@ + reset(); // reset old data + if ( width <= 0 || height <= 0 || depth <= 0 || numColors < 0 ) + return FALSE; // invalid parameter(s) ++ if ( qt_max_image_height && (height > qt_max_image_height * 4)) ++ return FALSE; // Too high ++ if ( qt_max_image_width && (width > qt_max_image_width * 4)) ++ return FALSE; // Too wide ++ if ( qt_max_image_height && qt_max_image_width && ++ (height * width > qt_max_image_height * qt_max_image_width)) ++ return FALSE; // Too large ++ + if ( depth == 1 && bitOrder == IgnoreEndian ) { + #if defined(QT_CHECK_RANGE) + qWarning( "QImage::create: Bit order is required for 1 bpp images" ); +--- src/kernel/qimage.h ++++ src/kernel/qimage.h +@@ -194,6 +194,10 @@ + int quality=-1 ) const; + bool save( QIODevice * device, const char* format, + int quality=-1 ) const; ++ ++#define QT_HAVE_MAX_IMAGE_SIZE ++ static QSize maxImageSize(); ++ static void setMaxImageSize(const QSize &size); + #endif //QT_NO_IMAGEIO + + bool valid( int x, int y ) const; diff --git a/opensuse/core/qt3/linguist.desktop b/opensuse/core/qt3/linguist.desktop new file mode 100644 index 000000000..7cfb9d093 --- /dev/null +++ b/opensuse/core/qt3/linguist.desktop @@ -0,0 +1,11 @@ +[Desktop Entry] +Encoding=UTF-8 +Exec=linguist +Name=Qt Linguist +GenericName=Translation Tool +X-KDE-StartupNotify=true +MimeType=application/x-linguist; +Terminal=false +Type=Application +Icon=linguist + diff --git a/opensuse/core/qt3/linguist.png b/opensuse/core/qt3/linguist.png new file mode 100644 index 000000000..90e143b65 Binary files /dev/null and b/opensuse/core/qt3/linguist.png differ diff --git a/opensuse/core/qt3/mng-reading-fix.patch b/opensuse/core/qt3/mng-reading-fix.patch new file mode 100644 index 000000000..f0582ac6c --- /dev/null +++ b/opensuse/core/qt3/mng-reading-fix.patch @@ -0,0 +1,30 @@ +--- src/kernel/qmngio.cpp.sav 2007-02-23 14:01:19.000000000 +0100 ++++ src/kernel/qmngio.cpp 2007-08-28 15:27:28.000000000 +0200 +@@ -411,8 +411,11 @@ int QMNGFormat::decode( QImage& img, QIm + } + + losttime += losingtimer.elapsed(); +- if ( ndata || !length ) +- mng_display_resume(handle); ++ bool needmore = false; ++ if ( ndata ) { ++ mng_retcode r = mng_display_resume(handle); ++ needmore = ( r == MNG_NEEDMOREDATA ); ++ } + losingtimer.start(); + + image = 0; +@@ -422,6 +425,13 @@ int QMNGFormat::decode( QImage& img, QIm + // Move back unused tail + memcpy(buffer,buffer+ubuffer,nbuffer); + } ++ // "The function should return without processing all the data if it reaches the end of a frame in the input." ++ if( ndata && !needmore ) { ++ length -= ndata; ++ ndata = 0; ++ if( length == 0 ) // 0 means done, process at least one byte ++ length = ndata = 1; ++ } + if ( ndata ) { + // Not all used. + enlargeBuffer(nbuffer+ndata); diff --git a/opensuse/core/qt3/no-rpath.dif b/opensuse/core/qt3/no-rpath.dif new file mode 100644 index 000000000..fa4a88215 --- /dev/null +++ b/opensuse/core/qt3/no-rpath.dif @@ -0,0 +1,21 @@ +--- mkspecs/linux-g++-64/qmake.conf ++++ mkspecs/linux-g++-64/qmake.conf +@@ -58,7 +58,7 @@ + QMAKE_LFLAGS_PLUGIN = $$QMAKE_LFLAGS_SHLIB + QMAKE_LFLAGS_SONAME = -Wl,-soname, + QMAKE_LFLAGS_THREAD = +-QMAKE_RPATH = -Wl,-rpath, ++QMAKE_RPATH = + + QMAKE_LIBS = + QMAKE_LIBS_DYNLOAD = -ldl +--- mkspecs/linux-g++/qmake.conf ++++ mkspecs/linux-g++/qmake.conf +@@ -55,7 +55,6 @@ + QMAKE_LFLAGS_PLUGIN = $$QMAKE_LFLAGS_SHLIB + QMAKE_LFLAGS_SONAME = -Wl,-soname, + QMAKE_LFLAGS_THREAD = +-QMAKE_RPATH = -Wl,-rpath, + + QMAKE_LIBS = + QMAKE_LIBS_DYNLOAD = -ldl diff --git a/opensuse/core/qt3/parseFontName.diff b/opensuse/core/qt3/parseFontName.diff new file mode 100644 index 000000000..eb0c6cbea --- /dev/null +++ b/opensuse/core/qt3/parseFontName.diff @@ -0,0 +1,18 @@ +--- src/kernel/qfontdatabase.cpp ++++ src/kernel/qfontdatabase.cpp +@@ -2470,11 +2470,14 @@ void QFontDatabase::parseFontName(const + int i = name.find('['); + int li = name.findRev(']'); + +- if (i < li) { ++ if (i > 0 && i + 1 < li) { + foundry = name.mid(i + 1, li - i - 1); + if (name[i - 1] == ' ') + i--; + family = name.left(i); ++ } else { ++ foundry = QString::null; ++ family = name; + } + } else { + foundry = QString::null; diff --git a/opensuse/core/qt3/pluginmanager-fix.diff b/opensuse/core/qt3/pluginmanager-fix.diff new file mode 100644 index 000000000..88ad08ae4 --- /dev/null +++ b/opensuse/core/qt3/pluginmanager-fix.diff @@ -0,0 +1,11 @@ +--- src/tools/qgpluginmanager.cpp ++++ src/tools/qgpluginmanager.cpp +@@ -383,6 +383,8 @@ + sameBasename << (*git).mid( (*git).find( QChar(0xfffd) ) + 1 ); + ++git; + } ++ if( !sameBasename.isEmpty()) ++ sameBasename.prepend( lib ); + + if ( sameBasename.isEmpty() ) { + that->addLibrary( new QComLibrary( lib ) ); diff --git a/opensuse/core/qt3/popen-leak-fix.diff b/opensuse/core/qt3/popen-leak-fix.diff new file mode 100644 index 000000000..a00ab02a5 --- /dev/null +++ b/opensuse/core/qt3/popen-leak-fix.diff @@ -0,0 +1,10 @@ +--- tools/linguist/shared/proparser.cpp ++++ tools/linguist/shared/proparser.cpp +@@ -207,6 +207,7 @@ QMap proFileTagMap( const QString& text ) + buff[read_in] = '\0'; + after += buff; + } ++ pclose( proc ); + (*it).replace( i, callToSystem.matchedLength(), after ); + i += after.length(); + } diff --git a/opensuse/core/qt3/pre_checkin.sh b/opensuse/core/qt3/pre_checkin.sh new file mode 100644 index 000000000..fd6f089b5 --- /dev/null +++ b/opensuse/core/qt3/pre_checkin.sh @@ -0,0 +1,14 @@ +#!/bin/bash +# This script is called automatically during autobuild checkin. + +cp -fl qt3.changes qt3-extensions.changes +cp -fl qt3.changes qt3-devel-doc.changes + +for spec in qt3-extensions.spec qt3-devel-doc.spec; do +{ sed -n -e '1,/COMMON-BEGIN/p' $spec.in + sed -n -e '/COMMON-BEGIN/,/COMMON-END/p' qt3.spec + sed -n -e '/COMMON-END/,$p' $spec.in; } > $spec.tmp && perl update_spec.pl $spec.tmp attributes > $spec && rm $spec.tmp +done + + +osc service localrun format_spec_file diff --git a/opensuse/core/qt3/qcstring-format-warnings.diff b/opensuse/core/qt3/qcstring-format-warnings.diff new file mode 100644 index 000000000..a597dc578 --- /dev/null +++ b/opensuse/core/qt3/qcstring-format-warnings.diff @@ -0,0 +1,15 @@ +--- src/tools/qcstring.h (revision 658213) ++++ src/tools/qcstring.h (working copy) +@@ -161,7 +161,11 @@ public: + + QCString copy() const; + +- QCString &sprintf( const char *format, ... ); ++ QCString &sprintf( const char *format, ... ) ++#if defined(Q_CC_GNU) && !defined(__INSURE__) ++ __attribute__ ((format (printf, 2, 3))) ++#endif ++ ; + + int find( char c, int index=0, bool cs=TRUE ) const; + int find( const char *str, int index=0, bool cs=TRUE ) const; diff --git a/opensuse/core/qt3/qt-3.3.8c.diff b/opensuse/core/qt3/qt-3.3.8c.diff new file mode 100644 index 000000000..860e99e4b --- /dev/null +++ b/opensuse/core/qt3/qt-3.3.8c.diff @@ -0,0 +1,58 @@ +--- src/kernel/qobject.cpp ++++ src/kernel/qobject.cpp +@@ -360,6 +360,30 @@ + } + } + ++/*! \internal ++ TQt compatibility function ++*/ ++QObjectList QObject::childrenListObject() { ++ if (children()) return *(children()); ++ else return QObjectList(); ++} ++ ++/*! \internal ++ TQt compatibility function ++*/ ++const QObjectList QObject::childrenListObject() const { ++ if (children()) return *(children()); ++ else return QObjectList(); ++} ++ ++/*! \internal ++ TQt compatibility function ++*/ ++const QObjectList QObject::objectTreesListObject() { ++ if (objectTrees()) return *(objectTrees()); ++ else return QObjectList(); ++} ++ + + /***************************************************************************** + QObject member functions +--- src/kernel/qobject.h ++++ src/kernel/qobject.h +@@ -101,8 +101,11 @@ + + QObject *child( const char *objName, const char *inheritsClass = 0, bool recursiveSearch = TRUE ); //### const in 4.0 + const QObjectList *children() const { return childObjects; } ++ QObjectList childrenListObject(); ++ const QObjectList childrenListObject() const; + + static const QObjectList *objectTrees(); ++ static const QObjectList objectTreesListObject(); + + QObjectList *queryList( const char *inheritsClass = 0, + const char *objName = 0, +--- src/tools/qglobal.h ++++ src/tools/qglobal.h +@@ -41,7 +41,7 @@ + #ifndef QGLOBAL_H + #define QGLOBAL_H + +-#define QT_VERSION_STR "3.3.8b" ++#define QT_VERSION_STR "3.3.8c" + /* + QT_VERSION is (major << 16) + (minor << 8) + patch. + */ diff --git a/opensuse/core/qt3/qt-transparency.patch b/opensuse/core/qt3/qt-transparency.patch new file mode 100644 index 000000000..d2de72f0d --- /dev/null +++ b/opensuse/core/qt3/qt-transparency.patch @@ -0,0 +1,49 @@ +--- src/kernel/qapplication.cpp ++++ src/kernel/qapplication.cpp +@@ -317,6 +317,7 @@ + void qt_cleanup(); + #if defined(Q_WS_X11) + void qt_init( Display* dpy, Qt::HANDLE, Qt::HANDLE ); ++void qt_init( int *, char **, Display* dpy, Qt::HANDLE, Qt::HANDLE ); + #endif + Q_EXPORT bool qt_tryModalHelper( QWidget *widget, QWidget **rettop ); + +@@ -905,7 +906,7 @@ + + qt_init( &argc, argv, GuiClient ); + } else { +- qt_init(dpy, visual, colormap); ++ qt_init( &argc, argv, dpy, visual, colormap); + } + + process_cmdline( &argc, argv ); +--- src/kernel/qapplication_x11.cpp ++++ src/kernel/qapplication_x11.cpp +@@ -197,6 +197,7 @@ + static Display *appDpy = 0; // X11 application display + static char *appDpyName = 0; // X11 display name + static bool appForeignDpy = FALSE; // we didn't create display ++Q_EXPORT bool qt_no_foreign_hack = false; + static bool appSync = FALSE; // X11 synchronization + #if defined(QT_DEBUG) + static bool appNoGrab = FALSE; // X11 grabbing enabled +@@ -1610,7 +1611,7 @@ + setlocale( LC_ALL, "" ); // use correct char set mapping + setlocale( LC_NUMERIC, "C" ); // make sprintf()/scanf() work + +- if ( display ) { ++ if ( display && ! qt_no_foreign_hack ) { + // Qt part of other application + + appForeignDpy = TRUE; +@@ -2390,6 +2391,10 @@ + qt_init_internal( 0, 0, display, visual, colormap ); + } + ++void qt_init( int *argcptr, char **argv, Display *display, Qt::HANDLE visual, Qt::HANDLE colormap ) ++{ ++ qt_init_internal( argcptr, argv, display, visual, colormap ); ++} + + /***************************************************************************** + qt_cleanup() - cleans up when the application is finished diff --git a/opensuse/core/qt3/qt-x11-free-3.3.8b.tar.bz2 b/opensuse/core/qt3/qt-x11-free-3.3.8b.tar.bz2 new file mode 100644 index 000000000..44e17d392 Binary files /dev/null and b/opensuse/core/qt3/qt-x11-free-3.3.8b.tar.bz2 differ diff --git a/opensuse/core/qt3/qt-x11-immodule-unified-qt3.3.8-20060318.diff b/opensuse/core/qt3/qt-x11-immodule-unified-qt3.3.8-20060318.diff new file mode 100644 index 000000000..c1ac18de3 --- /dev/null +++ b/opensuse/core/qt3/qt-x11-immodule-unified-qt3.3.8-20060318.diff @@ -0,0 +1,16169 @@ +--- ChangeLog.immodule ++++ ChangeLog.immodule +@@ -0,0 +1,2027 @@ ++2004-09-10 YamaKen ++ ++ * changes.immodule ++ - Describe a bugfix ++ ++2004-09-10 YamaKen ++ ++ * 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 ++ ++ * 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 ++ ++ * src/kernel/qapplication.cpp ++ - (removePostedEvents): ++ * Fix infinite loop condition ++ * delete receiver->postedEvents if the list has been empty ++ ++2004-09-09 YamaKen ++ ++ * 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 ++ ++ * 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 ++ ++ * Rename input module subdirectory from "input" to "inputmethod" ++ ++2004-09-08 YamaKen ++ ++ * 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 ++ ++ * src/input/qinputcontextfactory.cpp ++ - (keys): Modify the function description comment ++ ++2004-08-18 YamaKen ++ ++ * src/input/qinputcontextfactory.cpp ++ - (create_manager): Fix plugin directory from "/input" to "/inputmethods" ++ ++2004-08-18 YamaKen ++ ++ * src/kernel/qapplication_x11.cpp ++ - (KeyTbl): Add translations for Japanese and Korean alias keys ++ ++2004-08-18 YamaKen ++ ++ * 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 ++ ++ Merge differences between qt-x11-free-3.3.2 and qt-x11-free-3.3.3 ++ ++2004-08-18 YamaKen ++ ++ * 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 ++ ++ * tools/qtconfig/mainwindow.cpp ++ - (MainWindow): Modify a comment ++ - (fileSave): Fix inappropriate /qt/DefaultInputMethodSwitcher ++ overwriting. Thanks Takumi Asaki for the reporting ++ ++2004-08-17 YamaKen ++ ++ * 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 ++ ++ * 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 ++ ++ * This is preparation for qt-x11-immodule-unified-qt3.3.2-20040814 ++ ++ * ChangeLog.immodule ++ - Update ++ ++2004-08-14 YamaKen ++ ++ * 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 ++ ++ cleanup: get rid of some warnings ++2004-08-12 YamaKen ++ ++ * changes.immodule ++ - New file. This file has been written for both users and ++ developers to inform important changes ++ ++2004-08-12 YamaKen ++ ++ * This is preparation for qt-x11-immodule-unified-qt3.3.2-20040812 ++ ++ * ChangeLog.immodule ++ - Update ++ ++2004-08-12 YamaKen ++ ++ * src/kernel/qwidget_x11.cpp ++ - (changeInputContext, createInputContext): Fix qic location ++ - (destroyInputContext): Add safety check ++ ++2004-08-12 YamaKen ++ ++ * 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 ++ ++ fixed a compile issue in my gentoo box (gcc 3.3.3, glibc 2.3.3 ++2004-08-12 YamaKen ++ ++ * configure ++ - Fix option consistency handling between '-im' and '-im-ext' ++ ++ * README.immodule ++ - Fix a typo ++ ++2004-08-11 YamaKen ++ ++ * README.immodule ++ - Modify a little ++ ++2004-08-11 YamaKen ++ ++ * README.immodule ++ - New file. Some explanation has been described ++ ++ * ChangeLog.immodule ++ - New file ++ ++2004-08-11 YamaKen ++ ++ * 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 ++ ++ * 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 ++ ++ * 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 ++ ++ * 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 ++ ++ * 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 ++ ++ * 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 ++ ++ * 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 ++ ++ * 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 ++ " " ++ ++2004-08-10 YamaKen ++ ++ * 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 ++ ++ * 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 ++ ++ * 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 ++ ++ * 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 ++ ++ * 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 ++ ++ * 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 ++ ++ * 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 ++ ++ * 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 ++ ++ * 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 ++ ++ * 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 ++ ++ * 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 ++ ++ * plugins/src/inputmethods/simple/qsimpleinputcontext.cpp ++ - add full dead/multi key entries ++ - fix some bugs ++ ++2004-08-10 YamaKen ++ ++ * 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 ++ ++ * 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 ++ ++ * 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 ++ ++ * src/input/qmultiinputcontext.cpp ++ - use QInputContextFactory::description and set whatsthis help ++ ++2004-08-03 YamaKen ++ ++ * 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 ++ ++ * 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 ++ ++ * 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 ++ ++ * src/kernel/qapplication_x11.cpp ++ - (x11_apply_settings): Merge the comment about defaultIM ++ overwritten by r52 from r45 ++ ++2004-07-31 LiuCougar ++ ++ new environment variable QT_IM_MODULE to overwrite the default inputmethod plugin ++2004-07-31 LiuCougar ++ ++ "deleteLater" is safer then "delete" QObject directly ++2004-07-30 YamaKen ++ ++ * 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 ++ ++ * 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 ++ ++ * 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 ++ ++ * 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 ++ ++ * src/kernel/qwidget_x11.cpp ++ - (changeInputContext): ++ * Remove unnecessary createInputContext() ++ * Reorder the code fragments to reduce temporal memory consumption ++ ++2004-07-27 YamaKen ++ ++ * 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 ++ ++ * 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 ++ ++ * 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 ++ ++ * 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 ++ ++ * This commit is a comment update. No code is modified. ++ ++ * src/kernel/qinputcontext.cpp ++ - (class QInputContext): Modify several expressions ++ ++2004-07-23 YamaKen ++ ++ * 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 ++ ++ * 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 ++ ++ * src/input/qsimpleinputcontext.h ++ - Add a copyright and license header ++ ++ * src/input/qsimpleinputcontext.cpp ++ - Add a copyright and license header ++ ++2004-07-23 YamaKen ++ ++ * 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 ++ ++ * src/input/qsimpleinputcontext.cpp ++ - OOps. fix typo. ++ ++2004-07-23 Kazuki Ohta ++ ++ * src/input/qsimpleinputcontext.cpp ++ - follow Qt coding rule ++ - more valid capitalize case ++ ++2004-07-23 Kazuki Ohta ++ ++ * src/input/qinputcontextfactory.cpp ++ - enable QSimpleInputContext by specifying in qtrc "DefaultInputMethod=simple" ++ ++2004-07-23 Kazuki Ohta ++ ++ * 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 ++ ++ * kernel/qapplication_x11.cpp, kernel/qnamespace.h ++ - add dead key entries ++ ++2004-07-22 YamaKen ++ ++ * 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 ++ ++ * 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 ++ ++ * 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 ++ ++ * src/input/qmultiinputcontext.cpp ++ - (changeInputMethod): Fix invalid imIndex circulation. Thanks ++ to Kazuki for reporting ++ ++2004-07-20 YamaKen ++ ++ * 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 ++ ++ * 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 ++ ++ * src/input/qmultiinputcontext.cpp ++ - (changeInputMethod): Fix the conversion to const char * from ++ identifierName() ++ ++2004-07-20 YamaKen ++ ++ * 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 ++ ++ * 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 ++ ++ use virtual insert version to make subclasses work as expected (merged from bc-branch r19) ++2004-07-16 Kazuki Ohta ++ ++ * src/input/qinputcontextfactory.h: not the definition of QInputContextPlugin ++ ++2004-07-13 YamaKen ++ ++ * 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 ++ ++ * src/kernel/qwidget.h ++ - (sendMouseEventToInputContext): Move into #if defined(Q_WS_X11) ++ because it is not implemented in other platforms ++ ++2004-07-11 YamaKen ++ ++ * 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 ++ ++ replace sendEvent with postEvent in qinputcontext to improve the process performance of IMCompose events ++2004-07-08 YamaKen ++ ++ * 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 ++ ++ 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 ++ ++ "QLineEdit should only setMicroFocus if the cursorRect has changed" by cougar ++ ++2004-07-06 Daisuke Kameda ++ ++ Re-Creating immodule for Qt/X11 trunk ++ ++2004-06-22 YamaKen ++ ++ * 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 ++ ++ * 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 ++ ++ * 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 ++ ++ * 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 ++ ++ * src/kernel/qlineedit.cpp ++ - (QLineEditPrivate::xToPosInternal, QLineEditPrivate::xToPos): ++ Fix loose placement to tail when clicking beyond the string ++ ++2004-06-10 YamaKen ++ ++ * 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 ++ ++ * 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 ++ ++ * 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 ++ ++ * 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 ++ ++ * 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 ++ ++ * 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 ++ ++ * src/input/qximinputcontext_x11.cpp (x11FilterEvent): Fix ++ commit problem except for on-the-spot style ++ ++2004-05-31 YamaKen ++ ++ * First 'Simplified API' patch. A lot of changes to be described ++ ++2004-03-16 Daisuke Kameda ++ ++ * A lot of changes to be described before this date. Almost ++ of code are written by Daisuke Kameda +--- changes.immodule ++++ changes.immodule +@@ -0,0 +1,248 @@ ++This file describes significant change from ++qt-x11-immodule-bc-qt3.3.2-20040623. ++ ++Differences from previous release ++(qt-x11-immodule-unified-qt3.3.3-20040819) are itemized with '+' ++sign. Search it to track incremental change. ++ ++**************************************************************************** ++* For users * ++**************************************************************************** ++ ++General ++------- ++ +++ A strange character inversion problem on some input methods has been ++ fixed ++ ++ ++Input methods ++------------- ++ ++- Added "simple" input method which provides dead/multi key composing ++ for latin languages ++ ++ ++User Interface ++-------------- ++ ++- Added input method selection menu in the context menu of text ++ widgets ++ ++ ++Configuration ++------------- ++ +++ default IM configuration feature of qtconfig has been disabled in BC ++ mode. This is a political change to avoid the confusion about input ++ method configuration in accordance with GTK+ environment. ++ ++ See following discussion for further information. ++ ++ http://freedesktop.org/pipermail/immodule-qt/2004-August/000416.html ++ ++- Added new environment variables QT_IM_SWITCHER and QT_IM_MODULE to ++ set user's favorite input method as default. See README.immodule for ++ examples. ++ ++ ++Build & Install ++--------------- ++ +++ configure options have been changed for internal reasons. See 'How ++ to install' section of README.immodule ++ ++- This version of immodule requires corresponding version of each ++ input method plugins (i.e. update your additional input method ++ plugins) ++ ++- Plugin directory has been changed from $QTDIR/plugins/input/ to ++ $QTDIR/plugins/inputmethods/. Delete old directory. ++ ++- Some codes have been changed to allow compiling against Qt 3.2.x or ++ earlier. ++ ++ ++**************************************************************************** ++* For develpers * ++**************************************************************************** ++ ++Documents ++--------- ++ ++- Almost description of QInputContext and QInputContextPlugin has been ++ filled. Feel free to ask obscure things at our mailinglist. ++ ++ ++New features ++------------ ++ ++- Pluggable input method switcher ++ ++ Now we can write input method switcher as an ordinary input method ++ plugin. The two plugins 'imsw-multi' and 'imsw-none' are provided as ++ default. But the architecture needs more discussion about whether ++ the design is right or not. Join the discussion. ++ ++- Pluggable popup menu ++ ++ Any input method can provide its own popup menu. See ++ http://freedesktop.org/pipermail/immodule-qt/2004-August/000266.html ++ for further information. ++ ++- QInputContext proxying ++ ++ Some methods of QInputContext have been changed to enable ++ QInputContext proxying. This feature is required to implement ++ pluggable input method switcher. ++ ++ ++General ++------- ++ +++ QInputContext has been source compatible with Qt4 version. Basic ++ input method plugin can be source compatible without #ifdef. Only ++ pluggable popup menu requires #ifdef'ed different code. In addition, ++ be careful about use of classes that is deprecated in Qt4. ++ ++- Our two development tree for Qt3 'Binary Compatible' and 'ALL' have ++ been merged into this unified source tree. The source tree is called ++ 'Unified' patch. ++ ++- 'dead keys' for latin languages have been added into Qt::Key ++ ++- Added plugins/src/inputmethods directory to build input method ++ plugins within the Qt source tree. The directory name 'inputmethods' ++ is intended to be compatible with Qt/Embedded. Install directory ++ name is still kept as 'input' for backward compatibility ++ ++- Changed XIM input method to a plugin instead of directly link into ++ libqt ++ ++- Plugin directory has been changed from $QTDIR/plugins/input/ to ++ $QTDIR/plugins/inputmethods/. Replace install directory with new ++ one. ++ ++- Fixed some bugs in previous qt-x11-immodule-bc-qt3.3.2-20040623. See ++ following log for more detail. ++ ++ * src/kernel/qwidget_x11.cpp ++ - (destroyInputContext): Replace the code with original Simplified ++ API patch. See the comment to recognize the original intention ++ - (focusInputContext): Fix a condition to call qic->setFocus() as ++ originally written. See added comment to recognize the original ++ intention ++ ++- QLocale dependency has been removed to be compiled on Qt 3.2.x or ++ earlier ++ ++- Many internal improvements and cleanups ++ ++ ++API Changes in qt-x11-immodule-unified-qt3.3.3-20040910 ++------------------------------------------------------- +++ QInputContext ++ ++ * QInputContext() ++ ++ Added 'parent' arg to be compatible with Qt4. Since the arg ++ defaults to 0, no modification of plugins are required. ++ ++ * language() ++ * identifierName() ++ ++ Return type of these two methods have been changed from QCString ++ which is deprecated in Qt4 to QString to make plugins source ++ compatible with Qt4. ++ ++ * addActionsTo() ++ ++ New method for Qt4 text widget developer ++ ++ ++API Changes in qt-x11-immodule-unified-qt3.3.3-20040812 ++------------------------------------------------------- ++ ++- QInputContext proxying ++ ++ QInputContext have been changed as follows to enable QInputContext ++ proxying. ++ ++ 1. Use signal to deliver QIMEvent instead of explicit ++ postEvent(). This enables QIMEvent proxying and better platform ++ abstraction. Corresponding slot is created as ++ QApplication::imEventReceived(). ++ ++ 2. Move some methods of QInputContext to public from protected or ++ private. This enables that proxy-IM can access slave methods. ++ ++ 3. Make some methods of QInputContext virtual. This enables ++ overriding the methods as proxy ++ ++ 4. Rename QInputContext::name() to identifierName() to avoid ++ conflicting with QObject::name() ++ ++ ++- QInputContext ++ ++ * language() ++ ++ New method to indicate current language ++ ++ * menus() ++ ++ New method for the pluggable popup menu feature ++ ++ * addMenusTo() ++ ++ New method for text widget developer ++ ++ * deletionRequested() ++ ++ New signal to request deletion of this instance. This is added for ++ fatal error handling ++ ++ * identifierName() ++ ++ This replaces name() of previous API to avoid conflicting with ++ QObject::name(), and to distinguish the role from displayName() ++ ++ * filterEvent() ++ ++ Turn the argument into const. See ++ http://freedesktop.org/pipermail/immodule-qt/2004-August/000335.html ++ for further information ++ ++ * isComposing ++ * isPreeditRelocationEnabled ++ ++ Move to public from protected to allow proxying ++ ++ * setFocusWidget ++ * setHolderWidget ++ * releaseComposingWidget ++ ++ Move to public from private to allow proxying ++ ++ * focusWidget ++ * holderWidget ++ ++ - Make public from protected to allow proxying ++ - Make virtual to allow overriding the method as proxy ++ ++- QInputContextPlugin ++ ++ * languages() ++ ++ New method which returns what languages are supported by the ++ QInputContext instance ++ ++ * displayName() ++ ++ New method which returns a user friendly i18n-ized name of the ++ QInputContext instance ++ ++ * description() ++ ++ New method which returns a i18n-ized brief description of the ++ QInputContext instance +--- configure ++++ configure +@@ -223,7 +223,7 @@ + fi + + # licensed modules depend on type of commercial license +-MODULES="styles tools kernel widgets dialogs iconview workspace" ++MODULES="styles tools kernel widgets dialogs iconview workspace inputmethod" + [ "$PLATFORM_QWS" = "yes" ] && [ "$Products" = "qt-professional" ] && MODULES="$MODULES network" + [ "$Products" != "qt-professional" ] && MODULES="$MODULES network canvas table xml opengl sql" + CFG_MODULES_AVAILABLE=$MODULES +@@ -270,6 +270,9 @@ + CFG_SQL_AUTODETECTED= + CFG_GFX_AVAILABLE= + CFG_STYLE_AVAILABLE= ++#Keep this position for CFG_IM* to avoid patch rejection ++CFG_IM=yes ++CFG_IM_EXT=no + CFG_TABLET=auto + CFG_XKB=auto + CFG_NIS=auto +@@ -401,6 +404,12 @@ + VAR=fatal_error + VAL=no + ;; ++ #Qt style yes options for immodule ++ #Keep this place to avoid patch rejection ++ -inputmethod|-inputmethod-ext) ++ VAR=`echo $1 | sed "s,^-\(.*\),\1,"` ++ VAL=yes ++ ;; + -embedded) + VAR=embedded + # this option may or may not be followed by an argument +@@ -1020,6 +1029,20 @@ + dlopen-opengl) + CFG_DLOPEN_OPENGL="$VAL" + ;; ++ inputmethod) ++ if [ "$VAL" = "yes" ] || [ "$VAL" = "no" ]; then ++ CFG_IM="$VAL" ++ else ++ UNKNOWN_OPT=yes ++ fi ++ ;; ++ inputmethod-ext) ++ if [ "$VAL" = "yes" ] || [ "$VAL" = "no" ]; then ++ CFG_IM_EXT="$VAL" ++ else ++ UNKNOWN_OPT=yes ++ fi ++ ;; + *) + UNKNOWN_OPT=yes + ;; +@@ -1899,6 +1922,13 @@ + CFG_GFX_AVAILABLE=`echo $CFG_GFX_AVAILABLE` + fi + ++# immodule extensions ++if [ "$CFG_IM" = "no" ]; then ++ CFG_IM_EXT=no ++fi ++if [ "$CFG_IM_EXT" = "yes" ]; then ++ CFG_IM=yes ++fi + + #------------------------------------------------------------------------------- + # help - interactive parts of the script _after_ this section please +@@ -2206,6 +2236,20 @@ + XKY="*" + XKN=" " + fi ++ if [ "$CFG_IM" = "no" ]; then ++ IMY=" " ++ IMN="*" ++ else ++ IMY="*" ++ IMN=" " ++ fi ++ if [ "$CFG_IM_EXT" = "no" ]; then ++ IXY=" " ++ IXN="*" ++ else ++ IXY="*" ++ IXN=" " ++ fi + cat << EOF + + Qt/X11 only: +@@ -2254,6 +2298,14 @@ + -dlopen-opengl ..... Qt uses dlopen(3) to resolve OpenGL functions + (instead of linking with OpenGL libraries directly). + ++ $IMN -no-inputmethod .... Do not compile immodule (extensible input method) ++ support. ++ $IMY -inputmethod ....... Compile immodule support. ++ ++ $IXN -no-inputmethod-ext Do not compile more immodule extensions support. ++ $IXY -inputmethod-ext ... Compile more immodule extensions support. ++ (breaks ABI with standard Qt3). ++ + EOF + fi + +@@ -2983,6 +3035,16 @@ + if [ "$CFG_XKB" = "yes" ]; then + QMAKE_CONFIG="$QMAKE_CONFIG xkb" + fi ++ if [ "$CFG_IM" = "yes" ]; then ++ QMAKE_CONFIG="$QMAKE_CONFIG inputmethod" ++ elif [ "$CFG_IM" = "no" ]; then ++ QCONFIG_FLAGS="$QCONFIG_FLAGS QT_NO_IM" ++ fi ++ if [ "$CFG_IM_EXT" = "yes" ]; then ++ QMAKE_CONFIG="$QMAKE_CONFIG inputmethod-ext" ++ elif [ "$CFG_IM_EXT" = "no" ]; then ++ QCONFIG_FLAGS="$QCONFIG_FLAGS QT_NO_IM_EXTENSIONS" ++ fi + elif [ "$PLATFORM_MAC" = "yes" ]; then + if [ "$CFG_TABLET" = "yes" ]; then + QMAKE_CONFIG="$QMAKE_CONFIG tablet" +@@ -3107,7 +3169,7 @@ + # minimal-config small-config medium-config large-config full-config + # + # Modules: +-# styles tools kernel widgets dialogs iconview workspace ++# styles tools kernel widgets dialogs iconview workspace inputmethod + # + # Enterprise/Open Source edition modules: + # network canvas table xml opengl sql +@@ -3115,6 +3177,8 @@ + # Options: + # stl + # ++# X11 : inputmethod-ext ++# + # Things that do not affect the Qt API/ABI: + # system-jpeg no-jpeg jpeg + # system-mng no-mng mng +@@ -3136,10 +3200,10 @@ + # tablet + # ipv6 + # +-# X11 : xftnameunparse x11sm xinerama xcursor xrandr xrender xftfreetype xkb ++# X11 : xftnameunparse x11sm xinerama xcursor xrandr xrender xftfreetype xkb inputmethod + # Embedded: embedded ft + # +-ALL_OPTIONS="styles tools kernel widgets dialogs iconview workspace network canvas table xml opengl sql stl" ++ALL_OPTIONS="styles tools kernel widgets dialogs iconview workspace inputmethod network canvas table xml opengl sql stl" + BUILD_CONFIG= + BUILD_OPTIONS= + +@@ -3153,7 +3217,7 @@ + BUILD_CONFIG="$config_option" + ;; + +- styles|tools|kernel|widgets|dialogs|iconview|workspace|network|canvas|table|xml|opengl|sql|stl) ++ styles|tools|kernel|widgets|dialogs|iconview|workspace|inputmethod|network|canvas|table|xml|opengl|sql|stl) + # these config options affect the Qt API/ABI. they should influence + # the generation of the buildkey, so we don't skip them + SKIP="no" +@@ -3500,6 +3564,8 @@ + echo "XRender support ..... $CFG_XRENDER" + echo "Xft support ......... $CFG_FREETYPE" + echo "XKB Support ......... $CFG_XKB" ++ echo "immodule support .... $CFG_IM" ++ echo "immodule ext support $CFG_IM_EXT" + elif [ "$PLATFORM_MAC" = "yes" ]; then + echo "Accessibility ....... $CFG_ACCESSIBILITY" + echo "Tablet support ...... $CFG_TABLET" +--- make-symlinks.sh ++++ make-symlinks.sh +@@ -0,0 +1,12 @@ ++#!/bin/sh ++cd include ++rm -f q*.h ++ln -s ../src/*/q*.h . ++ln -s ../extensions/*/src/q*.h . ++ln -s ../tools/assistant/lib/qassistantclient.h . ++ln -s ../tools/designer/uilib/qwidgetfactory.h . ++rm -f q*_p.h ++cd private ++rm -f q*_p.h ++ln -s ../../src/*/q*_p.h . ++ +--- plugins/src/inputmethods/imsw-multi/imsw-multi.pro ++++ plugins/src/inputmethods/imsw-multi/imsw-multi.pro +@@ -0,0 +1,14 @@ ++TEMPLATE = lib ++TARGET = qimsw-multi ++DESTDIR = ../../../inputmethods ++ ++INCLUDEPATH += . ++CONFIG += qt warn_on debug plugin ++target.path += $$plugins.path/inputmethods ++INSTALLS += target ++ ++# Input ++HEADERS += qmultiinputcontext.h \ ++ qmultiinputcontextplugin.h ++SOURCES += qmultiinputcontext.cpp \ ++ qmultiinputcontextplugin.cpp +--- plugins/src/inputmethods/imsw-multi/qmultiinputcontext.cpp ++++ plugins/src/inputmethods/imsw-multi/qmultiinputcontext.cpp +@@ -0,0 +1,379 @@ ++/**************************************************************************** ++** $Id$ ++** ++** Implementation of QMultiInputContext class ++** ++** Copyright (C) 2004 immodule for Qt Project. All rights reserved. ++** ++** This file is written to contribute to Trolltech AS under their own ++** licence. You may use this file under your Qt license. Following ++** description is copied from their original file headers. Contact ++** immodule-qt@freedesktop.org if any conditions of this licensing are ++** not clear to you. ++** ++** ++** This file is part of the input method module of the Qt GUI Toolkit. ++** ++** This file may be distributed under the terms of the Q Public License ++** as defined by Trolltech AS of Norway and appearing in the file ++** LICENSE.QPL included in the packaging of this file. ++** ++** This file may be distributed and/or modified under the terms of the ++** GNU General Public License version 2 as published by the Free Software ++** Foundation and appearing in the file LICENSE.GPL included in the ++** packaging of this file. ++** ++** Licensees holding valid Qt Enterprise Edition or Qt Professional Edition ++** licenses may use this file in accordance with the Qt Commercial License ++** Agreement provided with the Software. ++** ++** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE ++** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. ++** ++** See http://www.trolltech.com/pricing.html or email sales@trolltech.com for ++** information about Qt Commercial License Agreements. ++** See http://www.trolltech.com/qpl/ for QPL licensing information. ++** See http://www.trolltech.com/gpl/ for GPL licensing information. ++** ++** Contact info@trolltech.com if any conditions of this licensing are ++** not clear to you. ++** ++**********************************************************************/ ++ ++#ifndef QT_NO_IM ++#include "qmultiinputcontext.h" ++#include ++#include ++#include ++#ifndef QT_NO_IM_EXTENSIONS ++#include ++#endif ++ ++#include ++ ++#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 *QMultiInputContext::menus() ++{ ++ QInputContextMenu *imSelMenu = new QInputContextMenu; ++ imSelMenu->title = tr( "Select Input &Method" ); ++ imSelMenu->popup = createImSelPopup(); ++ ++ QPtrList *result = new QPtrList; ++ result->append( imSelMenu ); ++ ++ QPtrList *slaveMenus = ( slave() ) ? slave()->menus() : 0; ++ if ( slaveMenus ) { ++ for ( QPtrList::Iterator it = slaveMenus->begin(); ++ it != slaveMenus->end(); ++ ++it ) { ++ QInputContextMenu *slaveMenu = *it; ++ result->append( slaveMenu ); ++ } ++ delete slaveMenus; ++ } ++ ++ return result; ++} ++ ++QPopupMenu *QMultiInputContext::createImSelPopup() ++{ ++ if ( popup ) ++ delete popup; ++ ++ popup = new QPopupMenu(); ++ keyDict.clear(); ++ ++ QStringList keys = QInputContextFactory::keys(); ++ for ( uint i=0; i < keys.size(); i++ ) { ++ QString idName = keys[i]; ++ bool isIMSwitcher = idName.startsWith( "imsw-" ); ++ ++ if ( ! isIMSwitcher ) { ++ QString dispName = QInputContextFactory::displayName( idName ); ++ if ( dispName.isEmpty() ) ++ dispName = idName; ++ ++ int id = popup->insertItem( dispName ); ++ keyDict.insert( (long)id, new QString( idName ) ); ++ ++ if ( idName == currentIMKey ) ++ popup->setItemChecked( id, true ); ++ ++ QString descriptionStr = QInputContextFactory::description( idName ); ++ if ( ! descriptionStr.isEmpty() ) ++ popup->setWhatsThis( id, descriptionStr ); ++ } ++ } ++ ++ QObject::connect( popup, SIGNAL(activated(int)), ++ this, SLOT(changeInputMethodWithMenuId(int)) ); ++ ++ return popup; ++} ++ ++void QMultiInputContext::changeInputMethodWithMenuId( int menuid ) ++{ ++ QString *key = keyDict.find( (long)menuid ); ++ changeInputMethod( (*key) ); ++} ++ ++#endif +--- plugins/src/inputmethods/imsw-multi/qmultiinputcontext.h ++++ plugins/src/inputmethods/imsw-multi/qmultiinputcontext.h +@@ -0,0 +1,124 @@ ++/**************************************************************************** ++** $Id$ ++** ++** Definition of QMultiInputContext class ++** ++** Copyright (C) 2004 immodule for Qt Project. All rights reserved. ++** ++** This file is written to contribute to Trolltech AS under their own ++** licence. You may use this file under your Qt license. Following ++** description is copied from their original file headers. Contact ++** immodule-qt@freedesktop.org if any conditions of this licensing are ++** not clear to you. ++** ++** ++** This file is part of the input method module of the Qt GUI Toolkit. ++** ++** This file may be distributed under the terms of the Q Public License ++** as defined by Trolltech AS of Norway and appearing in the file ++** LICENSE.QPL included in the packaging of this file. ++** ++** This file may be distributed and/or modified under the terms of the ++** GNU General Public License version 2 as published by the Free Software ++** Foundation and appearing in the file LICENSE.GPL included in the ++** packaging of this file. ++** ++** Licensees holding valid Qt Enterprise Edition or Qt Professional Edition ++** licenses may use this file in accordance with the Qt Commercial License ++** Agreement provided with the Software. ++** ++** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE ++** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. ++** ++** See http://www.trolltech.com/pricing.html or email sales@trolltech.com for ++** information about Qt Commercial License Agreements. ++** See http://www.trolltech.com/qpl/ for QPL licensing information. ++** See http://www.trolltech.com/gpl/ for GPL licensing information. ++** ++** Contact info@trolltech.com if any conditions of this licensing are ++** not clear to you. ++** ++**********************************************************************/ ++ ++#ifndef QMULTIINPUTCONTEXT_H ++#define QMULTIINPUTCONTEXT_H ++ ++#ifndef QT_NO_IM ++ ++#include ++#include ++#include ++#include ++#include ++ ++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 *qt4menus(); ++#endif ++ QPtrList *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 keyDict; ++ QGuardedPtr popup; ++ QString currentIMKey; ++}; ++ ++#endif //Q_NO_IM ++ ++#endif // QMULTIINPUTCONTEXT_H +--- plugins/src/inputmethods/imsw-multi/qmultiinputcontextplugin.cpp ++++ plugins/src/inputmethods/imsw-multi/qmultiinputcontextplugin.cpp +@@ -0,0 +1,88 @@ ++/**************************************************************************** ++** $Id$ ++** ++** Implementation of QMultiInputContextPlugin class ++** ++** Copyright (C) 2004 immodule for Qt Project. All rights reserved. ++** ++** This file is written to contribute to Trolltech AS under their own ++** licence. You may use this file under your Qt license. Following ++** description is copied from their original file headers. Contact ++** immodule-qt@freedesktop.org if any conditions of this licensing are ++** not clear to you. ++** ++** ++** This file is part of the input method module of the Qt GUI Toolkit. ++** ++** This file may be distributed under the terms of the Q Public License ++** as defined by Trolltech AS of Norway and appearing in the file ++** LICENSE.QPL included in the packaging of this file. ++** ++** This file may be distributed and/or modified under the terms of the ++** GNU General Public License version 2 as published by the Free Software ++** Foundation and appearing in the file LICENSE.GPL included in the ++** packaging of this file. ++** ++** Licensees holding valid Qt Enterprise Edition or Qt Professional Edition ++** licenses may use this file in accordance with the Qt Commercial License ++** Agreement provided with the Software. ++** ++** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE ++** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. ++** ++** See http://www.trolltech.com/pricing.html or email sales@trolltech.com for ++** information about Qt Commercial License Agreements. ++** See http://www.trolltech.com/qpl/ for QPL licensing information. ++** See http://www.trolltech.com/gpl/ for GPL licensing information. ++** ++** Contact info@trolltech.com if any conditions of this licensing are ++** not clear to you. ++** ++**********************************************************************/ ++ ++#ifndef QT_NO_IM ++#include "qmultiinputcontext.h" ++#include "qmultiinputcontextplugin.h" ++#include ++#include ++ ++ ++QMultiInputContextPlugin::QMultiInputContextPlugin() ++{ ++} ++ ++QMultiInputContextPlugin::~QMultiInputContextPlugin() ++{ ++} ++ ++QStringList QMultiInputContextPlugin::keys() const ++{ ++ // input method switcher should named with "imsw-" prefix to ++ // prevent to be listed in ordinary input method list. ++ return QStringList( "imsw-multi" ); ++} ++ ++QInputContext *QMultiInputContextPlugin::create( const QString &key ) ++{ ++ return new QMultiInputContext; ++} ++ ++QStringList QMultiInputContextPlugin::languages( const QString &key ) ++{ ++ return QStringList( "" ); ++} ++ ++QString QMultiInputContextPlugin::displayName( const QString &key ) ++{ ++ return tr( "Multiple Input Method Switcher" ); ++} ++ ++QString QMultiInputContextPlugin::description( const QString &key ) ++{ ++ return tr( "Multiple input method switcher that uses the context menu of the text widgets" ); ++} ++ ++ ++Q_EXPORT_PLUGIN( QMultiInputContextPlugin ) ++ ++#endif +--- plugins/src/inputmethods/imsw-multi/qmultiinputcontextplugin.h ++++ plugins/src/inputmethods/imsw-multi/qmultiinputcontextplugin.h +@@ -0,0 +1,63 @@ ++/**************************************************************************** ++** $Id$ ++** ++** Definition of QMultiInputContextPlugin class ++** ++** Copyright (C) 2004 immodule for Qt Project. All rights reserved. ++** ++** This file is written to contribute to Trolltech AS under their own ++** licence. You may use this file under your Qt license. Following ++** description is copied from their original file headers. Contact ++** immodule-qt@freedesktop.org if any conditions of this licensing are ++** not clear to you. ++** ++** ++** This file is part of the input method module of the Qt GUI Toolkit. ++** ++** This file may be distributed under the terms of the Q Public License ++** as defined by Trolltech AS of Norway and appearing in the file ++** LICENSE.QPL included in the packaging of this file. ++** ++** This file may be distributed and/or modified under the terms of the ++** GNU General Public License version 2 as published by the Free Software ++** Foundation and appearing in the file LICENSE.GPL included in the ++** packaging of this file. ++** ++** Licensees holding valid Qt Enterprise Edition or Qt Professional Edition ++** licenses may use this file in accordance with the Qt Commercial License ++** Agreement provided with the Software. ++** ++** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE ++** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. ++** ++** See http://www.trolltech.com/pricing.html or email sales@trolltech.com for ++** information about Qt Commercial License Agreements. ++** See http://www.trolltech.com/qpl/ for QPL licensing information. ++** See http://www.trolltech.com/gpl/ for GPL licensing information. ++** ++** Contact info@trolltech.com if any conditions of this licensing are ++** not clear to you. ++** ++**********************************************************************/ ++ ++#ifndef QT_NO_IM ++#include "qmultiinputcontext.h" ++#include ++#include ++ ++ ++class QMultiInputContextPlugin : public QInputContextPlugin ++{ ++ Q_OBJECT ++public: ++ QMultiInputContextPlugin(); ++ ~QMultiInputContextPlugin(); ++ ++ QStringList keys() const; ++ QInputContext *create( const QString &key ); ++ QStringList languages( const QString &key ); ++ QString displayName( const QString &key ); ++ QString description( const QString &key ); ++}; ++ ++#endif +--- plugins/src/inputmethods/imsw-none/imsw-none.pro ++++ plugins/src/inputmethods/imsw-none/imsw-none.pro +@@ -0,0 +1,12 @@ ++TEMPLATE = lib ++TARGET = qimsw-none ++DESTDIR = ../../../inputmethods ++ ++INCLUDEPATH += . ++CONFIG += qt warn_on debug plugin ++target.path += $$plugins.path/inputmethods ++INSTALLS += target ++ ++# Input ++HEADERS += qnoneinputcontextplugin.h ++SOURCES += qnoneinputcontextplugin.cpp +--- plugins/src/inputmethods/imsw-none/qnoneinputcontextplugin.cpp ++++ plugins/src/inputmethods/imsw-none/qnoneinputcontextplugin.cpp +@@ -0,0 +1,101 @@ ++/**************************************************************************** ++** $Id$ ++** ++** Implementation of QNoneInputContextPlugin class ++** ++** Copyright (C) 2004 immodule for Qt Project. All rights reserved. ++** ++** This file is written to contribute to Trolltech AS under their own ++** licence. You may use this file under your Qt license. Following ++** description is copied from their original file headers. Contact ++** immodule-qt@freedesktop.org if any conditions of this licensing are ++** not clear to you. ++** ++** ++** This file is part of the input method module of the Qt GUI Toolkit. ++** ++** This file may be distributed under the terms of the Q Public License ++** as defined by Trolltech AS of Norway and appearing in the file ++** LICENSE.QPL included in the packaging of this file. ++** ++** This file may be distributed and/or modified under the terms of the ++** GNU General Public License version 2 as published by the Free Software ++** Foundation and appearing in the file LICENSE.GPL included in the ++** packaging of this file. ++** ++** Licensees holding valid Qt Enterprise Edition or Qt Professional Edition ++** licenses may use this file in accordance with the Qt Commercial License ++** Agreement provided with the Software. ++** ++** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE ++** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. ++** ++** See http://www.trolltech.com/pricing.html or email sales@trolltech.com for ++** information about Qt Commercial License Agreements. ++** See http://www.trolltech.com/qpl/ for QPL licensing information. ++** See http://www.trolltech.com/gpl/ for GPL licensing information. ++** ++** Contact info@trolltech.com if any conditions of this licensing are ++** not clear to you. ++** ++**********************************************************************/ ++ ++#ifndef QT_NO_IM ++#include "qnoneinputcontextplugin.h" ++#include ++#include ++#include ++ ++ ++QNoneInputContextPlugin::QNoneInputContextPlugin() ++{ ++} ++ ++QNoneInputContextPlugin::~QNoneInputContextPlugin() ++{ ++} ++ ++QStringList QNoneInputContextPlugin::keys() const ++{ ++ // input method switcher should named with "imsw-" prefix to ++ // prevent to be listed in ordinary input method list. ++ return QStringList( "imsw-none" ); ++} ++ ++QInputContext *QNoneInputContextPlugin::create( const QString &key ) ++{ ++ QString actuallySpecifiedKey; ++ ++ bool isIMSwitcher = key.startsWith( "imsw-" ); ++ if ( ! isIMSwitcher ) ++ return 0; ++ ++ if ( getenv( "QT_IM_MODULE" ) ) { ++ actuallySpecifiedKey = getenv( "QT_IM_MODULE" ); ++ } else { ++ QSettings settings; ++ actuallySpecifiedKey = settings.readEntry( "/qt/DefaultInputMethod", "xim" ); ++ } ++ ++ return QInputContextFactory::create( actuallySpecifiedKey, 0 ); ++} ++ ++QStringList QNoneInputContextPlugin::languages( const QString &key ) ++{ ++ return QStringList( "" ); ++} ++ ++QString QNoneInputContextPlugin::displayName( const QString &key ) ++{ ++ return tr( "Dummy Input Method Switcher" ); ++} ++ ++QString QNoneInputContextPlugin::description( const QString &key ) ++{ ++ return tr( "Dummy input method switcher that uses the context menu of the text widgets" ); ++} ++ ++ ++Q_EXPORT_PLUGIN( QNoneInputContextPlugin ) ++ ++#endif +--- plugins/src/inputmethods/imsw-none/qnoneinputcontextplugin.h ++++ plugins/src/inputmethods/imsw-none/qnoneinputcontextplugin.h +@@ -0,0 +1,62 @@ ++/**************************************************************************** ++** $Id$ ++** ++** Definition of QNoneInputContextPlugin class ++** ++** Copyright (C) 2004 immodule for Qt Project. All rights reserved. ++** ++** This file is written to contribute to Trolltech AS under their own ++** licence. You may use this file under your Qt license. Following ++** description is copied from their original file headers. Contact ++** immodule-qt@freedesktop.org if any conditions of this licensing are ++** not clear to you. ++** ++** ++** This file is part of the input method module of the Qt GUI Toolkit. ++** ++** This file may be distributed under the terms of the Q Public License ++** as defined by Trolltech AS of Norway and appearing in the file ++** LICENSE.QPL included in the packaging of this file. ++** ++** This file may be distributed and/or modified under the terms of the ++** GNU General Public License version 2 as published by the Free Software ++** Foundation and appearing in the file LICENSE.GPL included in the ++** packaging of this file. ++** ++** Licensees holding valid Qt Enterprise Edition or Qt Professional Edition ++** licenses may use this file in accordance with the Qt Commercial License ++** Agreement provided with the Software. ++** ++** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE ++** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. ++** ++** See http://www.trolltech.com/pricing.html or email sales@trolltech.com for ++** information about Qt Commercial License Agreements. ++** See http://www.trolltech.com/qpl/ for QPL licensing information. ++** See http://www.trolltech.com/gpl/ for GPL licensing information. ++** ++** Contact info@trolltech.com if any conditions of this licensing are ++** not clear to you. ++** ++**********************************************************************/ ++ ++#ifndef QT_NO_IM ++#include ++#include ++ ++ ++class QNoneInputContextPlugin : public QInputContextPlugin ++{ ++ Q_OBJECT ++public: ++ QNoneInputContextPlugin(); ++ ~QNoneInputContextPlugin(); ++ ++ QStringList keys() const; ++ QInputContext *create( const QString &key ); ++ QStringList languages( const QString &key ); ++ QString displayName( const QString &key ); ++ QString description( const QString &key ); ++}; ++ ++#endif +--- plugins/src/inputmethods/inputmethods.pro ++++ plugins/src/inputmethods/inputmethods.pro +@@ -0,0 +1,11 @@ ++TEMPLATE = subdirs ++ ++unix { ++ !embedded:!mac:CONFIG += x11 ++} ++# XIM should be enabled only for X11 platform, but following ++# configuration is not working properly yet ++#im:x11:SUBDIRS += xim ++ ++inputmethod:SUBDIRS += imsw-none imsw-multi simple ++inputmethod:SUBDIRS += xim +--- plugins/src/inputmethods/simple/composetable.cpp ++++ plugins/src/inputmethods/simple/composetable.cpp +@@ -0,0 +1,5605 @@ ++/**************************************************************************** ++** $Id$ ++** ++** Compose table for QSimpleInputContext class ++** ++** Copyright (C) 2004 immodule for Qt Project. All rights reserved. ++** ++** This file is written to contribute to Trolltech AS under their own ++** licence. You may use this file under your Qt license. Following ++** description is copied from their original file headers. Contact ++** immodule-qt@freedesktop.org if any conditions of this licensing are ++** not clear to you. ++** ++** ++** This file is part of the input method module of the Qt GUI Toolkit. ++** ++** This file may be distributed under the terms of the Q Public License ++** as defined by Trolltech AS of Norway and appearing in the file ++** LICENSE.QPL included in the packaging of this file. ++** ++** This file may be distributed and/or modified under the terms of the ++** GNU General Public License version 2 as published by the Free Software ++** Foundation and appearing in the file LICENSE.GPL included in the ++** packaging of this file. ++** ++** Licensees holding valid Qt Enterprise Edition or Qt Professional Edition ++** licenses may use this file in accordance with the Qt Commercial License ++** Agreement provided with the Software. ++** ++** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE ++** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. ++** ++** See http://www.trolltech.com/pricing.html or email sales@trolltech.com for ++** information about Qt Commercial License Agreements. ++** See http://www.trolltech.com/qpl/ for QPL licensing information. ++** See http://www.trolltech.com/gpl/ for GPL licensing information. ++** ++** Contact info@trolltech.com if any conditions of this licensing are ++** not clear to you. ++** ++**********************************************************************/ ++ ++// The compose table included in file is converted from a Compose file ++// of X.org's X11R6.7.0. Original header is follows ++ ++// UTF-8 (Unicode) compose sequence ++// David.Monniaux@ens.fr ++// ++// $XFree86: xc/nls/Compose/en_US.UTF-8,v 1.11 2004/01/06 13:14:04 pascal Exp $ ++ ++ ++#include "qsimpleinputcontext.h" ++ ++#include ++ ++static const QComposeTableElement defaultTable[] = { ++// /* broken */ { {0x0000, 0x0000, 0, 0, 0, 0}, 0x1eda }, // U1EDA # LATIN CAPITAL LETTER O WITH HORN AND ACUTE ++// /* broken */ { {0x0000, 0x0000, 0, 0, 0, 0}, 0x1edb }, // U1EDB # LATIN SMALL LETTER O WITH HORN AND ACUTE ++// /* broken */ { {0x0000, 0x0000, 0, 0, 0, 0}, 0x1edc }, // U1EDC # LATIN CAPITAL LETTER O WITH HORN AND GRAVE ++// /* broken */ { {0x0000, 0x0000, 0, 0, 0, 0}, 0x1edd }, // U1EDD # LATIN SMALL LETTER O WITH HORN AND GRAVE ++// /* broken */ { {0x0000, 0x0000, 0, 0, 0, 0}, 0x1ede }, // U1EDE # LATIN CAPITAL LETTER O WITH HORN AND HOOK ABOVE ++// /* broken */ { {0x0000, 0x0000, 0, 0, 0, 0}, 0x1edf }, // U1EDF # LATIN SMALL LETTER O WITH HORN AND HOOK ABOVE ++// /* broken */ { {0x0000, 0x0000, 0, 0, 0, 0}, 0x1ee3 }, // U1EE3 # LATIN SMALL LETTER O WITH HORN AND DOT BELOW ++// /* broken */ { {0x0000, 0x0000, 0, 0, 0, 0}, 0x1ee1 }, // U1EE1 # LATIN SMALL LETTER O WITH HORN AND TILDE ++// /* broken */ { {0x0000, 0x0000, 0, 0, 0, 0}, 0x1ee2 }, // U1EE2 # LATIN CAPITAL LETTER O WITH HORN AND DOT BELOW ++// /* broken */ { {0x0000, 0x0000, 0, 0, 0, 0}, 0x1ef1 }, // U1EF1 # LATIN SMALL LETTER U WITH HORN AND DOT BELOW ++// /* broken */ { {0x0000, 0x0000, 0, 0, 0, 0}, 0x1ef0 }, // U1EF0 # LATIN CAPITAL LETTER U WITH HORN AND DOT BELOW ++// /* broken */ { {0x0000, 0x0000, 0, 0, 0, 0}, 0x1eef }, // U1EEF # LATIN SMALL LETTER U WITH HORN AND TILDE ++// /* broken */ { {0x0000, 0x0000, 0, 0, 0, 0}, 0x1eee }, // U1EEE # LATIN CAPITAL LETTER U WITH HORN AND TILDE ++// /* broken */ { {0x0000, 0x0000, 0, 0, 0, 0}, 0x1eed }, // U1EED # LATIN SMALL LETTER U WITH HORN AND HOOK ABOVE ++// /* broken */ { {0x0000, 0x0000, 0, 0, 0, 0}, 0x1eec }, // U1EEC # LATIN CAPITAL LETTER U WITH HORN AND HOOK ABOVE ++// /* broken */ { {0x0000, 0x0000, 0, 0, 0, 0}, 0x1eeb }, // U1EEB # LATIN SMALL LETTER U WITH HORN AND GRAVE ++// /* broken */ { {0x0000, 0x0000, 0, 0, 0, 0}, 0x1eea }, // U1EEA # LATIN CAPITAL LETTER U WITH HORN AND GRAVE ++// /* broken */ { {0x0000, 0x0000, 0, 0, 0, 0}, 0x1ee9 }, // U1EE9 # LATIN SMALL LETTER U WITH HORN AND ACUTE ++// /* broken */ { {0x0000, 0x0000, 0, 0, 0, 0}, 0x1ee8 }, // U1EE8 # LATIN CAPITAL LETTER U WITH HORN AND ACUTE ++// /* broken */ { {0x0000, 0x0000, 0, 0, 0, 0}, 0x1ee0 }, // U1EE0 # LATIN CAPITAL LETTER O WITH HORN AND TILDE ++// /* broken */ { {0x0000, 0x0000, 0x004f, 0, 0, 0}, 0x1e4c }, // U1E4C # LATIN CAPITAL LETTER O WITH TILDE AND ACUTE ++// /* broken */ { {0x0000, 0x0000, 0x0055, 0, 0, 0}, 0x1e78 }, // U1E78 # LATIN CAPITAL LETTER U WITH TILDE AND ACUTE ++// /* broken */ { {0x0000, 0x0000, 0x006f, 0, 0, 0}, 0x1e4d }, // U1E4D # LATIN SMALL LETTER O WITH TILDE AND ACUTE ++// /* broken */ { {0x0000, 0x0000, 0x0075, 0, 0, 0}, 0x1e79 }, // U1E79 # LATIN SMALL LETTER U WITH TILDE AND ACUTE ++// /* broken */ { {0x0000, 0x0041, 0, 0, 0, 0}, 0x00c1 }, // U00C1 # LATIN CAPITAL LETTER A WITH ACUTE ++// /* broken */ { {0x0000, 0x0041, 0, 0, 0, 0}, 0x00c0 }, // U00C0 # LATIN CAPITAL LETTER A WITH GRAVE ++// /* broken */ { {0x0000, 0x0041, 0, 0, 0, 0}, 0x00c3 }, // U00C3 # LATIN CAPITAL LETTER A WITH TILDE ++// /* broken */ { {0x0000, 0x0041, 0, 0, 0, 0}, 0x1ea2 }, // U1EA2 # LATIN CAPITAL LETTER A WITH HOOK ABOVE ++// /* broken */ { {0x0000, 0x0041, 0, 0, 0, 0}, 0x1ea0 }, // U1EA0 # LATIN CAPITAL LETTER A WITH DOT BELOW ++// /* broken */ { {0x0000, 0x0042, 0, 0, 0, 0}, 0x1e04 }, // U1E04 # LATIN CAPITAL LETTER B WITH DOT BELOW ++// /* broken */ { {0x0000, 0x0043, 0, 0, 0, 0}, 0x0106 }, // U0106 # LATIN CAPITAL LETTER C WITH ACUTE ++// /* broken */ { {0x0000, 0x0044, 0, 0, 0, 0}, 0x1e0c }, // U1E0C # LATIN CAPITAL LETTER D WITH DOT BELOW ++// /* broken */ { {0x0000, 0x0045, 0, 0, 0, 0}, 0x1ebc }, // U1EBC # LATIN CAPITAL LETTER E WITH TILDE ++// /* broken */ { {0x0000, 0x0045, 0, 0, 0, 0}, 0x1eb8 }, // U1EB8 # LATIN CAPITAL LETTER E WITH DOT BELOW ++// /* broken */ { {0x0000, 0x0045, 0, 0, 0, 0}, 0x00c9 }, // U00C9 # LATIN CAPITAL LETTER E WITH ACUTE ++// /* broken */ { {0x0000, 0x0045, 0, 0, 0, 0}, 0x00c8 }, // U00C8 # LATIN CAPITAL LETTER E WITH GRAVE ++// /* broken */ { {0x0000, 0x0045, 0, 0, 0, 0}, 0x1eba }, // U1EBA # LATIN CAPITAL LETTER E WITH HOOK ABOVE ++// /* broken */ { {0x0000, 0x0047, 0, 0, 0, 0}, 0x01f4 }, // U01F4 # LATIN CAPITAL LETTER G WITH ACUTE ++// /* broken */ { {0x0000, 0x0048, 0, 0, 0, 0}, 0x1e24 }, // U1E24 # LATIN CAPITAL LETTER H WITH DOT BELOW ++// /* broken */ { {0x0000, 0x0049, 0, 0, 0, 0}, 0x00cd }, // U00CD # LATIN CAPITAL LETTER I WITH ACUTE ++// /* broken */ { {0x0000, 0x0049, 0, 0, 0, 0}, 0x00cc }, // U00CC # LATIN CAPITAL LETTER I WITH GRAVE ++// /* broken */ { {0x0000, 0x0049, 0, 0, 0, 0}, 0x1ec8 }, // U1EC8 # LATIN CAPITAL LETTER I WITH HOOK ABOVE ++// /* broken */ { {0x0000, 0x0049, 0, 0, 0, 0}, 0x0128 }, // U0128 # LATIN CAPITAL LETTER I WITH TILDE ++// /* broken */ { {0x0000, 0x0049, 0, 0, 0, 0}, 0x1eca }, // U1ECA # LATIN CAPITAL LETTER I WITH DOT BELOW ++// /* broken */ { {0x0000, 0x004b, 0, 0, 0, 0}, 0x1e30 }, // U1E30 # LATIN CAPITAL LETTER K WITH ACUTE ++// /* broken */ { {0x0000, 0x004b, 0, 0, 0, 0}, 0x1e32 }, // U1E32 # LATIN CAPITAL LETTER K WITH DOT BELOW ++// /* broken */ { {0x0000, 0x004c, 0, 0, 0, 0}, 0x0139 }, // U0139 # LATIN CAPITAL LETTER L WITH ACUTE ++// /* broken */ { {0x0000, 0x004c, 0, 0, 0, 0}, 0x1e36 }, // U1E36 # LATIN CAPITAL LETTER L WITH DOT BELOW ++// /* broken */ { {0x0000, 0x004d, 0, 0, 0, 0}, 0x1e42 }, // U1E42 # LATIN CAPITAL LETTER M WITH DOT BELOW ++// /* broken */ { {0x0000, 0x004d, 0, 0, 0, 0}, 0x1e3e }, // U1E3E # LATIN CAPITAL LETTER M WITH ACUTE ++// /* broken */ { {0x0000, 0x004e, 0, 0, 0, 0}, 0x1e46 }, // U1E46 # LATIN CAPITAL LETTER N WITH DOT BELOW ++// /* broken */ { {0x0000, 0x004e, 0, 0, 0, 0}, 0x0143 }, // U0143 # LATIN CAPITAL LETTER N WITH ACUTE ++// /* broken */ { {0x0000, 0x004e, 0, 0, 0, 0}, 0x01f8 }, // U01F8 # LATIN CAPITAL LETTER N WITH GRAVE ++// /* broken */ { {0x0000, 0x004e, 0, 0, 0, 0}, 0x00d1 }, // U00D1 # LATIN CAPITAL LETTER N WITH TILDE ++// /* broken */ { {0x0000, 0x004f, 0, 0, 0, 0}, 0x00d5 }, // U00D5 # LATIN CAPITAL LETTER O WITH TILDE ++// /* broken */ { {0x0000, 0x004f, 0, 0, 0, 0}, 0x00d3 }, // U00D3 # LATIN CAPITAL LETTER O WITH ACUTE ++// /* broken */ { {0x0000, 0x004f, 0, 0, 0, 0}, 0x1ecc }, // U1ECC # LATIN CAPITAL LETTER O WITH DOT BELOW ++// /* broken */ { {0x0000, 0x004f, 0, 0, 0, 0}, 0x00d2 }, // U00D2 # LATIN CAPITAL LETTER O WITH GRAVE ++// /* broken */ { {0x0000, 0x004f, 0, 0, 0, 0}, 0x1ece }, // U1ECE # LATIN CAPITAL LETTER O WITH HOOK ABOVE ++// /* broken */ { {0x0000, 0x0050, 0, 0, 0, 0}, 0x1e54 }, // U1E54 # LATIN CAPITAL LETTER P WITH ACUTE ++// /* broken */ { {0x0000, 0x0052, 0, 0, 0, 0}, 0x1e5a }, // U1E5A # LATIN CAPITAL LETTER R WITH DOT BELOW ++// /* broken */ { {0x0000, 0x0052, 0, 0, 0, 0}, 0x0154 }, // U0154 # LATIN CAPITAL LETTER R WITH ACUTE ++// /* broken */ { {0x0000, 0x0053, 0, 0, 0, 0}, 0x015a }, // U015A # LATIN CAPITAL LETTER S WITH ACUTE ++// /* broken */ { {0x0000, 0x0053, 0, 0, 0, 0}, 0x1e62 }, // U1E62 # LATIN CAPITAL LETTER S WITH DOT BELOW ++// /* broken */ { {0x0000, 0x0054, 0, 0, 0, 0}, 0x1e6c }, // U1E6C # LATIN CAPITAL LETTER T WITH DOT BELOW ++// /* broken */ { {0x0000, 0x0055, 0, 0, 0, 0}, 0x00da }, // U00DA # LATIN CAPITAL LETTER U WITH ACUTE ++// /* broken */ { {0x0000, 0x0055, 0, 0, 0, 0}, 0x00d9 }, // U00D9 # LATIN CAPITAL LETTER U WITH GRAVE ++// /* broken */ { {0x0000, 0x0055, 0, 0, 0, 0}, 0x0168 }, // U0168 # LATIN CAPITAL LETTER U WITH TILDE ++// /* broken */ { {0x0000, 0x0055, 0, 0, 0, 0}, 0x1ee4 }, // U1EE4 # LATIN CAPITAL LETTER U WITH DOT BELOW ++// /* broken */ { {0x0000, 0x0055, 0, 0, 0, 0}, 0x1ee6 }, // U1EE6 # LATIN CAPITAL LETTER U WITH HOOK ABOVE ++// /* broken */ { {0x0000, 0x0056, 0, 0, 0, 0}, 0x1e7e }, // U1E7E # LATIN CAPITAL LETTER V WITH DOT BELOW ++// /* broken */ { {0x0000, 0x0056, 0, 0, 0, 0}, 0x1e7c }, // U1E7C # LATIN CAPITAL LETTER V WITH TILDE ++// /* broken */ { {0x0000, 0x0057, 0, 0, 0, 0}, 0x1e82 }, // U1E82 # LATIN CAPITAL LETTER W WITH ACUTE ++// /* broken */ { {0x0000, 0x0057, 0, 0, 0, 0}, 0x1e88 }, // U1E88 # LATIN CAPITAL LETTER W WITH DOT BELOW ++// /* broken */ { {0x0000, 0x0057, 0, 0, 0, 0}, 0x1e80 }, // U1E80 # LATIN CAPITAL LETTER W WITH GRAVE ++// /* broken */ { {0x0000, 0x0059, 0, 0, 0, 0}, 0x1ef8 }, // U1EF8 # LATIN CAPITAL LETTER Y WITH TILDE ++// /* broken */ { {0x0000, 0x0059, 0, 0, 0, 0}, 0x1ef2 }, // U1EF2 # LATIN CAPITAL LETTER Y WITH GRAVE ++// /* broken */ { {0x0000, 0x0059, 0, 0, 0, 0}, 0x00dd }, // U00DD # LATIN CAPITAL LETTER Y WITH ACUTE ++// /* broken */ { {0x0000, 0x0059, 0, 0, 0, 0}, 0x1ef6 }, // U1EF6 # LATIN CAPITAL LETTER Y WITH HOOK ABOVE ++// /* broken */ { {0x0000, 0x0059, 0, 0, 0, 0}, 0x1ef4 }, // U1EF4 # LATIN CAPITAL LETTER Y WITH DOT BELOW ++// /* broken */ { {0x0000, 0x005a, 0, 0, 0, 0}, 0x0179 }, // U0179 # LATIN CAPITAL LETTER Z WITH ACUTE ++// /* broken */ { {0x0000, 0x005a, 0, 0, 0, 0}, 0x1e92 }, // U1E92 # LATIN CAPITAL LETTER Z WITH DOT BELOW ++// /* broken */ { {0x0000, 0x0061, 0, 0, 0, 0}, 0x1ea1 }, // U1EA1 # LATIN SMALL LETTER A WITH DOT BELOW ++// /* broken */ { {0x0000, 0x0061, 0, 0, 0, 0}, 0x1ea3 }, // U1EA3 # LATIN SMALL LETTER A WITH HOOK ABOVE ++// /* broken */ { {0x0000, 0x0061, 0, 0, 0, 0}, 0x00e0 }, // U00E0 # LATIN SMALL LETTER A WITH GRAVE ++// /* broken */ { {0x0000, 0x0061, 0, 0, 0, 0}, 0x00e3 }, // U00E3 # LATIN SMALL LETTER A WITH TILDE ++// /* broken */ { {0x0000, 0x0061, 0, 0, 0, 0}, 0x00e1 }, // U00E1 # LATIN SMALL LETTER A WITH ACUTE ++// /* broken */ { {0x0000, 0x0062, 0, 0, 0, 0}, 0x1e05 }, // U1E05 # LATIN SMALL LETTER B WITH DOT BELOW ++// /* broken */ { {0x0000, 0x0063, 0, 0, 0, 0}, 0x0107 }, // U0107 # LATIN SMALL LETTER C WITH ACUTE ++// /* broken */ { {0x0000, 0x0064, 0, 0, 0, 0}, 0x1e0d }, // U1E0D # LATIN SMALL LETTER D WITH DOT BELOW ++// /* broken */ { {0x0000, 0x0065, 0, 0, 0, 0}, 0x00e8 }, // U00E8 # LATIN SMALL LETTER E WITH GRAVE ++// /* broken */ { {0x0000, 0x0065, 0, 0, 0, 0}, 0x1ebb }, // U1EBB # LATIN SMALL LETTER E WITH HOOK ABOVE ++// /* broken */ { {0x0000, 0x0065, 0, 0, 0, 0}, 0x1eb9 }, // U1EB9 # LATIN SMALL LETTER E WITH DOT BELOW ++// /* broken */ { {0x0000, 0x0065, 0, 0, 0, 0}, 0x00e9 }, // U00E9 # LATIN SMALL LETTER E WITH ACUTE ++// /* broken */ { {0x0000, 0x0065, 0, 0, 0, 0}, 0x1ebd }, // U1EBD # LATIN SMALL LETTER E WITH TILDE ++// /* broken */ { {0x0000, 0x0067, 0, 0, 0, 0}, 0x01f5 }, // U01F5 # LATIN SMALL LETTER G WITH ACUTE ++// /* broken */ { {0x0000, 0x0068, 0, 0, 0, 0}, 0x1e25 }, // U1E25 # LATIN SMALL LETTER H WITH DOT BELOW ++// /* broken */ { {0x0000, 0x0069, 0, 0, 0, 0}, 0x00ec }, // U00EC # LATIN SMALL LETTER I WITH GRAVE ++// /* broken */ { {0x0000, 0x0069, 0, 0, 0, 0}, 0x0129 }, // U0129 # LATIN SMALL LETTER I WITH TILDE ++// /* broken */ { {0x0000, 0x0069, 0, 0, 0, 0}, 0x1ecb }, // U1ECB # LATIN SMALL LETTER I WITH DOT BELOW ++// /* broken */ { {0x0000, 0x0069, 0, 0, 0, 0}, 0x00ed }, // U00ED # LATIN SMALL LETTER I WITH ACUTE ++// /* broken */ { {0x0000, 0x0069, 0, 0, 0, 0}, 0x1ec9 }, // U1EC9 # LATIN SMALL LETTER I WITH HOOK ABOVE ++// /* broken */ { {0x0000, 0x006b, 0, 0, 0, 0}, 0x1e33 }, // U1E33 # LATIN SMALL LETTER K WITH DOT BELOW ++// /* broken */ { {0x0000, 0x006b, 0, 0, 0, 0}, 0x1e31 }, // U1E31 # LATIN SMALL LETTER K WITH ACUTE ++// /* broken */ { {0x0000, 0x006c, 0, 0, 0, 0}, 0x1e37 }, // U1E37 # LATIN SMALL LETTER L WITH DOT BELOW ++// /* broken */ { {0x0000, 0x006c, 0, 0, 0, 0}, 0x013a }, // U013A # LATIN SMALL LETTER L WITH ACUTE ++// /* broken */ { {0x0000, 0x006d, 0, 0, 0, 0}, 0x1e43 }, // U1E43 # LATIN SMALL LETTER M WITH DOT BELOW ++// /* broken */ { {0x0000, 0x006d, 0, 0, 0, 0}, 0x1e3f }, // U1E3F # LATIN SMALL LETTER M WITH ACUTE ++// /* broken */ { {0x0000, 0x006e, 0, 0, 0, 0}, 0x00f1 }, // U00F1 # LATIN SMALL LETTER N WITH TILDE ++// /* broken */ { {0x0000, 0x006e, 0, 0, 0, 0}, 0x0144 }, // U0144 # LATIN SMALL LETTER N WITH ACUTE ++// /* broken */ { {0x0000, 0x006e, 0, 0, 0, 0}, 0x01f9 }, // U01F9 # LATIN SMALL LETTER N WITH GRAVE ++// /* broken */ { {0x0000, 0x006e, 0, 0, 0, 0}, 0x1e47 }, // U1E47 # LATIN SMALL LETTER N WITH DOT BELOW ++// /* broken */ { {0x0000, 0x006f, 0, 0, 0, 0}, 0x00f5 }, // U00F5 # LATIN SMALL LETTER O WITH TILDE ++// /* broken */ { {0x0000, 0x006f, 0, 0, 0, 0}, 0x00f2 }, // U00F2 # LATIN SMALL LETTER O WITH GRAVE ++// /* broken */ { {0x0000, 0x006f, 0, 0, 0, 0}, 0x1ecf }, // U1ECF # LATIN SMALL LETTER O WITH HOOK ABOVE ++// /* broken */ { {0x0000, 0x006f, 0, 0, 0, 0}, 0x00f3 }, // U00F3 # LATIN SMALL LETTER O WITH ACUTE ++// /* broken */ { {0x0000, 0x006f, 0, 0, 0, 0}, 0x1ecd }, // U1ECD # LATIN SMALL LETTER O WITH DOT BELOW ++// /* broken */ { {0x0000, 0x0070, 0, 0, 0, 0}, 0x1e55 }, // U1E55 # LATIN SMALL LETTER P WITH ACUTE ++// /* broken */ { {0x0000, 0x0072, 0, 0, 0, 0}, 0x0155 }, // U0155 # LATIN SMALL LETTER R WITH ACUTE ++// /* broken */ { {0x0000, 0x0072, 0, 0, 0, 0}, 0x1e5b }, // U1E5B # LATIN SMALL LETTER R WITH DOT BELOW ++// /* broken */ { {0x0000, 0x0073, 0, 0, 0, 0}, 0x1e63 }, // U1E63 # LATIN SMALL LETTER S WITH DOT BELOW ++// /* broken */ { {0x0000, 0x0073, 0, 0, 0, 0}, 0x015b }, // U015B # LATIN SMALL LETTER S WITH ACUTE ++// /* broken */ { {0x0000, 0x0074, 0, 0, 0, 0}, 0x1e6d }, // U1E6D # LATIN SMALL LETTER T WITH DOT BELOW ++// /* broken */ { {0x0000, 0x0075, 0, 0, 0, 0}, 0x0169 }, // U0169 # LATIN SMALL LETTER U WITH TILDE ++// /* broken */ { {0x0000, 0x0075, 0, 0, 0, 0}, 0x1ee7 }, // U1EE7 # LATIN SMALL LETTER U WITH HOOK ABOVE ++// /* broken */ { {0x0000, 0x0075, 0, 0, 0, 0}, 0x00f9 }, // U00F9 # LATIN SMALL LETTER U WITH GRAVE ++// /* broken */ { {0x0000, 0x0075, 0, 0, 0, 0}, 0x00fa }, // U00FA # LATIN SMALL LETTER U WITH ACUTE ++// /* broken */ { {0x0000, 0x0075, 0, 0, 0, 0}, 0x1ee5 }, // U1EE5 # LATIN SMALL LETTER U WITH DOT BELOW ++// /* broken */ { {0x0000, 0x0076, 0, 0, 0, 0}, 0x1e7d }, // U1E7D # LATIN SMALL LETTER V WITH TILDE ++// /* broken */ { {0x0000, 0x0076, 0, 0, 0, 0}, 0x1e7f }, // U1E7F # LATIN SMALL LETTER V WITH DOT BELOW ++// /* broken */ { {0x0000, 0x0077, 0, 0, 0, 0}, 0x1e81 }, // U1E81 # LATIN SMALL LETTER W WITH GRAVE ++// /* broken */ { {0x0000, 0x0077, 0, 0, 0, 0}, 0x1e83 }, // U1E83 # LATIN SMALL LETTER W WITH ACUTE ++// /* broken */ { {0x0000, 0x0077, 0, 0, 0, 0}, 0x1e89 }, // U1E89 # LATIN SMALL LETTER W WITH DOT BELOW ++// /* broken */ { {0x0000, 0x0079, 0, 0, 0, 0}, 0x1ef5 }, // U1EF5 # LATIN SMALL LETTER Y WITH DOT BELOW ++// /* broken */ { {0x0000, 0x0079, 0, 0, 0, 0}, 0x1ef9 }, // U1EF9 # LATIN SMALL LETTER Y WITH TILDE ++// /* broken */ { {0x0000, 0x0079, 0, 0, 0, 0}, 0x1ef7 }, // U1EF7 # LATIN SMALL LETTER Y WITH HOOK ABOVE ++// /* broken */ { {0x0000, 0x0079, 0, 0, 0, 0}, 0x1ef3 }, // U1EF3 # LATIN SMALL LETTER Y WITH GRAVE ++// /* broken */ { {0x0000, 0x0079, 0, 0, 0, 0}, 0x00fd }, // U00FD # LATIN SMALL LETTER Y WITH ACUTE ++// /* broken */ { {0x0000, 0x007a, 0, 0, 0, 0}, 0x1e93 }, // U1E93 # LATIN SMALL LETTER Z WITH DOT BELOW ++// /* broken */ { {0x0000, 0x007a, 0, 0, 0, 0}, 0x017a }, // U017A # LATIN SMALL LETTER Z WITH ACUTE ++// /* broken */ { {0x0000, 0x00c2, 0, 0, 0, 0}, 0x1ea6 }, // U1EA6 # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND GRAVE ++// /* broken */ { {0x0000, 0x00c2, 0, 0, 0, 0}, 0x1ea8 }, // U1EA8 # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE ++// /* broken */ { {0x0000, 0x00c2, 0, 0, 0, 0}, 0x1eaa }, // U1EAA # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND TILDE ++// /* broken */ { {0x0000, 0x00c2, 0, 0, 0, 0}, 0x1ea4 }, // U1EA4 # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND ACUTE ++// /* broken */ { {0x0000, 0x00c5, 0, 0, 0, 0}, 0x01fa }, // U01FA # LATIN CAPITAL LETTER A WITH RING ABOVE AND ACUTE ++// /* broken */ { {0x0000, 0x00c6, 0, 0, 0, 0}, 0x01fc }, // U01FC # LATIN CAPITAL LETTER AE WITH ACUTE ++// /* broken */ { {0x0000, 0x00c7, 0, 0, 0, 0}, 0x1e08 }, // U1E08 # LATIN CAPITAL LETTER C WITH CEDILLA AND ACUTE ++// /* broken */ { {0x0000, 0x00ca, 0, 0, 0, 0}, 0x1ec0 }, // U1EC0 # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND GRAVE ++// /* broken */ { {0x0000, 0x00ca, 0, 0, 0, 0}, 0x1ebe }, // U1EBE # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND ACUTE ++// /* broken */ { {0x0000, 0x00ca, 0, 0, 0, 0}, 0x1ec2 }, // U1EC2 # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE ++// /* broken */ { {0x0000, 0x00ca, 0, 0, 0, 0}, 0x1ec4 }, // U1EC4 # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND TILDE ++// /* broken */ { {0x0000, 0x00cf, 0, 0, 0, 0}, 0x1e2e }, // U1E2E # LATIN CAPITAL LETTER I WITH DIAERESIS AND ACUTE ++// /* broken */ { {0x0000, 0x00d4, 0, 0, 0, 0}, 0x1ed4 }, // U1ED4 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE ++// /* broken */ { {0x0000, 0x00d4, 0, 0, 0, 0}, 0x1ed0 }, // U1ED0 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND ACUTE ++// /* broken */ { {0x0000, 0x00d4, 0, 0, 0, 0}, 0x1ed2 }, // U1ED2 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND GRAVE ++// /* broken */ { {0x0000, 0x00d4, 0, 0, 0, 0}, 0x1ed6 }, // U1ED6 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND TILDE ++// /* broken */ { {0x0000, 0x00d5, 0, 0, 0, 0}, 0x1e4c }, // U1E4C # LATIN CAPITAL LETTER O WITH TILDE AND ACUTE ++// /* broken */ { {0x0000, 0x00d8, 0, 0, 0, 0}, 0x01fe }, // U01FE # LATIN CAPITAL LETTER O WITH STROKE AND ACUTE ++// /* broken */ { {0x0000, 0x00dc, 0, 0, 0, 0}, 0x01d7 }, // U01D7 # LATIN CAPITAL LETTER U WITH DIAERESIS AND ACUTE ++// /* broken */ { {0x0000, 0x00dc, 0, 0, 0, 0}, 0x01db }, // U01DB # LATIN CAPITAL LETTER U WITH DIAERESIS AND GRAVE ++// /* broken */ { {0x0000, 0x00e2, 0, 0, 0, 0}, 0x1eab }, // U1EAB # LATIN SMALL LETTER A WITH CIRCUMFLEX AND TILDE ++// /* broken */ { {0x0000, 0x00e2, 0, 0, 0, 0}, 0x1ea5 }, // U1EA5 # LATIN SMALL LETTER A WITH CIRCUMFLEX AND ACUTE ++// /* broken */ { {0x0000, 0x00e2, 0, 0, 0, 0}, 0x1ea9 }, // U1EA9 # LATIN SMALL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE ++// /* broken */ { {0x0000, 0x00e2, 0, 0, 0, 0}, 0x1ea7 }, // U1EA7 # LATIN SMALL LETTER A WITH CIRCUMFLEX AND GRAVE ++// /* broken */ { {0x0000, 0x00e5, 0, 0, 0, 0}, 0x01fb }, // U01FB # LATIN SMALL LETTER A WITH RING ABOVE AND ACUTE ++// /* broken */ { {0x0000, 0x00e6, 0, 0, 0, 0}, 0x01fd }, // U01FD # LATIN SMALL LETTER AE WITH ACUTE ++// /* broken */ { {0x0000, 0x00e7, 0, 0, 0, 0}, 0x1e09 }, // U1E09 # LATIN SMALL LETTER C WITH CEDILLA AND ACUTE ++// /* broken */ { {0x0000, 0x00ea, 0, 0, 0, 0}, 0x1ec5 }, // U1EC5 # LATIN SMALL LETTER E WITH CIRCUMFLEX AND TILDE ++// /* broken */ { {0x0000, 0x00ea, 0, 0, 0, 0}, 0x1ec1 }, // U1EC1 # LATIN SMALL LETTER E WITH CIRCUMFLEX AND GRAVE ++// /* broken */ { {0x0000, 0x00ea, 0, 0, 0, 0}, 0x1ec3 }, // U1EC3 # LATIN SMALL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE ++// /* broken */ { {0x0000, 0x00ea, 0, 0, 0, 0}, 0x1ebf }, // U1EBF # LATIN SMALL LETTER E WITH CIRCUMFLEX AND ACUTE ++// /* broken */ { {0x0000, 0x00ef, 0, 0, 0, 0}, 0x1e2f }, // U1E2F # LATIN SMALL LETTER I WITH DIAERESIS AND ACUTE ++// /* broken */ { {0x0000, 0x00f4, 0, 0, 0, 0}, 0x1ed3 }, // U1ED3 # LATIN SMALL LETTER O WITH CIRCUMFLEX AND GRAVE ++// /* broken */ { {0x0000, 0x00f4, 0, 0, 0, 0}, 0x1ed1 }, // U1ED1 # LATIN SMALL LETTER O WITH CIRCUMFLEX AND ACUTE ++// /* broken */ { {0x0000, 0x00f4, 0, 0, 0, 0}, 0x1ed5 }, // U1ED5 # LATIN SMALL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE ++// /* broken */ { {0x0000, 0x00f4, 0, 0, 0, 0}, 0x1ed7 }, // U1ED7 # LATIN SMALL LETTER O WITH CIRCUMFLEX AND TILDE ++// /* broken */ { {0x0000, 0x00f5, 0, 0, 0, 0}, 0x1e4d }, // U1E4D # LATIN SMALL LETTER O WITH TILDE AND ACUTE ++// /* broken */ { {0x0000, 0x00f8, 0, 0, 0, 0}, 0x01ff }, // U01FF # LATIN SMALL LETTER O WITH STROKE AND ACUTE ++// /* broken */ { {0x0000, 0x00fc, 0, 0, 0, 0}, 0x01dc }, // U01DC # LATIN SMALL LETTER U WITH DIAERESIS AND GRAVE ++// /* broken */ { {0x0000, 0x00fc, 0, 0, 0, 0}, 0x01d8 }, // U01D8 # LATIN SMALL LETTER U WITH DIAERESIS AND ACUTE ++// /* broken */ { {0x0000, 0x0102, 0, 0, 0, 0}, 0x1eb0 }, // U1EB0 # LATIN CAPITAL LETTER A WITH BREVE AND GRAVE ++// /* broken */ { {0x0000, 0x0102, 0, 0, 0, 0}, 0x1eb4 }, // U1EB4 # LATIN CAPITAL LETTER A WITH BREVE AND TILDE ++// /* broken */ { {0x0000, 0x0102, 0, 0, 0, 0}, 0x1eb2 }, // U1EB2 # LATIN CAPITAL LETTER A WITH BREVE AND HOOK ABOVE ++// /* broken */ { {0x0000, 0x0102, 0, 0, 0, 0}, 0x1eae }, // U1EAE # LATIN CAPITAL LETTER A WITH BREVE AND ACUTE ++// /* broken */ { {0x0000, 0x0103, 0, 0, 0, 0}, 0x1eb5 }, // U1EB5 # LATIN SMALL LETTER A WITH BREVE AND TILDE ++// /* broken */ { {0x0000, 0x0103, 0, 0, 0, 0}, 0x1eaf }, // U1EAF # LATIN SMALL LETTER A WITH BREVE AND ACUTE ++// /* broken */ { {0x0000, 0x0103, 0, 0, 0, 0}, 0x1eb3 }, // U1EB3 # LATIN SMALL LETTER A WITH BREVE AND HOOK ABOVE ++// /* broken */ { {0x0000, 0x0103, 0, 0, 0, 0}, 0x1eb1 }, // U1EB1 # LATIN SMALL LETTER A WITH BREVE AND GRAVE ++// /* broken */ { {0x0000, 0x0112, 0, 0, 0, 0}, 0x1e16 }, // U1E16 # LATIN CAPITAL LETTER E WITH MACRON AND ACUTE ++// /* broken */ { {0x0000, 0x0112, 0, 0, 0, 0}, 0x1e14 }, // U1E14 # LATIN CAPITAL LETTER E WITH MACRON AND GRAVE ++// /* broken */ { {0x0000, 0x0113, 0, 0, 0, 0}, 0x1e15 }, // U1E15 # LATIN SMALL LETTER E WITH MACRON AND GRAVE ++// /* broken */ { {0x0000, 0x0113, 0, 0, 0, 0}, 0x1e17 }, // U1E17 # LATIN SMALL LETTER E WITH MACRON AND ACUTE ++// /* broken */ { {0x0000, 0x014c, 0, 0, 0, 0}, 0x1e52 }, // U1E52 # LATIN CAPITAL LETTER O WITH MACRON AND ACUTE ++// /* broken */ { {0x0000, 0x014c, 0, 0, 0, 0}, 0x1e50 }, // U1E50 # LATIN CAPITAL LETTER O WITH MACRON AND GRAVE ++// /* broken */ { {0x0000, 0x014d, 0, 0, 0, 0}, 0x1e51 }, // U1E51 # LATIN SMALL LETTER O WITH MACRON AND GRAVE ++// /* broken */ { {0x0000, 0x014d, 0, 0, 0, 0}, 0x1e53 }, // U1E53 # LATIN SMALL LETTER O WITH MACRON AND ACUTE ++// /* broken */ { {0x0000, 0x0168, 0, 0, 0, 0}, 0x1e78 }, // U1E78 # LATIN CAPITAL LETTER U WITH TILDE AND ACUTE ++// /* broken */ { {0x0000, 0x0169, 0, 0, 0, 0}, 0x1e79 }, // U1E79 # LATIN SMALL LETTER U WITH TILDE AND ACUTE ++// /* broken */ { {0x0000, 0x0313, 0x0391, 0, 0, 0}, 0x1f0a }, // U1F0A # GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA ++// /* broken */ { {0x0000, 0x0313, 0x0391, 0, 0, 0}, 0x1f0c }, // U1F0C # GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA ++// /* broken */ { {0x0000, 0x0313, 0x0395, 0, 0, 0}, 0x1f1a }, // U1F1A # GREEK CAPITAL LETTER EPSILON WITH PSILI AND VARIA ++// /* broken */ { {0x0000, 0x0313, 0x0395, 0, 0, 0}, 0x1f1c }, // U1F1C # GREEK CAPITAL LETTER EPSILON WITH PSILI AND OXIA ++// /* broken */ { {0x0000, 0x0313, 0x0397, 0, 0, 0}, 0x1f2c }, // U1F2C # GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA ++// /* broken */ { {0x0000, 0x0313, 0x0397, 0, 0, 0}, 0x1f2a }, // U1F2A # GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA ++// /* broken */ { {0x0000, 0x0313, 0x0399, 0, 0, 0}, 0x1f3c }, // U1F3C # GREEK CAPITAL LETTER IOTA WITH PSILI AND OXIA ++// /* broken */ { {0x0000, 0x0313, 0x0399, 0, 0, 0}, 0x1f3a }, // U1F3A # GREEK CAPITAL LETTER IOTA WITH PSILI AND VARIA ++// /* broken */ { {0x0000, 0x0313, 0x039f, 0, 0, 0}, 0x1f4a }, // U1F4A # GREEK CAPITAL LETTER OMICRON WITH PSILI AND VARIA ++// /* broken */ { {0x0000, 0x0313, 0x039f, 0, 0, 0}, 0x1f4c }, // U1F4C # GREEK CAPITAL LETTER OMICRON WITH PSILI AND OXIA ++// /* broken */ { {0x0000, 0x0313, 0x03a9, 0, 0, 0}, 0x1f6a }, // U1F6A # GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA ++// /* broken */ { {0x0000, 0x0313, 0x03a9, 0, 0, 0}, 0x1f6c }, // U1F6C # GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA ++// /* broken */ { {0x0000, 0x0313, 0x03b1, 0, 0, 0}, 0x1f04 }, // U1F04 # GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA ++// /* broken */ { {0x0000, 0x0313, 0x03b1, 0, 0, 0}, 0x1f02 }, // U1F02 # GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA ++// /* broken */ { {0x0000, 0x0313, 0x03b5, 0, 0, 0}, 0x1f14 }, // U1F14 # GREEK SMALL LETTER EPSILON WITH PSILI AND OXIA ++// /* broken */ { {0x0000, 0x0313, 0x03b5, 0, 0, 0}, 0x1f12 }, // U1F12 # GREEK SMALL LETTER EPSILON WITH PSILI AND VARIA ++// /* broken */ { {0x0000, 0x0313, 0x03b7, 0, 0, 0}, 0x1f24 }, // U1F24 # GREEK SMALL LETTER ETA WITH PSILI AND OXIA ++// /* broken */ { {0x0000, 0x0313, 0x03b7, 0, 0, 0}, 0x1f22 }, // U1F22 # GREEK SMALL LETTER ETA WITH PSILI AND VARIA ++// /* broken */ { {0x0000, 0x0313, 0x03b9, 0, 0, 0}, 0x1f32 }, // U1F32 # GREEK SMALL LETTER IOTA WITH PSILI AND VARIA ++// /* broken */ { {0x0000, 0x0313, 0x03b9, 0, 0, 0}, 0x1f34 }, // U1F34 # GREEK SMALL LETTER IOTA WITH PSILI AND OXIA ++// /* broken */ { {0x0000, 0x0313, 0x03bf, 0, 0, 0}, 0x1f42 }, // U1F42 # GREEK SMALL LETTER OMICRON WITH PSILI AND VARIA ++// /* broken */ { {0x0000, 0x0313, 0x03bf, 0, 0, 0}, 0x1f44 }, // U1F44 # GREEK SMALL LETTER OMICRON WITH PSILI AND OXIA ++// /* broken */ { {0x0000, 0x0313, 0x03c5, 0, 0, 0}, 0x1f52 }, // U1F52 # GREEK SMALL LETTER UPSILON WITH PSILI AND VARIA ++// /* broken */ { {0x0000, 0x0313, 0x03c5, 0, 0, 0}, 0x1f54 }, // U1F54 # GREEK SMALL LETTER UPSILON WITH PSILI AND OXIA ++// /* broken */ { {0x0000, 0x0313, 0x03c9, 0, 0, 0}, 0x1f62 }, // U1F62 # GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA ++// /* broken */ { {0x0000, 0x0313, 0x03c9, 0, 0, 0}, 0x1f64 }, // U1F64 # GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA ++// /* broken */ { {0x0000, 0x0314, 0x0391, 0, 0, 0}, 0x1f0b }, // U1F0B # GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA ++// /* broken */ { {0x0000, 0x0314, 0x0391, 0, 0, 0}, 0x1f0d }, // U1F0D # GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA ++// /* broken */ { {0x0000, 0x0314, 0x0395, 0, 0, 0}, 0x1f1d }, // U1F1D # GREEK CAPITAL LETTER EPSILON WITH DASIA AND OXIA ++// /* broken */ { {0x0000, 0x0314, 0x0395, 0, 0, 0}, 0x1f1b }, // U1F1B # GREEK CAPITAL LETTER EPSILON WITH DASIA AND VARIA ++// /* broken */ { {0x0000, 0x0314, 0x0397, 0, 0, 0}, 0x1f2d }, // U1F2D # GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA ++// /* broken */ { {0x0000, 0x0314, 0x0397, 0, 0, 0}, 0x1f2b }, // U1F2B # GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA ++// /* broken */ { {0x0000, 0x0314, 0x0399, 0, 0, 0}, 0x1f3b }, // U1F3B # GREEK CAPITAL LETTER IOTA WITH DASIA AND VARIA ++// /* broken */ { {0x0000, 0x0314, 0x0399, 0, 0, 0}, 0x1f3d }, // U1F3D # GREEK CAPITAL LETTER IOTA WITH DASIA AND OXIA ++// /* broken */ { {0x0000, 0x0314, 0x039f, 0, 0, 0}, 0x1f4b }, // U1F4B # GREEK CAPITAL LETTER OMICRON WITH DASIA AND VARIA ++// /* broken */ { {0x0000, 0x0314, 0x039f, 0, 0, 0}, 0x1f4d }, // U1F4D # GREEK CAPITAL LETTER OMICRON WITH DASIA AND OXIA ++// /* broken */ { {0x0000, 0x0314, 0x03a5, 0, 0, 0}, 0x1f5b }, // U1F5B # GREEK CAPITAL LETTER UPSILON WITH DASIA AND VARIA ++// /* broken */ { {0x0000, 0x0314, 0x03a5, 0, 0, 0}, 0x1f5d }, // U1F5D # GREEK CAPITAL LETTER UPSILON WITH DASIA AND OXIA ++// /* broken */ { {0x0000, 0x0314, 0x03a9, 0, 0, 0}, 0x1f6d }, // U1F6D # GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA ++// /* broken */ { {0x0000, 0x0314, 0x03a9, 0, 0, 0}, 0x1f6b }, // U1F6B # GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA ++// /* broken */ { {0x0000, 0x0314, 0x03b1, 0, 0, 0}, 0x1f03 }, // U1F03 # GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA ++// /* broken */ { {0x0000, 0x0314, 0x03b1, 0, 0, 0}, 0x1f05 }, // U1F05 # GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA ++// /* broken */ { {0x0000, 0x0314, 0x03b5, 0, 0, 0}, 0x1f13 }, // U1F13 # GREEK SMALL LETTER EPSILON WITH DASIA AND VARIA ++// /* broken */ { {0x0000, 0x0314, 0x03b5, 0, 0, 0}, 0x1f15 }, // U1F15 # GREEK SMALL LETTER EPSILON WITH DASIA AND OXIA ++// /* broken */ { {0x0000, 0x0314, 0x03b7, 0, 0, 0}, 0x1f23 }, // U1F23 # GREEK SMALL LETTER ETA WITH DASIA AND VARIA ++// /* broken */ { {0x0000, 0x0314, 0x03b7, 0, 0, 0}, 0x1f25 }, // U1F25 # GREEK SMALL LETTER ETA WITH DASIA AND OXIA ++// /* broken */ { {0x0000, 0x0314, 0x03b9, 0, 0, 0}, 0x1f33 }, // U1F33 # GREEK SMALL LETTER IOTA WITH DASIA AND VARIA ++// /* broken */ { {0x0000, 0x0314, 0x03b9, 0, 0, 0}, 0x1f35 }, // U1F35 # GREEK SMALL LETTER IOTA WITH DASIA AND OXIA ++// /* broken */ { {0x0000, 0x0314, 0x03bf, 0, 0, 0}, 0x1f45 }, // U1F45 # GREEK SMALL LETTER OMICRON WITH DASIA AND OXIA ++// /* broken */ { {0x0000, 0x0314, 0x03bf, 0, 0, 0}, 0x1f43 }, // U1F43 # GREEK SMALL LETTER OMICRON WITH DASIA AND VARIA ++// /* broken */ { {0x0000, 0x0314, 0x03c5, 0, 0, 0}, 0x1f53 }, // U1F53 # GREEK SMALL LETTER UPSILON WITH DASIA AND VARIA ++// /* broken */ { {0x0000, 0x0314, 0x03c5, 0, 0, 0}, 0x1f55 }, // U1F55 # GREEK SMALL LETTER UPSILON WITH DASIA AND OXIA ++// /* broken */ { {0x0000, 0x0314, 0x03c9, 0, 0, 0}, 0x1f63 }, // U1F63 # GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA ++// /* broken */ { {0x0000, 0x0314, 0x03c9, 0, 0, 0}, 0x1f65 }, // U1F65 # GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA ++// /* broken */ { {0x0000, 0x0391, 0, 0, 0, 0}, 0x0386 }, // U0386 # GREEK CAPITAL LETTER ALPHA WITH TONOS ++// /* broken */ { {0x0000, 0x0391, 0, 0, 0, 0}, 0x1fba }, // U1FBA # GREEK CAPITAL LETTER ALPHA WITH VARIA ++// /* broken */ { {0x0000, 0x0395, 0, 0, 0, 0}, 0x0388 }, // U0388 # GREEK CAPITAL LETTER EPSILON WITH TONOS ++// /* broken */ { {0x0000, 0x0395, 0, 0, 0, 0}, 0x1fc8 }, // U1FC8 # GREEK CAPITAL LETTER EPSILON WITH VARIA ++// /* broken */ { {0x0000, 0x0397, 0, 0, 0, 0}, 0x1fca }, // U1FCA # GREEK CAPITAL LETTER ETA WITH VARIA ++// /* broken */ { {0x0000, 0x0397, 0, 0, 0, 0}, 0x0389 }, // U0389 # GREEK CAPITAL LETTER ETA WITH TONOS ++// /* broken */ { {0x0000, 0x0399, 0, 0, 0, 0}, 0x038a }, // U038A # GREEK CAPITAL LETTER IOTA WITH TONOS ++// /* broken */ { {0x0000, 0x0399, 0, 0, 0, 0}, 0x1fda }, // U1FDA # GREEK CAPITAL LETTER IOTA WITH VARIA ++// /* broken */ { {0x0000, 0x039f, 0, 0, 0, 0}, 0x038c }, // U038C # GREEK CAPITAL LETTER OMICRON WITH TONOS ++// /* broken */ { {0x0000, 0x039f, 0, 0, 0, 0}, 0x1ff8 }, // U1FF8 # GREEK CAPITAL LETTER OMICRON WITH VARIA ++// /* broken */ { {0x0000, 0x03a5, 0, 0, 0, 0}, 0x038e }, // U038E # GREEK CAPITAL LETTER UPSILON WITH TONOS ++// /* broken */ { {0x0000, 0x03a5, 0, 0, 0, 0}, 0x1fea }, // U1FEA # GREEK CAPITAL LETTER UPSILON WITH VARIA ++// /* broken */ { {0x0000, 0x03a9, 0, 0, 0, 0}, 0x038f }, // U038F # GREEK CAPITAL LETTER OMEGA WITH TONOS ++// /* broken */ { {0x0000, 0x03a9, 0, 0, 0, 0}, 0x1ffa }, // U1FFA # GREEK CAPITAL LETTER OMEGA WITH VARIA ++// /* broken */ { {0x0000, 0x03b1, 0, 0, 0, 0}, 0x03ac }, // U03AC # GREEK SMALL LETTER ALPHA WITH TONOS ++// /* broken */ { {0x0000, 0x03b1, 0, 0, 0, 0}, 0x1f70 }, // U1F70 # GREEK SMALL LETTER ALPHA WITH VARIA ++// /* broken */ { {0x0000, 0x03b5, 0, 0, 0, 0}, 0x03ad }, // U03AD # GREEK SMALL LETTER EPSILON WITH TONOS ++// /* broken */ { {0x0000, 0x03b5, 0, 0, 0, 0}, 0x1f72 }, // U1F72 # GREEK SMALL LETTER EPSILON WITH VARIA ++// /* broken */ { {0x0000, 0x03b7, 0, 0, 0, 0}, 0x03ae }, // U03AE # GREEK SMALL LETTER ETA WITH TONOS ++// /* broken */ { {0x0000, 0x03b7, 0, 0, 0, 0}, 0x1f74 }, // U1F74 # GREEK SMALL LETTER ETA WITH VARIA ++// /* broken */ { {0x0000, 0x03b9, 0, 0, 0, 0}, 0x03af }, // U03AF # GREEK SMALL LETTER IOTA WITH TONOS ++// /* broken */ { {0x0000, 0x03b9, 0, 0, 0, 0}, 0x1f76 }, // U1F76 # GREEK SMALL LETTER IOTA WITH VARIA ++// /* broken */ { {0x0000, 0x03bf, 0, 0, 0, 0}, 0x03cc }, // U03CC # GREEK SMALL LETTER OMICRON WITH TONOS ++// /* broken */ { {0x0000, 0x03bf, 0, 0, 0, 0}, 0x1f78 }, // U1F78 # GREEK SMALL LETTER OMICRON WITH VARIA ++// /* broken */ { {0x0000, 0x03c5, 0, 0, 0, 0}, 0x03cd }, // U03CD # GREEK SMALL LETTER UPSILON WITH TONOS ++// /* broken */ { {0x0000, 0x03c5, 0, 0, 0, 0}, 0x1f7a }, // U1F7A # GREEK SMALL LETTER UPSILON WITH VARIA ++// /* broken */ { {0x0000, 0x03c9, 0, 0, 0, 0}, 0x03ce }, // U03CE # GREEK SMALL LETTER OMEGA WITH TONOS ++// /* broken */ { {0x0000, 0x03c9, 0, 0, 0, 0}, 0x1f7c }, // U1F7C # GREEK SMALL LETTER OMEGA WITH VARIA ++// /* broken */ { {0x0000, 0x03ca, 0, 0, 0, 0}, 0x0390 }, // U0390 # GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS ++// /* broken */ { {0x0000, 0x03ca, 0, 0, 0, 0}, 0x1fd2 }, // U1FD2 # GREEK SMALL LETTER IOTA WITH DIALYTIKA AND VARIA ++// /* broken */ { {0x0000, 0x03cb, 0, 0, 0, 0}, 0x1fe2 }, // U1FE2 # GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND VARIA ++// /* broken */ { {0x0000, 0x03cb, 0, 0, 0, 0}, 0x03b0 }, // U03B0 # GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS ++// /* broken */ { {0x0000, 0x0413, 0, 0, 0, 0}, 0x0403 }, // U0403 # CYRILLIC CAPITAL LETTER GJE ++// /* broken */ { {0x0000, 0x0415, 0, 0, 0, 0}, 0x0400 }, // U0400 # CYRILLIC CAPITAL LETTER IE WITH GRAVE ++// /* broken */ { {0x0000, 0x0418, 0, 0, 0, 0}, 0x040d }, // U040D # CYRILLIC CAPITAL LETTER I WITH GRAVE ++// /* broken */ { {0x0000, 0x041a, 0, 0, 0, 0}, 0x040c }, // U040C # CYRILLIC CAPITAL LETTER KJE ++// /* broken */ { {0x0000, 0x0433, 0, 0, 0, 0}, 0x0453 }, // U0453 # CYRILLIC SMALL LETTER GJE ++// /* broken */ { {0x0000, 0x0435, 0, 0, 0, 0}, 0x0450 }, // U0450 # CYRILLIC SMALL LETTER IE WITH GRAVE ++// /* broken */ { {0x0000, 0x0438, 0, 0, 0, 0}, 0x045d }, // U045D # CYRILLIC SMALL LETTER I WITH GRAVE ++// /* broken */ { {0x0000, 0x043a, 0, 0, 0, 0}, 0x045c }, // U045C # CYRILLIC SMALL LETTER KJE ++// /* broken */ { {0x0000, 0x1f00, 0, 0, 0, 0}, 0x1f02 }, // U1F02 # GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA ++// /* broken */ { {0x0000, 0x1f00, 0, 0, 0, 0}, 0x1f04 }, // U1F04 # GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA ++// /* broken */ { {0x0000, 0x1f01, 0, 0, 0, 0}, 0x1f03 }, // U1F03 # GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA ++// /* broken */ { {0x0000, 0x1f01, 0, 0, 0, 0}, 0x1f05 }, // U1F05 # GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA ++// /* broken */ { {0x0000, 0x1f08, 0, 0, 0, 0}, 0x1f0c }, // U1F0C # GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA ++// /* broken */ { {0x0000, 0x1f08, 0, 0, 0, 0}, 0x1f0a }, // U1F0A # GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA ++// /* broken */ { {0x0000, 0x1f09, 0, 0, 0, 0}, 0x1f0b }, // U1F0B # GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA ++// /* broken */ { {0x0000, 0x1f09, 0, 0, 0, 0}, 0x1f0d }, // U1F0D # GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA ++// /* broken */ { {0x0000, 0x1f10, 0, 0, 0, 0}, 0x1f12 }, // U1F12 # GREEK SMALL LETTER EPSILON WITH PSILI AND VARIA ++// /* broken */ { {0x0000, 0x1f10, 0, 0, 0, 0}, 0x1f14 }, // U1F14 # GREEK SMALL LETTER EPSILON WITH PSILI AND OXIA ++// /* broken */ { {0x0000, 0x1f11, 0, 0, 0, 0}, 0x1f13 }, // U1F13 # GREEK SMALL LETTER EPSILON WITH DASIA AND VARIA ++// /* broken */ { {0x0000, 0x1f11, 0, 0, 0, 0}, 0x1f15 }, // U1F15 # GREEK SMALL LETTER EPSILON WITH DASIA AND OXIA ++// /* broken */ { {0x0000, 0x1f18, 0, 0, 0, 0}, 0x1f1c }, // U1F1C # GREEK CAPITAL LETTER EPSILON WITH PSILI AND OXIA ++// /* broken */ { {0x0000, 0x1f18, 0, 0, 0, 0}, 0x1f1a }, // U1F1A # GREEK CAPITAL LETTER EPSILON WITH PSILI AND VARIA ++// /* broken */ { {0x0000, 0x1f19, 0, 0, 0, 0}, 0x1f1b }, // U1F1B # GREEK CAPITAL LETTER EPSILON WITH DASIA AND VARIA ++// /* broken */ { {0x0000, 0x1f19, 0, 0, 0, 0}, 0x1f1d }, // U1F1D # GREEK CAPITAL LETTER EPSILON WITH DASIA AND OXIA ++// /* broken */ { {0x0000, 0x1f20, 0, 0, 0, 0}, 0x1f22 }, // U1F22 # GREEK SMALL LETTER ETA WITH PSILI AND VARIA ++// /* broken */ { {0x0000, 0x1f20, 0, 0, 0, 0}, 0x1f24 }, // U1F24 # GREEK SMALL LETTER ETA WITH PSILI AND OXIA ++// /* broken */ { {0x0000, 0x1f21, 0, 0, 0, 0}, 0x1f23 }, // U1F23 # GREEK SMALL LETTER ETA WITH DASIA AND VARIA ++// /* broken */ { {0x0000, 0x1f21, 0, 0, 0, 0}, 0x1f25 }, // U1F25 # GREEK SMALL LETTER ETA WITH DASIA AND OXIA ++// /* broken */ { {0x0000, 0x1f28, 0, 0, 0, 0}, 0x1f2a }, // U1F2A # GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA ++// /* broken */ { {0x0000, 0x1f28, 0, 0, 0, 0}, 0x1f2c }, // U1F2C # GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA ++// /* broken */ { {0x0000, 0x1f29, 0, 0, 0, 0}, 0x1f2d }, // U1F2D # GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA ++// /* broken */ { {0x0000, 0x1f29, 0, 0, 0, 0}, 0x1f2b }, // U1F2B # GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA ++// /* broken */ { {0x0000, 0x1f30, 0, 0, 0, 0}, 0x1f32 }, // U1F32 # GREEK SMALL LETTER IOTA WITH PSILI AND VARIA ++// /* broken */ { {0x0000, 0x1f30, 0, 0, 0, 0}, 0x1f34 }, // U1F34 # GREEK SMALL LETTER IOTA WITH PSILI AND OXIA ++// /* broken */ { {0x0000, 0x1f31, 0, 0, 0, 0}, 0x1f33 }, // U1F33 # GREEK SMALL LETTER IOTA WITH DASIA AND VARIA ++// /* broken */ { {0x0000, 0x1f31, 0, 0, 0, 0}, 0x1f35 }, // U1F35 # GREEK SMALL LETTER IOTA WITH DASIA AND OXIA ++// /* broken */ { {0x0000, 0x1f38, 0, 0, 0, 0}, 0x1f3a }, // U1F3A # GREEK CAPITAL LETTER IOTA WITH PSILI AND VARIA ++// /* broken */ { {0x0000, 0x1f38, 0, 0, 0, 0}, 0x1f3c }, // U1F3C # GREEK CAPITAL LETTER IOTA WITH PSILI AND OXIA ++// /* broken */ { {0x0000, 0x1f39, 0, 0, 0, 0}, 0x1f3b }, // U1F3B # GREEK CAPITAL LETTER IOTA WITH DASIA AND VARIA ++// /* broken */ { {0x0000, 0x1f39, 0, 0, 0, 0}, 0x1f3d }, // U1F3D # GREEK CAPITAL LETTER IOTA WITH DASIA AND OXIA ++// /* broken */ { {0x0000, 0x1f40, 0, 0, 0, 0}, 0x1f44 }, // U1F44 # GREEK SMALL LETTER OMICRON WITH PSILI AND OXIA ++// /* broken */ { {0x0000, 0x1f40, 0, 0, 0, 0}, 0x1f42 }, // U1F42 # GREEK SMALL LETTER OMICRON WITH PSILI AND VARIA ++// /* broken */ { {0x0000, 0x1f41, 0, 0, 0, 0}, 0x1f43 }, // U1F43 # GREEK SMALL LETTER OMICRON WITH DASIA AND VARIA ++// /* broken */ { {0x0000, 0x1f41, 0, 0, 0, 0}, 0x1f45 }, // U1F45 # GREEK SMALL LETTER OMICRON WITH DASIA AND OXIA ++// /* broken */ { {0x0000, 0x1f48, 0, 0, 0, 0}, 0x1f4a }, // U1F4A # GREEK CAPITAL LETTER OMICRON WITH PSILI AND VARIA ++// /* broken */ { {0x0000, 0x1f48, 0, 0, 0, 0}, 0x1f4c }, // U1F4C # GREEK CAPITAL LETTER OMICRON WITH PSILI AND OXIA ++// /* broken */ { {0x0000, 0x1f49, 0, 0, 0, 0}, 0x1f4d }, // U1F4D # GREEK CAPITAL LETTER OMICRON WITH DASIA AND OXIA ++// /* broken */ { {0x0000, 0x1f49, 0, 0, 0, 0}, 0x1f4b }, // U1F4B # GREEK CAPITAL LETTER OMICRON WITH DASIA AND VARIA ++// /* broken */ { {0x0000, 0x1f50, 0, 0, 0, 0}, 0x1f52 }, // U1F52 # GREEK SMALL LETTER UPSILON WITH PSILI AND VARIA ++// /* broken */ { {0x0000, 0x1f50, 0, 0, 0, 0}, 0x1f54 }, // U1F54 # GREEK SMALL LETTER UPSILON WITH PSILI AND OXIA ++// /* broken */ { {0x0000, 0x1f51, 0, 0, 0, 0}, 0x1f53 }, // U1F53 # GREEK SMALL LETTER UPSILON WITH DASIA AND VARIA ++// /* broken */ { {0x0000, 0x1f51, 0, 0, 0, 0}, 0x1f55 }, // U1F55 # GREEK SMALL LETTER UPSILON WITH DASIA AND OXIA ++// /* broken */ { {0x0000, 0x1f59, 0, 0, 0, 0}, 0x1f5b }, // U1F5B # GREEK CAPITAL LETTER UPSILON WITH DASIA AND VARIA ++// /* broken */ { {0x0000, 0x1f59, 0, 0, 0, 0}, 0x1f5d }, // U1F5D # GREEK CAPITAL LETTER UPSILON WITH DASIA AND OXIA ++// /* broken */ { {0x0000, 0x1f60, 0, 0, 0, 0}, 0x1f64 }, // U1F64 # GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA ++// /* broken */ { {0x0000, 0x1f60, 0, 0, 0, 0}, 0x1f62 }, // U1F62 # GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA ++// /* broken */ { {0x0000, 0x1f61, 0, 0, 0, 0}, 0x1f63 }, // U1F63 # GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA ++// /* broken */ { {0x0000, 0x1f61, 0, 0, 0, 0}, 0x1f65 }, // U1F65 # GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA ++// /* broken */ { {0x0000, 0x1f68, 0, 0, 0, 0}, 0x1f6a }, // U1F6A # GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA ++// /* broken */ { {0x0000, 0x1f68, 0, 0, 0, 0}, 0x1f6c }, // U1F6C # GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA ++// /* broken */ { {0x0000, 0x1f69, 0, 0, 0, 0}, 0x1f6b }, // U1F6B # GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA ++// /* broken */ { {0x0000, 0x1f69, 0, 0, 0, 0}, 0x1f6d }, // U1F6D # GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x0000, 0x004f, 0, 0}, 0x01fe }, // U01FE # LATIN CAPITAL LETTER O WITH STROKE AND ACUTE ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x0000, 0x006f, 0, 0}, 0x01ff }, // U01FF # LATIN SMALL LETTER O WITH STROKE AND ACUTE ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x0022, 0x0049, 0, 0}, 0x1e2e }, // U1E2E # LATIN CAPITAL LETTER I WITH DIAERESIS AND ACUTE ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x0022, 0x0055, 0, 0}, 0x01d7 }, // U01D7 # LATIN CAPITAL LETTER U WITH DIAERESIS AND ACUTE ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x0022, 0x0055, 0, 0}, 0x01db }, // U01DB # LATIN CAPITAL LETTER U WITH DIAERESIS AND GRAVE ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x0022, 0x0069, 0, 0}, 0x1e2f }, // U1E2F # LATIN SMALL LETTER I WITH DIAERESIS AND ACUTE ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x0022, 0x0075, 0, 0}, 0x01dc }, // U01DC # LATIN SMALL LETTER U WITH DIAERESIS AND GRAVE ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x0022, 0x0075, 0, 0}, 0x01d8 }, // U01D8 # LATIN SMALL LETTER U WITH DIAERESIS AND ACUTE ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x0022, 0x03b9, 0, 0}, 0x1fd2 }, // U1FD2 # GREEK SMALL LETTER IOTA WITH DIALYTIKA AND VARIA ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x0022, 0x03b9, 0, 0}, 0x0390 }, // U0390 # GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x0022, 0x03c5, 0, 0}, 0x1fe2 }, // U1FE2 # GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND VARIA ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x0022, 0x03c5, 0, 0}, 0x03b0 }, // U03B0 # GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0391, 0, 0}, 0x1f0b }, // U1F0B # GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0391, 0, 0}, 0x1f0d }, // U1F0D # GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0395, 0, 0}, 0x1f1d }, // U1F1D # GREEK CAPITAL LETTER EPSILON WITH DASIA AND OXIA ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0395, 0, 0}, 0x1f1b }, // U1F1B # GREEK CAPITAL LETTER EPSILON WITH DASIA AND VARIA ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0397, 0, 0}, 0x1f2b }, // U1F2B # GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0397, 0, 0}, 0x1f2d }, // U1F2D # GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0399, 0, 0}, 0x1f3b }, // U1F3B # GREEK CAPITAL LETTER IOTA WITH DASIA AND VARIA ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0399, 0, 0}, 0x1f3d }, // U1F3D # GREEK CAPITAL LETTER IOTA WITH DASIA AND OXIA ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x0028, 0x039f, 0, 0}, 0x1f4b }, // U1F4B # GREEK CAPITAL LETTER OMICRON WITH DASIA AND VARIA ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x0028, 0x039f, 0, 0}, 0x1f4d }, // U1F4D # GREEK CAPITAL LETTER OMICRON WITH DASIA AND OXIA ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x0028, 0x03a5, 0, 0}, 0x1f5b }, // U1F5B # GREEK CAPITAL LETTER UPSILON WITH DASIA AND VARIA ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x0028, 0x03a5, 0, 0}, 0x1f5d }, // U1F5D # GREEK CAPITAL LETTER UPSILON WITH DASIA AND OXIA ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x0028, 0x03a9, 0, 0}, 0x1f6d }, // U1F6D # GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x0028, 0x03a9, 0, 0}, 0x1f6b }, // U1F6B # GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x0028, 0x03b1, 0, 0}, 0x1f03 }, // U1F03 # GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x0028, 0x03b1, 0, 0}, 0x1f05 }, // U1F05 # GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x0028, 0x03b5, 0, 0}, 0x1f15 }, // U1F15 # GREEK SMALL LETTER EPSILON WITH DASIA AND OXIA ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x0028, 0x03b5, 0, 0}, 0x1f13 }, // U1F13 # GREEK SMALL LETTER EPSILON WITH DASIA AND VARIA ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x0028, 0x03b7, 0, 0}, 0x1f23 }, // U1F23 # GREEK SMALL LETTER ETA WITH DASIA AND VARIA ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x0028, 0x03b7, 0, 0}, 0x1f25 }, // U1F25 # GREEK SMALL LETTER ETA WITH DASIA AND OXIA ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x0028, 0x03b9, 0, 0}, 0x1f35 }, // U1F35 # GREEK SMALL LETTER IOTA WITH DASIA AND OXIA ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x0028, 0x03b9, 0, 0}, 0x1f33 }, // U1F33 # GREEK SMALL LETTER IOTA WITH DASIA AND VARIA ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x0028, 0x03bf, 0, 0}, 0x1f45 }, // U1F45 # GREEK SMALL LETTER OMICRON WITH DASIA AND OXIA ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x0028, 0x03bf, 0, 0}, 0x1f43 }, // U1F43 # GREEK SMALL LETTER OMICRON WITH DASIA AND VARIA ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x0028, 0x03c5, 0, 0}, 0x1f55 }, // U1F55 # GREEK SMALL LETTER UPSILON WITH DASIA AND OXIA ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x0028, 0x03c5, 0, 0}, 0x1f53 }, // U1F53 # GREEK SMALL LETTER UPSILON WITH DASIA AND VARIA ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x0028, 0x03c9, 0, 0}, 0x1f65 }, // U1F65 # GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x0028, 0x03c9, 0, 0}, 0x1f63 }, // U1F63 # GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x0029, 0x0391, 0, 0}, 0x1f0c }, // U1F0C # GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x0029, 0x0391, 0, 0}, 0x1f0a }, // U1F0A # GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x0029, 0x0395, 0, 0}, 0x1f1c }, // U1F1C # GREEK CAPITAL LETTER EPSILON WITH PSILI AND OXIA ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x0029, 0x0395, 0, 0}, 0x1f1a }, // U1F1A # GREEK CAPITAL LETTER EPSILON WITH PSILI AND VARIA ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x0029, 0x0397, 0, 0}, 0x1f2c }, // U1F2C # GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x0029, 0x0397, 0, 0}, 0x1f2a }, // U1F2A # GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x0029, 0x0399, 0, 0}, 0x1f3c }, // U1F3C # GREEK CAPITAL LETTER IOTA WITH PSILI AND OXIA ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x0029, 0x0399, 0, 0}, 0x1f3a }, // U1F3A # GREEK CAPITAL LETTER IOTA WITH PSILI AND VARIA ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x0029, 0x039f, 0, 0}, 0x1f4c }, // U1F4C # GREEK CAPITAL LETTER OMICRON WITH PSILI AND OXIA ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x0029, 0x039f, 0, 0}, 0x1f4a }, // U1F4A # GREEK CAPITAL LETTER OMICRON WITH PSILI AND VARIA ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x0029, 0x03a9, 0, 0}, 0x1f6c }, // U1F6C # GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x0029, 0x03a9, 0, 0}, 0x1f6a }, // U1F6A # GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x0029, 0x03b1, 0, 0}, 0x1f04 }, // U1F04 # GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x0029, 0x03b1, 0, 0}, 0x1f02 }, // U1F02 # GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x0029, 0x03b5, 0, 0}, 0x1f12 }, // U1F12 # GREEK SMALL LETTER EPSILON WITH PSILI AND VARIA ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x0029, 0x03b5, 0, 0}, 0x1f14 }, // U1F14 # GREEK SMALL LETTER EPSILON WITH PSILI AND OXIA ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x0029, 0x03b7, 0, 0}, 0x1f22 }, // U1F22 # GREEK SMALL LETTER ETA WITH PSILI AND VARIA ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x0029, 0x03b7, 0, 0}, 0x1f24 }, // U1F24 # GREEK SMALL LETTER ETA WITH PSILI AND OXIA ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x0029, 0x03b9, 0, 0}, 0x1f32 }, // U1F32 # GREEK SMALL LETTER IOTA WITH PSILI AND VARIA ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x0029, 0x03b9, 0, 0}, 0x1f34 }, // U1F34 # GREEK SMALL LETTER IOTA WITH PSILI AND OXIA ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x0029, 0x03bf, 0, 0}, 0x1f44 }, // U1F44 # GREEK SMALL LETTER OMICRON WITH PSILI AND OXIA ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x0029, 0x03bf, 0, 0}, 0x1f42 }, // U1F42 # GREEK SMALL LETTER OMICRON WITH PSILI AND VARIA ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x0029, 0x03c5, 0, 0}, 0x1f54 }, // U1F54 # GREEK SMALL LETTER UPSILON WITH PSILI AND OXIA ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x0029, 0x03c5, 0, 0}, 0x1f52 }, // U1F52 # GREEK SMALL LETTER UPSILON WITH PSILI AND VARIA ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x0029, 0x03c9, 0, 0}, 0x1f64 }, // U1F64 # GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x0029, 0x03c9, 0, 0}, 0x1f62 }, // U1F62 # GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x002b, 0x004f, 0, 0}, 0x1ee0 }, // U1EE0 # LATIN CAPITAL LETTER O WITH HORN AND TILDE ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x002b, 0x004f, 0, 0}, 0x1ede }, // U1EDE # LATIN CAPITAL LETTER O WITH HORN AND HOOK ABOVE ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x002b, 0x004f, 0, 0}, 0x1ee2 }, // U1EE2 # LATIN CAPITAL LETTER O WITH HORN AND DOT BELOW ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x002b, 0x004f, 0, 0}, 0x1eda }, // U1EDA # LATIN CAPITAL LETTER O WITH HORN AND ACUTE ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x002b, 0x004f, 0, 0}, 0x1edc }, // U1EDC # LATIN CAPITAL LETTER O WITH HORN AND GRAVE ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x002b, 0x0055, 0, 0}, 0x1eea }, // U1EEA # LATIN CAPITAL LETTER U WITH HORN AND GRAVE ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x002b, 0x0055, 0, 0}, 0x1ef0 }, // U1EF0 # LATIN CAPITAL LETTER U WITH HORN AND DOT BELOW ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x002b, 0x0055, 0, 0}, 0x1eee }, // U1EEE # LATIN CAPITAL LETTER U WITH HORN AND TILDE ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x002b, 0x0055, 0, 0}, 0x1ee8 }, // U1EE8 # LATIN CAPITAL LETTER U WITH HORN AND ACUTE ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x002b, 0x0055, 0, 0}, 0x1eec }, // U1EEC # LATIN CAPITAL LETTER U WITH HORN AND HOOK ABOVE ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x002b, 0x006f, 0, 0}, 0x1edb }, // U1EDB # LATIN SMALL LETTER O WITH HORN AND ACUTE ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x002b, 0x006f, 0, 0}, 0x1ee1 }, // U1EE1 # LATIN SMALL LETTER O WITH HORN AND TILDE ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x002b, 0x006f, 0, 0}, 0x1edf }, // U1EDF # LATIN SMALL LETTER O WITH HORN AND HOOK ABOVE ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x002b, 0x006f, 0, 0}, 0x1ee3 }, // U1EE3 # LATIN SMALL LETTER O WITH HORN AND DOT BELOW ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x002b, 0x006f, 0, 0}, 0x1edd }, // U1EDD # LATIN SMALL LETTER O WITH HORN AND GRAVE ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x002b, 0x0075, 0, 0}, 0x1eeb }, // U1EEB # LATIN SMALL LETTER U WITH HORN AND GRAVE ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x002b, 0x0075, 0, 0}, 0x1ef1 }, // U1EF1 # LATIN SMALL LETTER U WITH HORN AND DOT BELOW ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x002b, 0x0075, 0, 0}, 0x1eed }, // U1EED # LATIN SMALL LETTER U WITH HORN AND HOOK ABOVE ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x002b, 0x0075, 0, 0}, 0x1ee9 }, // U1EE9 # LATIN SMALL LETTER U WITH HORN AND ACUTE ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x002b, 0x0075, 0, 0}, 0x1eef }, // U1EEF # LATIN SMALL LETTER U WITH HORN AND TILDE ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x002c, 0x0043, 0, 0}, 0x1e08 }, // U1E08 # LATIN CAPITAL LETTER C WITH CEDILLA AND ACUTE ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x002c, 0x0063, 0, 0}, 0x1e09 }, // U1E09 # LATIN SMALL LETTER C WITH CEDILLA AND ACUTE ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x002f, 0x004f, 0, 0}, 0x01fe }, // U01FE # LATIN CAPITAL LETTER O WITH STROKE AND ACUTE ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x002f, 0x006f, 0, 0}, 0x01ff }, // U01FF # LATIN SMALL LETTER O WITH STROKE AND ACUTE ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x0055, 0x0041, 0, 0}, 0x1eb2 }, // U1EB2 # LATIN CAPITAL LETTER A WITH BREVE AND HOOK ABOVE ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x0055, 0x0041, 0, 0}, 0x1eb4 }, // U1EB4 # LATIN CAPITAL LETTER A WITH BREVE AND TILDE ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x0055, 0x0041, 0, 0}, 0x1eae }, // U1EAE # LATIN CAPITAL LETTER A WITH BREVE AND ACUTE ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x0055, 0x0041, 0, 0}, 0x1eb0 }, // U1EB0 # LATIN CAPITAL LETTER A WITH BREVE AND GRAVE ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x0055, 0x0061, 0, 0}, 0x1eb5 }, // U1EB5 # LATIN SMALL LETTER A WITH BREVE AND TILDE ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x0055, 0x0061, 0, 0}, 0x1eaf }, // U1EAF # LATIN SMALL LETTER A WITH BREVE AND ACUTE ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x0055, 0x0061, 0, 0}, 0x1eb3 }, // U1EB3 # LATIN SMALL LETTER A WITH BREVE AND HOOK ABOVE ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x0055, 0x0061, 0, 0}, 0x1eb1 }, // U1EB1 # LATIN SMALL LETTER A WITH BREVE AND GRAVE ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x005e, 0x0041, 0, 0}, 0x1ea8 }, // U1EA8 # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x005e, 0x0041, 0, 0}, 0x1ea6 }, // U1EA6 # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND GRAVE ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x005e, 0x0041, 0, 0}, 0x1eaa }, // U1EAA # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND TILDE ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x005e, 0x0041, 0, 0}, 0x1ea4 }, // U1EA4 # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND ACUTE ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x005e, 0x0045, 0, 0}, 0x1ec4 }, // U1EC4 # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND TILDE ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x005e, 0x0045, 0, 0}, 0x1ec2 }, // U1EC2 # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x005e, 0x0045, 0, 0}, 0x1ec0 }, // U1EC0 # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND GRAVE ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x005e, 0x0045, 0, 0}, 0x1ebe }, // U1EBE # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND ACUTE ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x005e, 0x004f, 0, 0}, 0x1ed6 }, // U1ED6 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND TILDE ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x005e, 0x004f, 0, 0}, 0x1ed4 }, // U1ED4 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x005e, 0x004f, 0, 0}, 0x1ed0 }, // U1ED0 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND ACUTE ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x005e, 0x004f, 0, 0}, 0x1ed2 }, // U1ED2 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND GRAVE ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x005e, 0x0061, 0, 0}, 0x1ea9 }, // U1EA9 # LATIN SMALL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x005e, 0x0061, 0, 0}, 0x1ea7 }, // U1EA7 # LATIN SMALL LETTER A WITH CIRCUMFLEX AND GRAVE ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x005e, 0x0061, 0, 0}, 0x1ea5 }, // U1EA5 # LATIN SMALL LETTER A WITH CIRCUMFLEX AND ACUTE ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x005e, 0x0061, 0, 0}, 0x1eab }, // U1EAB # LATIN SMALL LETTER A WITH CIRCUMFLEX AND TILDE ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x005e, 0x0065, 0, 0}, 0x1ec5 }, // U1EC5 # LATIN SMALL LETTER E WITH CIRCUMFLEX AND TILDE ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x005e, 0x0065, 0, 0}, 0x1ec1 }, // U1EC1 # LATIN SMALL LETTER E WITH CIRCUMFLEX AND GRAVE ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x005e, 0x0065, 0, 0}, 0x1ebf }, // U1EBF # LATIN SMALL LETTER E WITH CIRCUMFLEX AND ACUTE ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x005e, 0x0065, 0, 0}, 0x1ec3 }, // U1EC3 # LATIN SMALL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x005e, 0x006f, 0, 0}, 0x1ed7 }, // U1ED7 # LATIN SMALL LETTER O WITH CIRCUMFLEX AND TILDE ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x005e, 0x006f, 0, 0}, 0x1ed5 }, // U1ED5 # LATIN SMALL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x005e, 0x006f, 0, 0}, 0x1ed1 }, // U1ED1 # LATIN SMALL LETTER O WITH CIRCUMFLEX AND ACUTE ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x005e, 0x006f, 0, 0}, 0x1ed3 }, // U1ED3 # LATIN SMALL LETTER O WITH CIRCUMFLEX AND GRAVE ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0045, 0, 0}, 0x1e16 }, // U1E16 # LATIN CAPITAL LETTER E WITH MACRON AND ACUTE ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0045, 0, 0}, 0x1e14 }, // U1E14 # LATIN CAPITAL LETTER E WITH MACRON AND GRAVE ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x005f, 0x004f, 0, 0}, 0x1e52 }, // U1E52 # LATIN CAPITAL LETTER O WITH MACRON AND ACUTE ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x005f, 0x004f, 0, 0}, 0x1e50 }, // U1E50 # LATIN CAPITAL LETTER O WITH MACRON AND GRAVE ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0065, 0, 0}, 0x1e15 }, // U1E15 # LATIN SMALL LETTER E WITH MACRON AND GRAVE ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0065, 0, 0}, 0x1e17 }, // U1E17 # LATIN SMALL LETTER E WITH MACRON AND ACUTE ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x005f, 0x006f, 0, 0}, 0x1e51 }, // U1E51 # LATIN SMALL LETTER O WITH MACRON AND GRAVE ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x005f, 0x006f, 0, 0}, 0x1e53 }, // U1E53 # LATIN SMALL LETTER O WITH MACRON AND ACUTE ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x0062, 0x0041, 0, 0}, 0x1eae }, // U1EAE # LATIN CAPITAL LETTER A WITH BREVE AND ACUTE ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x0062, 0x0041, 0, 0}, 0x1eb4 }, // U1EB4 # LATIN CAPITAL LETTER A WITH BREVE AND TILDE ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x0062, 0x0041, 0, 0}, 0x1eb0 }, // U1EB0 # LATIN CAPITAL LETTER A WITH BREVE AND GRAVE ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x0062, 0x0041, 0, 0}, 0x1eb2 }, // U1EB2 # LATIN CAPITAL LETTER A WITH BREVE AND HOOK ABOVE ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x0062, 0x0061, 0, 0}, 0x1eb1 }, // U1EB1 # LATIN SMALL LETTER A WITH BREVE AND GRAVE ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x0062, 0x0061, 0, 0}, 0x1eaf }, // U1EAF # LATIN SMALL LETTER A WITH BREVE AND ACUTE ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x0062, 0x0061, 0, 0}, 0x1eb5 }, // U1EB5 # LATIN SMALL LETTER A WITH BREVE AND TILDE ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x0062, 0x0061, 0, 0}, 0x1eb3 }, // U1EB3 # LATIN SMALL LETTER A WITH BREVE AND HOOK ABOVE ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x006f, 0x0041, 0, 0}, 0x01fa }, // U01FA # LATIN CAPITAL LETTER A WITH RING ABOVE AND ACUTE ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x006f, 0x0061, 0, 0}, 0x01fb }, // U01FB # LATIN SMALL LETTER A WITH RING ABOVE AND ACUTE ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x007e, 0x004f, 0, 0}, 0x1e4c }, // U1E4C # LATIN CAPITAL LETTER O WITH TILDE AND ACUTE ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x007e, 0x0055, 0, 0}, 0x1e78 }, // U1E78 # LATIN CAPITAL LETTER U WITH TILDE AND ACUTE ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x007e, 0x006f, 0, 0}, 0x1e4d }, // U1E4D # LATIN SMALL LETTER O WITH TILDE AND ACUTE ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x007e, 0x0075, 0, 0}, 0x1e79 }, // U1E79 # LATIN SMALL LETTER U WITH TILDE AND ACUTE ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x00af, 0x0045, 0, 0}, 0x1e16 }, // U1E16 # LATIN CAPITAL LETTER E WITH MACRON AND ACUTE ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x00af, 0x0045, 0, 0}, 0x1e14 }, // U1E14 # LATIN CAPITAL LETTER E WITH MACRON AND GRAVE ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x00af, 0x004f, 0, 0}, 0x1e52 }, // U1E52 # LATIN CAPITAL LETTER O WITH MACRON AND ACUTE ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x00af, 0x004f, 0, 0}, 0x1e50 }, // U1E50 # LATIN CAPITAL LETTER O WITH MACRON AND GRAVE ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x00af, 0x0065, 0, 0}, 0x1e15 }, // U1E15 # LATIN SMALL LETTER E WITH MACRON AND GRAVE ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x00af, 0x0065, 0, 0}, 0x1e17 }, // U1E17 # LATIN SMALL LETTER E WITH MACRON AND ACUTE ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x00af, 0x006f, 0, 0}, 0x1e53 }, // U1E53 # LATIN SMALL LETTER O WITH MACRON AND ACUTE ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x00af, 0x006f, 0, 0}, 0x1e51 }, // U1E51 # LATIN SMALL LETTER O WITH MACRON AND GRAVE ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Dead_Circumflex), 0x0041, 0, 0, 0}, 0x1eaa }, // U1EAA # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND TILDE ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Dead_Circumflex), 0x0041, 0, 0, 0}, 0x1ea6 }, // U1EA6 # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND GRAVE ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Dead_Circumflex), 0x0041, 0, 0, 0}, 0x1ea4 }, // U1EA4 # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND ACUTE ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Dead_Circumflex), 0x0041, 0, 0, 0}, 0x1ea8 }, // U1EA8 # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Dead_Circumflex), 0x0045, 0, 0, 0}, 0x1ec4 }, // U1EC4 # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND TILDE ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Dead_Circumflex), 0x0045, 0, 0, 0}, 0x1ec0 }, // U1EC0 # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND GRAVE ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Dead_Circumflex), 0x0045, 0, 0, 0}, 0x1ec2 }, // U1EC2 # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Dead_Circumflex), 0x0045, 0, 0, 0}, 0x1ebe }, // U1EBE # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND ACUTE ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Dead_Circumflex), 0x004f, 0, 0, 0}, 0x1ed0 }, // U1ED0 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND ACUTE ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Dead_Circumflex), 0x004f, 0, 0, 0}, 0x1ed2 }, // U1ED2 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND GRAVE ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Dead_Circumflex), 0x004f, 0, 0, 0}, 0x1ed4 }, // U1ED4 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Dead_Circumflex), 0x004f, 0, 0, 0}, 0x1ed6 }, // U1ED6 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND TILDE ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Dead_Circumflex), 0x0061, 0, 0, 0}, 0x1eab }, // U1EAB # LATIN SMALL LETTER A WITH CIRCUMFLEX AND TILDE ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Dead_Circumflex), 0x0061, 0, 0, 0}, 0x1ea5 }, // U1EA5 # LATIN SMALL LETTER A WITH CIRCUMFLEX AND ACUTE ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Dead_Circumflex), 0x0061, 0, 0, 0}, 0x1ea9 }, // U1EA9 # LATIN SMALL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Dead_Circumflex), 0x0061, 0, 0, 0}, 0x1ea7 }, // U1EA7 # LATIN SMALL LETTER A WITH CIRCUMFLEX AND GRAVE ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Dead_Circumflex), 0x0065, 0, 0, 0}, 0x1ebf }, // U1EBF # LATIN SMALL LETTER E WITH CIRCUMFLEX AND ACUTE ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Dead_Circumflex), 0x0065, 0, 0, 0}, 0x1ec3 }, // U1EC3 # LATIN SMALL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Dead_Circumflex), 0x0065, 0, 0, 0}, 0x1ec1 }, // U1EC1 # LATIN SMALL LETTER E WITH CIRCUMFLEX AND GRAVE ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Dead_Circumflex), 0x0065, 0, 0, 0}, 0x1ec5 }, // U1EC5 # LATIN SMALL LETTER E WITH CIRCUMFLEX AND TILDE ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Dead_Circumflex), 0x006f, 0, 0, 0}, 0x1ed3 }, // U1ED3 # LATIN SMALL LETTER O WITH CIRCUMFLEX AND GRAVE ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Dead_Circumflex), 0x006f, 0, 0, 0}, 0x1ed7 }, // U1ED7 # LATIN SMALL LETTER O WITH CIRCUMFLEX AND TILDE ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Dead_Circumflex), 0x006f, 0, 0, 0}, 0x1ed1 }, // U1ED1 # LATIN SMALL LETTER O WITH CIRCUMFLEX AND ACUTE ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Dead_Circumflex), 0x006f, 0, 0, 0}, 0x1ed5 }, // U1ED5 # LATIN SMALL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Dead_Tilde), 0x004f, 0, 0, 0}, 0x1e4c }, // U1E4C # LATIN CAPITAL LETTER O WITH TILDE AND ACUTE ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Dead_Tilde), 0x0055, 0, 0, 0}, 0x1e78 }, // U1E78 # LATIN CAPITAL LETTER U WITH TILDE AND ACUTE ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Dead_Tilde), 0x006f, 0, 0, 0}, 0x1e4d }, // U1E4D # LATIN SMALL LETTER O WITH TILDE AND ACUTE ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Dead_Tilde), 0x0075, 0, 0, 0}, 0x1e79 }, // U1E79 # LATIN SMALL LETTER U WITH TILDE AND ACUTE ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Dead_Macron), 0x0045, 0, 0, 0}, 0x1e16 }, // U1E16 # LATIN CAPITAL LETTER E WITH MACRON AND ACUTE ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Dead_Macron), 0x0045, 0, 0, 0}, 0x1e14 }, // U1E14 # LATIN CAPITAL LETTER E WITH MACRON AND GRAVE ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Dead_Macron), 0x004f, 0, 0, 0}, 0x1e52 }, // U1E52 # LATIN CAPITAL LETTER O WITH MACRON AND ACUTE ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Dead_Macron), 0x004f, 0, 0, 0}, 0x1e50 }, // U1E50 # LATIN CAPITAL LETTER O WITH MACRON AND GRAVE ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Dead_Macron), 0x0065, 0, 0, 0}, 0x1e17 }, // U1E17 # LATIN SMALL LETTER E WITH MACRON AND ACUTE ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Dead_Macron), 0x0065, 0, 0, 0}, 0x1e15 }, // U1E15 # LATIN SMALL LETTER E WITH MACRON AND GRAVE ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Dead_Macron), 0x006f, 0, 0, 0}, 0x1e53 }, // U1E53 # LATIN SMALL LETTER O WITH MACRON AND ACUTE ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Dead_Macron), 0x006f, 0, 0, 0}, 0x1e51 }, // U1E51 # LATIN SMALL LETTER O WITH MACRON AND GRAVE ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Dead_Breve), 0x0041, 0, 0, 0}, 0x1eb4 }, // U1EB4 # LATIN CAPITAL LETTER A WITH BREVE AND TILDE ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Dead_Breve), 0x0041, 0, 0, 0}, 0x1eb0 }, // U1EB0 # LATIN CAPITAL LETTER A WITH BREVE AND GRAVE ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Dead_Breve), 0x0041, 0, 0, 0}, 0x1eae }, // U1EAE # LATIN CAPITAL LETTER A WITH BREVE AND ACUTE ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Dead_Breve), 0x0041, 0, 0, 0}, 0x1eb2 }, // U1EB2 # LATIN CAPITAL LETTER A WITH BREVE AND HOOK ABOVE ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Dead_Breve), 0x0061, 0, 0, 0}, 0x1eb1 }, // U1EB1 # LATIN SMALL LETTER A WITH BREVE AND GRAVE ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Dead_Breve), 0x0061, 0, 0, 0}, 0x1eb3 }, // U1EB3 # LATIN SMALL LETTER A WITH BREVE AND HOOK ABOVE ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Dead_Breve), 0x0061, 0, 0, 0}, 0x1eaf }, // U1EAF # LATIN SMALL LETTER A WITH BREVE AND ACUTE ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Dead_Breve), 0x0061, 0, 0, 0}, 0x1eb5 }, // U1EB5 # LATIN SMALL LETTER A WITH BREVE AND TILDE ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Dead_Diaeresis), 0x0049, 0, 0, 0}, 0x1e2e }, // U1E2E # LATIN CAPITAL LETTER I WITH DIAERESIS AND ACUTE ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Dead_Diaeresis), 0x0055, 0, 0, 0}, 0x01db }, // U01DB # LATIN CAPITAL LETTER U WITH DIAERESIS AND GRAVE ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Dead_Diaeresis), 0x0055, 0, 0, 0}, 0x01d7 }, // U01D7 # LATIN CAPITAL LETTER U WITH DIAERESIS AND ACUTE ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Dead_Diaeresis), 0x0069, 0, 0, 0}, 0x1e2f }, // U1E2F # LATIN SMALL LETTER I WITH DIAERESIS AND ACUTE ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Dead_Diaeresis), 0x0075, 0, 0, 0}, 0x01dc }, // U01DC # LATIN SMALL LETTER U WITH DIAERESIS AND GRAVE ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Dead_Diaeresis), 0x0075, 0, 0, 0}, 0x01d8 }, // U01D8 # LATIN SMALL LETTER U WITH DIAERESIS AND ACUTE ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Dead_Diaeresis), 0x03b9, 0, 0, 0}, 0x0390 }, // U0390 # GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Dead_Diaeresis), 0x03b9, 0, 0, 0}, 0x1fd2 }, // U1FD2 # GREEK SMALL LETTER IOTA WITH DIALYTIKA AND VARIA ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Dead_Diaeresis), 0x03c5, 0, 0, 0}, 0x1fe2 }, // U1FE2 # GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND VARIA ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Dead_Diaeresis), 0x03c5, 0, 0, 0}, 0x03b0 }, // U03B0 # GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Dead_Abovering), 0x0041, 0, 0, 0}, 0x01fa }, // U01FA # LATIN CAPITAL LETTER A WITH RING ABOVE AND ACUTE ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Dead_Abovering), 0x0061, 0, 0, 0}, 0x01fb }, // U01FB # LATIN SMALL LETTER A WITH RING ABOVE AND ACUTE ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Dead_Cedilla), 0x0043, 0, 0, 0}, 0x1e08 }, // U1E08 # LATIN CAPITAL LETTER C WITH CEDILLA AND ACUTE ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Dead_Cedilla), 0x0063, 0, 0, 0}, 0x1e09 }, // U1E09 # LATIN SMALL LETTER C WITH CEDILLA AND ACUTE ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Dead_Horn), 0x004f, 0, 0, 0}, 0x1ede }, // U1EDE # LATIN CAPITAL LETTER O WITH HORN AND HOOK ABOVE ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Dead_Horn), 0x004f, 0, 0, 0}, 0x1ee2 }, // U1EE2 # LATIN CAPITAL LETTER O WITH HORN AND DOT BELOW ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Dead_Horn), 0x004f, 0, 0, 0}, 0x1edc }, // U1EDC # LATIN CAPITAL LETTER O WITH HORN AND GRAVE ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Dead_Horn), 0x004f, 0, 0, 0}, 0x1ee0 }, // U1EE0 # LATIN CAPITAL LETTER O WITH HORN AND TILDE ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Dead_Horn), 0x004f, 0, 0, 0}, 0x1eda }, // U1EDA # LATIN CAPITAL LETTER O WITH HORN AND ACUTE ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Dead_Horn), 0x0055, 0, 0, 0}, 0x1eea }, // U1EEA # LATIN CAPITAL LETTER U WITH HORN AND GRAVE ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Dead_Horn), 0x0055, 0, 0, 0}, 0x1ee8 }, // U1EE8 # LATIN CAPITAL LETTER U WITH HORN AND ACUTE ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Dead_Horn), 0x0055, 0, 0, 0}, 0x1ef0 }, // U1EF0 # LATIN CAPITAL LETTER U WITH HORN AND DOT BELOW ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Dead_Horn), 0x0055, 0, 0, 0}, 0x1eec }, // U1EEC # LATIN CAPITAL LETTER U WITH HORN AND HOOK ABOVE ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Dead_Horn), 0x0055, 0, 0, 0}, 0x1eee }, // U1EEE # LATIN CAPITAL LETTER U WITH HORN AND TILDE ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Dead_Horn), 0x006f, 0, 0, 0}, 0x1edf }, // U1EDF # LATIN SMALL LETTER O WITH HORN AND HOOK ABOVE ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Dead_Horn), 0x006f, 0, 0, 0}, 0x1ee3 }, // U1EE3 # LATIN SMALL LETTER O WITH HORN AND DOT BELOW ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Dead_Horn), 0x006f, 0, 0, 0}, 0x1edd }, // U1EDD # LATIN SMALL LETTER O WITH HORN AND GRAVE ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Dead_Horn), 0x006f, 0, 0, 0}, 0x1edb }, // U1EDB # LATIN SMALL LETTER O WITH HORN AND ACUTE ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Dead_Horn), 0x006f, 0, 0, 0}, 0x1ee1 }, // U1EE1 # LATIN SMALL LETTER O WITH HORN AND TILDE ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Dead_Horn), 0x0075, 0, 0, 0}, 0x1eed }, // U1EED # LATIN SMALL LETTER U WITH HORN AND HOOK ABOVE ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Dead_Horn), 0x0075, 0, 0, 0}, 0x1eef }, // U1EEF # LATIN SMALL LETTER U WITH HORN AND TILDE ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Dead_Horn), 0x0075, 0, 0, 0}, 0x1ef1 }, // U1EF1 # LATIN SMALL LETTER U WITH HORN AND DOT BELOW ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Dead_Horn), 0x0075, 0, 0, 0}, 0x1eeb }, // U1EEB # LATIN SMALL LETTER U WITH HORN AND GRAVE ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Dead_Horn), 0x0075, 0, 0, 0}, 0x1ee9 }, // U1EE9 # LATIN SMALL LETTER U WITH HORN AND ACUTE ++ { {0x030f, 0x0041, 0, 0, 0, 0}, 0x0200 }, // U0200 # LATIN CAPITAL LETTER A WITH DOUBLE GRAVE ++ { {0x030f, 0x0045, 0, 0, 0, 0}, 0x0204 }, // U0204 # LATIN CAPITAL LETTER E WITH DOUBLE GRAVE ++ { {0x030f, 0x0049, 0, 0, 0, 0}, 0x0208 }, // U0208 # LATIN CAPITAL LETTER I WITH DOUBLE GRAVE ++ { {0x030f, 0x004f, 0, 0, 0, 0}, 0x020c }, // U020C # LATIN CAPITAL LETTER O WITH DOUBLE GRAVE ++ { {0x030f, 0x0052, 0, 0, 0, 0}, 0x0210 }, // U0210 # LATIN CAPITAL LETTER R WITH DOUBLE GRAVE ++ { {0x030f, 0x0055, 0, 0, 0, 0}, 0x0214 }, // U0214 # LATIN CAPITAL LETTER U WITH DOUBLE GRAVE ++ { {0x030f, 0x0061, 0, 0, 0, 0}, 0x0201 }, // U0201 # LATIN SMALL LETTER A WITH DOUBLE GRAVE ++ { {0x030f, 0x0065, 0, 0, 0, 0}, 0x0205 }, // U0205 # LATIN SMALL LETTER E WITH DOUBLE GRAVE ++ { {0x030f, 0x0069, 0, 0, 0, 0}, 0x0209 }, // U0209 # LATIN SMALL LETTER I WITH DOUBLE GRAVE ++ { {0x030f, 0x006f, 0, 0, 0, 0}, 0x020d }, // U020D # LATIN SMALL LETTER O WITH DOUBLE GRAVE ++ { {0x030f, 0x0072, 0, 0, 0, 0}, 0x0211 }, // U0211 # LATIN SMALL LETTER R WITH DOUBLE GRAVE ++ { {0x030f, 0x0075, 0, 0, 0, 0}, 0x0215 }, // U0215 # LATIN SMALL LETTER U WITH DOUBLE GRAVE ++ { {0x030f, 0x0474, 0, 0, 0, 0}, 0x0476 }, // U0476 # CYRILLIC CAPITAL LETTER IZHITSA WITH DOUBLE GRAVE ACCENT ++ { {0x030f, 0x0475, 0, 0, 0, 0}, 0x0477 }, // U0477 # CYRILLIC SMALL LETTER IZHITSA WITH DOUBLE GRAVE ACCENT ++ { {0x0311, 0x0041, 0, 0, 0, 0}, 0x0202 }, // U0202 # LATIN CAPITAL LETTER A WITH INVERTED BREVE ++ { {0x0311, 0x0045, 0, 0, 0, 0}, 0x0206 }, // U0206 # LATIN CAPITAL LETTER E WITH INVERTED BREVE ++ { {0x0311, 0x0049, 0, 0, 0, 0}, 0x020a }, // U020A # LATIN CAPITAL LETTER I WITH INVERTED BREVE ++ { {0x0311, 0x004f, 0, 0, 0, 0}, 0x020e }, // U020E # LATIN CAPITAL LETTER O WITH INVERTED BREVE ++ { {0x0311, 0x0052, 0, 0, 0, 0}, 0x0212 }, // U0212 # LATIN CAPITAL LETTER R WITH INVERTED BREVE ++ { {0x0311, 0x0055, 0, 0, 0, 0}, 0x0216 }, // U0216 # LATIN CAPITAL LETTER U WITH INVERTED BREVE ++ { {0x0311, 0x0061, 0, 0, 0, 0}, 0x0203 }, // U0203 # LATIN SMALL LETTER A WITH INVERTED BREVE ++ { {0x0311, 0x0065, 0, 0, 0, 0}, 0x0207 }, // U0207 # LATIN SMALL LETTER E WITH INVERTED BREVE ++ { {0x0311, 0x0069, 0, 0, 0, 0}, 0x020b }, // U020B # LATIN SMALL LETTER I WITH INVERTED BREVE ++ { {0x0311, 0x006f, 0, 0, 0, 0}, 0x020f }, // U020F # LATIN SMALL LETTER O WITH INVERTED BREVE ++ { {0x0311, 0x0072, 0, 0, 0, 0}, 0x0213 }, // U0213 # LATIN SMALL LETTER R WITH INVERTED BREVE ++ { {0x0311, 0x0075, 0, 0, 0, 0}, 0x0217 }, // U0217 # LATIN SMALL LETTER U WITH INVERTED BREVE ++ { {0x0313, 0x0391, 0, 0, 0, 0}, 0x1f08 }, // U1F08 # GREEK CAPITAL LETTER ALPHA WITH PSILI ++ { {0x0313, 0x0395, 0, 0, 0, 0}, 0x1f18 }, // U1F18 # GREEK CAPITAL LETTER EPSILON WITH PSILI ++ { {0x0313, 0x0397, 0, 0, 0, 0}, 0x1f28 }, // U1F28 # GREEK CAPITAL LETTER ETA WITH PSILI ++ { {0x0313, 0x0399, 0, 0, 0, 0}, 0x1f38 }, // U1F38 # GREEK CAPITAL LETTER IOTA WITH PSILI ++ { {0x0313, 0x039f, 0, 0, 0, 0}, 0x1f48 }, // U1F48 # GREEK CAPITAL LETTER OMICRON WITH PSILI ++ { {0x0313, 0x03a9, 0, 0, 0, 0}, 0x1f68 }, // U1F68 # GREEK CAPITAL LETTER OMEGA WITH PSILI ++ { {0x0313, 0x03b1, 0, 0, 0, 0}, 0x1f00 }, // U1F00 # GREEK SMALL LETTER ALPHA WITH PSILI ++ { {0x0313, 0x03b5, 0, 0, 0, 0}, 0x1f10 }, // U1F10 # GREEK SMALL LETTER EPSILON WITH PSILI ++ { {0x0313, 0x03b7, 0, 0, 0, 0}, 0x1f20 }, // U1F20 # GREEK SMALL LETTER ETA WITH PSILI ++ { {0x0313, 0x03b9, 0, 0, 0, 0}, 0x1f30 }, // U1F30 # GREEK SMALL LETTER IOTA WITH PSILI ++ { {0x0313, 0x03bf, 0, 0, 0, 0}, 0x1f40 }, // U1F40 # GREEK SMALL LETTER OMICRON WITH PSILI ++ { {0x0313, 0x03c1, 0, 0, 0, 0}, 0x1fe4 }, // U1FE4 # GREEK SMALL LETTER RHO WITH PSILI ++ { {0x0313, 0x03c5, 0, 0, 0, 0}, 0x1f50 }, // U1F50 # GREEK SMALL LETTER UPSILON WITH PSILI ++ { {0x0313, 0x03c9, 0, 0, 0, 0}, 0x1f60 }, // U1F60 # GREEK SMALL LETTER OMEGA WITH PSILI ++ { {0x0314, 0x0391, 0, 0, 0, 0}, 0x1f09 }, // U1F09 # GREEK CAPITAL LETTER ALPHA WITH DASIA ++ { {0x0314, 0x0395, 0, 0, 0, 0}, 0x1f19 }, // U1F19 # GREEK CAPITAL LETTER EPSILON WITH DASIA ++ { {0x0314, 0x0397, 0, 0, 0, 0}, 0x1f29 }, // U1F29 # GREEK CAPITAL LETTER ETA WITH DASIA ++ { {0x0314, 0x0399, 0, 0, 0, 0}, 0x1f39 }, // U1F39 # GREEK CAPITAL LETTER IOTA WITH DASIA ++ { {0x0314, 0x039f, 0, 0, 0, 0}, 0x1f49 }, // U1F49 # GREEK CAPITAL LETTER OMICRON WITH DASIA ++ { {0x0314, 0x03a1, 0, 0, 0, 0}, 0x1fec }, // U1FEC # GREEK CAPITAL LETTER RHO WITH DASIA ++ { {0x0314, 0x03a5, 0, 0, 0, 0}, 0x1f59 }, // U1F59 # GREEK CAPITAL LETTER UPSILON WITH DASIA ++ { {0x0314, 0x03a9, 0, 0, 0, 0}, 0x1f69 }, // U1F69 # GREEK CAPITAL LETTER OMEGA WITH DASIA ++ { {0x0314, 0x03b1, 0, 0, 0, 0}, 0x1f01 }, // U1F01 # GREEK SMALL LETTER ALPHA WITH DASIA ++ { {0x0314, 0x03b5, 0, 0, 0, 0}, 0x1f11 }, // U1F11 # GREEK SMALL LETTER EPSILON WITH DASIA ++ { {0x0314, 0x03b7, 0, 0, 0, 0}, 0x1f21 }, // U1F21 # GREEK SMALL LETTER ETA WITH DASIA ++ { {0x0314, 0x03b9, 0, 0, 0, 0}, 0x1f31 }, // U1F31 # GREEK SMALL LETTER IOTA WITH DASIA ++ { {0x0314, 0x03bf, 0, 0, 0, 0}, 0x1f41 }, // U1F41 # GREEK SMALL LETTER OMICRON WITH DASIA ++ { {0x0314, 0x03c1, 0, 0, 0, 0}, 0x1fe5 }, // U1FE5 # GREEK SMALL LETTER RHO WITH DASIA ++ { {0x0314, 0x03c5, 0, 0, 0, 0}, 0x1f51 }, // U1F51 # GREEK SMALL LETTER UPSILON WITH DASIA ++ { {0x0314, 0x03c9, 0, 0, 0, 0}, 0x1f61 }, // U1F61 # GREEK SMALL LETTER OMEGA WITH DASIA ++ { {0x0324, 0x0055, 0, 0, 0, 0}, 0x1e72 }, // U1E72 # LATIN CAPITAL LETTER U WITH DIAERESIS BELOW ++ { {0x0324, 0x0075, 0, 0, 0, 0}, 0x1e73 }, // U1E73 # LATIN SMALL LETTER U WITH DIAERESIS BELOW ++ { {0x0325, 0x0041, 0, 0, 0, 0}, 0x1e00 }, // U1E00 # LATIN CAPITAL LETTER A WITH RING BELOW ++ { {0x0325, 0x0061, 0, 0, 0, 0}, 0x1e01 }, // U1E01 # LATIN SMALL LETTER A WITH RING BELOW ++ { {0x0326, 0x0053, 0, 0, 0, 0}, 0x0218 }, // U0218 # LATIN CAPITAL LETTER S WITH COMMA BELOW ++ { {0x0326, 0x0054, 0, 0, 0, 0}, 0x021a }, // U021A # LATIN CAPITAL LETTER T WITH COMMA BELOW ++ { {0x0326, 0x0073, 0, 0, 0, 0}, 0x0219 }, // U0219 # LATIN SMALL LETTER S WITH COMMA BELOW ++ { {0x0326, 0x0074, 0, 0, 0, 0}, 0x021b }, // U021B # LATIN SMALL LETTER T WITH COMMA BELOW ++ { {0x032d, 0x0044, 0, 0, 0, 0}, 0x1e12 }, // U1E12 # LATIN CAPITAL LETTER D WITH CIRCUMFLEX BELOW ++ { {0x032d, 0x0045, 0, 0, 0, 0}, 0x1e18 }, // U1E18 # LATIN CAPITAL LETTER E WITH CIRCUMFLEX BELOW ++ { {0x032d, 0x004c, 0, 0, 0, 0}, 0x1e3c }, // U1E3C # LATIN CAPITAL LETTER L WITH CIRCUMFLEX BELOW ++ { {0x032d, 0x004e, 0, 0, 0, 0}, 0x1e4a }, // U1E4A # LATIN CAPITAL LETTER N WITH CIRCUMFLEX BELOW ++ { {0x032d, 0x0054, 0, 0, 0, 0}, 0x1e70 }, // U1E70 # LATIN CAPITAL LETTER T WITH CIRCUMFLEX BELOW ++ { {0x032d, 0x0055, 0, 0, 0, 0}, 0x1e76 }, // U1E76 # LATIN CAPITAL LETTER U WITH CIRCUMFLEX BELOW ++ { {0x032d, 0x0064, 0, 0, 0, 0}, 0x1e13 }, // U1E13 # LATIN SMALL LETTER D WITH CIRCUMFLEX BELOW ++ { {0x032d, 0x0065, 0, 0, 0, 0}, 0x1e19 }, // U1E19 # LATIN SMALL LETTER E WITH CIRCUMFLEX BELOW ++ { {0x032d, 0x006c, 0, 0, 0, 0}, 0x1e3d }, // U1E3D # LATIN SMALL LETTER L WITH CIRCUMFLEX BELOW ++ { {0x032d, 0x006e, 0, 0, 0, 0}, 0x1e4b }, // U1E4B # LATIN SMALL LETTER N WITH CIRCUMFLEX BELOW ++ { {0x032d, 0x0074, 0, 0, 0, 0}, 0x1e71 }, // U1E71 # LATIN SMALL LETTER T WITH CIRCUMFLEX BELOW ++ { {0x032d, 0x0075, 0, 0, 0, 0}, 0x1e77 }, // U1E77 # LATIN SMALL LETTER U WITH CIRCUMFLEX BELOW ++ { {0x032e, 0x0048, 0, 0, 0, 0}, 0x1e2a }, // U1E2A # LATIN CAPITAL LETTER H WITH BREVE BELOW ++ { {0x032e, 0x0068, 0, 0, 0, 0}, 0x1e2b }, // U1E2B # LATIN SMALL LETTER H WITH BREVE BELOW ++ { {0x0330, 0x0045, 0, 0, 0, 0}, 0x1e1a }, // U1E1A # LATIN CAPITAL LETTER E WITH TILDE BELOW ++ { {0x0330, 0x0049, 0, 0, 0, 0}, 0x1e2c }, // U1E2C # LATIN CAPITAL LETTER I WITH TILDE BELOW ++ { {0x0330, 0x0055, 0, 0, 0, 0}, 0x1e74 }, // U1E74 # LATIN CAPITAL LETTER U WITH TILDE BELOW ++ { {0x0330, 0x0065, 0, 0, 0, 0}, 0x1e1b }, // U1E1B # LATIN SMALL LETTER E WITH TILDE BELOW ++ { {0x0330, 0x0069, 0, 0, 0, 0}, 0x1e2d }, // U1E2D # LATIN SMALL LETTER I WITH TILDE BELOW ++ { {0x0330, 0x0075, 0, 0, 0, 0}, 0x1e75 }, // U1E75 # LATIN SMALL LETTER U WITH TILDE BELOW ++ { {0x0331, 0x0042, 0, 0, 0, 0}, 0x1e06 }, // U1E06 # LATIN CAPITAL LETTER B WITH LINE BELOW ++ { {0x0331, 0x0044, 0, 0, 0, 0}, 0x1e0e }, // U1E0E # LATIN CAPITAL LETTER D WITH LINE BELOW ++ { {0x0331, 0x004b, 0, 0, 0, 0}, 0x1e34 }, // U1E34 # LATIN CAPITAL LETTER K WITH LINE BELOW ++ { {0x0331, 0x004c, 0, 0, 0, 0}, 0x1e3a }, // U1E3A # LATIN CAPITAL LETTER L WITH LINE BELOW ++ { {0x0331, 0x004e, 0, 0, 0, 0}, 0x1e48 }, // U1E48 # LATIN CAPITAL LETTER N WITH LINE BELOW ++ { {0x0331, 0x0052, 0, 0, 0, 0}, 0x1e5e }, // U1E5E # LATIN CAPITAL LETTER R WITH LINE BELOW ++ { {0x0331, 0x0054, 0, 0, 0, 0}, 0x1e6e }, // U1E6E # LATIN CAPITAL LETTER T WITH LINE BELOW ++ { {0x0331, 0x005a, 0, 0, 0, 0}, 0x1e94 }, // U1E94 # LATIN CAPITAL LETTER Z WITH LINE BELOW ++ { {0x0331, 0x0062, 0, 0, 0, 0}, 0x1e07 }, // U1E07 # LATIN SMALL LETTER B WITH LINE BELOW ++ { {0x0331, 0x0064, 0, 0, 0, 0}, 0x1e0f }, // U1E0F # LATIN SMALL LETTER D WITH LINE BELOW ++ { {0x0331, 0x0068, 0, 0, 0, 0}, 0x1e96 }, // U1E96 # LATIN SMALL LETTER H WITH LINE BELOW ++ { {0x0331, 0x006b, 0, 0, 0, 0}, 0x1e35 }, // U1E35 # LATIN SMALL LETTER K WITH LINE BELOW ++ { {0x0331, 0x006c, 0, 0, 0, 0}, 0x1e3b }, // U1E3B # LATIN SMALL LETTER L WITH LINE BELOW ++ { {0x0331, 0x006e, 0, 0, 0, 0}, 0x1e49 }, // U1E49 # LATIN SMALL LETTER N WITH LINE BELOW ++ { {0x0331, 0x0072, 0, 0, 0, 0}, 0x1e5f }, // U1E5F # LATIN SMALL LETTER R WITH LINE BELOW ++ { {0x0331, 0x0074, 0, 0, 0, 0}, 0x1e6f }, // U1E6F # LATIN SMALL LETTER T WITH LINE BELOW ++ { {0x0331, 0x007a, 0, 0, 0, 0}, 0x1e95 }, // U1E95 # LATIN SMALL LETTER Z WITH LINE BELOW ++ { {0x0342, 0x0313, 0x0391, 0, 0, 0}, 0x1f0e }, // U1F0E # GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI ++ { {0x0342, 0x0313, 0x0397, 0, 0, 0}, 0x1f2e }, // U1F2E # GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI ++ { {0x0342, 0x0313, 0x0399, 0, 0, 0}, 0x1f3e }, // U1F3E # GREEK CAPITAL LETTER IOTA WITH PSILI AND PERISPOMENI ++ { {0x0342, 0x0313, 0x03a9, 0, 0, 0}, 0x1f6e }, // U1F6E # GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI ++ { {0x0342, 0x0313, 0x03b1, 0, 0, 0}, 0x1f06 }, // U1F06 # GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI ++ { {0x0342, 0x0313, 0x03b7, 0, 0, 0}, 0x1f26 }, // U1F26 # GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI ++ { {0x0342, 0x0313, 0x03b9, 0, 0, 0}, 0x1f36 }, // U1F36 # GREEK SMALL LETTER IOTA WITH PSILI AND PERISPOMENI ++ { {0x0342, 0x0313, 0x03c5, 0, 0, 0}, 0x1f56 }, // U1F56 # GREEK SMALL LETTER UPSILON WITH PSILI AND PERISPOMENI ++ { {0x0342, 0x0313, 0x03c9, 0, 0, 0}, 0x1f66 }, // U1F66 # GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI ++ { {0x0342, 0x0314, 0x0391, 0, 0, 0}, 0x1f0f }, // U1F0F # GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI ++ { {0x0342, 0x0314, 0x0397, 0, 0, 0}, 0x1f2f }, // U1F2F # GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI ++ { {0x0342, 0x0314, 0x0399, 0, 0, 0}, 0x1f3f }, // U1F3F # GREEK CAPITAL LETTER IOTA WITH DASIA AND PERISPOMENI ++ { {0x0342, 0x0314, 0x03a5, 0, 0, 0}, 0x1f5f }, // U1F5F # GREEK CAPITAL LETTER UPSILON WITH DASIA AND PERISPOMENI ++ { {0x0342, 0x0314, 0x03a9, 0, 0, 0}, 0x1f6f }, // U1F6F # GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI ++ { {0x0342, 0x0314, 0x03b1, 0, 0, 0}, 0x1f07 }, // U1F07 # GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI ++ { {0x0342, 0x0314, 0x03b7, 0, 0, 0}, 0x1f27 }, // U1F27 # GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI ++ { {0x0342, 0x0314, 0x03b9, 0, 0, 0}, 0x1f37 }, // U1F37 # GREEK SMALL LETTER IOTA WITH DASIA AND PERISPOMENI ++ { {0x0342, 0x0314, 0x03c5, 0, 0, 0}, 0x1f57 }, // U1F57 # GREEK SMALL LETTER UPSILON WITH DASIA AND PERISPOMENI ++ { {0x0342, 0x0314, 0x03c9, 0, 0, 0}, 0x1f67 }, // U1F67 # GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI ++ { {0x0342, 0x03b1, 0, 0, 0, 0}, 0x1fb6 }, // U1FB6 # GREEK SMALL LETTER ALPHA WITH PERISPOMENI ++ { {0x0342, 0x03b7, 0, 0, 0, 0}, 0x1fc6 }, // U1FC6 # GREEK SMALL LETTER ETA WITH PERISPOMENI ++ { {0x0342, 0x03b9, 0, 0, 0, 0}, 0x1fd6 }, // U1FD6 # GREEK SMALL LETTER IOTA WITH PERISPOMENI ++ { {0x0342, 0x03c5, 0, 0, 0, 0}, 0x1fe6 }, // U1FE6 # GREEK SMALL LETTER UPSILON WITH PERISPOMENI ++ { {0x0342, 0x03c9, 0, 0, 0, 0}, 0x1ff6 }, // U1FF6 # GREEK SMALL LETTER OMEGA WITH PERISPOMENI ++ { {0x0342, 0x03ca, 0, 0, 0, 0}, 0x1fd7 }, // U1FD7 # GREEK SMALL LETTER IOTA WITH DIALYTIKA AND PERISPOMENI ++ { {0x0342, 0x03cb, 0, 0, 0, 0}, 0x1fe7 }, // U1FE7 # GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND PERISPOMENI ++ { {0x0342, 0x1f00, 0, 0, 0, 0}, 0x1f06 }, // U1F06 # GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI ++ { {0x0342, 0x1f01, 0, 0, 0, 0}, 0x1f07 }, // U1F07 # GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI ++ { {0x0342, 0x1f08, 0, 0, 0, 0}, 0x1f0e }, // U1F0E # GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI ++ { {0x0342, 0x1f09, 0, 0, 0, 0}, 0x1f0f }, // U1F0F # GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI ++ { {0x0342, 0x1f20, 0, 0, 0, 0}, 0x1f26 }, // U1F26 # GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI ++ { {0x0342, 0x1f21, 0, 0, 0, 0}, 0x1f27 }, // U1F27 # GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI ++ { {0x0342, 0x1f28, 0, 0, 0, 0}, 0x1f2e }, // U1F2E # GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI ++ { {0x0342, 0x1f29, 0, 0, 0, 0}, 0x1f2f }, // U1F2F # GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI ++ { {0x0342, 0x1f30, 0, 0, 0, 0}, 0x1f36 }, // U1F36 # GREEK SMALL LETTER IOTA WITH PSILI AND PERISPOMENI ++ { {0x0342, 0x1f31, 0, 0, 0, 0}, 0x1f37 }, // U1F37 # GREEK SMALL LETTER IOTA WITH DASIA AND PERISPOMENI ++ { {0x0342, 0x1f38, 0, 0, 0, 0}, 0x1f3e }, // U1F3E # GREEK CAPITAL LETTER IOTA WITH PSILI AND PERISPOMENI ++ { {0x0342, 0x1f39, 0, 0, 0, 0}, 0x1f3f }, // U1F3F # GREEK CAPITAL LETTER IOTA WITH DASIA AND PERISPOMENI ++ { {0x0342, 0x1f50, 0, 0, 0, 0}, 0x1f56 }, // U1F56 # GREEK SMALL LETTER UPSILON WITH PSILI AND PERISPOMENI ++ { {0x0342, 0x1f51, 0, 0, 0, 0}, 0x1f57 }, // U1F57 # GREEK SMALL LETTER UPSILON WITH DASIA AND PERISPOMENI ++ { {0x0342, 0x1f59, 0, 0, 0, 0}, 0x1f5f }, // U1F5F # GREEK CAPITAL LETTER UPSILON WITH DASIA AND PERISPOMENI ++ { {0x0342, 0x1f60, 0, 0, 0, 0}, 0x1f66 }, // U1F66 # GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI ++ { {0x0342, 0x1f61, 0, 0, 0, 0}, 0x1f67 }, // U1F67 # GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI ++ { {0x0342, 0x1f68, 0, 0, 0, 0}, 0x1f6e }, // U1F6E # GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI ++ { {0x0342, 0x1f69, 0, 0, 0, 0}, 0x1f6f }, // U1F6F # GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI ++ { {0x0342, UNITIZE(Qt::Key_Multi_key), 0x0022, 0x03b9, 0, 0}, 0x1fd7 }, // U1FD7 # GREEK SMALL LETTER IOTA WITH DIALYTIKA AND PERISPOMENI ++ { {0x0342, UNITIZE(Qt::Key_Multi_key), 0x0022, 0x03c5, 0, 0}, 0x1fe7 }, // U1FE7 # GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND PERISPOMENI ++ { {0x0342, UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0391, 0, 0}, 0x1f0f }, // U1F0F # GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI ++ { {0x0342, UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0397, 0, 0}, 0x1f2f }, // U1F2F # GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI ++ { {0x0342, UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0399, 0, 0}, 0x1f3f }, // U1F3F # GREEK CAPITAL LETTER IOTA WITH DASIA AND PERISPOMENI ++ { {0x0342, UNITIZE(Qt::Key_Multi_key), 0x0028, 0x03a5, 0, 0}, 0x1f5f }, // U1F5F # GREEK CAPITAL LETTER UPSILON WITH DASIA AND PERISPOMENI ++ { {0x0342, UNITIZE(Qt::Key_Multi_key), 0x0028, 0x03a9, 0, 0}, 0x1f6f }, // U1F6F # GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI ++ { {0x0342, UNITIZE(Qt::Key_Multi_key), 0x0028, 0x03b1, 0, 0}, 0x1f07 }, // U1F07 # GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI ++ { {0x0342, UNITIZE(Qt::Key_Multi_key), 0x0028, 0x03b7, 0, 0}, 0x1f27 }, // U1F27 # GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI ++ { {0x0342, UNITIZE(Qt::Key_Multi_key), 0x0028, 0x03b9, 0, 0}, 0x1f37 }, // U1F37 # GREEK SMALL LETTER IOTA WITH DASIA AND PERISPOMENI ++ { {0x0342, UNITIZE(Qt::Key_Multi_key), 0x0028, 0x03c5, 0, 0}, 0x1f57 }, // U1F57 # GREEK SMALL LETTER UPSILON WITH DASIA AND PERISPOMENI ++ { {0x0342, UNITIZE(Qt::Key_Multi_key), 0x0028, 0x03c9, 0, 0}, 0x1f67 }, // U1F67 # GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI ++ { {0x0342, UNITIZE(Qt::Key_Multi_key), 0x0029, 0x0391, 0, 0}, 0x1f0e }, // U1F0E # GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI ++ { {0x0342, UNITIZE(Qt::Key_Multi_key), 0x0029, 0x0397, 0, 0}, 0x1f2e }, // U1F2E # GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI ++ { {0x0342, UNITIZE(Qt::Key_Multi_key), 0x0029, 0x0399, 0, 0}, 0x1f3e }, // U1F3E # GREEK CAPITAL LETTER IOTA WITH PSILI AND PERISPOMENI ++ { {0x0342, UNITIZE(Qt::Key_Multi_key), 0x0029, 0x03a9, 0, 0}, 0x1f6e }, // U1F6E # GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI ++ { {0x0342, UNITIZE(Qt::Key_Multi_key), 0x0029, 0x03b1, 0, 0}, 0x1f06 }, // U1F06 # GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI ++ { {0x0342, UNITIZE(Qt::Key_Multi_key), 0x0029, 0x03b7, 0, 0}, 0x1f26 }, // U1F26 # GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI ++ { {0x0342, UNITIZE(Qt::Key_Multi_key), 0x0029, 0x03b9, 0, 0}, 0x1f36 }, // U1F36 # GREEK SMALL LETTER IOTA WITH PSILI AND PERISPOMENI ++ { {0x0342, UNITIZE(Qt::Key_Multi_key), 0x0029, 0x03c5, 0, 0}, 0x1f56 }, // U1F56 # GREEK SMALL LETTER UPSILON WITH PSILI AND PERISPOMENI ++ { {0x0342, UNITIZE(Qt::Key_Multi_key), 0x0029, 0x03c9, 0, 0}, 0x1f66 }, // U1F66 # GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI ++ { {0x0342, UNITIZE(Qt::Key_Dead_Diaeresis), 0x03b9, 0, 0, 0}, 0x1fd7 }, // U1FD7 # GREEK SMALL LETTER IOTA WITH DIALYTIKA AND PERISPOMENI ++ { {0x0342, UNITIZE(Qt::Key_Dead_Diaeresis), 0x03c5, 0, 0, 0}, 0x1fe7 }, // U1FE7 # GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND PERISPOMENI ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0000, 0x0044, 0, 0, 0}, 0x0110 }, // U0110 # LATIN CAPITAL LETTER D WITH STROKE ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0000, 0x0047, 0, 0, 0}, 0x01e4 }, // U01E4 # LATIN CAPITAL LETTER G WITH STROKE ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0000, 0x0048, 0, 0, 0}, 0x0126 }, // U0126 # LATIN CAPITAL LETTER H WITH STROKE ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0000, 0x0049, 0, 0, 0}, 0x0197 }, // U0197 # LATIN CAPITAL LETTER I WITH STROKE ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0000, 0x004c, 0, 0, 0}, 0x0141 }, // U0141 # LATIN CAPITAL LETTER L WITH STROKE ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0000, 0x004f, 0, 0, 0}, 0x00d8 }, // U00D8 # LATIN CAPITAL LETTER O WITH STROKE ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0000, 0x0054, 0, 0, 0}, 0x0166 }, // U0166 # LATIN CAPITAL LETTER T WITH STROKE ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0000, 0x005a, 0, 0, 0}, 0x01b5 }, // U01B5 # LATIN CAPITAL LETTER Z WITH STROKE ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0000, 0x0062, 0, 0, 0}, 0x0180 }, // U0180 # LATIN SMALL LETTER B WITH STROKE ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0000, 0x0064, 0, 0, 0}, 0x0111 }, // U0111 # LATIN SMALL LETTER D WITH STROKE ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0000, 0x0067, 0, 0, 0}, 0x01e5 }, // U01E5 # LATIN SMALL LETTER G WITH STROKE ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0000, 0x0068, 0, 0, 0}, 0x0127 }, // U0127 # LATIN SMALL LETTER H WITH STROKE ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0000, 0x0069, 0, 0, 0}, 0x0268 }, // U0268 # LATIN SMALL LETTER I WITH STROKE ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0000, 0x006c, 0, 0, 0}, 0x0142 }, // U0142 # LATIN SMALL LETTER L WITH STROKE ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0000, 0x006f, 0, 0, 0}, 0x00f8 }, // U00F8 # LATIN SMALL LETTER O WITH STROKE ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0000, 0x0074, 0, 0, 0}, 0x0167 }, // U0167 # LATIN SMALL LETTER T WITH STROKE ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0000, 0x007a, 0, 0, 0}, 0x01b6 }, // U01B6 # LATIN SMALL LETTER Z WITH STROKE ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0000, 0x0294, 0, 0, 0}, 0x02a1 }, // U02A1 # LATIN LETTER GLOTTAL STOP WITH STROKE ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0000, 0x0338, 0, 0, 0}, 0x2260 }, // U2260 # NOT EQUAL TO ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0000, 0x0413, 0, 0, 0}, 0x0492 }, // U0492 # CYRILLIC CAPITAL LETTER GHE WITH STROKE ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0000, 0x041a, 0, 0, 0}, 0x049e }, // U049E # CYRILLIC CAPITAL LETTER KA WITH STROKE ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0000, 0x0433, 0, 0, 0}, 0x0493 }, // U0493 # CYRILLIC SMALL LETTER GHE WITH STROKE ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0000, 0x043a, 0, 0, 0}, 0x049f }, // U049F # CYRILLIC SMALL LETTER KA WITH STROKE ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0000, 0x04ae, 0, 0, 0}, 0x04b0 }, // U04B0 # CYRILLIC CAPITAL LETTER STRAIGHT U WITH STROKE ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0000, 0x04af, 0, 0, 0}, 0x04b1 }, // U04B1 # CYRILLIC SMALL LETTER STRAIGHT U WITH STROKE ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0000, 0x2190, 0, 0, 0}, 0x219a }, // U219A # LEFTWARDS ARROW WITH STROKE ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0000, 0x2192, 0, 0, 0}, 0x219b }, // U219B # RIGHTWARDS ARROW WITH STROKE ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0000, 0x2194, 0, 0, 0}, 0x21ae }, // U21AE # LEFT RIGHT ARROW WITH STROKE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0020, 0x0020, 0, 0, 0}, 0x00a0 }, // nobreakspace # NO-BREAK SPACE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0020, 0x0027, 0, 0, 0}, 0x0027 }, // apostrophe ++ { {UNITIZE(Qt::Key_Multi_key), 0x0020, 0x002c, 0, 0, 0}, 0x00b8 }, // cedilla ++ { {UNITIZE(Qt::Key_Multi_key), 0x0020, 0x002d, 0, 0, 0}, 0x007e }, // asciitilde ++ { {UNITIZE(Qt::Key_Multi_key), 0x0020, 0x002e, 0, 0, 0}, 0x2008 }, // U2008 # PUNCTUATION SPACE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0020, 0x003e, 0, 0, 0}, 0x005e }, // asciicircum ++ { {UNITIZE(Qt::Key_Multi_key), 0x0020, 0x005e, 0, 0, 0}, 0x005e }, // asciicircum ++ { {UNITIZE(Qt::Key_Multi_key), 0x0020, 0x0060, 0, 0, 0}, 0x0060 }, // grave ++ { {UNITIZE(Qt::Key_Multi_key), 0x0020, 0x007e, 0, 0, 0}, 0x007e }, // asciitilde ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0021, 0x0000, 0, 0, 0}, 0x1ef0 }, // U1EF0 # LATIN CAPITAL LETTER U WITH HORN AND DOT BELOW ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0021, 0x0000, 0, 0, 0}, 0x1ee3 }, // U1EE3 # LATIN SMALL LETTER O WITH HORN AND DOT BELOW ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0021, 0x0000, 0, 0, 0}, 0x1ee2 }, // U1EE2 # LATIN CAPITAL LETTER O WITH HORN AND DOT BELOW ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0021, 0x0000, 0, 0, 0}, 0x1ef1 }, // U1EF1 # LATIN SMALL LETTER U WITH HORN AND DOT BELOW ++ { {UNITIZE(Qt::Key_Multi_key), 0x0021, 0x0021, 0, 0, 0}, 0x00a1 }, // exclamdown ++ { {UNITIZE(Qt::Key_Multi_key), 0x0021, 0x002b, 0x004f, 0, 0}, 0x1ee2 }, // U1EE2 # LATIN CAPITAL LETTER O WITH HORN AND DOT BELOW ++ { {UNITIZE(Qt::Key_Multi_key), 0x0021, 0x002b, 0x0055, 0, 0}, 0x1ef0 }, // U1EF0 # LATIN CAPITAL LETTER U WITH HORN AND DOT BELOW ++ { {UNITIZE(Qt::Key_Multi_key), 0x0021, 0x002b, 0x006f, 0, 0}, 0x1ee3 }, // U1EE3 # LATIN SMALL LETTER O WITH HORN AND DOT BELOW ++ { {UNITIZE(Qt::Key_Multi_key), 0x0021, 0x002b, 0x0075, 0, 0}, 0x1ef1 }, // U1EF1 # LATIN SMALL LETTER U WITH HORN AND DOT BELOW ++ { {UNITIZE(Qt::Key_Multi_key), 0x0021, 0x0041, 0, 0, 0}, 0x1ea0 }, // U1EA0 # LATIN CAPITAL LETTER A WITH DOT BELOW ++ { {UNITIZE(Qt::Key_Multi_key), 0x0021, 0x0042, 0, 0, 0}, 0x1e04 }, // U1E04 # LATIN CAPITAL LETTER B WITH DOT BELOW ++ { {UNITIZE(Qt::Key_Multi_key), 0x0021, 0x0044, 0, 0, 0}, 0x1e0c }, // U1E0C # LATIN CAPITAL LETTER D WITH DOT BELOW ++ { {UNITIZE(Qt::Key_Multi_key), 0x0021, 0x0045, 0, 0, 0}, 0x1eb8 }, // U1EB8 # LATIN CAPITAL LETTER E WITH DOT BELOW ++ { {UNITIZE(Qt::Key_Multi_key), 0x0021, 0x0048, 0, 0, 0}, 0x1e24 }, // U1E24 # LATIN CAPITAL LETTER H WITH DOT BELOW ++ { {UNITIZE(Qt::Key_Multi_key), 0x0021, 0x0049, 0, 0, 0}, 0x1eca }, // U1ECA # LATIN CAPITAL LETTER I WITH DOT BELOW ++ { {UNITIZE(Qt::Key_Multi_key), 0x0021, 0x004b, 0, 0, 0}, 0x1e32 }, // U1E32 # LATIN CAPITAL LETTER K WITH DOT BELOW ++ { {UNITIZE(Qt::Key_Multi_key), 0x0021, 0x004c, 0, 0, 0}, 0x1e36 }, // U1E36 # LATIN CAPITAL LETTER L WITH DOT BELOW ++ { {UNITIZE(Qt::Key_Multi_key), 0x0021, 0x004d, 0, 0, 0}, 0x1e42 }, // U1E42 # LATIN CAPITAL LETTER M WITH DOT BELOW ++ { {UNITIZE(Qt::Key_Multi_key), 0x0021, 0x004e, 0, 0, 0}, 0x1e46 }, // U1E46 # LATIN CAPITAL LETTER N WITH DOT BELOW ++ { {UNITIZE(Qt::Key_Multi_key), 0x0021, 0x004f, 0, 0, 0}, 0x1ecc }, // U1ECC # LATIN CAPITAL LETTER O WITH DOT BELOW ++ { {UNITIZE(Qt::Key_Multi_key), 0x0021, 0x0052, 0, 0, 0}, 0x1e5a }, // U1E5A # LATIN CAPITAL LETTER R WITH DOT BELOW ++ { {UNITIZE(Qt::Key_Multi_key), 0x0021, 0x0053, 0, 0, 0}, 0x1e62 }, // U1E62 # LATIN CAPITAL LETTER S WITH DOT BELOW ++ { {UNITIZE(Qt::Key_Multi_key), 0x0021, 0x0054, 0, 0, 0}, 0x1e6c }, // U1E6C # LATIN CAPITAL LETTER T WITH DOT BELOW ++ { {UNITIZE(Qt::Key_Multi_key), 0x0021, 0x0055, 0, 0, 0}, 0x1ee4 }, // U1EE4 # LATIN CAPITAL LETTER U WITH DOT BELOW ++ { {UNITIZE(Qt::Key_Multi_key), 0x0021, 0x0056, 0, 0, 0}, 0x1e7e }, // U1E7E # LATIN CAPITAL LETTER V WITH DOT BELOW ++ { {UNITIZE(Qt::Key_Multi_key), 0x0021, 0x0057, 0, 0, 0}, 0x1e88 }, // U1E88 # LATIN CAPITAL LETTER W WITH DOT BELOW ++ { {UNITIZE(Qt::Key_Multi_key), 0x0021, 0x0059, 0, 0, 0}, 0x1ef4 }, // U1EF4 # LATIN CAPITAL LETTER Y WITH DOT BELOW ++ { {UNITIZE(Qt::Key_Multi_key), 0x0021, 0x005a, 0, 0, 0}, 0x1e92 }, // U1E92 # LATIN CAPITAL LETTER Z WITH DOT BELOW ++ { {UNITIZE(Qt::Key_Multi_key), 0x0021, 0x005e, 0, 0, 0}, 0x00a6 }, // brokenbar ++ { {UNITIZE(Qt::Key_Multi_key), 0x0021, 0x0061, 0, 0, 0}, 0x1ea1 }, // U1EA1 # LATIN SMALL LETTER A WITH DOT BELOW ++ { {UNITIZE(Qt::Key_Multi_key), 0x0021, 0x0062, 0, 0, 0}, 0x1e05 }, // U1E05 # LATIN SMALL LETTER B WITH DOT BELOW ++ { {UNITIZE(Qt::Key_Multi_key), 0x0021, 0x0064, 0, 0, 0}, 0x1e0d }, // U1E0D # LATIN SMALL LETTER D WITH DOT BELOW ++ { {UNITIZE(Qt::Key_Multi_key), 0x0021, 0x0065, 0, 0, 0}, 0x1eb9 }, // U1EB9 # LATIN SMALL LETTER E WITH DOT BELOW ++ { {UNITIZE(Qt::Key_Multi_key), 0x0021, 0x0068, 0, 0, 0}, 0x1e25 }, // U1E25 # LATIN SMALL LETTER H WITH DOT BELOW ++ { {UNITIZE(Qt::Key_Multi_key), 0x0021, 0x0069, 0, 0, 0}, 0x1ecb }, // U1ECB # LATIN SMALL LETTER I WITH DOT BELOW ++ { {UNITIZE(Qt::Key_Multi_key), 0x0021, 0x006b, 0, 0, 0}, 0x1e33 }, // U1E33 # LATIN SMALL LETTER K WITH DOT BELOW ++ { {UNITIZE(Qt::Key_Multi_key), 0x0021, 0x006c, 0, 0, 0}, 0x1e37 }, // U1E37 # LATIN SMALL LETTER L WITH DOT BELOW ++ { {UNITIZE(Qt::Key_Multi_key), 0x0021, 0x006d, 0, 0, 0}, 0x1e43 }, // U1E43 # LATIN SMALL LETTER M WITH DOT BELOW ++ { {UNITIZE(Qt::Key_Multi_key), 0x0021, 0x006e, 0, 0, 0}, 0x1e47 }, // U1E47 # LATIN SMALL LETTER N WITH DOT BELOW ++ { {UNITIZE(Qt::Key_Multi_key), 0x0021, 0x006f, 0, 0, 0}, 0x1ecd }, // U1ECD # LATIN SMALL LETTER O WITH DOT BELOW ++ { {UNITIZE(Qt::Key_Multi_key), 0x0021, 0x0072, 0, 0, 0}, 0x1e5b }, // U1E5B # LATIN SMALL LETTER R WITH DOT BELOW ++ { {UNITIZE(Qt::Key_Multi_key), 0x0021, 0x0073, 0, 0, 0}, 0x1e63 }, // U1E63 # LATIN SMALL LETTER S WITH DOT BELOW ++ { {UNITIZE(Qt::Key_Multi_key), 0x0021, 0x0074, 0, 0, 0}, 0x1e6d }, // U1E6D # LATIN SMALL LETTER T WITH DOT BELOW ++ { {UNITIZE(Qt::Key_Multi_key), 0x0021, 0x0075, 0, 0, 0}, 0x1ee5 }, // U1EE5 # LATIN SMALL LETTER U WITH DOT BELOW ++ { {UNITIZE(Qt::Key_Multi_key), 0x0021, 0x0076, 0, 0, 0}, 0x1e7f }, // U1E7F # LATIN SMALL LETTER V WITH DOT BELOW ++ { {UNITIZE(Qt::Key_Multi_key), 0x0021, 0x0077, 0, 0, 0}, 0x1e89 }, // U1E89 # LATIN SMALL LETTER W WITH DOT BELOW ++ { {UNITIZE(Qt::Key_Multi_key), 0x0021, 0x0079, 0, 0, 0}, 0x1ef5 }, // U1EF5 # LATIN SMALL LETTER Y WITH DOT BELOW ++ { {UNITIZE(Qt::Key_Multi_key), 0x0021, 0x007a, 0, 0, 0}, 0x1e93 }, // U1E93 # LATIN SMALL LETTER Z WITH DOT BELOW ++ { {UNITIZE(Qt::Key_Multi_key), 0x0021, UNITIZE(Qt::Key_Dead_Horn), 0x004f, 0, 0}, 0x1ee2 }, // U1EE2 # LATIN CAPITAL LETTER O WITH HORN AND DOT BELOW ++ { {UNITIZE(Qt::Key_Multi_key), 0x0021, UNITIZE(Qt::Key_Dead_Horn), 0x0055, 0, 0}, 0x1ef0 }, // U1EF0 # LATIN CAPITAL LETTER U WITH HORN AND DOT BELOW ++ { {UNITIZE(Qt::Key_Multi_key), 0x0021, UNITIZE(Qt::Key_Dead_Horn), 0x006f, 0, 0}, 0x1ee3 }, // U1EE3 # LATIN SMALL LETTER O WITH HORN AND DOT BELOW ++ { {UNITIZE(Qt::Key_Multi_key), 0x0021, UNITIZE(Qt::Key_Dead_Horn), 0x0075, 0, 0}, 0x1ef1 }, // U1EF1 # LATIN SMALL LETTER U WITH HORN AND DOT BELOW ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0022, 0x0000, 0, 0, 0}, 0x0344 }, // U0344 # COMBINING GREEK DIALYTIKA TONOS ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0022, 0x0000, 0x004f, 0, 0}, 0x1e4e }, // U1E4E # LATIN CAPITAL LETTER O WITH TILDE AND DIAERESIS ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0022, 0x0000, 0x006f, 0, 0}, 0x1e4f }, // U1E4F # LATIN SMALL LETTER O WITH TILDE AND DIAERESIS ++ { {UNITIZE(Qt::Key_Multi_key), 0x0022, 0x0027, 0, 0, 0}, 0x0344 }, // U0344 # COMBINING GREEK DIALYTIKA TONOS ++ { {UNITIZE(Qt::Key_Multi_key), 0x0022, 0x002c, 0, 0, 0}, 0x201e }, // U201e # DOUBLE LOW-9 QUOTATION MARK ++ { {UNITIZE(Qt::Key_Multi_key), 0x0022, 0x002f, 0, 0, 0}, 0x301e }, // U301e # DOUBLE PRIME QUOTATION MARK ++ { {UNITIZE(Qt::Key_Multi_key), 0x0022, 0x003c, 0, 0, 0}, 0x201c }, // U201c # LEFT DOUBLE QUOTATION MARK ++ { {UNITIZE(Qt::Key_Multi_key), 0x0022, 0x003e, 0, 0, 0}, 0x201d }, // U201d # RIGHT DOUBLE QUOTATION MARK ++ { {UNITIZE(Qt::Key_Multi_key), 0x0022, 0x0041, 0, 0, 0}, 0x00c4 }, // U00C4 # LATIN CAPITAL LETTER A WITH DIAERESIS ++ { {UNITIZE(Qt::Key_Multi_key), 0x0022, 0x0045, 0, 0, 0}, 0x00cb }, // U00CB # LATIN CAPITAL LETTER E WITH DIAERESIS ++ { {UNITIZE(Qt::Key_Multi_key), 0x0022, 0x0048, 0, 0, 0}, 0x1e26 }, // U1E26 # LATIN CAPITAL LETTER H WITH DIAERESIS ++ { {UNITIZE(Qt::Key_Multi_key), 0x0022, 0x0049, 0, 0, 0}, 0x00cf }, // U00CF # LATIN CAPITAL LETTER I WITH DIAERESIS ++ { {UNITIZE(Qt::Key_Multi_key), 0x0022, 0x004f, 0, 0, 0}, 0x00d6 }, // U00D6 # LATIN CAPITAL LETTER O WITH DIAERESIS ++ { {UNITIZE(Qt::Key_Multi_key), 0x0022, 0x0055, 0, 0, 0}, 0x00dc }, // U00DC # LATIN CAPITAL LETTER U WITH DIAERESIS ++ { {UNITIZE(Qt::Key_Multi_key), 0x0022, 0x0057, 0, 0, 0}, 0x1e84 }, // U1E84 # LATIN CAPITAL LETTER W WITH DIAERESIS ++ { {UNITIZE(Qt::Key_Multi_key), 0x0022, 0x0058, 0, 0, 0}, 0x1e8c }, // U1E8C # LATIN CAPITAL LETTER X WITH DIAERESIS ++ { {UNITIZE(Qt::Key_Multi_key), 0x0022, 0x0059, 0, 0, 0}, 0x0178 }, // U0178 # LATIN CAPITAL LETTER Y WITH DIAERESIS ++ { {UNITIZE(Qt::Key_Multi_key), 0x0022, 0x005c, 0, 0, 0}, 0x301d }, // U301d # REVERSED DOUBLE PRIME QUOTATION MARK ++ { {UNITIZE(Qt::Key_Multi_key), 0x0022, 0x005f, 0x0055, 0, 0}, 0x1e7a }, // U1E7A # LATIN CAPITAL LETTER U WITH MACRON AND DIAERESIS ++ { {UNITIZE(Qt::Key_Multi_key), 0x0022, 0x005f, 0x0075, 0, 0}, 0x1e7b }, // U1E7B # LATIN SMALL LETTER U WITH MACRON AND DIAERESIS ++ { {UNITIZE(Qt::Key_Multi_key), 0x0022, 0x0061, 0, 0, 0}, 0x00e4 }, // U00E4 # LATIN SMALL LETTER A WITH DIAERESIS ++ { {UNITIZE(Qt::Key_Multi_key), 0x0022, 0x0065, 0, 0, 0}, 0x00eb }, // U00EB # LATIN SMALL LETTER E WITH DIAERESIS ++ { {UNITIZE(Qt::Key_Multi_key), 0x0022, 0x0068, 0, 0, 0}, 0x1e27 }, // U1E27 # LATIN SMALL LETTER H WITH DIAERESIS ++ { {UNITIZE(Qt::Key_Multi_key), 0x0022, 0x0069, 0, 0, 0}, 0x00ef }, // U00EF # LATIN SMALL LETTER I WITH DIAERESIS ++ { {UNITIZE(Qt::Key_Multi_key), 0x0022, 0x006f, 0, 0, 0}, 0x00f6 }, // U00F6 # LATIN SMALL LETTER O WITH DIAERESIS ++ { {UNITIZE(Qt::Key_Multi_key), 0x0022, 0x0074, 0, 0, 0}, 0x1e97 }, // U1E97 # LATIN SMALL LETTER T WITH DIAERESIS ++ { {UNITIZE(Qt::Key_Multi_key), 0x0022, 0x0075, 0, 0, 0}, 0x00fc }, // U00FC # LATIN SMALL LETTER U WITH DIAERESIS ++ { {UNITIZE(Qt::Key_Multi_key), 0x0022, 0x0077, 0, 0, 0}, 0x1e85 }, // U1E85 # LATIN SMALL LETTER W WITH DIAERESIS ++ { {UNITIZE(Qt::Key_Multi_key), 0x0022, 0x0078, 0, 0, 0}, 0x1e8d }, // U1E8D # LATIN SMALL LETTER X WITH DIAERESIS ++ { {UNITIZE(Qt::Key_Multi_key), 0x0022, 0x0079, 0, 0, 0}, 0x00ff }, // U00FF # LATIN SMALL LETTER Y WITH DIAERESIS ++ { {UNITIZE(Qt::Key_Multi_key), 0x0022, 0x007e, 0x004f, 0, 0}, 0x1e4e }, // U1E4E # LATIN CAPITAL LETTER O WITH TILDE AND DIAERESIS ++ { {UNITIZE(Qt::Key_Multi_key), 0x0022, 0x007e, 0x006f, 0, 0}, 0x1e4f }, // U1E4F # LATIN SMALL LETTER O WITH TILDE AND DIAERESIS ++ { {UNITIZE(Qt::Key_Multi_key), 0x0022, 0x00af, 0x0055, 0, 0}, 0x1e7a }, // U1E7A # LATIN CAPITAL LETTER U WITH MACRON AND DIAERESIS ++ { {UNITIZE(Qt::Key_Multi_key), 0x0022, 0x00af, 0x0075, 0, 0}, 0x1e7b }, // U1E7B # LATIN SMALL LETTER U WITH MACRON AND DIAERESIS ++ { {UNITIZE(Qt::Key_Multi_key), 0x0022, 0x00b4, 0, 0, 0}, 0x0344 }, // U0344 # COMBINING GREEK DIALYTIKA TONOS ++ { {UNITIZE(Qt::Key_Multi_key), 0x0022, 0x00d5, 0, 0, 0}, 0x1e4e }, // U1E4E # LATIN CAPITAL LETTER O WITH TILDE AND DIAERESIS ++ { {UNITIZE(Qt::Key_Multi_key), 0x0022, 0x00f5, 0, 0, 0}, 0x1e4f }, // U1E4F # LATIN SMALL LETTER O WITH TILDE AND DIAERESIS ++ { {UNITIZE(Qt::Key_Multi_key), 0x0022, 0x016a, 0, 0, 0}, 0x1e7a }, // U1E7A # LATIN CAPITAL LETTER U WITH MACRON AND DIAERESIS ++ { {UNITIZE(Qt::Key_Multi_key), 0x0022, 0x016b, 0, 0, 0}, 0x1e7b }, // U1E7B # LATIN SMALL LETTER U WITH MACRON AND DIAERESIS ++ { {UNITIZE(Qt::Key_Multi_key), 0x0022, 0x0399, 0, 0, 0}, 0x03aa }, // U03AA # GREEK CAPITAL LETTER IOTA WITH DIALYTIKA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0022, 0x03a5, 0, 0, 0}, 0x03ab }, // U03AB # GREEK CAPITAL LETTER UPSILON WITH DIALYTIKA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0022, 0x03b9, 0, 0, 0}, 0x03ca }, // U03CA # GREEK SMALL LETTER IOTA WITH DIALYTIKA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0022, 0x03c5, 0, 0, 0}, 0x03cb }, // U03CB # GREEK SMALL LETTER UPSILON WITH DIALYTIKA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0022, 0x03d2, 0, 0, 0}, 0x03d4 }, // U03D4 # GREEK UPSILON WITH DIAERESIS AND HOOK SYMBOL ++ { {UNITIZE(Qt::Key_Multi_key), 0x0022, 0x0406, 0, 0, 0}, 0x0407 }, // U0407 # CYRILLIC CAPITAL LETTER YI ++ { {UNITIZE(Qt::Key_Multi_key), 0x0022, 0x0410, 0, 0, 0}, 0x04d2 }, // U04D2 # CYRILLIC CAPITAL LETTER A WITH DIAERESIS ++ { {UNITIZE(Qt::Key_Multi_key), 0x0022, 0x0415, 0, 0, 0}, 0x0401 }, // U0401 # CYRILLIC CAPITAL LETTER IO ++ { {UNITIZE(Qt::Key_Multi_key), 0x0022, 0x0416, 0, 0, 0}, 0x04dc }, // U04DC # CYRILLIC CAPITAL LETTER ZHE WITH DIAERESIS ++ { {UNITIZE(Qt::Key_Multi_key), 0x0022, 0x0417, 0, 0, 0}, 0x04de }, // U04DE # CYRILLIC CAPITAL LETTER ZE WITH DIAERESIS ++ { {UNITIZE(Qt::Key_Multi_key), 0x0022, 0x0418, 0, 0, 0}, 0x04e4 }, // U04E4 # CYRILLIC CAPITAL LETTER I WITH DIAERESIS ++ { {UNITIZE(Qt::Key_Multi_key), 0x0022, 0x041e, 0, 0, 0}, 0x04e6 }, // U04E6 # CYRILLIC CAPITAL LETTER O WITH DIAERESIS ++ { {UNITIZE(Qt::Key_Multi_key), 0x0022, 0x0423, 0, 0, 0}, 0x04f0 }, // U04F0 # CYRILLIC CAPITAL LETTER U WITH DIAERESIS ++ { {UNITIZE(Qt::Key_Multi_key), 0x0022, 0x0427, 0, 0, 0}, 0x04f4 }, // U04F4 # CYRILLIC CAPITAL LETTER CHE WITH DIAERESIS ++ { {UNITIZE(Qt::Key_Multi_key), 0x0022, 0x042b, 0, 0, 0}, 0x04f8 }, // U04F8 # CYRILLIC CAPITAL LETTER YERU WITH DIAERESIS ++ { {UNITIZE(Qt::Key_Multi_key), 0x0022, 0x042d, 0, 0, 0}, 0x04ec }, // U04EC # CYRILLIC CAPITAL LETTER E WITH DIAERESIS ++ { {UNITIZE(Qt::Key_Multi_key), 0x0022, 0x0430, 0, 0, 0}, 0x04d3 }, // U04D3 # CYRILLIC SMALL LETTER A WITH DIAERESIS ++ { {UNITIZE(Qt::Key_Multi_key), 0x0022, 0x0435, 0, 0, 0}, 0x0451 }, // U0451 # CYRILLIC SMALL LETTER IO ++ { {UNITIZE(Qt::Key_Multi_key), 0x0022, 0x0436, 0, 0, 0}, 0x04dd }, // U04DD # CYRILLIC SMALL LETTER ZHE WITH DIAERESIS ++ { {UNITIZE(Qt::Key_Multi_key), 0x0022, 0x0437, 0, 0, 0}, 0x04df }, // U04DF # CYRILLIC SMALL LETTER ZE WITH DIAERESIS ++ { {UNITIZE(Qt::Key_Multi_key), 0x0022, 0x0438, 0, 0, 0}, 0x04e5 }, // U04E5 # CYRILLIC SMALL LETTER I WITH DIAERESIS ++ { {UNITIZE(Qt::Key_Multi_key), 0x0022, 0x043e, 0, 0, 0}, 0x04e7 }, // U04E7 # CYRILLIC SMALL LETTER O WITH DIAERESIS ++ { {UNITIZE(Qt::Key_Multi_key), 0x0022, 0x0443, 0, 0, 0}, 0x04f1 }, // U04F1 # CYRILLIC SMALL LETTER U WITH DIAERESIS ++ { {UNITIZE(Qt::Key_Multi_key), 0x0022, 0x0447, 0, 0, 0}, 0x04f5 }, // U04F5 # CYRILLIC SMALL LETTER CHE WITH DIAERESIS ++ { {UNITIZE(Qt::Key_Multi_key), 0x0022, 0x044b, 0, 0, 0}, 0x04f9 }, // U04F9 # CYRILLIC SMALL LETTER YERU WITH DIAERESIS ++ { {UNITIZE(Qt::Key_Multi_key), 0x0022, 0x044d, 0, 0, 0}, 0x04ed }, // U04ED # CYRILLIC SMALL LETTER E WITH DIAERESIS ++ { {UNITIZE(Qt::Key_Multi_key), 0x0022, 0x0456, 0, 0, 0}, 0x0457 }, // U0457 # CYRILLIC SMALL LETTER YI ++ { {UNITIZE(Qt::Key_Multi_key), 0x0022, 0x04d8, 0, 0, 0}, 0x04da }, // U04DA # CYRILLIC CAPITAL LETTER SCHWA WITH DIAERESIS ++ { {UNITIZE(Qt::Key_Multi_key), 0x0022, 0x04d9, 0, 0, 0}, 0x04db }, // U04DB # CYRILLIC SMALL LETTER SCHWA WITH DIAERESIS ++ { {UNITIZE(Qt::Key_Multi_key), 0x0022, 0x04e8, 0, 0, 0}, 0x04ea }, // U04EA # CYRILLIC CAPITAL LETTER BARRED O WITH DIAERESIS ++ { {UNITIZE(Qt::Key_Multi_key), 0x0022, 0x04e9, 0, 0, 0}, 0x04eb }, // U04EB # CYRILLIC SMALL LETTER BARRED O WITH DIAERESIS ++ { {UNITIZE(Qt::Key_Multi_key), 0x0022, UNITIZE(Qt::Key_Dead_Acute), 0, 0, 0}, 0x0344 }, // U0344 # COMBINING GREEK DIALYTIKA TONOS ++ { {UNITIZE(Qt::Key_Multi_key), 0x0022, UNITIZE(Qt::Key_Dead_Tilde), 0x004f, 0, 0}, 0x1e4e }, // U1E4E # LATIN CAPITAL LETTER O WITH TILDE AND DIAERESIS ++ { {UNITIZE(Qt::Key_Multi_key), 0x0022, UNITIZE(Qt::Key_Dead_Tilde), 0x006f, 0, 0}, 0x1e4f }, // U1E4F # LATIN SMALL LETTER O WITH TILDE AND DIAERESIS ++ { {UNITIZE(Qt::Key_Multi_key), 0x0022, UNITIZE(Qt::Key_Dead_Macron), 0x0055, 0, 0}, 0x1e7a }, // U1E7A # LATIN CAPITAL LETTER U WITH MACRON AND DIAERESIS ++ { {UNITIZE(Qt::Key_Multi_key), 0x0022, UNITIZE(Qt::Key_Dead_Macron), 0x0075, 0, 0}, 0x1e7b }, // U1E7B # LATIN SMALL LETTER U WITH MACRON AND DIAERESIS ++ { {UNITIZE(Qt::Key_Multi_key), 0x0023, 0x0023, 0, 0, 0}, 0x266f }, // U266f # MUSIC SHARP SIGN ++ { {UNITIZE(Qt::Key_Multi_key), 0x0023, 0x0062, 0, 0, 0}, 0x266d }, // U266d # MUSIC FLAT SIGN ++ { {UNITIZE(Qt::Key_Multi_key), 0x0023, 0x0066, 0, 0, 0}, 0x266e }, // U266e # MUSIC NATURAL SIGN ++ { {UNITIZE(Qt::Key_Multi_key), 0x0025, 0x006f, 0, 0, 0}, 0x2030 }, // U2030 # PER MILLE SIGN ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0000, 0, 0, 0}, 0x1eda }, // U1EDA # LATIN CAPITAL LETTER O WITH HORN AND ACUTE ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0000, 0, 0, 0}, 0x1ee9 }, // U1EE9 # LATIN SMALL LETTER U WITH HORN AND ACUTE ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0000, 0, 0, 0}, 0x1ee8 }, // U1EE8 # LATIN CAPITAL LETTER U WITH HORN AND ACUTE ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0000, 0, 0, 0}, 0x1edb }, // U1EDB # LATIN SMALL LETTER O WITH HORN AND ACUTE ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0000, 0x004f, 0, 0}, 0x1e4c }, // U1E4C # LATIN CAPITAL LETTER O WITH TILDE AND ACUTE ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0000, 0x004f, 0, 0}, 0x01fe }, // U01FE # LATIN CAPITAL LETTER O WITH STROKE AND ACUTE ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0000, 0x0055, 0, 0}, 0x1e78 }, // U1E78 # LATIN CAPITAL LETTER U WITH TILDE AND ACUTE ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0000, 0x006f, 0, 0}, 0x1e4d }, // U1E4D # LATIN SMALL LETTER O WITH TILDE AND ACUTE ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0000, 0x006f, 0, 0}, 0x01ff }, // U01FF # LATIN SMALL LETTER O WITH STROKE AND ACUTE ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0000, 0x0075, 0, 0}, 0x1e79 }, // U1E79 # LATIN SMALL LETTER U WITH TILDE AND ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0020, 0, 0, 0}, 0x0027 }, // apostrophe ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0022, 0x0049, 0, 0}, 0x1e2e }, // U1E2E # LATIN CAPITAL LETTER I WITH DIAERESIS AND ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0022, 0x0055, 0, 0}, 0x01d7 }, // U01D7 # LATIN CAPITAL LETTER U WITH DIAERESIS AND ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0022, 0x0069, 0, 0}, 0x1e2f }, // U1E2F # LATIN SMALL LETTER I WITH DIAERESIS AND ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0022, 0x0075, 0, 0}, 0x01d8 }, // U01D8 # LATIN SMALL LETTER U WITH DIAERESIS AND ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0022, 0x03b9, 0, 0}, 0x0390 }, // U0390 # GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0022, 0x03c5, 0, 0}, 0x03b0 }, // U03B0 # GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0028, 0x0391, 0, 0}, 0x1f0d }, // U1F0D # GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0028, 0x0395, 0, 0}, 0x1f1d }, // U1F1D # GREEK CAPITAL LETTER EPSILON WITH DASIA AND OXIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0028, 0x0397, 0, 0}, 0x1f2d }, // U1F2D # GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0028, 0x0399, 0, 0}, 0x1f3d }, // U1F3D # GREEK CAPITAL LETTER IOTA WITH DASIA AND OXIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0028, 0x039f, 0, 0}, 0x1f4d }, // U1F4D # GREEK CAPITAL LETTER OMICRON WITH DASIA AND OXIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0028, 0x03a5, 0, 0}, 0x1f5d }, // U1F5D # GREEK CAPITAL LETTER UPSILON WITH DASIA AND OXIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0028, 0x03a9, 0, 0}, 0x1f6d }, // U1F6D # GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0028, 0x03b1, 0, 0}, 0x1f05 }, // U1F05 # GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0028, 0x03b5, 0, 0}, 0x1f15 }, // U1F15 # GREEK SMALL LETTER EPSILON WITH DASIA AND OXIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0028, 0x03b7, 0, 0}, 0x1f25 }, // U1F25 # GREEK SMALL LETTER ETA WITH DASIA AND OXIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0028, 0x03b9, 0, 0}, 0x1f35 }, // U1F35 # GREEK SMALL LETTER IOTA WITH DASIA AND OXIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0028, 0x03bf, 0, 0}, 0x1f45 }, // U1F45 # GREEK SMALL LETTER OMICRON WITH DASIA AND OXIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0028, 0x03c5, 0, 0}, 0x1f55 }, // U1F55 # GREEK SMALL LETTER UPSILON WITH DASIA AND OXIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0028, 0x03c9, 0, 0}, 0x1f65 }, // U1F65 # GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0029, 0x0391, 0, 0}, 0x1f0c }, // U1F0C # GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0029, 0x0395, 0, 0}, 0x1f1c }, // U1F1C # GREEK CAPITAL LETTER EPSILON WITH PSILI AND OXIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0029, 0x0397, 0, 0}, 0x1f2c }, // U1F2C # GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0029, 0x0399, 0, 0}, 0x1f3c }, // U1F3C # GREEK CAPITAL LETTER IOTA WITH PSILI AND OXIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0029, 0x039f, 0, 0}, 0x1f4c }, // U1F4C # GREEK CAPITAL LETTER OMICRON WITH PSILI AND OXIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0029, 0x03a9, 0, 0}, 0x1f6c }, // U1F6C # GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0029, 0x03b1, 0, 0}, 0x1f04 }, // U1F04 # GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0029, 0x03b5, 0, 0}, 0x1f14 }, // U1F14 # GREEK SMALL LETTER EPSILON WITH PSILI AND OXIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0029, 0x03b7, 0, 0}, 0x1f24 }, // U1F24 # GREEK SMALL LETTER ETA WITH PSILI AND OXIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0029, 0x03b9, 0, 0}, 0x1f34 }, // U1F34 # GREEK SMALL LETTER IOTA WITH PSILI AND OXIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0029, 0x03bf, 0, 0}, 0x1f44 }, // U1F44 # GREEK SMALL LETTER OMICRON WITH PSILI AND OXIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0029, 0x03c5, 0, 0}, 0x1f54 }, // U1F54 # GREEK SMALL LETTER UPSILON WITH PSILI AND OXIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0029, 0x03c9, 0, 0}, 0x1f64 }, // U1F64 # GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x002b, 0x004f, 0, 0}, 0x1eda }, // U1EDA # LATIN CAPITAL LETTER O WITH HORN AND ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x002b, 0x0055, 0, 0}, 0x1ee8 }, // U1EE8 # LATIN CAPITAL LETTER U WITH HORN AND ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x002b, 0x006f, 0, 0}, 0x1edb }, // U1EDB # LATIN SMALL LETTER O WITH HORN AND ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x002b, 0x0075, 0, 0}, 0x1ee9 }, // U1EE9 # LATIN SMALL LETTER U WITH HORN AND ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x002c, 0, 0, 0}, 0x201a }, // U201a # SINGLE LOW-9 QUOTATION MARK ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x002c, 0x0043, 0, 0}, 0x1e08 }, // U1E08 # LATIN CAPITAL LETTER C WITH CEDILLA AND ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x002c, 0x0063, 0, 0}, 0x1e09 }, // U1E09 # LATIN SMALL LETTER C WITH CEDILLA AND ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x002f, 0x004f, 0, 0}, 0x01fe }, // U01FE # LATIN CAPITAL LETTER O WITH STROKE AND ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x002f, 0x006f, 0, 0}, 0x01ff }, // U01FF # LATIN SMALL LETTER O WITH STROKE AND ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x003c, 0, 0, 0}, 0x2018 }, // U2018 # LEFT SINGLE QUOTATION MARK ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x003e, 0, 0, 0}, 0x2019 }, // U2019 # RIGHT SINGLE QUOTATION MARK ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0041, 0, 0, 0}, 0x00c1 }, // U00C1 # LATIN CAPITAL LETTER A WITH ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0043, 0, 0, 0}, 0x0106 }, // U0106 # LATIN CAPITAL LETTER C WITH ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0045, 0, 0, 0}, 0x00c9 }, // U00C9 # LATIN CAPITAL LETTER E WITH ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0047, 0, 0, 0}, 0x01f4 }, // U01F4 # LATIN CAPITAL LETTER G WITH ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0049, 0, 0, 0}, 0x00cd }, // U00CD # LATIN CAPITAL LETTER I WITH ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x004b, 0, 0, 0}, 0x1e30 }, // U1E30 # LATIN CAPITAL LETTER K WITH ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x004c, 0, 0, 0}, 0x0139 }, // U0139 # LATIN CAPITAL LETTER L WITH ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x004d, 0, 0, 0}, 0x1e3e }, // U1E3E # LATIN CAPITAL LETTER M WITH ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x004e, 0, 0, 0}, 0x0143 }, // U0143 # LATIN CAPITAL LETTER N WITH ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x004f, 0, 0, 0}, 0x00d3 }, // U00D3 # LATIN CAPITAL LETTER O WITH ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0050, 0, 0, 0}, 0x1e54 }, // U1E54 # LATIN CAPITAL LETTER P WITH ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0052, 0, 0, 0}, 0x0154 }, // U0154 # LATIN CAPITAL LETTER R WITH ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0053, 0, 0, 0}, 0x015a }, // U015A # LATIN CAPITAL LETTER S WITH ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0055, 0, 0, 0}, 0x00da }, // U00DA # LATIN CAPITAL LETTER U WITH ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0055, 0x0041, 0, 0}, 0x1eae }, // U1EAE # LATIN CAPITAL LETTER A WITH BREVE AND ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0055, 0x0061, 0, 0}, 0x1eaf }, // U1EAF # LATIN SMALL LETTER A WITH BREVE AND ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0057, 0, 0, 0}, 0x1e82 }, // U1E82 # LATIN CAPITAL LETTER W WITH ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0059, 0, 0, 0}, 0x00dd }, // U00DD # LATIN CAPITAL LETTER Y WITH ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x005a, 0, 0, 0}, 0x0179 }, // U0179 # LATIN CAPITAL LETTER Z WITH ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x005e, 0x0041, 0, 0}, 0x1ea4 }, // U1EA4 # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x005e, 0x0045, 0, 0}, 0x1ebe }, // U1EBE # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x005e, 0x004f, 0, 0}, 0x1ed0 }, // U1ED0 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x005e, 0x0061, 0, 0}, 0x1ea5 }, // U1EA5 # LATIN SMALL LETTER A WITH CIRCUMFLEX AND ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x005e, 0x0065, 0, 0}, 0x1ebf }, // U1EBF # LATIN SMALL LETTER E WITH CIRCUMFLEX AND ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x005e, 0x006f, 0, 0}, 0x1ed1 }, // U1ED1 # LATIN SMALL LETTER O WITH CIRCUMFLEX AND ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x005f, 0x0045, 0, 0}, 0x1e16 }, // U1E16 # LATIN CAPITAL LETTER E WITH MACRON AND ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x005f, 0x004f, 0, 0}, 0x1e52 }, // U1E52 # LATIN CAPITAL LETTER O WITH MACRON AND ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x005f, 0x0065, 0, 0}, 0x1e17 }, // U1E17 # LATIN SMALL LETTER E WITH MACRON AND ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x005f, 0x006f, 0, 0}, 0x1e53 }, // U1E53 # LATIN SMALL LETTER O WITH MACRON AND ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0061, 0, 0, 0}, 0x00e1 }, // U00E1 # LATIN SMALL LETTER A WITH ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0062, 0x0041, 0, 0}, 0x1eae }, // U1EAE # LATIN CAPITAL LETTER A WITH BREVE AND ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0062, 0x0061, 0, 0}, 0x1eaf }, // U1EAF # LATIN SMALL LETTER A WITH BREVE AND ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0063, 0, 0, 0}, 0x0107 }, // U0107 # LATIN SMALL LETTER C WITH ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0065, 0, 0, 0}, 0x00e9 }, // U00E9 # LATIN SMALL LETTER E WITH ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0067, 0, 0, 0}, 0x01f5 }, // U01F5 # LATIN SMALL LETTER G WITH ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0069, 0, 0, 0}, 0x00ed }, // U00ED # LATIN SMALL LETTER I WITH ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x006b, 0, 0, 0}, 0x1e31 }, // U1E31 # LATIN SMALL LETTER K WITH ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x006c, 0, 0, 0}, 0x013a }, // U013A # LATIN SMALL LETTER L WITH ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x006d, 0, 0, 0}, 0x1e3f }, // U1E3F # LATIN SMALL LETTER M WITH ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x006e, 0, 0, 0}, 0x0144 }, // U0144 # LATIN SMALL LETTER N WITH ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x006f, 0, 0, 0}, 0x00f3 }, // U00F3 # LATIN SMALL LETTER O WITH ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0070, 0, 0, 0}, 0x1e55 }, // U1E55 # LATIN SMALL LETTER P WITH ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0072, 0, 0, 0}, 0x0155 }, // U0155 # LATIN SMALL LETTER R WITH ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0073, 0, 0, 0}, 0x015b }, // U015B # LATIN SMALL LETTER S WITH ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0075, 0, 0, 0}, 0x00fa }, // U00FA # LATIN SMALL LETTER U WITH ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0077, 0, 0, 0}, 0x1e83 }, // U1E83 # LATIN SMALL LETTER W WITH ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0079, 0, 0, 0}, 0x00fd }, // U00FD # LATIN SMALL LETTER Y WITH ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x007a, 0, 0, 0}, 0x017a }, // U017A # LATIN SMALL LETTER Z WITH ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x007e, 0x004f, 0, 0}, 0x1e4c }, // U1E4C # LATIN CAPITAL LETTER O WITH TILDE AND ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x007e, 0x0055, 0, 0}, 0x1e78 }, // U1E78 # LATIN CAPITAL LETTER U WITH TILDE AND ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x007e, 0x006f, 0, 0}, 0x1e4d }, // U1E4D # LATIN SMALL LETTER O WITH TILDE AND ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x007e, 0x0075, 0, 0}, 0x1e79 }, // U1E79 # LATIN SMALL LETTER U WITH TILDE AND ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x00af, 0x0045, 0, 0}, 0x1e16 }, // U1E16 # LATIN CAPITAL LETTER E WITH MACRON AND ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x00af, 0x004f, 0, 0}, 0x1e52 }, // U1E52 # LATIN CAPITAL LETTER O WITH MACRON AND ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x00af, 0x0065, 0, 0}, 0x1e17 }, // U1E17 # LATIN SMALL LETTER E WITH MACRON AND ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x00af, 0x006f, 0, 0}, 0x1e53 }, // U1E53 # LATIN SMALL LETTER O WITH MACRON AND ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x00c2, 0, 0, 0}, 0x1ea4 }, // U1EA4 # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x00c5, 0, 0, 0}, 0x01fa }, // U01FA # LATIN CAPITAL LETTER A WITH RING ABOVE AND ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x00c6, 0, 0, 0}, 0x01fc }, // U01FC # LATIN CAPITAL LETTER AE WITH ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x00c7, 0, 0, 0}, 0x1e08 }, // U1E08 # LATIN CAPITAL LETTER C WITH CEDILLA AND ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x00ca, 0, 0, 0}, 0x1ebe }, // U1EBE # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x00cf, 0, 0, 0}, 0x1e2e }, // U1E2E # LATIN CAPITAL LETTER I WITH DIAERESIS AND ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x00d4, 0, 0, 0}, 0x1ed0 }, // U1ED0 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x00d5, 0, 0, 0}, 0x1e4c }, // U1E4C # LATIN CAPITAL LETTER O WITH TILDE AND ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x00d8, 0, 0, 0}, 0x01fe }, // U01FE # LATIN CAPITAL LETTER O WITH STROKE AND ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x00dc, 0, 0, 0}, 0x01d7 }, // U01D7 # LATIN CAPITAL LETTER U WITH DIAERESIS AND ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x00e2, 0, 0, 0}, 0x1ea5 }, // U1EA5 # LATIN SMALL LETTER A WITH CIRCUMFLEX AND ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x00e5, 0, 0, 0}, 0x01fb }, // U01FB # LATIN SMALL LETTER A WITH RING ABOVE AND ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x00e6, 0, 0, 0}, 0x01fd }, // U01FD # LATIN SMALL LETTER AE WITH ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x00e7, 0, 0, 0}, 0x1e09 }, // U1E09 # LATIN SMALL LETTER C WITH CEDILLA AND ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x00ea, 0, 0, 0}, 0x1ebf }, // U1EBF # LATIN SMALL LETTER E WITH CIRCUMFLEX AND ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x00ef, 0, 0, 0}, 0x1e2f }, // U1E2F # LATIN SMALL LETTER I WITH DIAERESIS AND ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x00f4, 0, 0, 0}, 0x1ed1 }, // U1ED1 # LATIN SMALL LETTER O WITH CIRCUMFLEX AND ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x00f5, 0, 0, 0}, 0x1e4d }, // U1E4D # LATIN SMALL LETTER O WITH TILDE AND ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x00f8, 0, 0, 0}, 0x01ff }, // U01FF # LATIN SMALL LETTER O WITH STROKE AND ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x00fc, 0, 0, 0}, 0x01d8 }, // U01D8 # LATIN SMALL LETTER U WITH DIAERESIS AND ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0102, 0, 0, 0}, 0x1eae }, // U1EAE # LATIN CAPITAL LETTER A WITH BREVE AND ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0103, 0, 0, 0}, 0x1eaf }, // U1EAF # LATIN SMALL LETTER A WITH BREVE AND ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0112, 0, 0, 0}, 0x1e16 }, // U1E16 # LATIN CAPITAL LETTER E WITH MACRON AND ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0113, 0, 0, 0}, 0x1e17 }, // U1E17 # LATIN SMALL LETTER E WITH MACRON AND ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x014c, 0, 0, 0}, 0x1e52 }, // U1E52 # LATIN CAPITAL LETTER O WITH MACRON AND ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x014d, 0, 0, 0}, 0x1e53 }, // U1E53 # LATIN SMALL LETTER O WITH MACRON AND ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0168, 0, 0, 0}, 0x1e78 }, // U1E78 # LATIN CAPITAL LETTER U WITH TILDE AND ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0169, 0, 0, 0}, 0x1e79 }, // U1E79 # LATIN SMALL LETTER U WITH TILDE AND ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0313, 0x0391, 0, 0}, 0x1f0c }, // U1F0C # GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0313, 0x0395, 0, 0}, 0x1f1c }, // U1F1C # GREEK CAPITAL LETTER EPSILON WITH PSILI AND OXIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0313, 0x0397, 0, 0}, 0x1f2c }, // U1F2C # GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0313, 0x0399, 0, 0}, 0x1f3c }, // U1F3C # GREEK CAPITAL LETTER IOTA WITH PSILI AND OXIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0313, 0x039f, 0, 0}, 0x1f4c }, // U1F4C # GREEK CAPITAL LETTER OMICRON WITH PSILI AND OXIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0313, 0x03a9, 0, 0}, 0x1f6c }, // U1F6C # GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0313, 0x03b1, 0, 0}, 0x1f04 }, // U1F04 # GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0313, 0x03b5, 0, 0}, 0x1f14 }, // U1F14 # GREEK SMALL LETTER EPSILON WITH PSILI AND OXIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0313, 0x03b7, 0, 0}, 0x1f24 }, // U1F24 # GREEK SMALL LETTER ETA WITH PSILI AND OXIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0313, 0x03b9, 0, 0}, 0x1f34 }, // U1F34 # GREEK SMALL LETTER IOTA WITH PSILI AND OXIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0313, 0x03bf, 0, 0}, 0x1f44 }, // U1F44 # GREEK SMALL LETTER OMICRON WITH PSILI AND OXIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0313, 0x03c5, 0, 0}, 0x1f54 }, // U1F54 # GREEK SMALL LETTER UPSILON WITH PSILI AND OXIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0313, 0x03c9, 0, 0}, 0x1f64 }, // U1F64 # GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0314, 0x0391, 0, 0}, 0x1f0d }, // U1F0D # GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0314, 0x0395, 0, 0}, 0x1f1d }, // U1F1D # GREEK CAPITAL LETTER EPSILON WITH DASIA AND OXIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0314, 0x0397, 0, 0}, 0x1f2d }, // U1F2D # GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0314, 0x0399, 0, 0}, 0x1f3d }, // U1F3D # GREEK CAPITAL LETTER IOTA WITH DASIA AND OXIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0314, 0x039f, 0, 0}, 0x1f4d }, // U1F4D # GREEK CAPITAL LETTER OMICRON WITH DASIA AND OXIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0314, 0x03a5, 0, 0}, 0x1f5d }, // U1F5D # GREEK CAPITAL LETTER UPSILON WITH DASIA AND OXIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0314, 0x03a9, 0, 0}, 0x1f6d }, // U1F6D # GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0314, 0x03b1, 0, 0}, 0x1f05 }, // U1F05 # GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0314, 0x03b5, 0, 0}, 0x1f15 }, // U1F15 # GREEK SMALL LETTER EPSILON WITH DASIA AND OXIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0314, 0x03b7, 0, 0}, 0x1f25 }, // U1F25 # GREEK SMALL LETTER ETA WITH DASIA AND OXIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0314, 0x03b9, 0, 0}, 0x1f35 }, // U1F35 # GREEK SMALL LETTER IOTA WITH DASIA AND OXIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0314, 0x03bf, 0, 0}, 0x1f45 }, // U1F45 # GREEK SMALL LETTER OMICRON WITH DASIA AND OXIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0314, 0x03c5, 0, 0}, 0x1f55 }, // U1F55 # GREEK SMALL LETTER UPSILON WITH DASIA AND OXIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0314, 0x03c9, 0, 0}, 0x1f65 }, // U1F65 # GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0391, 0, 0, 0}, 0x0386 }, // U0386 # GREEK CAPITAL LETTER ALPHA WITH TONOS ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0395, 0, 0, 0}, 0x0388 }, // U0388 # GREEK CAPITAL LETTER EPSILON WITH TONOS ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0397, 0, 0, 0}, 0x0389 }, // U0389 # GREEK CAPITAL LETTER ETA WITH TONOS ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0399, 0, 0, 0}, 0x038a }, // U038A # GREEK CAPITAL LETTER IOTA WITH TONOS ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x039f, 0, 0, 0}, 0x038c }, // U038C # GREEK CAPITAL LETTER OMICRON WITH TONOS ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x03a5, 0, 0, 0}, 0x038e }, // U038E # GREEK CAPITAL LETTER UPSILON WITH TONOS ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x03a9, 0, 0, 0}, 0x038f }, // U038F # GREEK CAPITAL LETTER OMEGA WITH TONOS ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x03b1, 0, 0, 0}, 0x03ac }, // U03AC # GREEK SMALL LETTER ALPHA WITH TONOS ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x03b5, 0, 0, 0}, 0x03ad }, // U03AD # GREEK SMALL LETTER EPSILON WITH TONOS ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x03b7, 0, 0, 0}, 0x03ae }, // U03AE # GREEK SMALL LETTER ETA WITH TONOS ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x03b9, 0, 0, 0}, 0x03af }, // U03AF # GREEK SMALL LETTER IOTA WITH TONOS ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x03bf, 0, 0, 0}, 0x03cc }, // U03CC # GREEK SMALL LETTER OMICRON WITH TONOS ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x03c5, 0, 0, 0}, 0x03cd }, // U03CD # GREEK SMALL LETTER UPSILON WITH TONOS ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x03c9, 0, 0, 0}, 0x03ce }, // U03CE # GREEK SMALL LETTER OMEGA WITH TONOS ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x03ca, 0, 0, 0}, 0x0390 }, // U0390 # GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x03cb, 0, 0, 0}, 0x03b0 }, // U03B0 # GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x03d2, 0, 0, 0}, 0x03d3 }, // U03D3 # GREEK UPSILON WITH ACUTE AND HOOK SYMBOL ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0413, 0, 0, 0}, 0x0403 }, // U0403 # CYRILLIC CAPITAL LETTER GJE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x041a, 0, 0, 0}, 0x040c }, // U040C # CYRILLIC CAPITAL LETTER KJE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0433, 0, 0, 0}, 0x0453 }, // U0453 # CYRILLIC SMALL LETTER GJE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x043a, 0, 0, 0}, 0x045c }, // U045C # CYRILLIC SMALL LETTER KJE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x1f00, 0, 0, 0}, 0x1f04 }, // U1F04 # GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x1f01, 0, 0, 0}, 0x1f05 }, // U1F05 # GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x1f08, 0, 0, 0}, 0x1f0c }, // U1F0C # GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x1f09, 0, 0, 0}, 0x1f0d }, // U1F0D # GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x1f10, 0, 0, 0}, 0x1f14 }, // U1F14 # GREEK SMALL LETTER EPSILON WITH PSILI AND OXIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x1f11, 0, 0, 0}, 0x1f15 }, // U1F15 # GREEK SMALL LETTER EPSILON WITH DASIA AND OXIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x1f18, 0, 0, 0}, 0x1f1c }, // U1F1C # GREEK CAPITAL LETTER EPSILON WITH PSILI AND OXIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x1f19, 0, 0, 0}, 0x1f1d }, // U1F1D # GREEK CAPITAL LETTER EPSILON WITH DASIA AND OXIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x1f20, 0, 0, 0}, 0x1f24 }, // U1F24 # GREEK SMALL LETTER ETA WITH PSILI AND OXIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x1f21, 0, 0, 0}, 0x1f25 }, // U1F25 # GREEK SMALL LETTER ETA WITH DASIA AND OXIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x1f28, 0, 0, 0}, 0x1f2c }, // U1F2C # GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x1f29, 0, 0, 0}, 0x1f2d }, // U1F2D # GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x1f30, 0, 0, 0}, 0x1f34 }, // U1F34 # GREEK SMALL LETTER IOTA WITH PSILI AND OXIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x1f31, 0, 0, 0}, 0x1f35 }, // U1F35 # GREEK SMALL LETTER IOTA WITH DASIA AND OXIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x1f38, 0, 0, 0}, 0x1f3c }, // U1F3C # GREEK CAPITAL LETTER IOTA WITH PSILI AND OXIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x1f39, 0, 0, 0}, 0x1f3d }, // U1F3D # GREEK CAPITAL LETTER IOTA WITH DASIA AND OXIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x1f40, 0, 0, 0}, 0x1f44 }, // U1F44 # GREEK SMALL LETTER OMICRON WITH PSILI AND OXIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x1f41, 0, 0, 0}, 0x1f45 }, // U1F45 # GREEK SMALL LETTER OMICRON WITH DASIA AND OXIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x1f48, 0, 0, 0}, 0x1f4c }, // U1F4C # GREEK CAPITAL LETTER OMICRON WITH PSILI AND OXIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x1f49, 0, 0, 0}, 0x1f4d }, // U1F4D # GREEK CAPITAL LETTER OMICRON WITH DASIA AND OXIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x1f50, 0, 0, 0}, 0x1f54 }, // U1F54 # GREEK SMALL LETTER UPSILON WITH PSILI AND OXIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x1f51, 0, 0, 0}, 0x1f55 }, // U1F55 # GREEK SMALL LETTER UPSILON WITH DASIA AND OXIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x1f59, 0, 0, 0}, 0x1f5d }, // U1F5D # GREEK CAPITAL LETTER UPSILON WITH DASIA AND OXIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x1f60, 0, 0, 0}, 0x1f64 }, // U1F64 # GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x1f61, 0, 0, 0}, 0x1f65 }, // U1F65 # GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x1f68, 0, 0, 0}, 0x1f6c }, // U1F6C # GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x1f69, 0, 0, 0}, 0x1f6d }, // U1F6D # GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, UNITIZE(Qt::Key_Dead_Circumflex), 0x0041, 0, 0}, 0x1ea4 }, // U1EA4 # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, UNITIZE(Qt::Key_Dead_Circumflex), 0x0045, 0, 0}, 0x1ebe }, // U1EBE # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, UNITIZE(Qt::Key_Dead_Circumflex), 0x004f, 0, 0}, 0x1ed0 }, // U1ED0 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, UNITIZE(Qt::Key_Dead_Circumflex), 0x0061, 0, 0}, 0x1ea5 }, // U1EA5 # LATIN SMALL LETTER A WITH CIRCUMFLEX AND ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, UNITIZE(Qt::Key_Dead_Circumflex), 0x0065, 0, 0}, 0x1ebf }, // U1EBF # LATIN SMALL LETTER E WITH CIRCUMFLEX AND ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, UNITIZE(Qt::Key_Dead_Circumflex), 0x006f, 0, 0}, 0x1ed1 }, // U1ED1 # LATIN SMALL LETTER O WITH CIRCUMFLEX AND ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, UNITIZE(Qt::Key_Dead_Tilde), 0x004f, 0, 0}, 0x1e4c }, // U1E4C # LATIN CAPITAL LETTER O WITH TILDE AND ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, UNITIZE(Qt::Key_Dead_Tilde), 0x0055, 0, 0}, 0x1e78 }, // U1E78 # LATIN CAPITAL LETTER U WITH TILDE AND ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, UNITIZE(Qt::Key_Dead_Tilde), 0x006f, 0, 0}, 0x1e4d }, // U1E4D # LATIN SMALL LETTER O WITH TILDE AND ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, UNITIZE(Qt::Key_Dead_Tilde), 0x0075, 0, 0}, 0x1e79 }, // U1E79 # LATIN SMALL LETTER U WITH TILDE AND ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, UNITIZE(Qt::Key_Dead_Macron), 0x0045, 0, 0}, 0x1e16 }, // U1E16 # LATIN CAPITAL LETTER E WITH MACRON AND ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, UNITIZE(Qt::Key_Dead_Macron), 0x004f, 0, 0}, 0x1e52 }, // U1E52 # LATIN CAPITAL LETTER O WITH MACRON AND ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, UNITIZE(Qt::Key_Dead_Macron), 0x0065, 0, 0}, 0x1e17 }, // U1E17 # LATIN SMALL LETTER E WITH MACRON AND ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, UNITIZE(Qt::Key_Dead_Macron), 0x006f, 0, 0}, 0x1e53 }, // U1E53 # LATIN SMALL LETTER O WITH MACRON AND ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, UNITIZE(Qt::Key_Dead_Breve), 0x0041, 0, 0}, 0x1eae }, // U1EAE # LATIN CAPITAL LETTER A WITH BREVE AND ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, UNITIZE(Qt::Key_Dead_Breve), 0x0061, 0, 0}, 0x1eaf }, // U1EAF # LATIN SMALL LETTER A WITH BREVE AND ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, UNITIZE(Qt::Key_Dead_Diaeresis), 0x0049, 0, 0}, 0x1e2e }, // U1E2E # LATIN CAPITAL LETTER I WITH DIAERESIS AND ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, UNITIZE(Qt::Key_Dead_Diaeresis), 0x0055, 0, 0}, 0x01d7 }, // U01D7 # LATIN CAPITAL LETTER U WITH DIAERESIS AND ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, UNITIZE(Qt::Key_Dead_Diaeresis), 0x0069, 0, 0}, 0x1e2f }, // U1E2F # LATIN SMALL LETTER I WITH DIAERESIS AND ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, UNITIZE(Qt::Key_Dead_Diaeresis), 0x0075, 0, 0}, 0x01d8 }, // U01D8 # LATIN SMALL LETTER U WITH DIAERESIS AND ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, UNITIZE(Qt::Key_Dead_Diaeresis), 0x03b9, 0, 0}, 0x0390 }, // U0390 # GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, UNITIZE(Qt::Key_Dead_Diaeresis), 0x03c5, 0, 0}, 0x03b0 }, // U03B0 # GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, UNITIZE(Qt::Key_Dead_Abovering), 0x0041, 0, 0}, 0x01fa }, // U01FA # LATIN CAPITAL LETTER A WITH RING ABOVE AND ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, UNITIZE(Qt::Key_Dead_Abovering), 0x0061, 0, 0}, 0x01fb }, // U01FB # LATIN SMALL LETTER A WITH RING ABOVE AND ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, UNITIZE(Qt::Key_Dead_Cedilla), 0x0043, 0, 0}, 0x1e08 }, // U1E08 # LATIN CAPITAL LETTER C WITH CEDILLA AND ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, UNITIZE(Qt::Key_Dead_Cedilla), 0x0063, 0, 0}, 0x1e09 }, // U1E09 # LATIN SMALL LETTER C WITH CEDILLA AND ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, UNITIZE(Qt::Key_Dead_Horn), 0x004f, 0, 0}, 0x1eda }, // U1EDA # LATIN CAPITAL LETTER O WITH HORN AND ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, UNITIZE(Qt::Key_Dead_Horn), 0x0055, 0, 0}, 0x1ee8 }, // U1EE8 # LATIN CAPITAL LETTER U WITH HORN AND ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, UNITIZE(Qt::Key_Dead_Horn), 0x006f, 0, 0}, 0x1edb }, // U1EDB # LATIN SMALL LETTER O WITH HORN AND ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, UNITIZE(Qt::Key_Dead_Horn), 0x0075, 0, 0}, 0x1ee9 }, // U1EE9 # LATIN SMALL LETTER U WITH HORN AND ACUTE ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0000, 0x0029, 0}, 0x246b }, // U246B # CIRCLED NUMBER TWELVE ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0000, 0x0029, 0}, 0x32b7 }, // U32B7 # CIRCLED NUMBER FORTY TWO ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0000, 0x0029, 0}, 0x3253 }, // U3253 # CIRCLED NUMBER TWENTY THREE ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0000, 0x0029, 0}, 0x3252 }, // U3252 # CIRCLED NUMBER TWENTY TWO ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0000, 0x0029, 0}, 0x3253 }, // U3253 # CIRCLED NUMBER TWENTY THREE ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0000, 0x0029, 0}, 0x2473 }, // U2473 # CIRCLED NUMBER TWENTY ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0000, 0x0029, 0}, 0x32b2 }, // U32B2 # CIRCLED NUMBER THIRTY SEVEN ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0000, 0x0029, 0}, 0x32b7 }, // U32B7 # CIRCLED NUMBER FORTY TWO ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0000, 0x0029, 0}, 0x3252 }, // U3252 # CIRCLED NUMBER TWENTY TWO ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0000, 0x0029, 0}, 0x246d }, // U246D # CIRCLED NUMBER FOURTEEN ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0000, 0x0029, 0}, 0x32be }, // U32BE # CIRCLED NUMBER FORTY NINE ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0000, 0x0029, 0}, 0x3254 }, // U3254 # CIRCLED NUMBER TWENTY FOUR ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0000, 0x0029, 0}, 0x2470 }, // U2470 # CIRCLED NUMBER SEVENTEEN ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0000, 0x0029, 0}, 0x3252 }, // U3252 # CIRCLED NUMBER TWENTY TWO ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0000, 0x0029, 0}, 0x32bc }, // U32BC # CIRCLED NUMBER FORTY SEVEN ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0000, 0x0029, 0}, 0x3254 }, // U3254 # CIRCLED NUMBER TWENTY FOUR ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0000, 0x0029, 0}, 0x246f }, // U246F # CIRCLED NUMBER SIXTEEN ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0000, 0x0029, 0}, 0x3252 }, // U3252 # CIRCLED NUMBER TWENTY TWO ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0000, 0x0029, 0}, 0x32bb }, // U32BB # CIRCLED NUMBER FORTY SIX ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0000, 0x0029, 0}, 0x32b3 }, // U32B3 # CIRCLED NUMBER THIRTY EIGHT ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0000, 0x0029, 0}, 0x32b6 }, // U32B6 # CIRCLED NUMBER FORTY ONE ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0000, 0x0029, 0}, 0x2469 }, // U2469 # CIRCLED NUMBER TEN ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0000, 0x0029, 0}, 0x3255 }, // U3255 # CIRCLED NUMBER TWENTY FIVE ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0000, 0x0029, 0}, 0x3251 }, // U3251 # CIRCLED NUMBER TWENTY ONE ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0000, 0x0029, 0}, 0x3257 }, // U3257 # CIRCLED NUMBER TWENTY SEVEN ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0000, 0x0029, 0}, 0x3255 }, // U3255 # CIRCLED NUMBER TWENTY FIVE ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0000, 0x0029, 0}, 0x325f }, // U325F # CIRCLED NUMBER THIRTY FIVE ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0000, 0x0029, 0}, 0x325e }, // U325E # CIRCLED NUMBER THIRTY FOUR ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0000, 0x0029, 0}, 0x3251 }, // U3251 # CIRCLED NUMBER TWENTY ONE ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0000, 0x0029, 0}, 0x32b8 }, // U32B8 # CIRCLED NUMBER FORTY THREE ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0000, 0x0029, 0}, 0x32b1 }, // U32B1 # CIRCLED NUMBER THIRTY SIX ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0000, 0x0029, 0}, 0x325d }, // U325D # CIRCLED NUMBER THIRTY THREE ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0000, 0x0029, 0}, 0x2471 }, // U2471 # CIRCLED NUMBER EIGHTEEN ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0000, 0x0029, 0}, 0x325c }, // U325C # CIRCLED NUMBER THIRTY TWO ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0000, 0x0029, 0}, 0x3256 }, // U3256 # CIRCLED NUMBER TWENTY SIX ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0000, 0x0029, 0}, 0x325c }, // U325C # CIRCLED NUMBER THIRTY TWO ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0000, 0x0029, 0}, 0x3256 }, // U3256 # CIRCLED NUMBER TWENTY SIX ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0000, 0x0029, 0}, 0x325b }, // U325B # CIRCLED NUMBER THIRTY ONE ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0000, 0x0029, 0}, 0x2473 }, // U2473 # CIRCLED NUMBER TWENTY ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0000, 0x0029, 0}, 0x2472 }, // U2472 # CIRCLED NUMBER NINETEEN ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0000, 0x0029, 0}, 0x246c }, // U246C # CIRCLED NUMBER THIRTEEN ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0000, 0x0029, 0}, 0x32b9 }, // U32B9 # CIRCLED NUMBER FORTY FOUR ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0000, 0x0029, 0}, 0x32ba }, // U32BA # CIRCLED NUMBER FORTY FIVE ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0000, 0x0029, 0}, 0x325a }, // U325A # CIRCLED NUMBER THIRTY ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0000, 0x0029, 0}, 0x32b5 }, // U32B5 # CIRCLED NUMBER FORTY ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0000, 0x0029, 0}, 0x3257 }, // U3257 # CIRCLED NUMBER TWENTY SEVEN ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0000, 0x0029, 0}, 0x3259 }, // U3259 # CIRCLED NUMBER TWENTY NINE ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0000, 0x0029, 0}, 0x3259 }, // U3259 # CIRCLED NUMBER TWENTY NINE ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0000, 0x0029, 0}, 0x32b4 }, // U32B4 # CIRCLED NUMBER THIRTY NINE ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0000, 0x0029, 0}, 0x3258 }, // U3258 # CIRCLED NUMBER TWENTY EIGHT ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0000, 0x0029, 0}, 0x3258 }, // U3258 # CIRCLED NUMBER TWENTY EIGHT ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0000, 0x0029, 0}, 0x246b }, // U246B # CIRCLED NUMBER TWELVE ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0000, 0x0029, 0}, 0x246a }, // U246A # CIRCLED NUMBER ELEVEN ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0000, 0x0029, 0}, 0x246e }, // U246E # CIRCLED NUMBER FIFTEEN ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0000, 0x0029, 0}, 0x32bd }, // U32BD # CIRCLED NUMBER FORTY EIGHT ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0000, 0x0029, 0}, 0x32bf }, // U32BF # CIRCLED NUMBER FIFTY ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0029, 0, 0}, 0x2461 }, // U2461 # CIRCLED DIGIT TWO ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0029, 0, 0}, 0x2461 }, // U2461 # CIRCLED DIGIT TWO ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0029, 0, 0}, 0x2462 }, // U2462 # CIRCLED DIGIT THREE ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0029, 0, 0}, 0x2468 }, // U2468 # CIRCLED DIGIT NINE ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0029, 0, 0}, 0x2463 }, // U2463 # CIRCLED DIGIT FOUR ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0029, 0, 0}, 0x2460 }, // U2460 # CIRCLED DIGIT ONE ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0029, 0, 0}, 0x2467 }, // U2467 # CIRCLED DIGIT EIGHT ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0029, 0, 0}, 0x24ea }, // U24EA # CIRCLED DIGIT ZERO ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0029, 0, 0}, 0x2466 }, // U2466 # CIRCLED DIGIT SEVEN ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0029, 0, 0}, 0x2465 }, // U2465 # CIRCLED DIGIT SIX ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0029, 0, 0}, 0x2464 }, // U2464 # CIRCLED DIGIT FIVE ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0030, 0x0029, 0}, 0x32b5 }, // U32B5 # CIRCLED NUMBER FORTY ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0030, 0x0029, 0}, 0x2473 }, // U2473 # CIRCLED NUMBER TWENTY ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0030, 0x0029, 0}, 0x2469 }, // U2469 # CIRCLED NUMBER TEN ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0030, 0x0029, 0}, 0x32bf }, // U32BF # CIRCLED NUMBER FIFTY ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0030, 0x0029, 0}, 0x325a }, // U325A # CIRCLED NUMBER THIRTY ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0030, 0x0029, 0}, 0x2473 }, // U2473 # CIRCLED NUMBER TWENTY ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0031, 0x0029, 0}, 0x32b6 }, // U32B6 # CIRCLED NUMBER FORTY ONE ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0031, 0x0029, 0}, 0x246a }, // U246A # CIRCLED NUMBER ELEVEN ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0031, 0x0029, 0}, 0x3251 }, // U3251 # CIRCLED NUMBER TWENTY ONE ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0031, 0x0029, 0}, 0x325b }, // U325B # CIRCLED NUMBER THIRTY ONE ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0031, 0x0029, 0}, 0x3251 }, // U3251 # CIRCLED NUMBER TWENTY ONE ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0032, 0x0029, 0}, 0x3252 }, // U3252 # CIRCLED NUMBER TWENTY TWO ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0032, 0x0029, 0}, 0x32b7 }, // U32B7 # CIRCLED NUMBER FORTY TWO ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0032, 0x0029, 0}, 0x246b }, // U246B # CIRCLED NUMBER TWELVE ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0032, 0x0029, 0}, 0x325c }, // U325C # CIRCLED NUMBER THIRTY TWO ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0032, 0x0029, 0}, 0x3252 }, // U3252 # CIRCLED NUMBER TWENTY TWO ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0033, 0x0029, 0}, 0x246c }, // U246C # CIRCLED NUMBER THIRTEEN ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0033, 0x0029, 0}, 0x3253 }, // U3253 # CIRCLED NUMBER TWENTY THREE ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0033, 0x0029, 0}, 0x325d }, // U325D # CIRCLED NUMBER THIRTY THREE ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0033, 0x0029, 0}, 0x32b8 }, // U32B8 # CIRCLED NUMBER FORTY THREE ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0033, 0x0029, 0}, 0x3253 }, // U3253 # CIRCLED NUMBER TWENTY THREE ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0034, 0x0029, 0}, 0x246d }, // U246D # CIRCLED NUMBER FOURTEEN ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0034, 0x0029, 0}, 0x3254 }, // U3254 # CIRCLED NUMBER TWENTY FOUR ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0034, 0x0029, 0}, 0x32b9 }, // U32B9 # CIRCLED NUMBER FORTY FOUR ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0034, 0x0029, 0}, 0x3254 }, // U3254 # CIRCLED NUMBER TWENTY FOUR ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0034, 0x0029, 0}, 0x325e }, // U325E # CIRCLED NUMBER THIRTY FOUR ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0035, 0x0029, 0}, 0x3255 }, // U3255 # CIRCLED NUMBER TWENTY FIVE ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0035, 0x0029, 0}, 0x325f }, // U325F # CIRCLED NUMBER THIRTY FIVE ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0035, 0x0029, 0}, 0x32ba }, // U32BA # CIRCLED NUMBER FORTY FIVE ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0035, 0x0029, 0}, 0x3255 }, // U3255 # CIRCLED NUMBER TWENTY FIVE ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0035, 0x0029, 0}, 0x246e }, // U246E # CIRCLED NUMBER FIFTEEN ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0036, 0x0029, 0}, 0x3256 }, // U3256 # CIRCLED NUMBER TWENTY SIX ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0036, 0x0029, 0}, 0x32bb }, // U32BB # CIRCLED NUMBER FORTY SIX ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0036, 0x0029, 0}, 0x32b1 }, // U32B1 # CIRCLED NUMBER THIRTY SIX ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0036, 0x0029, 0}, 0x246f }, // U246F # CIRCLED NUMBER SIXTEEN ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0036, 0x0029, 0}, 0x3256 }, // U3256 # CIRCLED NUMBER TWENTY SIX ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0037, 0x0029, 0}, 0x32bc }, // U32BC # CIRCLED NUMBER FORTY SEVEN ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0037, 0x0029, 0}, 0x3257 }, // U3257 # CIRCLED NUMBER TWENTY SEVEN ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0037, 0x0029, 0}, 0x32b2 }, // U32B2 # CIRCLED NUMBER THIRTY SEVEN ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0037, 0x0029, 0}, 0x2470 }, // U2470 # CIRCLED NUMBER SEVENTEEN ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0037, 0x0029, 0}, 0x3257 }, // U3257 # CIRCLED NUMBER TWENTY SEVEN ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0038, 0x0029, 0}, 0x2471 }, // U2471 # CIRCLED NUMBER EIGHTEEN ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0038, 0x0029, 0}, 0x32b3 }, // U32B3 # CIRCLED NUMBER THIRTY EIGHT ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0038, 0x0029, 0}, 0x32bd }, // U32BD # CIRCLED NUMBER FORTY EIGHT ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0038, 0x0029, 0}, 0x3258 }, // U3258 # CIRCLED NUMBER TWENTY EIGHT ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0038, 0x0029, 0}, 0x3258 }, // U3258 # CIRCLED NUMBER TWENTY EIGHT ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0039, 0x0029, 0}, 0x32b4 }, // U32B4 # CIRCLED NUMBER THIRTY NINE ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0039, 0x0029, 0}, 0x3259 }, // U3259 # CIRCLED NUMBER TWENTY NINE ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0039, 0x0029, 0}, 0x32be }, // U32BE # CIRCLED NUMBER FORTY NINE ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0039, 0x0029, 0}, 0x3259 }, // U3259 # CIRCLED NUMBER TWENTY NINE ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0039, 0x0029, 0}, 0x2472 }, // U2472 # CIRCLED NUMBER NINETEEN ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0028, 0, 0, 0}, 0x005b }, // bracketleft ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x002d, 0, 0, 0}, 0x007b }, // braceleft ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0030, 0x0029, 0, 0}, 0x24ea }, // U24EA # CIRCLED DIGIT ZERO ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0031, 0x0000, 0x0029, 0}, 0x2472 }, // U2472 # CIRCLED NUMBER NINETEEN ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0031, 0x0000, 0x0029, 0}, 0x246e }, // U246E # CIRCLED NUMBER FIFTEEN ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0031, 0x0000, 0x0029, 0}, 0x2469 }, // U2469 # CIRCLED NUMBER TEN ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0031, 0x0000, 0x0029, 0}, 0x246c }, // U246C # CIRCLED NUMBER THIRTEEN ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0031, 0x0000, 0x0029, 0}, 0x246b }, // U246B # CIRCLED NUMBER TWELVE ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0031, 0x0000, 0x0029, 0}, 0x2470 }, // U2470 # CIRCLED NUMBER SEVENTEEN ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0031, 0x0000, 0x0029, 0}, 0x246a }, // U246A # CIRCLED NUMBER ELEVEN ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0031, 0x0000, 0x0029, 0}, 0x246d }, // U246D # CIRCLED NUMBER FOURTEEN ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0031, 0x0000, 0x0029, 0}, 0x2471 }, // U2471 # CIRCLED NUMBER EIGHTEEN ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0031, 0x0000, 0x0029, 0}, 0x246f }, // U246F # CIRCLED NUMBER SIXTEEN ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0031, 0x0000, 0x0029, 0}, 0x246b }, // U246B # CIRCLED NUMBER TWELVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0031, 0x0029, 0, 0}, 0x2460 }, // U2460 # CIRCLED DIGIT ONE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0031, 0x0030, 0x0029, 0}, 0x2469 }, // U2469 # CIRCLED NUMBER TEN ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0031, 0x0031, 0x0029, 0}, 0x246a }, // U246A # CIRCLED NUMBER ELEVEN ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0031, 0x0032, 0x0029, 0}, 0x246b }, // U246B # CIRCLED NUMBER TWELVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0031, 0x0033, 0x0029, 0}, 0x246c }, // U246C # CIRCLED NUMBER THIRTEEN ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0031, 0x0034, 0x0029, 0}, 0x246d }, // U246D # CIRCLED NUMBER FOURTEEN ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0031, 0x0035, 0x0029, 0}, 0x246e }, // U246E # CIRCLED NUMBER FIFTEEN ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0031, 0x0036, 0x0029, 0}, 0x246f }, // U246F # CIRCLED NUMBER SIXTEEN ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0031, 0x0037, 0x0029, 0}, 0x2470 }, // U2470 # CIRCLED NUMBER SEVENTEEN ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0031, 0x0038, 0x0029, 0}, 0x2471 }, // U2471 # CIRCLED NUMBER EIGHTEEN ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0031, 0x0039, 0x0029, 0}, 0x2472 }, // U2472 # CIRCLED NUMBER NINETEEN ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0032, 0x0000, 0x0029, 0}, 0x2473 }, // U2473 # CIRCLED NUMBER TWENTY ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0032, 0x0000, 0x0029, 0}, 0x3257 }, // U3257 # CIRCLED NUMBER TWENTY SEVEN ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0032, 0x0000, 0x0029, 0}, 0x3259 }, // U3259 # CIRCLED NUMBER TWENTY NINE ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0032, 0x0000, 0x0029, 0}, 0x3258 }, // U3258 # CIRCLED NUMBER TWENTY EIGHT ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0032, 0x0000, 0x0029, 0}, 0x3253 }, // U3253 # CIRCLED NUMBER TWENTY THREE ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0032, 0x0000, 0x0029, 0}, 0x3255 }, // U3255 # CIRCLED NUMBER TWENTY FIVE ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0032, 0x0000, 0x0029, 0}, 0x3252 }, // U3252 # CIRCLED NUMBER TWENTY TWO ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0032, 0x0000, 0x0029, 0}, 0x3256 }, // U3256 # CIRCLED NUMBER TWENTY SIX ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0032, 0x0000, 0x0029, 0}, 0x3251 }, // U3251 # CIRCLED NUMBER TWENTY ONE ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0032, 0x0000, 0x0029, 0}, 0x3252 }, // U3252 # CIRCLED NUMBER TWENTY TWO ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0032, 0x0000, 0x0029, 0}, 0x3254 }, // U3254 # CIRCLED NUMBER TWENTY FOUR ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0032, 0x0029, 0, 0}, 0x2461 }, // U2461 # CIRCLED DIGIT TWO ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0032, 0x0030, 0x0029, 0}, 0x2473 }, // U2473 # CIRCLED NUMBER TWENTY ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0032, 0x0031, 0x0029, 0}, 0x3251 }, // U3251 # CIRCLED NUMBER TWENTY ONE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0032, 0x0032, 0x0029, 0}, 0x3252 }, // U3252 # CIRCLED NUMBER TWENTY TWO ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0032, 0x0033, 0x0029, 0}, 0x3253 }, // U3253 # CIRCLED NUMBER TWENTY THREE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0032, 0x0034, 0x0029, 0}, 0x3254 }, // U3254 # CIRCLED NUMBER TWENTY FOUR ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0032, 0x0035, 0x0029, 0}, 0x3255 }, // U3255 # CIRCLED NUMBER TWENTY FIVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0032, 0x0036, 0x0029, 0}, 0x3256 }, // U3256 # CIRCLED NUMBER TWENTY SIX ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0032, 0x0037, 0x0029, 0}, 0x3257 }, // U3257 # CIRCLED NUMBER TWENTY SEVEN ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0032, 0x0038, 0x0029, 0}, 0x3258 }, // U3258 # CIRCLED NUMBER TWENTY EIGHT ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0032, 0x0039, 0x0029, 0}, 0x3259 }, // U3259 # CIRCLED NUMBER TWENTY NINE ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0033, 0x0000, 0x0029, 0}, 0x32b4 }, // U32B4 # CIRCLED NUMBER THIRTY NINE ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0033, 0x0000, 0x0029, 0}, 0x325a }, // U325A # CIRCLED NUMBER THIRTY ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0033, 0x0000, 0x0029, 0}, 0x325b }, // U325B # CIRCLED NUMBER THIRTY ONE ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0033, 0x0000, 0x0029, 0}, 0x32b3 }, // U32B3 # CIRCLED NUMBER THIRTY EIGHT ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0033, 0x0000, 0x0029, 0}, 0x32b2 }, // U32B2 # CIRCLED NUMBER THIRTY SEVEN ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0033, 0x0000, 0x0029, 0}, 0x325c }, // U325C # CIRCLED NUMBER THIRTY TWO ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0033, 0x0000, 0x0029, 0}, 0x325c }, // U325C # CIRCLED NUMBER THIRTY TWO ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0033, 0x0000, 0x0029, 0}, 0x325f }, // U325F # CIRCLED NUMBER THIRTY FIVE ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0033, 0x0000, 0x0029, 0}, 0x325e }, // U325E # CIRCLED NUMBER THIRTY FOUR ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0033, 0x0000, 0x0029, 0}, 0x32b1 }, // U32B1 # CIRCLED NUMBER THIRTY SIX ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0033, 0x0000, 0x0029, 0}, 0x325d }, // U325D # CIRCLED NUMBER THIRTY THREE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0033, 0x0029, 0, 0}, 0x2462 }, // U2462 # CIRCLED DIGIT THREE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0033, 0x0030, 0x0029, 0}, 0x325a }, // U325A # CIRCLED NUMBER THIRTY ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0033, 0x0031, 0x0029, 0}, 0x325b }, // U325B # CIRCLED NUMBER THIRTY ONE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0033, 0x0032, 0x0029, 0}, 0x325c }, // U325C # CIRCLED NUMBER THIRTY TWO ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0033, 0x0033, 0x0029, 0}, 0x325d }, // U325D # CIRCLED NUMBER THIRTY THREE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0033, 0x0034, 0x0029, 0}, 0x325e }, // U325E # CIRCLED NUMBER THIRTY FOUR ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0033, 0x0035, 0x0029, 0}, 0x325f }, // U325F # CIRCLED NUMBER THIRTY FIVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0033, 0x0036, 0x0029, 0}, 0x32b1 }, // U32B1 # CIRCLED NUMBER THIRTY SIX ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0033, 0x0037, 0x0029, 0}, 0x32b2 }, // U32B2 # CIRCLED NUMBER THIRTY SEVEN ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0033, 0x0038, 0x0029, 0}, 0x32b3 }, // U32B3 # CIRCLED NUMBER THIRTY EIGHT ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0033, 0x0039, 0x0029, 0}, 0x32b4 }, // U32B4 # CIRCLED NUMBER THIRTY NINE ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0034, 0x0000, 0x0029, 0}, 0x32b7 }, // U32B7 # CIRCLED NUMBER FORTY TWO ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0034, 0x0000, 0x0029, 0}, 0x32b5 }, // U32B5 # CIRCLED NUMBER FORTY ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0034, 0x0000, 0x0029, 0}, 0x32b6 }, // U32B6 # CIRCLED NUMBER FORTY ONE ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0034, 0x0000, 0x0029, 0}, 0x32bc }, // U32BC # CIRCLED NUMBER FORTY SEVEN ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0034, 0x0000, 0x0029, 0}, 0x32b7 }, // U32B7 # CIRCLED NUMBER FORTY TWO ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0034, 0x0000, 0x0029, 0}, 0x32b9 }, // U32B9 # CIRCLED NUMBER FORTY FOUR ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0034, 0x0000, 0x0029, 0}, 0x32b8 }, // U32B8 # CIRCLED NUMBER FORTY THREE ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0034, 0x0000, 0x0029, 0}, 0x32bb }, // U32BB # CIRCLED NUMBER FORTY SIX ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0034, 0x0000, 0x0029, 0}, 0x32be }, // U32BE # CIRCLED NUMBER FORTY NINE ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0034, 0x0000, 0x0029, 0}, 0x32ba }, // U32BA # CIRCLED NUMBER FORTY FIVE ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0034, 0x0000, 0x0029, 0}, 0x32bd }, // U32BD # CIRCLED NUMBER FORTY EIGHT ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0034, 0x0029, 0, 0}, 0x2463 }, // U2463 # CIRCLED DIGIT FOUR ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0034, 0x0030, 0x0029, 0}, 0x32b5 }, // U32B5 # CIRCLED NUMBER FORTY ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0034, 0x0031, 0x0029, 0}, 0x32b6 }, // U32B6 # CIRCLED NUMBER FORTY ONE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0034, 0x0032, 0x0029, 0}, 0x32b7 }, // U32B7 # CIRCLED NUMBER FORTY TWO ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0034, 0x0033, 0x0029, 0}, 0x32b8 }, // U32B8 # CIRCLED NUMBER FORTY THREE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0034, 0x0034, 0x0029, 0}, 0x32b9 }, // U32B9 # CIRCLED NUMBER FORTY FOUR ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0034, 0x0035, 0x0029, 0}, 0x32ba }, // U32BA # CIRCLED NUMBER FORTY FIVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0034, 0x0036, 0x0029, 0}, 0x32bb }, // U32BB # CIRCLED NUMBER FORTY SIX ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0034, 0x0037, 0x0029, 0}, 0x32bc }, // U32BC # CIRCLED NUMBER FORTY SEVEN ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0034, 0x0038, 0x0029, 0}, 0x32bd }, // U32BD # CIRCLED NUMBER FORTY EIGHT ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0034, 0x0039, 0x0029, 0}, 0x32be }, // U32BE # CIRCLED NUMBER FORTY NINE ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0035, 0x0000, 0x0029, 0}, 0x32bf }, // U32BF # CIRCLED NUMBER FIFTY ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0035, 0x0029, 0, 0}, 0x2464 }, // U2464 # CIRCLED DIGIT FIVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0035, 0x0030, 0x0029, 0}, 0x32bf }, // U32BF # CIRCLED NUMBER FIFTY ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0036, 0x0029, 0, 0}, 0x2465 }, // U2465 # CIRCLED DIGIT SIX ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0037, 0x0029, 0, 0}, 0x2466 }, // U2466 # CIRCLED DIGIT SEVEN ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0038, 0x0029, 0, 0}, 0x2467 }, // U2467 # CIRCLED DIGIT EIGHT ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0039, 0x0029, 0, 0}, 0x2468 }, // U2468 # CIRCLED DIGIT NINE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0041, 0x0029, 0, 0}, 0x24b6 }, // U24B6 # CIRCLED LATIN CAPITAL LETTER A ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0042, 0x0029, 0, 0}, 0x24b7 }, // U24B7 # CIRCLED LATIN CAPITAL LETTER B ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0043, 0x0029, 0, 0}, 0x24b8 }, // U24B8 # CIRCLED LATIN CAPITAL LETTER C ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0044, 0x0029, 0, 0}, 0x24b9 }, // U24B9 # CIRCLED LATIN CAPITAL LETTER D ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0045, 0x0029, 0, 0}, 0x24ba }, // U24BA # CIRCLED LATIN CAPITAL LETTER E ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0046, 0x0029, 0, 0}, 0x24bb }, // U24BB # CIRCLED LATIN CAPITAL LETTER F ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0047, 0x0029, 0, 0}, 0x24bc }, // U24BC # CIRCLED LATIN CAPITAL LETTER G ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0048, 0x0029, 0, 0}, 0x24bd }, // U24BD # CIRCLED LATIN CAPITAL LETTER H ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0049, 0x0029, 0, 0}, 0x24be }, // U24BE # CIRCLED LATIN CAPITAL LETTER I ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x004a, 0x0029, 0, 0}, 0x24bf }, // U24BF # CIRCLED LATIN CAPITAL LETTER J ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x004b, 0x0029, 0, 0}, 0x24c0 }, // U24C0 # CIRCLED LATIN CAPITAL LETTER K ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x004c, 0x0029, 0, 0}, 0x24c1 }, // U24C1 # CIRCLED LATIN CAPITAL LETTER L ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x004d, 0x0029, 0, 0}, 0x24c2 }, // U24C2 # CIRCLED LATIN CAPITAL LETTER M ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x004e, 0x0029, 0, 0}, 0x24c3 }, // U24C3 # CIRCLED LATIN CAPITAL LETTER N ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x004f, 0x0029, 0, 0}, 0x24c4 }, // U24C4 # CIRCLED LATIN CAPITAL LETTER O ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0050, 0x0029, 0, 0}, 0x24c5 }, // U24C5 # CIRCLED LATIN CAPITAL LETTER P ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0051, 0x0029, 0, 0}, 0x24c6 }, // U24C6 # CIRCLED LATIN CAPITAL LETTER Q ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0052, 0x0029, 0, 0}, 0x24c7 }, // U24C7 # CIRCLED LATIN CAPITAL LETTER R ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0053, 0x0029, 0, 0}, 0x24c8 }, // U24C8 # CIRCLED LATIN CAPITAL LETTER S ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0054, 0x0029, 0, 0}, 0x24c9 }, // U24C9 # CIRCLED LATIN CAPITAL LETTER T ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0055, 0x0029, 0, 0}, 0x24ca }, // U24CA # CIRCLED LATIN CAPITAL LETTER U ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0056, 0x0029, 0, 0}, 0x24cb }, // U24CB # CIRCLED LATIN CAPITAL LETTER V ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0057, 0x0029, 0, 0}, 0x24cc }, // U24CC # CIRCLED LATIN CAPITAL LETTER W ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0058, 0x0029, 0, 0}, 0x24cd }, // U24CD # CIRCLED LATIN CAPITAL LETTER X ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0059, 0x0029, 0, 0}, 0x24ce }, // U24CE # CIRCLED LATIN CAPITAL LETTER Y ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x005a, 0x0029, 0, 0}, 0x24cf }, // U24CF # CIRCLED LATIN CAPITAL LETTER Z ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0061, 0x0029, 0, 0}, 0x24d0 }, // U24D0 # CIRCLED LATIN SMALL LETTER A ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0062, 0x0029, 0, 0}, 0x24d1 }, // U24D1 # CIRCLED LATIN SMALL LETTER B ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0063, 0x0029, 0, 0}, 0x24d2 }, // U24D2 # CIRCLED LATIN SMALL LETTER C ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0064, 0x0029, 0, 0}, 0x24d3 }, // U24D3 # CIRCLED LATIN SMALL LETTER D ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0065, 0x0029, 0, 0}, 0x24d4 }, // U24D4 # CIRCLED LATIN SMALL LETTER E ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0066, 0x0029, 0, 0}, 0x24d5 }, // U24D5 # CIRCLED LATIN SMALL LETTER F ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0067, 0x0029, 0, 0}, 0x24d6 }, // U24D6 # CIRCLED LATIN SMALL LETTER G ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0068, 0x0029, 0, 0}, 0x24d7 }, // U24D7 # CIRCLED LATIN SMALL LETTER H ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0069, 0x0029, 0, 0}, 0x24d8 }, // U24D8 # CIRCLED LATIN SMALL LETTER I ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x006a, 0x0029, 0, 0}, 0x24d9 }, // U24D9 # CIRCLED LATIN SMALL LETTER J ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x006b, 0x0029, 0, 0}, 0x24da }, // U24DA # CIRCLED LATIN SMALL LETTER K ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x006c, 0x0029, 0, 0}, 0x24db }, // U24DB # CIRCLED LATIN SMALL LETTER L ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x006d, 0x0029, 0, 0}, 0x24dc }, // U24DC # CIRCLED LATIN SMALL LETTER M ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x006e, 0x0029, 0, 0}, 0x24dd }, // U24DD # CIRCLED LATIN SMALL LETTER N ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x006f, 0x0029, 0, 0}, 0x24de }, // U24DE # CIRCLED LATIN SMALL LETTER O ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0070, 0x0029, 0, 0}, 0x24df }, // U24DF # CIRCLED LATIN SMALL LETTER P ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0071, 0x0029, 0, 0}, 0x24e0 }, // U24E0 # CIRCLED LATIN SMALL LETTER Q ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0072, 0x0029, 0, 0}, 0x24e1 }, // U24E1 # CIRCLED LATIN SMALL LETTER R ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0073, 0x0029, 0, 0}, 0x24e2 }, // U24E2 # CIRCLED LATIN SMALL LETTER S ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0074, 0x0029, 0, 0}, 0x24e3 }, // U24E3 # CIRCLED LATIN SMALL LETTER T ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0075, 0x0029, 0, 0}, 0x24e4 }, // U24E4 # CIRCLED LATIN SMALL LETTER U ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0076, 0x0029, 0, 0}, 0x24e5 }, // U24E5 # CIRCLED LATIN SMALL LETTER V ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0077, 0x0029, 0, 0}, 0x24e6 }, // U24E6 # CIRCLED LATIN SMALL LETTER W ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0078, 0x0029, 0, 0}, 0x24e7 }, // U24E7 # CIRCLED LATIN SMALL LETTER X ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0079, 0x0029, 0, 0}, 0x24e8 }, // U24E8 # CIRCLED LATIN SMALL LETTER Y ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x007a, 0x0029, 0, 0}, 0x24e9 }, // U24E9 # CIRCLED LATIN SMALL LETTER Z ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0391, 0, 0, 0}, 0x1f09 }, // U1F09 # GREEK CAPITAL LETTER ALPHA WITH DASIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0395, 0, 0, 0}, 0x1f19 }, // U1F19 # GREEK CAPITAL LETTER EPSILON WITH DASIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0397, 0, 0, 0}, 0x1f29 }, // U1F29 # GREEK CAPITAL LETTER ETA WITH DASIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0399, 0, 0, 0}, 0x1f39 }, // U1F39 # GREEK CAPITAL LETTER IOTA WITH DASIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x039f, 0, 0, 0}, 0x1f49 }, // U1F49 # GREEK CAPITAL LETTER OMICRON WITH DASIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x03a1, 0, 0, 0}, 0x1fec }, // U1FEC # GREEK CAPITAL LETTER RHO WITH DASIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x03a5, 0, 0, 0}, 0x1f59 }, // U1F59 # GREEK CAPITAL LETTER UPSILON WITH DASIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x03a9, 0, 0, 0}, 0x1f69 }, // U1F69 # GREEK CAPITAL LETTER OMEGA WITH DASIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x03b1, 0, 0, 0}, 0x1f01 }, // U1F01 # GREEK SMALL LETTER ALPHA WITH DASIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x03b5, 0, 0, 0}, 0x1f11 }, // U1F11 # GREEK SMALL LETTER EPSILON WITH DASIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x03b7, 0, 0, 0}, 0x1f21 }, // U1F21 # GREEK SMALL LETTER ETA WITH DASIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x03b9, 0, 0, 0}, 0x1f31 }, // U1F31 # GREEK SMALL LETTER IOTA WITH DASIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x03bf, 0, 0, 0}, 0x1f41 }, // U1F41 # GREEK SMALL LETTER OMICRON WITH DASIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x03c1, 0, 0, 0}, 0x1fe5 }, // U1FE5 # GREEK SMALL LETTER RHO WITH DASIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x03c5, 0, 0, 0}, 0x1f51 }, // U1F51 # GREEK SMALL LETTER UPSILON WITH DASIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x03c9, 0, 0, 0}, 0x1f61 }, // U1F61 # GREEK SMALL LETTER OMEGA WITH DASIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x1100, 0x0029, 0, 0}, 0x3260 }, // U3260 # CIRCLED HANGUL KIYEOK ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x1100, 0x1161, 0x0029, 0}, 0x326e }, // U326E # CIRCLED HANGUL KIYEOK A ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x1102, 0x0029, 0, 0}, 0x3261 }, // U3261 # CIRCLED HANGUL NIEUN ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x1102, 0x1161, 0x0029, 0}, 0x326f }, // U326F # CIRCLED HANGUL NIEUN A ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x1103, 0x0029, 0, 0}, 0x3262 }, // U3262 # CIRCLED HANGUL TIKEUT ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x1103, 0x1161, 0x0029, 0}, 0x3270 }, // U3270 # CIRCLED HANGUL TIKEUT A ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x1105, 0x0029, 0, 0}, 0x3263 }, // U3263 # CIRCLED HANGUL RIEUL ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x1105, 0x1161, 0x0029, 0}, 0x3271 }, // U3271 # CIRCLED HANGUL RIEUL A ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x1106, 0x0029, 0, 0}, 0x3264 }, // U3264 # CIRCLED HANGUL MIEUM ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x1106, 0x1161, 0x0029, 0}, 0x3272 }, // U3272 # CIRCLED HANGUL MIEUM A ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x1107, 0x0029, 0, 0}, 0x3265 }, // U3265 # CIRCLED HANGUL PIEUP ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x1107, 0x1161, 0x0029, 0}, 0x3273 }, // U3273 # CIRCLED HANGUL PIEUP A ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x1109, 0x0029, 0, 0}, 0x3266 }, // U3266 # CIRCLED HANGUL SIOS ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x1109, 0x1161, 0x0029, 0}, 0x3274 }, // U3274 # CIRCLED HANGUL SIOS A ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x110b, 0x0029, 0, 0}, 0x3267 }, // U3267 # CIRCLED HANGUL IEUNG ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x110b, 0x1161, 0x0029, 0}, 0x3275 }, // U3275 # CIRCLED HANGUL IEUNG A ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x110c, 0x0029, 0, 0}, 0x3268 }, // U3268 # CIRCLED HANGUL CIEUC ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x110c, 0x1161, 0x0029, 0}, 0x3276 }, // U3276 # CIRCLED HANGUL CIEUC A ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x110e, 0x0029, 0, 0}, 0x3269 }, // U3269 # CIRCLED HANGUL CHIEUCH ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x110e, 0x1161, 0x0029, 0}, 0x3277 }, // U3277 # CIRCLED HANGUL CHIEUCH A ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x110f, 0x0029, 0, 0}, 0x326a }, // U326A # CIRCLED HANGUL KHIEUKH ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x110f, 0x1161, 0x0029, 0}, 0x3278 }, // U3278 # CIRCLED HANGUL KHIEUKH A ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x1110, 0x0029, 0, 0}, 0x326b }, // U326B # CIRCLED HANGUL THIEUTH ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x1110, 0x1161, 0x0029, 0}, 0x3279 }, // U3279 # CIRCLED HANGUL THIEUTH A ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x1111, 0x0029, 0, 0}, 0x326c }, // U326C # CIRCLED HANGUL PHIEUPH ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x1111, 0x1161, 0x0029, 0}, 0x327a }, // U327A # CIRCLED HANGUL PHIEUPH A ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x1112, 0x0029, 0, 0}, 0x326d }, // U326D # CIRCLED HANGUL HIEUH ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x1112, 0x1161, 0x0029, 0}, 0x327b }, // U327B # CIRCLED HANGUL HIEUH A ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x30a2, 0x0029, 0, 0}, 0x32d0 }, // U32D0 # CIRCLED KATAKANA A ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x30a4, 0x0029, 0, 0}, 0x32d1 }, // U32D1 # CIRCLED KATAKANA I ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x30a6, 0x0029, 0, 0}, 0x32d2 }, // U32D2 # CIRCLED KATAKANA U ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x30a8, 0x0029, 0, 0}, 0x32d3 }, // U32D3 # CIRCLED KATAKANA E ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x30aa, 0x0029, 0, 0}, 0x32d4 }, // U32D4 # CIRCLED KATAKANA O ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x30ab, 0x0029, 0, 0}, 0x32d5 }, // U32D5 # CIRCLED KATAKANA KA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x30ad, 0x0029, 0, 0}, 0x32d6 }, // U32D6 # CIRCLED KATAKANA KI ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x30af, 0x0029, 0, 0}, 0x32d7 }, // U32D7 # CIRCLED KATAKANA KU ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x30b1, 0x0029, 0, 0}, 0x32d8 }, // U32D8 # CIRCLED KATAKANA KE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x30b3, 0x0029, 0, 0}, 0x32d9 }, // U32D9 # CIRCLED KATAKANA KO ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x30b5, 0x0029, 0, 0}, 0x32da }, // U32DA # CIRCLED KATAKANA SA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x30b7, 0x0029, 0, 0}, 0x32db }, // U32DB # CIRCLED KATAKANA SI ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x30b9, 0x0029, 0, 0}, 0x32dc }, // U32DC # CIRCLED KATAKANA SU ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x30bb, 0x0029, 0, 0}, 0x32dd }, // U32DD # CIRCLED KATAKANA SE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x30bd, 0x0029, 0, 0}, 0x32de }, // U32DE # CIRCLED KATAKANA SO ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x30bf, 0x0029, 0, 0}, 0x32df }, // U32DF # CIRCLED KATAKANA TA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x30c1, 0x0029, 0, 0}, 0x32e0 }, // U32E0 # CIRCLED KATAKANA TI ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x30c4, 0x0029, 0, 0}, 0x32e1 }, // U32E1 # CIRCLED KATAKANA TU ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x30c6, 0x0029, 0, 0}, 0x32e2 }, // U32E2 # CIRCLED KATAKANA TE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x30c8, 0x0029, 0, 0}, 0x32e3 }, // U32E3 # CIRCLED KATAKANA TO ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x30ca, 0x0029, 0, 0}, 0x32e4 }, // U32E4 # CIRCLED KATAKANA NA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x30cb, 0x0029, 0, 0}, 0x32e5 }, // U32E5 # CIRCLED KATAKANA NI ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x30cc, 0x0029, 0, 0}, 0x32e6 }, // U32E6 # CIRCLED KATAKANA NU ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x30cd, 0x0029, 0, 0}, 0x32e7 }, // U32E7 # CIRCLED KATAKANA NE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x30ce, 0x0029, 0, 0}, 0x32e8 }, // U32E8 # CIRCLED KATAKANA NO ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x30cf, 0x0029, 0, 0}, 0x32e9 }, // U32E9 # CIRCLED KATAKANA HA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x30d2, 0x0029, 0, 0}, 0x32ea }, // U32EA # CIRCLED KATAKANA HI ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x30d5, 0x0029, 0, 0}, 0x32eb }, // U32EB # CIRCLED KATAKANA HU ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x30d8, 0x0029, 0, 0}, 0x32ec }, // U32EC # CIRCLED KATAKANA HE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x30db, 0x0029, 0, 0}, 0x32ed }, // U32ED # CIRCLED KATAKANA HO ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x30de, 0x0029, 0, 0}, 0x32ee }, // U32EE # CIRCLED KATAKANA MA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x30df, 0x0029, 0, 0}, 0x32ef }, // U32EF # CIRCLED KATAKANA MI ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x30e0, 0x0029, 0, 0}, 0x32f0 }, // U32F0 # CIRCLED KATAKANA MU ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x30e1, 0x0029, 0, 0}, 0x32f1 }, // U32F1 # CIRCLED KATAKANA ME ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x30e2, 0x0029, 0, 0}, 0x32f2 }, // U32F2 # CIRCLED KATAKANA MO ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x30e4, 0x0029, 0, 0}, 0x32f3 }, // U32F3 # CIRCLED KATAKANA YA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x30e6, 0x0029, 0, 0}, 0x32f4 }, // U32F4 # CIRCLED KATAKANA YU ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x30e8, 0x0029, 0, 0}, 0x32f5 }, // U32F5 # CIRCLED KATAKANA YO ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x30e9, 0x0029, 0, 0}, 0x32f6 }, // U32F6 # CIRCLED KATAKANA RA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x30ea, 0x0029, 0, 0}, 0x32f7 }, // U32F7 # CIRCLED KATAKANA RI ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x30eb, 0x0029, 0, 0}, 0x32f8 }, // U32F8 # CIRCLED KATAKANA RU ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x30ec, 0x0029, 0, 0}, 0x32f9 }, // U32F9 # CIRCLED KATAKANA RE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x30ed, 0x0029, 0, 0}, 0x32fa }, // U32FA # CIRCLED KATAKANA RO ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x30ef, 0x0029, 0, 0}, 0x32fb }, // U32FB # CIRCLED KATAKANA WA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x30f0, 0x0029, 0, 0}, 0x32fc }, // U32FC # CIRCLED KATAKANA WI ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x30f1, 0x0029, 0, 0}, 0x32fd }, // U32FD # CIRCLED KATAKANA WE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x30f2, 0x0029, 0, 0}, 0x32fe }, // U32FE # CIRCLED KATAKANA WO ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x4e00, 0x0029, 0, 0}, 0x3280 }, // U3280 # CIRCLED IDEOGRAPH ONE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x4e03, 0x0029, 0, 0}, 0x3286 }, // U3286 # CIRCLED IDEOGRAPH SEVEN ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x4e09, 0x0029, 0, 0}, 0x3282 }, // U3282 # CIRCLED IDEOGRAPH THREE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x4e0a, 0x0029, 0, 0}, 0x32a4 }, // U32A4 # CIRCLED IDEOGRAPH HIGH ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x4e0b, 0x0029, 0, 0}, 0x32a6 }, // U32A6 # CIRCLED IDEOGRAPH LOW ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x4e2d, 0x0029, 0, 0}, 0x32a5 }, // U32A5 # CIRCLED IDEOGRAPH CENTRE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x4e5d, 0x0029, 0, 0}, 0x3288 }, // U3288 # CIRCLED IDEOGRAPH NINE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x4e8c, 0x0029, 0, 0}, 0x3281 }, // U3281 # CIRCLED IDEOGRAPH TWO ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x4e94, 0x0029, 0, 0}, 0x3284 }, // U3284 # CIRCLED IDEOGRAPH FIVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x4f01, 0x0029, 0, 0}, 0x32ad }, // U32AD # CIRCLED IDEOGRAPH ENTERPRISE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x4f11, 0x0029, 0, 0}, 0x32a1 }, // U32A1 # CIRCLED IDEOGRAPH REST ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x512a, 0x0029, 0, 0}, 0x329d }, // U329D # CIRCLED IDEOGRAPH EXCELLENT ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x516b, 0x0029, 0, 0}, 0x3287 }, // U3287 # CIRCLED IDEOGRAPH EIGHT ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x516d, 0x0029, 0, 0}, 0x3285 }, // U3285 # CIRCLED IDEOGRAPH SIX ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x5199, 0x0029, 0, 0}, 0x32a2 }, // U32A2 # CIRCLED IDEOGRAPH COPY ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x52b4, 0x0029, 0, 0}, 0x3298 }, // U3298 # CIRCLED IDEOGRAPH LABOR ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x533b, 0x0029, 0, 0}, 0x32a9 }, // U32A9 # CIRCLED IDEOGRAPH MEDICINE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x5341, 0x0029, 0, 0}, 0x3289 }, // U3289 # CIRCLED IDEOGRAPH TEN ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x5354, 0x0029, 0, 0}, 0x32af }, // U32AF # CIRCLED IDEOGRAPH ALLIANCE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x5370, 0x0029, 0, 0}, 0x329e }, // U329E # CIRCLED IDEOGRAPH PRINT ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x53f3, 0x0029, 0, 0}, 0x32a8 }, // U32A8 # CIRCLED IDEOGRAPH RIGHT ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x540d, 0x0029, 0, 0}, 0x3294 }, // U3294 # CIRCLED IDEOGRAPH NAME ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x56db, 0x0029, 0, 0}, 0x3283 }, // U3283 # CIRCLED IDEOGRAPH FOUR ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x571f, 0x0029, 0, 0}, 0x328f }, // U328F # CIRCLED IDEOGRAPH EARTH ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x591c, 0x0029, 0, 0}, 0x32b0 }, // U32B0 # CIRCLED IDEOGRAPH NIGHT ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x5973, 0x0029, 0, 0}, 0x329b }, // U329B # CIRCLED IDEOGRAPH FEMALE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x5b66, 0x0029, 0, 0}, 0x32ab }, // U32AB # CIRCLED IDEOGRAPH STUDY ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x5b97, 0x0029, 0, 0}, 0x32aa }, // U32AA # CIRCLED IDEOGRAPH RELIGION ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x5de6, 0x0029, 0, 0}, 0x32a7 }, // U32A7 # CIRCLED IDEOGRAPH LEFT ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x65e5, 0x0029, 0, 0}, 0x3290 }, // U3290 # CIRCLED IDEOGRAPH SUN ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x6708, 0x0029, 0, 0}, 0x328a }, // U328A # CIRCLED IDEOGRAPH MOON ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x6709, 0x0029, 0, 0}, 0x3292 }, // U3292 # CIRCLED IDEOGRAPH HAVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x6728, 0x0029, 0, 0}, 0x328d }, // U328D # CIRCLED IDEOGRAPH WOOD ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x682a, 0x0029, 0, 0}, 0x3291 }, // U3291 # CIRCLED IDEOGRAPH STOCK ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x6b63, 0x0029, 0, 0}, 0x32a3 }, // U32A3 # CIRCLED IDEOGRAPH CORRECT ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x6c34, 0x0029, 0, 0}, 0x328c }, // U328C # CIRCLED IDEOGRAPH WATER ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x6ce8, 0x0029, 0, 0}, 0x329f }, // U329F # CIRCLED IDEOGRAPH ATTENTION ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x706b, 0x0029, 0, 0}, 0x328b }, // U328B # CIRCLED IDEOGRAPH FIRE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x7279, 0x0029, 0, 0}, 0x3295 }, // U3295 # CIRCLED IDEOGRAPH SPECIAL ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x7537, 0x0029, 0, 0}, 0x329a }, // U329A # CIRCLED IDEOGRAPH MALE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x76e3, 0x0029, 0, 0}, 0x32ac }, // U32AC # CIRCLED IDEOGRAPH SUPERVISE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x793e, 0x0029, 0, 0}, 0x3293 }, // U3293 # CIRCLED IDEOGRAPH SOCIETY ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x795d, 0x0029, 0, 0}, 0x3297 }, // U3297 # CIRCLED IDEOGRAPH CONGRATULATION ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x79d8, 0x0029, 0, 0}, 0x3299 }, // U3299 # CIRCLED IDEOGRAPH SECRET ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x8ca1, 0x0029, 0, 0}, 0x3296 }, // U3296 # CIRCLED IDEOGRAPH FINANCIAL ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x8cc7, 0x0029, 0, 0}, 0x32ae }, // U32AE # CIRCLED IDEOGRAPH RESOURCE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x9069, 0x0029, 0, 0}, 0x329c }, // U329C # CIRCLED IDEOGRAPH SUITABLE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x91d1, 0x0029, 0, 0}, 0x328e }, // U328E # CIRCLED IDEOGRAPH METAL ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x9805, 0x0029, 0, 0}, 0x32a0 }, // U32A0 # CIRCLED IDEOGRAPH ITEM ++ { {UNITIZE(Qt::Key_Multi_key), 0x0029, 0x0029, 0, 0, 0}, 0x005d }, // bracketright ++ { {UNITIZE(Qt::Key_Multi_key), 0x0029, 0x002d, 0, 0, 0}, 0x007d }, // braceright ++ { {UNITIZE(Qt::Key_Multi_key), 0x0029, 0x0391, 0, 0, 0}, 0x1f08 }, // U1F08 # GREEK CAPITAL LETTER ALPHA WITH PSILI ++ { {UNITIZE(Qt::Key_Multi_key), 0x0029, 0x0395, 0, 0, 0}, 0x1f18 }, // U1F18 # GREEK CAPITAL LETTER EPSILON WITH PSILI ++ { {UNITIZE(Qt::Key_Multi_key), 0x0029, 0x0397, 0, 0, 0}, 0x1f28 }, // U1F28 # GREEK CAPITAL LETTER ETA WITH PSILI ++ { {UNITIZE(Qt::Key_Multi_key), 0x0029, 0x0399, 0, 0, 0}, 0x1f38 }, // U1F38 # GREEK CAPITAL LETTER IOTA WITH PSILI ++ { {UNITIZE(Qt::Key_Multi_key), 0x0029, 0x039f, 0, 0, 0}, 0x1f48 }, // U1F48 # GREEK CAPITAL LETTER OMICRON WITH PSILI ++ { {UNITIZE(Qt::Key_Multi_key), 0x0029, 0x03a9, 0, 0, 0}, 0x1f68 }, // U1F68 # GREEK CAPITAL LETTER OMEGA WITH PSILI ++ { {UNITIZE(Qt::Key_Multi_key), 0x0029, 0x03b1, 0, 0, 0}, 0x1f00 }, // U1F00 # GREEK SMALL LETTER ALPHA WITH PSILI ++ { {UNITIZE(Qt::Key_Multi_key), 0x0029, 0x03b5, 0, 0, 0}, 0x1f10 }, // U1F10 # GREEK SMALL LETTER EPSILON WITH PSILI ++ { {UNITIZE(Qt::Key_Multi_key), 0x0029, 0x03b7, 0, 0, 0}, 0x1f20 }, // U1F20 # GREEK SMALL LETTER ETA WITH PSILI ++ { {UNITIZE(Qt::Key_Multi_key), 0x0029, 0x03b9, 0, 0, 0}, 0x1f30 }, // U1F30 # GREEK SMALL LETTER IOTA WITH PSILI ++ { {UNITIZE(Qt::Key_Multi_key), 0x0029, 0x03bf, 0, 0, 0}, 0x1f40 }, // U1F40 # GREEK SMALL LETTER OMICRON WITH PSILI ++ { {UNITIZE(Qt::Key_Multi_key), 0x0029, 0x03c1, 0, 0, 0}, 0x1fe4 }, // U1FE4 # GREEK SMALL LETTER RHO WITH PSILI ++ { {UNITIZE(Qt::Key_Multi_key), 0x0029, 0x03c5, 0, 0, 0}, 0x1f50 }, // U1F50 # GREEK SMALL LETTER UPSILON WITH PSILI ++ { {UNITIZE(Qt::Key_Multi_key), 0x0029, 0x03c9, 0, 0, 0}, 0x1f60 }, // U1F60 # GREEK SMALL LETTER OMEGA WITH PSILI ++ { {UNITIZE(Qt::Key_Multi_key), 0x002b, 0x002b, 0, 0, 0}, 0x0023 }, // numbersign ++ { {UNITIZE(Qt::Key_Multi_key), 0x002b, 0x002d, 0, 0, 0}, 0x00b1 }, // plusminus ++ { {UNITIZE(Qt::Key_Multi_key), 0x002b, 0x004f, 0, 0, 0}, 0x01a0 }, // U01A0 # LATIN CAPITAL LETTER O WITH HORN ++ { {UNITIZE(Qt::Key_Multi_key), 0x002b, 0x0055, 0, 0, 0}, 0x01af }, // U01AF # LATIN CAPITAL LETTER U WITH HORN ++ { {UNITIZE(Qt::Key_Multi_key), 0x002b, 0x006f, 0, 0, 0}, 0x01a1 }, // U01A1 # LATIN SMALL LETTER O WITH HORN ++ { {UNITIZE(Qt::Key_Multi_key), 0x002b, 0x0075, 0, 0, 0}, 0x01b0 }, // U01B0 # LATIN SMALL LETTER U WITH HORN ++ { {UNITIZE(Qt::Key_Multi_key), 0x002c, 0x0020, 0, 0, 0}, 0x00b8 }, // cedilla ++ { {UNITIZE(Qt::Key_Multi_key), 0x002c, 0x0022, 0, 0, 0}, 0x201e }, // U201e # DOUBLE LOW-9 QUOTATION MARK ++ { {UNITIZE(Qt::Key_Multi_key), 0x002c, 0x0027, 0, 0, 0}, 0x201a }, // U201a # SINGLE LOW-9 QUOTATION MARK ++ { {UNITIZE(Qt::Key_Multi_key), 0x002c, 0x002d, 0, 0, 0}, 0x00ac }, // U00AC # NOT SIGN ++ { {UNITIZE(Qt::Key_Multi_key), 0x002c, 0x0043, 0, 0, 0}, 0x00c7 }, // U00C7 # LATIN CAPITAL LETTER C WITH CEDILLA ++ { {UNITIZE(Qt::Key_Multi_key), 0x002c, 0x0044, 0, 0, 0}, 0x1e10 }, // U1E10 # LATIN CAPITAL LETTER D WITH CEDILLA ++ { {UNITIZE(Qt::Key_Multi_key), 0x002c, 0x0045, 0, 0, 0}, 0x0228 }, // U0228 # LATIN CAPITAL LETTER E WITH CEDILLA ++ { {UNITIZE(Qt::Key_Multi_key), 0x002c, 0x0047, 0, 0, 0}, 0x0122 }, // U0122 # LATIN CAPITAL LETTER G WITH CEDILLA ++ { {UNITIZE(Qt::Key_Multi_key), 0x002c, 0x0048, 0, 0, 0}, 0x1e28 }, // U1E28 # LATIN CAPITAL LETTER H WITH CEDILLA ++ { {UNITIZE(Qt::Key_Multi_key), 0x002c, 0x004b, 0, 0, 0}, 0x0136 }, // U0136 # LATIN CAPITAL LETTER K WITH CEDILLA ++ { {UNITIZE(Qt::Key_Multi_key), 0x002c, 0x004c, 0, 0, 0}, 0x013b }, // U013B # LATIN CAPITAL LETTER L WITH CEDILLA ++ { {UNITIZE(Qt::Key_Multi_key), 0x002c, 0x004e, 0, 0, 0}, 0x0145 }, // U0145 # LATIN CAPITAL LETTER N WITH CEDILLA ++ { {UNITIZE(Qt::Key_Multi_key), 0x002c, 0x0052, 0, 0, 0}, 0x0156 }, // U0156 # LATIN CAPITAL LETTER R WITH CEDILLA ++ { {UNITIZE(Qt::Key_Multi_key), 0x002c, 0x0053, 0, 0, 0}, 0x015e }, // U015E # LATIN CAPITAL LETTER S WITH CEDILLA ++ { {UNITIZE(Qt::Key_Multi_key), 0x002c, 0x0054, 0, 0, 0}, 0x0162 }, // U0162 # LATIN CAPITAL LETTER T WITH CEDILLA ++ { {UNITIZE(Qt::Key_Multi_key), 0x002c, 0x0063, 0, 0, 0}, 0x00e7 }, // U00E7 # LATIN SMALL LETTER C WITH CEDILLA ++ { {UNITIZE(Qt::Key_Multi_key), 0x002c, 0x0064, 0, 0, 0}, 0x1e11 }, // U1E11 # LATIN SMALL LETTER D WITH CEDILLA ++ { {UNITIZE(Qt::Key_Multi_key), 0x002c, 0x0065, 0, 0, 0}, 0x0229 }, // U0229 # LATIN SMALL LETTER E WITH CEDILLA ++ { {UNITIZE(Qt::Key_Multi_key), 0x002c, 0x0067, 0, 0, 0}, 0x0123 }, // U0123 # LATIN SMALL LETTER G WITH CEDILLA ++ { {UNITIZE(Qt::Key_Multi_key), 0x002c, 0x0068, 0, 0, 0}, 0x1e29 }, // U1E29 # LATIN SMALL LETTER H WITH CEDILLA ++ { {UNITIZE(Qt::Key_Multi_key), 0x002c, 0x006b, 0, 0, 0}, 0x0137 }, // U0137 # LATIN SMALL LETTER K WITH CEDILLA ++ { {UNITIZE(Qt::Key_Multi_key), 0x002c, 0x006c, 0, 0, 0}, 0x013c }, // U013C # LATIN SMALL LETTER L WITH CEDILLA ++ { {UNITIZE(Qt::Key_Multi_key), 0x002c, 0x006e, 0, 0, 0}, 0x0146 }, // U0146 # LATIN SMALL LETTER N WITH CEDILLA ++ { {UNITIZE(Qt::Key_Multi_key), 0x002c, 0x0072, 0, 0, 0}, 0x0157 }, // U0157 # LATIN SMALL LETTER R WITH CEDILLA ++ { {UNITIZE(Qt::Key_Multi_key), 0x002c, 0x0073, 0, 0, 0}, 0x015f }, // U015F # LATIN SMALL LETTER S WITH CEDILLA ++ { {UNITIZE(Qt::Key_Multi_key), 0x002c, 0x0074, 0, 0, 0}, 0x0163 }, // U0163 # LATIN SMALL LETTER T WITH CEDILLA ++ { {UNITIZE(Qt::Key_Multi_key), 0x002d, 0x0020, 0, 0, 0}, 0x007e }, // asciitilde ++ { {UNITIZE(Qt::Key_Multi_key), 0x002d, 0x0028, 0, 0, 0}, 0x007b }, // braceleft ++ { {UNITIZE(Qt::Key_Multi_key), 0x002d, 0x0029, 0, 0, 0}, 0x007d }, // braceright ++ { {UNITIZE(Qt::Key_Multi_key), 0x002d, 0x002c, 0, 0, 0}, 0x00ac }, // U00AC # NOT SIGN ++ { {UNITIZE(Qt::Key_Multi_key), 0x002d, 0x002d, 0x002d, 0, 0}, 0x2014 }, // U2014 # EM DASH ++ { {UNITIZE(Qt::Key_Multi_key), 0x002d, 0x002d, 0x002e, 0, 0}, 0x2013 }, // U2013 # EN DASH ++ { {UNITIZE(Qt::Key_Multi_key), 0x002d, 0x003a, 0, 0, 0}, 0x00f7 }, // U00F7 # DIVISION SIGN ++ { {UNITIZE(Qt::Key_Multi_key), 0x002d, 0x0044, 0, 0, 0}, 0x0110 }, // Dstroke ++ { {UNITIZE(Qt::Key_Multi_key), 0x002d, 0x004c, 0, 0, 0}, 0x00a3 }, // U00a3 # POUND SIGN ++ { {UNITIZE(Qt::Key_Multi_key), 0x002d, 0x0064, 0, 0, 0}, 0x0111 }, // dstroke ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x002e, 0x0000, 0x0053, 0, 0}, 0x1e68 }, // U1E68 # LATIN CAPITAL LETTER S WITH DOT BELOW AND DOT ABOVE ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x002e, 0x0000, 0x0053, 0, 0}, 0x1e64 }, // U1E64 # LATIN CAPITAL LETTER S WITH ACUTE AND DOT ABOVE ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x002e, 0x0000, 0x0073, 0, 0}, 0x1e69 }, // U1E69 # LATIN SMALL LETTER S WITH DOT BELOW AND DOT ABOVE ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x002e, 0x0000, 0x0073, 0, 0}, 0x1e65 }, // U1E65 # LATIN SMALL LETTER S WITH ACUTE AND DOT ABOVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x002e, 0x0021, 0x0053, 0, 0}, 0x1e68 }, // U1E68 # LATIN CAPITAL LETTER S WITH DOT BELOW AND DOT ABOVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x002e, 0x0021, 0x0073, 0, 0}, 0x1e69 }, // U1E69 # LATIN SMALL LETTER S WITH DOT BELOW AND DOT ABOVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x002e, 0x0027, 0x0053, 0, 0}, 0x1e64 }, // U1E64 # LATIN CAPITAL LETTER S WITH ACUTE AND DOT ABOVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x002e, 0x0027, 0x0073, 0, 0}, 0x1e65 }, // U1E65 # LATIN SMALL LETTER S WITH ACUTE AND DOT ABOVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x002e, 0x002e, 0, 0, 0}, 0x00b7 }, // U00B7 ++ { {UNITIZE(Qt::Key_Multi_key), 0x002e, 0x003c, 0, 0, 0}, 0x2039 }, // U2039 ++ { {UNITIZE(Qt::Key_Multi_key), 0x002e, 0x003e, 0, 0, 0}, 0x203a }, // U203a ++ { {UNITIZE(Qt::Key_Multi_key), 0x002e, 0x0041, 0, 0, 0}, 0x0226 }, // U0226 # LATIN CAPITAL LETTER A WITH DOT ABOVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x002e, 0x0042, 0, 0, 0}, 0x1e02 }, // U1E02 # LATIN CAPITAL LETTER B WITH DOT ABOVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x002e, 0x0043, 0, 0, 0}, 0x010a }, // U010A # LATIN CAPITAL LETTER C WITH DOT ABOVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x002e, 0x0044, 0, 0, 0}, 0x1e0a }, // U1E0A # LATIN CAPITAL LETTER D WITH DOT ABOVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x002e, 0x0045, 0, 0, 0}, 0x0116 }, // U0116 # LATIN CAPITAL LETTER E WITH DOT ABOVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x002e, 0x0046, 0, 0, 0}, 0x1e1e }, // U1E1E # LATIN CAPITAL LETTER F WITH DOT ABOVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x002e, 0x0047, 0, 0, 0}, 0x0120 }, // U0120 # LATIN CAPITAL LETTER G WITH DOT ABOVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x002e, 0x0048, 0, 0, 0}, 0x1e22 }, // U1E22 # LATIN CAPITAL LETTER H WITH DOT ABOVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x002e, 0x0049, 0, 0, 0}, 0x0130 }, // U0130 # LATIN CAPITAL LETTER I WITH DOT ABOVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x002e, 0x004d, 0, 0, 0}, 0x1e40 }, // U1E40 # LATIN CAPITAL LETTER M WITH DOT ABOVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x002e, 0x004e, 0, 0, 0}, 0x1e44 }, // U1E44 # LATIN CAPITAL LETTER N WITH DOT ABOVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x002e, 0x004f, 0, 0, 0}, 0x022e }, // U022E # LATIN CAPITAL LETTER O WITH DOT ABOVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x002e, 0x0050, 0, 0, 0}, 0x1e56 }, // U1E56 # LATIN CAPITAL LETTER P WITH DOT ABOVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x002e, 0x0052, 0, 0, 0}, 0x1e58 }, // U1E58 # LATIN CAPITAL LETTER R WITH DOT ABOVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x002e, 0x0053, 0, 0, 0}, 0x1e60 }, // U1E60 # LATIN CAPITAL LETTER S WITH DOT ABOVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x002e, 0x0054, 0, 0, 0}, 0x1e6a }, // U1E6A # LATIN CAPITAL LETTER T WITH DOT ABOVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x002e, 0x0057, 0, 0, 0}, 0x1e86 }, // U1E86 # LATIN CAPITAL LETTER W WITH DOT ABOVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x002e, 0x0058, 0, 0, 0}, 0x1e8a }, // U1E8A # LATIN CAPITAL LETTER X WITH DOT ABOVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x002e, 0x0059, 0, 0, 0}, 0x1e8e }, // U1E8E # LATIN CAPITAL LETTER Y WITH DOT ABOVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x002e, 0x005a, 0, 0, 0}, 0x017b }, // U017B # LATIN CAPITAL LETTER Z WITH DOT ABOVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x002e, 0x0061, 0, 0, 0}, 0x0227 }, // U0227 # LATIN SMALL LETTER A WITH DOT ABOVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x002e, 0x0062, 0, 0, 0}, 0x1e03 }, // U1E03 # LATIN SMALL LETTER B WITH DOT ABOVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x002e, 0x0063, 0, 0, 0}, 0x010b }, // U010B # LATIN SMALL LETTER C WITH DOT ABOVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x002e, 0x0063, 0x0053, 0, 0}, 0x1e66 }, // U1E66 # LATIN CAPITAL LETTER S WITH CARON AND DOT ABOVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x002e, 0x0063, 0x0073, 0, 0}, 0x1e67 }, // U1E67 # LATIN SMALL LETTER S WITH CARON AND DOT ABOVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x002e, 0x0064, 0, 0, 0}, 0x1e0b }, // U1E0B # LATIN SMALL LETTER D WITH DOT ABOVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x002e, 0x0065, 0, 0, 0}, 0x0117 }, // U0117 # LATIN SMALL LETTER E WITH DOT ABOVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x002e, 0x0066, 0, 0, 0}, 0x1e1f }, // U1E1F # LATIN SMALL LETTER F WITH DOT ABOVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x002e, 0x0067, 0, 0, 0}, 0x0121 }, // U0121 # LATIN SMALL LETTER G WITH DOT ABOVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x002e, 0x0068, 0, 0, 0}, 0x1e23 }, // U1E23 # LATIN SMALL LETTER H WITH DOT ABOVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x002e, 0x006d, 0, 0, 0}, 0x1e41 }, // U1E41 # LATIN SMALL LETTER M WITH DOT ABOVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x002e, 0x006e, 0, 0, 0}, 0x1e45 }, // U1E45 # LATIN SMALL LETTER N WITH DOT ABOVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x002e, 0x006f, 0, 0, 0}, 0x022f }, // U022F # LATIN SMALL LETTER O WITH DOT ABOVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x002e, 0x0070, 0, 0, 0}, 0x1e57 }, // U1E57 # LATIN SMALL LETTER P WITH DOT ABOVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x002e, 0x0072, 0, 0, 0}, 0x1e59 }, // U1E59 # LATIN SMALL LETTER R WITH DOT ABOVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x002e, 0x0073, 0, 0, 0}, 0x1e61 }, // U1E61 # LATIN SMALL LETTER S WITH DOT ABOVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x002e, 0x0074, 0, 0, 0}, 0x1e6b }, // U1E6B # LATIN SMALL LETTER T WITH DOT ABOVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x002e, 0x0077, 0, 0, 0}, 0x1e87 }, // U1E87 # LATIN SMALL LETTER W WITH DOT ABOVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x002e, 0x0078, 0, 0, 0}, 0x1e8b }, // U1E8B # LATIN SMALL LETTER X WITH DOT ABOVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x002e, 0x0079, 0, 0, 0}, 0x1e8f }, // U1E8F # LATIN SMALL LETTER Y WITH DOT ABOVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x002e, 0x007a, 0, 0, 0}, 0x017c }, // U017C # LATIN SMALL LETTER Z WITH DOT ABOVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x002e, 0x00b4, 0x0053, 0, 0}, 0x1e64 }, // U1E64 # LATIN CAPITAL LETTER S WITH ACUTE AND DOT ABOVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x002e, 0x00b4, 0x0073, 0, 0}, 0x1e65 }, // U1E65 # LATIN SMALL LETTER S WITH ACUTE AND DOT ABOVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x002e, 0x015a, 0, 0, 0}, 0x1e64 }, // U1E64 # LATIN CAPITAL LETTER S WITH ACUTE AND DOT ABOVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x002e, 0x015b, 0, 0, 0}, 0x1e65 }, // U1E65 # LATIN SMALL LETTER S WITH ACUTE AND DOT ABOVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x002e, 0x0160, 0, 0, 0}, 0x1e66 }, // U1E66 # LATIN CAPITAL LETTER S WITH CARON AND DOT ABOVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x002e, 0x0161, 0, 0, 0}, 0x1e67 }, // U1E67 # LATIN SMALL LETTER S WITH CARON AND DOT ABOVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x002e, 0x017f, 0, 0, 0}, 0x1e9b }, // U1E9B # LATIN SMALL LETTER LONG S WITH DOT ABOVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x002e, 0x1e62, 0, 0, 0}, 0x1e68 }, // U1E68 # LATIN CAPITAL LETTER S WITH DOT BELOW AND DOT ABOVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x002e, 0x1e63, 0, 0, 0}, 0x1e69 }, // U1E69 # LATIN SMALL LETTER S WITH DOT BELOW AND DOT ABOVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x002e, UNITIZE(Qt::Key_Dead_Acute), 0x0053, 0, 0}, 0x1e64 }, // U1E64 # LATIN CAPITAL LETTER S WITH ACUTE AND DOT ABOVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x002e, UNITIZE(Qt::Key_Dead_Acute), 0x0073, 0, 0}, 0x1e65 }, // U1E65 # LATIN SMALL LETTER S WITH ACUTE AND DOT ABOVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x002e, UNITIZE(Qt::Key_Dead_Caron), 0x0053, 0, 0}, 0x1e66 }, // U1E66 # LATIN CAPITAL LETTER S WITH CARON AND DOT ABOVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x002e, UNITIZE(Qt::Key_Dead_Caron), 0x0073, 0, 0}, 0x1e67 }, // U1E67 # LATIN SMALL LETTER S WITH CARON AND DOT ABOVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x002e, UNITIZE(Qt::Key_Dead_Belowdot), 0x0053, 0, 0}, 0x1e68 }, // U1E68 # LATIN CAPITAL LETTER S WITH DOT BELOW AND DOT ABOVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x002e, UNITIZE(Qt::Key_Dead_Belowdot), 0x0073, 0, 0}, 0x1e69 }, // U1E69 # LATIN SMALL LETTER S WITH DOT BELOW AND DOT ABOVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x002f, 0x002f, 0, 0, 0}, 0x005c }, // backslash ++ { {UNITIZE(Qt::Key_Multi_key), 0x002f, 0x003c, 0, 0, 0}, 0x005c }, // backslash ++ { {UNITIZE(Qt::Key_Multi_key), 0x002f, 0x0043, 0, 0, 0}, 0x20a1 }, // U20a1 # COLON SIGN ++ { {UNITIZE(Qt::Key_Multi_key), 0x002f, 0x0043, 0, 0, 0}, 0x00a2 }, // U00A2 # CENT SIGN ++ { {UNITIZE(Qt::Key_Multi_key), 0x002f, 0x0044, 0, 0, 0}, 0x0110 }, // U0110 # LATIN CAPITAL LETTER D WITH STROKE ++ { {UNITIZE(Qt::Key_Multi_key), 0x002f, 0x0047, 0, 0, 0}, 0x01e4 }, // U01E4 # LATIN CAPITAL LETTER G WITH STROKE ++ { {UNITIZE(Qt::Key_Multi_key), 0x002f, 0x0048, 0, 0, 0}, 0x0126 }, // U0126 # LATIN CAPITAL LETTER H WITH STROKE ++ { {UNITIZE(Qt::Key_Multi_key), 0x002f, 0x0049, 0, 0, 0}, 0x0197 }, // U0197 # LATIN CAPITAL LETTER I WITH STROKE ++ { {UNITIZE(Qt::Key_Multi_key), 0x002f, 0x004c, 0, 0, 0}, 0x0141 }, // U0141 # LATIN CAPITAL LETTER L WITH STROKE ++ { {UNITIZE(Qt::Key_Multi_key), 0x002f, 0x004f, 0, 0, 0}, 0x00d8 }, // U00D8 # LATIN CAPITAL LETTER O WITH STROKE ++ { {UNITIZE(Qt::Key_Multi_key), 0x002f, 0x0054, 0, 0, 0}, 0x0166 }, // U0166 # LATIN CAPITAL LETTER T WITH STROKE ++ { {UNITIZE(Qt::Key_Multi_key), 0x002f, 0x005a, 0, 0, 0}, 0x01b5 }, // U01B5 # LATIN CAPITAL LETTER Z WITH STROKE ++ { {UNITIZE(Qt::Key_Multi_key), 0x002f, 0x005e, 0, 0, 0}, 0x007c }, // bar ++ { {UNITIZE(Qt::Key_Multi_key), 0x002f, 0x0062, 0, 0, 0}, 0x0180 }, // U0180 # LATIN SMALL LETTER B WITH STROKE ++ { {UNITIZE(Qt::Key_Multi_key), 0x002f, 0x0063, 0, 0, 0}, 0x00a2 }, // U00A2 # CENT SIGN ++ { {UNITIZE(Qt::Key_Multi_key), 0x002f, 0x0064, 0, 0, 0}, 0x0111 }, // U0111 # LATIN SMALL LETTER D WITH STROKE ++ { {UNITIZE(Qt::Key_Multi_key), 0x002f, 0x0067, 0, 0, 0}, 0x01e5 }, // U01E5 # LATIN SMALL LETTER G WITH STROKE ++ { {UNITIZE(Qt::Key_Multi_key), 0x002f, 0x0068, 0, 0, 0}, 0x0127 }, // U0127 # LATIN SMALL LETTER H WITH STROKE ++ { {UNITIZE(Qt::Key_Multi_key), 0x002f, 0x0069, 0, 0, 0}, 0x0268 }, // U0268 # LATIN SMALL LETTER I WITH STROKE ++ { {UNITIZE(Qt::Key_Multi_key), 0x002f, 0x006c, 0, 0, 0}, 0x0142 }, // U0142 # LATIN SMALL LETTER L WITH STROKE ++ { {UNITIZE(Qt::Key_Multi_key), 0x002f, 0x006d, 0, 0, 0}, 0x20a5 }, // U20a5 # MILL SIGN ++ { {UNITIZE(Qt::Key_Multi_key), 0x002f, 0x006f, 0, 0, 0}, 0x00f8 }, // U00F8 # LATIN SMALL LETTER O WITH STROKE ++ { {UNITIZE(Qt::Key_Multi_key), 0x002f, 0x0074, 0, 0, 0}, 0x0167 }, // U0167 # LATIN SMALL LETTER T WITH STROKE ++ { {UNITIZE(Qt::Key_Multi_key), 0x002f, 0x007a, 0, 0, 0}, 0x01b6 }, // U01B6 # LATIN SMALL LETTER Z WITH STROKE ++ { {UNITIZE(Qt::Key_Multi_key), 0x002f, 0x0294, 0, 0, 0}, 0x02a1 }, // U02A1 # LATIN LETTER GLOTTAL STOP WITH STROKE ++ { {UNITIZE(Qt::Key_Multi_key), 0x002f, 0x0413, 0, 0, 0}, 0x0492 }, // U0492 # CYRILLIC CAPITAL LETTER GHE WITH STROKE ++ { {UNITIZE(Qt::Key_Multi_key), 0x002f, 0x041a, 0, 0, 0}, 0x049e }, // U049E # CYRILLIC CAPITAL LETTER KA WITH STROKE ++ { {UNITIZE(Qt::Key_Multi_key), 0x002f, 0x0433, 0, 0, 0}, 0x0493 }, // U0493 # CYRILLIC SMALL LETTER GHE WITH STROKE ++ { {UNITIZE(Qt::Key_Multi_key), 0x002f, 0x043a, 0, 0, 0}, 0x049f }, // U049F # CYRILLIC SMALL LETTER KA WITH STROKE ++ { {UNITIZE(Qt::Key_Multi_key), 0x002f, 0x04ae, 0, 0, 0}, 0x04b0 }, // U04B0 # CYRILLIC CAPITAL LETTER STRAIGHT U WITH STROKE ++ { {UNITIZE(Qt::Key_Multi_key), 0x002f, 0x04af, 0, 0, 0}, 0x04b1 }, // U04B1 # CYRILLIC SMALL LETTER STRAIGHT U WITH STROKE ++ { {UNITIZE(Qt::Key_Multi_key), 0x002f, 0x2190, 0, 0, 0}, 0x219a }, // U219A # LEFTWARDS ARROW WITH STROKE ++ { {UNITIZE(Qt::Key_Multi_key), 0x002f, 0x2192, 0, 0, 0}, 0x219b }, // U219B # RIGHTWARDS ARROW WITH STROKE ++ { {UNITIZE(Qt::Key_Multi_key), 0x002f, 0x2194, 0, 0, 0}, 0x21ae }, // U21AE # LEFT RIGHT ARROW WITH STROKE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0031, 0x0032, 0, 0, 0}, 0x00bd }, // U00BD # VULGAR FRACTION ONE HALF ++ { {UNITIZE(Qt::Key_Multi_key), 0x0031, 0x0034, 0, 0, 0}, 0x00bc }, // U00BC # VULGAR FRACTION ONE QUARTER ++ { {UNITIZE(Qt::Key_Multi_key), 0x0033, 0x0034, 0, 0, 0}, 0x00be }, // U00BE # VULGAR FRACTION THREE QUARTERS ++ { {UNITIZE(Qt::Key_Multi_key), 0x003a, 0x002d, 0, 0, 0}, 0x00f7 }, // U00F7 # DIVISION SIGN ++ { {UNITIZE(Qt::Key_Multi_key), 0x003b, 0x0041, 0, 0, 0}, 0x0104 }, // U0104 # LATIN CAPITAL LETTER A WITH OGONEK ++ { {UNITIZE(Qt::Key_Multi_key), 0x003b, 0x0045, 0, 0, 0}, 0x0118 }, // U0118 # LATIN CAPITAL LETTER E WITH OGONEK ++ { {UNITIZE(Qt::Key_Multi_key), 0x003b, 0x0049, 0, 0, 0}, 0x012e }, // U012E # LATIN CAPITAL LETTER I WITH OGONEK ++ { {UNITIZE(Qt::Key_Multi_key), 0x003b, 0x004f, 0, 0, 0}, 0x01ea }, // U01EA # LATIN CAPITAL LETTER O WITH OGONEK ++ { {UNITIZE(Qt::Key_Multi_key), 0x003b, 0x0055, 0, 0, 0}, 0x0172 }, // U0172 # LATIN CAPITAL LETTER U WITH OGONEK ++ { {UNITIZE(Qt::Key_Multi_key), 0x003b, 0x0061, 0, 0, 0}, 0x0105 }, // U0105 # LATIN SMALL LETTER A WITH OGONEK ++ { {UNITIZE(Qt::Key_Multi_key), 0x003b, 0x0065, 0, 0, 0}, 0x0119 }, // U0119 # LATIN SMALL LETTER E WITH OGONEK ++ { {UNITIZE(Qt::Key_Multi_key), 0x003b, 0x0069, 0, 0, 0}, 0x012f }, // U012F # LATIN SMALL LETTER I WITH OGONEK ++ { {UNITIZE(Qt::Key_Multi_key), 0x003b, 0x006f, 0, 0, 0}, 0x01eb }, // U01EB # LATIN SMALL LETTER O WITH OGONEK ++ { {UNITIZE(Qt::Key_Multi_key), 0x003b, 0x0075, 0, 0, 0}, 0x0173 }, // U0173 # LATIN SMALL LETTER U WITH OGONEK ++ { {UNITIZE(Qt::Key_Multi_key), 0x003c, 0x0022, 0, 0, 0}, 0x201c }, // U201c # LEFT DOUBLE QUOTATION MARK ++ { {UNITIZE(Qt::Key_Multi_key), 0x003c, 0x0027, 0, 0, 0}, 0x2018 }, // U2018 # LEFT SINGLE QUOTATION MARK ++ { {UNITIZE(Qt::Key_Multi_key), 0x003c, 0x002f, 0, 0, 0}, 0x005c }, // backslash ++ { {UNITIZE(Qt::Key_Multi_key), 0x003c, 0x003c, 0, 0, 0}, 0x00ab }, // guillemotleft # LEFT-POINTING DOUBLE ANGLE QUOTATION MARK ++ { {UNITIZE(Qt::Key_Multi_key), 0x003c, 0x0338, 0, 0, 0}, 0x226e }, // U226E # NOT LESS-THAN ++ { {UNITIZE(Qt::Key_Multi_key), 0x003c, 0x0338, 0, 0, 0}, 0x226e }, // U226E # NOT LESS-THAN ++ { {UNITIZE(Qt::Key_Multi_key), 0x003d, 0x0043, 0, 0, 0}, 0x20ac }, // EuroSign # EURO SIGN ++ { {UNITIZE(Qt::Key_Multi_key), 0x003d, 0x0045, 0, 0, 0}, 0x20ac }, // EuroSign # EURO SIGN ++ { {UNITIZE(Qt::Key_Multi_key), 0x003d, 0x004c, 0, 0, 0}, 0x20a4 }, // U20a4 # LIRA SIGN ++ { {UNITIZE(Qt::Key_Multi_key), 0x003d, 0x004e, 0, 0, 0}, 0x20a6 }, // U20a6 # NAIRA SIGN ++ { {UNITIZE(Qt::Key_Multi_key), 0x003d, 0x004f, 0, 0, 0}, 0x0150 }, // U0150 # LATIN CAPITAL LETTER O WITH DOUBLE ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x003d, 0x0055, 0, 0, 0}, 0x0170 }, // U0170 # LATIN CAPITAL LETTER U WITH DOUBLE ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x003d, 0x0057, 0, 0, 0}, 0x20a9 }, // U20a9 # WON SIGN ++ { {UNITIZE(Qt::Key_Multi_key), 0x003d, 0x0059, 0, 0, 0}, 0x00a5 }, // yen ++ { {UNITIZE(Qt::Key_Multi_key), 0x003d, 0x006f, 0, 0, 0}, 0x0151 }, // U0151 # LATIN SMALL LETTER O WITH DOUBLE ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x003d, 0x0075, 0, 0, 0}, 0x0171 }, // U0171 # LATIN SMALL LETTER U WITH DOUBLE ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x003d, 0x0338, 0, 0, 0}, 0x2260 }, // U2260 # NOT EQUAL TO ++ { {UNITIZE(Qt::Key_Multi_key), 0x003d, 0x0423, 0, 0, 0}, 0x04f2 }, // U04F2 # CYRILLIC CAPITAL LETTER U WITH DOUBLE ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x003d, 0x0443, 0, 0, 0}, 0x04f3 }, // U04F3 # CYRILLIC SMALL LETTER U WITH DOUBLE ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x003e, 0x0020, 0, 0, 0}, 0x005e }, // asciicircum ++ { {UNITIZE(Qt::Key_Multi_key), 0x003e, 0x0022, 0, 0, 0}, 0x201d }, // U201d # RIGHT DOUBLE QUOTATION MARK ++ { {UNITIZE(Qt::Key_Multi_key), 0x003e, 0x0027, 0, 0, 0}, 0x2019 }, // U2019 # RIGHT SINGLE QUOTATION MARK ++ { {UNITIZE(Qt::Key_Multi_key), 0x003e, 0x003e, 0, 0, 0}, 0x00bb }, // guillemotright # RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK ++ { {UNITIZE(Qt::Key_Multi_key), 0x003e, 0x0338, 0, 0, 0}, 0x226f }, // U226F # NOT GREATER-THAN ++ { {UNITIZE(Qt::Key_Multi_key), 0x003e, 0x0338, 0, 0, 0}, 0x226f }, // U226F # NOT GREATER-THAN ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x003f, 0x0000, 0, 0, 0}, 0x1eed }, // U1EED # LATIN SMALL LETTER U WITH HORN AND HOOK ABOVE ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x003f, 0x0000, 0, 0, 0}, 0x1eec }, // U1EEC # LATIN CAPITAL LETTER U WITH HORN AND HOOK ABOVE ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x003f, 0x0000, 0, 0, 0}, 0x1edf }, // U1EDF # LATIN SMALL LETTER O WITH HORN AND HOOK ABOVE ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x003f, 0x0000, 0, 0, 0}, 0x1ede }, // U1EDE # LATIN CAPITAL LETTER O WITH HORN AND HOOK ABOVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x003f, 0x002b, 0x004f, 0, 0}, 0x1ede }, // U1EDE # LATIN CAPITAL LETTER O WITH HORN AND HOOK ABOVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x003f, 0x002b, 0x0055, 0, 0}, 0x1eec }, // U1EEC # LATIN CAPITAL LETTER U WITH HORN AND HOOK ABOVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x003f, 0x002b, 0x006f, 0, 0}, 0x1edf }, // U1EDF # LATIN SMALL LETTER O WITH HORN AND HOOK ABOVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x003f, 0x002b, 0x0075, 0, 0}, 0x1eed }, // U1EED # LATIN SMALL LETTER U WITH HORN AND HOOK ABOVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x003f, 0x003f, 0, 0, 0}, 0x00bf }, // questiondown ++ { {UNITIZE(Qt::Key_Multi_key), 0x003f, 0x0041, 0, 0, 0}, 0x1ea2 }, // U1EA2 # LATIN CAPITAL LETTER A WITH HOOK ABOVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x003f, 0x0045, 0, 0, 0}, 0x1eba }, // U1EBA # LATIN CAPITAL LETTER E WITH HOOK ABOVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x003f, 0x0049, 0, 0, 0}, 0x1ec8 }, // U1EC8 # LATIN CAPITAL LETTER I WITH HOOK ABOVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x003f, 0x004f, 0, 0, 0}, 0x1ece }, // U1ECE # LATIN CAPITAL LETTER O WITH HOOK ABOVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x003f, 0x0055, 0, 0, 0}, 0x1ee6 }, // U1EE6 # LATIN CAPITAL LETTER U WITH HOOK ABOVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x003f, 0x0055, 0x0041, 0, 0}, 0x1eb2 }, // U1EB2 # LATIN CAPITAL LETTER A WITH BREVE AND HOOK ABOVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x003f, 0x0055, 0x0061, 0, 0}, 0x1eb3 }, // U1EB3 # LATIN SMALL LETTER A WITH BREVE AND HOOK ABOVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x003f, 0x0059, 0, 0, 0}, 0x1ef6 }, // U1EF6 # LATIN CAPITAL LETTER Y WITH HOOK ABOVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x003f, 0x005e, 0x0041, 0, 0}, 0x1ea8 }, // U1EA8 # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x003f, 0x005e, 0x0045, 0, 0}, 0x1ec2 }, // U1EC2 # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x003f, 0x005e, 0x004f, 0, 0}, 0x1ed4 }, // U1ED4 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x003f, 0x005e, 0x0061, 0, 0}, 0x1ea9 }, // U1EA9 # LATIN SMALL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x003f, 0x005e, 0x0065, 0, 0}, 0x1ec3 }, // U1EC3 # LATIN SMALL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x003f, 0x005e, 0x006f, 0, 0}, 0x1ed5 }, // U1ED5 # LATIN SMALL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x003f, 0x0061, 0, 0, 0}, 0x1ea3 }, // U1EA3 # LATIN SMALL LETTER A WITH HOOK ABOVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x003f, 0x0062, 0x0041, 0, 0}, 0x1eb2 }, // U1EB2 # LATIN CAPITAL LETTER A WITH BREVE AND HOOK ABOVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x003f, 0x0062, 0x0061, 0, 0}, 0x1eb3 }, // U1EB3 # LATIN SMALL LETTER A WITH BREVE AND HOOK ABOVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x003f, 0x0065, 0, 0, 0}, 0x1ebb }, // U1EBB # LATIN SMALL LETTER E WITH HOOK ABOVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x003f, 0x0069, 0, 0, 0}, 0x1ec9 }, // U1EC9 # LATIN SMALL LETTER I WITH HOOK ABOVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x003f, 0x006f, 0, 0, 0}, 0x1ecf }, // U1ECF # LATIN SMALL LETTER O WITH HOOK ABOVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x003f, 0x0075, 0, 0, 0}, 0x1ee7 }, // U1EE7 # LATIN SMALL LETTER U WITH HOOK ABOVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x003f, 0x0079, 0, 0, 0}, 0x1ef7 }, // U1EF7 # LATIN SMALL LETTER Y WITH HOOK ABOVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x003f, 0x00c2, 0, 0, 0}, 0x1ea8 }, // U1EA8 # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x003f, 0x00ca, 0, 0, 0}, 0x1ec2 }, // U1EC2 # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x003f, 0x00d4, 0, 0, 0}, 0x1ed4 }, // U1ED4 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x003f, 0x00e2, 0, 0, 0}, 0x1ea9 }, // U1EA9 # LATIN SMALL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x003f, 0x00ea, 0, 0, 0}, 0x1ec3 }, // U1EC3 # LATIN SMALL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x003f, 0x00f4, 0, 0, 0}, 0x1ed5 }, // U1ED5 # LATIN SMALL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x003f, 0x0102, 0, 0, 0}, 0x1eb2 }, // U1EB2 # LATIN CAPITAL LETTER A WITH BREVE AND HOOK ABOVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x003f, 0x0103, 0, 0, 0}, 0x1eb3 }, // U1EB3 # LATIN SMALL LETTER A WITH BREVE AND HOOK ABOVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x003f, UNITIZE(Qt::Key_Dead_Circumflex), 0x0041, 0, 0}, 0x1ea8 }, // U1EA8 # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x003f, UNITIZE(Qt::Key_Dead_Circumflex), 0x0045, 0, 0}, 0x1ec2 }, // U1EC2 # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x003f, UNITIZE(Qt::Key_Dead_Circumflex), 0x004f, 0, 0}, 0x1ed4 }, // U1ED4 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x003f, UNITIZE(Qt::Key_Dead_Circumflex), 0x0061, 0, 0}, 0x1ea9 }, // U1EA9 # LATIN SMALL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x003f, UNITIZE(Qt::Key_Dead_Circumflex), 0x0065, 0, 0}, 0x1ec3 }, // U1EC3 # LATIN SMALL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x003f, UNITIZE(Qt::Key_Dead_Circumflex), 0x006f, 0, 0}, 0x1ed5 }, // U1ED5 # LATIN SMALL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x003f, UNITIZE(Qt::Key_Dead_Breve), 0x0041, 0, 0}, 0x1eb2 }, // U1EB2 # LATIN CAPITAL LETTER A WITH BREVE AND HOOK ABOVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x003f, UNITIZE(Qt::Key_Dead_Breve), 0x0061, 0, 0}, 0x1eb3 }, // U1EB3 # LATIN SMALL LETTER A WITH BREVE AND HOOK ABOVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x003f, UNITIZE(Qt::Key_Dead_Horn), 0x004f, 0, 0}, 0x1ede }, // U1EDE # LATIN CAPITAL LETTER O WITH HORN AND HOOK ABOVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x003f, UNITIZE(Qt::Key_Dead_Horn), 0x0055, 0, 0}, 0x1eec }, // U1EEC # LATIN CAPITAL LETTER U WITH HORN AND HOOK ABOVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x003f, UNITIZE(Qt::Key_Dead_Horn), 0x006f, 0, 0}, 0x1edf }, // U1EDF # LATIN SMALL LETTER O WITH HORN AND HOOK ABOVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x003f, UNITIZE(Qt::Key_Dead_Horn), 0x0075, 0, 0}, 0x1eed }, // U1EED # LATIN SMALL LETTER U WITH HORN AND HOOK ABOVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0041, 0x0045, 0, 0, 0}, 0x00c6 }, // AE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0041, 0x0054, 0, 0, 0}, 0x0040 }, // at ++ { {UNITIZE(Qt::Key_Multi_key), 0x0043, 0x002f, 0, 0, 0}, 0x20a1 }, // U20a1 # COLON SIGN ++ { {UNITIZE(Qt::Key_Multi_key), 0x0043, 0x002f, 0, 0, 0}, 0x00a2 }, // U00A2 # CENT SIGN ++ { {UNITIZE(Qt::Key_Multi_key), 0x0043, 0x003d, 0, 0, 0}, 0x20ac }, // EuroSign # EURO SIGN ++ { {UNITIZE(Qt::Key_Multi_key), 0x0043, 0x0045, 0, 0, 0}, 0x20a0 }, // U20a0 # EURO-CURRENCY SIGN ++ { {UNITIZE(Qt::Key_Multi_key), 0x0043, 0x0072, 0, 0, 0}, 0x20a2 }, // U20a2 # CRUZEIRO SIGN ++ { {UNITIZE(Qt::Key_Multi_key), 0x0043, 0x007c, 0, 0, 0}, 0x00a2 }, // U00A2 # CENT SIGN ++ { {UNITIZE(Qt::Key_Multi_key), 0x0044, 0x0048, 0, 0, 0}, 0x00d0 }, // U00D0 # LATIN CAPITAL LETTER ETH ++ { {UNITIZE(Qt::Key_Multi_key), 0x0045, 0x003d, 0, 0, 0}, 0x20ac }, // EuroSign # EURO SIGN ++ { {UNITIZE(Qt::Key_Multi_key), 0x0046, 0x0072, 0, 0, 0}, 0x20a3 }, // U20a3 # FRENCH FRANC SIGN ++ { {UNITIZE(Qt::Key_Multi_key), 0x004c, 0x002d, 0, 0, 0}, 0x00a3 }, // U00a3 # POUND SIGN ++ { {UNITIZE(Qt::Key_Multi_key), 0x004c, 0x003d, 0, 0, 0}, 0x20a4 }, // U20a4 # LIRA SIGN ++ { {UNITIZE(Qt::Key_Multi_key), 0x004c, 0x0056, 0, 0, 0}, 0x007c }, // bar ++ { {UNITIZE(Qt::Key_Multi_key), 0x004e, 0x003d, 0, 0, 0}, 0x20a6 }, // U20a6 # NAIRA SIGN ++ { {UNITIZE(Qt::Key_Multi_key), 0x004e, 0x0047, 0, 0, 0}, 0x014a }, // U014A # LATIN CAPITAL LETTER ENG ++ { {UNITIZE(Qt::Key_Multi_key), 0x004f, 0x0043, 0, 0, 0}, 0x00a9 }, // copyright ++ { {UNITIZE(Qt::Key_Multi_key), 0x004f, 0x0045, 0, 0, 0}, 0x0152 }, // OE ++ { {UNITIZE(Qt::Key_Multi_key), 0x004f, 0x0052, 0, 0, 0}, 0x00ae }, // registered ++ { {UNITIZE(Qt::Key_Multi_key), 0x004f, 0x0063, 0, 0, 0}, 0x00a9 }, // copyright ++ { {UNITIZE(Qt::Key_Multi_key), 0x004f, 0x0072, 0, 0, 0}, 0x00ae }, // registered ++ { {UNITIZE(Qt::Key_Multi_key), 0x0050, 0x0021, 0, 0, 0}, 0x00b6 }, // paragraph ++ { {UNITIZE(Qt::Key_Multi_key), 0x0050, 0x0050, 0, 0, 0}, 0x00b6 }, // paragraph # PILCROW SIGN (PARAGRAPH SIGN) ++ { {UNITIZE(Qt::Key_Multi_key), 0x0050, 0x0074, 0, 0, 0}, 0x20a7 }, // U20a7 # PESETA SIGN ++ { {UNITIZE(Qt::Key_Multi_key), 0x0052, 0x0073, 0, 0, 0}, 0x20a8 }, // U20a8 # RUPEE SIGN ++ { {UNITIZE(Qt::Key_Multi_key), 0x0054, 0x0048, 0, 0, 0}, 0x00de }, // U00DE # LATIN CAPITAL LETTER THORN ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0055, 0x0000, 0x0041, 0, 0}, 0x1eb6 }, // U1EB6 # LATIN CAPITAL LETTER A WITH BREVE AND DOT BELOW ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0055, 0x0000, 0x0061, 0, 0}, 0x1eb7 }, // U1EB7 # LATIN SMALL LETTER A WITH BREVE AND DOT BELOW ++ { {UNITIZE(Qt::Key_Multi_key), 0x0055, 0x0021, 0x0041, 0, 0}, 0x1eb6 }, // U1EB6 # LATIN CAPITAL LETTER A WITH BREVE AND DOT BELOW ++ { {UNITIZE(Qt::Key_Multi_key), 0x0055, 0x0021, 0x0061, 0, 0}, 0x1eb7 }, // U1EB7 # LATIN SMALL LETTER A WITH BREVE AND DOT BELOW ++ { {UNITIZE(Qt::Key_Multi_key), 0x0055, 0x002c, 0x0045, 0, 0}, 0x1e1c }, // U1E1C # LATIN CAPITAL LETTER E WITH CEDILLA AND BREVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0055, 0x002c, 0x0065, 0, 0}, 0x1e1d }, // U1E1D # LATIN SMALL LETTER E WITH CEDILLA AND BREVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0055, 0x0041, 0, 0, 0}, 0x0102 }, // U0102 # LATIN CAPITAL LETTER A WITH BREVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0055, 0x0045, 0, 0, 0}, 0x0114 }, // U0114 # LATIN CAPITAL LETTER E WITH BREVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0055, 0x0047, 0, 0, 0}, 0x011e }, // U011E # LATIN CAPITAL LETTER G WITH BREVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0055, 0x0049, 0, 0, 0}, 0x012c }, // U012C # LATIN CAPITAL LETTER I WITH BREVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0055, 0x004f, 0, 0, 0}, 0x014e }, // U014E # LATIN CAPITAL LETTER O WITH BREVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0055, 0x0055, 0, 0, 0}, 0x016c }, // U016C # LATIN CAPITAL LETTER U WITH BREVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0055, 0x0061, 0, 0, 0}, 0x0103 }, // U0103 # LATIN SMALL LETTER A WITH BREVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0055, 0x0065, 0, 0, 0}, 0x0115 }, // U0115 # LATIN SMALL LETTER E WITH BREVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0055, 0x0067, 0, 0, 0}, 0x011f }, // U011F # LATIN SMALL LETTER G WITH BREVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0055, 0x0069, 0, 0, 0}, 0x012d }, // U012D # LATIN SMALL LETTER I WITH BREVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0055, 0x006f, 0, 0, 0}, 0x014f }, // U014F # LATIN SMALL LETTER O WITH BREVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0055, 0x0075, 0, 0, 0}, 0x016d }, // U016D # LATIN SMALL LETTER U WITH BREVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0055, 0x0228, 0, 0, 0}, 0x1e1c }, // U1E1C # LATIN CAPITAL LETTER E WITH CEDILLA AND BREVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0055, 0x0229, 0, 0, 0}, 0x1e1d }, // U1E1D # LATIN SMALL LETTER E WITH CEDILLA AND BREVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0055, 0x0391, 0, 0, 0}, 0x1fb8 }, // U1FB8 # GREEK CAPITAL LETTER ALPHA WITH VRACHY ++ { {UNITIZE(Qt::Key_Multi_key), 0x0055, 0x0399, 0, 0, 0}, 0x1fd8 }, // U1FD8 # GREEK CAPITAL LETTER IOTA WITH VRACHY ++ { {UNITIZE(Qt::Key_Multi_key), 0x0055, 0x03a5, 0, 0, 0}, 0x1fe8 }, // U1FE8 # GREEK CAPITAL LETTER UPSILON WITH VRACHY ++ { {UNITIZE(Qt::Key_Multi_key), 0x0055, 0x03b1, 0, 0, 0}, 0x1fb0 }, // U1FB0 # GREEK SMALL LETTER ALPHA WITH VRACHY ++ { {UNITIZE(Qt::Key_Multi_key), 0x0055, 0x03b9, 0, 0, 0}, 0x1fd0 }, // U1FD0 # GREEK SMALL LETTER IOTA WITH VRACHY ++ { {UNITIZE(Qt::Key_Multi_key), 0x0055, 0x03c5, 0, 0, 0}, 0x1fe0 }, // U1FE0 # GREEK SMALL LETTER UPSILON WITH VRACHY ++ { {UNITIZE(Qt::Key_Multi_key), 0x0055, 0x0410, 0, 0, 0}, 0x04d0 }, // U04D0 # CYRILLIC CAPITAL LETTER A WITH BREVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0055, 0x0415, 0, 0, 0}, 0x04d6 }, // U04D6 # CYRILLIC CAPITAL LETTER IE WITH BREVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0055, 0x0416, 0, 0, 0}, 0x04c1 }, // U04C1 # CYRILLIC CAPITAL LETTER ZHE WITH BREVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0055, 0x0418, 0, 0, 0}, 0x0419 }, // U0419 # CYRILLIC CAPITAL LETTER SHORT I ++ { {UNITIZE(Qt::Key_Multi_key), 0x0055, 0x0423, 0, 0, 0}, 0x040e }, // U040E # CYRILLIC CAPITAL LETTER SHORT U ++ { {UNITIZE(Qt::Key_Multi_key), 0x0055, 0x0430, 0, 0, 0}, 0x04d1 }, // U04D1 # CYRILLIC SMALL LETTER A WITH BREVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0055, 0x0435, 0, 0, 0}, 0x04d7 }, // U04D7 # CYRILLIC SMALL LETTER IE WITH BREVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0055, 0x0436, 0, 0, 0}, 0x04c2 }, // U04C2 # CYRILLIC SMALL LETTER ZHE WITH BREVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0055, 0x0438, 0, 0, 0}, 0x0439 }, // U0439 # CYRILLIC SMALL LETTER SHORT I ++ { {UNITIZE(Qt::Key_Multi_key), 0x0055, 0x0443, 0, 0, 0}, 0x045e }, // U045E # CYRILLIC SMALL LETTER SHORT U ++ { {UNITIZE(Qt::Key_Multi_key), 0x0055, 0x1ea0, 0, 0, 0}, 0x1eb6 }, // U1EB6 # LATIN CAPITAL LETTER A WITH BREVE AND DOT BELOW ++ { {UNITIZE(Qt::Key_Multi_key), 0x0055, 0x1ea1, 0, 0, 0}, 0x1eb7 }, // U1EB7 # LATIN SMALL LETTER A WITH BREVE AND DOT BELOW ++ { {UNITIZE(Qt::Key_Multi_key), 0x0055, UNITIZE(Qt::Key_Dead_Cedilla), 0x0045, 0, 0}, 0x1e1c }, // U1E1C # LATIN CAPITAL LETTER E WITH CEDILLA AND BREVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0055, UNITIZE(Qt::Key_Dead_Cedilla), 0x0065, 0, 0}, 0x1e1d }, // U1E1D # LATIN SMALL LETTER E WITH CEDILLA AND BREVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0055, UNITIZE(Qt::Key_Dead_Belowdot), 0x0041, 0, 0}, 0x1eb6 }, // U1EB6 # LATIN CAPITAL LETTER A WITH BREVE AND DOT BELOW ++ { {UNITIZE(Qt::Key_Multi_key), 0x0055, UNITIZE(Qt::Key_Dead_Belowdot), 0x0061, 0, 0}, 0x1eb7 }, // U1EB7 # LATIN SMALL LETTER A WITH BREVE AND DOT BELOW ++ { {UNITIZE(Qt::Key_Multi_key), 0x0056, 0x004c, 0, 0, 0}, 0x007c }, // bar ++ { {UNITIZE(Qt::Key_Multi_key), 0x0057, 0x003d, 0, 0, 0}, 0x20a9 }, // U20a9 # WON SIGN ++ { {UNITIZE(Qt::Key_Multi_key), 0x0059, 0x003d, 0, 0, 0}, 0x00a5 }, // yen ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x0000, 0, 0, 0}, 0x00b2 }, // U00B2 # SUPERSCRIPT TWO ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x0000, 0, 0, 0}, 0x2076 }, // U2076 # SUPERSCRIPT SIX ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x0000, 0, 0, 0}, 0x2070 }, // U2070 # SUPERSCRIPT ZERO ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x0000, 0, 0, 0}, 0x00b9 }, // U00B9 # SUPERSCRIPT ONE ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x0000, 0, 0, 0}, 0x2078 }, // U2078 # SUPERSCRIPT EIGHT ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x0000, 0, 0, 0}, 0x2074 }, // U2074 # SUPERSCRIPT FOUR ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x0000, 0, 0, 0}, 0x00b3 }, // U00B3 # SUPERSCRIPT THREE ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x0000, 0, 0, 0}, 0x2077 }, // U2077 # SUPERSCRIPT SEVEN ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x0000, 0, 0, 0}, 0x207c }, // U207C # SUPERSCRIPT EQUALS SIGN ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x0000, 0, 0, 0}, 0x207a }, // U207A # SUPERSCRIPT PLUS SIGN ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x0000, 0, 0, 0}, 0x00b2 }, // U00B2 # SUPERSCRIPT TWO ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x0000, 0, 0, 0}, 0x2079 }, // U2079 # SUPERSCRIPT NINE ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x0000, 0, 0, 0}, 0x2075 }, // U2075 # SUPERSCRIPT FIVE ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x0000, 0x0041, 0, 0}, 0x1eac }, // U1EAC # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND DOT BELOW ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x0000, 0x0045, 0, 0}, 0x1ec6 }, // U1EC6 # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND DOT BELOW ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x0000, 0x004f, 0, 0}, 0x1ed8 }, // U1ED8 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND DOT BELOW ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x0000, 0x0061, 0, 0}, 0x1ead }, // U1EAD # LATIN SMALL LETTER A WITH CIRCUMFLEX AND DOT BELOW ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x0000, 0x0065, 0, 0}, 0x1ec7 }, // U1EC7 # LATIN SMALL LETTER E WITH CIRCUMFLEX AND DOT BELOW ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x0000, 0x006f, 0, 0}, 0x1ed9 }, // U1ED9 # LATIN SMALL LETTER O WITH CIRCUMFLEX AND DOT BELOW ++ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x0020, 0, 0, 0}, 0x005e }, // asciicircum ++ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x0021, 0x0041, 0, 0}, 0x1eac }, // U1EAC # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND DOT BELOW ++ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x0021, 0x0045, 0, 0}, 0x1ec6 }, // U1EC6 # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND DOT BELOW ++ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x0021, 0x004f, 0, 0}, 0x1ed8 }, // U1ED8 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND DOT BELOW ++ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x0021, 0x0061, 0, 0}, 0x1ead }, // U1EAD # LATIN SMALL LETTER A WITH CIRCUMFLEX AND DOT BELOW ++ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x0021, 0x0065, 0, 0}, 0x1ec7 }, // U1EC7 # LATIN SMALL LETTER E WITH CIRCUMFLEX AND DOT BELOW ++ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x0021, 0x006f, 0, 0}, 0x1ed9 }, // U1ED9 # LATIN SMALL LETTER O WITH CIRCUMFLEX AND DOT BELOW ++ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x0028, 0, 0, 0}, 0x207d }, // U207D # SUPERSCRIPT LEFT PARENTHESIS ++ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x0029, 0, 0, 0}, 0x207e }, // U207E # SUPERSCRIPT RIGHT PARENTHESIS ++ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x002b, 0, 0, 0}, 0x207a }, // U207A # SUPERSCRIPT PLUS SIGN ++ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x002f, 0, 0, 0}, 0x007c }, // bar ++ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x0030, 0, 0, 0}, 0x2070 }, // U2070 # SUPERSCRIPT ZERO ++ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x0031, 0, 0, 0}, 0x00b9 }, // U00B9 # SUPERSCRIPT ONE ++ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x0032, 0, 0, 0}, 0x00b2 }, // U00B2 # SUPERSCRIPT TWO ++ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x0033, 0, 0, 0}, 0x00b3 }, // U00B3 # SUPERSCRIPT THREE ++ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x0034, 0, 0, 0}, 0x2074 }, // U2074 # SUPERSCRIPT FOUR ++ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x0035, 0, 0, 0}, 0x2075 }, // U2075 # SUPERSCRIPT FIVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x0036, 0, 0, 0}, 0x2076 }, // U2076 # SUPERSCRIPT SIX ++ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x0037, 0, 0, 0}, 0x2077 }, // U2077 # SUPERSCRIPT SEVEN ++ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x0038, 0, 0, 0}, 0x2078 }, // U2078 # SUPERSCRIPT EIGHT ++ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x0039, 0, 0, 0}, 0x2079 }, // U2079 # SUPERSCRIPT NINE ++ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x003d, 0, 0, 0}, 0x207c }, // U207C # SUPERSCRIPT EQUALS SIGN ++ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x0041, 0, 0, 0}, 0x00c2 }, // U00C2 # LATIN CAPITAL LETTER A WITH CIRCUMFLEX ++ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x0043, 0, 0, 0}, 0x0108 }, // U0108 # LATIN CAPITAL LETTER C WITH CIRCUMFLEX ++ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x0045, 0, 0, 0}, 0x00ca }, // U00CA # LATIN CAPITAL LETTER E WITH CIRCUMFLEX ++ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x0047, 0, 0, 0}, 0x011c }, // U011C # LATIN CAPITAL LETTER G WITH CIRCUMFLEX ++ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x0048, 0, 0, 0}, 0x0124 }, // U0124 # LATIN CAPITAL LETTER H WITH CIRCUMFLEX ++ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x0049, 0, 0, 0}, 0x00ce }, // U00CE # LATIN CAPITAL LETTER I WITH CIRCUMFLEX ++ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x004a, 0, 0, 0}, 0x0134 }, // U0134 # LATIN CAPITAL LETTER J WITH CIRCUMFLEX ++ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x004f, 0, 0, 0}, 0x00d4 }, // U00D4 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX ++ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x0053, 0, 0, 0}, 0x015c }, // U015C # LATIN CAPITAL LETTER S WITH CIRCUMFLEX ++ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x0053, 0x004d, 0, 0}, 0x2120 }, // U2120 # SERVICE MARK ++ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x0054, 0x004d, 0, 0}, 0x2122 }, // U2122 # TRADE MARK SIGN ++ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x0055, 0, 0, 0}, 0x00db }, // U00DB # LATIN CAPITAL LETTER U WITH CIRCUMFLEX ++ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x0057, 0, 0, 0}, 0x0174 }, // U0174 # LATIN CAPITAL LETTER W WITH CIRCUMFLEX ++ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x0059, 0, 0, 0}, 0x0176 }, // U0176 # LATIN CAPITAL LETTER Y WITH CIRCUMFLEX ++ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x005a, 0, 0, 0}, 0x1e90 }, // U1E90 # LATIN CAPITAL LETTER Z WITH CIRCUMFLEX ++ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x005f, 0x0061, 0, 0}, 0x00aa }, // U00AA # FEMININE ORDINAL INDICATOR ++ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x005f, 0x0061, 0, 0}, 0x00aa }, // U00AA # FEMININE ORDINAL INDICATOR ++ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x005f, 0x0068, 0, 0}, 0x02b0 }, // U02B0 # MODIFIER LETTER SMALL H ++ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x005f, 0x0068, 0, 0}, 0x02b0 }, // U02B0 # MODIFIER LETTER SMALL H ++ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x005f, 0x0069, 0, 0}, 0x2071 }, // U2071 # SUPERSCRIPT LATIN SMALL LETTER I ++ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x005f, 0x0069, 0, 0}, 0x2071 }, // U2071 # SUPERSCRIPT LATIN SMALL LETTER I ++ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x005f, 0x006a, 0, 0}, 0x02b2 }, // U02B2 # MODIFIER LETTER SMALL J ++ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x005f, 0x006a, 0, 0}, 0x02b2 }, // U02B2 # MODIFIER LETTER SMALL J ++ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x005f, 0x006c, 0, 0}, 0x02e1 }, // U02E1 # MODIFIER LETTER SMALL L ++ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x005f, 0x006c, 0, 0}, 0x02e1 }, // U02E1 # MODIFIER LETTER SMALL L ++ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x005f, 0x006e, 0, 0}, 0x207f }, // U207F # SUPERSCRIPT LATIN SMALL LETTER N ++ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x005f, 0x006e, 0, 0}, 0x207f }, // U207F # SUPERSCRIPT LATIN SMALL LETTER N ++ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x005f, 0x006f, 0, 0}, 0x00ba }, // U00BA # MASCULINE ORDINAL INDICATOR ++ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x005f, 0x006f, 0, 0}, 0x00ba }, // U00BA # MASCULINE ORDINAL INDICATOR ++ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x005f, 0x0072, 0, 0}, 0x02b3 }, // U02B3 # MODIFIER LETTER SMALL R ++ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x005f, 0x0072, 0, 0}, 0x02b3 }, // U02B3 # MODIFIER LETTER SMALL R ++ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x005f, 0x0073, 0, 0}, 0x02e2 }, // U02E2 # MODIFIER LETTER SMALL S ++ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x005f, 0x0073, 0, 0}, 0x02e2 }, // U02E2 # MODIFIER LETTER SMALL S ++ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x005f, 0x0077, 0, 0}, 0x02b7 }, // U02B7 # MODIFIER LETTER SMALL W ++ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x005f, 0x0077, 0, 0}, 0x02b7 }, // U02B7 # MODIFIER LETTER SMALL W ++ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x005f, 0x0078, 0, 0}, 0x02e3 }, // U02E3 # MODIFIER LETTER SMALL X ++ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x005f, 0x0078, 0, 0}, 0x02e3 }, // U02E3 # MODIFIER LETTER SMALL X ++ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x005f, 0x0079, 0, 0}, 0x02b8 }, // U02B8 # MODIFIER LETTER SMALL Y ++ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x005f, 0x0079, 0, 0}, 0x02b8 }, // U02B8 # MODIFIER LETTER SMALL Y ++ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x005f, 0x0263, 0, 0}, 0x02e0 }, // U02E0 # MODIFIER LETTER SMALL GAMMA ++ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x005f, 0x0263, 0, 0}, 0x02e0 }, // U02E0 # MODIFIER LETTER SMALL GAMMA ++ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x005f, 0x0266, 0, 0}, 0x02b1 }, // U02B1 # MODIFIER LETTER SMALL H WITH HOOK ++ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x005f, 0x0266, 0, 0}, 0x02b1 }, // U02B1 # MODIFIER LETTER SMALL H WITH HOOK ++ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x005f, 0x0279, 0, 0}, 0x02b4 }, // U02B4 # MODIFIER LETTER SMALL TURNED R ++ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x005f, 0x0279, 0, 0}, 0x02b4 }, // U02B4 # MODIFIER LETTER SMALL TURNED R ++ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x005f, 0x027b, 0, 0}, 0x02b5 }, // U02B5 # MODIFIER LETTER SMALL TURNED R WITH HOOK ++ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x005f, 0x027b, 0, 0}, 0x02b5 }, // U02B5 # MODIFIER LETTER SMALL TURNED R WITH HOOK ++ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x005f, 0x0281, 0, 0}, 0x02b6 }, // U02B6 # MODIFIER LETTER SMALL CAPITAL INVERTED R ++ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x005f, 0x0281, 0, 0}, 0x02b6 }, // U02B6 # MODIFIER LETTER SMALL CAPITAL INVERTED R ++ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x005f, 0x0295, 0, 0}, 0x02e4 }, // U02E4 # MODIFIER LETTER SMALL REVERSED GLOTTAL STOP ++ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x005f, 0x0295, 0, 0}, 0x02e4 }, // U02E4 # MODIFIER LETTER SMALL REVERSED GLOTTAL STOP ++ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x0061, 0, 0, 0}, 0x00e2 }, // U00E2 # LATIN SMALL LETTER A WITH CIRCUMFLEX ++ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x0063, 0, 0, 0}, 0x0109 }, // U0109 # LATIN SMALL LETTER C WITH CIRCUMFLEX ++ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x0065, 0, 0, 0}, 0x00ea }, // U00EA # LATIN SMALL LETTER E WITH CIRCUMFLEX ++ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x0067, 0, 0, 0}, 0x011d }, // U011D # LATIN SMALL LETTER G WITH CIRCUMFLEX ++ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x0068, 0, 0, 0}, 0x0125 }, // U0125 # LATIN SMALL LETTER H WITH CIRCUMFLEX ++ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x0069, 0, 0, 0}, 0x00ee }, // U00EE # LATIN SMALL LETTER I WITH CIRCUMFLEX ++ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x006a, 0, 0, 0}, 0x0135 }, // U0135 # LATIN SMALL LETTER J WITH CIRCUMFLEX ++ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x006f, 0, 0, 0}, 0x00f4 }, // U00F4 # LATIN SMALL LETTER O WITH CIRCUMFLEX ++ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x0073, 0, 0, 0}, 0x015d }, // U015D # LATIN SMALL LETTER S WITH CIRCUMFLEX ++ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x0075, 0, 0, 0}, 0x00fb }, // U00FB # LATIN SMALL LETTER U WITH CIRCUMFLEX ++ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x0077, 0, 0, 0}, 0x0175 }, // U0175 # LATIN SMALL LETTER W WITH CIRCUMFLEX ++ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x0079, 0, 0, 0}, 0x0177 }, // U0177 # LATIN SMALL LETTER Y WITH CIRCUMFLEX ++ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x007a, 0, 0, 0}, 0x1e91 }, // U1E91 # LATIN SMALL LETTER Z WITH CIRCUMFLEX ++ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x1ea0, 0, 0, 0}, 0x1eac }, // U1EAC # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND DOT BELOW ++ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x1ea1, 0, 0, 0}, 0x1ead }, // U1EAD # LATIN SMALL LETTER A WITH CIRCUMFLEX AND DOT BELOW ++ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x1eb8, 0, 0, 0}, 0x1ec6 }, // U1EC6 # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND DOT BELOW ++ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x1eb9, 0, 0, 0}, 0x1ec7 }, // U1EC7 # LATIN SMALL LETTER E WITH CIRCUMFLEX AND DOT BELOW ++ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x1ecc, 0, 0, 0}, 0x1ed8 }, // U1ED8 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND DOT BELOW ++ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x1ecd, 0, 0, 0}, 0x1ed9 }, // U1ED9 # LATIN SMALL LETTER O WITH CIRCUMFLEX AND DOT BELOW ++ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x2212, 0, 0, 0}, 0x207b }, // U207B # SUPERSCRIPT MINUS ++ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x4e00, 0, 0, 0}, 0x3192 }, // U3192 # IDEOGRAPHIC ANNOTATION ONE MARK ++ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x4e01, 0, 0, 0}, 0x319c }, // U319C # IDEOGRAPHIC ANNOTATION FOURTH MARK ++ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x4e09, 0, 0, 0}, 0x3194 }, // U3194 # IDEOGRAPHIC ANNOTATION THREE MARK ++ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x4e0a, 0, 0, 0}, 0x3196 }, // U3196 # IDEOGRAPHIC ANNOTATION TOP MARK ++ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x4e0b, 0, 0, 0}, 0x3198 }, // U3198 # IDEOGRAPHIC ANNOTATION BOTTOM MARK ++ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x4e19, 0, 0, 0}, 0x319b }, // U319B # IDEOGRAPHIC ANNOTATION THIRD MARK ++ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x4e2d, 0, 0, 0}, 0x3197 }, // U3197 # IDEOGRAPHIC ANNOTATION MIDDLE MARK ++ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x4e59, 0, 0, 0}, 0x319a }, // U319A # IDEOGRAPHIC ANNOTATION SECOND MARK ++ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x4e8c, 0, 0, 0}, 0x3193 }, // U3193 # IDEOGRAPHIC ANNOTATION TWO MARK ++ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x4eba, 0, 0, 0}, 0x319f }, // U319F # IDEOGRAPHIC ANNOTATION MAN MARK ++ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x56db, 0, 0, 0}, 0x3195 }, // U3195 # IDEOGRAPHIC ANNOTATION FOUR MARK ++ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x5730, 0, 0, 0}, 0x319e }, // U319E # IDEOGRAPHIC ANNOTATION EARTH MARK ++ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x5929, 0, 0, 0}, 0x319d }, // U319D # IDEOGRAPHIC ANNOTATION HEAVEN MARK ++ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x7532, 0, 0, 0}, 0x3199 }, // U3199 # IDEOGRAPHIC ANNOTATION FIRST MARK ++ { {UNITIZE(Qt::Key_Multi_key), 0x005e, UNITIZE(Qt::Key_Dead_Belowdot), 0x0041, 0, 0}, 0x1eac }, // U1EAC # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND DOT BELOW ++ { {UNITIZE(Qt::Key_Multi_key), 0x005e, UNITIZE(Qt::Key_Dead_Belowdot), 0x0045, 0, 0}, 0x1ec6 }, // U1EC6 # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND DOT BELOW ++ { {UNITIZE(Qt::Key_Multi_key), 0x005e, UNITIZE(Qt::Key_Dead_Belowdot), 0x004f, 0, 0}, 0x1ed8 }, // U1ED8 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND DOT BELOW ++ { {UNITIZE(Qt::Key_Multi_key), 0x005e, UNITIZE(Qt::Key_Dead_Belowdot), 0x0061, 0, 0}, 0x1ead }, // U1EAD # LATIN SMALL LETTER A WITH CIRCUMFLEX AND DOT BELOW ++ { {UNITIZE(Qt::Key_Multi_key), 0x005e, UNITIZE(Qt::Key_Dead_Belowdot), 0x0065, 0, 0}, 0x1ec7 }, // U1EC7 # LATIN SMALL LETTER E WITH CIRCUMFLEX AND DOT BELOW ++ { {UNITIZE(Qt::Key_Multi_key), 0x005e, UNITIZE(Qt::Key_Dead_Belowdot), 0x006f, 0, 0}, 0x1ed9 }, // U1ED9 # LATIN SMALL LETTER O WITH CIRCUMFLEX AND DOT BELOW ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0000, 0, 0, 0}, 0x2085 }, // U2085 # SUBSCRIPT FIVE ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0000, 0, 0, 0}, 0x2087 }, // U2087 # SUBSCRIPT SEVEN ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0000, 0, 0, 0}, 0x2082 }, // U2082 # SUBSCRIPT TWO ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0000, 0, 0, 0}, 0x2085 }, // U2085 # SUBSCRIPT FIVE ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0000, 0, 0, 0}, 0x2084 }, // U2084 # SUBSCRIPT FOUR ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0000, 0, 0, 0}, 0x2084 }, // U2084 # SUBSCRIPT FOUR ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0000, 0, 0, 0}, 0x2086 }, // U2086 # SUBSCRIPT SIX ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0000, 0, 0, 0}, 0x2081 }, // U2081 # SUBSCRIPT ONE ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0000, 0, 0, 0}, 0x208a }, // U208A # SUBSCRIPT PLUS SIGN ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0000, 0, 0, 0}, 0x2088 }, // U2088 # SUBSCRIPT EIGHT ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0000, 0, 0, 0}, 0x2087 }, // U2087 # SUBSCRIPT SEVEN ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0000, 0, 0, 0}, 0x208a }, // U208A # SUBSCRIPT PLUS SIGN ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0000, 0, 0, 0}, 0x2080 }, // U2080 # SUBSCRIPT ZERO ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0000, 0, 0, 0}, 0x2083 }, // U2083 # SUBSCRIPT THREE ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0000, 0, 0, 0}, 0x2082 }, // U2082 # SUBSCRIPT TWO ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0000, 0, 0, 0}, 0x2083 }, // U2083 # SUBSCRIPT THREE ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0000, 0, 0, 0}, 0x2086 }, // U2086 # SUBSCRIPT SIX ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0000, 0, 0, 0}, 0x2088 }, // U2088 # SUBSCRIPT EIGHT ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0000, 0, 0, 0}, 0x2089 }, // U2089 # SUBSCRIPT NINE ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0000, 0, 0, 0}, 0x2089 }, // U2089 # SUBSCRIPT NINE ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0000, 0, 0, 0}, 0x2080 }, // U2080 # SUBSCRIPT ZERO ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0000, 0, 0, 0}, 0x2082 }, // U2082 # SUBSCRIPT TWO ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0000, 0, 0, 0}, 0x2081 }, // U2081 # SUBSCRIPT ONE ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0000, 0, 0, 0}, 0x2082 }, // U2082 # SUBSCRIPT TWO ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0000, 0, 0, 0}, 0x208c }, // U208C # SUBSCRIPT EQUALS SIGN ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0000, 0, 0, 0}, 0x208c }, // U208C # SUBSCRIPT EQUALS SIGN ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0000, 0x004c, 0, 0}, 0x1e38 }, // U1E38 # LATIN CAPITAL LETTER L WITH DOT BELOW AND MACRON ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0000, 0x004f, 0, 0}, 0x022c }, // U022C # LATIN CAPITAL LETTER O WITH TILDE AND MACRON ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0000, 0x0052, 0, 0}, 0x1e5c }, // U1E5C # LATIN CAPITAL LETTER R WITH DOT BELOW AND MACRON ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0000, 0x006c, 0, 0}, 0x1e39 }, // U1E39 # LATIN SMALL LETTER L WITH DOT BELOW AND MACRON ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0000, 0x006f, 0, 0}, 0x022d }, // U022D # LATIN SMALL LETTER O WITH TILDE AND MACRON ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0000, 0x0072, 0, 0}, 0x1e5d }, // U1E5D # LATIN SMALL LETTER R WITH DOT BELOW AND MACRON ++ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0021, 0x004c, 0, 0}, 0x1e38 }, // U1E38 # LATIN CAPITAL LETTER L WITH DOT BELOW AND MACRON ++ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0021, 0x0052, 0, 0}, 0x1e5c }, // U1E5C # LATIN CAPITAL LETTER R WITH DOT BELOW AND MACRON ++ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0021, 0x006c, 0, 0}, 0x1e39 }, // U1E39 # LATIN SMALL LETTER L WITH DOT BELOW AND MACRON ++ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0021, 0x0072, 0, 0}, 0x1e5d }, // U1E5D # LATIN SMALL LETTER R WITH DOT BELOW AND MACRON ++ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0022, 0x0041, 0, 0}, 0x01de }, // U01DE # LATIN CAPITAL LETTER A WITH DIAERESIS AND MACRON ++ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0022, 0x004f, 0, 0}, 0x022a }, // U022A # LATIN CAPITAL LETTER O WITH DIAERESIS AND MACRON ++ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0022, 0x0055, 0, 0}, 0x01d5 }, // U01D5 # LATIN CAPITAL LETTER U WITH DIAERESIS AND MACRON ++ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0022, 0x0061, 0, 0}, 0x01df }, // U01DF # LATIN SMALL LETTER A WITH DIAERESIS AND MACRON ++ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0022, 0x006f, 0, 0}, 0x022b }, // U022B # LATIN SMALL LETTER O WITH DIAERESIS AND MACRON ++ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0022, 0x0075, 0, 0}, 0x01d6 }, // U01D6 # LATIN SMALL LETTER U WITH DIAERESIS AND MACRON ++ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0028, 0, 0, 0}, 0x208d }, // U208D # SUBSCRIPT LEFT PARENTHESIS ++ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0028, 0, 0, 0}, 0x208d }, // U208D # SUBSCRIPT LEFT PARENTHESIS ++ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0029, 0, 0, 0}, 0x208e }, // U208E # SUBSCRIPT RIGHT PARENTHESIS ++ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0029, 0, 0, 0}, 0x208e }, // U208E # SUBSCRIPT RIGHT PARENTHESIS ++ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x002b, 0, 0, 0}, 0x208a }, // U208A # SUBSCRIPT PLUS SIGN ++ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x002b, 0, 0, 0}, 0x208a }, // U208A # SUBSCRIPT PLUS SIGN ++ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x002e, 0x0041, 0, 0}, 0x01e0 }, // U01E0 # LATIN CAPITAL LETTER A WITH DOT ABOVE AND MACRON ++ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x002e, 0x004f, 0, 0}, 0x0230 }, // U0230 # LATIN CAPITAL LETTER O WITH DOT ABOVE AND MACRON ++ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x002e, 0x0061, 0, 0}, 0x01e1 }, // U01E1 # LATIN SMALL LETTER A WITH DOT ABOVE AND MACRON ++ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x002e, 0x006f, 0, 0}, 0x0231 }, // U0231 # LATIN SMALL LETTER O WITH DOT ABOVE AND MACRON ++ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0030, 0, 0, 0}, 0x2080 }, // U2080 # SUBSCRIPT ZERO ++ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0030, 0, 0, 0}, 0x2080 }, // U2080 # SUBSCRIPT ZERO ++ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0031, 0, 0, 0}, 0x2081 }, // U2081 # SUBSCRIPT ONE ++ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0031, 0, 0, 0}, 0x2081 }, // U2081 # SUBSCRIPT ONE ++ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0032, 0, 0, 0}, 0x2082 }, // U2082 # SUBSCRIPT TWO ++ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0032, 0, 0, 0}, 0x2082 }, // U2082 # SUBSCRIPT TWO ++ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0033, 0, 0, 0}, 0x2083 }, // U2083 # SUBSCRIPT THREE ++ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0033, 0, 0, 0}, 0x2083 }, // U2083 # SUBSCRIPT THREE ++ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0034, 0, 0, 0}, 0x2084 }, // U2084 # SUBSCRIPT FOUR ++ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0034, 0, 0, 0}, 0x2084 }, // U2084 # SUBSCRIPT FOUR ++ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0035, 0, 0, 0}, 0x2085 }, // U2085 # SUBSCRIPT FIVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0035, 0, 0, 0}, 0x2085 }, // U2085 # SUBSCRIPT FIVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0036, 0, 0, 0}, 0x2086 }, // U2086 # SUBSCRIPT SIX ++ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0036, 0, 0, 0}, 0x2086 }, // U2086 # SUBSCRIPT SIX ++ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0037, 0, 0, 0}, 0x2087 }, // U2087 # SUBSCRIPT SEVEN ++ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0037, 0, 0, 0}, 0x2087 }, // U2087 # SUBSCRIPT SEVEN ++ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0038, 0, 0, 0}, 0x2088 }, // U2088 # SUBSCRIPT EIGHT ++ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0038, 0, 0, 0}, 0x2088 }, // U2088 # SUBSCRIPT EIGHT ++ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0039, 0, 0, 0}, 0x2089 }, // U2089 # SUBSCRIPT NINE ++ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0039, 0, 0, 0}, 0x2089 }, // U2089 # SUBSCRIPT NINE ++ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x003b, 0x004f, 0, 0}, 0x01ec }, // U01EC # LATIN CAPITAL LETTER O WITH OGONEK AND MACRON ++ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x003b, 0x006f, 0, 0}, 0x01ed }, // U01ED # LATIN SMALL LETTER O WITH OGONEK AND MACRON ++ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x003d, 0, 0, 0}, 0x208c }, // U208C # SUBSCRIPT EQUALS SIGN ++ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x003d, 0, 0, 0}, 0x208c }, // U208C # SUBSCRIPT EQUALS SIGN ++ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0041, 0, 0, 0}, 0x0100 }, // U0100 # LATIN CAPITAL LETTER A WITH MACRON ++ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0045, 0, 0, 0}, 0x0112 }, // U0112 # LATIN CAPITAL LETTER E WITH MACRON ++ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0047, 0, 0, 0}, 0x1e20 }, // U1E20 # LATIN CAPITAL LETTER G WITH MACRON ++ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0049, 0, 0, 0}, 0x012a }, // U012A # LATIN CAPITAL LETTER I WITH MACRON ++ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x004f, 0, 0, 0}, 0x014c }, // U014C # LATIN CAPITAL LETTER O WITH MACRON ++ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0055, 0, 0, 0}, 0x016a }, // U016A # LATIN CAPITAL LETTER U WITH MACRON ++ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0059, 0, 0, 0}, 0x0232 }, // U0232 # LATIN CAPITAL LETTER Y WITH MACRON ++ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0061, 0, 0, 0}, 0x0101 }, // U0101 # LATIN SMALL LETTER A WITH MACRON ++ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0065, 0, 0, 0}, 0x0113 }, // U0113 # LATIN SMALL LETTER E WITH MACRON ++ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0067, 0, 0, 0}, 0x1e21 }, // U1E21 # LATIN SMALL LETTER G WITH MACRON ++ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0069, 0, 0, 0}, 0x012b }, // U012B # LATIN SMALL LETTER I WITH MACRON ++ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x006f, 0, 0, 0}, 0x014d }, // U014D # LATIN SMALL LETTER O WITH MACRON ++ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0075, 0, 0, 0}, 0x016b }, // U016B # LATIN SMALL LETTER U WITH MACRON ++ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0079, 0, 0, 0}, 0x0233 }, // U0233 # LATIN SMALL LETTER Y WITH MACRON ++ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x007e, 0x004f, 0, 0}, 0x022c }, // U022C # LATIN CAPITAL LETTER O WITH TILDE AND MACRON ++ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x007e, 0x006f, 0, 0}, 0x022d }, // U022D # LATIN SMALL LETTER O WITH TILDE AND MACRON ++ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x00c4, 0, 0, 0}, 0x01de }, // U01DE # LATIN CAPITAL LETTER A WITH DIAERESIS AND MACRON ++ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x00c6, 0, 0, 0}, 0x01e2 }, // U01E2 # LATIN CAPITAL LETTER AE WITH MACRON ++ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x00d5, 0, 0, 0}, 0x022c }, // U022C # LATIN CAPITAL LETTER O WITH TILDE AND MACRON ++ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x00d6, 0, 0, 0}, 0x022a }, // U022A # LATIN CAPITAL LETTER O WITH DIAERESIS AND MACRON ++ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x00dc, 0, 0, 0}, 0x01d5 }, // U01D5 # LATIN CAPITAL LETTER U WITH DIAERESIS AND MACRON ++ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x00e4, 0, 0, 0}, 0x01df }, // U01DF # LATIN SMALL LETTER A WITH DIAERESIS AND MACRON ++ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x00e6, 0, 0, 0}, 0x01e3 }, // U01E3 # LATIN SMALL LETTER AE WITH MACRON ++ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x00f5, 0, 0, 0}, 0x022d }, // U022D # LATIN SMALL LETTER O WITH TILDE AND MACRON ++ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x00f6, 0, 0, 0}, 0x022b }, // U022B # LATIN SMALL LETTER O WITH DIAERESIS AND MACRON ++ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x00fc, 0, 0, 0}, 0x01d6 }, // U01D6 # LATIN SMALL LETTER U WITH DIAERESIS AND MACRON ++ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x01ea, 0, 0, 0}, 0x01ec }, // U01EC # LATIN CAPITAL LETTER O WITH OGONEK AND MACRON ++ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x01eb, 0, 0, 0}, 0x01ed }, // U01ED # LATIN SMALL LETTER O WITH OGONEK AND MACRON ++ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0226, 0, 0, 0}, 0x01e0 }, // U01E0 # LATIN CAPITAL LETTER A WITH DOT ABOVE AND MACRON ++ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0227, 0, 0, 0}, 0x01e1 }, // U01E1 # LATIN SMALL LETTER A WITH DOT ABOVE AND MACRON ++ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x022e, 0, 0, 0}, 0x0230 }, // U0230 # LATIN CAPITAL LETTER O WITH DOT ABOVE AND MACRON ++ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x022f, 0, 0, 0}, 0x0231 }, // U0231 # LATIN SMALL LETTER O WITH DOT ABOVE AND MACRON ++ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0391, 0, 0, 0}, 0x1fb9 }, // U1FB9 # GREEK CAPITAL LETTER ALPHA WITH MACRON ++ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0399, 0, 0, 0}, 0x1fd9 }, // U1FD9 # GREEK CAPITAL LETTER IOTA WITH MACRON ++ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x03a5, 0, 0, 0}, 0x1fe9 }, // U1FE9 # GREEK CAPITAL LETTER UPSILON WITH MACRON ++ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x03b1, 0, 0, 0}, 0x1fb1 }, // U1FB1 # GREEK SMALL LETTER ALPHA WITH MACRON ++ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x03b9, 0, 0, 0}, 0x1fd1 }, // U1FD1 # GREEK SMALL LETTER IOTA WITH MACRON ++ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x03c5, 0, 0, 0}, 0x1fe1 }, // U1FE1 # GREEK SMALL LETTER UPSILON WITH MACRON ++ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0418, 0, 0, 0}, 0x04e2 }, // U04E2 # CYRILLIC CAPITAL LETTER I WITH MACRON ++ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0423, 0, 0, 0}, 0x04ee }, // U04EE # CYRILLIC CAPITAL LETTER U WITH MACRON ++ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0438, 0, 0, 0}, 0x04e3 }, // U04E3 # CYRILLIC SMALL LETTER I WITH MACRON ++ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0443, 0, 0, 0}, 0x04ef }, // U04EF # CYRILLIC SMALL LETTER U WITH MACRON ++ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x1e36, 0, 0, 0}, 0x1e38 }, // U1E38 # LATIN CAPITAL LETTER L WITH DOT BELOW AND MACRON ++ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x1e37, 0, 0, 0}, 0x1e39 }, // U1E39 # LATIN SMALL LETTER L WITH DOT BELOW AND MACRON ++ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x1e5a, 0, 0, 0}, 0x1e5c }, // U1E5C # LATIN CAPITAL LETTER R WITH DOT BELOW AND MACRON ++ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x1e5b, 0, 0, 0}, 0x1e5d }, // U1E5D # LATIN SMALL LETTER R WITH DOT BELOW AND MACRON ++ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x2212, 0, 0, 0}, 0x208b }, // U208B # SUBSCRIPT MINUS ++ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x2212, 0, 0, 0}, 0x208b }, // U208B # SUBSCRIPT MINUS ++ { {UNITIZE(Qt::Key_Multi_key), 0x005f, UNITIZE(Qt::Key_Dead_Tilde), 0x004f, 0, 0}, 0x022c }, // U022C # LATIN CAPITAL LETTER O WITH TILDE AND MACRON ++ { {UNITIZE(Qt::Key_Multi_key), 0x005f, UNITIZE(Qt::Key_Dead_Tilde), 0x006f, 0, 0}, 0x022d }, // U022D # LATIN SMALL LETTER O WITH TILDE AND MACRON ++ { {UNITIZE(Qt::Key_Multi_key), 0x005f, UNITIZE(Qt::Key_Dead_Abovedot), 0x0041, 0, 0}, 0x01e0 }, // U01E0 # LATIN CAPITAL LETTER A WITH DOT ABOVE AND MACRON ++ { {UNITIZE(Qt::Key_Multi_key), 0x005f, UNITIZE(Qt::Key_Dead_Abovedot), 0x004f, 0, 0}, 0x0230 }, // U0230 # LATIN CAPITAL LETTER O WITH DOT ABOVE AND MACRON ++ { {UNITIZE(Qt::Key_Multi_key), 0x005f, UNITIZE(Qt::Key_Dead_Abovedot), 0x0061, 0, 0}, 0x01e1 }, // U01E1 # LATIN SMALL LETTER A WITH DOT ABOVE AND MACRON ++ { {UNITIZE(Qt::Key_Multi_key), 0x005f, UNITIZE(Qt::Key_Dead_Abovedot), 0x006f, 0, 0}, 0x0231 }, // U0231 # LATIN SMALL LETTER O WITH DOT ABOVE AND MACRON ++ { {UNITIZE(Qt::Key_Multi_key), 0x005f, UNITIZE(Qt::Key_Dead_Diaeresis), 0x0041, 0, 0}, 0x01de }, // U01DE # LATIN CAPITAL LETTER A WITH DIAERESIS AND MACRON ++ { {UNITIZE(Qt::Key_Multi_key), 0x005f, UNITIZE(Qt::Key_Dead_Diaeresis), 0x004f, 0, 0}, 0x022a }, // U022A # LATIN CAPITAL LETTER O WITH DIAERESIS AND MACRON ++ { {UNITIZE(Qt::Key_Multi_key), 0x005f, UNITIZE(Qt::Key_Dead_Diaeresis), 0x0055, 0, 0}, 0x01d5 }, // U01D5 # LATIN CAPITAL LETTER U WITH DIAERESIS AND MACRON ++ { {UNITIZE(Qt::Key_Multi_key), 0x005f, UNITIZE(Qt::Key_Dead_Diaeresis), 0x0061, 0, 0}, 0x01df }, // U01DF # LATIN SMALL LETTER A WITH DIAERESIS AND MACRON ++ { {UNITIZE(Qt::Key_Multi_key), 0x005f, UNITIZE(Qt::Key_Dead_Diaeresis), 0x006f, 0, 0}, 0x022b }, // U022B # LATIN SMALL LETTER O WITH DIAERESIS AND MACRON ++ { {UNITIZE(Qt::Key_Multi_key), 0x005f, UNITIZE(Qt::Key_Dead_Diaeresis), 0x0075, 0, 0}, 0x01d6 }, // U01D6 # LATIN SMALL LETTER U WITH DIAERESIS AND MACRON ++ { {UNITIZE(Qt::Key_Multi_key), 0x005f, UNITIZE(Qt::Key_Dead_Ogonek), 0x004f, 0, 0}, 0x01ec }, // U01EC # LATIN CAPITAL LETTER O WITH OGONEK AND MACRON ++ { {UNITIZE(Qt::Key_Multi_key), 0x005f, UNITIZE(Qt::Key_Dead_Ogonek), 0x006f, 0, 0}, 0x01ed }, // U01ED # LATIN SMALL LETTER O WITH OGONEK AND MACRON ++ { {UNITIZE(Qt::Key_Multi_key), 0x005f, UNITIZE(Qt::Key_Dead_Belowdot), 0x004c, 0, 0}, 0x1e38 }, // U1E38 # LATIN CAPITAL LETTER L WITH DOT BELOW AND MACRON ++ { {UNITIZE(Qt::Key_Multi_key), 0x005f, UNITIZE(Qt::Key_Dead_Belowdot), 0x0052, 0, 0}, 0x1e5c }, // U1E5C # LATIN CAPITAL LETTER R WITH DOT BELOW AND MACRON ++ { {UNITIZE(Qt::Key_Multi_key), 0x005f, UNITIZE(Qt::Key_Dead_Belowdot), 0x006c, 0, 0}, 0x1e39 }, // U1E39 # LATIN SMALL LETTER L WITH DOT BELOW AND MACRON ++ { {UNITIZE(Qt::Key_Multi_key), 0x005f, UNITIZE(Qt::Key_Dead_Belowdot), 0x0072, 0, 0}, 0x1e5d }, // U1E5D # LATIN SMALL LETTER R WITH DOT BELOW AND MACRON ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0000, 0, 0, 0}, 0x1edd }, // U1EDD # LATIN SMALL LETTER O WITH HORN AND GRAVE ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0000, 0, 0, 0}, 0x1eea }, // U1EEA # LATIN CAPITAL LETTER U WITH HORN AND GRAVE ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0000, 0, 0, 0}, 0x1edc }, // U1EDC # LATIN CAPITAL LETTER O WITH HORN AND GRAVE ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0000, 0, 0, 0}, 0x1eeb }, // U1EEB # LATIN SMALL LETTER U WITH HORN AND GRAVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0020, 0, 0, 0}, 0x0060 }, // grave ++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0022, 0x0055, 0, 0}, 0x01db }, // U01DB # LATIN CAPITAL LETTER U WITH DIAERESIS AND GRAVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0022, 0x0075, 0, 0}, 0x01dc }, // U01DC # LATIN SMALL LETTER U WITH DIAERESIS AND GRAVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0022, 0x03b9, 0, 0}, 0x1fd2 }, // U1FD2 # GREEK SMALL LETTER IOTA WITH DIALYTIKA AND VARIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0022, 0x03c5, 0, 0}, 0x1fe2 }, // U1FE2 # GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND VARIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0028, 0x0391, 0, 0}, 0x1f0b }, // U1F0B # GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0028, 0x0395, 0, 0}, 0x1f1b }, // U1F1B # GREEK CAPITAL LETTER EPSILON WITH DASIA AND VARIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0028, 0x0397, 0, 0}, 0x1f2b }, // U1F2B # GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0028, 0x0399, 0, 0}, 0x1f3b }, // U1F3B # GREEK CAPITAL LETTER IOTA WITH DASIA AND VARIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0028, 0x039f, 0, 0}, 0x1f4b }, // U1F4B # GREEK CAPITAL LETTER OMICRON WITH DASIA AND VARIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0028, 0x03a5, 0, 0}, 0x1f5b }, // U1F5B # GREEK CAPITAL LETTER UPSILON WITH DASIA AND VARIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0028, 0x03a9, 0, 0}, 0x1f6b }, // U1F6B # GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0028, 0x03b1, 0, 0}, 0x1f03 }, // U1F03 # GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0028, 0x03b5, 0, 0}, 0x1f13 }, // U1F13 # GREEK SMALL LETTER EPSILON WITH DASIA AND VARIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0028, 0x03b7, 0, 0}, 0x1f23 }, // U1F23 # GREEK SMALL LETTER ETA WITH DASIA AND VARIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0028, 0x03b9, 0, 0}, 0x1f33 }, // U1F33 # GREEK SMALL LETTER IOTA WITH DASIA AND VARIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0028, 0x03bf, 0, 0}, 0x1f43 }, // U1F43 # GREEK SMALL LETTER OMICRON WITH DASIA AND VARIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0028, 0x03c5, 0, 0}, 0x1f53 }, // U1F53 # GREEK SMALL LETTER UPSILON WITH DASIA AND VARIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0028, 0x03c9, 0, 0}, 0x1f63 }, // U1F63 # GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0029, 0x0391, 0, 0}, 0x1f0a }, // U1F0A # GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0029, 0x0395, 0, 0}, 0x1f1a }, // U1F1A # GREEK CAPITAL LETTER EPSILON WITH PSILI AND VARIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0029, 0x0397, 0, 0}, 0x1f2a }, // U1F2A # GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0029, 0x0399, 0, 0}, 0x1f3a }, // U1F3A # GREEK CAPITAL LETTER IOTA WITH PSILI AND VARIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0029, 0x039f, 0, 0}, 0x1f4a }, // U1F4A # GREEK CAPITAL LETTER OMICRON WITH PSILI AND VARIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0029, 0x03a9, 0, 0}, 0x1f6a }, // U1F6A # GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0029, 0x03b1, 0, 0}, 0x1f02 }, // U1F02 # GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0029, 0x03b5, 0, 0}, 0x1f12 }, // U1F12 # GREEK SMALL LETTER EPSILON WITH PSILI AND VARIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0029, 0x03b7, 0, 0}, 0x1f22 }, // U1F22 # GREEK SMALL LETTER ETA WITH PSILI AND VARIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0029, 0x03b9, 0, 0}, 0x1f32 }, // U1F32 # GREEK SMALL LETTER IOTA WITH PSILI AND VARIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0029, 0x03bf, 0, 0}, 0x1f42 }, // U1F42 # GREEK SMALL LETTER OMICRON WITH PSILI AND VARIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0029, 0x03c5, 0, 0}, 0x1f52 }, // U1F52 # GREEK SMALL LETTER UPSILON WITH PSILI AND VARIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0029, 0x03c9, 0, 0}, 0x1f62 }, // U1F62 # GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x002b, 0x004f, 0, 0}, 0x1edc }, // U1EDC # LATIN CAPITAL LETTER O WITH HORN AND GRAVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x002b, 0x0055, 0, 0}, 0x1eea }, // U1EEA # LATIN CAPITAL LETTER U WITH HORN AND GRAVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x002b, 0x006f, 0, 0}, 0x1edd }, // U1EDD # LATIN SMALL LETTER O WITH HORN AND GRAVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x002b, 0x0075, 0, 0}, 0x1eeb }, // U1EEB # LATIN SMALL LETTER U WITH HORN AND GRAVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0041, 0, 0, 0}, 0x00c0 }, // U00C0 # LATIN CAPITAL LETTER A WITH GRAVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0045, 0, 0, 0}, 0x00c8 }, // U00C8 # LATIN CAPITAL LETTER E WITH GRAVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0049, 0, 0, 0}, 0x00cc }, // U00CC # LATIN CAPITAL LETTER I WITH GRAVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x004e, 0, 0, 0}, 0x01f8 }, // U01F8 # LATIN CAPITAL LETTER N WITH GRAVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x004f, 0, 0, 0}, 0x00d2 }, // U00D2 # LATIN CAPITAL LETTER O WITH GRAVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0055, 0, 0, 0}, 0x00d9 }, // U00D9 # LATIN CAPITAL LETTER U WITH GRAVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0055, 0x0041, 0, 0}, 0x1eb0 }, // U1EB0 # LATIN CAPITAL LETTER A WITH BREVE AND GRAVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0055, 0x0061, 0, 0}, 0x1eb1 }, // U1EB1 # LATIN SMALL LETTER A WITH BREVE AND GRAVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0057, 0, 0, 0}, 0x1e80 }, // U1E80 # LATIN CAPITAL LETTER W WITH GRAVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0059, 0, 0, 0}, 0x1ef2 }, // U1EF2 # LATIN CAPITAL LETTER Y WITH GRAVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x005e, 0x0041, 0, 0}, 0x1ea6 }, // U1EA6 # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND GRAVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x005e, 0x0045, 0, 0}, 0x1ec0 }, // U1EC0 # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND GRAVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x005e, 0x004f, 0, 0}, 0x1ed2 }, // U1ED2 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND GRAVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x005e, 0x0061, 0, 0}, 0x1ea7 }, // U1EA7 # LATIN SMALL LETTER A WITH CIRCUMFLEX AND GRAVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x005e, 0x0065, 0, 0}, 0x1ec1 }, // U1EC1 # LATIN SMALL LETTER E WITH CIRCUMFLEX AND GRAVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x005e, 0x006f, 0, 0}, 0x1ed3 }, // U1ED3 # LATIN SMALL LETTER O WITH CIRCUMFLEX AND GRAVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x005f, 0x0045, 0, 0}, 0x1e14 }, // U1E14 # LATIN CAPITAL LETTER E WITH MACRON AND GRAVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x005f, 0x004f, 0, 0}, 0x1e50 }, // U1E50 # LATIN CAPITAL LETTER O WITH MACRON AND GRAVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x005f, 0x0065, 0, 0}, 0x1e15 }, // U1E15 # LATIN SMALL LETTER E WITH MACRON AND GRAVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x005f, 0x006f, 0, 0}, 0x1e51 }, // U1E51 # LATIN SMALL LETTER O WITH MACRON AND GRAVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0061, 0, 0, 0}, 0x00e0 }, // U00E0 # LATIN SMALL LETTER A WITH GRAVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0062, 0x0041, 0, 0}, 0x1eb0 }, // U1EB0 # LATIN CAPITAL LETTER A WITH BREVE AND GRAVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0062, 0x0061, 0, 0}, 0x1eb1 }, // U1EB1 # LATIN SMALL LETTER A WITH BREVE AND GRAVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0065, 0, 0, 0}, 0x00e8 }, // U00E8 # LATIN SMALL LETTER E WITH GRAVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0069, 0, 0, 0}, 0x00ec }, // U00EC # LATIN SMALL LETTER I WITH GRAVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x006e, 0, 0, 0}, 0x01f9 }, // U01F9 # LATIN SMALL LETTER N WITH GRAVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x006f, 0, 0, 0}, 0x00f2 }, // U00F2 # LATIN SMALL LETTER O WITH GRAVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0075, 0, 0, 0}, 0x00f9 }, // U00F9 # LATIN SMALL LETTER U WITH GRAVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0077, 0, 0, 0}, 0x1e81 }, // U1E81 # LATIN SMALL LETTER W WITH GRAVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0079, 0, 0, 0}, 0x1ef3 }, // U1EF3 # LATIN SMALL LETTER Y WITH GRAVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x00af, 0x0045, 0, 0}, 0x1e14 }, // U1E14 # LATIN CAPITAL LETTER E WITH MACRON AND GRAVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x00af, 0x004f, 0, 0}, 0x1e50 }, // U1E50 # LATIN CAPITAL LETTER O WITH MACRON AND GRAVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x00af, 0x0065, 0, 0}, 0x1e15 }, // U1E15 # LATIN SMALL LETTER E WITH MACRON AND GRAVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x00af, 0x006f, 0, 0}, 0x1e51 }, // U1E51 # LATIN SMALL LETTER O WITH MACRON AND GRAVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x00c2, 0, 0, 0}, 0x1ea6 }, // U1EA6 # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND GRAVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x00ca, 0, 0, 0}, 0x1ec0 }, // U1EC0 # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND GRAVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x00d4, 0, 0, 0}, 0x1ed2 }, // U1ED2 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND GRAVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x00dc, 0, 0, 0}, 0x01db }, // U01DB # LATIN CAPITAL LETTER U WITH DIAERESIS AND GRAVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x00e2, 0, 0, 0}, 0x1ea7 }, // U1EA7 # LATIN SMALL LETTER A WITH CIRCUMFLEX AND GRAVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x00ea, 0, 0, 0}, 0x1ec1 }, // U1EC1 # LATIN SMALL LETTER E WITH CIRCUMFLEX AND GRAVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x00f4, 0, 0, 0}, 0x1ed3 }, // U1ED3 # LATIN SMALL LETTER O WITH CIRCUMFLEX AND GRAVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x00fc, 0, 0, 0}, 0x01dc }, // U01DC # LATIN SMALL LETTER U WITH DIAERESIS AND GRAVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0102, 0, 0, 0}, 0x1eb0 }, // U1EB0 # LATIN CAPITAL LETTER A WITH BREVE AND GRAVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0103, 0, 0, 0}, 0x1eb1 }, // U1EB1 # LATIN SMALL LETTER A WITH BREVE AND GRAVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0112, 0, 0, 0}, 0x1e14 }, // U1E14 # LATIN CAPITAL LETTER E WITH MACRON AND GRAVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0113, 0, 0, 0}, 0x1e15 }, // U1E15 # LATIN SMALL LETTER E WITH MACRON AND GRAVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x014c, 0, 0, 0}, 0x1e50 }, // U1E50 # LATIN CAPITAL LETTER O WITH MACRON AND GRAVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x014d, 0, 0, 0}, 0x1e51 }, // U1E51 # LATIN SMALL LETTER O WITH MACRON AND GRAVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0313, 0x0391, 0, 0}, 0x1f0a }, // U1F0A # GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0313, 0x0395, 0, 0}, 0x1f1a }, // U1F1A # GREEK CAPITAL LETTER EPSILON WITH PSILI AND VARIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0313, 0x0397, 0, 0}, 0x1f2a }, // U1F2A # GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0313, 0x0399, 0, 0}, 0x1f3a }, // U1F3A # GREEK CAPITAL LETTER IOTA WITH PSILI AND VARIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0313, 0x039f, 0, 0}, 0x1f4a }, // U1F4A # GREEK CAPITAL LETTER OMICRON WITH PSILI AND VARIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0313, 0x03a9, 0, 0}, 0x1f6a }, // U1F6A # GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0313, 0x03b1, 0, 0}, 0x1f02 }, // U1F02 # GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0313, 0x03b5, 0, 0}, 0x1f12 }, // U1F12 # GREEK SMALL LETTER EPSILON WITH PSILI AND VARIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0313, 0x03b7, 0, 0}, 0x1f22 }, // U1F22 # GREEK SMALL LETTER ETA WITH PSILI AND VARIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0313, 0x03b9, 0, 0}, 0x1f32 }, // U1F32 # GREEK SMALL LETTER IOTA WITH PSILI AND VARIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0313, 0x03bf, 0, 0}, 0x1f42 }, // U1F42 # GREEK SMALL LETTER OMICRON WITH PSILI AND VARIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0313, 0x03c5, 0, 0}, 0x1f52 }, // U1F52 # GREEK SMALL LETTER UPSILON WITH PSILI AND VARIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0313, 0x03c9, 0, 0}, 0x1f62 }, // U1F62 # GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0314, 0x0391, 0, 0}, 0x1f0b }, // U1F0B # GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0314, 0x0395, 0, 0}, 0x1f1b }, // U1F1B # GREEK CAPITAL LETTER EPSILON WITH DASIA AND VARIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0314, 0x0397, 0, 0}, 0x1f2b }, // U1F2B # GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0314, 0x0399, 0, 0}, 0x1f3b }, // U1F3B # GREEK CAPITAL LETTER IOTA WITH DASIA AND VARIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0314, 0x039f, 0, 0}, 0x1f4b }, // U1F4B # GREEK CAPITAL LETTER OMICRON WITH DASIA AND VARIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0314, 0x03a5, 0, 0}, 0x1f5b }, // U1F5B # GREEK CAPITAL LETTER UPSILON WITH DASIA AND VARIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0314, 0x03a9, 0, 0}, 0x1f6b }, // U1F6B # GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0314, 0x03b1, 0, 0}, 0x1f03 }, // U1F03 # GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0314, 0x03b5, 0, 0}, 0x1f13 }, // U1F13 # GREEK SMALL LETTER EPSILON WITH DASIA AND VARIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0314, 0x03b7, 0, 0}, 0x1f23 }, // U1F23 # GREEK SMALL LETTER ETA WITH DASIA AND VARIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0314, 0x03b9, 0, 0}, 0x1f33 }, // U1F33 # GREEK SMALL LETTER IOTA WITH DASIA AND VARIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0314, 0x03bf, 0, 0}, 0x1f43 }, // U1F43 # GREEK SMALL LETTER OMICRON WITH DASIA AND VARIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0314, 0x03c5, 0, 0}, 0x1f53 }, // U1F53 # GREEK SMALL LETTER UPSILON WITH DASIA AND VARIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0314, 0x03c9, 0, 0}, 0x1f63 }, // U1F63 # GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0391, 0, 0, 0}, 0x1fba }, // U1FBA # GREEK CAPITAL LETTER ALPHA WITH VARIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0395, 0, 0, 0}, 0x1fc8 }, // U1FC8 # GREEK CAPITAL LETTER EPSILON WITH VARIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0397, 0, 0, 0}, 0x1fca }, // U1FCA # GREEK CAPITAL LETTER ETA WITH VARIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0399, 0, 0, 0}, 0x1fda }, // U1FDA # GREEK CAPITAL LETTER IOTA WITH VARIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x039f, 0, 0, 0}, 0x1ff8 }, // U1FF8 # GREEK CAPITAL LETTER OMICRON WITH VARIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x03a5, 0, 0, 0}, 0x1fea }, // U1FEA # GREEK CAPITAL LETTER UPSILON WITH VARIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x03a9, 0, 0, 0}, 0x1ffa }, // U1FFA # GREEK CAPITAL LETTER OMEGA WITH VARIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x03b1, 0, 0, 0}, 0x1f70 }, // U1F70 # GREEK SMALL LETTER ALPHA WITH VARIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x03b5, 0, 0, 0}, 0x1f72 }, // U1F72 # GREEK SMALL LETTER EPSILON WITH VARIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x03b7, 0, 0, 0}, 0x1f74 }, // U1F74 # GREEK SMALL LETTER ETA WITH VARIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x03b9, 0, 0, 0}, 0x1f76 }, // U1F76 # GREEK SMALL LETTER IOTA WITH VARIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x03bf, 0, 0, 0}, 0x1f78 }, // U1F78 # GREEK SMALL LETTER OMICRON WITH VARIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x03c5, 0, 0, 0}, 0x1f7a }, // U1F7A # GREEK SMALL LETTER UPSILON WITH VARIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x03c9, 0, 0, 0}, 0x1f7c }, // U1F7C # GREEK SMALL LETTER OMEGA WITH VARIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x03ca, 0, 0, 0}, 0x1fd2 }, // U1FD2 # GREEK SMALL LETTER IOTA WITH DIALYTIKA AND VARIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x03cb, 0, 0, 0}, 0x1fe2 }, // U1FE2 # GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND VARIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0415, 0, 0, 0}, 0x0400 }, // U0400 # CYRILLIC CAPITAL LETTER IE WITH GRAVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0418, 0, 0, 0}, 0x040d }, // U040D # CYRILLIC CAPITAL LETTER I WITH GRAVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0435, 0, 0, 0}, 0x0450 }, // U0450 # CYRILLIC SMALL LETTER IE WITH GRAVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0438, 0, 0, 0}, 0x045d }, // U045D # CYRILLIC SMALL LETTER I WITH GRAVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x1f00, 0, 0, 0}, 0x1f02 }, // U1F02 # GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x1f01, 0, 0, 0}, 0x1f03 }, // U1F03 # GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x1f08, 0, 0, 0}, 0x1f0a }, // U1F0A # GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x1f09, 0, 0, 0}, 0x1f0b }, // U1F0B # GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x1f10, 0, 0, 0}, 0x1f12 }, // U1F12 # GREEK SMALL LETTER EPSILON WITH PSILI AND VARIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x1f11, 0, 0, 0}, 0x1f13 }, // U1F13 # GREEK SMALL LETTER EPSILON WITH DASIA AND VARIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x1f18, 0, 0, 0}, 0x1f1a }, // U1F1A # GREEK CAPITAL LETTER EPSILON WITH PSILI AND VARIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x1f19, 0, 0, 0}, 0x1f1b }, // U1F1B # GREEK CAPITAL LETTER EPSILON WITH DASIA AND VARIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x1f20, 0, 0, 0}, 0x1f22 }, // U1F22 # GREEK SMALL LETTER ETA WITH PSILI AND VARIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x1f21, 0, 0, 0}, 0x1f23 }, // U1F23 # GREEK SMALL LETTER ETA WITH DASIA AND VARIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x1f28, 0, 0, 0}, 0x1f2a }, // U1F2A # GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x1f29, 0, 0, 0}, 0x1f2b }, // U1F2B # GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x1f30, 0, 0, 0}, 0x1f32 }, // U1F32 # GREEK SMALL LETTER IOTA WITH PSILI AND VARIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x1f31, 0, 0, 0}, 0x1f33 }, // U1F33 # GREEK SMALL LETTER IOTA WITH DASIA AND VARIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x1f38, 0, 0, 0}, 0x1f3a }, // U1F3A # GREEK CAPITAL LETTER IOTA WITH PSILI AND VARIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x1f39, 0, 0, 0}, 0x1f3b }, // U1F3B # GREEK CAPITAL LETTER IOTA WITH DASIA AND VARIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x1f40, 0, 0, 0}, 0x1f42 }, // U1F42 # GREEK SMALL LETTER OMICRON WITH PSILI AND VARIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x1f41, 0, 0, 0}, 0x1f43 }, // U1F43 # GREEK SMALL LETTER OMICRON WITH DASIA AND VARIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x1f48, 0, 0, 0}, 0x1f4a }, // U1F4A # GREEK CAPITAL LETTER OMICRON WITH PSILI AND VARIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x1f49, 0, 0, 0}, 0x1f4b }, // U1F4B # GREEK CAPITAL LETTER OMICRON WITH DASIA AND VARIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x1f50, 0, 0, 0}, 0x1f52 }, // U1F52 # GREEK SMALL LETTER UPSILON WITH PSILI AND VARIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x1f51, 0, 0, 0}, 0x1f53 }, // U1F53 # GREEK SMALL LETTER UPSILON WITH DASIA AND VARIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x1f59, 0, 0, 0}, 0x1f5b }, // U1F5B # GREEK CAPITAL LETTER UPSILON WITH DASIA AND VARIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x1f60, 0, 0, 0}, 0x1f62 }, // U1F62 # GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x1f61, 0, 0, 0}, 0x1f63 }, // U1F63 # GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x1f68, 0, 0, 0}, 0x1f6a }, // U1F6A # GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x1f69, 0, 0, 0}, 0x1f6b }, // U1F6B # GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, UNITIZE(Qt::Key_Dead_Circumflex), 0x0041, 0, 0}, 0x1ea6 }, // U1EA6 # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND GRAVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, UNITIZE(Qt::Key_Dead_Circumflex), 0x0045, 0, 0}, 0x1ec0 }, // U1EC0 # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND GRAVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, UNITIZE(Qt::Key_Dead_Circumflex), 0x004f, 0, 0}, 0x1ed2 }, // U1ED2 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND GRAVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, UNITIZE(Qt::Key_Dead_Circumflex), 0x0061, 0, 0}, 0x1ea7 }, // U1EA7 # LATIN SMALL LETTER A WITH CIRCUMFLEX AND GRAVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, UNITIZE(Qt::Key_Dead_Circumflex), 0x0065, 0, 0}, 0x1ec1 }, // U1EC1 # LATIN SMALL LETTER E WITH CIRCUMFLEX AND GRAVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, UNITIZE(Qt::Key_Dead_Circumflex), 0x006f, 0, 0}, 0x1ed3 }, // U1ED3 # LATIN SMALL LETTER O WITH CIRCUMFLEX AND GRAVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, UNITIZE(Qt::Key_Dead_Macron), 0x0045, 0, 0}, 0x1e14 }, // U1E14 # LATIN CAPITAL LETTER E WITH MACRON AND GRAVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, UNITIZE(Qt::Key_Dead_Macron), 0x004f, 0, 0}, 0x1e50 }, // U1E50 # LATIN CAPITAL LETTER O WITH MACRON AND GRAVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, UNITIZE(Qt::Key_Dead_Macron), 0x0065, 0, 0}, 0x1e15 }, // U1E15 # LATIN SMALL LETTER E WITH MACRON AND GRAVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, UNITIZE(Qt::Key_Dead_Macron), 0x006f, 0, 0}, 0x1e51 }, // U1E51 # LATIN SMALL LETTER O WITH MACRON AND GRAVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, UNITIZE(Qt::Key_Dead_Breve), 0x0041, 0, 0}, 0x1eb0 }, // U1EB0 # LATIN CAPITAL LETTER A WITH BREVE AND GRAVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, UNITIZE(Qt::Key_Dead_Breve), 0x0061, 0, 0}, 0x1eb1 }, // U1EB1 # LATIN SMALL LETTER A WITH BREVE AND GRAVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, UNITIZE(Qt::Key_Dead_Diaeresis), 0x0055, 0, 0}, 0x01db }, // U01DB # LATIN CAPITAL LETTER U WITH DIAERESIS AND GRAVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, UNITIZE(Qt::Key_Dead_Diaeresis), 0x0075, 0, 0}, 0x01dc }, // U01DC # LATIN SMALL LETTER U WITH DIAERESIS AND GRAVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, UNITIZE(Qt::Key_Dead_Diaeresis), 0x03b9, 0, 0}, 0x1fd2 }, // U1FD2 # GREEK SMALL LETTER IOTA WITH DIALYTIKA AND VARIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, UNITIZE(Qt::Key_Dead_Diaeresis), 0x03c5, 0, 0}, 0x1fe2 }, // U1FE2 # GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND VARIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, UNITIZE(Qt::Key_Dead_Horn), 0x004f, 0, 0}, 0x1edc }, // U1EDC # LATIN CAPITAL LETTER O WITH HORN AND GRAVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, UNITIZE(Qt::Key_Dead_Horn), 0x0055, 0, 0}, 0x1eea }, // U1EEA # LATIN CAPITAL LETTER U WITH HORN AND GRAVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, UNITIZE(Qt::Key_Dead_Horn), 0x006f, 0, 0}, 0x1edd }, // U1EDD # LATIN SMALL LETTER O WITH HORN AND GRAVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, UNITIZE(Qt::Key_Dead_Horn), 0x0075, 0, 0}, 0x1eeb }, // U1EEB # LATIN SMALL LETTER U WITH HORN AND GRAVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0061, 0x0065, 0, 0, 0}, 0x00e6 }, // ae ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0062, 0x0000, 0x0041, 0, 0}, 0x1eb6 }, // U1EB6 # LATIN CAPITAL LETTER A WITH BREVE AND DOT BELOW ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0062, 0x0000, 0x0061, 0, 0}, 0x1eb7 }, // U1EB7 # LATIN SMALL LETTER A WITH BREVE AND DOT BELOW ++ { {UNITIZE(Qt::Key_Multi_key), 0x0062, 0x0021, 0x0041, 0, 0}, 0x1eb6 }, // U1EB6 # LATIN CAPITAL LETTER A WITH BREVE AND DOT BELOW ++ { {UNITIZE(Qt::Key_Multi_key), 0x0062, 0x0021, 0x0061, 0, 0}, 0x1eb7 }, // U1EB7 # LATIN SMALL LETTER A WITH BREVE AND DOT BELOW ++ { {UNITIZE(Qt::Key_Multi_key), 0x0062, 0x002c, 0x0045, 0, 0}, 0x1e1c }, // U1E1C # LATIN CAPITAL LETTER E WITH CEDILLA AND BREVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0062, 0x002c, 0x0065, 0, 0}, 0x1e1d }, // U1E1D # LATIN SMALL LETTER E WITH CEDILLA AND BREVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0062, 0x0041, 0, 0, 0}, 0x0102 }, // U0102 # LATIN CAPITAL LETTER A WITH BREVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0062, 0x0045, 0, 0, 0}, 0x0114 }, // U0114 # LATIN CAPITAL LETTER E WITH BREVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0062, 0x0047, 0, 0, 0}, 0x011e }, // U011E # LATIN CAPITAL LETTER G WITH BREVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0062, 0x0049, 0, 0, 0}, 0x012c }, // U012C # LATIN CAPITAL LETTER I WITH BREVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0062, 0x004f, 0, 0, 0}, 0x014e }, // U014E # LATIN CAPITAL LETTER O WITH BREVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0062, 0x0055, 0, 0, 0}, 0x016c }, // U016C # LATIN CAPITAL LETTER U WITH BREVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0062, 0x0061, 0, 0, 0}, 0x0103 }, // U0103 # LATIN SMALL LETTER A WITH BREVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0062, 0x0065, 0, 0, 0}, 0x0115 }, // U0115 # LATIN SMALL LETTER E WITH BREVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0062, 0x0067, 0, 0, 0}, 0x011f }, // U011F # LATIN SMALL LETTER G WITH BREVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0062, 0x0069, 0, 0, 0}, 0x012d }, // U012D # LATIN SMALL LETTER I WITH BREVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0062, 0x006f, 0, 0, 0}, 0x014f }, // U014F # LATIN SMALL LETTER O WITH BREVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0062, 0x0075, 0, 0, 0}, 0x016d }, // U016D # LATIN SMALL LETTER U WITH BREVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0062, 0x0228, 0, 0, 0}, 0x1e1c }, // U1E1C # LATIN CAPITAL LETTER E WITH CEDILLA AND BREVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0062, 0x0229, 0, 0, 0}, 0x1e1d }, // U1E1D # LATIN SMALL LETTER E WITH CEDILLA AND BREVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0062, 0x0391, 0, 0, 0}, 0x1fb8 }, // U1FB8 # GREEK CAPITAL LETTER ALPHA WITH VRACHY ++ { {UNITIZE(Qt::Key_Multi_key), 0x0062, 0x0399, 0, 0, 0}, 0x1fd8 }, // U1FD8 # GREEK CAPITAL LETTER IOTA WITH VRACHY ++ { {UNITIZE(Qt::Key_Multi_key), 0x0062, 0x03a5, 0, 0, 0}, 0x1fe8 }, // U1FE8 # GREEK CAPITAL LETTER UPSILON WITH VRACHY ++ { {UNITIZE(Qt::Key_Multi_key), 0x0062, 0x03b1, 0, 0, 0}, 0x1fb0 }, // U1FB0 # GREEK SMALL LETTER ALPHA WITH VRACHY ++ { {UNITIZE(Qt::Key_Multi_key), 0x0062, 0x03b9, 0, 0, 0}, 0x1fd0 }, // U1FD0 # GREEK SMALL LETTER IOTA WITH VRACHY ++ { {UNITIZE(Qt::Key_Multi_key), 0x0062, 0x03c5, 0, 0, 0}, 0x1fe0 }, // U1FE0 # GREEK SMALL LETTER UPSILON WITH VRACHY ++ { {UNITIZE(Qt::Key_Multi_key), 0x0062, 0x0410, 0, 0, 0}, 0x04d0 }, // U04D0 # CYRILLIC CAPITAL LETTER A WITH BREVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0062, 0x0415, 0, 0, 0}, 0x04d6 }, // U04D6 # CYRILLIC CAPITAL LETTER IE WITH BREVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0062, 0x0416, 0, 0, 0}, 0x04c1 }, // U04C1 # CYRILLIC CAPITAL LETTER ZHE WITH BREVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0062, 0x0418, 0, 0, 0}, 0x0419 }, // U0419 # CYRILLIC CAPITAL LETTER SHORT I ++ { {UNITIZE(Qt::Key_Multi_key), 0x0062, 0x0423, 0, 0, 0}, 0x040e }, // U040E # CYRILLIC CAPITAL LETTER SHORT U ++ { {UNITIZE(Qt::Key_Multi_key), 0x0062, 0x0430, 0, 0, 0}, 0x04d1 }, // U04D1 # CYRILLIC SMALL LETTER A WITH BREVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0062, 0x0435, 0, 0, 0}, 0x04d7 }, // U04D7 # CYRILLIC SMALL LETTER IE WITH BREVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0062, 0x0436, 0, 0, 0}, 0x04c2 }, // U04C2 # CYRILLIC SMALL LETTER ZHE WITH BREVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0062, 0x0438, 0, 0, 0}, 0x0439 }, // U0439 # CYRILLIC SMALL LETTER SHORT I ++ { {UNITIZE(Qt::Key_Multi_key), 0x0062, 0x0443, 0, 0, 0}, 0x045e }, // U045E # CYRILLIC SMALL LETTER SHORT U ++ { {UNITIZE(Qt::Key_Multi_key), 0x0062, 0x1ea0, 0, 0, 0}, 0x1eb6 }, // U1EB6 # LATIN CAPITAL LETTER A WITH BREVE AND DOT BELOW ++ { {UNITIZE(Qt::Key_Multi_key), 0x0062, 0x1ea1, 0, 0, 0}, 0x1eb7 }, // U1EB7 # LATIN SMALL LETTER A WITH BREVE AND DOT BELOW ++ { {UNITIZE(Qt::Key_Multi_key), 0x0062, UNITIZE(Qt::Key_Dead_Cedilla), 0x0045, 0, 0}, 0x1e1c }, // U1E1C # LATIN CAPITAL LETTER E WITH CEDILLA AND BREVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0062, UNITIZE(Qt::Key_Dead_Cedilla), 0x0065, 0, 0}, 0x1e1d }, // U1E1D # LATIN SMALL LETTER E WITH CEDILLA AND BREVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0062, UNITIZE(Qt::Key_Dead_Belowdot), 0x0041, 0, 0}, 0x1eb6 }, // U1EB6 # LATIN CAPITAL LETTER A WITH BREVE AND DOT BELOW ++ { {UNITIZE(Qt::Key_Multi_key), 0x0062, UNITIZE(Qt::Key_Dead_Belowdot), 0x0061, 0, 0}, 0x1eb7 }, // U1EB7 # LATIN SMALL LETTER A WITH BREVE AND DOT BELOW ++ { {UNITIZE(Qt::Key_Multi_key), 0x0063, 0x0022, 0x0055, 0, 0}, 0x01d9 }, // U01D9 # LATIN CAPITAL LETTER U WITH DIAERESIS AND CARON ++ { {UNITIZE(Qt::Key_Multi_key), 0x0063, 0x0022, 0x0075, 0, 0}, 0x01da }, // U01DA # LATIN SMALL LETTER U WITH DIAERESIS AND CARON ++ { {UNITIZE(Qt::Key_Multi_key), 0x0063, 0x002f, 0, 0, 0}, 0x00a2 }, // U00A2 # CENT SIGN ++ { {UNITIZE(Qt::Key_Multi_key), 0x0063, 0x0041, 0, 0, 0}, 0x01cd }, // U01CD # LATIN CAPITAL LETTER A WITH CARON ++ { {UNITIZE(Qt::Key_Multi_key), 0x0063, 0x0043, 0, 0, 0}, 0x010c }, // U010C # LATIN CAPITAL LETTER C WITH CARON ++ { {UNITIZE(Qt::Key_Multi_key), 0x0063, 0x0044, 0, 0, 0}, 0x010e }, // U010E # LATIN CAPITAL LETTER D WITH CARON ++ { {UNITIZE(Qt::Key_Multi_key), 0x0063, 0x0045, 0, 0, 0}, 0x011a }, // U011A # LATIN CAPITAL LETTER E WITH CARON ++ { {UNITIZE(Qt::Key_Multi_key), 0x0063, 0x0047, 0, 0, 0}, 0x01e6 }, // U01E6 # LATIN CAPITAL LETTER G WITH CARON ++ { {UNITIZE(Qt::Key_Multi_key), 0x0063, 0x0048, 0, 0, 0}, 0x021e }, // U021E # LATIN CAPITAL LETTER H WITH CARON ++ { {UNITIZE(Qt::Key_Multi_key), 0x0063, 0x0049, 0, 0, 0}, 0x01cf }, // U01CF # LATIN CAPITAL LETTER I WITH CARON ++ { {UNITIZE(Qt::Key_Multi_key), 0x0063, 0x004b, 0, 0, 0}, 0x01e8 }, // U01E8 # LATIN CAPITAL LETTER K WITH CARON ++ { {UNITIZE(Qt::Key_Multi_key), 0x0063, 0x004c, 0, 0, 0}, 0x013d }, // U013D # LATIN CAPITAL LETTER L WITH CARON ++ { {UNITIZE(Qt::Key_Multi_key), 0x0063, 0x004e, 0, 0, 0}, 0x0147 }, // U0147 # LATIN CAPITAL LETTER N WITH CARON ++ { {UNITIZE(Qt::Key_Multi_key), 0x0063, 0x004f, 0, 0, 0}, 0x01d1 }, // U01D1 # LATIN CAPITAL LETTER O WITH CARON ++ { {UNITIZE(Qt::Key_Multi_key), 0x0063, 0x0052, 0, 0, 0}, 0x0158 }, // U0158 # LATIN CAPITAL LETTER R WITH CARON ++ { {UNITIZE(Qt::Key_Multi_key), 0x0063, 0x0053, 0, 0, 0}, 0x0160 }, // U0160 # LATIN CAPITAL LETTER S WITH CARON ++ { {UNITIZE(Qt::Key_Multi_key), 0x0063, 0x0054, 0, 0, 0}, 0x0164 }, // U0164 # LATIN CAPITAL LETTER T WITH CARON ++ { {UNITIZE(Qt::Key_Multi_key), 0x0063, 0x0055, 0, 0, 0}, 0x01d3 }, // U01D3 # LATIN CAPITAL LETTER U WITH CARON ++ { {UNITIZE(Qt::Key_Multi_key), 0x0063, 0x005a, 0, 0, 0}, 0x017d }, // U017D # LATIN CAPITAL LETTER Z WITH CARON ++ { {UNITIZE(Qt::Key_Multi_key), 0x0063, 0x0061, 0, 0, 0}, 0x01ce }, // U01CE # LATIN SMALL LETTER A WITH CARON ++ { {UNITIZE(Qt::Key_Multi_key), 0x0063, 0x0063, 0, 0, 0}, 0x010d }, // U010D # LATIN SMALL LETTER C WITH CARON ++ { {UNITIZE(Qt::Key_Multi_key), 0x0063, 0x0064, 0, 0, 0}, 0x010f }, // U010F # LATIN SMALL LETTER D WITH CARON ++ { {UNITIZE(Qt::Key_Multi_key), 0x0063, 0x0065, 0, 0, 0}, 0x011b }, // U011B # LATIN SMALL LETTER E WITH CARON ++ { {UNITIZE(Qt::Key_Multi_key), 0x0063, 0x0067, 0, 0, 0}, 0x01e7 }, // U01E7 # LATIN SMALL LETTER G WITH CARON ++ { {UNITIZE(Qt::Key_Multi_key), 0x0063, 0x0068, 0, 0, 0}, 0x021f }, // U021F # LATIN SMALL LETTER H WITH CARON ++ { {UNITIZE(Qt::Key_Multi_key), 0x0063, 0x0069, 0, 0, 0}, 0x01d0 }, // U01D0 # LATIN SMALL LETTER I WITH CARON ++ { {UNITIZE(Qt::Key_Multi_key), 0x0063, 0x006a, 0, 0, 0}, 0x01f0 }, // U01F0 # LATIN SMALL LETTER J WITH CARON ++ { {UNITIZE(Qt::Key_Multi_key), 0x0063, 0x006b, 0, 0, 0}, 0x01e9 }, // U01E9 # LATIN SMALL LETTER K WITH CARON ++ { {UNITIZE(Qt::Key_Multi_key), 0x0063, 0x006c, 0, 0, 0}, 0x013e }, // U013E # LATIN SMALL LETTER L WITH CARON ++ { {UNITIZE(Qt::Key_Multi_key), 0x0063, 0x006e, 0, 0, 0}, 0x0148 }, // U0148 # LATIN SMALL LETTER N WITH CARON ++ { {UNITIZE(Qt::Key_Multi_key), 0x0063, 0x006f, 0, 0, 0}, 0x01d2 }, // U01D2 # LATIN SMALL LETTER O WITH CARON ++ { {UNITIZE(Qt::Key_Multi_key), 0x0063, 0x0072, 0, 0, 0}, 0x0159 }, // U0159 # LATIN SMALL LETTER R WITH CARON ++ { {UNITIZE(Qt::Key_Multi_key), 0x0063, 0x0073, 0, 0, 0}, 0x0161 }, // U0161 # LATIN SMALL LETTER S WITH CARON ++ { {UNITIZE(Qt::Key_Multi_key), 0x0063, 0x0074, 0, 0, 0}, 0x0165 }, // U0165 # LATIN SMALL LETTER T WITH CARON ++ { {UNITIZE(Qt::Key_Multi_key), 0x0063, 0x0075, 0, 0, 0}, 0x01d4 }, // U01D4 # LATIN SMALL LETTER U WITH CARON ++ { {UNITIZE(Qt::Key_Multi_key), 0x0063, 0x007a, 0, 0, 0}, 0x017e }, // U017E # LATIN SMALL LETTER Z WITH CARON ++ { {UNITIZE(Qt::Key_Multi_key), 0x0063, 0x007c, 0, 0, 0}, 0x00a2 }, // U00A2 # CENT SIGN ++ { {UNITIZE(Qt::Key_Multi_key), 0x0063, 0x00dc, 0, 0, 0}, 0x01d9 }, // U01D9 # LATIN CAPITAL LETTER U WITH DIAERESIS AND CARON ++ { {UNITIZE(Qt::Key_Multi_key), 0x0063, 0x00fc, 0, 0, 0}, 0x01da }, // U01DA # LATIN SMALL LETTER U WITH DIAERESIS AND CARON ++ { {UNITIZE(Qt::Key_Multi_key), 0x0063, 0x01b7, 0, 0, 0}, 0x01ee }, // U01EE # LATIN CAPITAL LETTER EZH WITH CARON ++ { {UNITIZE(Qt::Key_Multi_key), 0x0063, 0x0292, 0, 0, 0}, 0x01ef }, // U01EF # LATIN SMALL LETTER EZH WITH CARON ++ { {UNITIZE(Qt::Key_Multi_key), 0x0063, UNITIZE(Qt::Key_Dead_Diaeresis), 0x0055, 0, 0}, 0x01d9 }, // U01D9 # LATIN CAPITAL LETTER U WITH DIAERESIS AND CARON ++ { {UNITIZE(Qt::Key_Multi_key), 0x0063, UNITIZE(Qt::Key_Dead_Diaeresis), 0x0075, 0, 0}, 0x01da }, // U01DA # LATIN SMALL LETTER U WITH DIAERESIS AND CARON ++ { {UNITIZE(Qt::Key_Multi_key), 0x0064, 0x002d, 0, 0, 0}, 0x20ab }, // U20ab # DONG SIGN ++ { {UNITIZE(Qt::Key_Multi_key), 0x0064, 0x0068, 0, 0, 0}, 0x00f0 }, // U00F0 # LATIN SMALL LETTER ETH ++ { {UNITIZE(Qt::Key_Multi_key), 0x0065, 0x0065, 0, 0, 0}, 0x0259 }, // U0259 # LATIN SMALL LETTER SCHWA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0066, 0x0053, 0, 0, 0}, 0x017f }, // U017f # LONG S ++ { {UNITIZE(Qt::Key_Multi_key), 0x0066, 0x0073, 0, 0, 0}, 0x017f }, // U017f # LONG S ++ { {UNITIZE(Qt::Key_Multi_key), 0x0069, 0x002e, 0, 0, 0}, 0x0131 }, // U0131 # LATIN SMALL LETTER DOTLESS I ++ { {UNITIZE(Qt::Key_Multi_key), 0x006b, 0x006b, 0, 0, 0}, 0x0138 }, // U0138 # LATIN SMALL LETTER KRA ++ { {UNITIZE(Qt::Key_Multi_key), 0x006c, 0x0076, 0, 0, 0}, 0x007c }, // bar ++ { {UNITIZE(Qt::Key_Multi_key), 0x006d, 0x002f, 0, 0, 0}, 0x20a5 }, // U20a5 # MILL SIGN ++ { {UNITIZE(Qt::Key_Multi_key), 0x006d, 0x0075, 0, 0, 0}, 0x00b5 }, // U00B5 # MICRO SIGN ++ { {UNITIZE(Qt::Key_Multi_key), 0x006e, 0x0067, 0, 0, 0}, 0x014b }, // U014B # LATIN SMALL LETTER ENG ++ { {UNITIZE(Qt::Key_Multi_key), 0x006f, 0x0027, 0x0041, 0, 0}, 0x01fa }, // U01FA # LATIN CAPITAL LETTER A WITH RING ABOVE AND ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x006f, 0x0027, 0x0061, 0, 0}, 0x01fb }, // U01FB # LATIN SMALL LETTER A WITH RING ABOVE AND ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x006f, 0x0041, 0, 0, 0}, 0x00c5 }, // U00C5 # LATIN CAPITAL LETTER A WITH RING ABOVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x006f, 0x0043, 0, 0, 0}, 0x00a9 }, // copyright ++ { {UNITIZE(Qt::Key_Multi_key), 0x006f, 0x0052, 0, 0, 0}, 0x00ae }, // registered ++ { {UNITIZE(Qt::Key_Multi_key), 0x006f, 0x0055, 0, 0, 0}, 0x016e }, // U016E # LATIN CAPITAL LETTER U WITH RING ABOVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x006f, 0x0061, 0, 0, 0}, 0x00e5 }, // U00E5 # LATIN SMALL LETTER A WITH RING ABOVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x006f, 0x0063, 0, 0, 0}, 0x00a9 }, // copyright ++ { {UNITIZE(Qt::Key_Multi_key), 0x006f, 0x0065, 0, 0, 0}, 0x0153 }, // oe ++ { {UNITIZE(Qt::Key_Multi_key), 0x006f, 0x006f, 0, 0, 0}, 0x00b0 }, // degree # ^0 already taken ++ { {UNITIZE(Qt::Key_Multi_key), 0x006f, 0x0072, 0, 0, 0}, 0x00ae }, // registered ++ { {UNITIZE(Qt::Key_Multi_key), 0x006f, 0x0073, 0, 0, 0}, 0x00a7 }, // section # SECTION SIGN ++ { {UNITIZE(Qt::Key_Multi_key), 0x006f, 0x0075, 0, 0, 0}, 0x016f }, // U016F # LATIN SMALL LETTER U WITH RING ABOVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x006f, 0x0077, 0, 0, 0}, 0x1e98 }, // U1E98 # LATIN SMALL LETTER W WITH RING ABOVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x006f, 0x0078, 0, 0, 0}, 0x00a4 }, // currency ++ { {UNITIZE(Qt::Key_Multi_key), 0x006f, 0x0079, 0, 0, 0}, 0x1e99 }, // U1E99 # LATIN SMALL LETTER Y WITH RING ABOVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0070, 0x0021, 0, 0, 0}, 0x00b6 }, // paragraph ++ { {UNITIZE(Qt::Key_Multi_key), 0x0073, 0x006f, 0, 0, 0}, 0x00a7 }, // section # SECTION SIGN ++ { {UNITIZE(Qt::Key_Multi_key), 0x0073, 0x0073, 0, 0, 0}, 0x00df }, // ssharp ++ { {UNITIZE(Qt::Key_Multi_key), 0x0074, 0x0068, 0, 0, 0}, 0x00fe }, // U00FE # LATIN SMALL LETTER THORN ++ { {UNITIZE(Qt::Key_Multi_key), 0x0076, 0x006c, 0, 0, 0}, 0x007c }, // bar ++ { {UNITIZE(Qt::Key_Multi_key), 0x0078, 0x006f, 0, 0, 0}, 0x00a4 }, // currency ++ { {UNITIZE(Qt::Key_Multi_key), 0x0078, 0x0078, 0, 0, 0}, 0x00d7 }, // U00D7 # MULTIPLICATION SIGN ++ { {UNITIZE(Qt::Key_Multi_key), 0x007c, 0x0043, 0, 0, 0}, 0x00a2 }, // U00A2 # CENT SIGN ++ { {UNITIZE(Qt::Key_Multi_key), 0x007c, 0x0063, 0, 0, 0}, 0x00a2 }, // U00A2 # CENT SIGN ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x0000, 0, 0, 0}, 0x1eee }, // U1EEE # LATIN CAPITAL LETTER U WITH HORN AND TILDE ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x0000, 0, 0, 0}, 0x1ee1 }, // U1EE1 # LATIN SMALL LETTER O WITH HORN AND TILDE ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x0000, 0, 0, 0}, 0x1eef }, // U1EEF # LATIN SMALL LETTER U WITH HORN AND TILDE ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x0000, 0, 0, 0}, 0x1ee0 }, // U1EE0 # LATIN CAPITAL LETTER O WITH HORN AND TILDE ++ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x0020, 0, 0, 0}, 0x007e }, // asciitilde ++ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x0022, 0x03b9, 0, 0}, 0x1fd7 }, // U1FD7 # GREEK SMALL LETTER IOTA WITH DIALYTIKA AND PERISPOMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x0022, 0x03c5, 0, 0}, 0x1fe7 }, // U1FE7 # GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND PERISPOMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x0028, 0x0391, 0, 0}, 0x1f0f }, // U1F0F # GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x0028, 0x0397, 0, 0}, 0x1f2f }, // U1F2F # GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x0028, 0x0399, 0, 0}, 0x1f3f }, // U1F3F # GREEK CAPITAL LETTER IOTA WITH DASIA AND PERISPOMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x0028, 0x03a5, 0, 0}, 0x1f5f }, // U1F5F # GREEK CAPITAL LETTER UPSILON WITH DASIA AND PERISPOMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x0028, 0x03a9, 0, 0}, 0x1f6f }, // U1F6F # GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x0028, 0x03b1, 0, 0}, 0x1f07 }, // U1F07 # GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x0028, 0x03b7, 0, 0}, 0x1f27 }, // U1F27 # GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x0028, 0x03b9, 0, 0}, 0x1f37 }, // U1F37 # GREEK SMALL LETTER IOTA WITH DASIA AND PERISPOMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x0028, 0x03c5, 0, 0}, 0x1f57 }, // U1F57 # GREEK SMALL LETTER UPSILON WITH DASIA AND PERISPOMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x0028, 0x03c9, 0, 0}, 0x1f67 }, // U1F67 # GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x0029, 0x0391, 0, 0}, 0x1f0e }, // U1F0E # GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x0029, 0x0397, 0, 0}, 0x1f2e }, // U1F2E # GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x0029, 0x0399, 0, 0}, 0x1f3e }, // U1F3E # GREEK CAPITAL LETTER IOTA WITH PSILI AND PERISPOMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x0029, 0x03a9, 0, 0}, 0x1f6e }, // U1F6E # GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x0029, 0x03b1, 0, 0}, 0x1f06 }, // U1F06 # GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x0029, 0x03b7, 0, 0}, 0x1f26 }, // U1F26 # GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x0029, 0x03b9, 0, 0}, 0x1f36 }, // U1F36 # GREEK SMALL LETTER IOTA WITH PSILI AND PERISPOMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x0029, 0x03c5, 0, 0}, 0x1f56 }, // U1F56 # GREEK SMALL LETTER UPSILON WITH PSILI AND PERISPOMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x0029, 0x03c9, 0, 0}, 0x1f66 }, // U1F66 # GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x002b, 0x004f, 0, 0}, 0x1ee0 }, // U1EE0 # LATIN CAPITAL LETTER O WITH HORN AND TILDE ++ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x002b, 0x0055, 0, 0}, 0x1eee }, // U1EEE # LATIN CAPITAL LETTER U WITH HORN AND TILDE ++ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x002b, 0x006f, 0, 0}, 0x1ee1 }, // U1EE1 # LATIN SMALL LETTER O WITH HORN AND TILDE ++ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x002b, 0x0075, 0, 0}, 0x1eef }, // U1EEF # LATIN SMALL LETTER U WITH HORN AND TILDE ++ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x0041, 0, 0, 0}, 0x00c3 }, // U00C3 # LATIN CAPITAL LETTER A WITH TILDE ++ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x0045, 0, 0, 0}, 0x1ebc }, // U1EBC # LATIN CAPITAL LETTER E WITH TILDE ++ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x0049, 0, 0, 0}, 0x0128 }, // U0128 # LATIN CAPITAL LETTER I WITH TILDE ++ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x004e, 0, 0, 0}, 0x00d1 }, // U00D1 # LATIN CAPITAL LETTER N WITH TILDE ++ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x004f, 0, 0, 0}, 0x00d5 }, // U00D5 # LATIN CAPITAL LETTER O WITH TILDE ++ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x0055, 0, 0, 0}, 0x0168 }, // U0168 # LATIN CAPITAL LETTER U WITH TILDE ++ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x0055, 0x0041, 0, 0}, 0x1eb4 }, // U1EB4 # LATIN CAPITAL LETTER A WITH BREVE AND TILDE ++ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x0055, 0x0061, 0, 0}, 0x1eb5 }, // U1EB5 # LATIN SMALL LETTER A WITH BREVE AND TILDE ++ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x0056, 0, 0, 0}, 0x1e7c }, // U1E7C # LATIN CAPITAL LETTER V WITH TILDE ++ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x0059, 0, 0, 0}, 0x1ef8 }, // U1EF8 # LATIN CAPITAL LETTER Y WITH TILDE ++ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x005e, 0x0041, 0, 0}, 0x1eaa }, // U1EAA # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND TILDE ++ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x005e, 0x0045, 0, 0}, 0x1ec4 }, // U1EC4 # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND TILDE ++ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x005e, 0x004f, 0, 0}, 0x1ed6 }, // U1ED6 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND TILDE ++ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x005e, 0x0061, 0, 0}, 0x1eab }, // U1EAB # LATIN SMALL LETTER A WITH CIRCUMFLEX AND TILDE ++ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x005e, 0x0065, 0, 0}, 0x1ec5 }, // U1EC5 # LATIN SMALL LETTER E WITH CIRCUMFLEX AND TILDE ++ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x005e, 0x006f, 0, 0}, 0x1ed7 }, // U1ED7 # LATIN SMALL LETTER O WITH CIRCUMFLEX AND TILDE ++ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x0061, 0, 0, 0}, 0x00e3 }, // U00E3 # LATIN SMALL LETTER A WITH TILDE ++ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x0062, 0x0041, 0, 0}, 0x1eb4 }, // U1EB4 # LATIN CAPITAL LETTER A WITH BREVE AND TILDE ++ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x0062, 0x0061, 0, 0}, 0x1eb5 }, // U1EB5 # LATIN SMALL LETTER A WITH BREVE AND TILDE ++ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x0065, 0, 0, 0}, 0x1ebd }, // U1EBD # LATIN SMALL LETTER E WITH TILDE ++ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x0069, 0, 0, 0}, 0x0129 }, // U0129 # LATIN SMALL LETTER I WITH TILDE ++ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x006e, 0, 0, 0}, 0x00f1 }, // U00F1 # LATIN SMALL LETTER N WITH TILDE ++ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x006f, 0, 0, 0}, 0x00f5 }, // U00F5 # LATIN SMALL LETTER O WITH TILDE ++ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x0075, 0, 0, 0}, 0x0169 }, // U0169 # LATIN SMALL LETTER U WITH TILDE ++ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x0076, 0, 0, 0}, 0x1e7d }, // U1E7D # LATIN SMALL LETTER V WITH TILDE ++ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x0079, 0, 0, 0}, 0x1ef9 }, // U1EF9 # LATIN SMALL LETTER Y WITH TILDE ++ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x00c2, 0, 0, 0}, 0x1eaa }, // U1EAA # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND TILDE ++ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x00ca, 0, 0, 0}, 0x1ec4 }, // U1EC4 # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND TILDE ++ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x00d4, 0, 0, 0}, 0x1ed6 }, // U1ED6 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND TILDE ++ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x00e2, 0, 0, 0}, 0x1eab }, // U1EAB # LATIN SMALL LETTER A WITH CIRCUMFLEX AND TILDE ++ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x00ea, 0, 0, 0}, 0x1ec5 }, // U1EC5 # LATIN SMALL LETTER E WITH CIRCUMFLEX AND TILDE ++ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x00f4, 0, 0, 0}, 0x1ed7 }, // U1ED7 # LATIN SMALL LETTER O WITH CIRCUMFLEX AND TILDE ++ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x0102, 0, 0, 0}, 0x1eb4 }, // U1EB4 # LATIN CAPITAL LETTER A WITH BREVE AND TILDE ++ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x0103, 0, 0, 0}, 0x1eb5 }, // U1EB5 # LATIN SMALL LETTER A WITH BREVE AND TILDE ++ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x0313, 0x0391, 0, 0}, 0x1f0e }, // U1F0E # GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x0313, 0x0397, 0, 0}, 0x1f2e }, // U1F2E # GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x0313, 0x0399, 0, 0}, 0x1f3e }, // U1F3E # GREEK CAPITAL LETTER IOTA WITH PSILI AND PERISPOMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x0313, 0x03a9, 0, 0}, 0x1f6e }, // U1F6E # GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x0313, 0x03b1, 0, 0}, 0x1f06 }, // U1F06 # GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x0313, 0x03b7, 0, 0}, 0x1f26 }, // U1F26 # GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x0313, 0x03b9, 0, 0}, 0x1f36 }, // U1F36 # GREEK SMALL LETTER IOTA WITH PSILI AND PERISPOMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x0313, 0x03c5, 0, 0}, 0x1f56 }, // U1F56 # GREEK SMALL LETTER UPSILON WITH PSILI AND PERISPOMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x0313, 0x03c9, 0, 0}, 0x1f66 }, // U1F66 # GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x0314, 0x0391, 0, 0}, 0x1f0f }, // U1F0F # GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x0314, 0x0397, 0, 0}, 0x1f2f }, // U1F2F # GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x0314, 0x0399, 0, 0}, 0x1f3f }, // U1F3F # GREEK CAPITAL LETTER IOTA WITH DASIA AND PERISPOMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x0314, 0x03a5, 0, 0}, 0x1f5f }, // U1F5F # GREEK CAPITAL LETTER UPSILON WITH DASIA AND PERISPOMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x0314, 0x03a9, 0, 0}, 0x1f6f }, // U1F6F # GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x0314, 0x03b1, 0, 0}, 0x1f07 }, // U1F07 # GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x0314, 0x03b7, 0, 0}, 0x1f27 }, // U1F27 # GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x0314, 0x03b9, 0, 0}, 0x1f37 }, // U1F37 # GREEK SMALL LETTER IOTA WITH DASIA AND PERISPOMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x0314, 0x03c5, 0, 0}, 0x1f57 }, // U1F57 # GREEK SMALL LETTER UPSILON WITH DASIA AND PERISPOMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x0314, 0x03c9, 0, 0}, 0x1f67 }, // U1F67 # GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x03b1, 0, 0, 0}, 0x1fb6 }, // U1FB6 # GREEK SMALL LETTER ALPHA WITH PERISPOMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x03b7, 0, 0, 0}, 0x1fc6 }, // U1FC6 # GREEK SMALL LETTER ETA WITH PERISPOMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x03b9, 0, 0, 0}, 0x1fd6 }, // U1FD6 # GREEK SMALL LETTER IOTA WITH PERISPOMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x03c5, 0, 0, 0}, 0x1fe6 }, // U1FE6 # GREEK SMALL LETTER UPSILON WITH PERISPOMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x03c9, 0, 0, 0}, 0x1ff6 }, // U1FF6 # GREEK SMALL LETTER OMEGA WITH PERISPOMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x03ca, 0, 0, 0}, 0x1fd7 }, // U1FD7 # GREEK SMALL LETTER IOTA WITH DIALYTIKA AND PERISPOMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x03cb, 0, 0, 0}, 0x1fe7 }, // U1FE7 # GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND PERISPOMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x1f00, 0, 0, 0}, 0x1f06 }, // U1F06 # GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x1f01, 0, 0, 0}, 0x1f07 }, // U1F07 # GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x1f08, 0, 0, 0}, 0x1f0e }, // U1F0E # GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x1f09, 0, 0, 0}, 0x1f0f }, // U1F0F # GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x1f20, 0, 0, 0}, 0x1f26 }, // U1F26 # GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x1f21, 0, 0, 0}, 0x1f27 }, // U1F27 # GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x1f28, 0, 0, 0}, 0x1f2e }, // U1F2E # GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x1f29, 0, 0, 0}, 0x1f2f }, // U1F2F # GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x1f30, 0, 0, 0}, 0x1f36 }, // U1F36 # GREEK SMALL LETTER IOTA WITH PSILI AND PERISPOMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x1f31, 0, 0, 0}, 0x1f37 }, // U1F37 # GREEK SMALL LETTER IOTA WITH DASIA AND PERISPOMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x1f38, 0, 0, 0}, 0x1f3e }, // U1F3E # GREEK CAPITAL LETTER IOTA WITH PSILI AND PERISPOMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x1f39, 0, 0, 0}, 0x1f3f }, // U1F3F # GREEK CAPITAL LETTER IOTA WITH DASIA AND PERISPOMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x1f50, 0, 0, 0}, 0x1f56 }, // U1F56 # GREEK SMALL LETTER UPSILON WITH PSILI AND PERISPOMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x1f51, 0, 0, 0}, 0x1f57 }, // U1F57 # GREEK SMALL LETTER UPSILON WITH DASIA AND PERISPOMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x1f59, 0, 0, 0}, 0x1f5f }, // U1F5F # GREEK CAPITAL LETTER UPSILON WITH DASIA AND PERISPOMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x1f60, 0, 0, 0}, 0x1f66 }, // U1F66 # GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x1f61, 0, 0, 0}, 0x1f67 }, // U1F67 # GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x1f68, 0, 0, 0}, 0x1f6e }, // U1F6E # GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x1f69, 0, 0, 0}, 0x1f6f }, // U1F6F # GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x007e, UNITIZE(Qt::Key_Dead_Circumflex), 0x0041, 0, 0}, 0x1eaa }, // U1EAA # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND TILDE ++ { {UNITIZE(Qt::Key_Multi_key), 0x007e, UNITIZE(Qt::Key_Dead_Circumflex), 0x0045, 0, 0}, 0x1ec4 }, // U1EC4 # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND TILDE ++ { {UNITIZE(Qt::Key_Multi_key), 0x007e, UNITIZE(Qt::Key_Dead_Circumflex), 0x004f, 0, 0}, 0x1ed6 }, // U1ED6 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND TILDE ++ { {UNITIZE(Qt::Key_Multi_key), 0x007e, UNITIZE(Qt::Key_Dead_Circumflex), 0x0061, 0, 0}, 0x1eab }, // U1EAB # LATIN SMALL LETTER A WITH CIRCUMFLEX AND TILDE ++ { {UNITIZE(Qt::Key_Multi_key), 0x007e, UNITIZE(Qt::Key_Dead_Circumflex), 0x0065, 0, 0}, 0x1ec5 }, // U1EC5 # LATIN SMALL LETTER E WITH CIRCUMFLEX AND TILDE ++ { {UNITIZE(Qt::Key_Multi_key), 0x007e, UNITIZE(Qt::Key_Dead_Circumflex), 0x006f, 0, 0}, 0x1ed7 }, // U1ED7 # LATIN SMALL LETTER O WITH CIRCUMFLEX AND TILDE ++ { {UNITIZE(Qt::Key_Multi_key), 0x007e, UNITIZE(Qt::Key_Dead_Breve), 0x0041, 0, 0}, 0x1eb4 }, // U1EB4 # LATIN CAPITAL LETTER A WITH BREVE AND TILDE ++ { {UNITIZE(Qt::Key_Multi_key), 0x007e, UNITIZE(Qt::Key_Dead_Breve), 0x0061, 0, 0}, 0x1eb5 }, // U1EB5 # LATIN SMALL LETTER A WITH BREVE AND TILDE ++ { {UNITIZE(Qt::Key_Multi_key), 0x007e, UNITIZE(Qt::Key_Dead_Diaeresis), 0x03b9, 0, 0}, 0x1fd7 }, // U1FD7 # GREEK SMALL LETTER IOTA WITH DIALYTIKA AND PERISPOMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x007e, UNITIZE(Qt::Key_Dead_Diaeresis), 0x03c5, 0, 0}, 0x1fe7 }, // U1FE7 # GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND PERISPOMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x007e, UNITIZE(Qt::Key_Dead_Horn), 0x004f, 0, 0}, 0x1ee0 }, // U1EE0 # LATIN CAPITAL LETTER O WITH HORN AND TILDE ++ { {UNITIZE(Qt::Key_Multi_key), 0x007e, UNITIZE(Qt::Key_Dead_Horn), 0x0055, 0, 0}, 0x1eee }, // U1EEE # LATIN CAPITAL LETTER U WITH HORN AND TILDE ++ { {UNITIZE(Qt::Key_Multi_key), 0x007e, UNITIZE(Qt::Key_Dead_Horn), 0x006f, 0, 0}, 0x1ee1 }, // U1EE1 # LATIN SMALL LETTER O WITH HORN AND TILDE ++ { {UNITIZE(Qt::Key_Multi_key), 0x007e, UNITIZE(Qt::Key_Dead_Horn), 0x0075, 0, 0}, 0x1eef }, // U1EEF # LATIN SMALL LETTER U WITH HORN AND TILDE ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x00a8, 0x0000, 0, 0, 0}, 0x0385 }, // U0385 # GREEK DIALYTIKA TONOS ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x00a8, 0x0000, 0, 0, 0}, 0x1fed }, // U1FED # GREEK DIALYTIKA AND VARIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x00a8, 0x0027, 0, 0, 0}, 0x0385 }, // U0385 # GREEK DIALYTIKA TONOS ++ { {UNITIZE(Qt::Key_Multi_key), 0x00a8, 0x0060, 0, 0, 0}, 0x1fed }, // U1FED # GREEK DIALYTIKA AND VARIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x00a8, 0x007e, 0, 0, 0}, 0x1fc1 }, // U1FC1 # GREEK DIALYTIKA AND PERISPOMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x00a8, 0x00b4, 0, 0, 0}, 0x0385 }, // U0385 # GREEK DIALYTIKA TONOS ++ { {UNITIZE(Qt::Key_Multi_key), 0x00a8, 0x0342, 0, 0, 0}, 0x1fc1 }, // U1FC1 # GREEK DIALYTIKA AND PERISPOMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x00a8, UNITIZE(Qt::Key_Dead_Grave), 0, 0, 0}, 0x1fed }, // U1FED # GREEK DIALYTIKA AND VARIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x00a8, UNITIZE(Qt::Key_Dead_Acute), 0, 0, 0}, 0x0385 }, // U0385 # GREEK DIALYTIKA TONOS ++ { {UNITIZE(Qt::Key_Multi_key), 0x00a8, UNITIZE(Qt::Key_Dead_Tilde), 0, 0, 0}, 0x1fc1 }, // U1FC1 # GREEK DIALYTIKA AND PERISPOMENI ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x00af, 0x0000, 0x004c, 0, 0}, 0x1e38 }, // U1E38 # LATIN CAPITAL LETTER L WITH DOT BELOW AND MACRON ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x00af, 0x0000, 0x004f, 0, 0}, 0x022c }, // U022C # LATIN CAPITAL LETTER O WITH TILDE AND MACRON ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x00af, 0x0000, 0x0052, 0, 0}, 0x1e5c }, // U1E5C # LATIN CAPITAL LETTER R WITH DOT BELOW AND MACRON ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x00af, 0x0000, 0x006c, 0, 0}, 0x1e39 }, // U1E39 # LATIN SMALL LETTER L WITH DOT BELOW AND MACRON ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x00af, 0x0000, 0x006f, 0, 0}, 0x022d }, // U022D # LATIN SMALL LETTER O WITH TILDE AND MACRON ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x00af, 0x0000, 0x0072, 0, 0}, 0x1e5d }, // U1E5D # LATIN SMALL LETTER R WITH DOT BELOW AND MACRON ++ { {UNITIZE(Qt::Key_Multi_key), 0x00af, 0x0021, 0x004c, 0, 0}, 0x1e38 }, // U1E38 # LATIN CAPITAL LETTER L WITH DOT BELOW AND MACRON ++ { {UNITIZE(Qt::Key_Multi_key), 0x00af, 0x0021, 0x0052, 0, 0}, 0x1e5c }, // U1E5C # LATIN CAPITAL LETTER R WITH DOT BELOW AND MACRON ++ { {UNITIZE(Qt::Key_Multi_key), 0x00af, 0x0021, 0x006c, 0, 0}, 0x1e39 }, // U1E39 # LATIN SMALL LETTER L WITH DOT BELOW AND MACRON ++ { {UNITIZE(Qt::Key_Multi_key), 0x00af, 0x0021, 0x0072, 0, 0}, 0x1e5d }, // U1E5D # LATIN SMALL LETTER R WITH DOT BELOW AND MACRON ++ { {UNITIZE(Qt::Key_Multi_key), 0x00af, 0x0022, 0x0041, 0, 0}, 0x01de }, // U01DE # LATIN CAPITAL LETTER A WITH DIAERESIS AND MACRON ++ { {UNITIZE(Qt::Key_Multi_key), 0x00af, 0x0022, 0x004f, 0, 0}, 0x022a }, // U022A # LATIN CAPITAL LETTER O WITH DIAERESIS AND MACRON ++ { {UNITIZE(Qt::Key_Multi_key), 0x00af, 0x0022, 0x0055, 0, 0}, 0x01d5 }, // U01D5 # LATIN CAPITAL LETTER U WITH DIAERESIS AND MACRON ++ { {UNITIZE(Qt::Key_Multi_key), 0x00af, 0x0022, 0x0061, 0, 0}, 0x01df }, // U01DF # LATIN SMALL LETTER A WITH DIAERESIS AND MACRON ++ { {UNITIZE(Qt::Key_Multi_key), 0x00af, 0x0022, 0x006f, 0, 0}, 0x022b }, // U022B # LATIN SMALL LETTER O WITH DIAERESIS AND MACRON ++ { {UNITIZE(Qt::Key_Multi_key), 0x00af, 0x0022, 0x0075, 0, 0}, 0x01d6 }, // U01D6 # LATIN SMALL LETTER U WITH DIAERESIS AND MACRON ++ { {UNITIZE(Qt::Key_Multi_key), 0x00af, 0x002e, 0x0041, 0, 0}, 0x01e0 }, // U01E0 # LATIN CAPITAL LETTER A WITH DOT ABOVE AND MACRON ++ { {UNITIZE(Qt::Key_Multi_key), 0x00af, 0x002e, 0x004f, 0, 0}, 0x0230 }, // U0230 # LATIN CAPITAL LETTER O WITH DOT ABOVE AND MACRON ++ { {UNITIZE(Qt::Key_Multi_key), 0x00af, 0x002e, 0x0061, 0, 0}, 0x01e1 }, // U01E1 # LATIN SMALL LETTER A WITH DOT ABOVE AND MACRON ++ { {UNITIZE(Qt::Key_Multi_key), 0x00af, 0x002e, 0x006f, 0, 0}, 0x0231 }, // U0231 # LATIN SMALL LETTER O WITH DOT ABOVE AND MACRON ++ { {UNITIZE(Qt::Key_Multi_key), 0x00af, 0x003b, 0x004f, 0, 0}, 0x01ec }, // U01EC # LATIN CAPITAL LETTER O WITH OGONEK AND MACRON ++ { {UNITIZE(Qt::Key_Multi_key), 0x00af, 0x003b, 0x006f, 0, 0}, 0x01ed }, // U01ED # LATIN SMALL LETTER O WITH OGONEK AND MACRON ++ { {UNITIZE(Qt::Key_Multi_key), 0x00af, 0x0041, 0, 0, 0}, 0x0100 }, // U0100 # LATIN CAPITAL LETTER A WITH MACRON ++ { {UNITIZE(Qt::Key_Multi_key), 0x00af, 0x0045, 0, 0, 0}, 0x0112 }, // U0112 # LATIN CAPITAL LETTER E WITH MACRON ++ { {UNITIZE(Qt::Key_Multi_key), 0x00af, 0x0047, 0, 0, 0}, 0x1e20 }, // U1E20 # LATIN CAPITAL LETTER G WITH MACRON ++ { {UNITIZE(Qt::Key_Multi_key), 0x00af, 0x0049, 0, 0, 0}, 0x012a }, // U012A # LATIN CAPITAL LETTER I WITH MACRON ++ { {UNITIZE(Qt::Key_Multi_key), 0x00af, 0x004f, 0, 0, 0}, 0x014c }, // U014C # LATIN CAPITAL LETTER O WITH MACRON ++ { {UNITIZE(Qt::Key_Multi_key), 0x00af, 0x0055, 0, 0, 0}, 0x016a }, // U016A # LATIN CAPITAL LETTER U WITH MACRON ++ { {UNITIZE(Qt::Key_Multi_key), 0x00af, 0x0059, 0, 0, 0}, 0x0232 }, // U0232 # LATIN CAPITAL LETTER Y WITH MACRON ++ { {UNITIZE(Qt::Key_Multi_key), 0x00af, 0x0061, 0, 0, 0}, 0x0101 }, // U0101 # LATIN SMALL LETTER A WITH MACRON ++ { {UNITIZE(Qt::Key_Multi_key), 0x00af, 0x0065, 0, 0, 0}, 0x0113 }, // U0113 # LATIN SMALL LETTER E WITH MACRON ++ { {UNITIZE(Qt::Key_Multi_key), 0x00af, 0x0067, 0, 0, 0}, 0x1e21 }, // U1E21 # LATIN SMALL LETTER G WITH MACRON ++ { {UNITIZE(Qt::Key_Multi_key), 0x00af, 0x0069, 0, 0, 0}, 0x012b }, // U012B # LATIN SMALL LETTER I WITH MACRON ++ { {UNITIZE(Qt::Key_Multi_key), 0x00af, 0x006f, 0, 0, 0}, 0x014d }, // U014D # LATIN SMALL LETTER O WITH MACRON ++ { {UNITIZE(Qt::Key_Multi_key), 0x00af, 0x0075, 0, 0, 0}, 0x016b }, // U016B # LATIN SMALL LETTER U WITH MACRON ++ { {UNITIZE(Qt::Key_Multi_key), 0x00af, 0x0079, 0, 0, 0}, 0x0233 }, // U0233 # LATIN SMALL LETTER Y WITH MACRON ++ { {UNITIZE(Qt::Key_Multi_key), 0x00af, 0x007e, 0x004f, 0, 0}, 0x022c }, // U022C # LATIN CAPITAL LETTER O WITH TILDE AND MACRON ++ { {UNITIZE(Qt::Key_Multi_key), 0x00af, 0x007e, 0x006f, 0, 0}, 0x022d }, // U022D # LATIN SMALL LETTER O WITH TILDE AND MACRON ++ { {UNITIZE(Qt::Key_Multi_key), 0x00af, 0x00c4, 0, 0, 0}, 0x01de }, // U01DE # LATIN CAPITAL LETTER A WITH DIAERESIS AND MACRON ++ { {UNITIZE(Qt::Key_Multi_key), 0x00af, 0x00c6, 0, 0, 0}, 0x01e2 }, // U01E2 # LATIN CAPITAL LETTER AE WITH MACRON ++ { {UNITIZE(Qt::Key_Multi_key), 0x00af, 0x00d5, 0, 0, 0}, 0x022c }, // U022C # LATIN CAPITAL LETTER O WITH TILDE AND MACRON ++ { {UNITIZE(Qt::Key_Multi_key), 0x00af, 0x00d6, 0, 0, 0}, 0x022a }, // U022A # LATIN CAPITAL LETTER O WITH DIAERESIS AND MACRON ++ { {UNITIZE(Qt::Key_Multi_key), 0x00af, 0x00dc, 0, 0, 0}, 0x01d5 }, // U01D5 # LATIN CAPITAL LETTER U WITH DIAERESIS AND MACRON ++ { {UNITIZE(Qt::Key_Multi_key), 0x00af, 0x00e4, 0, 0, 0}, 0x01df }, // U01DF # LATIN SMALL LETTER A WITH DIAERESIS AND MACRON ++ { {UNITIZE(Qt::Key_Multi_key), 0x00af, 0x00e6, 0, 0, 0}, 0x01e3 }, // U01E3 # LATIN SMALL LETTER AE WITH MACRON ++ { {UNITIZE(Qt::Key_Multi_key), 0x00af, 0x00f5, 0, 0, 0}, 0x022d }, // U022D # LATIN SMALL LETTER O WITH TILDE AND MACRON ++ { {UNITIZE(Qt::Key_Multi_key), 0x00af, 0x00f6, 0, 0, 0}, 0x022b }, // U022B # LATIN SMALL LETTER O WITH DIAERESIS AND MACRON ++ { {UNITIZE(Qt::Key_Multi_key), 0x00af, 0x00fc, 0, 0, 0}, 0x01d6 }, // U01D6 # LATIN SMALL LETTER U WITH DIAERESIS AND MACRON ++ { {UNITIZE(Qt::Key_Multi_key), 0x00af, 0x01ea, 0, 0, 0}, 0x01ec }, // U01EC # LATIN CAPITAL LETTER O WITH OGONEK AND MACRON ++ { {UNITIZE(Qt::Key_Multi_key), 0x00af, 0x01eb, 0, 0, 0}, 0x01ed }, // U01ED # LATIN SMALL LETTER O WITH OGONEK AND MACRON ++ { {UNITIZE(Qt::Key_Multi_key), 0x00af, 0x0226, 0, 0, 0}, 0x01e0 }, // U01E0 # LATIN CAPITAL LETTER A WITH DOT ABOVE AND MACRON ++ { {UNITIZE(Qt::Key_Multi_key), 0x00af, 0x0227, 0, 0, 0}, 0x01e1 }, // U01E1 # LATIN SMALL LETTER A WITH DOT ABOVE AND MACRON ++ { {UNITIZE(Qt::Key_Multi_key), 0x00af, 0x022e, 0, 0, 0}, 0x0230 }, // U0230 # LATIN CAPITAL LETTER O WITH DOT ABOVE AND MACRON ++ { {UNITIZE(Qt::Key_Multi_key), 0x00af, 0x022f, 0, 0, 0}, 0x0231 }, // U0231 # LATIN SMALL LETTER O WITH DOT ABOVE AND MACRON ++ { {UNITIZE(Qt::Key_Multi_key), 0x00af, 0x0391, 0, 0, 0}, 0x1fb9 }, // U1FB9 # GREEK CAPITAL LETTER ALPHA WITH MACRON ++ { {UNITIZE(Qt::Key_Multi_key), 0x00af, 0x0399, 0, 0, 0}, 0x1fd9 }, // U1FD9 # GREEK CAPITAL LETTER IOTA WITH MACRON ++ { {UNITIZE(Qt::Key_Multi_key), 0x00af, 0x03a5, 0, 0, 0}, 0x1fe9 }, // U1FE9 # GREEK CAPITAL LETTER UPSILON WITH MACRON ++ { {UNITIZE(Qt::Key_Multi_key), 0x00af, 0x03b1, 0, 0, 0}, 0x1fb1 }, // U1FB1 # GREEK SMALL LETTER ALPHA WITH MACRON ++ { {UNITIZE(Qt::Key_Multi_key), 0x00af, 0x03b9, 0, 0, 0}, 0x1fd1 }, // U1FD1 # GREEK SMALL LETTER IOTA WITH MACRON ++ { {UNITIZE(Qt::Key_Multi_key), 0x00af, 0x03c5, 0, 0, 0}, 0x1fe1 }, // U1FE1 # GREEK SMALL LETTER UPSILON WITH MACRON ++ { {UNITIZE(Qt::Key_Multi_key), 0x00af, 0x0418, 0, 0, 0}, 0x04e2 }, // U04E2 # CYRILLIC CAPITAL LETTER I WITH MACRON ++ { {UNITIZE(Qt::Key_Multi_key), 0x00af, 0x0423, 0, 0, 0}, 0x04ee }, // U04EE # CYRILLIC CAPITAL LETTER U WITH MACRON ++ { {UNITIZE(Qt::Key_Multi_key), 0x00af, 0x0438, 0, 0, 0}, 0x04e3 }, // U04E3 # CYRILLIC SMALL LETTER I WITH MACRON ++ { {UNITIZE(Qt::Key_Multi_key), 0x00af, 0x0443, 0, 0, 0}, 0x04ef }, // U04EF # CYRILLIC SMALL LETTER U WITH MACRON ++ { {UNITIZE(Qt::Key_Multi_key), 0x00af, 0x1e36, 0, 0, 0}, 0x1e38 }, // U1E38 # LATIN CAPITAL LETTER L WITH DOT BELOW AND MACRON ++ { {UNITIZE(Qt::Key_Multi_key), 0x00af, 0x1e37, 0, 0, 0}, 0x1e39 }, // U1E39 # LATIN SMALL LETTER L WITH DOT BELOW AND MACRON ++ { {UNITIZE(Qt::Key_Multi_key), 0x00af, 0x1e5a, 0, 0, 0}, 0x1e5c }, // U1E5C # LATIN CAPITAL LETTER R WITH DOT BELOW AND MACRON ++ { {UNITIZE(Qt::Key_Multi_key), 0x00af, 0x1e5b, 0, 0, 0}, 0x1e5d }, // U1E5D # LATIN SMALL LETTER R WITH DOT BELOW AND MACRON ++ { {UNITIZE(Qt::Key_Multi_key), 0x00af, UNITIZE(Qt::Key_Dead_Tilde), 0x004f, 0, 0}, 0x022c }, // U022C # LATIN CAPITAL LETTER O WITH TILDE AND MACRON ++ { {UNITIZE(Qt::Key_Multi_key), 0x00af, UNITIZE(Qt::Key_Dead_Tilde), 0x006f, 0, 0}, 0x022d }, // U022D # LATIN SMALL LETTER O WITH TILDE AND MACRON ++ { {UNITIZE(Qt::Key_Multi_key), 0x00af, UNITIZE(Qt::Key_Dead_Abovedot), 0x0041, 0, 0}, 0x01e0 }, // U01E0 # LATIN CAPITAL LETTER A WITH DOT ABOVE AND MACRON ++ { {UNITIZE(Qt::Key_Multi_key), 0x00af, UNITIZE(Qt::Key_Dead_Abovedot), 0x004f, 0, 0}, 0x0230 }, // U0230 # LATIN CAPITAL LETTER O WITH DOT ABOVE AND MACRON ++ { {UNITIZE(Qt::Key_Multi_key), 0x00af, UNITIZE(Qt::Key_Dead_Abovedot), 0x0061, 0, 0}, 0x01e1 }, // U01E1 # LATIN SMALL LETTER A WITH DOT ABOVE AND MACRON ++ { {UNITIZE(Qt::Key_Multi_key), 0x00af, UNITIZE(Qt::Key_Dead_Abovedot), 0x006f, 0, 0}, 0x0231 }, // U0231 # LATIN SMALL LETTER O WITH DOT ABOVE AND MACRON ++ { {UNITIZE(Qt::Key_Multi_key), 0x00af, UNITIZE(Qt::Key_Dead_Diaeresis), 0x0041, 0, 0}, 0x01de }, // U01DE # LATIN CAPITAL LETTER A WITH DIAERESIS AND MACRON ++ { {UNITIZE(Qt::Key_Multi_key), 0x00af, UNITIZE(Qt::Key_Dead_Diaeresis), 0x004f, 0, 0}, 0x022a }, // U022A # LATIN CAPITAL LETTER O WITH DIAERESIS AND MACRON ++ { {UNITIZE(Qt::Key_Multi_key), 0x00af, UNITIZE(Qt::Key_Dead_Diaeresis), 0x0055, 0, 0}, 0x01d5 }, // U01D5 # LATIN CAPITAL LETTER U WITH DIAERESIS AND MACRON ++ { {UNITIZE(Qt::Key_Multi_key), 0x00af, UNITIZE(Qt::Key_Dead_Diaeresis), 0x0061, 0, 0}, 0x01df }, // U01DF # LATIN SMALL LETTER A WITH DIAERESIS AND MACRON ++ { {UNITIZE(Qt::Key_Multi_key), 0x00af, UNITIZE(Qt::Key_Dead_Diaeresis), 0x006f, 0, 0}, 0x022b }, // U022B # LATIN SMALL LETTER O WITH DIAERESIS AND MACRON ++ { {UNITIZE(Qt::Key_Multi_key), 0x00af, UNITIZE(Qt::Key_Dead_Diaeresis), 0x0075, 0, 0}, 0x01d6 }, // U01D6 # LATIN SMALL LETTER U WITH DIAERESIS AND MACRON ++ { {UNITIZE(Qt::Key_Multi_key), 0x00af, UNITIZE(Qt::Key_Dead_Ogonek), 0x004f, 0, 0}, 0x01ec }, // U01EC # LATIN CAPITAL LETTER O WITH OGONEK AND MACRON ++ { {UNITIZE(Qt::Key_Multi_key), 0x00af, UNITIZE(Qt::Key_Dead_Ogonek), 0x006f, 0, 0}, 0x01ed }, // U01ED # LATIN SMALL LETTER O WITH OGONEK AND MACRON ++ { {UNITIZE(Qt::Key_Multi_key), 0x00af, UNITIZE(Qt::Key_Dead_Belowdot), 0x004c, 0, 0}, 0x1e38 }, // U1E38 # LATIN CAPITAL LETTER L WITH DOT BELOW AND MACRON ++ { {UNITIZE(Qt::Key_Multi_key), 0x00af, UNITIZE(Qt::Key_Dead_Belowdot), 0x0052, 0, 0}, 0x1e5c }, // U1E5C # LATIN CAPITAL LETTER R WITH DOT BELOW AND MACRON ++ { {UNITIZE(Qt::Key_Multi_key), 0x00af, UNITIZE(Qt::Key_Dead_Belowdot), 0x006c, 0, 0}, 0x1e39 }, // U1E39 # LATIN SMALL LETTER L WITH DOT BELOW AND MACRON ++ { {UNITIZE(Qt::Key_Multi_key), 0x00af, UNITIZE(Qt::Key_Dead_Belowdot), 0x0072, 0, 0}, 0x1e5d }, // U1E5D # LATIN SMALL LETTER R WITH DOT BELOW AND MACRON ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0000, 0, 0, 0}, 0x1edb }, // U1EDB # LATIN SMALL LETTER O WITH HORN AND ACUTE ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0000, 0, 0, 0}, 0x1ee9 }, // U1EE9 # LATIN SMALL LETTER U WITH HORN AND ACUTE ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0000, 0, 0, 0}, 0x1ee8 }, // U1EE8 # LATIN CAPITAL LETTER U WITH HORN AND ACUTE ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0000, 0, 0, 0}, 0x1eda }, // U1EDA # LATIN CAPITAL LETTER O WITH HORN AND ACUTE ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0000, 0x004f, 0, 0}, 0x01fe }, // U01FE # LATIN CAPITAL LETTER O WITH STROKE AND ACUTE ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0000, 0x004f, 0, 0}, 0x1e4c }, // U1E4C # LATIN CAPITAL LETTER O WITH TILDE AND ACUTE ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0000, 0x0055, 0, 0}, 0x1e78 }, // U1E78 # LATIN CAPITAL LETTER U WITH TILDE AND ACUTE ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0000, 0x006f, 0, 0}, 0x01ff }, // U01FF # LATIN SMALL LETTER O WITH STROKE AND ACUTE ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0000, 0x006f, 0, 0}, 0x1e4d }, // U1E4D # LATIN SMALL LETTER O WITH TILDE AND ACUTE ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0000, 0x0075, 0, 0}, 0x1e79 }, // U1E79 # LATIN SMALL LETTER U WITH TILDE AND ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0022, 0x0049, 0, 0}, 0x1e2e }, // U1E2E # LATIN CAPITAL LETTER I WITH DIAERESIS AND ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0022, 0x0055, 0, 0}, 0x01d7 }, // U01D7 # LATIN CAPITAL LETTER U WITH DIAERESIS AND ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0022, 0x0069, 0, 0}, 0x1e2f }, // U1E2F # LATIN SMALL LETTER I WITH DIAERESIS AND ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0022, 0x0075, 0, 0}, 0x01d8 }, // U01D8 # LATIN SMALL LETTER U WITH DIAERESIS AND ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0022, 0x03b9, 0, 0}, 0x0390 }, // U0390 # GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0022, 0x03c5, 0, 0}, 0x03b0 }, // U03B0 # GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0028, 0x0391, 0, 0}, 0x1f0d }, // U1F0D # GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0028, 0x0395, 0, 0}, 0x1f1d }, // U1F1D # GREEK CAPITAL LETTER EPSILON WITH DASIA AND OXIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0028, 0x0397, 0, 0}, 0x1f2d }, // U1F2D # GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0028, 0x0399, 0, 0}, 0x1f3d }, // U1F3D # GREEK CAPITAL LETTER IOTA WITH DASIA AND OXIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0028, 0x039f, 0, 0}, 0x1f4d }, // U1F4D # GREEK CAPITAL LETTER OMICRON WITH DASIA AND OXIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0028, 0x03a5, 0, 0}, 0x1f5d }, // U1F5D # GREEK CAPITAL LETTER UPSILON WITH DASIA AND OXIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0028, 0x03a9, 0, 0}, 0x1f6d }, // U1F6D # GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0028, 0x03b1, 0, 0}, 0x1f05 }, // U1F05 # GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0028, 0x03b5, 0, 0}, 0x1f15 }, // U1F15 # GREEK SMALL LETTER EPSILON WITH DASIA AND OXIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0028, 0x03b7, 0, 0}, 0x1f25 }, // U1F25 # GREEK SMALL LETTER ETA WITH DASIA AND OXIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0028, 0x03b9, 0, 0}, 0x1f35 }, // U1F35 # GREEK SMALL LETTER IOTA WITH DASIA AND OXIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0028, 0x03bf, 0, 0}, 0x1f45 }, // U1F45 # GREEK SMALL LETTER OMICRON WITH DASIA AND OXIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0028, 0x03c5, 0, 0}, 0x1f55 }, // U1F55 # GREEK SMALL LETTER UPSILON WITH DASIA AND OXIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0028, 0x03c9, 0, 0}, 0x1f65 }, // U1F65 # GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0029, 0x0391, 0, 0}, 0x1f0c }, // U1F0C # GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0029, 0x0395, 0, 0}, 0x1f1c }, // U1F1C # GREEK CAPITAL LETTER EPSILON WITH PSILI AND OXIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0029, 0x0397, 0, 0}, 0x1f2c }, // U1F2C # GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0029, 0x0399, 0, 0}, 0x1f3c }, // U1F3C # GREEK CAPITAL LETTER IOTA WITH PSILI AND OXIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0029, 0x039f, 0, 0}, 0x1f4c }, // U1F4C # GREEK CAPITAL LETTER OMICRON WITH PSILI AND OXIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0029, 0x03a9, 0, 0}, 0x1f6c }, // U1F6C # GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0029, 0x03b1, 0, 0}, 0x1f04 }, // U1F04 # GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0029, 0x03b5, 0, 0}, 0x1f14 }, // U1F14 # GREEK SMALL LETTER EPSILON WITH PSILI AND OXIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0029, 0x03b7, 0, 0}, 0x1f24 }, // U1F24 # GREEK SMALL LETTER ETA WITH PSILI AND OXIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0029, 0x03b9, 0, 0}, 0x1f34 }, // U1F34 # GREEK SMALL LETTER IOTA WITH PSILI AND OXIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0029, 0x03bf, 0, 0}, 0x1f44 }, // U1F44 # GREEK SMALL LETTER OMICRON WITH PSILI AND OXIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0029, 0x03c5, 0, 0}, 0x1f54 }, // U1F54 # GREEK SMALL LETTER UPSILON WITH PSILI AND OXIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0029, 0x03c9, 0, 0}, 0x1f64 }, // U1F64 # GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x002b, 0x004f, 0, 0}, 0x1eda }, // U1EDA # LATIN CAPITAL LETTER O WITH HORN AND ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x002b, 0x0055, 0, 0}, 0x1ee8 }, // U1EE8 # LATIN CAPITAL LETTER U WITH HORN AND ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x002b, 0x006f, 0, 0}, 0x1edb }, // U1EDB # LATIN SMALL LETTER O WITH HORN AND ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x002b, 0x0075, 0, 0}, 0x1ee9 }, // U1EE9 # LATIN SMALL LETTER U WITH HORN AND ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x002c, 0x0043, 0, 0}, 0x1e08 }, // U1E08 # LATIN CAPITAL LETTER C WITH CEDILLA AND ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x002c, 0x0063, 0, 0}, 0x1e09 }, // U1E09 # LATIN SMALL LETTER C WITH CEDILLA AND ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x002f, 0x004f, 0, 0}, 0x01fe }, // U01FE # LATIN CAPITAL LETTER O WITH STROKE AND ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x002f, 0x006f, 0, 0}, 0x01ff }, // U01FF # LATIN SMALL LETTER O WITH STROKE AND ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0041, 0, 0, 0}, 0x00c1 }, // U00C1 # LATIN CAPITAL LETTER A WITH ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0043, 0, 0, 0}, 0x0106 }, // U0106 # LATIN CAPITAL LETTER C WITH ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0045, 0, 0, 0}, 0x00c9 }, // U00C9 # LATIN CAPITAL LETTER E WITH ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0047, 0, 0, 0}, 0x01f4 }, // U01F4 # LATIN CAPITAL LETTER G WITH ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0049, 0, 0, 0}, 0x00cd }, // U00CD # LATIN CAPITAL LETTER I WITH ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x004b, 0, 0, 0}, 0x1e30 }, // U1E30 # LATIN CAPITAL LETTER K WITH ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x004c, 0, 0, 0}, 0x0139 }, // U0139 # LATIN CAPITAL LETTER L WITH ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x004d, 0, 0, 0}, 0x1e3e }, // U1E3E # LATIN CAPITAL LETTER M WITH ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x004e, 0, 0, 0}, 0x0143 }, // U0143 # LATIN CAPITAL LETTER N WITH ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x004f, 0, 0, 0}, 0x00d3 }, // U00D3 # LATIN CAPITAL LETTER O WITH ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0050, 0, 0, 0}, 0x1e54 }, // U1E54 # LATIN CAPITAL LETTER P WITH ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0052, 0, 0, 0}, 0x0154 }, // U0154 # LATIN CAPITAL LETTER R WITH ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0053, 0, 0, 0}, 0x015a }, // U015A # LATIN CAPITAL LETTER S WITH ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0055, 0, 0, 0}, 0x00da }, // U00DA # LATIN CAPITAL LETTER U WITH ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0055, 0x0041, 0, 0}, 0x1eae }, // U1EAE # LATIN CAPITAL LETTER A WITH BREVE AND ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0055, 0x0061, 0, 0}, 0x1eaf }, // U1EAF # LATIN SMALL LETTER A WITH BREVE AND ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0057, 0, 0, 0}, 0x1e82 }, // U1E82 # LATIN CAPITAL LETTER W WITH ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0059, 0, 0, 0}, 0x00dd }, // U00DD # LATIN CAPITAL LETTER Y WITH ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x005a, 0, 0, 0}, 0x0179 }, // U0179 # LATIN CAPITAL LETTER Z WITH ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x005e, 0x0041, 0, 0}, 0x1ea4 }, // U1EA4 # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x005e, 0x0045, 0, 0}, 0x1ebe }, // U1EBE # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x005e, 0x004f, 0, 0}, 0x1ed0 }, // U1ED0 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x005e, 0x0061, 0, 0}, 0x1ea5 }, // U1EA5 # LATIN SMALL LETTER A WITH CIRCUMFLEX AND ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x005e, 0x0065, 0, 0}, 0x1ebf }, // U1EBF # LATIN SMALL LETTER E WITH CIRCUMFLEX AND ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x005e, 0x006f, 0, 0}, 0x1ed1 }, // U1ED1 # LATIN SMALL LETTER O WITH CIRCUMFLEX AND ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x005f, 0x0045, 0, 0}, 0x1e16 }, // U1E16 # LATIN CAPITAL LETTER E WITH MACRON AND ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x005f, 0x004f, 0, 0}, 0x1e52 }, // U1E52 # LATIN CAPITAL LETTER O WITH MACRON AND ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x005f, 0x0065, 0, 0}, 0x1e17 }, // U1E17 # LATIN SMALL LETTER E WITH MACRON AND ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x005f, 0x006f, 0, 0}, 0x1e53 }, // U1E53 # LATIN SMALL LETTER O WITH MACRON AND ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0061, 0, 0, 0}, 0x00e1 }, // U00E1 # LATIN SMALL LETTER A WITH ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0062, 0x0041, 0, 0}, 0x1eae }, // U1EAE # LATIN CAPITAL LETTER A WITH BREVE AND ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0062, 0x0061, 0, 0}, 0x1eaf }, // U1EAF # LATIN SMALL LETTER A WITH BREVE AND ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0063, 0, 0, 0}, 0x0107 }, // U0107 # LATIN SMALL LETTER C WITH ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0065, 0, 0, 0}, 0x00e9 }, // U00E9 # LATIN SMALL LETTER E WITH ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0067, 0, 0, 0}, 0x01f5 }, // U01F5 # LATIN SMALL LETTER G WITH ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0069, 0, 0, 0}, 0x00ed }, // U00ED # LATIN SMALL LETTER I WITH ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x006b, 0, 0, 0}, 0x1e31 }, // U1E31 # LATIN SMALL LETTER K WITH ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x006c, 0, 0, 0}, 0x013a }, // U013A # LATIN SMALL LETTER L WITH ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x006d, 0, 0, 0}, 0x1e3f }, // U1E3F # LATIN SMALL LETTER M WITH ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x006e, 0, 0, 0}, 0x0144 }, // U0144 # LATIN SMALL LETTER N WITH ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x006f, 0, 0, 0}, 0x00f3 }, // U00F3 # LATIN SMALL LETTER O WITH ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x006f, 0x0041, 0, 0}, 0x01fa }, // U01FA # LATIN CAPITAL LETTER A WITH RING ABOVE AND ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x006f, 0x0061, 0, 0}, 0x01fb }, // U01FB # LATIN SMALL LETTER A WITH RING ABOVE AND ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0070, 0, 0, 0}, 0x1e55 }, // U1E55 # LATIN SMALL LETTER P WITH ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0072, 0, 0, 0}, 0x0155 }, // U0155 # LATIN SMALL LETTER R WITH ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0073, 0, 0, 0}, 0x015b }, // U015B # LATIN SMALL LETTER S WITH ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0075, 0, 0, 0}, 0x00fa }, // U00FA # LATIN SMALL LETTER U WITH ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0077, 0, 0, 0}, 0x1e83 }, // U1E83 # LATIN SMALL LETTER W WITH ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0079, 0, 0, 0}, 0x00fd }, // U00FD # LATIN SMALL LETTER Y WITH ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x007a, 0, 0, 0}, 0x017a }, // U017A # LATIN SMALL LETTER Z WITH ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x007e, 0x004f, 0, 0}, 0x1e4c }, // U1E4C # LATIN CAPITAL LETTER O WITH TILDE AND ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x007e, 0x0055, 0, 0}, 0x1e78 }, // U1E78 # LATIN CAPITAL LETTER U WITH TILDE AND ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x007e, 0x006f, 0, 0}, 0x1e4d }, // U1E4D # LATIN SMALL LETTER O WITH TILDE AND ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x007e, 0x0075, 0, 0}, 0x1e79 }, // U1E79 # LATIN SMALL LETTER U WITH TILDE AND ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x00af, 0x0045, 0, 0}, 0x1e16 }, // U1E16 # LATIN CAPITAL LETTER E WITH MACRON AND ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x00af, 0x004f, 0, 0}, 0x1e52 }, // U1E52 # LATIN CAPITAL LETTER O WITH MACRON AND ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x00af, 0x0065, 0, 0}, 0x1e17 }, // U1E17 # LATIN SMALL LETTER E WITH MACRON AND ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x00af, 0x006f, 0, 0}, 0x1e53 }, // U1E53 # LATIN SMALL LETTER O WITH MACRON AND ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x00c2, 0, 0, 0}, 0x1ea4 }, // U1EA4 # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x00c5, 0, 0, 0}, 0x01fa }, // U01FA # LATIN CAPITAL LETTER A WITH RING ABOVE AND ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x00c6, 0, 0, 0}, 0x01fc }, // U01FC # LATIN CAPITAL LETTER AE WITH ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x00c7, 0, 0, 0}, 0x1e08 }, // U1E08 # LATIN CAPITAL LETTER C WITH CEDILLA AND ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x00ca, 0, 0, 0}, 0x1ebe }, // U1EBE # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x00cf, 0, 0, 0}, 0x1e2e }, // U1E2E # LATIN CAPITAL LETTER I WITH DIAERESIS AND ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x00d4, 0, 0, 0}, 0x1ed0 }, // U1ED0 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x00d5, 0, 0, 0}, 0x1e4c }, // U1E4C # LATIN CAPITAL LETTER O WITH TILDE AND ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x00d8, 0, 0, 0}, 0x01fe }, // U01FE # LATIN CAPITAL LETTER O WITH STROKE AND ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x00dc, 0, 0, 0}, 0x01d7 }, // U01D7 # LATIN CAPITAL LETTER U WITH DIAERESIS AND ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x00e2, 0, 0, 0}, 0x1ea5 }, // U1EA5 # LATIN SMALL LETTER A WITH CIRCUMFLEX AND ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x00e5, 0, 0, 0}, 0x01fb }, // U01FB # LATIN SMALL LETTER A WITH RING ABOVE AND ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x00e6, 0, 0, 0}, 0x01fd }, // U01FD # LATIN SMALL LETTER AE WITH ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x00e7, 0, 0, 0}, 0x1e09 }, // U1E09 # LATIN SMALL LETTER C WITH CEDILLA AND ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x00ea, 0, 0, 0}, 0x1ebf }, // U1EBF # LATIN SMALL LETTER E WITH CIRCUMFLEX AND ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x00ef, 0, 0, 0}, 0x1e2f }, // U1E2F # LATIN SMALL LETTER I WITH DIAERESIS AND ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x00f4, 0, 0, 0}, 0x1ed1 }, // U1ED1 # LATIN SMALL LETTER O WITH CIRCUMFLEX AND ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x00f5, 0, 0, 0}, 0x1e4d }, // U1E4D # LATIN SMALL LETTER O WITH TILDE AND ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x00f8, 0, 0, 0}, 0x01ff }, // U01FF # LATIN SMALL LETTER O WITH STROKE AND ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x00fc, 0, 0, 0}, 0x01d8 }, // U01D8 # LATIN SMALL LETTER U WITH DIAERESIS AND ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0102, 0, 0, 0}, 0x1eae }, // U1EAE # LATIN CAPITAL LETTER A WITH BREVE AND ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0103, 0, 0, 0}, 0x1eaf }, // U1EAF # LATIN SMALL LETTER A WITH BREVE AND ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0112, 0, 0, 0}, 0x1e16 }, // U1E16 # LATIN CAPITAL LETTER E WITH MACRON AND ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0113, 0, 0, 0}, 0x1e17 }, // U1E17 # LATIN SMALL LETTER E WITH MACRON AND ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x014c, 0, 0, 0}, 0x1e52 }, // U1E52 # LATIN CAPITAL LETTER O WITH MACRON AND ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x014d, 0, 0, 0}, 0x1e53 }, // U1E53 # LATIN SMALL LETTER O WITH MACRON AND ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0168, 0, 0, 0}, 0x1e78 }, // U1E78 # LATIN CAPITAL LETTER U WITH TILDE AND ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0169, 0, 0, 0}, 0x1e79 }, // U1E79 # LATIN SMALL LETTER U WITH TILDE AND ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0313, 0x0391, 0, 0}, 0x1f0c }, // U1F0C # GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0313, 0x0395, 0, 0}, 0x1f1c }, // U1F1C # GREEK CAPITAL LETTER EPSILON WITH PSILI AND OXIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0313, 0x0397, 0, 0}, 0x1f2c }, // U1F2C # GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0313, 0x0399, 0, 0}, 0x1f3c }, // U1F3C # GREEK CAPITAL LETTER IOTA WITH PSILI AND OXIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0313, 0x039f, 0, 0}, 0x1f4c }, // U1F4C # GREEK CAPITAL LETTER OMICRON WITH PSILI AND OXIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0313, 0x03a9, 0, 0}, 0x1f6c }, // U1F6C # GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0313, 0x03b1, 0, 0}, 0x1f04 }, // U1F04 # GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0313, 0x03b5, 0, 0}, 0x1f14 }, // U1F14 # GREEK SMALL LETTER EPSILON WITH PSILI AND OXIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0313, 0x03b7, 0, 0}, 0x1f24 }, // U1F24 # GREEK SMALL LETTER ETA WITH PSILI AND OXIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0313, 0x03b9, 0, 0}, 0x1f34 }, // U1F34 # GREEK SMALL LETTER IOTA WITH PSILI AND OXIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0313, 0x03bf, 0, 0}, 0x1f44 }, // U1F44 # GREEK SMALL LETTER OMICRON WITH PSILI AND OXIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0313, 0x03c5, 0, 0}, 0x1f54 }, // U1F54 # GREEK SMALL LETTER UPSILON WITH PSILI AND OXIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0313, 0x03c9, 0, 0}, 0x1f64 }, // U1F64 # GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0314, 0x0391, 0, 0}, 0x1f0d }, // U1F0D # GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0314, 0x0395, 0, 0}, 0x1f1d }, // U1F1D # GREEK CAPITAL LETTER EPSILON WITH DASIA AND OXIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0314, 0x0397, 0, 0}, 0x1f2d }, // U1F2D # GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0314, 0x0399, 0, 0}, 0x1f3d }, // U1F3D # GREEK CAPITAL LETTER IOTA WITH DASIA AND OXIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0314, 0x039f, 0, 0}, 0x1f4d }, // U1F4D # GREEK CAPITAL LETTER OMICRON WITH DASIA AND OXIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0314, 0x03a5, 0, 0}, 0x1f5d }, // U1F5D # GREEK CAPITAL LETTER UPSILON WITH DASIA AND OXIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0314, 0x03a9, 0, 0}, 0x1f6d }, // U1F6D # GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0314, 0x03b1, 0, 0}, 0x1f05 }, // U1F05 # GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0314, 0x03b5, 0, 0}, 0x1f15 }, // U1F15 # GREEK SMALL LETTER EPSILON WITH DASIA AND OXIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0314, 0x03b7, 0, 0}, 0x1f25 }, // U1F25 # GREEK SMALL LETTER ETA WITH DASIA AND OXIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0314, 0x03b9, 0, 0}, 0x1f35 }, // U1F35 # GREEK SMALL LETTER IOTA WITH DASIA AND OXIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0314, 0x03bf, 0, 0}, 0x1f45 }, // U1F45 # GREEK SMALL LETTER OMICRON WITH DASIA AND OXIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0314, 0x03c5, 0, 0}, 0x1f55 }, // U1F55 # GREEK SMALL LETTER UPSILON WITH DASIA AND OXIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0314, 0x03c9, 0, 0}, 0x1f65 }, // U1F65 # GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0391, 0, 0, 0}, 0x0386 }, // U0386 # GREEK CAPITAL LETTER ALPHA WITH TONOS ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0395, 0, 0, 0}, 0x0388 }, // U0388 # GREEK CAPITAL LETTER EPSILON WITH TONOS ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0397, 0, 0, 0}, 0x0389 }, // U0389 # GREEK CAPITAL LETTER ETA WITH TONOS ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0399, 0, 0, 0}, 0x038a }, // U038A # GREEK CAPITAL LETTER IOTA WITH TONOS ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x039f, 0, 0, 0}, 0x038c }, // U038C # GREEK CAPITAL LETTER OMICRON WITH TONOS ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x03a5, 0, 0, 0}, 0x038e }, // U038E # GREEK CAPITAL LETTER UPSILON WITH TONOS ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x03a9, 0, 0, 0}, 0x038f }, // U038F # GREEK CAPITAL LETTER OMEGA WITH TONOS ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x03b1, 0, 0, 0}, 0x03ac }, // U03AC # GREEK SMALL LETTER ALPHA WITH TONOS ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x03b5, 0, 0, 0}, 0x03ad }, // U03AD # GREEK SMALL LETTER EPSILON WITH TONOS ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x03b7, 0, 0, 0}, 0x03ae }, // U03AE # GREEK SMALL LETTER ETA WITH TONOS ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x03b9, 0, 0, 0}, 0x03af }, // U03AF # GREEK SMALL LETTER IOTA WITH TONOS ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x03bf, 0, 0, 0}, 0x03cc }, // U03CC # GREEK SMALL LETTER OMICRON WITH TONOS ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x03c5, 0, 0, 0}, 0x03cd }, // U03CD # GREEK SMALL LETTER UPSILON WITH TONOS ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x03c9, 0, 0, 0}, 0x03ce }, // U03CE # GREEK SMALL LETTER OMEGA WITH TONOS ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x03ca, 0, 0, 0}, 0x0390 }, // U0390 # GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x03cb, 0, 0, 0}, 0x03b0 }, // U03B0 # GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x03d2, 0, 0, 0}, 0x03d3 }, // U03D3 # GREEK UPSILON WITH ACUTE AND HOOK SYMBOL ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0413, 0, 0, 0}, 0x0403 }, // U0403 # CYRILLIC CAPITAL LETTER GJE ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x041a, 0, 0, 0}, 0x040c }, // U040C # CYRILLIC CAPITAL LETTER KJE ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0433, 0, 0, 0}, 0x0453 }, // U0453 # CYRILLIC SMALL LETTER GJE ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x043a, 0, 0, 0}, 0x045c }, // U045C # CYRILLIC SMALL LETTER KJE ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x1f00, 0, 0, 0}, 0x1f04 }, // U1F04 # GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x1f01, 0, 0, 0}, 0x1f05 }, // U1F05 # GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x1f08, 0, 0, 0}, 0x1f0c }, // U1F0C # GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x1f09, 0, 0, 0}, 0x1f0d }, // U1F0D # GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x1f10, 0, 0, 0}, 0x1f14 }, // U1F14 # GREEK SMALL LETTER EPSILON WITH PSILI AND OXIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x1f11, 0, 0, 0}, 0x1f15 }, // U1F15 # GREEK SMALL LETTER EPSILON WITH DASIA AND OXIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x1f18, 0, 0, 0}, 0x1f1c }, // U1F1C # GREEK CAPITAL LETTER EPSILON WITH PSILI AND OXIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x1f19, 0, 0, 0}, 0x1f1d }, // U1F1D # GREEK CAPITAL LETTER EPSILON WITH DASIA AND OXIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x1f20, 0, 0, 0}, 0x1f24 }, // U1F24 # GREEK SMALL LETTER ETA WITH PSILI AND OXIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x1f21, 0, 0, 0}, 0x1f25 }, // U1F25 # GREEK SMALL LETTER ETA WITH DASIA AND OXIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x1f28, 0, 0, 0}, 0x1f2c }, // U1F2C # GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x1f29, 0, 0, 0}, 0x1f2d }, // U1F2D # GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x1f30, 0, 0, 0}, 0x1f34 }, // U1F34 # GREEK SMALL LETTER IOTA WITH PSILI AND OXIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x1f31, 0, 0, 0}, 0x1f35 }, // U1F35 # GREEK SMALL LETTER IOTA WITH DASIA AND OXIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x1f38, 0, 0, 0}, 0x1f3c }, // U1F3C # GREEK CAPITAL LETTER IOTA WITH PSILI AND OXIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x1f39, 0, 0, 0}, 0x1f3d }, // U1F3D # GREEK CAPITAL LETTER IOTA WITH DASIA AND OXIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x1f40, 0, 0, 0}, 0x1f44 }, // U1F44 # GREEK SMALL LETTER OMICRON WITH PSILI AND OXIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x1f41, 0, 0, 0}, 0x1f45 }, // U1F45 # GREEK SMALL LETTER OMICRON WITH DASIA AND OXIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x1f48, 0, 0, 0}, 0x1f4c }, // U1F4C # GREEK CAPITAL LETTER OMICRON WITH PSILI AND OXIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x1f49, 0, 0, 0}, 0x1f4d }, // U1F4D # GREEK CAPITAL LETTER OMICRON WITH DASIA AND OXIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x1f50, 0, 0, 0}, 0x1f54 }, // U1F54 # GREEK SMALL LETTER UPSILON WITH PSILI AND OXIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x1f51, 0, 0, 0}, 0x1f55 }, // U1F55 # GREEK SMALL LETTER UPSILON WITH DASIA AND OXIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x1f59, 0, 0, 0}, 0x1f5d }, // U1F5D # GREEK CAPITAL LETTER UPSILON WITH DASIA AND OXIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x1f60, 0, 0, 0}, 0x1f64 }, // U1F64 # GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x1f61, 0, 0, 0}, 0x1f65 }, // U1F65 # GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x1f68, 0, 0, 0}, 0x1f6c }, // U1F6C # GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x1f69, 0, 0, 0}, 0x1f6d }, // U1F6D # GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, UNITIZE(Qt::Key_Dead_Circumflex), 0x0041, 0, 0}, 0x1ea4 }, // U1EA4 # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, UNITIZE(Qt::Key_Dead_Circumflex), 0x0045, 0, 0}, 0x1ebe }, // U1EBE # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, UNITIZE(Qt::Key_Dead_Circumflex), 0x004f, 0, 0}, 0x1ed0 }, // U1ED0 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, UNITIZE(Qt::Key_Dead_Circumflex), 0x0061, 0, 0}, 0x1ea5 }, // U1EA5 # LATIN SMALL LETTER A WITH CIRCUMFLEX AND ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, UNITIZE(Qt::Key_Dead_Circumflex), 0x0065, 0, 0}, 0x1ebf }, // U1EBF # LATIN SMALL LETTER E WITH CIRCUMFLEX AND ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, UNITIZE(Qt::Key_Dead_Circumflex), 0x006f, 0, 0}, 0x1ed1 }, // U1ED1 # LATIN SMALL LETTER O WITH CIRCUMFLEX AND ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, UNITIZE(Qt::Key_Dead_Tilde), 0x004f, 0, 0}, 0x1e4c }, // U1E4C # LATIN CAPITAL LETTER O WITH TILDE AND ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, UNITIZE(Qt::Key_Dead_Tilde), 0x0055, 0, 0}, 0x1e78 }, // U1E78 # LATIN CAPITAL LETTER U WITH TILDE AND ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, UNITIZE(Qt::Key_Dead_Tilde), 0x006f, 0, 0}, 0x1e4d }, // U1E4D # LATIN SMALL LETTER O WITH TILDE AND ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, UNITIZE(Qt::Key_Dead_Tilde), 0x0075, 0, 0}, 0x1e79 }, // U1E79 # LATIN SMALL LETTER U WITH TILDE AND ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, UNITIZE(Qt::Key_Dead_Macron), 0x0045, 0, 0}, 0x1e16 }, // U1E16 # LATIN CAPITAL LETTER E WITH MACRON AND ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, UNITIZE(Qt::Key_Dead_Macron), 0x004f, 0, 0}, 0x1e52 }, // U1E52 # LATIN CAPITAL LETTER O WITH MACRON AND ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, UNITIZE(Qt::Key_Dead_Macron), 0x0065, 0, 0}, 0x1e17 }, // U1E17 # LATIN SMALL LETTER E WITH MACRON AND ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, UNITIZE(Qt::Key_Dead_Macron), 0x006f, 0, 0}, 0x1e53 }, // U1E53 # LATIN SMALL LETTER O WITH MACRON AND ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, UNITIZE(Qt::Key_Dead_Breve), 0x0041, 0, 0}, 0x1eae }, // U1EAE # LATIN CAPITAL LETTER A WITH BREVE AND ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, UNITIZE(Qt::Key_Dead_Breve), 0x0061, 0, 0}, 0x1eaf }, // U1EAF # LATIN SMALL LETTER A WITH BREVE AND ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, UNITIZE(Qt::Key_Dead_Diaeresis), 0x0049, 0, 0}, 0x1e2e }, // U1E2E # LATIN CAPITAL LETTER I WITH DIAERESIS AND ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, UNITIZE(Qt::Key_Dead_Diaeresis), 0x0055, 0, 0}, 0x01d7 }, // U01D7 # LATIN CAPITAL LETTER U WITH DIAERESIS AND ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, UNITIZE(Qt::Key_Dead_Diaeresis), 0x0069, 0, 0}, 0x1e2f }, // U1E2F # LATIN SMALL LETTER I WITH DIAERESIS AND ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, UNITIZE(Qt::Key_Dead_Diaeresis), 0x0075, 0, 0}, 0x01d8 }, // U01D8 # LATIN SMALL LETTER U WITH DIAERESIS AND ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, UNITIZE(Qt::Key_Dead_Diaeresis), 0x03b9, 0, 0}, 0x0390 }, // U0390 # GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, UNITIZE(Qt::Key_Dead_Diaeresis), 0x03c5, 0, 0}, 0x03b0 }, // U03B0 # GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, UNITIZE(Qt::Key_Dead_Abovering), 0x0041, 0, 0}, 0x01fa }, // U01FA # LATIN CAPITAL LETTER A WITH RING ABOVE AND ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, UNITIZE(Qt::Key_Dead_Abovering), 0x0061, 0, 0}, 0x01fb }, // U01FB # LATIN SMALL LETTER A WITH RING ABOVE AND ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, UNITIZE(Qt::Key_Dead_Cedilla), 0x0043, 0, 0}, 0x1e08 }, // U1E08 # LATIN CAPITAL LETTER C WITH CEDILLA AND ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, UNITIZE(Qt::Key_Dead_Cedilla), 0x0063, 0, 0}, 0x1e09 }, // U1E09 # LATIN SMALL LETTER C WITH CEDILLA AND ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, UNITIZE(Qt::Key_Dead_Horn), 0x004f, 0, 0}, 0x1eda }, // U1EDA # LATIN CAPITAL LETTER O WITH HORN AND ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, UNITIZE(Qt::Key_Dead_Horn), 0x0055, 0, 0}, 0x1ee8 }, // U1EE8 # LATIN CAPITAL LETTER U WITH HORN AND ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, UNITIZE(Qt::Key_Dead_Horn), 0x006f, 0, 0}, 0x1edb }, // U1EDB # LATIN SMALL LETTER O WITH HORN AND ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, UNITIZE(Qt::Key_Dead_Horn), 0x0075, 0, 0}, 0x1ee9 }, // U1EE9 # LATIN SMALL LETTER U WITH HORN AND ACUTE ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0000, 0x0028, 0x0391, 0}, 0x1f8d }, // U1F8D # GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA AND PROSGEGRAMMENI ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0000, 0x0028, 0x0391, 0}, 0x1f8b }, // U1F8B # GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA AND PROSGEGRAMMENI ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0000, 0x0028, 0x0397, 0}, 0x1f9b }, // U1F9B # GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA AND PROSGEGRAMMENI ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0000, 0x0028, 0x0397, 0}, 0x1f9d }, // U1F9D # GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA AND PROSGEGRAMMENI ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0000, 0x0028, 0x03a9, 0}, 0x1fab }, // U1FAB # GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA AND PROSGEGRAMMENI ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0000, 0x0028, 0x03a9, 0}, 0x1fad }, // U1FAD # GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA AND PROSGEGRAMMENI ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0000, 0x0028, 0x03b1, 0}, 0x1f85 }, // U1F85 # GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA AND YPOGEGRAMMENI ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0000, 0x0028, 0x03b1, 0}, 0x1f83 }, // U1F83 # GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA AND YPOGEGRAMMENI ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0000, 0x0028, 0x03b7, 0}, 0x1f93 }, // U1F93 # GREEK SMALL LETTER ETA WITH DASIA AND VARIA AND YPOGEGRAMMENI ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0000, 0x0028, 0x03b7, 0}, 0x1f95 }, // U1F95 # GREEK SMALL LETTER ETA WITH DASIA AND OXIA AND YPOGEGRAMMENI ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0000, 0x0028, 0x03c9, 0}, 0x1fa3 }, // U1FA3 # GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA AND YPOGEGRAMMENI ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0000, 0x0028, 0x03c9, 0}, 0x1fa5 }, // U1FA5 # GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA AND YPOGEGRAMMENI ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0000, 0x0029, 0x0391, 0}, 0x1f8c }, // U1F8C # GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA AND PROSGEGRAMMENI ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0000, 0x0029, 0x0391, 0}, 0x1f8a }, // U1F8A # GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA AND PROSGEGRAMMENI ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0000, 0x0029, 0x0397, 0}, 0x1f9c }, // U1F9C # GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA AND PROSGEGRAMMENI ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0000, 0x0029, 0x0397, 0}, 0x1f9a }, // U1F9A # GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA AND PROSGEGRAMMENI ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0000, 0x0029, 0x03a9, 0}, 0x1faa }, // U1FAA # GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA AND PROSGEGRAMMENI ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0000, 0x0029, 0x03a9, 0}, 0x1fac }, // U1FAC # GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA AND PROSGEGRAMMENI ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0000, 0x0029, 0x03b1, 0}, 0x1f84 }, // U1F84 # GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA AND YPOGEGRAMMENI ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0000, 0x0029, 0x03b1, 0}, 0x1f82 }, // U1F82 # GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA AND YPOGEGRAMMENI ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0000, 0x0029, 0x03b7, 0}, 0x1f92 }, // U1F92 # GREEK SMALL LETTER ETA WITH PSILI AND VARIA AND YPOGEGRAMMENI ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0000, 0x0029, 0x03b7, 0}, 0x1f94 }, // U1F94 # GREEK SMALL LETTER ETA WITH PSILI AND OXIA AND YPOGEGRAMMENI ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0000, 0x0029, 0x03c9, 0}, 0x1fa4 }, // U1FA4 # GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA AND YPOGEGRAMMENI ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0000, 0x0029, 0x03c9, 0}, 0x1fa2 }, // U1FA2 # GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA AND YPOGEGRAMMENI ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0000, 0x0313, 0x0391, 0}, 0x1f8c }, // U1F8C # GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA AND PROSGEGRAMMENI ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0000, 0x0313, 0x0391, 0}, 0x1f8a }, // U1F8A # GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA AND PROSGEGRAMMENI ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0000, 0x0313, 0x0397, 0}, 0x1f9a }, // U1F9A # GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA AND PROSGEGRAMMENI ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0000, 0x0313, 0x0397, 0}, 0x1f9c }, // U1F9C # GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA AND PROSGEGRAMMENI ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0000, 0x0313, 0x03a9, 0}, 0x1faa }, // U1FAA # GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA AND PROSGEGRAMMENI ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0000, 0x0313, 0x03a9, 0}, 0x1fac }, // U1FAC # GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA AND PROSGEGRAMMENI ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0000, 0x0313, 0x03b1, 0}, 0x1f82 }, // U1F82 # GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA AND YPOGEGRAMMENI ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0000, 0x0313, 0x03b1, 0}, 0x1f84 }, // U1F84 # GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA AND YPOGEGRAMMENI ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0000, 0x0313, 0x03b7, 0}, 0x1f92 }, // U1F92 # GREEK SMALL LETTER ETA WITH PSILI AND VARIA AND YPOGEGRAMMENI ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0000, 0x0313, 0x03b7, 0}, 0x1f94 }, // U1F94 # GREEK SMALL LETTER ETA WITH PSILI AND OXIA AND YPOGEGRAMMENI ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0000, 0x0313, 0x03c9, 0}, 0x1fa4 }, // U1FA4 # GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA AND YPOGEGRAMMENI ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0000, 0x0313, 0x03c9, 0}, 0x1fa2 }, // U1FA2 # GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA AND YPOGEGRAMMENI ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0000, 0x0314, 0x0391, 0}, 0x1f8b }, // U1F8B # GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA AND PROSGEGRAMMENI ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0000, 0x0314, 0x0391, 0}, 0x1f8d }, // U1F8D # GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA AND PROSGEGRAMMENI ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0000, 0x0314, 0x0397, 0}, 0x1f9b }, // U1F9B # GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA AND PROSGEGRAMMENI ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0000, 0x0314, 0x0397, 0}, 0x1f9d }, // U1F9D # GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA AND PROSGEGRAMMENI ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0000, 0x0314, 0x03a9, 0}, 0x1fab }, // U1FAB # GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA AND PROSGEGRAMMENI ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0000, 0x0314, 0x03a9, 0}, 0x1fad }, // U1FAD # GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA AND PROSGEGRAMMENI ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0000, 0x0314, 0x03b1, 0}, 0x1f85 }, // U1F85 # GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA AND YPOGEGRAMMENI ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0000, 0x0314, 0x03b1, 0}, 0x1f83 }, // U1F83 # GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA AND YPOGEGRAMMENI ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0000, 0x0314, 0x03b7, 0}, 0x1f95 }, // U1F95 # GREEK SMALL LETTER ETA WITH DASIA AND OXIA AND YPOGEGRAMMENI ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0000, 0x0314, 0x03b7, 0}, 0x1f93 }, // U1F93 # GREEK SMALL LETTER ETA WITH DASIA AND VARIA AND YPOGEGRAMMENI ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0000, 0x0314, 0x03c9, 0}, 0x1fa5 }, // U1FA5 # GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA AND YPOGEGRAMMENI ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0000, 0x0314, 0x03c9, 0}, 0x1fa3 }, // U1FA3 # GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA AND YPOGEGRAMMENI ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0000, 0x03b1, 0, 0}, 0x1fb4 }, // U1FB4 # GREEK SMALL LETTER ALPHA WITH OXIA AND YPOGEGRAMMENI ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0000, 0x03b1, 0, 0}, 0x1fb2 }, // U1FB2 # GREEK SMALL LETTER ALPHA WITH VARIA AND YPOGEGRAMMENI ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0000, 0x03b7, 0, 0}, 0x1fc4 }, // U1FC4 # GREEK SMALL LETTER ETA WITH OXIA AND YPOGEGRAMMENI ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0000, 0x03b7, 0, 0}, 0x1fc2 }, // U1FC2 # GREEK SMALL LETTER ETA WITH VARIA AND YPOGEGRAMMENI ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0000, 0x03c9, 0, 0}, 0x1ff4 }, // U1FF4 # GREEK SMALL LETTER OMEGA WITH OXIA AND YPOGEGRAMMENI ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0000, 0x03c9, 0, 0}, 0x1ff2 }, // U1FF2 # GREEK SMALL LETTER OMEGA WITH VARIA AND YPOGEGRAMMENI ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0000, 0x1f00, 0, 0}, 0x1f84 }, // U1F84 # GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA AND YPOGEGRAMMENI ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0000, 0x1f00, 0, 0}, 0x1f82 }, // U1F82 # GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA AND YPOGEGRAMMENI ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0000, 0x1f01, 0, 0}, 0x1f83 }, // U1F83 # GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA AND YPOGEGRAMMENI ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0000, 0x1f01, 0, 0}, 0x1f85 }, // U1F85 # GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA AND YPOGEGRAMMENI ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0000, 0x1f08, 0, 0}, 0x1f8c }, // U1F8C # GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA AND PROSGEGRAMMENI ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0000, 0x1f08, 0, 0}, 0x1f8a }, // U1F8A # GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA AND PROSGEGRAMMENI ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0000, 0x1f09, 0, 0}, 0x1f8b }, // U1F8B # GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA AND PROSGEGRAMMENI ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0000, 0x1f09, 0, 0}, 0x1f8d }, // U1F8D # GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA AND PROSGEGRAMMENI ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0000, 0x1f20, 0, 0}, 0x1f92 }, // U1F92 # GREEK SMALL LETTER ETA WITH PSILI AND VARIA AND YPOGEGRAMMENI ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0000, 0x1f20, 0, 0}, 0x1f94 }, // U1F94 # GREEK SMALL LETTER ETA WITH PSILI AND OXIA AND YPOGEGRAMMENI ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0000, 0x1f21, 0, 0}, 0x1f93 }, // U1F93 # GREEK SMALL LETTER ETA WITH DASIA AND VARIA AND YPOGEGRAMMENI ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0000, 0x1f21, 0, 0}, 0x1f95 }, // U1F95 # GREEK SMALL LETTER ETA WITH DASIA AND OXIA AND YPOGEGRAMMENI ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0000, 0x1f28, 0, 0}, 0x1f9c }, // U1F9C # GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA AND PROSGEGRAMMENI ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0000, 0x1f28, 0, 0}, 0x1f9a }, // U1F9A # GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA AND PROSGEGRAMMENI ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0000, 0x1f29, 0, 0}, 0x1f9b }, // U1F9B # GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA AND PROSGEGRAMMENI ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0000, 0x1f29, 0, 0}, 0x1f9d }, // U1F9D # GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA AND PROSGEGRAMMENI ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0000, 0x1f60, 0, 0}, 0x1fa2 }, // U1FA2 # GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA AND YPOGEGRAMMENI ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0000, 0x1f60, 0, 0}, 0x1fa4 }, // U1FA4 # GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA AND YPOGEGRAMMENI ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0000, 0x1f61, 0, 0}, 0x1fa5 }, // U1FA5 # GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA AND YPOGEGRAMMENI ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0000, 0x1f61, 0, 0}, 0x1fa3 }, // U1FA3 # GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA AND YPOGEGRAMMENI ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0000, 0x1f68, 0, 0}, 0x1fac }, // U1FAC # GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA AND PROSGEGRAMMENI ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0000, 0x1f68, 0, 0}, 0x1faa }, // U1FAA # GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA AND PROSGEGRAMMENI ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0000, 0x1f69, 0, 0}, 0x1fad }, // U1FAD # GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA AND PROSGEGRAMMENI ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0000, 0x1f69, 0, 0}, 0x1fab }, // U1FAB # GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0027, 0x0028, 0x0391, 0}, 0x1f8d }, // U1F8D # GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0027, 0x0028, 0x0397, 0}, 0x1f9d }, // U1F9D # GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0027, 0x0028, 0x03a9, 0}, 0x1fad }, // U1FAD # GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0027, 0x0028, 0x03b1, 0}, 0x1f85 }, // U1F85 # GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0027, 0x0028, 0x03b7, 0}, 0x1f95 }, // U1F95 # GREEK SMALL LETTER ETA WITH DASIA AND OXIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0027, 0x0028, 0x03c9, 0}, 0x1fa5 }, // U1FA5 # GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0027, 0x0029, 0x0391, 0}, 0x1f8c }, // U1F8C # GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0027, 0x0029, 0x0397, 0}, 0x1f9c }, // U1F9C # GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0027, 0x0029, 0x03a9, 0}, 0x1fac }, // U1FAC # GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0027, 0x0029, 0x03b1, 0}, 0x1f84 }, // U1F84 # GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0027, 0x0029, 0x03b7, 0}, 0x1f94 }, // U1F94 # GREEK SMALL LETTER ETA WITH PSILI AND OXIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0027, 0x0029, 0x03c9, 0}, 0x1fa4 }, // U1FA4 # GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0027, 0x0313, 0x0391, 0}, 0x1f8c }, // U1F8C # GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0027, 0x0313, 0x0397, 0}, 0x1f9c }, // U1F9C # GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0027, 0x0313, 0x03a9, 0}, 0x1fac }, // U1FAC # GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0027, 0x0313, 0x03b1, 0}, 0x1f84 }, // U1F84 # GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0027, 0x0313, 0x03b7, 0}, 0x1f94 }, // U1F94 # GREEK SMALL LETTER ETA WITH PSILI AND OXIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0027, 0x0313, 0x03c9, 0}, 0x1fa4 }, // U1FA4 # GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0027, 0x0314, 0x0391, 0}, 0x1f8d }, // U1F8D # GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0027, 0x0314, 0x0397, 0}, 0x1f9d }, // U1F9D # GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0027, 0x0314, 0x03a9, 0}, 0x1fad }, // U1FAD # GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0027, 0x0314, 0x03b1, 0}, 0x1f85 }, // U1F85 # GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0027, 0x0314, 0x03b7, 0}, 0x1f95 }, // U1F95 # GREEK SMALL LETTER ETA WITH DASIA AND OXIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0027, 0x0314, 0x03c9, 0}, 0x1fa5 }, // U1FA5 # GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0027, 0x03b1, 0, 0}, 0x1fb4 }, // U1FB4 # GREEK SMALL LETTER ALPHA WITH OXIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0027, 0x03b7, 0, 0}, 0x1fc4 }, // U1FC4 # GREEK SMALL LETTER ETA WITH OXIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0027, 0x03c9, 0, 0}, 0x1ff4 }, // U1FF4 # GREEK SMALL LETTER OMEGA WITH OXIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0027, 0x1f00, 0, 0}, 0x1f84 }, // U1F84 # GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0027, 0x1f01, 0, 0}, 0x1f85 }, // U1F85 # GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0027, 0x1f08, 0, 0}, 0x1f8c }, // U1F8C # GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0027, 0x1f09, 0, 0}, 0x1f8d }, // U1F8D # GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0027, 0x1f20, 0, 0}, 0x1f94 }, // U1F94 # GREEK SMALL LETTER ETA WITH PSILI AND OXIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0027, 0x1f21, 0, 0}, 0x1f95 }, // U1F95 # GREEK SMALL LETTER ETA WITH DASIA AND OXIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0027, 0x1f28, 0, 0}, 0x1f9c }, // U1F9C # GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0027, 0x1f29, 0, 0}, 0x1f9d }, // U1F9D # GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0027, 0x1f60, 0, 0}, 0x1fa4 }, // U1FA4 # GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0027, 0x1f61, 0, 0}, 0x1fa5 }, // U1FA5 # GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0027, 0x1f68, 0, 0}, 0x1fac }, // U1FAC # GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0027, 0x1f69, 0, 0}, 0x1fad }, // U1FAD # GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0028, 0x0391, 0, 0}, 0x1f89 }, // U1F89 # GREEK CAPITAL LETTER ALPHA WITH DASIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0028, 0x0397, 0, 0}, 0x1f99 }, // U1F99 # GREEK CAPITAL LETTER ETA WITH DASIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0028, 0x03a9, 0, 0}, 0x1fa9 }, // U1FA9 # GREEK CAPITAL LETTER OMEGA WITH DASIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0028, 0x03b1, 0, 0}, 0x1f81 }, // U1F81 # GREEK SMALL LETTER ALPHA WITH DASIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0028, 0x03b7, 0, 0}, 0x1f91 }, // U1F91 # GREEK SMALL LETTER ETA WITH DASIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0028, 0x03c9, 0, 0}, 0x1fa1 }, // U1FA1 # GREEK SMALL LETTER OMEGA WITH DASIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0029, 0x0391, 0, 0}, 0x1f88 }, // U1F88 # GREEK CAPITAL LETTER ALPHA WITH PSILI AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0029, 0x0397, 0, 0}, 0x1f98 }, // U1F98 # GREEK CAPITAL LETTER ETA WITH PSILI AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0029, 0x03a9, 0, 0}, 0x1fa8 }, // U1FA8 # GREEK CAPITAL LETTER OMEGA WITH PSILI AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0029, 0x03b1, 0, 0}, 0x1f80 }, // U1F80 # GREEK SMALL LETTER ALPHA WITH PSILI AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0029, 0x03b7, 0, 0}, 0x1f90 }, // U1F90 # GREEK SMALL LETTER ETA WITH PSILI AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0029, 0x03c9, 0, 0}, 0x1fa0 }, // U1FA0 # GREEK SMALL LETTER OMEGA WITH PSILI AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0060, 0x0028, 0x0391, 0}, 0x1f8b }, // U1F8B # GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0060, 0x0028, 0x0397, 0}, 0x1f9b }, // U1F9B # GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0060, 0x0028, 0x03a9, 0}, 0x1fab }, // U1FAB # GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0060, 0x0028, 0x03b1, 0}, 0x1f83 }, // U1F83 # GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0060, 0x0028, 0x03b7, 0}, 0x1f93 }, // U1F93 # GREEK SMALL LETTER ETA WITH DASIA AND VARIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0060, 0x0028, 0x03c9, 0}, 0x1fa3 }, // U1FA3 # GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0060, 0x0029, 0x0391, 0}, 0x1f8a }, // U1F8A # GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0060, 0x0029, 0x0397, 0}, 0x1f9a }, // U1F9A # GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0060, 0x0029, 0x03a9, 0}, 0x1faa }, // U1FAA # GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0060, 0x0029, 0x03b1, 0}, 0x1f82 }, // U1F82 # GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0060, 0x0029, 0x03b7, 0}, 0x1f92 }, // U1F92 # GREEK SMALL LETTER ETA WITH PSILI AND VARIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0060, 0x0029, 0x03c9, 0}, 0x1fa2 }, // U1FA2 # GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0060, 0x0313, 0x0391, 0}, 0x1f8a }, // U1F8A # GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0060, 0x0313, 0x0397, 0}, 0x1f9a }, // U1F9A # GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0060, 0x0313, 0x03a9, 0}, 0x1faa }, // U1FAA # GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0060, 0x0313, 0x03b1, 0}, 0x1f82 }, // U1F82 # GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0060, 0x0313, 0x03b7, 0}, 0x1f92 }, // U1F92 # GREEK SMALL LETTER ETA WITH PSILI AND VARIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0060, 0x0313, 0x03c9, 0}, 0x1fa2 }, // U1FA2 # GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0060, 0x0314, 0x0391, 0}, 0x1f8b }, // U1F8B # GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0060, 0x0314, 0x0397, 0}, 0x1f9b }, // U1F9B # GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0060, 0x0314, 0x03a9, 0}, 0x1fab }, // U1FAB # GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0060, 0x0314, 0x03b1, 0}, 0x1f83 }, // U1F83 # GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0060, 0x0314, 0x03b7, 0}, 0x1f93 }, // U1F93 # GREEK SMALL LETTER ETA WITH DASIA AND VARIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0060, 0x0314, 0x03c9, 0}, 0x1fa3 }, // U1FA3 # GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0060, 0x03b1, 0, 0}, 0x1fb2 }, // U1FB2 # GREEK SMALL LETTER ALPHA WITH VARIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0060, 0x03b7, 0, 0}, 0x1fc2 }, // U1FC2 # GREEK SMALL LETTER ETA WITH VARIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0060, 0x03c9, 0, 0}, 0x1ff2 }, // U1FF2 # GREEK SMALL LETTER OMEGA WITH VARIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0060, 0x1f00, 0, 0}, 0x1f82 }, // U1F82 # GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0060, 0x1f01, 0, 0}, 0x1f83 }, // U1F83 # GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0060, 0x1f08, 0, 0}, 0x1f8a }, // U1F8A # GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0060, 0x1f09, 0, 0}, 0x1f8b }, // U1F8B # GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0060, 0x1f20, 0, 0}, 0x1f92 }, // U1F92 # GREEK SMALL LETTER ETA WITH PSILI AND VARIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0060, 0x1f21, 0, 0}, 0x1f93 }, // U1F93 # GREEK SMALL LETTER ETA WITH DASIA AND VARIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0060, 0x1f28, 0, 0}, 0x1f9a }, // U1F9A # GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0060, 0x1f29, 0, 0}, 0x1f9b }, // U1F9B # GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0060, 0x1f60, 0, 0}, 0x1fa2 }, // U1FA2 # GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0060, 0x1f61, 0, 0}, 0x1fa3 }, // U1FA3 # GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0060, 0x1f68, 0, 0}, 0x1faa }, // U1FAA # GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0060, 0x1f69, 0, 0}, 0x1fab }, // U1FAB # GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x007e, 0x0028, 0x0391, 0}, 0x1f8f }, // U1F8F # GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x007e, 0x0028, 0x0397, 0}, 0x1f9f }, // U1F9F # GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x007e, 0x0028, 0x03a9, 0}, 0x1faf }, // U1FAF # GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x007e, 0x0028, 0x03b1, 0}, 0x1f87 }, // U1F87 # GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x007e, 0x0028, 0x03b7, 0}, 0x1f97 }, // U1F97 # GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x007e, 0x0028, 0x03c9, 0}, 0x1fa7 }, // U1FA7 # GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x007e, 0x0029, 0x0391, 0}, 0x1f8e }, // U1F8E # GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x007e, 0x0029, 0x0397, 0}, 0x1f9e }, // U1F9E # GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x007e, 0x0029, 0x03a9, 0}, 0x1fae }, // U1FAE # GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x007e, 0x0029, 0x03b1, 0}, 0x1f86 }, // U1F86 # GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x007e, 0x0029, 0x03b7, 0}, 0x1f96 }, // U1F96 # GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x007e, 0x0029, 0x03c9, 0}, 0x1fa6 }, // U1FA6 # GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x007e, 0x0313, 0x0391, 0}, 0x1f8e }, // U1F8E # GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x007e, 0x0313, 0x0397, 0}, 0x1f9e }, // U1F9E # GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x007e, 0x0313, 0x03a9, 0}, 0x1fae }, // U1FAE # GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x007e, 0x0313, 0x03b1, 0}, 0x1f86 }, // U1F86 # GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x007e, 0x0313, 0x03b7, 0}, 0x1f96 }, // U1F96 # GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x007e, 0x0313, 0x03c9, 0}, 0x1fa6 }, // U1FA6 # GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x007e, 0x0314, 0x0391, 0}, 0x1f8f }, // U1F8F # GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x007e, 0x0314, 0x0397, 0}, 0x1f9f }, // U1F9F # GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x007e, 0x0314, 0x03a9, 0}, 0x1faf }, // U1FAF # GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x007e, 0x0314, 0x03b1, 0}, 0x1f87 }, // U1F87 # GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x007e, 0x0314, 0x03b7, 0}, 0x1f97 }, // U1F97 # GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x007e, 0x0314, 0x03c9, 0}, 0x1fa7 }, // U1FA7 # GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x007e, 0x03b1, 0, 0}, 0x1fb7 }, // U1FB7 # GREEK SMALL LETTER ALPHA WITH PERISPOMENI AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x007e, 0x03b7, 0, 0}, 0x1fc7 }, // U1FC7 # GREEK SMALL LETTER ETA WITH PERISPOMENI AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x007e, 0x03c9, 0, 0}, 0x1ff7 }, // U1FF7 # GREEK SMALL LETTER OMEGA WITH PERISPOMENI AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x007e, 0x1f00, 0, 0}, 0x1f86 }, // U1F86 # GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x007e, 0x1f01, 0, 0}, 0x1f87 }, // U1F87 # GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x007e, 0x1f08, 0, 0}, 0x1f8e }, // U1F8E # GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x007e, 0x1f09, 0, 0}, 0x1f8f }, // U1F8F # GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x007e, 0x1f20, 0, 0}, 0x1f96 }, // U1F96 # GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x007e, 0x1f21, 0, 0}, 0x1f97 }, // U1F97 # GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x007e, 0x1f28, 0, 0}, 0x1f9e }, // U1F9E # GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x007e, 0x1f29, 0, 0}, 0x1f9f }, // U1F9F # GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x007e, 0x1f60, 0, 0}, 0x1fa6 }, // U1FA6 # GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x007e, 0x1f61, 0, 0}, 0x1fa7 }, // U1FA7 # GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x007e, 0x1f68, 0, 0}, 0x1fae }, // U1FAE # GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x007e, 0x1f69, 0, 0}, 0x1faf }, // U1FAF # GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x00b4, 0x0028, 0x0391, 0}, 0x1f8d }, // U1F8D # GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x00b4, 0x0028, 0x0397, 0}, 0x1f9d }, // U1F9D # GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x00b4, 0x0028, 0x03a9, 0}, 0x1fad }, // U1FAD # GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x00b4, 0x0028, 0x03b1, 0}, 0x1f85 }, // U1F85 # GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x00b4, 0x0028, 0x03b7, 0}, 0x1f95 }, // U1F95 # GREEK SMALL LETTER ETA WITH DASIA AND OXIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x00b4, 0x0028, 0x03c9, 0}, 0x1fa5 }, // U1FA5 # GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x00b4, 0x0029, 0x0391, 0}, 0x1f8c }, // U1F8C # GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x00b4, 0x0029, 0x0397, 0}, 0x1f9c }, // U1F9C # GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x00b4, 0x0029, 0x03a9, 0}, 0x1fac }, // U1FAC # GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x00b4, 0x0029, 0x03b1, 0}, 0x1f84 }, // U1F84 # GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x00b4, 0x0029, 0x03b7, 0}, 0x1f94 }, // U1F94 # GREEK SMALL LETTER ETA WITH PSILI AND OXIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x00b4, 0x0029, 0x03c9, 0}, 0x1fa4 }, // U1FA4 # GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x00b4, 0x0313, 0x0391, 0}, 0x1f8c }, // U1F8C # GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x00b4, 0x0313, 0x0397, 0}, 0x1f9c }, // U1F9C # GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x00b4, 0x0313, 0x03a9, 0}, 0x1fac }, // U1FAC # GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x00b4, 0x0313, 0x03b1, 0}, 0x1f84 }, // U1F84 # GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x00b4, 0x0313, 0x03b7, 0}, 0x1f94 }, // U1F94 # GREEK SMALL LETTER ETA WITH PSILI AND OXIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x00b4, 0x0313, 0x03c9, 0}, 0x1fa4 }, // U1FA4 # GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x00b4, 0x0314, 0x0391, 0}, 0x1f8d }, // U1F8D # GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x00b4, 0x0314, 0x0397, 0}, 0x1f9d }, // U1F9D # GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x00b4, 0x0314, 0x03a9, 0}, 0x1fad }, // U1FAD # GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x00b4, 0x0314, 0x03b1, 0}, 0x1f85 }, // U1F85 # GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x00b4, 0x0314, 0x03b7, 0}, 0x1f95 }, // U1F95 # GREEK SMALL LETTER ETA WITH DASIA AND OXIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x00b4, 0x0314, 0x03c9, 0}, 0x1fa5 }, // U1FA5 # GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x00b4, 0x03b1, 0, 0}, 0x1fb4 }, // U1FB4 # GREEK SMALL LETTER ALPHA WITH OXIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x00b4, 0x03b7, 0, 0}, 0x1fc4 }, // U1FC4 # GREEK SMALL LETTER ETA WITH OXIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x00b4, 0x03c9, 0, 0}, 0x1ff4 }, // U1FF4 # GREEK SMALL LETTER OMEGA WITH OXIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x00b4, 0x1f00, 0, 0}, 0x1f84 }, // U1F84 # GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x00b4, 0x1f01, 0, 0}, 0x1f85 }, // U1F85 # GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x00b4, 0x1f08, 0, 0}, 0x1f8c }, // U1F8C # GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x00b4, 0x1f09, 0, 0}, 0x1f8d }, // U1F8D # GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x00b4, 0x1f20, 0, 0}, 0x1f94 }, // U1F94 # GREEK SMALL LETTER ETA WITH PSILI AND OXIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x00b4, 0x1f21, 0, 0}, 0x1f95 }, // U1F95 # GREEK SMALL LETTER ETA WITH DASIA AND OXIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x00b4, 0x1f28, 0, 0}, 0x1f9c }, // U1F9C # GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x00b4, 0x1f29, 0, 0}, 0x1f9d }, // U1F9D # GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x00b4, 0x1f60, 0, 0}, 0x1fa4 }, // U1FA4 # GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x00b4, 0x1f61, 0, 0}, 0x1fa5 }, // U1FA5 # GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x00b4, 0x1f68, 0, 0}, 0x1fac }, // U1FAC # GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x00b4, 0x1f69, 0, 0}, 0x1fad }, // U1FAD # GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0313, 0x0391, 0, 0}, 0x1f88 }, // U1F88 # GREEK CAPITAL LETTER ALPHA WITH PSILI AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0313, 0x0397, 0, 0}, 0x1f98 }, // U1F98 # GREEK CAPITAL LETTER ETA WITH PSILI AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0313, 0x03a9, 0, 0}, 0x1fa8 }, // U1FA8 # GREEK CAPITAL LETTER OMEGA WITH PSILI AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0313, 0x03b1, 0, 0}, 0x1f80 }, // U1F80 # GREEK SMALL LETTER ALPHA WITH PSILI AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0313, 0x03b7, 0, 0}, 0x1f90 }, // U1F90 # GREEK SMALL LETTER ETA WITH PSILI AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0313, 0x03c9, 0, 0}, 0x1fa0 }, // U1FA0 # GREEK SMALL LETTER OMEGA WITH PSILI AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0314, 0x0391, 0, 0}, 0x1f89 }, // U1F89 # GREEK CAPITAL LETTER ALPHA WITH DASIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0314, 0x0397, 0, 0}, 0x1f99 }, // U1F99 # GREEK CAPITAL LETTER ETA WITH DASIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0314, 0x03a9, 0, 0}, 0x1fa9 }, // U1FA9 # GREEK CAPITAL LETTER OMEGA WITH DASIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0314, 0x03b1, 0, 0}, 0x1f81 }, // U1F81 # GREEK SMALL LETTER ALPHA WITH DASIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0314, 0x03b7, 0, 0}, 0x1f91 }, // U1F91 # GREEK SMALL LETTER ETA WITH DASIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0314, 0x03c9, 0, 0}, 0x1fa1 }, // U1FA1 # GREEK SMALL LETTER OMEGA WITH DASIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0342, 0x0028, 0x0391, 0}, 0x1f8f }, // U1F8F # GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0342, 0x0028, 0x0397, 0}, 0x1f9f }, // U1F9F # GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0342, 0x0028, 0x03a9, 0}, 0x1faf }, // U1FAF # GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0342, 0x0028, 0x03b1, 0}, 0x1f87 }, // U1F87 # GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0342, 0x0028, 0x03b7, 0}, 0x1f97 }, // U1F97 # GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0342, 0x0028, 0x03c9, 0}, 0x1fa7 }, // U1FA7 # GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0342, 0x0029, 0x0391, 0}, 0x1f8e }, // U1F8E # GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0342, 0x0029, 0x0397, 0}, 0x1f9e }, // U1F9E # GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0342, 0x0029, 0x03a9, 0}, 0x1fae }, // U1FAE # GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0342, 0x0029, 0x03b1, 0}, 0x1f86 }, // U1F86 # GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0342, 0x0029, 0x03b7, 0}, 0x1f96 }, // U1F96 # GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0342, 0x0029, 0x03c9, 0}, 0x1fa6 }, // U1FA6 # GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0342, 0x0313, 0x0391, 0}, 0x1f8e }, // U1F8E # GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0342, 0x0313, 0x0397, 0}, 0x1f9e }, // U1F9E # GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0342, 0x0313, 0x03a9, 0}, 0x1fae }, // U1FAE # GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0342, 0x0313, 0x03b1, 0}, 0x1f86 }, // U1F86 # GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0342, 0x0313, 0x03b7, 0}, 0x1f96 }, // U1F96 # GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0342, 0x0313, 0x03c9, 0}, 0x1fa6 }, // U1FA6 # GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0342, 0x0314, 0x0391, 0}, 0x1f8f }, // U1F8F # GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0342, 0x0314, 0x0397, 0}, 0x1f9f }, // U1F9F # GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0342, 0x0314, 0x03a9, 0}, 0x1faf }, // U1FAF # GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0342, 0x0314, 0x03b1, 0}, 0x1f87 }, // U1F87 # GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0342, 0x0314, 0x03b7, 0}, 0x1f97 }, // U1F97 # GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0342, 0x0314, 0x03c9, 0}, 0x1fa7 }, // U1FA7 # GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0342, 0x03b1, 0, 0}, 0x1fb7 }, // U1FB7 # GREEK SMALL LETTER ALPHA WITH PERISPOMENI AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0342, 0x03b7, 0, 0}, 0x1fc7 }, // U1FC7 # GREEK SMALL LETTER ETA WITH PERISPOMENI AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0342, 0x03c9, 0, 0}, 0x1ff7 }, // U1FF7 # GREEK SMALL LETTER OMEGA WITH PERISPOMENI AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0342, 0x1f00, 0, 0}, 0x1f86 }, // U1F86 # GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0342, 0x1f01, 0, 0}, 0x1f87 }, // U1F87 # GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0342, 0x1f08, 0, 0}, 0x1f8e }, // U1F8E # GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0342, 0x1f09, 0, 0}, 0x1f8f }, // U1F8F # GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0342, 0x1f20, 0, 0}, 0x1f96 }, // U1F96 # GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0342, 0x1f21, 0, 0}, 0x1f97 }, // U1F97 # GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0342, 0x1f28, 0, 0}, 0x1f9e }, // U1F9E # GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0342, 0x1f29, 0, 0}, 0x1f9f }, // U1F9F # GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0342, 0x1f60, 0, 0}, 0x1fa6 }, // U1FA6 # GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0342, 0x1f61, 0, 0}, 0x1fa7 }, // U1FA7 # GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0342, 0x1f68, 0, 0}, 0x1fae }, // U1FAE # GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0342, 0x1f69, 0, 0}, 0x1faf }, // U1FAF # GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0391, 0, 0, 0}, 0x1fbc }, // U1FBC # GREEK CAPITAL LETTER ALPHA WITH PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0397, 0, 0, 0}, 0x1fcc }, // U1FCC # GREEK CAPITAL LETTER ETA WITH PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x03a9, 0, 0, 0}, 0x1ffc }, // U1FFC # GREEK CAPITAL LETTER OMEGA WITH PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x03ac, 0, 0, 0}, 0x1fb4 }, // U1FB4 # GREEK SMALL LETTER ALPHA WITH OXIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x03ae, 0, 0, 0}, 0x1fc4 }, // U1FC4 # GREEK SMALL LETTER ETA WITH OXIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x03b1, 0, 0, 0}, 0x1fb3 }, // U1FB3 # GREEK SMALL LETTER ALPHA WITH YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x03b7, 0, 0, 0}, 0x1fc3 }, // U1FC3 # GREEK SMALL LETTER ETA WITH YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x03c9, 0, 0, 0}, 0x1ff3 }, // U1FF3 # GREEK SMALL LETTER OMEGA WITH YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x03ce, 0, 0, 0}, 0x1ff4 }, // U1FF4 # GREEK SMALL LETTER OMEGA WITH OXIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x1f00, 0, 0, 0}, 0x1f80 }, // U1F80 # GREEK SMALL LETTER ALPHA WITH PSILI AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x1f01, 0, 0, 0}, 0x1f81 }, // U1F81 # GREEK SMALL LETTER ALPHA WITH DASIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x1f02, 0, 0, 0}, 0x1f82 }, // U1F82 # GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x1f03, 0, 0, 0}, 0x1f83 }, // U1F83 # GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x1f04, 0, 0, 0}, 0x1f84 }, // U1F84 # GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x1f05, 0, 0, 0}, 0x1f85 }, // U1F85 # GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x1f06, 0, 0, 0}, 0x1f86 }, // U1F86 # GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x1f07, 0, 0, 0}, 0x1f87 }, // U1F87 # GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x1f08, 0, 0, 0}, 0x1f88 }, // U1F88 # GREEK CAPITAL LETTER ALPHA WITH PSILI AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x1f09, 0, 0, 0}, 0x1f89 }, // U1F89 # GREEK CAPITAL LETTER ALPHA WITH DASIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x1f0a, 0, 0, 0}, 0x1f8a }, // U1F8A # GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x1f0b, 0, 0, 0}, 0x1f8b }, // U1F8B # GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x1f0c, 0, 0, 0}, 0x1f8c }, // U1F8C # GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x1f0d, 0, 0, 0}, 0x1f8d }, // U1F8D # GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x1f0e, 0, 0, 0}, 0x1f8e }, // U1F8E # GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x1f0f, 0, 0, 0}, 0x1f8f }, // U1F8F # GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x1f20, 0, 0, 0}, 0x1f90 }, // U1F90 # GREEK SMALL LETTER ETA WITH PSILI AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x1f21, 0, 0, 0}, 0x1f91 }, // U1F91 # GREEK SMALL LETTER ETA WITH DASIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x1f22, 0, 0, 0}, 0x1f92 }, // U1F92 # GREEK SMALL LETTER ETA WITH PSILI AND VARIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x1f23, 0, 0, 0}, 0x1f93 }, // U1F93 # GREEK SMALL LETTER ETA WITH DASIA AND VARIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x1f24, 0, 0, 0}, 0x1f94 }, // U1F94 # GREEK SMALL LETTER ETA WITH PSILI AND OXIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x1f25, 0, 0, 0}, 0x1f95 }, // U1F95 # GREEK SMALL LETTER ETA WITH DASIA AND OXIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x1f26, 0, 0, 0}, 0x1f96 }, // U1F96 # GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x1f27, 0, 0, 0}, 0x1f97 }, // U1F97 # GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x1f28, 0, 0, 0}, 0x1f98 }, // U1F98 # GREEK CAPITAL LETTER ETA WITH PSILI AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x1f29, 0, 0, 0}, 0x1f99 }, // U1F99 # GREEK CAPITAL LETTER ETA WITH DASIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x1f2a, 0, 0, 0}, 0x1f9a }, // U1F9A # GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x1f2b, 0, 0, 0}, 0x1f9b }, // U1F9B # GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x1f2c, 0, 0, 0}, 0x1f9c }, // U1F9C # GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x1f2d, 0, 0, 0}, 0x1f9d }, // U1F9D # GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x1f2e, 0, 0, 0}, 0x1f9e }, // U1F9E # GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x1f2f, 0, 0, 0}, 0x1f9f }, // U1F9F # GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x1f60, 0, 0, 0}, 0x1fa0 }, // U1FA0 # GREEK SMALL LETTER OMEGA WITH PSILI AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x1f61, 0, 0, 0}, 0x1fa1 }, // U1FA1 # GREEK SMALL LETTER OMEGA WITH DASIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x1f62, 0, 0, 0}, 0x1fa2 }, // U1FA2 # GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x1f63, 0, 0, 0}, 0x1fa3 }, // U1FA3 # GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x1f64, 0, 0, 0}, 0x1fa4 }, // U1FA4 # GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x1f65, 0, 0, 0}, 0x1fa5 }, // U1FA5 # GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x1f66, 0, 0, 0}, 0x1fa6 }, // U1FA6 # GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x1f67, 0, 0, 0}, 0x1fa7 }, // U1FA7 # GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x1f68, 0, 0, 0}, 0x1fa8 }, // U1FA8 # GREEK CAPITAL LETTER OMEGA WITH PSILI AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x1f69, 0, 0, 0}, 0x1fa9 }, // U1FA9 # GREEK CAPITAL LETTER OMEGA WITH DASIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x1f6a, 0, 0, 0}, 0x1faa }, // U1FAA # GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x1f6b, 0, 0, 0}, 0x1fab }, // U1FAB # GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x1f6c, 0, 0, 0}, 0x1fac }, // U1FAC # GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x1f6d, 0, 0, 0}, 0x1fad }, // U1FAD # GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x1f6e, 0, 0, 0}, 0x1fae }, // U1FAE # GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x1f6f, 0, 0, 0}, 0x1faf }, // U1FAF # GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x1f70, 0, 0, 0}, 0x1fb2 }, // U1FB2 # GREEK SMALL LETTER ALPHA WITH VARIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x1f74, 0, 0, 0}, 0x1fc2 }, // U1FC2 # GREEK SMALL LETTER ETA WITH VARIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x1f7c, 0, 0, 0}, 0x1ff2 }, // U1FF2 # GREEK SMALL LETTER OMEGA WITH VARIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x1fb6, 0, 0, 0}, 0x1fb7 }, // U1FB7 # GREEK SMALL LETTER ALPHA WITH PERISPOMENI AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x1fc6, 0, 0, 0}, 0x1fc7 }, // U1FC7 # GREEK SMALL LETTER ETA WITH PERISPOMENI AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x1ff6, 0, 0, 0}, 0x1ff7 }, // U1FF7 # GREEK SMALL LETTER OMEGA WITH PERISPOMENI AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Grave), 0x0028, 0x0391, 0}, 0x1f8b }, // U1F8B # GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Grave), 0x0028, 0x0397, 0}, 0x1f9b }, // U1F9B # GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Grave), 0x0028, 0x03a9, 0}, 0x1fab }, // U1FAB # GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Grave), 0x0028, 0x03b1, 0}, 0x1f83 }, // U1F83 # GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Grave), 0x0028, 0x03b7, 0}, 0x1f93 }, // U1F93 # GREEK SMALL LETTER ETA WITH DASIA AND VARIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Grave), 0x0028, 0x03c9, 0}, 0x1fa3 }, // U1FA3 # GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Grave), 0x0029, 0x0391, 0}, 0x1f8a }, // U1F8A # GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Grave), 0x0029, 0x0397, 0}, 0x1f9a }, // U1F9A # GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Grave), 0x0029, 0x03a9, 0}, 0x1faa }, // U1FAA # GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Grave), 0x0029, 0x03b1, 0}, 0x1f82 }, // U1F82 # GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Grave), 0x0029, 0x03b7, 0}, 0x1f92 }, // U1F92 # GREEK SMALL LETTER ETA WITH PSILI AND VARIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Grave), 0x0029, 0x03c9, 0}, 0x1fa2 }, // U1FA2 # GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Grave), 0x0313, 0x0391, 0}, 0x1f8a }, // U1F8A # GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Grave), 0x0313, 0x0397, 0}, 0x1f9a }, // U1F9A # GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Grave), 0x0313, 0x03a9, 0}, 0x1faa }, // U1FAA # GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Grave), 0x0313, 0x03b1, 0}, 0x1f82 }, // U1F82 # GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Grave), 0x0313, 0x03b7, 0}, 0x1f92 }, // U1F92 # GREEK SMALL LETTER ETA WITH PSILI AND VARIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Grave), 0x0313, 0x03c9, 0}, 0x1fa2 }, // U1FA2 # GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Grave), 0x0314, 0x0391, 0}, 0x1f8b }, // U1F8B # GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Grave), 0x0314, 0x0397, 0}, 0x1f9b }, // U1F9B # GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Grave), 0x0314, 0x03a9, 0}, 0x1fab }, // U1FAB # GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Grave), 0x0314, 0x03b1, 0}, 0x1f83 }, // U1F83 # GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Grave), 0x0314, 0x03b7, 0}, 0x1f93 }, // U1F93 # GREEK SMALL LETTER ETA WITH DASIA AND VARIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Grave), 0x0314, 0x03c9, 0}, 0x1fa3 }, // U1FA3 # GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Grave), 0x03b1, 0, 0}, 0x1fb2 }, // U1FB2 # GREEK SMALL LETTER ALPHA WITH VARIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Grave), 0x03b7, 0, 0}, 0x1fc2 }, // U1FC2 # GREEK SMALL LETTER ETA WITH VARIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Grave), 0x03c9, 0, 0}, 0x1ff2 }, // U1FF2 # GREEK SMALL LETTER OMEGA WITH VARIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Grave), 0x1f00, 0, 0}, 0x1f82 }, // U1F82 # GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Grave), 0x1f01, 0, 0}, 0x1f83 }, // U1F83 # GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Grave), 0x1f08, 0, 0}, 0x1f8a }, // U1F8A # GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Grave), 0x1f09, 0, 0}, 0x1f8b }, // U1F8B # GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Grave), 0x1f20, 0, 0}, 0x1f92 }, // U1F92 # GREEK SMALL LETTER ETA WITH PSILI AND VARIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Grave), 0x1f21, 0, 0}, 0x1f93 }, // U1F93 # GREEK SMALL LETTER ETA WITH DASIA AND VARIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Grave), 0x1f28, 0, 0}, 0x1f9a }, // U1F9A # GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Grave), 0x1f29, 0, 0}, 0x1f9b }, // U1F9B # GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Grave), 0x1f60, 0, 0}, 0x1fa2 }, // U1FA2 # GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Grave), 0x1f61, 0, 0}, 0x1fa3 }, // U1FA3 # GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Grave), 0x1f68, 0, 0}, 0x1faa }, // U1FAA # GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Grave), 0x1f69, 0, 0}, 0x1fab }, // U1FAB # GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Acute), 0x0028, 0x0391, 0}, 0x1f8d }, // U1F8D # GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Acute), 0x0028, 0x0397, 0}, 0x1f9d }, // U1F9D # GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Acute), 0x0028, 0x03a9, 0}, 0x1fad }, // U1FAD # GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Acute), 0x0028, 0x03b1, 0}, 0x1f85 }, // U1F85 # GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Acute), 0x0028, 0x03b7, 0}, 0x1f95 }, // U1F95 # GREEK SMALL LETTER ETA WITH DASIA AND OXIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Acute), 0x0028, 0x03c9, 0}, 0x1fa5 }, // U1FA5 # GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Acute), 0x0029, 0x0391, 0}, 0x1f8c }, // U1F8C # GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Acute), 0x0029, 0x0397, 0}, 0x1f9c }, // U1F9C # GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Acute), 0x0029, 0x03a9, 0}, 0x1fac }, // U1FAC # GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Acute), 0x0029, 0x03b1, 0}, 0x1f84 }, // U1F84 # GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Acute), 0x0029, 0x03b7, 0}, 0x1f94 }, // U1F94 # GREEK SMALL LETTER ETA WITH PSILI AND OXIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Acute), 0x0029, 0x03c9, 0}, 0x1fa4 }, // U1FA4 # GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Acute), 0x0313, 0x0391, 0}, 0x1f8c }, // U1F8C # GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Acute), 0x0313, 0x0397, 0}, 0x1f9c }, // U1F9C # GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Acute), 0x0313, 0x03a9, 0}, 0x1fac }, // U1FAC # GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Acute), 0x0313, 0x03b1, 0}, 0x1f84 }, // U1F84 # GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Acute), 0x0313, 0x03b7, 0}, 0x1f94 }, // U1F94 # GREEK SMALL LETTER ETA WITH PSILI AND OXIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Acute), 0x0313, 0x03c9, 0}, 0x1fa4 }, // U1FA4 # GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Acute), 0x0314, 0x0391, 0}, 0x1f8d }, // U1F8D # GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Acute), 0x0314, 0x0397, 0}, 0x1f9d }, // U1F9D # GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Acute), 0x0314, 0x03a9, 0}, 0x1fad }, // U1FAD # GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Acute), 0x0314, 0x03b1, 0}, 0x1f85 }, // U1F85 # GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Acute), 0x0314, 0x03b7, 0}, 0x1f95 }, // U1F95 # GREEK SMALL LETTER ETA WITH DASIA AND OXIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Acute), 0x0314, 0x03c9, 0}, 0x1fa5 }, // U1FA5 # GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Acute), 0x03b1, 0, 0}, 0x1fb4 }, // U1FB4 # GREEK SMALL LETTER ALPHA WITH OXIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Acute), 0x03b7, 0, 0}, 0x1fc4 }, // U1FC4 # GREEK SMALL LETTER ETA WITH OXIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Acute), 0x03c9, 0, 0}, 0x1ff4 }, // U1FF4 # GREEK SMALL LETTER OMEGA WITH OXIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Acute), 0x1f00, 0, 0}, 0x1f84 }, // U1F84 # GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Acute), 0x1f01, 0, 0}, 0x1f85 }, // U1F85 # GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Acute), 0x1f08, 0, 0}, 0x1f8c }, // U1F8C # GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Acute), 0x1f09, 0, 0}, 0x1f8d }, // U1F8D # GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Acute), 0x1f20, 0, 0}, 0x1f94 }, // U1F94 # GREEK SMALL LETTER ETA WITH PSILI AND OXIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Acute), 0x1f21, 0, 0}, 0x1f95 }, // U1F95 # GREEK SMALL LETTER ETA WITH DASIA AND OXIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Acute), 0x1f28, 0, 0}, 0x1f9c }, // U1F9C # GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Acute), 0x1f29, 0, 0}, 0x1f9d }, // U1F9D # GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Acute), 0x1f60, 0, 0}, 0x1fa4 }, // U1FA4 # GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Acute), 0x1f61, 0, 0}, 0x1fa5 }, // U1FA5 # GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Acute), 0x1f68, 0, 0}, 0x1fac }, // U1FAC # GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Acute), 0x1f69, 0, 0}, 0x1fad }, // U1FAD # GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Tilde), 0x0028, 0x0391, 0}, 0x1f8f }, // U1F8F # GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Tilde), 0x0028, 0x0397, 0}, 0x1f9f }, // U1F9F # GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Tilde), 0x0028, 0x03a9, 0}, 0x1faf }, // U1FAF # GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Tilde), 0x0028, 0x03b1, 0}, 0x1f87 }, // U1F87 # GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Tilde), 0x0028, 0x03b7, 0}, 0x1f97 }, // U1F97 # GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Tilde), 0x0028, 0x03c9, 0}, 0x1fa7 }, // U1FA7 # GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Tilde), 0x0029, 0x0391, 0}, 0x1f8e }, // U1F8E # GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Tilde), 0x0029, 0x0397, 0}, 0x1f9e }, // U1F9E # GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Tilde), 0x0029, 0x03a9, 0}, 0x1fae }, // U1FAE # GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Tilde), 0x0029, 0x03b1, 0}, 0x1f86 }, // U1F86 # GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Tilde), 0x0029, 0x03b7, 0}, 0x1f96 }, // U1F96 # GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Tilde), 0x0029, 0x03c9, 0}, 0x1fa6 }, // U1FA6 # GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Tilde), 0x0313, 0x0391, 0}, 0x1f8e }, // U1F8E # GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Tilde), 0x0313, 0x0397, 0}, 0x1f9e }, // U1F9E # GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Tilde), 0x0313, 0x03a9, 0}, 0x1fae }, // U1FAE # GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Tilde), 0x0313, 0x03b1, 0}, 0x1f86 }, // U1F86 # GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Tilde), 0x0313, 0x03b7, 0}, 0x1f96 }, // U1F96 # GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Tilde), 0x0313, 0x03c9, 0}, 0x1fa6 }, // U1FA6 # GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Tilde), 0x0314, 0x0391, 0}, 0x1f8f }, // U1F8F # GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Tilde), 0x0314, 0x0397, 0}, 0x1f9f }, // U1F9F # GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Tilde), 0x0314, 0x03a9, 0}, 0x1faf }, // U1FAF # GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Tilde), 0x0314, 0x03b1, 0}, 0x1f87 }, // U1F87 # GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Tilde), 0x0314, 0x03b7, 0}, 0x1f97 }, // U1F97 # GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Tilde), 0x0314, 0x03c9, 0}, 0x1fa7 }, // U1FA7 # GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Tilde), 0x03b1, 0, 0}, 0x1fb7 }, // U1FB7 # GREEK SMALL LETTER ALPHA WITH PERISPOMENI AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Tilde), 0x03b7, 0, 0}, 0x1fc7 }, // U1FC7 # GREEK SMALL LETTER ETA WITH PERISPOMENI AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Tilde), 0x03c9, 0, 0}, 0x1ff7 }, // U1FF7 # GREEK SMALL LETTER OMEGA WITH PERISPOMENI AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Tilde), 0x1f00, 0, 0}, 0x1f86 }, // U1F86 # GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Tilde), 0x1f01, 0, 0}, 0x1f87 }, // U1F87 # GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Tilde), 0x1f08, 0, 0}, 0x1f8e }, // U1F8E # GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Tilde), 0x1f09, 0, 0}, 0x1f8f }, // U1F8F # GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Tilde), 0x1f20, 0, 0}, 0x1f96 }, // U1F96 # GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Tilde), 0x1f21, 0, 0}, 0x1f97 }, // U1F97 # GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Tilde), 0x1f28, 0, 0}, 0x1f9e }, // U1F9E # GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Tilde), 0x1f29, 0, 0}, 0x1f9f }, // U1F9F # GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Tilde), 0x1f60, 0, 0}, 0x1fa6 }, // U1FA6 # GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Tilde), 0x1f61, 0, 0}, 0x1fa7 }, // U1FA7 # GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Tilde), 0x1f68, 0, 0}, 0x1fae }, // U1FAE # GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Tilde), 0x1f69, 0, 0}, 0x1faf }, // U1FAF # GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x05b4, 0x05d9, 0, 0, 0}, 0xfb1d }, // UFB1D # HEBREW LETTER YOD WITH HIRIQ ++ { {UNITIZE(Qt::Key_Multi_key), 0x05b7, 0x05d0, 0, 0, 0}, 0xfb2e }, // UFB2E # HEBREW LETTER ALEF WITH PATAH ++ { {UNITIZE(Qt::Key_Multi_key), 0x05b7, 0x05f2, 0, 0, 0}, 0xfb1f }, // UFB1F # HEBREW LIGATURE YIDDISH YOD YOD PATAH ++ { {UNITIZE(Qt::Key_Multi_key), 0x05b8, 0x05d0, 0, 0, 0}, 0xfb2f }, // UFB2F # HEBREW LETTER ALEF WITH QAMATS ++ { {UNITIZE(Qt::Key_Multi_key), 0x05b9, 0x05d5, 0, 0, 0}, 0xfb4b }, // UFB4B # HEBREW LETTER VAV WITH HOLAM ++ { {UNITIZE(Qt::Key_Multi_key), 0x05bc, 0x05d0, 0, 0, 0}, 0xfb30 }, // UFB30 # HEBREW LETTER ALEF WITH MAPIQ ++ { {UNITIZE(Qt::Key_Multi_key), 0x05bc, 0x05d1, 0, 0, 0}, 0xfb31 }, // UFB31 # HEBREW LETTER BET WITH DAGESH ++ { {UNITIZE(Qt::Key_Multi_key), 0x05bc, 0x05d1, 0, 0, 0}, 0xfb31 }, // UFB31 # HEBREW LETTER BET WITH DAGESH ++ { {UNITIZE(Qt::Key_Multi_key), 0x05bc, 0x05d2, 0, 0, 0}, 0xfb32 }, // UFB32 # HEBREW LETTER GIMEL WITH DAGESH ++ { {UNITIZE(Qt::Key_Multi_key), 0x05bc, 0x05d2, 0, 0, 0}, 0xfb32 }, // UFB32 # HEBREW LETTER GIMEL WITH DAGESH ++ { {UNITIZE(Qt::Key_Multi_key), 0x05bc, 0x05d3, 0, 0, 0}, 0xfb33 }, // UFB33 # HEBREW LETTER DALET WITH DAGESH ++ { {UNITIZE(Qt::Key_Multi_key), 0x05bc, 0x05d3, 0, 0, 0}, 0xfb33 }, // UFB33 # HEBREW LETTER DALET WITH DAGESH ++ { {UNITIZE(Qt::Key_Multi_key), 0x05bc, 0x05d4, 0, 0, 0}, 0xfb34 }, // UFB34 # HEBREW LETTER HE WITH MAPIQ ++ { {UNITIZE(Qt::Key_Multi_key), 0x05bc, 0x05d5, 0, 0, 0}, 0xfb35 }, // UFB35 # HEBREW LETTER VAV WITH DAGESH ++ { {UNITIZE(Qt::Key_Multi_key), 0x05bc, 0x05d6, 0, 0, 0}, 0xfb36 }, // UFB36 # HEBREW LETTER ZAYIN WITH DAGESH ++ { {UNITIZE(Qt::Key_Multi_key), 0x05bc, 0x05d6, 0, 0, 0}, 0xfb36 }, // UFB36 # HEBREW LETTER ZAYIN WITH DAGESH ++ { {UNITIZE(Qt::Key_Multi_key), 0x05bc, 0x05d8, 0, 0, 0}, 0xfb38 }, // UFB38 # HEBREW LETTER TET WITH DAGESH ++ { {UNITIZE(Qt::Key_Multi_key), 0x05bc, 0x05d8, 0, 0, 0}, 0xfb38 }, // UFB38 # HEBREW LETTER TET WITH DAGESH ++ { {UNITIZE(Qt::Key_Multi_key), 0x05bc, 0x05d9, 0, 0, 0}, 0xfb39 }, // UFB39 # HEBREW LETTER YOD WITH DAGESH ++ { {UNITIZE(Qt::Key_Multi_key), 0x05bc, 0x05da, 0, 0, 0}, 0xfb3a }, // UFB3A # HEBREW LETTER FINAL KAF WITH DAGESH ++ { {UNITIZE(Qt::Key_Multi_key), 0x05bc, 0x05db, 0, 0, 0}, 0xfb3b }, // UFB3B # HEBREW LETTER KAF WITH DAGESH ++ { {UNITIZE(Qt::Key_Multi_key), 0x05bc, 0x05dc, 0, 0, 0}, 0xfb3c }, // UFB3C # HEBREW LETTER LAMED WITH DAGESH ++ { {UNITIZE(Qt::Key_Multi_key), 0x05bc, 0x05de, 0, 0, 0}, 0xfb3e }, // UFB3E # HEBREW LETTER MEM WITH DAGESH ++ { {UNITIZE(Qt::Key_Multi_key), 0x05bc, 0x05e0, 0, 0, 0}, 0xfb40 }, // UFB40 # HEBREW LETTER NUN WITH DAGESH ++ { {UNITIZE(Qt::Key_Multi_key), 0x05bc, 0x05e1, 0, 0, 0}, 0xfb41 }, // UFB41 # HEBREW LETTER SAMEKH WITH DAGESH ++ { {UNITIZE(Qt::Key_Multi_key), 0x05bc, 0x05e1, 0, 0, 0}, 0xfb41 }, // UFB41 # HEBREW LETTER SAMEKH WITH DAGESH ++ { {UNITIZE(Qt::Key_Multi_key), 0x05bc, 0x05e3, 0, 0, 0}, 0xfb43 }, // UFB43 # HEBREW LETTER FINAL PE WITH DAGESH ++ { {UNITIZE(Qt::Key_Multi_key), 0x05bc, 0x05e4, 0, 0, 0}, 0xfb44 }, // UFB44 # HEBREW LETTER PE WITH DAGESH ++ { {UNITIZE(Qt::Key_Multi_key), 0x05bc, 0x05e6, 0, 0, 0}, 0xfb46 }, // UFB46 # HEBREW LETTER TSADI WITH DAGESH ++ { {UNITIZE(Qt::Key_Multi_key), 0x05bc, 0x05e6, 0, 0, 0}, 0xfb46 }, // UFB46 # HEBREW LETTER TSADI WITH DAGESH ++ { {UNITIZE(Qt::Key_Multi_key), 0x05bc, 0x05e7, 0, 0, 0}, 0xfb47 }, // UFB47 # HEBREW LETTER QOF WITH DAGESH ++ { {UNITIZE(Qt::Key_Multi_key), 0x05bc, 0x05e7, 0, 0, 0}, 0xfb47 }, // UFB47 # HEBREW LETTER QOF WITH DAGESH ++ { {UNITIZE(Qt::Key_Multi_key), 0x05bc, 0x05e8, 0, 0, 0}, 0xfb48 }, // UFB48 # HEBREW LETTER RESH WITH DAGESH ++ { {UNITIZE(Qt::Key_Multi_key), 0x05bc, 0x05e9, 0, 0, 0}, 0xfb49 }, // UFB49 # HEBREW LETTER SHIN WITH DAGESH ++ { {UNITIZE(Qt::Key_Multi_key), 0x05bc, 0x05ea, 0, 0, 0}, 0xfb4a }, // UFB4A # HEBREW LETTER TAV WITH DAGESH ++ { {UNITIZE(Qt::Key_Multi_key), 0x05bc, 0x05ea, 0, 0, 0}, 0xfb4a }, // UFB4A # HEBREW LETTER TAV WITH DAGESH ++ { {UNITIZE(Qt::Key_Multi_key), 0x05bf, 0x05d1, 0, 0, 0}, 0xfb4c }, // UFB4C # HEBREW LETTER BET WITH RAFE ++ { {UNITIZE(Qt::Key_Multi_key), 0x05bf, 0x05d1, 0, 0, 0}, 0xfb4c }, // UFB4C # HEBREW LETTER BET WITH RAFE ++ { {UNITIZE(Qt::Key_Multi_key), 0x05bf, 0x05db, 0, 0, 0}, 0xfb4d }, // UFB4D # HEBREW LETTER KAF WITH RAFE ++ { {UNITIZE(Qt::Key_Multi_key), 0x05bf, 0x05e4, 0, 0, 0}, 0xfb4e }, // UFB4E # HEBREW LETTER PE WITH RAFE ++ { {UNITIZE(Qt::Key_Multi_key), 0x05c1, 0x05bc, 0x05e9, 0, 0}, 0xfb2c }, // UFB2C # HEBREW LETTER SHIN WITH DAGESH AND SHIN DOT ++ { {UNITIZE(Qt::Key_Multi_key), 0x05c1, 0x05e9, 0, 0, 0}, 0xfb2a }, // UFB2A # HEBREW LETTER SHIN WITH SHIN DOT ++ { {UNITIZE(Qt::Key_Multi_key), 0x05c1, 0xfb49, 0, 0, 0}, 0xfb2c }, // UFB2C # HEBREW LETTER SHIN WITH DAGESH AND SHIN DOT ++ { {UNITIZE(Qt::Key_Multi_key), 0x05c2, 0x05bc, 0x05e9, 0, 0}, 0xfb2d }, // UFB2D # HEBREW LETTER SHIN WITH DAGESH AND SIN DOT ++ { {UNITIZE(Qt::Key_Multi_key), 0x05c2, 0x05e9, 0, 0, 0}, 0xfb2b }, // UFB2B # HEBREW LETTER SHIN WITH SIN DOT ++ { {UNITIZE(Qt::Key_Multi_key), 0x05c2, 0xfb49, 0, 0, 0}, 0xfb2d }, // UFB2D # HEBREW LETTER SHIN WITH DAGESH AND SIN DOT ++ { {UNITIZE(Qt::Key_Multi_key), 0x0653, 0x0627, 0, 0, 0}, 0x0622 }, // U0622 # ARABIC LETTER ALEF WITH MADDA ABOVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0654, 0x0627, 0, 0, 0}, 0x0623 }, // U0623 # ARABIC LETTER ALEF WITH HAMZA ABOVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0654, 0x0648, 0, 0, 0}, 0x0624 }, // U0624 # ARABIC LETTER WAW WITH HAMZA ABOVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0654, 0x064a, 0, 0, 0}, 0x0626 }, // U0626 # ARABIC LETTER YEH WITH HAMZA ABOVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0654, 0x06c1, 0, 0, 0}, 0x06c2 }, // U06C2 # ARABIC LETTER HEH GOAL WITH HAMZA ABOVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0654, 0x06d2, 0, 0, 0}, 0x06d3 }, // U06D3 # ARABIC LETTER YEH BARREE WITH HAMZA ABOVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0654, 0x06d5, 0, 0, 0}, 0x06c0 }, // U06C0 # ARABIC LETTER HEH WITH YEH ABOVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0655, 0x0627, 0, 0, 0}, 0x0625 }, // U0625 # ARABIC LETTER ALEF WITH HAMZA BELOW ++ { {UNITIZE(Qt::Key_Multi_key), 0x093c, 0x0915, 0, 0, 0}, 0x0958 }, // U0958 # DEVANAGARI LETTER QA ++ { {UNITIZE(Qt::Key_Multi_key), 0x093c, 0x0916, 0, 0, 0}, 0x0959 }, // U0959 # DEVANAGARI LETTER KHHA ++ { {UNITIZE(Qt::Key_Multi_key), 0x093c, 0x0917, 0, 0, 0}, 0x095a }, // U095A # DEVANAGARI LETTER GHHA ++ { {UNITIZE(Qt::Key_Multi_key), 0x093c, 0x091c, 0, 0, 0}, 0x095b }, // U095B # DEVANAGARI LETTER ZA ++ { {UNITIZE(Qt::Key_Multi_key), 0x093c, 0x0921, 0, 0, 0}, 0x095c }, // U095C # DEVANAGARI LETTER DDDHA ++ { {UNITIZE(Qt::Key_Multi_key), 0x093c, 0x0922, 0, 0, 0}, 0x095d }, // U095D # DEVANAGARI LETTER RHA ++ { {UNITIZE(Qt::Key_Multi_key), 0x093c, 0x0928, 0, 0, 0}, 0x0929 }, // U0929 # DEVANAGARI LETTER NNNA ++ { {UNITIZE(Qt::Key_Multi_key), 0x093c, 0x092b, 0, 0, 0}, 0x095e }, // U095E # DEVANAGARI LETTER FA ++ { {UNITIZE(Qt::Key_Multi_key), 0x093c, 0x092f, 0, 0, 0}, 0x095f }, // U095F # DEVANAGARI LETTER YYA ++ { {UNITIZE(Qt::Key_Multi_key), 0x093c, 0x0930, 0, 0, 0}, 0x0931 }, // U0931 # DEVANAGARI LETTER RRA ++ { {UNITIZE(Qt::Key_Multi_key), 0x093c, 0x0933, 0, 0, 0}, 0x0934 }, // U0934 # DEVANAGARI LETTER LLLA ++ { {UNITIZE(Qt::Key_Multi_key), 0x09bc, 0x09a1, 0, 0, 0}, 0x09dc }, // U09DC # BENGALI LETTER RRA ++ { {UNITIZE(Qt::Key_Multi_key), 0x09bc, 0x09a2, 0, 0, 0}, 0x09dd }, // U09DD # BENGALI LETTER RHA ++ { {UNITIZE(Qt::Key_Multi_key), 0x09bc, 0x09af, 0, 0, 0}, 0x09df }, // U09DF # BENGALI LETTER YYA ++ { {UNITIZE(Qt::Key_Multi_key), 0x09c7, 0x09be, 0, 0, 0}, 0x09cb }, // U09CB # BENGALI VOWEL SIGN O ++ { {UNITIZE(Qt::Key_Multi_key), 0x09c7, 0x09d7, 0, 0, 0}, 0x09cc }, // U09CC # BENGALI VOWEL SIGN AU ++ { {UNITIZE(Qt::Key_Multi_key), 0x0a3c, 0x0a16, 0, 0, 0}, 0x0a59 }, // U0A59 # GURMUKHI LETTER KHHA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0a3c, 0x0a17, 0, 0, 0}, 0x0a5a }, // U0A5A # GURMUKHI LETTER GHHA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0a3c, 0x0a1c, 0, 0, 0}, 0x0a5b }, // U0A5B # GURMUKHI LETTER ZA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0a3c, 0x0a2b, 0, 0, 0}, 0x0a5e }, // U0A5E # GURMUKHI LETTER FA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0a3c, 0x0a32, 0, 0, 0}, 0x0a33 }, // U0A33 # GURMUKHI LETTER LLA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0a3c, 0x0a38, 0, 0, 0}, 0x0a36 }, // U0A36 # GURMUKHI LETTER SHA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0b3c, 0x0b21, 0, 0, 0}, 0x0b5c }, // U0B5C # ORIYA LETTER RRA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0b3c, 0x0b22, 0, 0, 0}, 0x0b5d }, // U0B5D # ORIYA LETTER RHA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0b47, 0x0b3e, 0, 0, 0}, 0x0b4b }, // U0B4B # ORIYA VOWEL SIGN O ++ { {UNITIZE(Qt::Key_Multi_key), 0x0b47, 0x0b56, 0, 0, 0}, 0x0b48 }, // U0B48 # ORIYA VOWEL SIGN AI ++ { {UNITIZE(Qt::Key_Multi_key), 0x0b47, 0x0b57, 0, 0, 0}, 0x0b4c }, // U0B4C # ORIYA VOWEL SIGN AU ++ { {UNITIZE(Qt::Key_Multi_key), 0x0bc6, 0x0bbe, 0, 0, 0}, 0x0bca }, // U0BCA # TAMIL VOWEL SIGN O ++ { {UNITIZE(Qt::Key_Multi_key), 0x0bc6, 0x0bd7, 0, 0, 0}, 0x0bcc }, // U0BCC # TAMIL VOWEL SIGN AU ++ { {UNITIZE(Qt::Key_Multi_key), 0x0bc7, 0x0bbe, 0, 0, 0}, 0x0bcb }, // U0BCB # TAMIL VOWEL SIGN OO ++ { {UNITIZE(Qt::Key_Multi_key), 0x0bd7, 0x0b92, 0, 0, 0}, 0x0b94 }, // U0B94 # TAMIL LETTER AU ++ { {UNITIZE(Qt::Key_Multi_key), 0x0c46, 0x0c56, 0, 0, 0}, 0x0c48 }, // U0C48 # TELUGU VOWEL SIGN AI ++ { {UNITIZE(Qt::Key_Multi_key), 0x0cbf, 0x0cd5, 0, 0, 0}, 0x0cc0 }, // U0CC0 # KANNADA VOWEL SIGN II ++ { {UNITIZE(Qt::Key_Multi_key), 0x0cc6, 0x0cc2, 0, 0, 0}, 0x0cca }, // U0CCA # KANNADA VOWEL SIGN O ++ { {UNITIZE(Qt::Key_Multi_key), 0x0cc6, 0x0cc2, 0x0cd5, 0, 0}, 0x0ccb }, // U0CCB # KANNADA VOWEL SIGN OO ++ { {UNITIZE(Qt::Key_Multi_key), 0x0cc6, 0x0cd5, 0, 0, 0}, 0x0cc7 }, // U0CC7 # KANNADA VOWEL SIGN EE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0cc6, 0x0cd6, 0, 0, 0}, 0x0cc8 }, // U0CC8 # KANNADA VOWEL SIGN AI ++ { {UNITIZE(Qt::Key_Multi_key), 0x0cca, 0x0cd5, 0, 0, 0}, 0x0ccb }, // U0CCB # KANNADA VOWEL SIGN OO ++ { {UNITIZE(Qt::Key_Multi_key), 0x0d46, 0x0d3e, 0, 0, 0}, 0x0d4a }, // U0D4A # MALAYALAM VOWEL SIGN O ++ { {UNITIZE(Qt::Key_Multi_key), 0x0d46, 0x0d57, 0, 0, 0}, 0x0d4c }, // U0D4C # MALAYALAM VOWEL SIGN AU ++ { {UNITIZE(Qt::Key_Multi_key), 0x0d47, 0x0d3e, 0, 0, 0}, 0x0d4b }, // U0D4B # MALAYALAM VOWEL SIGN OO ++ { {UNITIZE(Qt::Key_Multi_key), 0x0dd9, 0x0dca, 0, 0, 0}, 0x0dda }, // U0DDA # SINHALA VOWEL SIGN DIGA KOMBUVA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0dd9, 0x0dcf, 0, 0, 0}, 0x0ddc }, // U0DDC # SINHALA VOWEL SIGN KOMBUVA HAA AELA-PILLA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0dd9, 0x0dcf, 0x0dca, 0, 0}, 0x0ddd }, // U0DDD # SINHALA VOWEL SIGN KOMBUVA HAA DIGA AELA-PILLA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0dd9, 0x0ddf, 0, 0, 0}, 0x0dde }, // U0DDE # SINHALA VOWEL SIGN KOMBUVA HAA GAYANUKITTA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0ddc, 0x0dca, 0, 0, 0}, 0x0ddd }, // U0DDD # SINHALA VOWEL SIGN KOMBUVA HAA DIGA AELA-PILLA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0f71, 0x0f72, 0, 0, 0}, 0x0f73 }, // U0F73 # TIBETAN VOWEL SIGN II ++ { {UNITIZE(Qt::Key_Multi_key), 0x0f71, 0x0f74, 0, 0, 0}, 0x0f75 }, // U0F75 # TIBETAN VOWEL SIGN UU ++ { {UNITIZE(Qt::Key_Multi_key), 0x0f71, 0x0f80, 0, 0, 0}, 0x0f81 }, // U0F81 # TIBETAN VOWEL SIGN REVERSED II ++ { {UNITIZE(Qt::Key_Multi_key), 0x0f90, 0x0fb5, 0, 0, 0}, 0x0fb9 }, // U0FB9 # TIBETAN SUBJOINED LETTER KSSA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0f92, 0x0fb7, 0, 0, 0}, 0x0f93 }, // U0F93 # TIBETAN SUBJOINED LETTER GHA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0f9c, 0x0fb7, 0, 0, 0}, 0x0f9d }, // U0F9D # TIBETAN SUBJOINED LETTER DDHA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0fa1, 0x0fb7, 0, 0, 0}, 0x0fa2 }, // U0FA2 # TIBETAN SUBJOINED LETTER DHA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0fa6, 0x0fb7, 0, 0, 0}, 0x0fa7 }, // U0FA7 # TIBETAN SUBJOINED LETTER BHA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0fab, 0x0fb7, 0, 0, 0}, 0x0fac }, // U0FAC # TIBETAN SUBJOINED LETTER DZHA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0fb2, 0x0f80, 0, 0, 0}, 0x0f76 }, // U0F76 # TIBETAN VOWEL SIGN VOCALIC R ++ { {UNITIZE(Qt::Key_Multi_key), 0x0fb3, 0x0f80, 0, 0, 0}, 0x0f78 }, // U0F78 # TIBETAN VOWEL SIGN VOCALIC L ++ { {UNITIZE(Qt::Key_Multi_key), 0x0fb5, 0x0f40, 0, 0, 0}, 0x0f69 }, // U0F69 # TIBETAN LETTER KSSA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0fb7, 0x0f42, 0, 0, 0}, 0x0f43 }, // U0F43 # TIBETAN LETTER GHA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0fb7, 0x0f4c, 0, 0, 0}, 0x0f4d }, // U0F4D # TIBETAN LETTER DDHA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0fb7, 0x0f51, 0, 0, 0}, 0x0f52 }, // U0F52 # TIBETAN LETTER DHA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0fb7, 0x0f56, 0, 0, 0}, 0x0f57 }, // U0F57 # TIBETAN LETTER BHA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0fb7, 0x0f5b, 0, 0, 0}, 0x0f5c }, // U0F5C # TIBETAN LETTER DZHA ++ { {UNITIZE(Qt::Key_Multi_key), 0x102e, 0x1025, 0, 0, 0}, 0x1026 }, // U1026 # MYANMAR LETTER UU ++ { {UNITIZE(Qt::Key_Multi_key), 0x1100, 0x1100, 0, 0, 0}, 0x1101 }, // U1101 # àà àà = áà ++ { {UNITIZE(Qt::Key_Multi_key), 0x1102, 0x1100, 0, 0, 0}, 0x1113 }, // U1113 # âà àà = óà ++ { {UNITIZE(Qt::Key_Multi_key), 0x1102, 0x1102, 0, 0, 0}, 0x1114 }, // U1114 # âà âà = ôà ++ { {UNITIZE(Qt::Key_Multi_key), 0x1102, 0x1103, 0, 0, 0}, 0x1115 }, // U1115 # âà ãà = õà ++ { {UNITIZE(Qt::Key_Multi_key), 0x1102, 0x1107, 0, 0, 0}, 0x1116 }, // U1116 # âà çà = öà ++ { {UNITIZE(Qt::Key_Multi_key), 0x1103, 0x1100, 0, 0, 0}, 0x1117 }, // U1117 # ãà àà = ÷à ++ { {UNITIZE(Qt::Key_Multi_key), 0x1103, 0x1103, 0, 0, 0}, 0x1104 }, // U1104 # ãà ãà = äà ++ { {UNITIZE(Qt::Key_Multi_key), 0x1105, 0x1102, 0, 0, 0}, 0x1118 }, // U1118 # åà âà = øà ++ { {UNITIZE(Qt::Key_Multi_key), 0x1105, 0x1105, 0, 0, 0}, 0x1119 }, // U1119 # åà åà = ùà ++ { {UNITIZE(Qt::Key_Multi_key), 0x1105, 0x110b, 0, 0, 0}, 0x111b }, // U111b # åà ëà = ûà ++ { {UNITIZE(Qt::Key_Multi_key), 0x1105, 0x1112, 0, 0, 0}, 0x111a }, // U111a # åà òà = úà ++ { {UNITIZE(Qt::Key_Multi_key), 0x1106, 0x1107, 0, 0, 0}, 0x111c }, // U111c # æà çà = üà ++ { {UNITIZE(Qt::Key_Multi_key), 0x1106, 0x110b, 0, 0, 0}, 0x111d }, // U111d # æà ëà = ýà ++ { {UNITIZE(Qt::Key_Multi_key), 0x1107, 0x1100, 0, 0, 0}, 0x111e }, // U111e # çà àà = þà ++ { {UNITIZE(Qt::Key_Multi_key), 0x1107, 0x1102, 0, 0, 0}, 0x111f }, // U111f # çà âà = ÿà ++ { {UNITIZE(Qt::Key_Multi_key), 0x1107, 0x1103, 0, 0, 0}, 0x1120 }, // U1120 # çà ãà =  à ++ { {UNITIZE(Qt::Key_Multi_key), 0x1107, 0x1107, 0, 0, 0}, 0x1108 }, // U1108 # çà çà = èà ++ { {UNITIZE(Qt::Key_Multi_key), 0x1107, 0x1107, 0x110b, 0, 0}, 0x112c }, // U112c # çà çà ëà = ¬à ++ { {UNITIZE(Qt::Key_Multi_key), 0x1107, 0x1109, 0, 0, 0}, 0x1121 }, // U1121 # çà éà = ¡à ++ { {UNITIZE(Qt::Key_Multi_key), 0x1107, 0x1109, 0x1100, 0, 0}, 0x1122 }, // U1122 # çà éà àà = ¢à ++ { {UNITIZE(Qt::Key_Multi_key), 0x1107, 0x1109, 0x1103, 0, 0}, 0x1123 }, // U1123 # çà éà ãà = £à ++ { {UNITIZE(Qt::Key_Multi_key), 0x1107, 0x1109, 0x1107, 0, 0}, 0x1124 }, // U1124 # çà éà çà = ¤à ++ { {UNITIZE(Qt::Key_Multi_key), 0x1107, 0x1109, 0x1109, 0, 0}, 0x1125 }, // U1125 # çà éà éà = ¥à ++ { {UNITIZE(Qt::Key_Multi_key), 0x1107, 0x1109, 0x110c, 0, 0}, 0x1126 }, // U1126 # çà éà ìà = ¦à ++ { {UNITIZE(Qt::Key_Multi_key), 0x1107, 0x110a, 0, 0, 0}, 0x1125 }, // U1125 # çà êà = ¥à ++ { {UNITIZE(Qt::Key_Multi_key), 0x1107, 0x110b, 0, 0, 0}, 0x112b }, // U112b # çà ëà = «à ++ { {UNITIZE(Qt::Key_Multi_key), 0x1107, 0x110c, 0, 0, 0}, 0x1127 }, // U1127 # çà ìà = §à ++ { {UNITIZE(Qt::Key_Multi_key), 0x1107, 0x110e, 0, 0, 0}, 0x1128 }, // U1128 # çà îà = ¨à ++ { {UNITIZE(Qt::Key_Multi_key), 0x1107, 0x1110, 0, 0, 0}, 0x1129 }, // U1129 # çà ðà = ©à ++ { {UNITIZE(Qt::Key_Multi_key), 0x1107, 0x1111, 0, 0, 0}, 0x112a }, // U112a # çà ñà = ªà ++ { {UNITIZE(Qt::Key_Multi_key), 0x1107, 0x112b, 0, 0, 0}, 0x112c }, // U112c # çà «à = ¬à ++ { {UNITIZE(Qt::Key_Multi_key), 0x1107, 0x112d, 0, 0, 0}, 0x1122 }, // U1122 # çà ­à = ¢à ++ { {UNITIZE(Qt::Key_Multi_key), 0x1107, 0x112f, 0, 0, 0}, 0x1123 }, // U1123 # çà ¯à = £à ++ { {UNITIZE(Qt::Key_Multi_key), 0x1107, 0x1132, 0, 0, 0}, 0x1124 }, // U1124 # çà ²à = ¤à ++ { {UNITIZE(Qt::Key_Multi_key), 0x1107, 0x1136, 0, 0, 0}, 0x1126 }, // U1126 # çà ¶à = ¦à ++ { {UNITIZE(Qt::Key_Multi_key), 0x1108, 0x110b, 0, 0, 0}, 0x112c }, // U112c # èà ëà = ¬à ++ { {UNITIZE(Qt::Key_Multi_key), 0x1109, 0x1100, 0, 0, 0}, 0x112d }, // U112d # éà àà = ­à ++ { {UNITIZE(Qt::Key_Multi_key), 0x1109, 0x1102, 0, 0, 0}, 0x112e }, // U112e # éà âà = ®à ++ { {UNITIZE(Qt::Key_Multi_key), 0x1109, 0x1103, 0, 0, 0}, 0x112f }, // U112f # éà ãà = ¯à ++ { {UNITIZE(Qt::Key_Multi_key), 0x1109, 0x1105, 0, 0, 0}, 0x1130 }, // U1130 # éà åà = °à ++ { {UNITIZE(Qt::Key_Multi_key), 0x1109, 0x1106, 0, 0, 0}, 0x1131 }, // U1131 # éà æà = ±à ++ { {UNITIZE(Qt::Key_Multi_key), 0x1109, 0x1107, 0, 0, 0}, 0x1132 }, // U1132 # éà çà = ²à ++ { {UNITIZE(Qt::Key_Multi_key), 0x1109, 0x1107, 0x1100, 0, 0}, 0x1133 }, // U1133 # éà çà àà = ³à ++ { {UNITIZE(Qt::Key_Multi_key), 0x1109, 0x1109, 0, 0, 0}, 0x110a }, // U110a # éà éà = êà ++ { {UNITIZE(Qt::Key_Multi_key), 0x1109, 0x1109, 0x1109, 0, 0}, 0x1134 }, // U1134 # éà éà éà = ´à ++ { {UNITIZE(Qt::Key_Multi_key), 0x1109, 0x110a, 0, 0, 0}, 0x1134 }, // U1134 # éà êà = ´à ++ { {UNITIZE(Qt::Key_Multi_key), 0x1109, 0x110b, 0, 0, 0}, 0x1135 }, // U1135 # éà ëà = µà ++ { {UNITIZE(Qt::Key_Multi_key), 0x1109, 0x110c, 0, 0, 0}, 0x1136 }, // U1136 # éà ìà = ¶à ++ { {UNITIZE(Qt::Key_Multi_key), 0x1109, 0x110e, 0, 0, 0}, 0x1137 }, // U1137 # éà îà = ·à ++ { {UNITIZE(Qt::Key_Multi_key), 0x1109, 0x110f, 0, 0, 0}, 0x1138 }, // U1138 # éà ïà = ¸à ++ { {UNITIZE(Qt::Key_Multi_key), 0x1109, 0x1110, 0, 0, 0}, 0x1139 }, // U1139 # éà ðà = ¹à ++ { {UNITIZE(Qt::Key_Multi_key), 0x1109, 0x1111, 0, 0, 0}, 0x113a }, // U113a # éà ñà = ºà ++ { {UNITIZE(Qt::Key_Multi_key), 0x1109, 0x1112, 0, 0, 0}, 0x113b }, // U113b # éà òà = »à ++ { {UNITIZE(Qt::Key_Multi_key), 0x1109, 0x111e, 0, 0, 0}, 0x1133 }, // U1133 # éà þà = ³à ++ { {UNITIZE(Qt::Key_Multi_key), 0x110a, 0x1109, 0, 0, 0}, 0x1134 }, // U1134 # êà éà = ´à ++ { {UNITIZE(Qt::Key_Multi_key), 0x110b, 0x1100, 0, 0, 0}, 0x1141 }, // U1141 # ëà àà = Áà ++ { {UNITIZE(Qt::Key_Multi_key), 0x110b, 0x1103, 0, 0, 0}, 0x1142 }, // U1142 # ëà ãà = Âà ++ { {UNITIZE(Qt::Key_Multi_key), 0x110b, 0x1106, 0, 0, 0}, 0x1143 }, // U1143 # ëà æà = Ãà ++ { {UNITIZE(Qt::Key_Multi_key), 0x110b, 0x1107, 0, 0, 0}, 0x1144 }, // U1144 # ëà çà = Äà ++ { {UNITIZE(Qt::Key_Multi_key), 0x110b, 0x1109, 0, 0, 0}, 0x1145 }, // U1145 # ëà éà = Åà ++ { {UNITIZE(Qt::Key_Multi_key), 0x110b, 0x110b, 0, 0, 0}, 0x1147 }, // U1147 # ëà ëà = Çà ++ { {UNITIZE(Qt::Key_Multi_key), 0x110b, 0x110c, 0, 0, 0}, 0x1148 }, // U1148 # ëà ìà = Èà ++ { {UNITIZE(Qt::Key_Multi_key), 0x110b, 0x110e, 0, 0, 0}, 0x1149 }, // U1149 # ëà îà = Éà ++ { {UNITIZE(Qt::Key_Multi_key), 0x110b, 0x1110, 0, 0, 0}, 0x114a }, // U114a # ëà ðà = Êà ++ { {UNITIZE(Qt::Key_Multi_key), 0x110b, 0x1111, 0, 0, 0}, 0x114b }, // U114b # ëà ñà = Ëà ++ { {UNITIZE(Qt::Key_Multi_key), 0x110b, 0x1140, 0, 0, 0}, 0x1146 }, // U1146 # ëà Àà = Æà ++ { {UNITIZE(Qt::Key_Multi_key), 0x110c, 0x110b, 0, 0, 0}, 0x114d }, // U114d # ìà ëà = Íà ++ { {UNITIZE(Qt::Key_Multi_key), 0x110c, 0x110c, 0, 0, 0}, 0x110d }, // U110d # ìà ìà = íà ++ { {UNITIZE(Qt::Key_Multi_key), 0x110e, 0x110f, 0, 0, 0}, 0x1152 }, // U1152 # îà ïà = Òà ++ { {UNITIZE(Qt::Key_Multi_key), 0x110e, 0x1112, 0, 0, 0}, 0x1153 }, // U1153 # îà òà = Óà ++ { {UNITIZE(Qt::Key_Multi_key), 0x1111, 0x1107, 0, 0, 0}, 0x1156 }, // U1156 # ñà çà = Öà ++ { {UNITIZE(Qt::Key_Multi_key), 0x1111, 0x110b, 0, 0, 0}, 0x1157 }, // U1157 # ñà ëà = ×à ++ { {UNITIZE(Qt::Key_Multi_key), 0x1112, 0x1112, 0, 0, 0}, 0x1158 }, // U1158 # òà òà = Øà ++ { {UNITIZE(Qt::Key_Multi_key), 0x1121, 0x1100, 0, 0, 0}, 0x1122 }, // U1122 # ¡à àà = ¢à ++ { {UNITIZE(Qt::Key_Multi_key), 0x1121, 0x1103, 0, 0, 0}, 0x1123 }, // U1123 # ¡à ãà = £à ++ { {UNITIZE(Qt::Key_Multi_key), 0x1121, 0x1107, 0, 0, 0}, 0x1124 }, // U1124 # ¡à çà = ¤à ++ { {UNITIZE(Qt::Key_Multi_key), 0x1121, 0x1109, 0, 0, 0}, 0x1125 }, // U1125 # ¡à éà = ¥à ++ { {UNITIZE(Qt::Key_Multi_key), 0x1121, 0x110c, 0, 0, 0}, 0x1126 }, // U1126 # ¡à ìà = ¦à ++ { {UNITIZE(Qt::Key_Multi_key), 0x1132, 0x1100, 0, 0, 0}, 0x1133 }, // U1133 # ²à àà = ³à ++ { {UNITIZE(Qt::Key_Multi_key), 0x113c, 0x113c, 0, 0, 0}, 0x113d }, // U113d # ¼à ¼à = ½à ++ { {UNITIZE(Qt::Key_Multi_key), 0x113e, 0x113e, 0, 0, 0}, 0x113f }, // U113f # ¾à ¾à = ¿à ++ { {UNITIZE(Qt::Key_Multi_key), 0x114e, 0x114e, 0, 0, 0}, 0x114f }, // U114f # Îà Îà = Ïà ++ { {UNITIZE(Qt::Key_Multi_key), 0x1150, 0x1150, 0, 0, 0}, 0x1151 }, // U1151 # Ðà Ðà = Ñà ++ { {UNITIZE(Qt::Key_Multi_key), 0x1161, 0x1169, 0, 0, 0}, 0x1176 }, // U1176 # ßá ßé = ßö ++ { {UNITIZE(Qt::Key_Multi_key), 0x1161, 0x116e, 0, 0, 0}, 0x1177 }, // U1177 # ßá ßî = ß÷ ++ { {UNITIZE(Qt::Key_Multi_key), 0x1161, 0x1175, 0, 0, 0}, 0x1162 }, // U1162 # ßá ßõ = ßâ ++ { {UNITIZE(Qt::Key_Multi_key), 0x1163, 0x1169, 0, 0, 0}, 0x1178 }, // U1178 # ßã ßé = ßø ++ { {UNITIZE(Qt::Key_Multi_key), 0x1163, 0x116d, 0, 0, 0}, 0x1179 }, // U1179 # ßã ßí = ßù ++ { {UNITIZE(Qt::Key_Multi_key), 0x1163, 0x1175, 0, 0, 0}, 0x1164 }, // U1164 # ßã ßõ = ßä ++ { {UNITIZE(Qt::Key_Multi_key), 0x1165, 0x1169, 0, 0, 0}, 0x117a }, // U117a # ßå ßé = ßú ++ { {UNITIZE(Qt::Key_Multi_key), 0x1165, 0x116e, 0, 0, 0}, 0x117b }, // U117b # ßå ßî = ßû ++ { {UNITIZE(Qt::Key_Multi_key), 0x1165, 0x1173, 0, 0, 0}, 0x117c }, // U117c # ßå ßó = ßü ++ { {UNITIZE(Qt::Key_Multi_key), 0x1165, 0x1175, 0, 0, 0}, 0x1166 }, // U1166 # ßå ßõ = ßæ ++ { {UNITIZE(Qt::Key_Multi_key), 0x1167, 0x1169, 0, 0, 0}, 0x117d }, // U117d # ßç ßé = ßý ++ { {UNITIZE(Qt::Key_Multi_key), 0x1167, 0x116e, 0, 0, 0}, 0x117e }, // U117e # ßç ßî = ßþ ++ { {UNITIZE(Qt::Key_Multi_key), 0x1167, 0x1175, 0, 0, 0}, 0x1168 }, // U1168 # ßç ßõ = ßè ++ { {UNITIZE(Qt::Key_Multi_key), 0x1169, 0x1161, 0, 0, 0}, 0x116a }, // U116a # ßé ßá = ßê ++ { {UNITIZE(Qt::Key_Multi_key), 0x1169, 0x1161, 0x1175, 0, 0}, 0x116b }, // U116b # ßé ßá ßõ = ßë ++ { {UNITIZE(Qt::Key_Multi_key), 0x1169, 0x1162, 0, 0, 0}, 0x116b }, // U116b # ßé ßâ = ßë ++ { {UNITIZE(Qt::Key_Multi_key), 0x1169, 0x1165, 0, 0, 0}, 0x117f }, // U117f # ßé ßå = ßÿ ++ { {UNITIZE(Qt::Key_Multi_key), 0x1169, 0x1166, 0, 0, 0}, 0x1180 }, // U1180 # ßé ßæ = ß  ++ { {UNITIZE(Qt::Key_Multi_key), 0x1169, 0x1168, 0, 0, 0}, 0x1181 }, // U1181 # ßé ßè = ß¡ ++ { {UNITIZE(Qt::Key_Multi_key), 0x1169, 0x1169, 0, 0, 0}, 0x1182 }, // U1182 # ßé ßé = ߢ ++ { {UNITIZE(Qt::Key_Multi_key), 0x1169, 0x116e, 0, 0, 0}, 0x1183 }, // U1183 # ßé ßî = ߣ ++ { {UNITIZE(Qt::Key_Multi_key), 0x1169, 0x1175, 0, 0, 0}, 0x116c }, // U116c # ßé ßõ = ßì ++ { {UNITIZE(Qt::Key_Multi_key), 0x116a, 0x1175, 0, 0, 0}, 0x116b }, // U116b # ßê ßõ = ßë ++ { {UNITIZE(Qt::Key_Multi_key), 0x116d, 0x1163, 0, 0, 0}, 0x1184 }, // U1184 # ßí ßã = ߤ ++ { {UNITIZE(Qt::Key_Multi_key), 0x116d, 0x1164, 0, 0, 0}, 0x1185 }, // U1185 # ßí ßä = ߥ ++ { {UNITIZE(Qt::Key_Multi_key), 0x116d, 0x1167, 0, 0, 0}, 0x1186 }, // U1186 # ßí ßç = ߦ ++ { {UNITIZE(Qt::Key_Multi_key), 0x116d, 0x1169, 0, 0, 0}, 0x1187 }, // U1187 # ßí ßé = ߧ ++ { {UNITIZE(Qt::Key_Multi_key), 0x116d, 0x1175, 0, 0, 0}, 0x1188 }, // U1188 # ßí ßõ = ߨ ++ { {UNITIZE(Qt::Key_Multi_key), 0x116e, 0x1161, 0, 0, 0}, 0x1189 }, // U1189 # ßî ßá = ß© ++ { {UNITIZE(Qt::Key_Multi_key), 0x116e, 0x1162, 0, 0, 0}, 0x118a }, // U118a # ßî ßâ = ߪ ++ { {UNITIZE(Qt::Key_Multi_key), 0x116e, 0x1165, 0, 0, 0}, 0x116f }, // U116f # ßî ßå = ßï ++ { {UNITIZE(Qt::Key_Multi_key), 0x116e, 0x1165, 0x1173, 0, 0}, 0x118b }, // U118b # ßî ßå ßó = ß« ++ { {UNITIZE(Qt::Key_Multi_key), 0x116e, 0x1165, 0x1175, 0, 0}, 0x1170 }, // U1170 # ßî ßå ßõ = ßð ++ { {UNITIZE(Qt::Key_Multi_key), 0x116e, 0x1166, 0, 0, 0}, 0x1170 }, // U1170 # ßî ßæ = ßð ++ { {UNITIZE(Qt::Key_Multi_key), 0x116e, 0x1168, 0, 0, 0}, 0x118c }, // U118c # ßî ßè = ߬ ++ { {UNITIZE(Qt::Key_Multi_key), 0x116e, 0x116e, 0, 0, 0}, 0x118d }, // U118d # ßî ßî = ß­ ++ { {UNITIZE(Qt::Key_Multi_key), 0x116e, 0x1175, 0, 0, 0}, 0x1171 }, // U1171 # ßî ßõ = ßñ ++ { {UNITIZE(Qt::Key_Multi_key), 0x116e, 0x117c, 0, 0, 0}, 0x118b }, // U118b # ßî ßü = ß« ++ { {UNITIZE(Qt::Key_Multi_key), 0x116f, 0x1173, 0, 0, 0}, 0x118b }, // U118b # ßï ßó = ß« ++ { {UNITIZE(Qt::Key_Multi_key), 0x116f, 0x1175, 0, 0, 0}, 0x1170 }, // U1170 # ßï ßõ = ßð ++ { {UNITIZE(Qt::Key_Multi_key), 0x1172, 0x1161, 0, 0, 0}, 0x118e }, // U118e # ßò ßá = ß® ++ { {UNITIZE(Qt::Key_Multi_key), 0x1172, 0x1165, 0, 0, 0}, 0x118f }, // U118f # ßò ßå = ߯ ++ { {UNITIZE(Qt::Key_Multi_key), 0x1172, 0x1166, 0, 0, 0}, 0x1190 }, // U1190 # ßò ßæ = ß° ++ { {UNITIZE(Qt::Key_Multi_key), 0x1172, 0x1167, 0, 0, 0}, 0x1191 }, // U1191 # ßò ßç = ß± ++ { {UNITIZE(Qt::Key_Multi_key), 0x1172, 0x1168, 0, 0, 0}, 0x1192 }, // U1192 # ßò ßè = ß² ++ { {UNITIZE(Qt::Key_Multi_key), 0x1172, 0x116e, 0, 0, 0}, 0x1193 }, // U1193 # ßò ßî = ß³ ++ { {UNITIZE(Qt::Key_Multi_key), 0x1172, 0x1175, 0, 0, 0}, 0x1194 }, // U1194 # ßò ßõ = ß´ ++ { {UNITIZE(Qt::Key_Multi_key), 0x1173, 0x116e, 0, 0, 0}, 0x1195 }, // U1195 # ßó ßî = ßµ ++ { {UNITIZE(Qt::Key_Multi_key), 0x1173, 0x1173, 0, 0, 0}, 0x1196 }, // U1196 # ßó ßó = ߶ ++ { {UNITIZE(Qt::Key_Multi_key), 0x1173, 0x1175, 0, 0, 0}, 0x1174 }, // U1174 # ßó ßõ = ßô ++ { {UNITIZE(Qt::Key_Multi_key), 0x1174, 0x116e, 0, 0, 0}, 0x1197 }, // U1197 # ßô ßî = ß· ++ { {UNITIZE(Qt::Key_Multi_key), 0x1175, 0x1161, 0, 0, 0}, 0x1198 }, // U1198 # ßõ ßá = ߸ ++ { {UNITIZE(Qt::Key_Multi_key), 0x1175, 0x1163, 0, 0, 0}, 0x1199 }, // U1199 # ßõ ßã = ß¹ ++ { {UNITIZE(Qt::Key_Multi_key), 0x1175, 0x1169, 0, 0, 0}, 0x119a }, // U119a # ßõ ßé = ߺ ++ { {UNITIZE(Qt::Key_Multi_key), 0x1175, 0x116e, 0, 0, 0}, 0x119b }, // U119b # ßõ ßî = ß» ++ { {UNITIZE(Qt::Key_Multi_key), 0x1175, 0x1173, 0, 0, 0}, 0x119c }, // U119c # ßõ ßó = ß¼ ++ { {UNITIZE(Qt::Key_Multi_key), 0x1175, 0x119e, 0, 0, 0}, 0x119d }, // U119d # ßõ ß¾ = ß½ ++ { {UNITIZE(Qt::Key_Multi_key), 0x119e, 0x1165, 0, 0, 0}, 0x119f }, // U119f # ß¾ ßå = ß¿ ++ { {UNITIZE(Qt::Key_Multi_key), 0x119e, 0x116e, 0, 0, 0}, 0x11a0 }, // U11a0 # ß¾ ßî = ßÀ ++ { {UNITIZE(Qt::Key_Multi_key), 0x119e, 0x1175, 0, 0, 0}, 0x11a1 }, // U11a1 # ß¾ ßõ = ßÁ ++ { {UNITIZE(Qt::Key_Multi_key), 0x119e, 0x119e, 0, 0, 0}, 0x11a2 }, // U11a2 # ß¾ ß¾ = ß ++ { {UNITIZE(Qt::Key_Multi_key), 0x11a8, 0x11a8, 0, 0, 0}, 0x11a9 }, // U11a9 # ßàÈ ßàÈ = ßàÉ ++ { {UNITIZE(Qt::Key_Multi_key), 0x11a8, 0x11af, 0, 0, 0}, 0x11c3 }, // U11c3 # ßàÈ ßàÏ = ßàã ++ { {UNITIZE(Qt::Key_Multi_key), 0x11a8, 0x11ba, 0, 0, 0}, 0x11aa }, // U11aa # ßàÈ ßàÚ = ßàÊ ++ { {UNITIZE(Qt::Key_Multi_key), 0x11a8, 0x11ba, 0x11a8, 0, 0}, 0x11c4 }, // U11c4 # ßàÈ ßàÚ ßàÈ = ßàä ++ { {UNITIZE(Qt::Key_Multi_key), 0x11a8, 0x11e7, 0, 0, 0}, 0x11c4 }, // U11c4 # ßàÈ ßৠ= ßàä ++ { {UNITIZE(Qt::Key_Multi_key), 0x11aa, 0x11a8, 0, 0, 0}, 0x11c4 }, // U11c4 # ßàÊ ßàÈ = ßàä ++ { {UNITIZE(Qt::Key_Multi_key), 0x11ab, 0x11a8, 0, 0, 0}, 0x11c5 }, // U11c5 # ßàË ßàÈ = ßàå ++ { {UNITIZE(Qt::Key_Multi_key), 0x11ab, 0x11ae, 0, 0, 0}, 0x11c6 }, // U11c6 # ßàË ßàÎ = ßàæ ++ { {UNITIZE(Qt::Key_Multi_key), 0x11ab, 0x11ba, 0, 0, 0}, 0x11c7 }, // U11c7 # ßàË ßàÚ = ßàç ++ { {UNITIZE(Qt::Key_Multi_key), 0x11ab, 0x11bd, 0, 0, 0}, 0x11ac }, // U11ac # ßàË ßàÝ = ßàÌ ++ { {UNITIZE(Qt::Key_Multi_key), 0x11ab, 0x11c0, 0, 0, 0}, 0x11c9 }, // U11c9 # ßàË ßàà = ßàé ++ { {UNITIZE(Qt::Key_Multi_key), 0x11ab, 0x11c2, 0, 0, 0}, 0x11ad }, // U11ad # ßàË ßàâ = ßàÍ ++ { {UNITIZE(Qt::Key_Multi_key), 0x11ab, 0x11eb, 0, 0, 0}, 0x11c8 }, // U11c8 # ßàË ßà« = ßàè ++ { {UNITIZE(Qt::Key_Multi_key), 0x11ae, 0x11a8, 0, 0, 0}, 0x11ca }, // U11ca # ßàÎ ßàÈ = ßàê ++ { {UNITIZE(Qt::Key_Multi_key), 0x11ae, 0x11af, 0, 0, 0}, 0x11cb }, // U11cb # ßàÎ ßàÏ = ßàë ++ { {UNITIZE(Qt::Key_Multi_key), 0x11af, 0x11a8, 0, 0, 0}, 0x11b0 }, // U11b0 # ßàÏ ßàÈ = ßàÐ ++ { {UNITIZE(Qt::Key_Multi_key), 0x11af, 0x11a8, 0x11ba, 0, 0}, 0x11cc }, // U11cc # ßàÏ ßàÈ ßàÚ = ßàì ++ { {UNITIZE(Qt::Key_Multi_key), 0x11af, 0x11aa, 0, 0, 0}, 0x11cc }, // U11cc # ßàÏ ßàÊ = ßàì ++ { {UNITIZE(Qt::Key_Multi_key), 0x11af, 0x11ab, 0, 0, 0}, 0x11cd }, // U11cd # ßàÏ ßàË = ßàí ++ { {UNITIZE(Qt::Key_Multi_key), 0x11af, 0x11ae, 0, 0, 0}, 0x11ce }, // U11ce # ßàÏ ßàÎ = ßàî ++ { {UNITIZE(Qt::Key_Multi_key), 0x11af, 0x11ae, 0x11c2, 0, 0}, 0x11cf }, // U11cf # ßàÏ ßàÎ ßàâ = ßàï ++ { {UNITIZE(Qt::Key_Multi_key), 0x11af, 0x11af, 0, 0, 0}, 0x11d0 }, // U11d0 # ßàÏ ßàÏ = ßàð ++ { {UNITIZE(Qt::Key_Multi_key), 0x11af, 0x11b7, 0, 0, 0}, 0x11b1 }, // U11b1 # ßàÏ ßà× = ßàÑ ++ { {UNITIZE(Qt::Key_Multi_key), 0x11af, 0x11b7, 0x11a8, 0, 0}, 0x11d1 }, // U11d1 # ßàÏ ßà× ßàÈ = ßàñ ++ { {UNITIZE(Qt::Key_Multi_key), 0x11af, 0x11b7, 0x11ba, 0, 0}, 0x11d2 }, // U11d2 # ßàÏ ßà× ßàÚ = ßàò ++ { {UNITIZE(Qt::Key_Multi_key), 0x11af, 0x11b8, 0, 0, 0}, 0x11b2 }, // U11b2 # ßàÏ ßàØ = ßàÒ ++ { {UNITIZE(Qt::Key_Multi_key), 0x11af, 0x11b8, 0x11ba, 0, 0}, 0x11d3 }, // U11d3 # ßàÏ ßàØ ßàÚ = ßàó ++ { {UNITIZE(Qt::Key_Multi_key), 0x11af, 0x11b8, 0x11bc, 0, 0}, 0x11d5 }, // U11d5 # ßàÏ ßàØ ßàÜ = ßàõ ++ { {UNITIZE(Qt::Key_Multi_key), 0x11af, 0x11b8, 0x11c2, 0, 0}, 0x11d4 }, // U11d4 # ßàÏ ßàØ ßàâ = ßàô ++ { {UNITIZE(Qt::Key_Multi_key), 0x11af, 0x11b9, 0, 0, 0}, 0x11d3 }, // U11d3 # ßàÏ ßàÙ = ßàó ++ { {UNITIZE(Qt::Key_Multi_key), 0x11af, 0x11ba, 0, 0, 0}, 0x11b3 }, // U11b3 # ßàÏ ßàÚ = ßàÓ ++ { {UNITIZE(Qt::Key_Multi_key), 0x11af, 0x11ba, 0x11ba, 0, 0}, 0x11d6 }, // U11d6 # ßàÏ ßàÚ ßàÚ = ßàö ++ { {UNITIZE(Qt::Key_Multi_key), 0x11af, 0x11bb, 0, 0, 0}, 0x11d6 }, // U11d6 # ßàÏ ßàÛ = ßàö ++ { {UNITIZE(Qt::Key_Multi_key), 0x11af, 0x11bf, 0, 0, 0}, 0x11d8 }, // U11d8 # ßàÏ ßàß = ßàø ++ { {UNITIZE(Qt::Key_Multi_key), 0x11af, 0x11c0, 0, 0, 0}, 0x11b4 }, // U11b4 # ßàÏ ßàà = ßàÔ ++ { {UNITIZE(Qt::Key_Multi_key), 0x11af, 0x11c1, 0, 0, 0}, 0x11b5 }, // U11b5 # ßàÏ ßàá = ßàÕ ++ { {UNITIZE(Qt::Key_Multi_key), 0x11af, 0x11c2, 0, 0, 0}, 0x11b6 }, // U11b6 # ßàÏ ßàâ = ßàÖ ++ { {UNITIZE(Qt::Key_Multi_key), 0x11af, 0x11da, 0, 0, 0}, 0x11d1 }, // U11d1 # ßàÏ ßàú = ßàñ ++ { {UNITIZE(Qt::Key_Multi_key), 0x11af, 0x11dd, 0, 0, 0}, 0x11d2 }, // U11d2 # ßàÏ ßàý = ßàò ++ { {UNITIZE(Qt::Key_Multi_key), 0x11af, 0x11e5, 0, 0, 0}, 0x11d4 }, // U11d4 # ßàÏ ßॠ= ßàô ++ { {UNITIZE(Qt::Key_Multi_key), 0x11af, 0x11e6, 0, 0, 0}, 0x11d5 }, // U11d5 # ßàÏ ßঠ= ßàõ ++ { {UNITIZE(Qt::Key_Multi_key), 0x11af, 0x11eb, 0, 0, 0}, 0x11d7 }, // U11d7 # ßàÏ ßà« = ßà÷ ++ { {UNITIZE(Qt::Key_Multi_key), 0x11af, 0x11f9, 0, 0, 0}, 0x11d9 }, // U11d9 # ßàÏ ß๠= ßàù ++ { {UNITIZE(Qt::Key_Multi_key), 0x11b0, 0x11ba, 0, 0, 0}, 0x11cc }, // U11cc # ßàÐ ßàÚ = ßàì ++ { {UNITIZE(Qt::Key_Multi_key), 0x11b1, 0x11a8, 0, 0, 0}, 0x11d1 }, // U11d1 # ßàÑ ßàÈ = ßàñ ++ { {UNITIZE(Qt::Key_Multi_key), 0x11b1, 0x11ba, 0, 0, 0}, 0x11d2 }, // U11d2 # ßàÑ ßàÚ = ßàò ++ { {UNITIZE(Qt::Key_Multi_key), 0x11b2, 0x11ba, 0, 0, 0}, 0x11d3 }, // U11d3 # ßàÒ ßàÚ = ßàó ++ { {UNITIZE(Qt::Key_Multi_key), 0x11b2, 0x11bc, 0, 0, 0}, 0x11d5 }, // U11d5 # ßàÒ ßàÜ = ßàõ ++ { {UNITIZE(Qt::Key_Multi_key), 0x11b2, 0x11c2, 0, 0, 0}, 0x11d4 }, // U11d4 # ßàÒ ßàâ = ßàô ++ { {UNITIZE(Qt::Key_Multi_key), 0x11b3, 0x11ba, 0, 0, 0}, 0x11d6 }, // U11d6 # ßàÓ ßàÚ = ßàö ++ { {UNITIZE(Qt::Key_Multi_key), 0x11b7, 0x11a8, 0, 0, 0}, 0x11da }, // U11da # ßà× ßàÈ = ßàú ++ { {UNITIZE(Qt::Key_Multi_key), 0x11b7, 0x11af, 0, 0, 0}, 0x11db }, // U11db # ßà× ßàÏ = ßàû ++ { {UNITIZE(Qt::Key_Multi_key), 0x11b7, 0x11b8, 0, 0, 0}, 0x11dc }, // U11dc # ßà× ßàØ = ßàü ++ { {UNITIZE(Qt::Key_Multi_key), 0x11b7, 0x11ba, 0, 0, 0}, 0x11dd }, // U11dd # ßà× ßàÚ = ßàý ++ { {UNITIZE(Qt::Key_Multi_key), 0x11b7, 0x11ba, 0x11ba, 0, 0}, 0x11de }, // U11de # ßà× ßàÚ ßàÚ = ßàþ ++ { {UNITIZE(Qt::Key_Multi_key), 0x11b7, 0x11bb, 0, 0, 0}, 0x11de }, // U11de # ßà× ßàÛ = ßàþ ++ { {UNITIZE(Qt::Key_Multi_key), 0x11b7, 0x11bc, 0, 0, 0}, 0x11e2 }, // U11e2 # ßà× ßàÜ = ßࢠ++ { {UNITIZE(Qt::Key_Multi_key), 0x11b7, 0x11be, 0, 0, 0}, 0x11e0 }, // U11e0 # ßà× ßàÞ = ßà  ++ { {UNITIZE(Qt::Key_Multi_key), 0x11b7, 0x11c2, 0, 0, 0}, 0x11e1 }, // U11e1 # ßà× ßàâ = ßà¡ ++ { {UNITIZE(Qt::Key_Multi_key), 0x11b7, 0x11eb, 0, 0, 0}, 0x11df }, // U11df # ßà× ßà« = ßàÿ ++ { {UNITIZE(Qt::Key_Multi_key), 0x11b8, 0x11af, 0, 0, 0}, 0x11e3 }, // U11e3 # ßàØ ßàÏ = ß࣠++ { {UNITIZE(Qt::Key_Multi_key), 0x11b8, 0x11ba, 0, 0, 0}, 0x11b9 }, // U11b9 # ßàØ ßàÚ = ßàÙ ++ { {UNITIZE(Qt::Key_Multi_key), 0x11b8, 0x11bc, 0, 0, 0}, 0x11e6 }, // U11e6 # ßàØ ßàÜ = ßঠ++ { {UNITIZE(Qt::Key_Multi_key), 0x11b8, 0x11c1, 0, 0, 0}, 0x11e4 }, // U11e4 # ßàØ ßàá = ßठ++ { {UNITIZE(Qt::Key_Multi_key), 0x11b8, 0x11c2, 0, 0, 0}, 0x11e5 }, // U11e5 # ßàØ ßàâ = ßॠ++ { {UNITIZE(Qt::Key_Multi_key), 0x11ba, 0x11a8, 0, 0, 0}, 0x11e7 }, // U11e7 # ßàÚ ßàÈ = ßৠ++ { {UNITIZE(Qt::Key_Multi_key), 0x11ba, 0x11ae, 0, 0, 0}, 0x11e8 }, // U11e8 # ßàÚ ßàÎ = ßਠ++ { {UNITIZE(Qt::Key_Multi_key), 0x11ba, 0x11af, 0, 0, 0}, 0x11e9 }, // U11e9 # ßàÚ ßàÏ = ßà© ++ { {UNITIZE(Qt::Key_Multi_key), 0x11ba, 0x11b8, 0, 0, 0}, 0x11ea }, // U11ea # ßàÚ ßàØ = ßઠ++ { {UNITIZE(Qt::Key_Multi_key), 0x11ba, 0x11ba, 0, 0, 0}, 0x11bb }, // U11bb # ßàÚ ßàÚ = ßàÛ ++ { {UNITIZE(Qt::Key_Multi_key), 0x11bc, 0x11a8, 0, 0, 0}, 0x11ec }, // U11ec # ßàÜ ßàÈ = ßଠ++ { {UNITIZE(Qt::Key_Multi_key), 0x11bc, 0x11a8, 0x11a8, 0, 0}, 0x11ed }, // U11ed # ßàÜ ßàÈ ßàÈ = ßà­ ++ { {UNITIZE(Qt::Key_Multi_key), 0x11bc, 0x11a9, 0, 0, 0}, 0x11ed }, // U11ed # ßàÜ ßàÉ = ßà­ ++ { {UNITIZE(Qt::Key_Multi_key), 0x11bc, 0x11bc, 0, 0, 0}, 0x11ee }, // U11ee # ßàÜ ßàÜ = ßà® ++ { {UNITIZE(Qt::Key_Multi_key), 0x11bc, 0x11bf, 0, 0, 0}, 0x11ef }, // U11ef # ßàÜ ßàß = ß௠++ { {UNITIZE(Qt::Key_Multi_key), 0x11c1, 0x11b8, 0, 0, 0}, 0x11f3 }, // U11f3 # ßàá ßàØ = ßà³ ++ { {UNITIZE(Qt::Key_Multi_key), 0x11c1, 0x11bc, 0, 0, 0}, 0x11f4 }, // U11f4 # ßàá ßàÜ = ßà´ ++ { {UNITIZE(Qt::Key_Multi_key), 0x11c2, 0x11ab, 0, 0, 0}, 0x11f5 }, // U11f5 # ßàâ ßàË = ßൠ++ { {UNITIZE(Qt::Key_Multi_key), 0x11c2, 0x11af, 0, 0, 0}, 0x11f6 }, // U11f6 # ßàâ ßàÏ = ßච++ { {UNITIZE(Qt::Key_Multi_key), 0x11c2, 0x11b7, 0, 0, 0}, 0x11f7 }, // U11f7 # ßàâ ßà× = ßà· ++ { {UNITIZE(Qt::Key_Multi_key), 0x11c2, 0x11b8, 0, 0, 0}, 0x11f8 }, // U11f8 # ßàâ ßàØ = ßภ++ { {UNITIZE(Qt::Key_Multi_key), 0x11ce, 0x11c2, 0, 0, 0}, 0x11cf }, // U11cf # ßàî ßàâ = ßàï ++ { {UNITIZE(Qt::Key_Multi_key), 0x11dd, 0x11ba, 0, 0, 0}, 0x11de }, // U11de # ßàý ßàÚ = ßàþ ++ { {UNITIZE(Qt::Key_Multi_key), 0x11ec, 0x11a8, 0, 0, 0}, 0x11ed }, // U11ed # ßଠßàÈ = ßà­ ++ { {UNITIZE(Qt::Key_Multi_key), 0x11f0, 0x11ba, 0, 0, 0}, 0x11f1 }, // U11f1 # ßà° ßàÚ = ßà± ++ { {UNITIZE(Qt::Key_Multi_key), 0x11f0, 0x11eb, 0, 0, 0}, 0x11f2 }, // U11f2 # ßà° ßà« = ßಠ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x1d157, 0x1d165, 0, 0, 0}, 0xd15e }, // U1D15E # MUSICAL SYMBOL HALF NOTE ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x1d158, 0x1d165, 0, 0, 0}, 0xd15f }, // U1D15F # MUSICAL SYMBOL QUARTER NOTE ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x1d158, 0x1d165, 0x1d16e, 0, 0}, 0xd160 }, // U1D160 # MUSICAL SYMBOL EIGHTH NOTE ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x1d158, 0x1d165, 0x1d16f, 0, 0}, 0xd161 }, // U1D161 # MUSICAL SYMBOL SIXTEENTH NOTE ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x1d158, 0x1d165, 0x1d170, 0, 0}, 0xd162 }, // U1D162 # MUSICAL SYMBOL THIRTY-SECOND NOTE ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x1d158, 0x1d165, 0x1d171, 0, 0}, 0xd163 }, // U1D163 # MUSICAL SYMBOL SIXTY-FOURTH NOTE ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x1d158, 0x1d165, 0x1d172, 0, 0}, 0xd164 }, // U1D164 # MUSICAL SYMBOL ONE HUNDRED TWENTY-EIGHTH NOTE ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x1d15f, 0x1d16e, 0, 0, 0}, 0xd160 }, // U1D160 # MUSICAL SYMBOL EIGHTH NOTE ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x1d15f, 0x1d16f, 0, 0, 0}, 0xd161 }, // U1D161 # MUSICAL SYMBOL SIXTEENTH NOTE ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x1d15f, 0x1d170, 0, 0, 0}, 0xd162 }, // U1D162 # MUSICAL SYMBOL THIRTY-SECOND NOTE ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x1d15f, 0x1d171, 0, 0, 0}, 0xd163 }, // U1D163 # MUSICAL SYMBOL SIXTY-FOURTH NOTE ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x1d15f, 0x1d172, 0, 0, 0}, 0xd164 }, // U1D164 # MUSICAL SYMBOL ONE HUNDRED TWENTY-EIGHTH NOTE ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x1d1b9, 0x1d165, 0, 0, 0}, 0xd1bb }, // U1D1BB # MUSICAL SYMBOL MINIMA ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x1d1b9, 0x1d165, 0x1d16e, 0, 0}, 0xd1bd }, // U1D1BD # MUSICAL SYMBOL SEMIMINIMA WHITE ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x1d1b9, 0x1d165, 0x1d16f, 0, 0}, 0xd1bf }, // U1D1BF # MUSICAL SYMBOL FUSA WHITE ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x1d1ba, 0x1d165, 0, 0, 0}, 0xd1bc }, // U1D1BC # MUSICAL SYMBOL MINIMA BLACK ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x1d1ba, 0x1d165, 0x1d16e, 0, 0}, 0xd1be }, // U1D1BE # MUSICAL SYMBOL SEMIMINIMA BLACK ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x1d1ba, 0x1d165, 0x1d16f, 0, 0}, 0xd1c0 }, // U1D1C0 # MUSICAL SYMBOL FUSA BLACK ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x1d1bb, 0x1d16e, 0, 0, 0}, 0xd1bd }, // U1D1BD # MUSICAL SYMBOL SEMIMINIMA WHITE ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x1d1bb, 0x1d16f, 0, 0, 0}, 0xd1bf }, // U1D1BF # MUSICAL SYMBOL FUSA WHITE ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x1d1bc, 0x1d16e, 0, 0, 0}, 0xd1be }, // U1D1BE # MUSICAL SYMBOL SEMIMINIMA BLACK ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x1d1bc, 0x1d16f, 0, 0, 0}, 0xd1c0 }, // U1D1C0 # MUSICAL SYMBOL FUSA BLACK ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x1fbf, 0x0000, 0, 0, 0}, 0x1fcd }, // U1FCD # GREEK PSILI AND VARIA ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x1fbf, 0x0000, 0, 0, 0}, 0x1fce }, // U1FCE # GREEK PSILI AND OXIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x1fbf, 0x0027, 0, 0, 0}, 0x1fce }, // U1FCE # GREEK PSILI AND OXIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x1fbf, 0x0060, 0, 0, 0}, 0x1fcd }, // U1FCD # GREEK PSILI AND VARIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x1fbf, 0x007e, 0, 0, 0}, 0x1fcf }, // U1FCF # GREEK PSILI AND PERISPOMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x1fbf, 0x00b4, 0, 0, 0}, 0x1fce }, // U1FCE # GREEK PSILI AND OXIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x1fbf, 0x0342, 0, 0, 0}, 0x1fcf }, // U1FCF # GREEK PSILI AND PERISPOMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x1fbf, UNITIZE(Qt::Key_Dead_Grave), 0, 0, 0}, 0x1fcd }, // U1FCD # GREEK PSILI AND VARIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x1fbf, UNITIZE(Qt::Key_Dead_Acute), 0, 0, 0}, 0x1fce }, // U1FCE # GREEK PSILI AND OXIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x1fbf, UNITIZE(Qt::Key_Dead_Tilde), 0, 0, 0}, 0x1fcf }, // U1FCF # GREEK PSILI AND PERISPOMENI ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x1ffe, 0x0000, 0, 0, 0}, 0x1fdd }, // U1FDD # GREEK DASIA AND VARIA ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x1ffe, 0x0000, 0, 0, 0}, 0x1fde }, // U1FDE # GREEK DASIA AND OXIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x1ffe, 0x0027, 0, 0, 0}, 0x1fde }, // U1FDE # GREEK DASIA AND OXIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x1ffe, 0x0060, 0, 0, 0}, 0x1fdd }, // U1FDD # GREEK DASIA AND VARIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x1ffe, 0x007e, 0, 0, 0}, 0x1fdf }, // U1FDF # GREEK DASIA AND PERISPOMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x1ffe, 0x00b4, 0, 0, 0}, 0x1fde }, // U1FDE # GREEK DASIA AND OXIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x1ffe, 0x0342, 0, 0, 0}, 0x1fdf }, // U1FDF # GREEK DASIA AND PERISPOMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x1ffe, UNITIZE(Qt::Key_Dead_Grave), 0, 0, 0}, 0x1fdd }, // U1FDD # GREEK DASIA AND VARIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x1ffe, UNITIZE(Qt::Key_Dead_Acute), 0, 0, 0}, 0x1fde }, // U1FDE # GREEK DASIA AND OXIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x1ffe, UNITIZE(Qt::Key_Dead_Tilde), 0, 0, 0}, 0x1fdf }, // U1FDF # GREEK DASIA AND PERISPOMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x2203, 0x0338, 0, 0, 0}, 0x2204 }, // U2204 # THERE DOES NOT EXIST ++ { {UNITIZE(Qt::Key_Multi_key), 0x2208, 0x0338, 0, 0, 0}, 0x2209 }, // U2209 # NOT AN ELEMENT OF ++ { {UNITIZE(Qt::Key_Multi_key), 0x220b, 0x0338, 0, 0, 0}, 0x220c }, // U220C # DOES NOT CONTAIN AS MEMBER ++ { {UNITIZE(Qt::Key_Multi_key), 0x2223, 0x0338, 0, 0, 0}, 0x2224 }, // U2224 # DOES NOT DIVIDE ++ { {UNITIZE(Qt::Key_Multi_key), 0x2225, 0x0338, 0, 0, 0}, 0x2226 }, // U2226 # NOT PARALLEL TO ++ { {UNITIZE(Qt::Key_Multi_key), 0x223c, 0x0338, 0, 0, 0}, 0x2241 }, // U2241 # NOT TILDE ++ { {UNITIZE(Qt::Key_Multi_key), 0x223c, 0x0338, 0, 0, 0}, 0x2247 }, // U2247 # NEITHER APPROXIMATELY NOR ACTUALLY EQUAL TO ++ { {UNITIZE(Qt::Key_Multi_key), 0x2243, 0x0338, 0, 0, 0}, 0x2244 }, // U2244 # NOT ASYMPTOTICALLY EQUAL TO ++ { {UNITIZE(Qt::Key_Multi_key), 0x2248, 0x0338, 0, 0, 0}, 0x2249 }, // U2249 # NOT ALMOST EQUAL TO ++ { {UNITIZE(Qt::Key_Multi_key), 0x224d, 0x0338, 0, 0, 0}, 0x226d }, // U226D # NOT EQUIVALENT TO ++ { {UNITIZE(Qt::Key_Multi_key), 0x2261, 0x0338, 0, 0, 0}, 0x2262 }, // U2262 # NOT IDENTICAL TO ++ { {UNITIZE(Qt::Key_Multi_key), 0x2264, 0x0338, 0, 0, 0}, 0x2270 }, // U2270 # NEITHER LESS-THAN NOR EQUAL TO ++ { {UNITIZE(Qt::Key_Multi_key), 0x2265, 0x0338, 0, 0, 0}, 0x2271 }, // U2271 # NEITHER GREATER-THAN NOR EQUAL TO ++ { {UNITIZE(Qt::Key_Multi_key), 0x2272, 0x0338, 0, 0, 0}, 0x2274 }, // U2274 # NEITHER LESS-THAN NOR EQUIVALENT TO ++ { {UNITIZE(Qt::Key_Multi_key), 0x2273, 0x0338, 0, 0, 0}, 0x2275 }, // U2275 # NEITHER GREATER-THAN NOR EQUIVALENT TO ++ { {UNITIZE(Qt::Key_Multi_key), 0x2276, 0x0338, 0, 0, 0}, 0x2278 }, // U2278 # NEITHER LESS-THAN NOR GREATER-THAN ++ { {UNITIZE(Qt::Key_Multi_key), 0x2277, 0x0338, 0, 0, 0}, 0x2279 }, // U2279 # NEITHER GREATER-THAN NOR LESS-THAN ++ { {UNITIZE(Qt::Key_Multi_key), 0x227a, 0x0338, 0, 0, 0}, 0x2280 }, // U2280 # DOES NOT PRECEDE ++ { {UNITIZE(Qt::Key_Multi_key), 0x227b, 0x0338, 0, 0, 0}, 0x2281 }, // U2281 # DOES NOT SUCCEED ++ { {UNITIZE(Qt::Key_Multi_key), 0x227c, 0x0338, 0, 0, 0}, 0x22e0 }, // U22E0 # DOES NOT PRECEDE OR EQUAL ++ { {UNITIZE(Qt::Key_Multi_key), 0x227d, 0x0338, 0, 0, 0}, 0x22e1 }, // U22E1 # DOES NOT SUCCEED OR EQUAL ++ { {UNITIZE(Qt::Key_Multi_key), 0x2282, 0x0338, 0, 0, 0}, 0x2284 }, // U2284 # NOT A SUBSET OF ++ { {UNITIZE(Qt::Key_Multi_key), 0x2282, 0x0338, 0, 0, 0}, 0x2284 }, // U2284 # NOT A SUBSET OF ++ { {UNITIZE(Qt::Key_Multi_key), 0x2283, 0x0338, 0, 0, 0}, 0x2285 }, // U2285 # NOT A SUPERSET OF ++ { {UNITIZE(Qt::Key_Multi_key), 0x2283, 0x0338, 0, 0, 0}, 0x2285 }, // U2285 # NOT A SUPERSET OF ++ { {UNITIZE(Qt::Key_Multi_key), 0x2286, 0x0338, 0, 0, 0}, 0x2288 }, // U2288 # NEITHER A SUBSET OF NOR EQUAL TO ++ { {UNITIZE(Qt::Key_Multi_key), 0x2287, 0x0338, 0, 0, 0}, 0x2289 }, // U2289 # NEITHER A SUPERSET OF NOR EQUAL TO ++ { {UNITIZE(Qt::Key_Multi_key), 0x2291, 0x0338, 0, 0, 0}, 0x22e2 }, // U22E2 # NOT SQUARE IMAGE OF OR EQUAL TO ++ { {UNITIZE(Qt::Key_Multi_key), 0x2292, 0x0338, 0, 0, 0}, 0x22e3 }, // U22E3 # NOT SQUARE ORIGINAL OF OR EQUAL TO ++ { {UNITIZE(Qt::Key_Multi_key), 0x22a3, 0x0338, 0, 0, 0}, 0x22ac }, // U22AC # DOES NOT PROVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x22a8, 0x0338, 0, 0, 0}, 0x22ad }, // U22AD # NOT TRUE ++ { {UNITIZE(Qt::Key_Multi_key), 0x22a9, 0x0338, 0, 0, 0}, 0x22ae }, // U22AE # DOES NOT FORCE ++ { {UNITIZE(Qt::Key_Multi_key), 0x22ab, 0x0338, 0, 0, 0}, 0x22af }, // U22AF # NEGATED DOUBLE VERTICAL BAR DOUBLE RIGHT TURNSTILE ++ { {UNITIZE(Qt::Key_Multi_key), 0x22b2, 0x0338, 0, 0, 0}, 0x22ea }, // U22EA # NOT NORMAL SUBGROUP OF ++ { {UNITIZE(Qt::Key_Multi_key), 0x22b3, 0x0338, 0, 0, 0}, 0x22eb }, // U22EB # DOES NOT CONTAIN AS NORMAL SUBGROUP ++ { {UNITIZE(Qt::Key_Multi_key), 0x22b4, 0x0338, 0, 0, 0}, 0x22ec }, // U22EC # NOT NORMAL SUBGROUP OF OR EQUAL TO ++ { {UNITIZE(Qt::Key_Multi_key), 0x22b5, 0x0338, 0, 0, 0}, 0x22ed }, // U22ED # DOES NOT CONTAIN AS NORMAL SUBGROUP OR EQUAL ++ { {UNITIZE(Qt::Key_Multi_key), 0x2add, 0x0338, 0, 0, 0}, 0x2adc }, // U2ADC # FORKING ++// /* broken */ { {UNITIZE(Qt::Key_Dead_Grave), 0x0000, 0, 0, 0, 0}, 0x1eeb }, // U1EEB # LATIN SMALL LETTER U WITH HORN AND GRAVE ++// /* broken */ { {UNITIZE(Qt::Key_Dead_Grave), 0x0000, 0, 0, 0, 0}, 0x1edd }, // U1EDD # LATIN SMALL LETTER O WITH HORN AND GRAVE ++// /* broken */ { {UNITIZE(Qt::Key_Dead_Grave), 0x0000, 0, 0, 0, 0}, 0x1edc }, // U1EDC # LATIN CAPITAL LETTER O WITH HORN AND GRAVE ++// /* broken */ { {UNITIZE(Qt::Key_Dead_Grave), 0x0000, 0, 0, 0, 0}, 0x1eea }, // U1EEA # LATIN CAPITAL LETTER U WITH HORN AND GRAVE ++ { {UNITIZE(Qt::Key_Dead_Grave), 0x0020, 0, 0, 0, 0}, 0x0060 }, // grave ++ { {UNITIZE(Qt::Key_Dead_Grave), 0x0041, 0, 0, 0, 0}, 0x00c0 }, // U00C0 # LATIN CAPITAL LETTER A WITH GRAVE ++ { {UNITIZE(Qt::Key_Dead_Grave), 0x0045, 0, 0, 0, 0}, 0x00c8 }, // U00C8 # LATIN CAPITAL LETTER E WITH GRAVE ++ { {UNITIZE(Qt::Key_Dead_Grave), 0x0049, 0, 0, 0, 0}, 0x00cc }, // U00CC # LATIN CAPITAL LETTER I WITH GRAVE ++ { {UNITIZE(Qt::Key_Dead_Grave), 0x004e, 0, 0, 0, 0}, 0x01f8 }, // U01F8 # LATIN CAPITAL LETTER N WITH GRAVE ++ { {UNITIZE(Qt::Key_Dead_Grave), 0x004f, 0, 0, 0, 0}, 0x00d2 }, // U00D2 # LATIN CAPITAL LETTER O WITH GRAVE ++ { {UNITIZE(Qt::Key_Dead_Grave), 0x0055, 0, 0, 0, 0}, 0x00d9 }, // U00D9 # LATIN CAPITAL LETTER U WITH GRAVE ++ { {UNITIZE(Qt::Key_Dead_Grave), 0x0057, 0, 0, 0, 0}, 0x1e80 }, // U1E80 # LATIN CAPITAL LETTER W WITH GRAVE ++ { {UNITIZE(Qt::Key_Dead_Grave), 0x0059, 0, 0, 0, 0}, 0x1ef2 }, // U1EF2 # LATIN CAPITAL LETTER Y WITH GRAVE ++ { {UNITIZE(Qt::Key_Dead_Grave), 0x0061, 0, 0, 0, 0}, 0x00e0 }, // U00E0 # LATIN SMALL LETTER A WITH GRAVE ++ { {UNITIZE(Qt::Key_Dead_Grave), 0x0065, 0, 0, 0, 0}, 0x00e8 }, // U00E8 # LATIN SMALL LETTER E WITH GRAVE ++ { {UNITIZE(Qt::Key_Dead_Grave), 0x0069, 0, 0, 0, 0}, 0x00ec }, // U00EC # LATIN SMALL LETTER I WITH GRAVE ++ { {UNITIZE(Qt::Key_Dead_Grave), 0x006e, 0, 0, 0, 0}, 0x01f9 }, // U01F9 # LATIN SMALL LETTER N WITH GRAVE ++ { {UNITIZE(Qt::Key_Dead_Grave), 0x006f, 0, 0, 0, 0}, 0x00f2 }, // U00F2 # LATIN SMALL LETTER O WITH GRAVE ++ { {UNITIZE(Qt::Key_Dead_Grave), 0x0075, 0, 0, 0, 0}, 0x00f9 }, // U00F9 # LATIN SMALL LETTER U WITH GRAVE ++ { {UNITIZE(Qt::Key_Dead_Grave), 0x0077, 0, 0, 0, 0}, 0x1e81 }, // U1E81 # LATIN SMALL LETTER W WITH GRAVE ++ { {UNITIZE(Qt::Key_Dead_Grave), 0x0079, 0, 0, 0, 0}, 0x1ef3 }, // U1EF3 # LATIN SMALL LETTER Y WITH GRAVE ++ { {UNITIZE(Qt::Key_Dead_Grave), 0x00c2, 0, 0, 0, 0}, 0x1ea6 }, // U1EA6 # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND GRAVE ++ { {UNITIZE(Qt::Key_Dead_Grave), 0x00ca, 0, 0, 0, 0}, 0x1ec0 }, // U1EC0 # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND GRAVE ++ { {UNITIZE(Qt::Key_Dead_Grave), 0x00d4, 0, 0, 0, 0}, 0x1ed2 }, // U1ED2 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND GRAVE ++ { {UNITIZE(Qt::Key_Dead_Grave), 0x00dc, 0, 0, 0, 0}, 0x01db }, // U01DB # LATIN CAPITAL LETTER U WITH DIAERESIS AND GRAVE ++ { {UNITIZE(Qt::Key_Dead_Grave), 0x00e2, 0, 0, 0, 0}, 0x1ea7 }, // U1EA7 # LATIN SMALL LETTER A WITH CIRCUMFLEX AND GRAVE ++ { {UNITIZE(Qt::Key_Dead_Grave), 0x00ea, 0, 0, 0, 0}, 0x1ec1 }, // U1EC1 # LATIN SMALL LETTER E WITH CIRCUMFLEX AND GRAVE ++ { {UNITIZE(Qt::Key_Dead_Grave), 0x00f4, 0, 0, 0, 0}, 0x1ed3 }, // U1ED3 # LATIN SMALL LETTER O WITH CIRCUMFLEX AND GRAVE ++ { {UNITIZE(Qt::Key_Dead_Grave), 0x00fc, 0, 0, 0, 0}, 0x01dc }, // U01DC # LATIN SMALL LETTER U WITH DIAERESIS AND GRAVE ++ { {UNITIZE(Qt::Key_Dead_Grave), 0x0102, 0, 0, 0, 0}, 0x1eb0 }, // U1EB0 # LATIN CAPITAL LETTER A WITH BREVE AND GRAVE ++ { {UNITIZE(Qt::Key_Dead_Grave), 0x0103, 0, 0, 0, 0}, 0x1eb1 }, // U1EB1 # LATIN SMALL LETTER A WITH BREVE AND GRAVE ++ { {UNITIZE(Qt::Key_Dead_Grave), 0x0112, 0, 0, 0, 0}, 0x1e14 }, // U1E14 # LATIN CAPITAL LETTER E WITH MACRON AND GRAVE ++ { {UNITIZE(Qt::Key_Dead_Grave), 0x0113, 0, 0, 0, 0}, 0x1e15 }, // U1E15 # LATIN SMALL LETTER E WITH MACRON AND GRAVE ++ { {UNITIZE(Qt::Key_Dead_Grave), 0x014c, 0, 0, 0, 0}, 0x1e50 }, // U1E50 # LATIN CAPITAL LETTER O WITH MACRON AND GRAVE ++ { {UNITIZE(Qt::Key_Dead_Grave), 0x014d, 0, 0, 0, 0}, 0x1e51 }, // U1E51 # LATIN SMALL LETTER O WITH MACRON AND GRAVE ++ { {UNITIZE(Qt::Key_Dead_Grave), 0x01A0, 0, 0, 0, 0}, 0x1edc }, // U1EDC # LATIN CAPITAL LETTER O WITH HORN AND GRAVE ++ { {UNITIZE(Qt::Key_Dead_Grave), 0x01A1, 0, 0, 0, 0}, 0x1edd }, // U1EDD # LATIN SMALL LETTER O WITH HORN AND GRAVE ++ { {UNITIZE(Qt::Key_Dead_Grave), 0x01AF, 0, 0, 0, 0}, 0x1eea }, // U1EEA # LATIN CAPITAL LETTER U WITH HORN AND GRAVE ++ { {UNITIZE(Qt::Key_Dead_Grave), 0x01B0, 0, 0, 0, 0}, 0x1eeb }, // U1EEB # LATIN SMALL LETTER U WITH HORN AND GRAVE ++ { {UNITIZE(Qt::Key_Dead_Grave), 0x0313, 0x0391, 0, 0, 0}, 0x1f0a }, // U1F0A # GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA ++ { {UNITIZE(Qt::Key_Dead_Grave), 0x0313, 0x0395, 0, 0, 0}, 0x1f1a }, // U1F1A # GREEK CAPITAL LETTER EPSILON WITH PSILI AND VARIA ++ { {UNITIZE(Qt::Key_Dead_Grave), 0x0313, 0x0397, 0, 0, 0}, 0x1f2a }, // U1F2A # GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA ++ { {UNITIZE(Qt::Key_Dead_Grave), 0x0313, 0x0399, 0, 0, 0}, 0x1f3a }, // U1F3A # GREEK CAPITAL LETTER IOTA WITH PSILI AND VARIA ++ { {UNITIZE(Qt::Key_Dead_Grave), 0x0313, 0x039f, 0, 0, 0}, 0x1f4a }, // U1F4A # GREEK CAPITAL LETTER OMICRON WITH PSILI AND VARIA ++ { {UNITIZE(Qt::Key_Dead_Grave), 0x0313, 0x03a9, 0, 0, 0}, 0x1f6a }, // U1F6A # GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA ++ { {UNITIZE(Qt::Key_Dead_Grave), 0x0313, 0x03b1, 0, 0, 0}, 0x1f02 }, // U1F02 # GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA ++ { {UNITIZE(Qt::Key_Dead_Grave), 0x0313, 0x03b5, 0, 0, 0}, 0x1f12 }, // U1F12 # GREEK SMALL LETTER EPSILON WITH PSILI AND VARIA ++ { {UNITIZE(Qt::Key_Dead_Grave), 0x0313, 0x03b7, 0, 0, 0}, 0x1f22 }, // U1F22 # GREEK SMALL LETTER ETA WITH PSILI AND VARIA ++ { {UNITIZE(Qt::Key_Dead_Grave), 0x0313, 0x03b9, 0, 0, 0}, 0x1f32 }, // U1F32 # GREEK SMALL LETTER IOTA WITH PSILI AND VARIA ++ { {UNITIZE(Qt::Key_Dead_Grave), 0x0313, 0x03bf, 0, 0, 0}, 0x1f42 }, // U1F42 # GREEK SMALL LETTER OMICRON WITH PSILI AND VARIA ++ { {UNITIZE(Qt::Key_Dead_Grave), 0x0313, 0x03c5, 0, 0, 0}, 0x1f52 }, // U1F52 # GREEK SMALL LETTER UPSILON WITH PSILI AND VARIA ++ { {UNITIZE(Qt::Key_Dead_Grave), 0x0313, 0x03c9, 0, 0, 0}, 0x1f62 }, // U1F62 # GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA ++ { {UNITIZE(Qt::Key_Dead_Grave), 0x0314, 0x0391, 0, 0, 0}, 0x1f0b }, // U1F0B # GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA ++ { {UNITIZE(Qt::Key_Dead_Grave), 0x0314, 0x0395, 0, 0, 0}, 0x1f1b }, // U1F1B # GREEK CAPITAL LETTER EPSILON WITH DASIA AND VARIA ++ { {UNITIZE(Qt::Key_Dead_Grave), 0x0314, 0x0397, 0, 0, 0}, 0x1f2b }, // U1F2B # GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA ++ { {UNITIZE(Qt::Key_Dead_Grave), 0x0314, 0x0399, 0, 0, 0}, 0x1f3b }, // U1F3B # GREEK CAPITAL LETTER IOTA WITH DASIA AND VARIA ++ { {UNITIZE(Qt::Key_Dead_Grave), 0x0314, 0x039f, 0, 0, 0}, 0x1f4b }, // U1F4B # GREEK CAPITAL LETTER OMICRON WITH DASIA AND VARIA ++ { {UNITIZE(Qt::Key_Dead_Grave), 0x0314, 0x03a5, 0, 0, 0}, 0x1f5b }, // U1F5B # GREEK CAPITAL LETTER UPSILON WITH DASIA AND VARIA ++ { {UNITIZE(Qt::Key_Dead_Grave), 0x0314, 0x03a9, 0, 0, 0}, 0x1f6b }, // U1F6B # GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA ++ { {UNITIZE(Qt::Key_Dead_Grave), 0x0314, 0x03b1, 0, 0, 0}, 0x1f03 }, // U1F03 # GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA ++ { {UNITIZE(Qt::Key_Dead_Grave), 0x0314, 0x03b5, 0, 0, 0}, 0x1f13 }, // U1F13 # GREEK SMALL LETTER EPSILON WITH DASIA AND VARIA ++ { {UNITIZE(Qt::Key_Dead_Grave), 0x0314, 0x03b7, 0, 0, 0}, 0x1f23 }, // U1F23 # GREEK SMALL LETTER ETA WITH DASIA AND VARIA ++ { {UNITIZE(Qt::Key_Dead_Grave), 0x0314, 0x03b9, 0, 0, 0}, 0x1f33 }, // U1F33 # GREEK SMALL LETTER IOTA WITH DASIA AND VARIA ++ { {UNITIZE(Qt::Key_Dead_Grave), 0x0314, 0x03bf, 0, 0, 0}, 0x1f43 }, // U1F43 # GREEK SMALL LETTER OMICRON WITH DASIA AND VARIA ++ { {UNITIZE(Qt::Key_Dead_Grave), 0x0314, 0x03c5, 0, 0, 0}, 0x1f53 }, // U1F53 # GREEK SMALL LETTER UPSILON WITH DASIA AND VARIA ++ { {UNITIZE(Qt::Key_Dead_Grave), 0x0314, 0x03c9, 0, 0, 0}, 0x1f63 }, // U1F63 # GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA ++ { {UNITIZE(Qt::Key_Dead_Grave), 0x0391, 0, 0, 0, 0}, 0x1fba }, // U1FBA # GREEK CAPITAL LETTER ALPHA WITH VARIA ++ { {UNITIZE(Qt::Key_Dead_Grave), 0x0395, 0, 0, 0, 0}, 0x1fc8 }, // U1FC8 # GREEK CAPITAL LETTER EPSILON WITH VARIA ++ { {UNITIZE(Qt::Key_Dead_Grave), 0x0397, 0, 0, 0, 0}, 0x1fca }, // U1FCA # GREEK CAPITAL LETTER ETA WITH VARIA ++ { {UNITIZE(Qt::Key_Dead_Grave), 0x0399, 0, 0, 0, 0}, 0x1fda }, // U1FDA # GREEK CAPITAL LETTER IOTA WITH VARIA ++ { {UNITIZE(Qt::Key_Dead_Grave), 0x039f, 0, 0, 0, 0}, 0x1ff8 }, // U1FF8 # GREEK CAPITAL LETTER OMICRON WITH VARIA ++ { {UNITIZE(Qt::Key_Dead_Grave), 0x03a5, 0, 0, 0, 0}, 0x1fea }, // U1FEA # GREEK CAPITAL LETTER UPSILON WITH VARIA ++ { {UNITIZE(Qt::Key_Dead_Grave), 0x03a9, 0, 0, 0, 0}, 0x1ffa }, // U1FFA # GREEK CAPITAL LETTER OMEGA WITH VARIA ++ { {UNITIZE(Qt::Key_Dead_Grave), 0x03b1, 0, 0, 0, 0}, 0x1f70 }, // U1F70 # GREEK SMALL LETTER ALPHA WITH VARIA ++ { {UNITIZE(Qt::Key_Dead_Grave), 0x03b5, 0, 0, 0, 0}, 0x1f72 }, // U1F72 # GREEK SMALL LETTER EPSILON WITH VARIA ++ { {UNITIZE(Qt::Key_Dead_Grave), 0x03b7, 0, 0, 0, 0}, 0x1f74 }, // U1F74 # GREEK SMALL LETTER ETA WITH VARIA ++ { {UNITIZE(Qt::Key_Dead_Grave), 0x03b9, 0, 0, 0, 0}, 0x1f76 }, // U1F76 # GREEK SMALL LETTER IOTA WITH VARIA ++ { {UNITIZE(Qt::Key_Dead_Grave), 0x03bf, 0, 0, 0, 0}, 0x1f78 }, // U1F78 # GREEK SMALL LETTER OMICRON WITH VARIA ++ { {UNITIZE(Qt::Key_Dead_Grave), 0x03c5, 0, 0, 0, 0}, 0x1f7a }, // U1F7A # GREEK SMALL LETTER UPSILON WITH VARIA ++ { {UNITIZE(Qt::Key_Dead_Grave), 0x03c9, 0, 0, 0, 0}, 0x1f7c }, // U1F7C # GREEK SMALL LETTER OMEGA WITH VARIA ++ { {UNITIZE(Qt::Key_Dead_Grave), 0x03ca, 0, 0, 0, 0}, 0x1fd2 }, // U1FD2 # GREEK SMALL LETTER IOTA WITH DIALYTIKA AND VARIA ++ { {UNITIZE(Qt::Key_Dead_Grave), 0x03cb, 0, 0, 0, 0}, 0x1fe2 }, // U1FE2 # GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND VARIA ++ { {UNITIZE(Qt::Key_Dead_Grave), 0x0415, 0, 0, 0, 0}, 0x0400 }, // U0400 # CYRILLIC CAPITAL LETTER IE WITH GRAVE ++ { {UNITIZE(Qt::Key_Dead_Grave), 0x0418, 0, 0, 0, 0}, 0x040d }, // U040D # CYRILLIC CAPITAL LETTER I WITH GRAVE ++ { {UNITIZE(Qt::Key_Dead_Grave), 0x0435, 0, 0, 0, 0}, 0x0450 }, // U0450 # CYRILLIC SMALL LETTER IE WITH GRAVE ++ { {UNITIZE(Qt::Key_Dead_Grave), 0x0438, 0, 0, 0, 0}, 0x045d }, // U045D # CYRILLIC SMALL LETTER I WITH GRAVE ++ { {UNITIZE(Qt::Key_Dead_Grave), 0x1f00, 0, 0, 0, 0}, 0x1f02 }, // U1F02 # GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA ++ { {UNITIZE(Qt::Key_Dead_Grave), 0x1f01, 0, 0, 0, 0}, 0x1f03 }, // U1F03 # GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA ++ { {UNITIZE(Qt::Key_Dead_Grave), 0x1f08, 0, 0, 0, 0}, 0x1f0a }, // U1F0A # GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA ++ { {UNITIZE(Qt::Key_Dead_Grave), 0x1f09, 0, 0, 0, 0}, 0x1f0b }, // U1F0B # GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA ++ { {UNITIZE(Qt::Key_Dead_Grave), 0x1f10, 0, 0, 0, 0}, 0x1f12 }, // U1F12 # GREEK SMALL LETTER EPSILON WITH PSILI AND VARIA ++ { {UNITIZE(Qt::Key_Dead_Grave), 0x1f11, 0, 0, 0, 0}, 0x1f13 }, // U1F13 # GREEK SMALL LETTER EPSILON WITH DASIA AND VARIA ++ { {UNITIZE(Qt::Key_Dead_Grave), 0x1f18, 0, 0, 0, 0}, 0x1f1a }, // U1F1A # GREEK CAPITAL LETTER EPSILON WITH PSILI AND VARIA ++ { {UNITIZE(Qt::Key_Dead_Grave), 0x1f19, 0, 0, 0, 0}, 0x1f1b }, // U1F1B # GREEK CAPITAL LETTER EPSILON WITH DASIA AND VARIA ++ { {UNITIZE(Qt::Key_Dead_Grave), 0x1f20, 0, 0, 0, 0}, 0x1f22 }, // U1F22 # GREEK SMALL LETTER ETA WITH PSILI AND VARIA ++ { {UNITIZE(Qt::Key_Dead_Grave), 0x1f21, 0, 0, 0, 0}, 0x1f23 }, // U1F23 # GREEK SMALL LETTER ETA WITH DASIA AND VARIA ++ { {UNITIZE(Qt::Key_Dead_Grave), 0x1f28, 0, 0, 0, 0}, 0x1f2a }, // U1F2A # GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA ++ { {UNITIZE(Qt::Key_Dead_Grave), 0x1f29, 0, 0, 0, 0}, 0x1f2b }, // U1F2B # GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA ++ { {UNITIZE(Qt::Key_Dead_Grave), 0x1f30, 0, 0, 0, 0}, 0x1f32 }, // U1F32 # GREEK SMALL LETTER IOTA WITH PSILI AND VARIA ++ { {UNITIZE(Qt::Key_Dead_Grave), 0x1f31, 0, 0, 0, 0}, 0x1f33 }, // U1F33 # GREEK SMALL LETTER IOTA WITH DASIA AND VARIA ++ { {UNITIZE(Qt::Key_Dead_Grave), 0x1f38, 0, 0, 0, 0}, 0x1f3a }, // U1F3A # GREEK CAPITAL LETTER IOTA WITH PSILI AND VARIA ++ { {UNITIZE(Qt::Key_Dead_Grave), 0x1f39, 0, 0, 0, 0}, 0x1f3b }, // U1F3B # GREEK CAPITAL LETTER IOTA WITH DASIA AND VARIA ++ { {UNITIZE(Qt::Key_Dead_Grave), 0x1f40, 0, 0, 0, 0}, 0x1f42 }, // U1F42 # GREEK SMALL LETTER OMICRON WITH PSILI AND VARIA ++ { {UNITIZE(Qt::Key_Dead_Grave), 0x1f41, 0, 0, 0, 0}, 0x1f43 }, // U1F43 # GREEK SMALL LETTER OMICRON WITH DASIA AND VARIA ++ { {UNITIZE(Qt::Key_Dead_Grave), 0x1f48, 0, 0, 0, 0}, 0x1f4a }, // U1F4A # GREEK CAPITAL LETTER OMICRON WITH PSILI AND VARIA ++ { {UNITIZE(Qt::Key_Dead_Grave), 0x1f49, 0, 0, 0, 0}, 0x1f4b }, // U1F4B # GREEK CAPITAL LETTER OMICRON WITH DASIA AND VARIA ++ { {UNITIZE(Qt::Key_Dead_Grave), 0x1f50, 0, 0, 0, 0}, 0x1f52 }, // U1F52 # GREEK SMALL LETTER UPSILON WITH PSILI AND VARIA ++ { {UNITIZE(Qt::Key_Dead_Grave), 0x1f51, 0, 0, 0, 0}, 0x1f53 }, // U1F53 # GREEK SMALL LETTER UPSILON WITH DASIA AND VARIA ++ { {UNITIZE(Qt::Key_Dead_Grave), 0x1f59, 0, 0, 0, 0}, 0x1f5b }, // U1F5B # GREEK CAPITAL LETTER UPSILON WITH DASIA AND VARIA ++ { {UNITIZE(Qt::Key_Dead_Grave), 0x1f60, 0, 0, 0, 0}, 0x1f62 }, // U1F62 # GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA ++ { {UNITIZE(Qt::Key_Dead_Grave), 0x1f61, 0, 0, 0, 0}, 0x1f63 }, // U1F63 # GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA ++ { {UNITIZE(Qt::Key_Dead_Grave), 0x1f68, 0, 0, 0, 0}, 0x1f6a }, // U1F6A # GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA ++ { {UNITIZE(Qt::Key_Dead_Grave), 0x1f69, 0, 0, 0, 0}, 0x1f6b }, // U1F6B # GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA ++ { {UNITIZE(Qt::Key_Dead_Grave), UNITIZE(Qt::Key_Multi_key), 0x0022, 0x0055, 0, 0}, 0x01db }, // U01DB # LATIN CAPITAL LETTER U WITH DIAERESIS AND GRAVE ++ { {UNITIZE(Qt::Key_Dead_Grave), UNITIZE(Qt::Key_Multi_key), 0x0022, 0x0075, 0, 0}, 0x01dc }, // U01DC # LATIN SMALL LETTER U WITH DIAERESIS AND GRAVE ++ { {UNITIZE(Qt::Key_Dead_Grave), UNITIZE(Qt::Key_Multi_key), 0x0022, 0x03b9, 0, 0}, 0x1fd2 }, // U1FD2 # GREEK SMALL LETTER IOTA WITH DIALYTIKA AND VARIA ++ { {UNITIZE(Qt::Key_Dead_Grave), UNITIZE(Qt::Key_Multi_key), 0x0022, 0x03c5, 0, 0}, 0x1fe2 }, // U1FE2 # GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND VARIA ++ { {UNITIZE(Qt::Key_Dead_Grave), UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0391, 0, 0}, 0x1f0b }, // U1F0B # GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA ++ { {UNITIZE(Qt::Key_Dead_Grave), UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0395, 0, 0}, 0x1f1b }, // U1F1B # GREEK CAPITAL LETTER EPSILON WITH DASIA AND VARIA ++ { {UNITIZE(Qt::Key_Dead_Grave), UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0397, 0, 0}, 0x1f2b }, // U1F2B # GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA ++ { {UNITIZE(Qt::Key_Dead_Grave), UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0399, 0, 0}, 0x1f3b }, // U1F3B # GREEK CAPITAL LETTER IOTA WITH DASIA AND VARIA ++ { {UNITIZE(Qt::Key_Dead_Grave), UNITIZE(Qt::Key_Multi_key), 0x0028, 0x039f, 0, 0}, 0x1f4b }, // U1F4B # GREEK CAPITAL LETTER OMICRON WITH DASIA AND VARIA ++ { {UNITIZE(Qt::Key_Dead_Grave), UNITIZE(Qt::Key_Multi_key), 0x0028, 0x03a5, 0, 0}, 0x1f5b }, // U1F5B # GREEK CAPITAL LETTER UPSILON WITH DASIA AND VARIA ++ { {UNITIZE(Qt::Key_Dead_Grave), UNITIZE(Qt::Key_Multi_key), 0x0028, 0x03a9, 0, 0}, 0x1f6b }, // U1F6B # GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA ++ { {UNITIZE(Qt::Key_Dead_Grave), UNITIZE(Qt::Key_Multi_key), 0x0028, 0x03b1, 0, 0}, 0x1f03 }, // U1F03 # GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA ++ { {UNITIZE(Qt::Key_Dead_Grave), UNITIZE(Qt::Key_Multi_key), 0x0028, 0x03b5, 0, 0}, 0x1f13 }, // U1F13 # GREEK SMALL LETTER EPSILON WITH DASIA AND VARIA ++ { {UNITIZE(Qt::Key_Dead_Grave), UNITIZE(Qt::Key_Multi_key), 0x0028, 0x03b7, 0, 0}, 0x1f23 }, // U1F23 # GREEK SMALL LETTER ETA WITH DASIA AND VARIA ++ { {UNITIZE(Qt::Key_Dead_Grave), UNITIZE(Qt::Key_Multi_key), 0x0028, 0x03b9, 0, 0}, 0x1f33 }, // U1F33 # GREEK SMALL LETTER IOTA WITH DASIA AND VARIA ++ { {UNITIZE(Qt::Key_Dead_Grave), UNITIZE(Qt::Key_Multi_key), 0x0028, 0x03bf, 0, 0}, 0x1f43 }, // U1F43 # GREEK SMALL LETTER OMICRON WITH DASIA AND VARIA ++ { {UNITIZE(Qt::Key_Dead_Grave), UNITIZE(Qt::Key_Multi_key), 0x0028, 0x03c5, 0, 0}, 0x1f53 }, // U1F53 # GREEK SMALL LETTER UPSILON WITH DASIA AND VARIA ++ { {UNITIZE(Qt::Key_Dead_Grave), UNITIZE(Qt::Key_Multi_key), 0x0028, 0x03c9, 0, 0}, 0x1f63 }, // U1F63 # GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA ++ { {UNITIZE(Qt::Key_Dead_Grave), UNITIZE(Qt::Key_Multi_key), 0x0029, 0x0391, 0, 0}, 0x1f0a }, // U1F0A # GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA ++ { {UNITIZE(Qt::Key_Dead_Grave), UNITIZE(Qt::Key_Multi_key), 0x0029, 0x0395, 0, 0}, 0x1f1a }, // U1F1A # GREEK CAPITAL LETTER EPSILON WITH PSILI AND VARIA ++ { {UNITIZE(Qt::Key_Dead_Grave), UNITIZE(Qt::Key_Multi_key), 0x0029, 0x0397, 0, 0}, 0x1f2a }, // U1F2A # GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA ++ { {UNITIZE(Qt::Key_Dead_Grave), UNITIZE(Qt::Key_Multi_key), 0x0029, 0x0399, 0, 0}, 0x1f3a }, // U1F3A # GREEK CAPITAL LETTER IOTA WITH PSILI AND VARIA ++ { {UNITIZE(Qt::Key_Dead_Grave), UNITIZE(Qt::Key_Multi_key), 0x0029, 0x039f, 0, 0}, 0x1f4a }, // U1F4A # GREEK CAPITAL LETTER OMICRON WITH PSILI AND VARIA ++ { {UNITIZE(Qt::Key_Dead_Grave), UNITIZE(Qt::Key_Multi_key), 0x0029, 0x03a9, 0, 0}, 0x1f6a }, // U1F6A # GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA ++ { {UNITIZE(Qt::Key_Dead_Grave), UNITIZE(Qt::Key_Multi_key), 0x0029, 0x03b1, 0, 0}, 0x1f02 }, // U1F02 # GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA ++ { {UNITIZE(Qt::Key_Dead_Grave), UNITIZE(Qt::Key_Multi_key), 0x0029, 0x03b5, 0, 0}, 0x1f12 }, // U1F12 # GREEK SMALL LETTER EPSILON WITH PSILI AND VARIA ++ { {UNITIZE(Qt::Key_Dead_Grave), UNITIZE(Qt::Key_Multi_key), 0x0029, 0x03b7, 0, 0}, 0x1f22 }, // U1F22 # GREEK SMALL LETTER ETA WITH PSILI AND VARIA ++ { {UNITIZE(Qt::Key_Dead_Grave), UNITIZE(Qt::Key_Multi_key), 0x0029, 0x03b9, 0, 0}, 0x1f32 }, // U1F32 # GREEK SMALL LETTER IOTA WITH PSILI AND VARIA ++ { {UNITIZE(Qt::Key_Dead_Grave), UNITIZE(Qt::Key_Multi_key), 0x0029, 0x03bf, 0, 0}, 0x1f42 }, // U1F42 # GREEK SMALL LETTER OMICRON WITH PSILI AND VARIA ++ { {UNITIZE(Qt::Key_Dead_Grave), UNITIZE(Qt::Key_Multi_key), 0x0029, 0x03c5, 0, 0}, 0x1f52 }, // U1F52 # GREEK SMALL LETTER UPSILON WITH PSILI AND VARIA ++ { {UNITIZE(Qt::Key_Dead_Grave), UNITIZE(Qt::Key_Multi_key), 0x0029, 0x03c9, 0, 0}, 0x1f62 }, // U1F62 # GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA ++ { {UNITIZE(Qt::Key_Dead_Grave), UNITIZE(Qt::Key_Multi_key), 0x002b, 0x004f, 0, 0}, 0x1edc }, // U1EDC # LATIN CAPITAL LETTER O WITH HORN AND GRAVE ++ { {UNITIZE(Qt::Key_Dead_Grave), UNITIZE(Qt::Key_Multi_key), 0x002b, 0x0055, 0, 0}, 0x1eea }, // U1EEA # LATIN CAPITAL LETTER U WITH HORN AND GRAVE ++ { {UNITIZE(Qt::Key_Dead_Grave), UNITIZE(Qt::Key_Multi_key), 0x002b, 0x006f, 0, 0}, 0x1edd }, // U1EDD # LATIN SMALL LETTER O WITH HORN AND GRAVE ++ { {UNITIZE(Qt::Key_Dead_Grave), UNITIZE(Qt::Key_Multi_key), 0x002b, 0x0075, 0, 0}, 0x1eeb }, // U1EEB # LATIN SMALL LETTER U WITH HORN AND GRAVE ++ { {UNITIZE(Qt::Key_Dead_Grave), UNITIZE(Qt::Key_Multi_key), 0x0055, 0x0041, 0, 0}, 0x1eb0 }, // U1EB0 # LATIN CAPITAL LETTER A WITH BREVE AND GRAVE ++ { {UNITIZE(Qt::Key_Dead_Grave), UNITIZE(Qt::Key_Multi_key), 0x0055, 0x0061, 0, 0}, 0x1eb1 }, // U1EB1 # LATIN SMALL LETTER A WITH BREVE AND GRAVE ++ { {UNITIZE(Qt::Key_Dead_Grave), UNITIZE(Qt::Key_Multi_key), 0x005e, 0x0041, 0, 0}, 0x1ea6 }, // U1EA6 # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND GRAVE ++ { {UNITIZE(Qt::Key_Dead_Grave), UNITIZE(Qt::Key_Multi_key), 0x005e, 0x0045, 0, 0}, 0x1ec0 }, // U1EC0 # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND GRAVE ++ { {UNITIZE(Qt::Key_Dead_Grave), UNITIZE(Qt::Key_Multi_key), 0x005e, 0x004f, 0, 0}, 0x1ed2 }, // U1ED2 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND GRAVE ++ { {UNITIZE(Qt::Key_Dead_Grave), UNITIZE(Qt::Key_Multi_key), 0x005e, 0x0061, 0, 0}, 0x1ea7 }, // U1EA7 # LATIN SMALL LETTER A WITH CIRCUMFLEX AND GRAVE ++ { {UNITIZE(Qt::Key_Dead_Grave), UNITIZE(Qt::Key_Multi_key), 0x005e, 0x0065, 0, 0}, 0x1ec1 }, // U1EC1 # LATIN SMALL LETTER E WITH CIRCUMFLEX AND GRAVE ++ { {UNITIZE(Qt::Key_Dead_Grave), UNITIZE(Qt::Key_Multi_key), 0x005e, 0x006f, 0, 0}, 0x1ed3 }, // U1ED3 # LATIN SMALL LETTER O WITH CIRCUMFLEX AND GRAVE ++ { {UNITIZE(Qt::Key_Dead_Grave), UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0045, 0, 0}, 0x1e14 }, // U1E14 # LATIN CAPITAL LETTER E WITH MACRON AND GRAVE ++ { {UNITIZE(Qt::Key_Dead_Grave), UNITIZE(Qt::Key_Multi_key), 0x005f, 0x004f, 0, 0}, 0x1e50 }, // U1E50 # LATIN CAPITAL LETTER O WITH MACRON AND GRAVE ++ { {UNITIZE(Qt::Key_Dead_Grave), UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0065, 0, 0}, 0x1e15 }, // U1E15 # LATIN SMALL LETTER E WITH MACRON AND GRAVE ++ { {UNITIZE(Qt::Key_Dead_Grave), UNITIZE(Qt::Key_Multi_key), 0x005f, 0x006f, 0, 0}, 0x1e51 }, // U1E51 # LATIN SMALL LETTER O WITH MACRON AND GRAVE ++ { {UNITIZE(Qt::Key_Dead_Grave), UNITIZE(Qt::Key_Multi_key), 0x0062, 0x0041, 0, 0}, 0x1eb0 }, // U1EB0 # LATIN CAPITAL LETTER A WITH BREVE AND GRAVE ++ { {UNITIZE(Qt::Key_Dead_Grave), UNITIZE(Qt::Key_Multi_key), 0x0062, 0x0061, 0, 0}, 0x1eb1 }, // U1EB1 # LATIN SMALL LETTER A WITH BREVE AND GRAVE ++ { {UNITIZE(Qt::Key_Dead_Grave), UNITIZE(Qt::Key_Multi_key), 0x00af, 0x0045, 0, 0}, 0x1e14 }, // U1E14 # LATIN CAPITAL LETTER E WITH MACRON AND GRAVE ++ { {UNITIZE(Qt::Key_Dead_Grave), UNITIZE(Qt::Key_Multi_key), 0x00af, 0x004f, 0, 0}, 0x1e50 }, // U1E50 # LATIN CAPITAL LETTER O WITH MACRON AND GRAVE ++ { {UNITIZE(Qt::Key_Dead_Grave), UNITIZE(Qt::Key_Multi_key), 0x00af, 0x0065, 0, 0}, 0x1e15 }, // U1E15 # LATIN SMALL LETTER E WITH MACRON AND GRAVE ++ { {UNITIZE(Qt::Key_Dead_Grave), UNITIZE(Qt::Key_Multi_key), 0x00af, 0x006f, 0, 0}, 0x1e51 }, // U1E51 # LATIN SMALL LETTER O WITH MACRON AND GRAVE ++ { {UNITIZE(Qt::Key_Dead_Grave), UNITIZE(Qt::Key_Dead_Grave), 0, 0, 0, 0}, 0x0060 }, // grave ++ { {UNITIZE(Qt::Key_Dead_Grave), UNITIZE(Qt::Key_Dead_Circumflex), 0x0041, 0, 0, 0}, 0x1ea6 }, // U1EA6 # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND GRAVE ++ { {UNITIZE(Qt::Key_Dead_Grave), UNITIZE(Qt::Key_Dead_Circumflex), 0x0045, 0, 0, 0}, 0x1ec0 }, // U1EC0 # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND GRAVE ++ { {UNITIZE(Qt::Key_Dead_Grave), UNITIZE(Qt::Key_Dead_Circumflex), 0x004f, 0, 0, 0}, 0x1ed2 }, // U1ED2 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND GRAVE ++ { {UNITIZE(Qt::Key_Dead_Grave), UNITIZE(Qt::Key_Dead_Circumflex), 0x0061, 0, 0, 0}, 0x1ea7 }, // U1EA7 # LATIN SMALL LETTER A WITH CIRCUMFLEX AND GRAVE ++ { {UNITIZE(Qt::Key_Dead_Grave), UNITIZE(Qt::Key_Dead_Circumflex), 0x0065, 0, 0, 0}, 0x1ec1 }, // U1EC1 # LATIN SMALL LETTER E WITH CIRCUMFLEX AND GRAVE ++ { {UNITIZE(Qt::Key_Dead_Grave), UNITIZE(Qt::Key_Dead_Circumflex), 0x006f, 0, 0, 0}, 0x1ed3 }, // U1ED3 # LATIN SMALL LETTER O WITH CIRCUMFLEX AND GRAVE ++ { {UNITIZE(Qt::Key_Dead_Grave), UNITIZE(Qt::Key_Dead_Macron), 0x0045, 0, 0, 0}, 0x1e14 }, // U1E14 # LATIN CAPITAL LETTER E WITH MACRON AND GRAVE ++ { {UNITIZE(Qt::Key_Dead_Grave), UNITIZE(Qt::Key_Dead_Macron), 0x004f, 0, 0, 0}, 0x1e50 }, // U1E50 # LATIN CAPITAL LETTER O WITH MACRON AND GRAVE ++ { {UNITIZE(Qt::Key_Dead_Grave), UNITIZE(Qt::Key_Dead_Macron), 0x0065, 0, 0, 0}, 0x1e15 }, // U1E15 # LATIN SMALL LETTER E WITH MACRON AND GRAVE ++ { {UNITIZE(Qt::Key_Dead_Grave), UNITIZE(Qt::Key_Dead_Macron), 0x006f, 0, 0, 0}, 0x1e51 }, // U1E51 # LATIN SMALL LETTER O WITH MACRON AND GRAVE ++ { {UNITIZE(Qt::Key_Dead_Grave), UNITIZE(Qt::Key_Dead_Breve), 0x0041, 0, 0, 0}, 0x1eb0 }, // U1EB0 # LATIN CAPITAL LETTER A WITH BREVE AND GRAVE ++ { {UNITIZE(Qt::Key_Dead_Grave), UNITIZE(Qt::Key_Dead_Breve), 0x0061, 0, 0, 0}, 0x1eb1 }, // U1EB1 # LATIN SMALL LETTER A WITH BREVE AND GRAVE ++ { {UNITIZE(Qt::Key_Dead_Grave), UNITIZE(Qt::Key_Dead_Diaeresis), 0x0055, 0, 0, 0}, 0x01db }, // U01DB # LATIN CAPITAL LETTER U WITH DIAERESIS AND GRAVE ++ { {UNITIZE(Qt::Key_Dead_Grave), UNITIZE(Qt::Key_Dead_Diaeresis), 0x0075, 0, 0, 0}, 0x01dc }, // U01DC # LATIN SMALL LETTER U WITH DIAERESIS AND GRAVE ++ { {UNITIZE(Qt::Key_Dead_Grave), UNITIZE(Qt::Key_Dead_Diaeresis), 0x03b9, 0, 0, 0}, 0x1fd2 }, // U1FD2 # GREEK SMALL LETTER IOTA WITH DIALYTIKA AND VARIA ++ { {UNITIZE(Qt::Key_Dead_Grave), UNITIZE(Qt::Key_Dead_Diaeresis), 0x03c5, 0, 0, 0}, 0x1fe2 }, // U1FE2 # GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND VARIA ++ { {UNITIZE(Qt::Key_Dead_Grave), UNITIZE(Qt::Key_Dead_Horn), 0x004f, 0, 0, 0}, 0x1edc }, // U1EDC # LATIN CAPITAL LETTER O WITH HORN AND GRAVE ++ { {UNITIZE(Qt::Key_Dead_Grave), UNITIZE(Qt::Key_Dead_Horn), 0x0055, 0, 0, 0}, 0x1eea }, // U1EEA # LATIN CAPITAL LETTER U WITH HORN AND GRAVE ++ { {UNITIZE(Qt::Key_Dead_Grave), UNITIZE(Qt::Key_Dead_Horn), 0x006f, 0, 0, 0}, 0x1edd }, // U1EDD # LATIN SMALL LETTER O WITH HORN AND GRAVE ++ { {UNITIZE(Qt::Key_Dead_Grave), UNITIZE(Qt::Key_Dead_Horn), 0x0075, 0, 0, 0}, 0x1eeb }, // U1EEB # LATIN SMALL LETTER U WITH HORN AND GRAVE ++// /* broken */ { {UNITIZE(Qt::Key_Dead_Acute), 0x0000, 0, 0, 0, 0}, 0x1eda }, // U1EDA # LATIN CAPITAL LETTER O WITH HORN AND ACUTE ++// /* broken */ { {UNITIZE(Qt::Key_Dead_Acute), 0x0000, 0, 0, 0, 0}, 0x1ee9 }, // U1EE9 # LATIN SMALL LETTER U WITH HORN AND ACUTE ++// /* broken */ { {UNITIZE(Qt::Key_Dead_Acute), 0x0000, 0, 0, 0, 0}, 0x1edb }, // U1EDB # LATIN SMALL LETTER O WITH HORN AND ACUTE ++// /* broken */ { {UNITIZE(Qt::Key_Dead_Acute), 0x0000, 0, 0, 0, 0}, 0x1ee8 }, // U1EE8 # LATIN CAPITAL LETTER U WITH HORN AND ACUTE ++// /* broken */ { {UNITIZE(Qt::Key_Dead_Acute), 0x0000, 0x004f, 0, 0, 0}, 0x1e4c }, // U1E4C # LATIN CAPITAL LETTER O WITH TILDE AND ACUTE ++// /* broken */ { {UNITIZE(Qt::Key_Dead_Acute), 0x0000, 0x0055, 0, 0, 0}, 0x1e78 }, // U1E78 # LATIN CAPITAL LETTER U WITH TILDE AND ACUTE ++// /* broken */ { {UNITIZE(Qt::Key_Dead_Acute), 0x0000, 0x006f, 0, 0, 0}, 0x1e4d }, // U1E4D # LATIN SMALL LETTER O WITH TILDE AND ACUTE ++// /* broken */ { {UNITIZE(Qt::Key_Dead_Acute), 0x0000, 0x0075, 0, 0, 0}, 0x1e79 }, // U1E79 # LATIN SMALL LETTER U WITH TILDE AND ACUTE ++ { {UNITIZE(Qt::Key_Dead_Acute), 0x0020, 0, 0, 0, 0}, 0x0027 }, // apostrophe ++ { {UNITIZE(Qt::Key_Dead_Acute), 0x0041, 0, 0, 0, 0}, 0x00c1 }, // U00C1 # LATIN CAPITAL LETTER A WITH ACUTE ++ { {UNITIZE(Qt::Key_Dead_Acute), 0x0043, 0, 0, 0, 0}, 0x0106 }, // U0106 # LATIN CAPITAL LETTER C WITH ACUTE ++ { {UNITIZE(Qt::Key_Dead_Acute), 0x0045, 0, 0, 0, 0}, 0x00c9 }, // U00C9 # LATIN CAPITAL LETTER E WITH ACUTE ++ { {UNITIZE(Qt::Key_Dead_Acute), 0x0047, 0, 0, 0, 0}, 0x01f4 }, // U01F4 # LATIN CAPITAL LETTER G WITH ACUTE ++ { {UNITIZE(Qt::Key_Dead_Acute), 0x0049, 0, 0, 0, 0}, 0x00cd }, // U00CD # LATIN CAPITAL LETTER I WITH ACUTE ++ { {UNITIZE(Qt::Key_Dead_Acute), 0x004b, 0, 0, 0, 0}, 0x1e30 }, // U1E30 # LATIN CAPITAL LETTER K WITH ACUTE ++ { {UNITIZE(Qt::Key_Dead_Acute), 0x004c, 0, 0, 0, 0}, 0x0139 }, // U0139 # LATIN CAPITAL LETTER L WITH ACUTE ++ { {UNITIZE(Qt::Key_Dead_Acute), 0x004d, 0, 0, 0, 0}, 0x1e3e }, // U1E3E # LATIN CAPITAL LETTER M WITH ACUTE ++ { {UNITIZE(Qt::Key_Dead_Acute), 0x004e, 0, 0, 0, 0}, 0x0143 }, // U0143 # LATIN CAPITAL LETTER N WITH ACUTE ++ { {UNITIZE(Qt::Key_Dead_Acute), 0x004f, 0, 0, 0, 0}, 0x00d3 }, // U00D3 # LATIN CAPITAL LETTER O WITH ACUTE ++ { {UNITIZE(Qt::Key_Dead_Acute), 0x0050, 0, 0, 0, 0}, 0x1e54 }, // U1E54 # LATIN CAPITAL LETTER P WITH ACUTE ++ { {UNITIZE(Qt::Key_Dead_Acute), 0x0052, 0, 0, 0, 0}, 0x0154 }, // U0154 # LATIN CAPITAL LETTER R WITH ACUTE ++ { {UNITIZE(Qt::Key_Dead_Acute), 0x0053, 0, 0, 0, 0}, 0x015a }, // U015A # LATIN CAPITAL LETTER S WITH ACUTE ++ { {UNITIZE(Qt::Key_Dead_Acute), 0x0055, 0, 0, 0, 0}, 0x00da }, // U00DA # LATIN CAPITAL LETTER U WITH ACUTE ++ { {UNITIZE(Qt::Key_Dead_Acute), 0x0057, 0, 0, 0, 0}, 0x1e82 }, // U1E82 # LATIN CAPITAL LETTER W WITH ACUTE ++ { {UNITIZE(Qt::Key_Dead_Acute), 0x0059, 0, 0, 0, 0}, 0x00dd }, // U00DD # LATIN CAPITAL LETTER Y WITH ACUTE ++ { {UNITIZE(Qt::Key_Dead_Acute), 0x005a, 0, 0, 0, 0}, 0x0179 }, // U0179 # LATIN CAPITAL LETTER Z WITH ACUTE ++ { {UNITIZE(Qt::Key_Dead_Acute), 0x0061, 0, 0, 0, 0}, 0x00e1 }, // U00E1 # LATIN SMALL LETTER A WITH ACUTE ++ { {UNITIZE(Qt::Key_Dead_Acute), 0x0063, 0, 0, 0, 0}, 0x0107 }, // U0107 # LATIN SMALL LETTER C WITH ACUTE ++ { {UNITIZE(Qt::Key_Dead_Acute), 0x0065, 0, 0, 0, 0}, 0x00e9 }, // U00E9 # LATIN SMALL LETTER E WITH ACUTE ++ { {UNITIZE(Qt::Key_Dead_Acute), 0x0067, 0, 0, 0, 0}, 0x01f5 }, // U01F5 # LATIN SMALL LETTER G WITH ACUTE ++ { {UNITIZE(Qt::Key_Dead_Acute), 0x0069, 0, 0, 0, 0}, 0x00ed }, // U00ED # LATIN SMALL LETTER I WITH ACUTE ++ { {UNITIZE(Qt::Key_Dead_Acute), 0x006b, 0, 0, 0, 0}, 0x1e31 }, // U1E31 # LATIN SMALL LETTER K WITH ACUTE ++ { {UNITIZE(Qt::Key_Dead_Acute), 0x006c, 0, 0, 0, 0}, 0x013a }, // U013A # LATIN SMALL LETTER L WITH ACUTE ++ { {UNITIZE(Qt::Key_Dead_Acute), 0x006d, 0, 0, 0, 0}, 0x1e3f }, // U1E3F # LATIN SMALL LETTER M WITH ACUTE ++ { {UNITIZE(Qt::Key_Dead_Acute), 0x006e, 0, 0, 0, 0}, 0x0144 }, // U0144 # LATIN SMALL LETTER N WITH ACUTE ++ { {UNITIZE(Qt::Key_Dead_Acute), 0x006f, 0, 0, 0, 0}, 0x00f3 }, // U00F3 # LATIN SMALL LETTER O WITH ACUTE ++ { {UNITIZE(Qt::Key_Dead_Acute), 0x0070, 0, 0, 0, 0}, 0x1e55 }, // U1E55 # LATIN SMALL LETTER P WITH ACUTE ++ { {UNITIZE(Qt::Key_Dead_Acute), 0x0072, 0, 0, 0, 0}, 0x0155 }, // U0155 # LATIN SMALL LETTER R WITH ACUTE ++ { {UNITIZE(Qt::Key_Dead_Acute), 0x0073, 0, 0, 0, 0}, 0x015b }, // U015B # LATIN SMALL LETTER S WITH ACUTE ++ { {UNITIZE(Qt::Key_Dead_Acute), 0x0075, 0, 0, 0, 0}, 0x00fa }, // U00FA # LATIN SMALL LETTER U WITH ACUTE ++ { {UNITIZE(Qt::Key_Dead_Acute), 0x0077, 0, 0, 0, 0}, 0x1e83 }, // U1E83 # LATIN SMALL LETTER W WITH ACUTE ++ { {UNITIZE(Qt::Key_Dead_Acute), 0x0079, 0, 0, 0, 0}, 0x00fd }, // U00FD # LATIN SMALL LETTER Y WITH ACUTE ++ { {UNITIZE(Qt::Key_Dead_Acute), 0x007a, 0, 0, 0, 0}, 0x017a }, // U017A # LATIN SMALL LETTER Z WITH ACUTE ++ { {UNITIZE(Qt::Key_Dead_Acute), 0x00c2, 0, 0, 0, 0}, 0x1ea4 }, // U1EA4 # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND ACUTE ++ { {UNITIZE(Qt::Key_Dead_Acute), 0x00c5, 0, 0, 0, 0}, 0x01fa }, // U01FA # LATIN CAPITAL LETTER A WITH RING ABOVE AND ACUTE ++ { {UNITIZE(Qt::Key_Dead_Acute), 0x00c6, 0, 0, 0, 0}, 0x01fc }, // U01FC # LATIN CAPITAL LETTER AE WITH ACUTE ++ { {UNITIZE(Qt::Key_Dead_Acute), 0x00c7, 0, 0, 0, 0}, 0x1e08 }, // U1E08 # LATIN CAPITAL LETTER C WITH CEDILLA AND ACUTE ++ { {UNITIZE(Qt::Key_Dead_Acute), 0x00ca, 0, 0, 0, 0}, 0x1ebe }, // U1EBE # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND ACUTE ++ { {UNITIZE(Qt::Key_Dead_Acute), 0x00cf, 0, 0, 0, 0}, 0x1e2e }, // U1E2E # LATIN CAPITAL LETTER I WITH DIAERESIS AND ACUTE ++ { {UNITIZE(Qt::Key_Dead_Acute), 0x00d4, 0, 0, 0, 0}, 0x1ed0 }, // U1ED0 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND ACUTE ++ { {UNITIZE(Qt::Key_Dead_Acute), 0x00d5, 0, 0, 0, 0}, 0x1e4c }, // U1E4C # LATIN CAPITAL LETTER O WITH TILDE AND ACUTE ++ { {UNITIZE(Qt::Key_Dead_Acute), 0x00d8, 0, 0, 0, 0}, 0x01fe }, // U01FE # LATIN CAPITAL LETTER O WITH STROKE AND ACUTE ++ { {UNITIZE(Qt::Key_Dead_Acute), 0x00dc, 0, 0, 0, 0}, 0x01d7 }, // U01D7 # LATIN CAPITAL LETTER U WITH DIAERESIS AND ACUTE ++ { {UNITIZE(Qt::Key_Dead_Acute), 0x00e2, 0, 0, 0, 0}, 0x1ea5 }, // U1EA5 # LATIN SMALL LETTER A WITH CIRCUMFLEX AND ACUTE ++ { {UNITIZE(Qt::Key_Dead_Acute), 0x00e5, 0, 0, 0, 0}, 0x01fb }, // U01FB # LATIN SMALL LETTER A WITH RING ABOVE AND ACUTE ++ { {UNITIZE(Qt::Key_Dead_Acute), 0x00e6, 0, 0, 0, 0}, 0x01fd }, // U01FD # LATIN SMALL LETTER AE WITH ACUTE ++ { {UNITIZE(Qt::Key_Dead_Acute), 0x00e7, 0, 0, 0, 0}, 0x1e09 }, // U1E09 # LATIN SMALL LETTER C WITH CEDILLA AND ACUTE ++ { {UNITIZE(Qt::Key_Dead_Acute), 0x00ea, 0, 0, 0, 0}, 0x1ebf }, // U1EBF # LATIN SMALL LETTER E WITH CIRCUMFLEX AND ACUTE ++ { {UNITIZE(Qt::Key_Dead_Acute), 0x00ef, 0, 0, 0, 0}, 0x1e2f }, // U1E2F # LATIN SMALL LETTER I WITH DIAERESIS AND ACUTE ++ { {UNITIZE(Qt::Key_Dead_Acute), 0x00f4, 0, 0, 0, 0}, 0x1ed1 }, // U1ED1 # LATIN SMALL LETTER O WITH CIRCUMFLEX AND ACUTE ++ { {UNITIZE(Qt::Key_Dead_Acute), 0x00f5, 0, 0, 0, 0}, 0x1e4d }, // U1E4D # LATIN SMALL LETTER O WITH TILDE AND ACUTE ++ { {UNITIZE(Qt::Key_Dead_Acute), 0x00f8, 0, 0, 0, 0}, 0x01ff }, // U01FF # LATIN SMALL LETTER O WITH STROKE AND ACUTE ++ { {UNITIZE(Qt::Key_Dead_Acute), 0x00fc, 0, 0, 0, 0}, 0x01d8 }, // U01D8 # LATIN SMALL LETTER U WITH DIAERESIS AND ACUTE ++ { {UNITIZE(Qt::Key_Dead_Acute), 0x0102, 0, 0, 0, 0}, 0x1eae }, // U1EAE # LATIN CAPITAL LETTER A WITH BREVE AND ACUTE ++ { {UNITIZE(Qt::Key_Dead_Acute), 0x0103, 0, 0, 0, 0}, 0x1eaf }, // U1EAF # LATIN SMALL LETTER A WITH BREVE AND ACUTE ++ { {UNITIZE(Qt::Key_Dead_Acute), 0x0112, 0, 0, 0, 0}, 0x1e16 }, // U1E16 # LATIN CAPITAL LETTER E WITH MACRON AND ACUTE ++ { {UNITIZE(Qt::Key_Dead_Acute), 0x0113, 0, 0, 0, 0}, 0x1e17 }, // U1E17 # LATIN SMALL LETTER E WITH MACRON AND ACUTE ++ { {UNITIZE(Qt::Key_Dead_Acute), 0x014c, 0, 0, 0, 0}, 0x1e52 }, // U1E52 # LATIN CAPITAL LETTER O WITH MACRON AND ACUTE ++ { {UNITIZE(Qt::Key_Dead_Acute), 0x014d, 0, 0, 0, 0}, 0x1e53 }, // U1E53 # LATIN SMALL LETTER O WITH MACRON AND ACUTE ++ { {UNITIZE(Qt::Key_Dead_Acute), 0x0168, 0, 0, 0, 0}, 0x1e78 }, // U1E78 # LATIN CAPITAL LETTER U WITH TILDE AND ACUTE ++ { {UNITIZE(Qt::Key_Dead_Acute), 0x0169, 0, 0, 0, 0}, 0x1e79 }, // U1E79 # LATIN SMALL LETTER U WITH TILDE AND ACUTE ++ { {UNITIZE(Qt::Key_Dead_Acute), 0x01A0, 0, 0, 0, 0}, 0x1eda }, // U1EDA # LATIN CAPITAL LETTER O WITH HORN AND ACUTE ++ { {UNITIZE(Qt::Key_Dead_Acute), 0x01A1, 0, 0, 0, 0}, 0x1edb }, // U1EDB # LATIN SMALL LETTER O WITH HORN AND ACUTE ++ { {UNITIZE(Qt::Key_Dead_Acute), 0x01AF, 0, 0, 0, 0}, 0x1ee8 }, // U1EE8 # LATIN CAPITAL LETTER U WITH HORN AND ACUTE ++ { {UNITIZE(Qt::Key_Dead_Acute), 0x01B0, 0, 0, 0, 0}, 0x1ee9 }, // U1EE9 # LATIN SMALL LETTER U WITH HORN AND ACUTE ++ { {UNITIZE(Qt::Key_Dead_Acute), 0x0313, 0x0391, 0, 0, 0}, 0x1f0c }, // U1F0C # GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA ++ { {UNITIZE(Qt::Key_Dead_Acute), 0x0313, 0x0395, 0, 0, 0}, 0x1f1c }, // U1F1C # GREEK CAPITAL LETTER EPSILON WITH PSILI AND OXIA ++ { {UNITIZE(Qt::Key_Dead_Acute), 0x0313, 0x0397, 0, 0, 0}, 0x1f2c }, // U1F2C # GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA ++ { {UNITIZE(Qt::Key_Dead_Acute), 0x0313, 0x0399, 0, 0, 0}, 0x1f3c }, // U1F3C # GREEK CAPITAL LETTER IOTA WITH PSILI AND OXIA ++ { {UNITIZE(Qt::Key_Dead_Acute), 0x0313, 0x039f, 0, 0, 0}, 0x1f4c }, // U1F4C # GREEK CAPITAL LETTER OMICRON WITH PSILI AND OXIA ++ { {UNITIZE(Qt::Key_Dead_Acute), 0x0313, 0x03a9, 0, 0, 0}, 0x1f6c }, // U1F6C # GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA ++ { {UNITIZE(Qt::Key_Dead_Acute), 0x0313, 0x03b1, 0, 0, 0}, 0x1f04 }, // U1F04 # GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA ++ { {UNITIZE(Qt::Key_Dead_Acute), 0x0313, 0x03b5, 0, 0, 0}, 0x1f14 }, // U1F14 # GREEK SMALL LETTER EPSILON WITH PSILI AND OXIA ++ { {UNITIZE(Qt::Key_Dead_Acute), 0x0313, 0x03b7, 0, 0, 0}, 0x1f24 }, // U1F24 # GREEK SMALL LETTER ETA WITH PSILI AND OXIA ++ { {UNITIZE(Qt::Key_Dead_Acute), 0x0313, 0x03b9, 0, 0, 0}, 0x1f34 }, // U1F34 # GREEK SMALL LETTER IOTA WITH PSILI AND OXIA ++ { {UNITIZE(Qt::Key_Dead_Acute), 0x0313, 0x03bf, 0, 0, 0}, 0x1f44 }, // U1F44 # GREEK SMALL LETTER OMICRON WITH PSILI AND OXIA ++ { {UNITIZE(Qt::Key_Dead_Acute), 0x0313, 0x03c5, 0, 0, 0}, 0x1f54 }, // U1F54 # GREEK SMALL LETTER UPSILON WITH PSILI AND OXIA ++ { {UNITIZE(Qt::Key_Dead_Acute), 0x0313, 0x03c9, 0, 0, 0}, 0x1f64 }, // U1F64 # GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA ++ { {UNITIZE(Qt::Key_Dead_Acute), 0x0314, 0x0391, 0, 0, 0}, 0x1f0d }, // U1F0D # GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA ++ { {UNITIZE(Qt::Key_Dead_Acute), 0x0314, 0x0395, 0, 0, 0}, 0x1f1d }, // U1F1D # GREEK CAPITAL LETTER EPSILON WITH DASIA AND OXIA ++ { {UNITIZE(Qt::Key_Dead_Acute), 0x0314, 0x0397, 0, 0, 0}, 0x1f2d }, // U1F2D # GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA ++ { {UNITIZE(Qt::Key_Dead_Acute), 0x0314, 0x0399, 0, 0, 0}, 0x1f3d }, // U1F3D # GREEK CAPITAL LETTER IOTA WITH DASIA AND OXIA ++ { {UNITIZE(Qt::Key_Dead_Acute), 0x0314, 0x039f, 0, 0, 0}, 0x1f4d }, // U1F4D # GREEK CAPITAL LETTER OMICRON WITH DASIA AND OXIA ++ { {UNITIZE(Qt::Key_Dead_Acute), 0x0314, 0x03a5, 0, 0, 0}, 0x1f5d }, // U1F5D # GREEK CAPITAL LETTER UPSILON WITH DASIA AND OXIA ++ { {UNITIZE(Qt::Key_Dead_Acute), 0x0314, 0x03a9, 0, 0, 0}, 0x1f6d }, // U1F6D # GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA ++ { {UNITIZE(Qt::Key_Dead_Acute), 0x0314, 0x03b1, 0, 0, 0}, 0x1f05 }, // U1F05 # GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA ++ { {UNITIZE(Qt::Key_Dead_Acute), 0x0314, 0x03b5, 0, 0, 0}, 0x1f15 }, // U1F15 # GREEK SMALL LETTER EPSILON WITH DASIA AND OXIA ++ { {UNITIZE(Qt::Key_Dead_Acute), 0x0314, 0x03b7, 0, 0, 0}, 0x1f25 }, // U1F25 # GREEK SMALL LETTER ETA WITH DASIA AND OXIA ++ { {UNITIZE(Qt::Key_Dead_Acute), 0x0314, 0x03b9, 0, 0, 0}, 0x1f35 }, // U1F35 # GREEK SMALL LETTER IOTA WITH DASIA AND OXIA ++ { {UNITIZE(Qt::Key_Dead_Acute), 0x0314, 0x03bf, 0, 0, 0}, 0x1f45 }, // U1F45 # GREEK SMALL LETTER OMICRON WITH DASIA AND OXIA ++ { {UNITIZE(Qt::Key_Dead_Acute), 0x0314, 0x03c5, 0, 0, 0}, 0x1f55 }, // U1F55 # GREEK SMALL LETTER UPSILON WITH DASIA AND OXIA ++ { {UNITIZE(Qt::Key_Dead_Acute), 0x0314, 0x03c9, 0, 0, 0}, 0x1f65 }, // U1F65 # GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA ++ { {UNITIZE(Qt::Key_Dead_Acute), 0x0391, 0, 0, 0, 0}, 0x0386 }, // U0386 # GREEK CAPITAL LETTER ALPHA WITH TONOS ++ { {UNITIZE(Qt::Key_Dead_Acute), 0x0395, 0, 0, 0, 0}, 0x0388 }, // U0388 # GREEK CAPITAL LETTER EPSILON WITH TONOS ++ { {UNITIZE(Qt::Key_Dead_Acute), 0x0397, 0, 0, 0, 0}, 0x0389 }, // U0389 # GREEK CAPITAL LETTER ETA WITH TONOS ++ { {UNITIZE(Qt::Key_Dead_Acute), 0x0399, 0, 0, 0, 0}, 0x038a }, // U038A # GREEK CAPITAL LETTER IOTA WITH TONOS ++ { {UNITIZE(Qt::Key_Dead_Acute), 0x039f, 0, 0, 0, 0}, 0x038c }, // U038C # GREEK CAPITAL LETTER OMICRON WITH TONOS ++ { {UNITIZE(Qt::Key_Dead_Acute), 0x03a5, 0, 0, 0, 0}, 0x038e }, // U038E # GREEK CAPITAL LETTER UPSILON WITH TONOS ++ { {UNITIZE(Qt::Key_Dead_Acute), 0x03a9, 0, 0, 0, 0}, 0x038f }, // U038F # GREEK CAPITAL LETTER OMEGA WITH TONOS ++ { {UNITIZE(Qt::Key_Dead_Acute), 0x03b1, 0, 0, 0, 0}, 0x03ac }, // U03AC # GREEK SMALL LETTER ALPHA WITH TONOS ++ { {UNITIZE(Qt::Key_Dead_Acute), 0x03b5, 0, 0, 0, 0}, 0x03ad }, // U03AD # GREEK SMALL LETTER EPSILON WITH TONOS ++ { {UNITIZE(Qt::Key_Dead_Acute), 0x03b7, 0, 0, 0, 0}, 0x03ae }, // U03AE # GREEK SMALL LETTER ETA WITH TONOS ++ { {UNITIZE(Qt::Key_Dead_Acute), 0x03b9, 0, 0, 0, 0}, 0x03af }, // U03AF # GREEK SMALL LETTER IOTA WITH TONOS ++ { {UNITIZE(Qt::Key_Dead_Acute), 0x03bf, 0, 0, 0, 0}, 0x03cc }, // U03CC # GREEK SMALL LETTER OMICRON WITH TONOS ++ { {UNITIZE(Qt::Key_Dead_Acute), 0x03c5, 0, 0, 0, 0}, 0x03cd }, // U03CD # GREEK SMALL LETTER UPSILON WITH TONOS ++ { {UNITIZE(Qt::Key_Dead_Acute), 0x03c9, 0, 0, 0, 0}, 0x03ce }, // U03CE # GREEK SMALL LETTER OMEGA WITH TONOS ++ { {UNITIZE(Qt::Key_Dead_Acute), 0x03ca, 0, 0, 0, 0}, 0x0390 }, // U0390 # GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS ++ { {UNITIZE(Qt::Key_Dead_Acute), 0x03cb, 0, 0, 0, 0}, 0x03b0 }, // U03B0 # GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS ++ { {UNITIZE(Qt::Key_Dead_Acute), 0x0413, 0, 0, 0, 0}, 0x0403 }, // U0403 # CYRILLIC CAPITAL LETTER GJE ++ { {UNITIZE(Qt::Key_Dead_Acute), 0x041a, 0, 0, 0, 0}, 0x040c }, // U040C # CYRILLIC CAPITAL LETTER KJE ++ { {UNITIZE(Qt::Key_Dead_Acute), 0x0433, 0, 0, 0, 0}, 0x0453 }, // U0453 # CYRILLIC SMALL LETTER GJE ++ { {UNITIZE(Qt::Key_Dead_Acute), 0x043a, 0, 0, 0, 0}, 0x045c }, // U045C # CYRILLIC SMALL LETTER KJE ++ { {UNITIZE(Qt::Key_Dead_Acute), 0x1f00, 0, 0, 0, 0}, 0x1f04 }, // U1F04 # GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA ++ { {UNITIZE(Qt::Key_Dead_Acute), 0x1f01, 0, 0, 0, 0}, 0x1f05 }, // U1F05 # GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA ++ { {UNITIZE(Qt::Key_Dead_Acute), 0x1f08, 0, 0, 0, 0}, 0x1f0c }, // U1F0C # GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA ++ { {UNITIZE(Qt::Key_Dead_Acute), 0x1f09, 0, 0, 0, 0}, 0x1f0d }, // U1F0D # GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA ++ { {UNITIZE(Qt::Key_Dead_Acute), 0x1f10, 0, 0, 0, 0}, 0x1f14 }, // U1F14 # GREEK SMALL LETTER EPSILON WITH PSILI AND OXIA ++ { {UNITIZE(Qt::Key_Dead_Acute), 0x1f11, 0, 0, 0, 0}, 0x1f15 }, // U1F15 # GREEK SMALL LETTER EPSILON WITH DASIA AND OXIA ++ { {UNITIZE(Qt::Key_Dead_Acute), 0x1f18, 0, 0, 0, 0}, 0x1f1c }, // U1F1C # GREEK CAPITAL LETTER EPSILON WITH PSILI AND OXIA ++ { {UNITIZE(Qt::Key_Dead_Acute), 0x1f19, 0, 0, 0, 0}, 0x1f1d }, // U1F1D # GREEK CAPITAL LETTER EPSILON WITH DASIA AND OXIA ++ { {UNITIZE(Qt::Key_Dead_Acute), 0x1f20, 0, 0, 0, 0}, 0x1f24 }, // U1F24 # GREEK SMALL LETTER ETA WITH PSILI AND OXIA ++ { {UNITIZE(Qt::Key_Dead_Acute), 0x1f21, 0, 0, 0, 0}, 0x1f25 }, // U1F25 # GREEK SMALL LETTER ETA WITH DASIA AND OXIA ++ { {UNITIZE(Qt::Key_Dead_Acute), 0x1f28, 0, 0, 0, 0}, 0x1f2c }, // U1F2C # GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA ++ { {UNITIZE(Qt::Key_Dead_Acute), 0x1f29, 0, 0, 0, 0}, 0x1f2d }, // U1F2D # GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA ++ { {UNITIZE(Qt::Key_Dead_Acute), 0x1f30, 0, 0, 0, 0}, 0x1f34 }, // U1F34 # GREEK SMALL LETTER IOTA WITH PSILI AND OXIA ++ { {UNITIZE(Qt::Key_Dead_Acute), 0x1f31, 0, 0, 0, 0}, 0x1f35 }, // U1F35 # GREEK SMALL LETTER IOTA WITH DASIA AND OXIA ++ { {UNITIZE(Qt::Key_Dead_Acute), 0x1f38, 0, 0, 0, 0}, 0x1f3c }, // U1F3C # GREEK CAPITAL LETTER IOTA WITH PSILI AND OXIA ++ { {UNITIZE(Qt::Key_Dead_Acute), 0x1f39, 0, 0, 0, 0}, 0x1f3d }, // U1F3D # GREEK CAPITAL LETTER IOTA WITH DASIA AND OXIA ++ { {UNITIZE(Qt::Key_Dead_Acute), 0x1f40, 0, 0, 0, 0}, 0x1f44 }, // U1F44 # GREEK SMALL LETTER OMICRON WITH PSILI AND OXIA ++ { {UNITIZE(Qt::Key_Dead_Acute), 0x1f41, 0, 0, 0, 0}, 0x1f45 }, // U1F45 # GREEK SMALL LETTER OMICRON WITH DASIA AND OXIA ++ { {UNITIZE(Qt::Key_Dead_Acute), 0x1f48, 0, 0, 0, 0}, 0x1f4c }, // U1F4C # GREEK CAPITAL LETTER OMICRON WITH PSILI AND OXIA ++ { {UNITIZE(Qt::Key_Dead_Acute), 0x1f49, 0, 0, 0, 0}, 0x1f4d }, // U1F4D # GREEK CAPITAL LETTER OMICRON WITH DASIA AND OXIA ++ { {UNITIZE(Qt::Key_Dead_Acute), 0x1f50, 0, 0, 0, 0}, 0x1f54 }, // U1F54 # GREEK SMALL LETTER UPSILON WITH PSILI AND OXIA ++ { {UNITIZE(Qt::Key_Dead_Acute), 0x1f51, 0, 0, 0, 0}, 0x1f55 }, // U1F55 # GREEK SMALL LETTER UPSILON WITH DASIA AND OXIA ++ { {UNITIZE(Qt::Key_Dead_Acute), 0x1f59, 0, 0, 0, 0}, 0x1f5d }, // U1F5D # GREEK CAPITAL LETTER UPSILON WITH DASIA AND OXIA ++ { {UNITIZE(Qt::Key_Dead_Acute), 0x1f60, 0, 0, 0, 0}, 0x1f64 }, // U1F64 # GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA ++ { {UNITIZE(Qt::Key_Dead_Acute), 0x1f61, 0, 0, 0, 0}, 0x1f65 }, // U1F65 # GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA ++ { {UNITIZE(Qt::Key_Dead_Acute), 0x1f68, 0, 0, 0, 0}, 0x1f6c }, // U1F6C # GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA ++ { {UNITIZE(Qt::Key_Dead_Acute), 0x1f69, 0, 0, 0, 0}, 0x1f6d }, // U1F6D # GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA ++// /* broken */ { {UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Multi_key), 0x0000, 0x004f, 0, 0}, 0x01fe }, // U01FE # LATIN CAPITAL LETTER O WITH STROKE AND ACUTE ++// /* broken */ { {UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Multi_key), 0x0000, 0x006f, 0, 0}, 0x01ff }, // U01FF # LATIN SMALL LETTER O WITH STROKE AND ACUTE ++ { {UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Multi_key), 0x0022, 0x0049, 0, 0}, 0x1e2e }, // U1E2E # LATIN CAPITAL LETTER I WITH DIAERESIS AND ACUTE ++ { {UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Multi_key), 0x0022, 0x0055, 0, 0}, 0x01d7 }, // U01D7 # LATIN CAPITAL LETTER U WITH DIAERESIS AND ACUTE ++ { {UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Multi_key), 0x0022, 0x0069, 0, 0}, 0x1e2f }, // U1E2F # LATIN SMALL LETTER I WITH DIAERESIS AND ACUTE ++ { {UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Multi_key), 0x0022, 0x0075, 0, 0}, 0x01d8 }, // U01D8 # LATIN SMALL LETTER U WITH DIAERESIS AND ACUTE ++ { {UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Multi_key), 0x0022, 0x03b9, 0, 0}, 0x0390 }, // U0390 # GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS ++ { {UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Multi_key), 0x0022, 0x03c5, 0, 0}, 0x03b0 }, // U03B0 # GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS ++ { {UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0391, 0, 0}, 0x1f0d }, // U1F0D # GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA ++ { {UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0395, 0, 0}, 0x1f1d }, // U1F1D # GREEK CAPITAL LETTER EPSILON WITH DASIA AND OXIA ++ { {UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0397, 0, 0}, 0x1f2d }, // U1F2D # GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA ++ { {UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0399, 0, 0}, 0x1f3d }, // U1F3D # GREEK CAPITAL LETTER IOTA WITH DASIA AND OXIA ++ { {UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Multi_key), 0x0028, 0x039f, 0, 0}, 0x1f4d }, // U1F4D # GREEK CAPITAL LETTER OMICRON WITH DASIA AND OXIA ++ { {UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Multi_key), 0x0028, 0x03a5, 0, 0}, 0x1f5d }, // U1F5D # GREEK CAPITAL LETTER UPSILON WITH DASIA AND OXIA ++ { {UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Multi_key), 0x0028, 0x03a9, 0, 0}, 0x1f6d }, // U1F6D # GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA ++ { {UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Multi_key), 0x0028, 0x03b1, 0, 0}, 0x1f05 }, // U1F05 # GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA ++ { {UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Multi_key), 0x0028, 0x03b5, 0, 0}, 0x1f15 }, // U1F15 # GREEK SMALL LETTER EPSILON WITH DASIA AND OXIA ++ { {UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Multi_key), 0x0028, 0x03b7, 0, 0}, 0x1f25 }, // U1F25 # GREEK SMALL LETTER ETA WITH DASIA AND OXIA ++ { {UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Multi_key), 0x0028, 0x03b9, 0, 0}, 0x1f35 }, // U1F35 # GREEK SMALL LETTER IOTA WITH DASIA AND OXIA ++ { {UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Multi_key), 0x0028, 0x03bf, 0, 0}, 0x1f45 }, // U1F45 # GREEK SMALL LETTER OMICRON WITH DASIA AND OXIA ++ { {UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Multi_key), 0x0028, 0x03c5, 0, 0}, 0x1f55 }, // U1F55 # GREEK SMALL LETTER UPSILON WITH DASIA AND OXIA ++ { {UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Multi_key), 0x0028, 0x03c9, 0, 0}, 0x1f65 }, // U1F65 # GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA ++ { {UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Multi_key), 0x0029, 0x0391, 0, 0}, 0x1f0c }, // U1F0C # GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA ++ { {UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Multi_key), 0x0029, 0x0395, 0, 0}, 0x1f1c }, // U1F1C # GREEK CAPITAL LETTER EPSILON WITH PSILI AND OXIA ++ { {UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Multi_key), 0x0029, 0x0397, 0, 0}, 0x1f2c }, // U1F2C # GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA ++ { {UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Multi_key), 0x0029, 0x0399, 0, 0}, 0x1f3c }, // U1F3C # GREEK CAPITAL LETTER IOTA WITH PSILI AND OXIA ++ { {UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Multi_key), 0x0029, 0x039f, 0, 0}, 0x1f4c }, // U1F4C # GREEK CAPITAL LETTER OMICRON WITH PSILI AND OXIA ++ { {UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Multi_key), 0x0029, 0x03a9, 0, 0}, 0x1f6c }, // U1F6C # GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA ++ { {UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Multi_key), 0x0029, 0x03b1, 0, 0}, 0x1f04 }, // U1F04 # GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA ++ { {UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Multi_key), 0x0029, 0x03b5, 0, 0}, 0x1f14 }, // U1F14 # GREEK SMALL LETTER EPSILON WITH PSILI AND OXIA ++ { {UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Multi_key), 0x0029, 0x03b7, 0, 0}, 0x1f24 }, // U1F24 # GREEK SMALL LETTER ETA WITH PSILI AND OXIA ++ { {UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Multi_key), 0x0029, 0x03b9, 0, 0}, 0x1f34 }, // U1F34 # GREEK SMALL LETTER IOTA WITH PSILI AND OXIA ++ { {UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Multi_key), 0x0029, 0x03bf, 0, 0}, 0x1f44 }, // U1F44 # GREEK SMALL LETTER OMICRON WITH PSILI AND OXIA ++ { {UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Multi_key), 0x0029, 0x03c5, 0, 0}, 0x1f54 }, // U1F54 # GREEK SMALL LETTER UPSILON WITH PSILI AND OXIA ++ { {UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Multi_key), 0x0029, 0x03c9, 0, 0}, 0x1f64 }, // U1F64 # GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA ++ { {UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Multi_key), 0x002b, 0x004f, 0, 0}, 0x1eda }, // U1EDA # LATIN CAPITAL LETTER O WITH HORN AND ACUTE ++ { {UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Multi_key), 0x002b, 0x0055, 0, 0}, 0x1ee8 }, // U1EE8 # LATIN CAPITAL LETTER U WITH HORN AND ACUTE ++ { {UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Multi_key), 0x002b, 0x006f, 0, 0}, 0x1edb }, // U1EDB # LATIN SMALL LETTER O WITH HORN AND ACUTE ++ { {UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Multi_key), 0x002b, 0x0075, 0, 0}, 0x1ee9 }, // U1EE9 # LATIN SMALL LETTER U WITH HORN AND ACUTE ++ { {UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Multi_key), 0x002c, 0x0043, 0, 0}, 0x1e08 }, // U1E08 # LATIN CAPITAL LETTER C WITH CEDILLA AND ACUTE ++ { {UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Multi_key), 0x002c, 0x0063, 0, 0}, 0x1e09 }, // U1E09 # LATIN SMALL LETTER C WITH CEDILLA AND ACUTE ++ { {UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Multi_key), 0x002f, 0x004f, 0, 0}, 0x01fe }, // U01FE # LATIN CAPITAL LETTER O WITH STROKE AND ACUTE ++ { {UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Multi_key), 0x002f, 0x006f, 0, 0}, 0x01ff }, // U01FF # LATIN SMALL LETTER O WITH STROKE AND ACUTE ++ { {UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Multi_key), 0x0055, 0x0041, 0, 0}, 0x1eae }, // U1EAE # LATIN CAPITAL LETTER A WITH BREVE AND ACUTE ++ { {UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Multi_key), 0x0055, 0x0061, 0, 0}, 0x1eaf }, // U1EAF # LATIN SMALL LETTER A WITH BREVE AND ACUTE ++ { {UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Multi_key), 0x005e, 0x0041, 0, 0}, 0x1ea4 }, // U1EA4 # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND ACUTE ++ { {UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Multi_key), 0x005e, 0x0045, 0, 0}, 0x1ebe }, // U1EBE # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND ACUTE ++ { {UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Multi_key), 0x005e, 0x004f, 0, 0}, 0x1ed0 }, // U1ED0 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND ACUTE ++ { {UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Multi_key), 0x005e, 0x0061, 0, 0}, 0x1ea5 }, // U1EA5 # LATIN SMALL LETTER A WITH CIRCUMFLEX AND ACUTE ++ { {UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Multi_key), 0x005e, 0x0065, 0, 0}, 0x1ebf }, // U1EBF # LATIN SMALL LETTER E WITH CIRCUMFLEX AND ACUTE ++ { {UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Multi_key), 0x005e, 0x006f, 0, 0}, 0x1ed1 }, // U1ED1 # LATIN SMALL LETTER O WITH CIRCUMFLEX AND ACUTE ++ { {UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0045, 0, 0}, 0x1e16 }, // U1E16 # LATIN CAPITAL LETTER E WITH MACRON AND ACUTE ++ { {UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Multi_key), 0x005f, 0x004f, 0, 0}, 0x1e52 }, // U1E52 # LATIN CAPITAL LETTER O WITH MACRON AND ACUTE ++ { {UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0065, 0, 0}, 0x1e17 }, // U1E17 # LATIN SMALL LETTER E WITH MACRON AND ACUTE ++ { {UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Multi_key), 0x005f, 0x006f, 0, 0}, 0x1e53 }, // U1E53 # LATIN SMALL LETTER O WITH MACRON AND ACUTE ++ { {UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Multi_key), 0x0062, 0x0041, 0, 0}, 0x1eae }, // U1EAE # LATIN CAPITAL LETTER A WITH BREVE AND ACUTE ++ { {UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Multi_key), 0x0062, 0x0061, 0, 0}, 0x1eaf }, // U1EAF # LATIN SMALL LETTER A WITH BREVE AND ACUTE ++ { {UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Multi_key), 0x006f, 0x0041, 0, 0}, 0x01fa }, // U01FA # LATIN CAPITAL LETTER A WITH RING ABOVE AND ACUTE ++ { {UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Multi_key), 0x006f, 0x0061, 0, 0}, 0x01fb }, // U01FB # LATIN SMALL LETTER A WITH RING ABOVE AND ACUTE ++ { {UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Multi_key), 0x007e, 0x004f, 0, 0}, 0x1e4c }, // U1E4C # LATIN CAPITAL LETTER O WITH TILDE AND ACUTE ++ { {UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Multi_key), 0x007e, 0x0055, 0, 0}, 0x1e78 }, // U1E78 # LATIN CAPITAL LETTER U WITH TILDE AND ACUTE ++ { {UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Multi_key), 0x007e, 0x006f, 0, 0}, 0x1e4d }, // U1E4D # LATIN SMALL LETTER O WITH TILDE AND ACUTE ++ { {UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Multi_key), 0x007e, 0x0075, 0, 0}, 0x1e79 }, // U1E79 # LATIN SMALL LETTER U WITH TILDE AND ACUTE ++ { {UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Multi_key), 0x00af, 0x0045, 0, 0}, 0x1e16 }, // U1E16 # LATIN CAPITAL LETTER E WITH MACRON AND ACUTE ++ { {UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Multi_key), 0x00af, 0x004f, 0, 0}, 0x1e52 }, // U1E52 # LATIN CAPITAL LETTER O WITH MACRON AND ACUTE ++ { {UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Multi_key), 0x00af, 0x0065, 0, 0}, 0x1e17 }, // U1E17 # LATIN SMALL LETTER E WITH MACRON AND ACUTE ++ { {UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Multi_key), 0x00af, 0x006f, 0, 0}, 0x1e53 }, // U1E53 # LATIN SMALL LETTER O WITH MACRON AND ACUTE ++ { {UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Dead_Acute), 0, 0, 0, 0}, 0x00b4 }, // acute ++ { {UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Dead_Circumflex), 0x0041, 0, 0, 0}, 0x1ea4 }, // U1EA4 # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND ACUTE ++ { {UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Dead_Circumflex), 0x0045, 0, 0, 0}, 0x1ebe }, // U1EBE # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND ACUTE ++ { {UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Dead_Circumflex), 0x004f, 0, 0, 0}, 0x1ed0 }, // U1ED0 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND ACUTE ++ { {UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Dead_Circumflex), 0x0061, 0, 0, 0}, 0x1ea5 }, // U1EA5 # LATIN SMALL LETTER A WITH CIRCUMFLEX AND ACUTE ++ { {UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Dead_Circumflex), 0x0065, 0, 0, 0}, 0x1ebf }, // U1EBF # LATIN SMALL LETTER E WITH CIRCUMFLEX AND ACUTE ++ { {UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Dead_Circumflex), 0x006f, 0, 0, 0}, 0x1ed1 }, // U1ED1 # LATIN SMALL LETTER O WITH CIRCUMFLEX AND ACUTE ++ { {UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Dead_Tilde), 0x004f, 0, 0, 0}, 0x1e4c }, // U1E4C # LATIN CAPITAL LETTER O WITH TILDE AND ACUTE ++ { {UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Dead_Tilde), 0x0055, 0, 0, 0}, 0x1e78 }, // U1E78 # LATIN CAPITAL LETTER U WITH TILDE AND ACUTE ++ { {UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Dead_Tilde), 0x006f, 0, 0, 0}, 0x1e4d }, // U1E4D # LATIN SMALL LETTER O WITH TILDE AND ACUTE ++ { {UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Dead_Tilde), 0x0075, 0, 0, 0}, 0x1e79 }, // U1E79 # LATIN SMALL LETTER U WITH TILDE AND ACUTE ++ { {UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Dead_Macron), 0x0045, 0, 0, 0}, 0x1e16 }, // U1E16 # LATIN CAPITAL LETTER E WITH MACRON AND ACUTE ++ { {UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Dead_Macron), 0x004f, 0, 0, 0}, 0x1e52 }, // U1E52 # LATIN CAPITAL LETTER O WITH MACRON AND ACUTE ++ { {UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Dead_Macron), 0x0065, 0, 0, 0}, 0x1e17 }, // U1E17 # LATIN SMALL LETTER E WITH MACRON AND ACUTE ++ { {UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Dead_Macron), 0x006f, 0, 0, 0}, 0x1e53 }, // U1E53 # LATIN SMALL LETTER O WITH MACRON AND ACUTE ++ { {UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Dead_Breve), 0x0041, 0, 0, 0}, 0x1eae }, // U1EAE # LATIN CAPITAL LETTER A WITH BREVE AND ACUTE ++ { {UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Dead_Breve), 0x0061, 0, 0, 0}, 0x1eaf }, // U1EAF # LATIN SMALL LETTER A WITH BREVE AND ACUTE ++ { {UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Dead_Diaeresis), 0x0049, 0, 0, 0}, 0x1e2e }, // U1E2E # LATIN CAPITAL LETTER I WITH DIAERESIS AND ACUTE ++ { {UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Dead_Diaeresis), 0x0055, 0, 0, 0}, 0x01d7 }, // U01D7 # LATIN CAPITAL LETTER U WITH DIAERESIS AND ACUTE ++ { {UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Dead_Diaeresis), 0x0069, 0, 0, 0}, 0x1e2f }, // U1E2F # LATIN SMALL LETTER I WITH DIAERESIS AND ACUTE ++ { {UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Dead_Diaeresis), 0x0075, 0, 0, 0}, 0x01d8 }, // U01D8 # LATIN SMALL LETTER U WITH DIAERESIS AND ACUTE ++ { {UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Dead_Diaeresis), 0x03b9, 0, 0, 0}, 0x0390 }, // U0390 # GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS ++ { {UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Dead_Diaeresis), 0x03c5, 0, 0, 0}, 0x03b0 }, // U03B0 # GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS ++ { {UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Dead_Abovering), 0x0041, 0, 0, 0}, 0x01fa }, // U01FA # LATIN CAPITAL LETTER A WITH RING ABOVE AND ACUTE ++ { {UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Dead_Abovering), 0x0061, 0, 0, 0}, 0x01fb }, // U01FB # LATIN SMALL LETTER A WITH RING ABOVE AND ACUTE ++ { {UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Dead_Cedilla), 0x0043, 0, 0, 0}, 0x1e08 }, // U1E08 # LATIN CAPITAL LETTER C WITH CEDILLA AND ACUTE ++ { {UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Dead_Cedilla), 0x0063, 0, 0, 0}, 0x1e09 }, // U1E09 # LATIN SMALL LETTER C WITH CEDILLA AND ACUTE ++ { {UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Dead_Horn), 0x004f, 0, 0, 0}, 0x1eda }, // U1EDA # LATIN CAPITAL LETTER O WITH HORN AND ACUTE ++ { {UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Dead_Horn), 0x0055, 0, 0, 0}, 0x1ee8 }, // U1EE8 # LATIN CAPITAL LETTER U WITH HORN AND ACUTE ++ { {UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Dead_Horn), 0x006f, 0, 0, 0}, 0x1edb }, // U1EDB # LATIN SMALL LETTER O WITH HORN AND ACUTE ++ { {UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Dead_Horn), 0x0075, 0, 0, 0}, 0x1ee9 }, // U1EE9 # LATIN SMALL LETTER U WITH HORN AND ACUTE ++// /* broken */ { {UNITIZE(Qt::Key_Dead_Circumflex), 0x0000, 0, 0, 0, 0}, 0x207a }, // U207A # SUPERSCRIPT PLUS SIGN ++// /* broken */ { {UNITIZE(Qt::Key_Dead_Circumflex), 0x0000, 0, 0, 0, 0}, 0x207c }, // U207C # SUPERSCRIPT EQUALS SIGN ++// /* broken */ { {UNITIZE(Qt::Key_Dead_Circumflex), 0x0000, 0, 0, 0, 0}, 0x00b2 }, // U00B2 # SUPERSCRIPT TWO ++// /* broken */ { {UNITIZE(Qt::Key_Dead_Circumflex), 0x0000, 0, 0, 0, 0}, 0x2079 }, // U2079 # SUPERSCRIPT NINE ++// /* broken */ { {UNITIZE(Qt::Key_Dead_Circumflex), 0x0000, 0, 0, 0, 0}, 0x00b3 }, // U00B3 # SUPERSCRIPT THREE ++// /* broken */ { {UNITIZE(Qt::Key_Dead_Circumflex), 0x0000, 0, 0, 0, 0}, 0x00b9 }, // U00B9 # SUPERSCRIPT ONE ++// /* broken */ { {UNITIZE(Qt::Key_Dead_Circumflex), 0x0000, 0, 0, 0, 0}, 0x2070 }, // U2070 # SUPERSCRIPT ZERO ++// /* broken */ { {UNITIZE(Qt::Key_Dead_Circumflex), 0x0000, 0, 0, 0, 0}, 0x2078 }, // U2078 # SUPERSCRIPT EIGHT ++// /* broken */ { {UNITIZE(Qt::Key_Dead_Circumflex), 0x0000, 0, 0, 0, 0}, 0x2074 }, // U2074 # SUPERSCRIPT FOUR ++// /* broken */ { {UNITIZE(Qt::Key_Dead_Circumflex), 0x0000, 0, 0, 0, 0}, 0x2075 }, // U2075 # SUPERSCRIPT FIVE ++// /* broken */ { {UNITIZE(Qt::Key_Dead_Circumflex), 0x0000, 0, 0, 0, 0}, 0x2077 }, // U2077 # SUPERSCRIPT SEVEN ++// /* broken */ { {UNITIZE(Qt::Key_Dead_Circumflex), 0x0000, 0, 0, 0, 0}, 0x00b2 }, // U00B2 # SUPERSCRIPT TWO ++// /* broken */ { {UNITIZE(Qt::Key_Dead_Circumflex), 0x0000, 0, 0, 0, 0}, 0x2076 }, // U2076 # SUPERSCRIPT SIX ++// /* broken */ { {UNITIZE(Qt::Key_Dead_Circumflex), 0x0000, 0x0041, 0, 0, 0}, 0x1eac }, // U1EAC # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND DOT BELOW ++// /* broken */ { {UNITIZE(Qt::Key_Dead_Circumflex), 0x0000, 0x0045, 0, 0, 0}, 0x1ec6 }, // U1EC6 # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND DOT BELOW ++// /* broken */ { {UNITIZE(Qt::Key_Dead_Circumflex), 0x0000, 0x004f, 0, 0, 0}, 0x1ed8 }, // U1ED8 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND DOT BELOW ++// /* broken */ { {UNITIZE(Qt::Key_Dead_Circumflex), 0x0000, 0x0061, 0, 0, 0}, 0x1ead }, // U1EAD # LATIN SMALL LETTER A WITH CIRCUMFLEX AND DOT BELOW ++// /* broken */ { {UNITIZE(Qt::Key_Dead_Circumflex), 0x0000, 0x0065, 0, 0, 0}, 0x1ec7 }, // U1EC7 # LATIN SMALL LETTER E WITH CIRCUMFLEX AND DOT BELOW ++// /* broken */ { {UNITIZE(Qt::Key_Dead_Circumflex), 0x0000, 0x006f, 0, 0, 0}, 0x1ed9 }, // U1ED9 # LATIN SMALL LETTER O WITH CIRCUMFLEX AND DOT BELOW ++ { {UNITIZE(Qt::Key_Dead_Circumflex), 0x0020, 0, 0, 0, 0}, 0x005e }, // asciicircum ++ { {UNITIZE(Qt::Key_Dead_Circumflex), 0x0028, 0, 0, 0, 0}, 0x207d }, // U207D # SUPERSCRIPT LEFT PARENTHESIS ++ { {UNITIZE(Qt::Key_Dead_Circumflex), 0x0029, 0, 0, 0, 0}, 0x207e }, // U207E # SUPERSCRIPT RIGHT PARENTHESIS ++ { {UNITIZE(Qt::Key_Dead_Circumflex), 0x002b, 0, 0, 0, 0}, 0x207a }, // U207A # SUPERSCRIPT PLUS SIGN ++ { {UNITIZE(Qt::Key_Dead_Circumflex), 0x0030, 0, 0, 0, 0}, 0x2070 }, // U2070 # SUPERSCRIPT ZERO ++ { {UNITIZE(Qt::Key_Dead_Circumflex), 0x0031, 0, 0, 0, 0}, 0x00b9 }, // U00B9 # SUPERSCRIPT ONE ++ { {UNITIZE(Qt::Key_Dead_Circumflex), 0x0032, 0, 0, 0, 0}, 0x00b2 }, // U00B2 # SUPERSCRIPT TWO ++ { {UNITIZE(Qt::Key_Dead_Circumflex), 0x0033, 0, 0, 0, 0}, 0x00b3 }, // U00B3 # SUPERSCRIPT THREE ++ { {UNITIZE(Qt::Key_Dead_Circumflex), 0x0034, 0, 0, 0, 0}, 0x2074 }, // U2074 # SUPERSCRIPT FOUR ++ { {UNITIZE(Qt::Key_Dead_Circumflex), 0x0035, 0, 0, 0, 0}, 0x2075 }, // U2075 # SUPERSCRIPT FIVE ++ { {UNITIZE(Qt::Key_Dead_Circumflex), 0x0036, 0, 0, 0, 0}, 0x2076 }, // U2076 # SUPERSCRIPT SIX ++ { {UNITIZE(Qt::Key_Dead_Circumflex), 0x0037, 0, 0, 0, 0}, 0x2077 }, // U2077 # SUPERSCRIPT SEVEN ++ { {UNITIZE(Qt::Key_Dead_Circumflex), 0x0038, 0, 0, 0, 0}, 0x2078 }, // U2078 # SUPERSCRIPT EIGHT ++ { {UNITIZE(Qt::Key_Dead_Circumflex), 0x0039, 0, 0, 0, 0}, 0x2079 }, // U2079 # SUPERSCRIPT NINE ++ { {UNITIZE(Qt::Key_Dead_Circumflex), 0x003d, 0, 0, 0, 0}, 0x207c }, // U207C # SUPERSCRIPT EQUALS SIGN ++ { {UNITIZE(Qt::Key_Dead_Circumflex), 0x0041, 0, 0, 0, 0}, 0x00c2 }, // U00C2 # LATIN CAPITAL LETTER A WITH CIRCUMFLEX ++ { {UNITIZE(Qt::Key_Dead_Circumflex), 0x0043, 0, 0, 0, 0}, 0x0108 }, // U0108 # LATIN CAPITAL LETTER C WITH CIRCUMFLEX ++ { {UNITIZE(Qt::Key_Dead_Circumflex), 0x0045, 0, 0, 0, 0}, 0x00ca }, // U00CA # LATIN CAPITAL LETTER E WITH CIRCUMFLEX ++ { {UNITIZE(Qt::Key_Dead_Circumflex), 0x0047, 0, 0, 0, 0}, 0x011c }, // U011C # LATIN CAPITAL LETTER G WITH CIRCUMFLEX ++ { {UNITIZE(Qt::Key_Dead_Circumflex), 0x0048, 0, 0, 0, 0}, 0x0124 }, // U0124 # LATIN CAPITAL LETTER H WITH CIRCUMFLEX ++ { {UNITIZE(Qt::Key_Dead_Circumflex), 0x0049, 0, 0, 0, 0}, 0x00ce }, // U00CE # LATIN CAPITAL LETTER I WITH CIRCUMFLEX ++ { {UNITIZE(Qt::Key_Dead_Circumflex), 0x004a, 0, 0, 0, 0}, 0x0134 }, // U0134 # LATIN CAPITAL LETTER J WITH CIRCUMFLEX ++ { {UNITIZE(Qt::Key_Dead_Circumflex), 0x004f, 0, 0, 0, 0}, 0x00d4 }, // U00D4 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX ++ { {UNITIZE(Qt::Key_Dead_Circumflex), 0x0053, 0, 0, 0, 0}, 0x015c }, // U015C # LATIN CAPITAL LETTER S WITH CIRCUMFLEX ++ { {UNITIZE(Qt::Key_Dead_Circumflex), 0x0055, 0, 0, 0, 0}, 0x00db }, // U00DB # LATIN CAPITAL LETTER U WITH CIRCUMFLEX ++ { {UNITIZE(Qt::Key_Dead_Circumflex), 0x0057, 0, 0, 0, 0}, 0x0174 }, // U0174 # LATIN CAPITAL LETTER W WITH CIRCUMFLEX ++ { {UNITIZE(Qt::Key_Dead_Circumflex), 0x0059, 0, 0, 0, 0}, 0x0176 }, // U0176 # LATIN CAPITAL LETTER Y WITH CIRCUMFLEX ++ { {UNITIZE(Qt::Key_Dead_Circumflex), 0x005a, 0, 0, 0, 0}, 0x1e90 }, // U1E90 # LATIN CAPITAL LETTER Z WITH CIRCUMFLEX ++ { {UNITIZE(Qt::Key_Dead_Circumflex), 0x0061, 0, 0, 0, 0}, 0x00e2 }, // U00E2 # LATIN SMALL LETTER A WITH CIRCUMFLEX ++ { {UNITIZE(Qt::Key_Dead_Circumflex), 0x0063, 0, 0, 0, 0}, 0x0109 }, // U0109 # LATIN SMALL LETTER C WITH CIRCUMFLEX ++ { {UNITIZE(Qt::Key_Dead_Circumflex), 0x0065, 0, 0, 0, 0}, 0x00ea }, // U00EA # LATIN SMALL LETTER E WITH CIRCUMFLEX ++ { {UNITIZE(Qt::Key_Dead_Circumflex), 0x0067, 0, 0, 0, 0}, 0x011d }, // U011D # LATIN SMALL LETTER G WITH CIRCUMFLEX ++ { {UNITIZE(Qt::Key_Dead_Circumflex), 0x0068, 0, 0, 0, 0}, 0x0125 }, // U0125 # LATIN SMALL LETTER H WITH CIRCUMFLEX ++ { {UNITIZE(Qt::Key_Dead_Circumflex), 0x0069, 0, 0, 0, 0}, 0x00ee }, // U00EE # LATIN SMALL LETTER I WITH CIRCUMFLEX ++ { {UNITIZE(Qt::Key_Dead_Circumflex), 0x006a, 0, 0, 0, 0}, 0x0135 }, // U0135 # LATIN SMALL LETTER J WITH CIRCUMFLEX ++ { {UNITIZE(Qt::Key_Dead_Circumflex), 0x006f, 0, 0, 0, 0}, 0x00f4 }, // U00F4 # LATIN SMALL LETTER O WITH CIRCUMFLEX ++ { {UNITIZE(Qt::Key_Dead_Circumflex), 0x0073, 0, 0, 0, 0}, 0x015d }, // U015D # LATIN SMALL LETTER S WITH CIRCUMFLEX ++ { {UNITIZE(Qt::Key_Dead_Circumflex), 0x0075, 0, 0, 0, 0}, 0x00fb }, // U00FB # LATIN SMALL LETTER U WITH CIRCUMFLEX ++ { {UNITIZE(Qt::Key_Dead_Circumflex), 0x0077, 0, 0, 0, 0}, 0x0175 }, // U0175 # LATIN SMALL LETTER W WITH CIRCUMFLEX ++ { {UNITIZE(Qt::Key_Dead_Circumflex), 0x0079, 0, 0, 0, 0}, 0x0177 }, // U0177 # LATIN SMALL LETTER Y WITH CIRCUMFLEX ++ { {UNITIZE(Qt::Key_Dead_Circumflex), 0x007a, 0, 0, 0, 0}, 0x1e91 }, // U1E91 # LATIN SMALL LETTER Z WITH CIRCUMFLEX ++ { {UNITIZE(Qt::Key_Dead_Circumflex), 0x1ea0, 0, 0, 0, 0}, 0x1eac }, // U1EAC # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND DOT BELOW ++ { {UNITIZE(Qt::Key_Dead_Circumflex), 0x1ea1, 0, 0, 0, 0}, 0x1ead }, // U1EAD # LATIN SMALL LETTER A WITH CIRCUMFLEX AND DOT BELOW ++ { {UNITIZE(Qt::Key_Dead_Circumflex), 0x1eb8, 0, 0, 0, 0}, 0x1ec6 }, // U1EC6 # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND DOT BELOW ++ { {UNITIZE(Qt::Key_Dead_Circumflex), 0x1eb9, 0, 0, 0, 0}, 0x1ec7 }, // U1EC7 # LATIN SMALL LETTER E WITH CIRCUMFLEX AND DOT BELOW ++ { {UNITIZE(Qt::Key_Dead_Circumflex), 0x1ecc, 0, 0, 0, 0}, 0x1ed8 }, // U1ED8 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND DOT BELOW ++ { {UNITIZE(Qt::Key_Dead_Circumflex), 0x1ecd, 0, 0, 0, 0}, 0x1ed9 }, // U1ED9 # LATIN SMALL LETTER O WITH CIRCUMFLEX AND DOT BELOW ++ { {UNITIZE(Qt::Key_Dead_Circumflex), 0x2212, 0, 0, 0, 0}, 0x207b }, // U207B # SUPERSCRIPT MINUS ++ { {UNITIZE(Qt::Key_Dead_Circumflex), 0x4e00, 0, 0, 0, 0}, 0x3192 }, // U3192 # IDEOGRAPHIC ANNOTATION ONE MARK ++ { {UNITIZE(Qt::Key_Dead_Circumflex), 0x4e01, 0, 0, 0, 0}, 0x319c }, // U319C # IDEOGRAPHIC ANNOTATION FOURTH MARK ++ { {UNITIZE(Qt::Key_Dead_Circumflex), 0x4e09, 0, 0, 0, 0}, 0x3194 }, // U3194 # IDEOGRAPHIC ANNOTATION THREE MARK ++ { {UNITIZE(Qt::Key_Dead_Circumflex), 0x4e0a, 0, 0, 0, 0}, 0x3196 }, // U3196 # IDEOGRAPHIC ANNOTATION TOP MARK ++ { {UNITIZE(Qt::Key_Dead_Circumflex), 0x4e0b, 0, 0, 0, 0}, 0x3198 }, // U3198 # IDEOGRAPHIC ANNOTATION BOTTOM MARK ++ { {UNITIZE(Qt::Key_Dead_Circumflex), 0x4e19, 0, 0, 0, 0}, 0x319b }, // U319B # IDEOGRAPHIC ANNOTATION THIRD MARK ++ { {UNITIZE(Qt::Key_Dead_Circumflex), 0x4e2d, 0, 0, 0, 0}, 0x3197 }, // U3197 # IDEOGRAPHIC ANNOTATION MIDDLE MARK ++ { {UNITIZE(Qt::Key_Dead_Circumflex), 0x4e59, 0, 0, 0, 0}, 0x319a }, // U319A # IDEOGRAPHIC ANNOTATION SECOND MARK ++ { {UNITIZE(Qt::Key_Dead_Circumflex), 0x4e8c, 0, 0, 0, 0}, 0x3193 }, // U3193 # IDEOGRAPHIC ANNOTATION TWO MARK ++ { {UNITIZE(Qt::Key_Dead_Circumflex), 0x4eba, 0, 0, 0, 0}, 0x319f }, // U319F # IDEOGRAPHIC ANNOTATION MAN MARK ++ { {UNITIZE(Qt::Key_Dead_Circumflex), 0x56db, 0, 0, 0, 0}, 0x3195 }, // U3195 # IDEOGRAPHIC ANNOTATION FOUR MARK ++ { {UNITIZE(Qt::Key_Dead_Circumflex), 0x5730, 0, 0, 0, 0}, 0x319e }, // U319E # IDEOGRAPHIC ANNOTATION EARTH MARK ++ { {UNITIZE(Qt::Key_Dead_Circumflex), 0x5929, 0, 0, 0, 0}, 0x319d }, // U319D # IDEOGRAPHIC ANNOTATION HEAVEN MARK ++ { {UNITIZE(Qt::Key_Dead_Circumflex), 0x7532, 0, 0, 0, 0}, 0x3199 }, // U3199 # IDEOGRAPHIC ANNOTATION FIRST MARK ++ { {UNITIZE(Qt::Key_Dead_Circumflex), UNITIZE(Qt::Key_Multi_key), 0x0021, 0x0041, 0, 0}, 0x1eac }, // U1EAC # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND DOT BELOW ++ { {UNITIZE(Qt::Key_Dead_Circumflex), UNITIZE(Qt::Key_Multi_key), 0x0021, 0x0045, 0, 0}, 0x1ec6 }, // U1EC6 # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND DOT BELOW ++ { {UNITIZE(Qt::Key_Dead_Circumflex), UNITIZE(Qt::Key_Multi_key), 0x0021, 0x004f, 0, 0}, 0x1ed8 }, // U1ED8 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND DOT BELOW ++ { {UNITIZE(Qt::Key_Dead_Circumflex), UNITIZE(Qt::Key_Multi_key), 0x0021, 0x0061, 0, 0}, 0x1ead }, // U1EAD # LATIN SMALL LETTER A WITH CIRCUMFLEX AND DOT BELOW ++ { {UNITIZE(Qt::Key_Dead_Circumflex), UNITIZE(Qt::Key_Multi_key), 0x0021, 0x0065, 0, 0}, 0x1ec7 }, // U1EC7 # LATIN SMALL LETTER E WITH CIRCUMFLEX AND DOT BELOW ++ { {UNITIZE(Qt::Key_Dead_Circumflex), UNITIZE(Qt::Key_Multi_key), 0x0021, 0x006f, 0, 0}, 0x1ed9 }, // U1ED9 # LATIN SMALL LETTER O WITH CIRCUMFLEX AND DOT BELOW ++ { {UNITIZE(Qt::Key_Dead_Circumflex), UNITIZE(Qt::Key_Multi_key), 0x0053, 0x004d, 0, 0}, 0x2120 }, // U2120 # SERVICE MARK ++ { {UNITIZE(Qt::Key_Dead_Circumflex), UNITIZE(Qt::Key_Multi_key), 0x0054, 0x004d, 0, 0}, 0x2122 }, // U2122 # TRADE MARK SIGN ++ { {UNITIZE(Qt::Key_Dead_Circumflex), UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0061, 0, 0}, 0x00aa }, // U00AA # FEMININE ORDINAL INDICATOR ++ { {UNITIZE(Qt::Key_Dead_Circumflex), UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0061, 0, 0}, 0x00aa }, // U00AA # FEMININE ORDINAL INDICATOR ++ { {UNITIZE(Qt::Key_Dead_Circumflex), UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0068, 0, 0}, 0x02b0 }, // U02B0 # MODIFIER LETTER SMALL H ++ { {UNITIZE(Qt::Key_Dead_Circumflex), UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0068, 0, 0}, 0x02b0 }, // U02B0 # MODIFIER LETTER SMALL H ++ { {UNITIZE(Qt::Key_Dead_Circumflex), UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0069, 0, 0}, 0x2071 }, // U2071 # SUPERSCRIPT LATIN SMALL LETTER I ++ { {UNITIZE(Qt::Key_Dead_Circumflex), UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0069, 0, 0}, 0x2071 }, // U2071 # SUPERSCRIPT LATIN SMALL LETTER I ++ { {UNITIZE(Qt::Key_Dead_Circumflex), UNITIZE(Qt::Key_Multi_key), 0x005f, 0x006a, 0, 0}, 0x02b2 }, // U02B2 # MODIFIER LETTER SMALL J ++ { {UNITIZE(Qt::Key_Dead_Circumflex), UNITIZE(Qt::Key_Multi_key), 0x005f, 0x006a, 0, 0}, 0x02b2 }, // U02B2 # MODIFIER LETTER SMALL J ++ { {UNITIZE(Qt::Key_Dead_Circumflex), UNITIZE(Qt::Key_Multi_key), 0x005f, 0x006c, 0, 0}, 0x02e1 }, // U02E1 # MODIFIER LETTER SMALL L ++ { {UNITIZE(Qt::Key_Dead_Circumflex), UNITIZE(Qt::Key_Multi_key), 0x005f, 0x006c, 0, 0}, 0x02e1 }, // U02E1 # MODIFIER LETTER SMALL L ++ { {UNITIZE(Qt::Key_Dead_Circumflex), UNITIZE(Qt::Key_Multi_key), 0x005f, 0x006e, 0, 0}, 0x207f }, // U207F # SUPERSCRIPT LATIN SMALL LETTER N ++ { {UNITIZE(Qt::Key_Dead_Circumflex), UNITIZE(Qt::Key_Multi_key), 0x005f, 0x006e, 0, 0}, 0x207f }, // U207F # SUPERSCRIPT LATIN SMALL LETTER N ++ { {UNITIZE(Qt::Key_Dead_Circumflex), UNITIZE(Qt::Key_Multi_key), 0x005f, 0x006f, 0, 0}, 0x00ba }, // U00BA # MASCULINE ORDINAL INDICATOR ++ { {UNITIZE(Qt::Key_Dead_Circumflex), UNITIZE(Qt::Key_Multi_key), 0x005f, 0x006f, 0, 0}, 0x00ba }, // U00BA # MASCULINE ORDINAL INDICATOR ++ { {UNITIZE(Qt::Key_Dead_Circumflex), UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0072, 0, 0}, 0x02b3 }, // U02B3 # MODIFIER LETTER SMALL R ++ { {UNITIZE(Qt::Key_Dead_Circumflex), UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0072, 0, 0}, 0x02b3 }, // U02B3 # MODIFIER LETTER SMALL R ++ { {UNITIZE(Qt::Key_Dead_Circumflex), UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0073, 0, 0}, 0x02e2 }, // U02E2 # MODIFIER LETTER SMALL S ++ { {UNITIZE(Qt::Key_Dead_Circumflex), UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0073, 0, 0}, 0x02e2 }, // U02E2 # MODIFIER LETTER SMALL S ++ { {UNITIZE(Qt::Key_Dead_Circumflex), UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0077, 0, 0}, 0x02b7 }, // U02B7 # MODIFIER LETTER SMALL W ++ { {UNITIZE(Qt::Key_Dead_Circumflex), UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0077, 0, 0}, 0x02b7 }, // U02B7 # MODIFIER LETTER SMALL W ++ { {UNITIZE(Qt::Key_Dead_Circumflex), UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0078, 0, 0}, 0x02e3 }, // U02E3 # MODIFIER LETTER SMALL X ++ { {UNITIZE(Qt::Key_Dead_Circumflex), UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0078, 0, 0}, 0x02e3 }, // U02E3 # MODIFIER LETTER SMALL X ++ { {UNITIZE(Qt::Key_Dead_Circumflex), UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0079, 0, 0}, 0x02b8 }, // U02B8 # MODIFIER LETTER SMALL Y ++ { {UNITIZE(Qt::Key_Dead_Circumflex), UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0079, 0, 0}, 0x02b8 }, // U02B8 # MODIFIER LETTER SMALL Y ++ { {UNITIZE(Qt::Key_Dead_Circumflex), UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0263, 0, 0}, 0x02e0 }, // U02E0 # MODIFIER LETTER SMALL GAMMA ++ { {UNITIZE(Qt::Key_Dead_Circumflex), UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0263, 0, 0}, 0x02e0 }, // U02E0 # MODIFIER LETTER SMALL GAMMA ++ { {UNITIZE(Qt::Key_Dead_Circumflex), UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0266, 0, 0}, 0x02b1 }, // U02B1 # MODIFIER LETTER SMALL H WITH HOOK ++ { {UNITIZE(Qt::Key_Dead_Circumflex), UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0266, 0, 0}, 0x02b1 }, // U02B1 # MODIFIER LETTER SMALL H WITH HOOK ++ { {UNITIZE(Qt::Key_Dead_Circumflex), UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0279, 0, 0}, 0x02b4 }, // U02B4 # MODIFIER LETTER SMALL TURNED R ++ { {UNITIZE(Qt::Key_Dead_Circumflex), UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0279, 0, 0}, 0x02b4 }, // U02B4 # MODIFIER LETTER SMALL TURNED R ++ { {UNITIZE(Qt::Key_Dead_Circumflex), UNITIZE(Qt::Key_Multi_key), 0x005f, 0x027b, 0, 0}, 0x02b5 }, // U02B5 # MODIFIER LETTER SMALL TURNED R WITH HOOK ++ { {UNITIZE(Qt::Key_Dead_Circumflex), UNITIZE(Qt::Key_Multi_key), 0x005f, 0x027b, 0, 0}, 0x02b5 }, // U02B5 # MODIFIER LETTER SMALL TURNED R WITH HOOK ++ { {UNITIZE(Qt::Key_Dead_Circumflex), UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0281, 0, 0}, 0x02b6 }, // U02B6 # MODIFIER LETTER SMALL CAPITAL INVERTED R ++ { {UNITIZE(Qt::Key_Dead_Circumflex), UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0281, 0, 0}, 0x02b6 }, // U02B6 # MODIFIER LETTER SMALL CAPITAL INVERTED R ++ { {UNITIZE(Qt::Key_Dead_Circumflex), UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0295, 0, 0}, 0x02e4 }, // U02E4 # MODIFIER LETTER SMALL REVERSED GLOTTAL STOP ++ { {UNITIZE(Qt::Key_Dead_Circumflex), UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0295, 0, 0}, 0x02e4 }, // U02E4 # MODIFIER LETTER SMALL REVERSED GLOTTAL STOP ++ { {UNITIZE(Qt::Key_Dead_Circumflex), UNITIZE(Qt::Key_Dead_Circumflex), 0, 0, 0, 0}, 0x005e }, // asciicircum ++ { {UNITIZE(Qt::Key_Dead_Circumflex), UNITIZE(Qt::Key_Dead_Belowdot), 0x0041, 0, 0, 0}, 0x1eac }, // U1EAC # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND DOT BELOW ++ { {UNITIZE(Qt::Key_Dead_Circumflex), UNITIZE(Qt::Key_Dead_Belowdot), 0x0045, 0, 0, 0}, 0x1ec6 }, // U1EC6 # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND DOT BELOW ++ { {UNITIZE(Qt::Key_Dead_Circumflex), UNITIZE(Qt::Key_Dead_Belowdot), 0x004f, 0, 0, 0}, 0x1ed8 }, // U1ED8 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND DOT BELOW ++ { {UNITIZE(Qt::Key_Dead_Circumflex), UNITIZE(Qt::Key_Dead_Belowdot), 0x0061, 0, 0, 0}, 0x1ead }, // U1EAD # LATIN SMALL LETTER A WITH CIRCUMFLEX AND DOT BELOW ++ { {UNITIZE(Qt::Key_Dead_Circumflex), UNITIZE(Qt::Key_Dead_Belowdot), 0x0065, 0, 0, 0}, 0x1ec7 }, // U1EC7 # LATIN SMALL LETTER E WITH CIRCUMFLEX AND DOT BELOW ++ { {UNITIZE(Qt::Key_Dead_Circumflex), UNITIZE(Qt::Key_Dead_Belowdot), 0x006f, 0, 0, 0}, 0x1ed9 }, // U1ED9 # LATIN SMALL LETTER O WITH CIRCUMFLEX AND DOT BELOW ++// /* broken */ { {UNITIZE(Qt::Key_Dead_Tilde), 0x0000, 0, 0, 0, 0}, 0x1ee0 }, // U1EE0 # LATIN CAPITAL LETTER O WITH HORN AND TILDE ++// /* broken */ { {UNITIZE(Qt::Key_Dead_Tilde), 0x0000, 0, 0, 0, 0}, 0x1eee }, // U1EEE # LATIN CAPITAL LETTER U WITH HORN AND TILDE ++// /* broken */ { {UNITIZE(Qt::Key_Dead_Tilde), 0x0000, 0, 0, 0, 0}, 0x1eef }, // U1EEF # LATIN SMALL LETTER U WITH HORN AND TILDE ++// /* broken */ { {UNITIZE(Qt::Key_Dead_Tilde), 0x0000, 0, 0, 0, 0}, 0x1ee1 }, // U1EE1 # LATIN SMALL LETTER O WITH HORN AND TILDE ++ { {UNITIZE(Qt::Key_Dead_Tilde), 0x0020, 0, 0, 0, 0}, 0x007e }, // asciitilde ++ { {UNITIZE(Qt::Key_Dead_Tilde), 0x0041, 0, 0, 0, 0}, 0x00c3 }, // U00C3 # LATIN CAPITAL LETTER A WITH TILDE ++ { {UNITIZE(Qt::Key_Dead_Tilde), 0x0045, 0, 0, 0, 0}, 0x1ebc }, // U1EBC # LATIN CAPITAL LETTER E WITH TILDE ++ { {UNITIZE(Qt::Key_Dead_Tilde), 0x0049, 0, 0, 0, 0}, 0x0128 }, // U0128 # LATIN CAPITAL LETTER I WITH TILDE ++ { {UNITIZE(Qt::Key_Dead_Tilde), 0x004e, 0, 0, 0, 0}, 0x00d1 }, // U00D1 # LATIN CAPITAL LETTER N WITH TILDE ++ { {UNITIZE(Qt::Key_Dead_Tilde), 0x004f, 0, 0, 0, 0}, 0x00d5 }, // U00D5 # LATIN CAPITAL LETTER O WITH TILDE ++ { {UNITIZE(Qt::Key_Dead_Tilde), 0x0055, 0, 0, 0, 0}, 0x0168 }, // U0168 # LATIN CAPITAL LETTER U WITH TILDE ++ { {UNITIZE(Qt::Key_Dead_Tilde), 0x0056, 0, 0, 0, 0}, 0x1e7c }, // U1E7C # LATIN CAPITAL LETTER V WITH TILDE ++ { {UNITIZE(Qt::Key_Dead_Tilde), 0x0059, 0, 0, 0, 0}, 0x1ef8 }, // U1EF8 # LATIN CAPITAL LETTER Y WITH TILDE ++ { {UNITIZE(Qt::Key_Dead_Tilde), 0x0061, 0, 0, 0, 0}, 0x00e3 }, // U00E3 # LATIN SMALL LETTER A WITH TILDE ++ { {UNITIZE(Qt::Key_Dead_Tilde), 0x0065, 0, 0, 0, 0}, 0x1ebd }, // U1EBD # LATIN SMALL LETTER E WITH TILDE ++ { {UNITIZE(Qt::Key_Dead_Tilde), 0x0069, 0, 0, 0, 0}, 0x0129 }, // U0129 # LATIN SMALL LETTER I WITH TILDE ++ { {UNITIZE(Qt::Key_Dead_Tilde), 0x006e, 0, 0, 0, 0}, 0x00f1 }, // U00F1 # LATIN SMALL LETTER N WITH TILDE ++ { {UNITIZE(Qt::Key_Dead_Tilde), 0x006f, 0, 0, 0, 0}, 0x00f5 }, // U00F5 # LATIN SMALL LETTER O WITH TILDE ++ { {UNITIZE(Qt::Key_Dead_Tilde), 0x0075, 0, 0, 0, 0}, 0x0169 }, // U0169 # LATIN SMALL LETTER U WITH TILDE ++ { {UNITIZE(Qt::Key_Dead_Tilde), 0x0076, 0, 0, 0, 0}, 0x1e7d }, // U1E7D # LATIN SMALL LETTER V WITH TILDE ++ { {UNITIZE(Qt::Key_Dead_Tilde), 0x0079, 0, 0, 0, 0}, 0x1ef9 }, // U1EF9 # LATIN SMALL LETTER Y WITH TILDE ++ { {UNITIZE(Qt::Key_Dead_Tilde), 0x00c2, 0, 0, 0, 0}, 0x1eaa }, // U1EAA # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND TILDE ++ { {UNITIZE(Qt::Key_Dead_Tilde), 0x00ca, 0, 0, 0, 0}, 0x1ec4 }, // U1EC4 # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND TILDE ++ { {UNITIZE(Qt::Key_Dead_Tilde), 0x00d4, 0, 0, 0, 0}, 0x1ed6 }, // U1ED6 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND TILDE ++ { {UNITIZE(Qt::Key_Dead_Tilde), 0x00e2, 0, 0, 0, 0}, 0x1eab }, // U1EAB # LATIN SMALL LETTER A WITH CIRCUMFLEX AND TILDE ++ { {UNITIZE(Qt::Key_Dead_Tilde), 0x00ea, 0, 0, 0, 0}, 0x1ec5 }, // U1EC5 # LATIN SMALL LETTER E WITH CIRCUMFLEX AND TILDE ++ { {UNITIZE(Qt::Key_Dead_Tilde), 0x00f4, 0, 0, 0, 0}, 0x1ed7 }, // U1ED7 # LATIN SMALL LETTER O WITH CIRCUMFLEX AND TILDE ++ { {UNITIZE(Qt::Key_Dead_Tilde), 0x0102, 0, 0, 0, 0}, 0x1eb4 }, // U1EB4 # LATIN CAPITAL LETTER A WITH BREVE AND TILDE ++ { {UNITIZE(Qt::Key_Dead_Tilde), 0x0103, 0, 0, 0, 0}, 0x1eb5 }, // U1EB5 # LATIN SMALL LETTER A WITH BREVE AND TILDE ++ { {UNITIZE(Qt::Key_Dead_Tilde), 0x01A0, 0, 0, 0, 0}, 0x1ee0 }, // U1EE0 # LATIN CAPITAL LETTER O WITH HORN AND TILDE ++ { {UNITIZE(Qt::Key_Dead_Tilde), 0x01A1, 0, 0, 0, 0}, 0x1ee1 }, // U1EE1 # LATIN SMALL LETTER O WITH HORN AND TILDE ++ { {UNITIZE(Qt::Key_Dead_Tilde), 0x01AF, 0, 0, 0, 0}, 0x1eee }, // U1EEE # LATIN CAPITAL LETTER U WITH HORN AND TILDE ++ { {UNITIZE(Qt::Key_Dead_Tilde), 0x01B0, 0, 0, 0, 0}, 0x1eef }, // U1EEF # LATIN SMALL LETTER U WITH HORN AND TILDE ++ { {UNITIZE(Qt::Key_Dead_Tilde), 0x0313, 0x0391, 0, 0, 0}, 0x1f0e }, // U1F0E # GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI ++ { {UNITIZE(Qt::Key_Dead_Tilde), 0x0313, 0x0397, 0, 0, 0}, 0x1f2e }, // U1F2E # GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI ++ { {UNITIZE(Qt::Key_Dead_Tilde), 0x0313, 0x0399, 0, 0, 0}, 0x1f3e }, // U1F3E # GREEK CAPITAL LETTER IOTA WITH PSILI AND PERISPOMENI ++ { {UNITIZE(Qt::Key_Dead_Tilde), 0x0313, 0x03a9, 0, 0, 0}, 0x1f6e }, // U1F6E # GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI ++ { {UNITIZE(Qt::Key_Dead_Tilde), 0x0313, 0x03b1, 0, 0, 0}, 0x1f06 }, // U1F06 # GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI ++ { {UNITIZE(Qt::Key_Dead_Tilde), 0x0313, 0x03b7, 0, 0, 0}, 0x1f26 }, // U1F26 # GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI ++ { {UNITIZE(Qt::Key_Dead_Tilde), 0x0313, 0x03b9, 0, 0, 0}, 0x1f36 }, // U1F36 # GREEK SMALL LETTER IOTA WITH PSILI AND PERISPOMENI ++ { {UNITIZE(Qt::Key_Dead_Tilde), 0x0313, 0x03c5, 0, 0, 0}, 0x1f56 }, // U1F56 # GREEK SMALL LETTER UPSILON WITH PSILI AND PERISPOMENI ++ { {UNITIZE(Qt::Key_Dead_Tilde), 0x0313, 0x03c9, 0, 0, 0}, 0x1f66 }, // U1F66 # GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI ++ { {UNITIZE(Qt::Key_Dead_Tilde), 0x0314, 0x0391, 0, 0, 0}, 0x1f0f }, // U1F0F # GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI ++ { {UNITIZE(Qt::Key_Dead_Tilde), 0x0314, 0x0397, 0, 0, 0}, 0x1f2f }, // U1F2F # GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI ++ { {UNITIZE(Qt::Key_Dead_Tilde), 0x0314, 0x0399, 0, 0, 0}, 0x1f3f }, // U1F3F # GREEK CAPITAL LETTER IOTA WITH DASIA AND PERISPOMENI ++ { {UNITIZE(Qt::Key_Dead_Tilde), 0x0314, 0x03a5, 0, 0, 0}, 0x1f5f }, // U1F5F # GREEK CAPITAL LETTER UPSILON WITH DASIA AND PERISPOMENI ++ { {UNITIZE(Qt::Key_Dead_Tilde), 0x0314, 0x03a9, 0, 0, 0}, 0x1f6f }, // U1F6F # GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI ++ { {UNITIZE(Qt::Key_Dead_Tilde), 0x0314, 0x03b1, 0, 0, 0}, 0x1f07 }, // U1F07 # GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI ++ { {UNITIZE(Qt::Key_Dead_Tilde), 0x0314, 0x03b7, 0, 0, 0}, 0x1f27 }, // U1F27 # GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI ++ { {UNITIZE(Qt::Key_Dead_Tilde), 0x0314, 0x03b9, 0, 0, 0}, 0x1f37 }, // U1F37 # GREEK SMALL LETTER IOTA WITH DASIA AND PERISPOMENI ++ { {UNITIZE(Qt::Key_Dead_Tilde), 0x0314, 0x03c5, 0, 0, 0}, 0x1f57 }, // U1F57 # GREEK SMALL LETTER UPSILON WITH DASIA AND PERISPOMENI ++ { {UNITIZE(Qt::Key_Dead_Tilde), 0x0314, 0x03c9, 0, 0, 0}, 0x1f67 }, // U1F67 # GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI ++ { {UNITIZE(Qt::Key_Dead_Tilde), 0x03b1, 0, 0, 0, 0}, 0x1fb6 }, // U1FB6 # GREEK SMALL LETTER ALPHA WITH PERISPOMENI ++ { {UNITIZE(Qt::Key_Dead_Tilde), 0x03b7, 0, 0, 0, 0}, 0x1fc6 }, // U1FC6 # GREEK SMALL LETTER ETA WITH PERISPOMENI ++ { {UNITIZE(Qt::Key_Dead_Tilde), 0x03b9, 0, 0, 0, 0}, 0x1fd6 }, // U1FD6 # GREEK SMALL LETTER IOTA WITH PERISPOMENI ++ { {UNITIZE(Qt::Key_Dead_Tilde), 0x03c5, 0, 0, 0, 0}, 0x1fe6 }, // U1FE6 # GREEK SMALL LETTER UPSILON WITH PERISPOMENI ++ { {UNITIZE(Qt::Key_Dead_Tilde), 0x03c9, 0, 0, 0, 0}, 0x1ff6 }, // U1FF6 # GREEK SMALL LETTER OMEGA WITH PERISPOMENI ++ { {UNITIZE(Qt::Key_Dead_Tilde), 0x03ca, 0, 0, 0, 0}, 0x1fd7 }, // U1FD7 # GREEK SMALL LETTER IOTA WITH DIALYTIKA AND PERISPOMENI ++ { {UNITIZE(Qt::Key_Dead_Tilde), 0x03cb, 0, 0, 0, 0}, 0x1fe7 }, // U1FE7 # GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND PERISPOMENI ++ { {UNITIZE(Qt::Key_Dead_Tilde), 0x1f00, 0, 0, 0, 0}, 0x1f06 }, // U1F06 # GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI ++ { {UNITIZE(Qt::Key_Dead_Tilde), 0x1f01, 0, 0, 0, 0}, 0x1f07 }, // U1F07 # GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI ++ { {UNITIZE(Qt::Key_Dead_Tilde), 0x1f08, 0, 0, 0, 0}, 0x1f0e }, // U1F0E # GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI ++ { {UNITIZE(Qt::Key_Dead_Tilde), 0x1f09, 0, 0, 0, 0}, 0x1f0f }, // U1F0F # GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI ++ { {UNITIZE(Qt::Key_Dead_Tilde), 0x1f20, 0, 0, 0, 0}, 0x1f26 }, // U1F26 # GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI ++ { {UNITIZE(Qt::Key_Dead_Tilde), 0x1f21, 0, 0, 0, 0}, 0x1f27 }, // U1F27 # GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI ++ { {UNITIZE(Qt::Key_Dead_Tilde), 0x1f28, 0, 0, 0, 0}, 0x1f2e }, // U1F2E # GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI ++ { {UNITIZE(Qt::Key_Dead_Tilde), 0x1f29, 0, 0, 0, 0}, 0x1f2f }, // U1F2F # GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI ++ { {UNITIZE(Qt::Key_Dead_Tilde), 0x1f30, 0, 0, 0, 0}, 0x1f36 }, // U1F36 # GREEK SMALL LETTER IOTA WITH PSILI AND PERISPOMENI ++ { {UNITIZE(Qt::Key_Dead_Tilde), 0x1f31, 0, 0, 0, 0}, 0x1f37 }, // U1F37 # GREEK SMALL LETTER IOTA WITH DASIA AND PERISPOMENI ++ { {UNITIZE(Qt::Key_Dead_Tilde), 0x1f38, 0, 0, 0, 0}, 0x1f3e }, // U1F3E # GREEK CAPITAL LETTER IOTA WITH PSILI AND PERISPOMENI ++ { {UNITIZE(Qt::Key_Dead_Tilde), 0x1f39, 0, 0, 0, 0}, 0x1f3f }, // U1F3F # GREEK CAPITAL LETTER IOTA WITH DASIA AND PERISPOMENI ++ { {UNITIZE(Qt::Key_Dead_Tilde), 0x1f50, 0, 0, 0, 0}, 0x1f56 }, // U1F56 # GREEK SMALL LETTER UPSILON WITH PSILI AND PERISPOMENI ++ { {UNITIZE(Qt::Key_Dead_Tilde), 0x1f51, 0, 0, 0, 0}, 0x1f57 }, // U1F57 # GREEK SMALL LETTER UPSILON WITH DASIA AND PERISPOMENI ++ { {UNITIZE(Qt::Key_Dead_Tilde), 0x1f59, 0, 0, 0, 0}, 0x1f5f }, // U1F5F # GREEK CAPITAL LETTER UPSILON WITH DASIA AND PERISPOMENI ++ { {UNITIZE(Qt::Key_Dead_Tilde), 0x1f60, 0, 0, 0, 0}, 0x1f66 }, // U1F66 # GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI ++ { {UNITIZE(Qt::Key_Dead_Tilde), 0x1f61, 0, 0, 0, 0}, 0x1f67 }, // U1F67 # GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI ++ { {UNITIZE(Qt::Key_Dead_Tilde), 0x1f68, 0, 0, 0, 0}, 0x1f6e }, // U1F6E # GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI ++ { {UNITIZE(Qt::Key_Dead_Tilde), 0x1f69, 0, 0, 0, 0}, 0x1f6f }, // U1F6F # GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI ++ { {UNITIZE(Qt::Key_Dead_Tilde), UNITIZE(Qt::Key_Multi_key), 0x0022, 0x03b9, 0, 0}, 0x1fd7 }, // U1FD7 # GREEK SMALL LETTER IOTA WITH DIALYTIKA AND PERISPOMENI ++ { {UNITIZE(Qt::Key_Dead_Tilde), UNITIZE(Qt::Key_Multi_key), 0x0022, 0x03c5, 0, 0}, 0x1fe7 }, // U1FE7 # GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND PERISPOMENI ++ { {UNITIZE(Qt::Key_Dead_Tilde), UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0391, 0, 0}, 0x1f0f }, // U1F0F # GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI ++ { {UNITIZE(Qt::Key_Dead_Tilde), UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0397, 0, 0}, 0x1f2f }, // U1F2F # GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI ++ { {UNITIZE(Qt::Key_Dead_Tilde), UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0399, 0, 0}, 0x1f3f }, // U1F3F # GREEK CAPITAL LETTER IOTA WITH DASIA AND PERISPOMENI ++ { {UNITIZE(Qt::Key_Dead_Tilde), UNITIZE(Qt::Key_Multi_key), 0x0028, 0x03a5, 0, 0}, 0x1f5f }, // U1F5F # GREEK CAPITAL LETTER UPSILON WITH DASIA AND PERISPOMENI ++ { {UNITIZE(Qt::Key_Dead_Tilde), UNITIZE(Qt::Key_Multi_key), 0x0028, 0x03a9, 0, 0}, 0x1f6f }, // U1F6F # GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI ++ { {UNITIZE(Qt::Key_Dead_Tilde), UNITIZE(Qt::Key_Multi_key), 0x0028, 0x03b1, 0, 0}, 0x1f07 }, // U1F07 # GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI ++ { {UNITIZE(Qt::Key_Dead_Tilde), UNITIZE(Qt::Key_Multi_key), 0x0028, 0x03b7, 0, 0}, 0x1f27 }, // U1F27 # GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI ++ { {UNITIZE(Qt::Key_Dead_Tilde), UNITIZE(Qt::Key_Multi_key), 0x0028, 0x03b9, 0, 0}, 0x1f37 }, // U1F37 # GREEK SMALL LETTER IOTA WITH DASIA AND PERISPOMENI ++ { {UNITIZE(Qt::Key_Dead_Tilde), UNITIZE(Qt::Key_Multi_key), 0x0028, 0x03c5, 0, 0}, 0x1f57 }, // U1F57 # GREEK SMALL LETTER UPSILON WITH DASIA AND PERISPOMENI ++ { {UNITIZE(Qt::Key_Dead_Tilde), UNITIZE(Qt::Key_Multi_key), 0x0028, 0x03c9, 0, 0}, 0x1f67 }, // U1F67 # GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI ++ { {UNITIZE(Qt::Key_Dead_Tilde), UNITIZE(Qt::Key_Multi_key), 0x0029, 0x0391, 0, 0}, 0x1f0e }, // U1F0E # GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI ++ { {UNITIZE(Qt::Key_Dead_Tilde), UNITIZE(Qt::Key_Multi_key), 0x0029, 0x0397, 0, 0}, 0x1f2e }, // U1F2E # GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI ++ { {UNITIZE(Qt::Key_Dead_Tilde), UNITIZE(Qt::Key_Multi_key), 0x0029, 0x0399, 0, 0}, 0x1f3e }, // U1F3E # GREEK CAPITAL LETTER IOTA WITH PSILI AND PERISPOMENI ++ { {UNITIZE(Qt::Key_Dead_Tilde), UNITIZE(Qt::Key_Multi_key), 0x0029, 0x03a9, 0, 0}, 0x1f6e }, // U1F6E # GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI ++ { {UNITIZE(Qt::Key_Dead_Tilde), UNITIZE(Qt::Key_Multi_key), 0x0029, 0x03b1, 0, 0}, 0x1f06 }, // U1F06 # GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI ++ { {UNITIZE(Qt::Key_Dead_Tilde), UNITIZE(Qt::Key_Multi_key), 0x0029, 0x03b7, 0, 0}, 0x1f26 }, // U1F26 # GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI ++ { {UNITIZE(Qt::Key_Dead_Tilde), UNITIZE(Qt::Key_Multi_key), 0x0029, 0x03b9, 0, 0}, 0x1f36 }, // U1F36 # GREEK SMALL LETTER IOTA WITH PSILI AND PERISPOMENI ++ { {UNITIZE(Qt::Key_Dead_Tilde), UNITIZE(Qt::Key_Multi_key), 0x0029, 0x03c5, 0, 0}, 0x1f56 }, // U1F56 # GREEK SMALL LETTER UPSILON WITH PSILI AND PERISPOMENI ++ { {UNITIZE(Qt::Key_Dead_Tilde), UNITIZE(Qt::Key_Multi_key), 0x0029, 0x03c9, 0, 0}, 0x1f66 }, // U1F66 # GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI ++ { {UNITIZE(Qt::Key_Dead_Tilde), UNITIZE(Qt::Key_Multi_key), 0x002b, 0x004f, 0, 0}, 0x1ee0 }, // U1EE0 # LATIN CAPITAL LETTER O WITH HORN AND TILDE ++ { {UNITIZE(Qt::Key_Dead_Tilde), UNITIZE(Qt::Key_Multi_key), 0x002b, 0x0055, 0, 0}, 0x1eee }, // U1EEE # LATIN CAPITAL LETTER U WITH HORN AND TILDE ++ { {UNITIZE(Qt::Key_Dead_Tilde), UNITIZE(Qt::Key_Multi_key), 0x002b, 0x006f, 0, 0}, 0x1ee1 }, // U1EE1 # LATIN SMALL LETTER O WITH HORN AND TILDE ++ { {UNITIZE(Qt::Key_Dead_Tilde), UNITIZE(Qt::Key_Multi_key), 0x002b, 0x0075, 0, 0}, 0x1eef }, // U1EEF # LATIN SMALL LETTER U WITH HORN AND TILDE ++ { {UNITIZE(Qt::Key_Dead_Tilde), UNITIZE(Qt::Key_Multi_key), 0x0055, 0x0041, 0, 0}, 0x1eb4 }, // U1EB4 # LATIN CAPITAL LETTER A WITH BREVE AND TILDE ++ { {UNITIZE(Qt::Key_Dead_Tilde), UNITIZE(Qt::Key_Multi_key), 0x0055, 0x0061, 0, 0}, 0x1eb5 }, // U1EB5 # LATIN SMALL LETTER A WITH BREVE AND TILDE ++ { {UNITIZE(Qt::Key_Dead_Tilde), UNITIZE(Qt::Key_Multi_key), 0x005e, 0x0041, 0, 0}, 0x1eaa }, // U1EAA # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND TILDE ++ { {UNITIZE(Qt::Key_Dead_Tilde), UNITIZE(Qt::Key_Multi_key), 0x005e, 0x0045, 0, 0}, 0x1ec4 }, // U1EC4 # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND TILDE ++ { {UNITIZE(Qt::Key_Dead_Tilde), UNITIZE(Qt::Key_Multi_key), 0x005e, 0x004f, 0, 0}, 0x1ed6 }, // U1ED6 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND TILDE ++ { {UNITIZE(Qt::Key_Dead_Tilde), UNITIZE(Qt::Key_Multi_key), 0x005e, 0x0061, 0, 0}, 0x1eab }, // U1EAB # LATIN SMALL LETTER A WITH CIRCUMFLEX AND TILDE ++ { {UNITIZE(Qt::Key_Dead_Tilde), UNITIZE(Qt::Key_Multi_key), 0x005e, 0x0065, 0, 0}, 0x1ec5 }, // U1EC5 # LATIN SMALL LETTER E WITH CIRCUMFLEX AND TILDE ++ { {UNITIZE(Qt::Key_Dead_Tilde), UNITIZE(Qt::Key_Multi_key), 0x005e, 0x006f, 0, 0}, 0x1ed7 }, // U1ED7 # LATIN SMALL LETTER O WITH CIRCUMFLEX AND TILDE ++ { {UNITIZE(Qt::Key_Dead_Tilde), UNITIZE(Qt::Key_Multi_key), 0x0062, 0x0041, 0, 0}, 0x1eb4 }, // U1EB4 # LATIN CAPITAL LETTER A WITH BREVE AND TILDE ++ { {UNITIZE(Qt::Key_Dead_Tilde), UNITIZE(Qt::Key_Multi_key), 0x0062, 0x0061, 0, 0}, 0x1eb5 }, // U1EB5 # LATIN SMALL LETTER A WITH BREVE AND TILDE ++ { {UNITIZE(Qt::Key_Dead_Tilde), UNITIZE(Qt::Key_Dead_Circumflex), 0x0041, 0, 0, 0}, 0x1eaa }, // U1EAA # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND TILDE ++ { {UNITIZE(Qt::Key_Dead_Tilde), UNITIZE(Qt::Key_Dead_Circumflex), 0x0045, 0, 0, 0}, 0x1ec4 }, // U1EC4 # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND TILDE ++ { {UNITIZE(Qt::Key_Dead_Tilde), UNITIZE(Qt::Key_Dead_Circumflex), 0x004f, 0, 0, 0}, 0x1ed6 }, // U1ED6 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND TILDE ++ { {UNITIZE(Qt::Key_Dead_Tilde), UNITIZE(Qt::Key_Dead_Circumflex), 0x0061, 0, 0, 0}, 0x1eab }, // U1EAB # LATIN SMALL LETTER A WITH CIRCUMFLEX AND TILDE ++ { {UNITIZE(Qt::Key_Dead_Tilde), UNITIZE(Qt::Key_Dead_Circumflex), 0x0065, 0, 0, 0}, 0x1ec5 }, // U1EC5 # LATIN SMALL LETTER E WITH CIRCUMFLEX AND TILDE ++ { {UNITIZE(Qt::Key_Dead_Tilde), UNITIZE(Qt::Key_Dead_Circumflex), 0x006f, 0, 0, 0}, 0x1ed7 }, // U1ED7 # LATIN SMALL LETTER O WITH CIRCUMFLEX AND TILDE ++ { {UNITIZE(Qt::Key_Dead_Tilde), UNITIZE(Qt::Key_Dead_Tilde), 0, 0, 0, 0}, 0x007e }, // asciitilde ++ { {UNITIZE(Qt::Key_Dead_Tilde), UNITIZE(Qt::Key_Dead_Breve), 0x0041, 0, 0, 0}, 0x1eb4 }, // U1EB4 # LATIN CAPITAL LETTER A WITH BREVE AND TILDE ++ { {UNITIZE(Qt::Key_Dead_Tilde), UNITIZE(Qt::Key_Dead_Breve), 0x0061, 0, 0, 0}, 0x1eb5 }, // U1EB5 # LATIN SMALL LETTER A WITH BREVE AND TILDE ++ { {UNITIZE(Qt::Key_Dead_Tilde), UNITIZE(Qt::Key_Dead_Diaeresis), 0x03b9, 0, 0, 0}, 0x1fd7 }, // U1FD7 # GREEK SMALL LETTER IOTA WITH DIALYTIKA AND PERISPOMENI ++ { {UNITIZE(Qt::Key_Dead_Tilde), UNITIZE(Qt::Key_Dead_Diaeresis), 0x03c5, 0, 0, 0}, 0x1fe7 }, // U1FE7 # GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND PERISPOMENI ++ { {UNITIZE(Qt::Key_Dead_Tilde), UNITIZE(Qt::Key_Dead_Horn), 0x004f, 0, 0, 0}, 0x1ee0 }, // U1EE0 # LATIN CAPITAL LETTER O WITH HORN AND TILDE ++ { {UNITIZE(Qt::Key_Dead_Tilde), UNITIZE(Qt::Key_Dead_Horn), 0x0055, 0, 0, 0}, 0x1eee }, // U1EEE # LATIN CAPITAL LETTER U WITH HORN AND TILDE ++ { {UNITIZE(Qt::Key_Dead_Tilde), UNITIZE(Qt::Key_Dead_Horn), 0x006f, 0, 0, 0}, 0x1ee1 }, // U1EE1 # LATIN SMALL LETTER O WITH HORN AND TILDE ++ { {UNITIZE(Qt::Key_Dead_Tilde), UNITIZE(Qt::Key_Dead_Horn), 0x0075, 0, 0, 0}, 0x1eef }, // U1EEF # LATIN SMALL LETTER U WITH HORN AND TILDE ++// /* broken */ { {UNITIZE(Qt::Key_Dead_Macron), 0x0000, 0x004c, 0, 0, 0}, 0x1e38 }, // U1E38 # LATIN CAPITAL LETTER L WITH DOT BELOW AND MACRON ++// /* broken */ { {UNITIZE(Qt::Key_Dead_Macron), 0x0000, 0x004f, 0, 0, 0}, 0x022c }, // U022C # LATIN CAPITAL LETTER O WITH TILDE AND MACRON ++// /* broken */ { {UNITIZE(Qt::Key_Dead_Macron), 0x0000, 0x0052, 0, 0, 0}, 0x1e5c }, // U1E5C # LATIN CAPITAL LETTER R WITH DOT BELOW AND MACRON ++// /* broken */ { {UNITIZE(Qt::Key_Dead_Macron), 0x0000, 0x006c, 0, 0, 0}, 0x1e39 }, // U1E39 # LATIN SMALL LETTER L WITH DOT BELOW AND MACRON ++// /* broken */ { {UNITIZE(Qt::Key_Dead_Macron), 0x0000, 0x006f, 0, 0, 0}, 0x022d }, // U022D # LATIN SMALL LETTER O WITH TILDE AND MACRON ++// /* broken */ { {UNITIZE(Qt::Key_Dead_Macron), 0x0000, 0x0072, 0, 0, 0}, 0x1e5d }, // U1E5D # LATIN SMALL LETTER R WITH DOT BELOW AND MACRON ++ { {UNITIZE(Qt::Key_Dead_Macron), 0x0020, 0, 0, 0, 0}, 0x00af }, // macron ++ { {UNITIZE(Qt::Key_Dead_Macron), 0x0041, 0, 0, 0, 0}, 0x0100 }, // U0100 # LATIN CAPITAL LETTER A WITH MACRON ++ { {UNITIZE(Qt::Key_Dead_Macron), 0x0045, 0, 0, 0, 0}, 0x0112 }, // U0112 # LATIN CAPITAL LETTER E WITH MACRON ++ { {UNITIZE(Qt::Key_Dead_Macron), 0x0047, 0, 0, 0, 0}, 0x1e20 }, // U1E20 # LATIN CAPITAL LETTER G WITH MACRON ++ { {UNITIZE(Qt::Key_Dead_Macron), 0x0049, 0, 0, 0, 0}, 0x012a }, // U012A # LATIN CAPITAL LETTER I WITH MACRON ++ { {UNITIZE(Qt::Key_Dead_Macron), 0x004f, 0, 0, 0, 0}, 0x014c }, // U014C # LATIN CAPITAL LETTER O WITH MACRON ++ { {UNITIZE(Qt::Key_Dead_Macron), 0x0055, 0, 0, 0, 0}, 0x016a }, // U016A # LATIN CAPITAL LETTER U WITH MACRON ++ { {UNITIZE(Qt::Key_Dead_Macron), 0x0059, 0, 0, 0, 0}, 0x0232 }, // U0232 # LATIN CAPITAL LETTER Y WITH MACRON ++ { {UNITIZE(Qt::Key_Dead_Macron), 0x0061, 0, 0, 0, 0}, 0x0101 }, // U0101 # LATIN SMALL LETTER A WITH MACRON ++ { {UNITIZE(Qt::Key_Dead_Macron), 0x0065, 0, 0, 0, 0}, 0x0113 }, // U0113 # LATIN SMALL LETTER E WITH MACRON ++ { {UNITIZE(Qt::Key_Dead_Macron), 0x0067, 0, 0, 0, 0}, 0x1e21 }, // U1E21 # LATIN SMALL LETTER G WITH MACRON ++ { {UNITIZE(Qt::Key_Dead_Macron), 0x0069, 0, 0, 0, 0}, 0x012b }, // U012B # LATIN SMALL LETTER I WITH MACRON ++ { {UNITIZE(Qt::Key_Dead_Macron), 0x006f, 0, 0, 0, 0}, 0x014d }, // U014D # LATIN SMALL LETTER O WITH MACRON ++ { {UNITIZE(Qt::Key_Dead_Macron), 0x0075, 0, 0, 0, 0}, 0x016b }, // U016B # LATIN SMALL LETTER U WITH MACRON ++ { {UNITIZE(Qt::Key_Dead_Macron), 0x0079, 0, 0, 0, 0}, 0x0233 }, // U0233 # LATIN SMALL LETTER Y WITH MACRON ++ { {UNITIZE(Qt::Key_Dead_Macron), 0x00c4, 0, 0, 0, 0}, 0x01de }, // U01DE # LATIN CAPITAL LETTER A WITH DIAERESIS AND MACRON ++ { {UNITIZE(Qt::Key_Dead_Macron), 0x00c6, 0, 0, 0, 0}, 0x01e2 }, // U01E2 # LATIN CAPITAL LETTER AE WITH MACRON ++ { {UNITIZE(Qt::Key_Dead_Macron), 0x00d5, 0, 0, 0, 0}, 0x022c }, // U022C # LATIN CAPITAL LETTER O WITH TILDE AND MACRON ++ { {UNITIZE(Qt::Key_Dead_Macron), 0x00d6, 0, 0, 0, 0}, 0x022a }, // U022A # LATIN CAPITAL LETTER O WITH DIAERESIS AND MACRON ++ { {UNITIZE(Qt::Key_Dead_Macron), 0x00dc, 0, 0, 0, 0}, 0x01d5 }, // U01D5 # LATIN CAPITAL LETTER U WITH DIAERESIS AND MACRON ++ { {UNITIZE(Qt::Key_Dead_Macron), 0x00e4, 0, 0, 0, 0}, 0x01df }, // U01DF # LATIN SMALL LETTER A WITH DIAERESIS AND MACRON ++ { {UNITIZE(Qt::Key_Dead_Macron), 0x00e6, 0, 0, 0, 0}, 0x01e3 }, // U01E3 # LATIN SMALL LETTER AE WITH MACRON ++ { {UNITIZE(Qt::Key_Dead_Macron), 0x00f5, 0, 0, 0, 0}, 0x022d }, // U022D # LATIN SMALL LETTER O WITH TILDE AND MACRON ++ { {UNITIZE(Qt::Key_Dead_Macron), 0x00f6, 0, 0, 0, 0}, 0x022b }, // U022B # LATIN SMALL LETTER O WITH DIAERESIS AND MACRON ++ { {UNITIZE(Qt::Key_Dead_Macron), 0x00fc, 0, 0, 0, 0}, 0x01d6 }, // U01D6 # LATIN SMALL LETTER U WITH DIAERESIS AND MACRON ++ { {UNITIZE(Qt::Key_Dead_Macron), 0x01ea, 0, 0, 0, 0}, 0x01ec }, // U01EC # LATIN CAPITAL LETTER O WITH OGONEK AND MACRON ++ { {UNITIZE(Qt::Key_Dead_Macron), 0x01eb, 0, 0, 0, 0}, 0x01ed }, // U01ED # LATIN SMALL LETTER O WITH OGONEK AND MACRON ++ { {UNITIZE(Qt::Key_Dead_Macron), 0x0226, 0, 0, 0, 0}, 0x01e0 }, // U01E0 # LATIN CAPITAL LETTER A WITH DOT ABOVE AND MACRON ++ { {UNITIZE(Qt::Key_Dead_Macron), 0x0227, 0, 0, 0, 0}, 0x01e1 }, // U01E1 # LATIN SMALL LETTER A WITH DOT ABOVE AND MACRON ++ { {UNITIZE(Qt::Key_Dead_Macron), 0x022e, 0, 0, 0, 0}, 0x0230 }, // U0230 # LATIN CAPITAL LETTER O WITH DOT ABOVE AND MACRON ++ { {UNITIZE(Qt::Key_Dead_Macron), 0x022f, 0, 0, 0, 0}, 0x0231 }, // U0231 # LATIN SMALL LETTER O WITH DOT ABOVE AND MACRON ++ { {UNITIZE(Qt::Key_Dead_Macron), 0x0391, 0, 0, 0, 0}, 0x1fb9 }, // U1FB9 # GREEK CAPITAL LETTER ALPHA WITH MACRON ++ { {UNITIZE(Qt::Key_Dead_Macron), 0x0399, 0, 0, 0, 0}, 0x1fd9 }, // U1FD9 # GREEK CAPITAL LETTER IOTA WITH MACRON ++ { {UNITIZE(Qt::Key_Dead_Macron), 0x03a5, 0, 0, 0, 0}, 0x1fe9 }, // U1FE9 # GREEK CAPITAL LETTER UPSILON WITH MACRON ++ { {UNITIZE(Qt::Key_Dead_Macron), 0x03b1, 0, 0, 0, 0}, 0x1fb1 }, // U1FB1 # GREEK SMALL LETTER ALPHA WITH MACRON ++ { {UNITIZE(Qt::Key_Dead_Macron), 0x03b9, 0, 0, 0, 0}, 0x1fd1 }, // U1FD1 # GREEK SMALL LETTER IOTA WITH MACRON ++ { {UNITIZE(Qt::Key_Dead_Macron), 0x03c5, 0, 0, 0, 0}, 0x1fe1 }, // U1FE1 # GREEK SMALL LETTER UPSILON WITH MACRON ++ { {UNITIZE(Qt::Key_Dead_Macron), 0x0418, 0, 0, 0, 0}, 0x04e2 }, // U04E2 # CYRILLIC CAPITAL LETTER I WITH MACRON ++ { {UNITIZE(Qt::Key_Dead_Macron), 0x0423, 0, 0, 0, 0}, 0x04ee }, // U04EE # CYRILLIC CAPITAL LETTER U WITH MACRON ++ { {UNITIZE(Qt::Key_Dead_Macron), 0x0438, 0, 0, 0, 0}, 0x04e3 }, // U04E3 # CYRILLIC SMALL LETTER I WITH MACRON ++ { {UNITIZE(Qt::Key_Dead_Macron), 0x0443, 0, 0, 0, 0}, 0x04ef }, // U04EF # CYRILLIC SMALL LETTER U WITH MACRON ++ { {UNITIZE(Qt::Key_Dead_Macron), 0x1e36, 0, 0, 0, 0}, 0x1e38 }, // U1E38 # LATIN CAPITAL LETTER L WITH DOT BELOW AND MACRON ++ { {UNITIZE(Qt::Key_Dead_Macron), 0x1e37, 0, 0, 0, 0}, 0x1e39 }, // U1E39 # LATIN SMALL LETTER L WITH DOT BELOW AND MACRON ++ { {UNITIZE(Qt::Key_Dead_Macron), 0x1e5a, 0, 0, 0, 0}, 0x1e5c }, // U1E5C # LATIN CAPITAL LETTER R WITH DOT BELOW AND MACRON ++ { {UNITIZE(Qt::Key_Dead_Macron), 0x1e5b, 0, 0, 0, 0}, 0x1e5d }, // U1E5D # LATIN SMALL LETTER R WITH DOT BELOW AND MACRON ++ { {UNITIZE(Qt::Key_Dead_Macron), UNITIZE(Qt::Key_Multi_key), 0x0021, 0x004c, 0, 0}, 0x1e38 }, // U1E38 # LATIN CAPITAL LETTER L WITH DOT BELOW AND MACRON ++ { {UNITIZE(Qt::Key_Dead_Macron), UNITIZE(Qt::Key_Multi_key), 0x0021, 0x0052, 0, 0}, 0x1e5c }, // U1E5C # LATIN CAPITAL LETTER R WITH DOT BELOW AND MACRON ++ { {UNITIZE(Qt::Key_Dead_Macron), UNITIZE(Qt::Key_Multi_key), 0x0021, 0x006c, 0, 0}, 0x1e39 }, // U1E39 # LATIN SMALL LETTER L WITH DOT BELOW AND MACRON ++ { {UNITIZE(Qt::Key_Dead_Macron), UNITIZE(Qt::Key_Multi_key), 0x0021, 0x0072, 0, 0}, 0x1e5d }, // U1E5D # LATIN SMALL LETTER R WITH DOT BELOW AND MACRON ++ { {UNITIZE(Qt::Key_Dead_Macron), UNITIZE(Qt::Key_Multi_key), 0x0022, 0x0041, 0, 0}, 0x01de }, // U01DE # LATIN CAPITAL LETTER A WITH DIAERESIS AND MACRON ++ { {UNITIZE(Qt::Key_Dead_Macron), UNITIZE(Qt::Key_Multi_key), 0x0022, 0x004f, 0, 0}, 0x022a }, // U022A # LATIN CAPITAL LETTER O WITH DIAERESIS AND MACRON ++ { {UNITIZE(Qt::Key_Dead_Macron), UNITIZE(Qt::Key_Multi_key), 0x0022, 0x0055, 0, 0}, 0x01d5 }, // U01D5 # LATIN CAPITAL LETTER U WITH DIAERESIS AND MACRON ++ { {UNITIZE(Qt::Key_Dead_Macron), UNITIZE(Qt::Key_Multi_key), 0x0022, 0x0061, 0, 0}, 0x01df }, // U01DF # LATIN SMALL LETTER A WITH DIAERESIS AND MACRON ++ { {UNITIZE(Qt::Key_Dead_Macron), UNITIZE(Qt::Key_Multi_key), 0x0022, 0x006f, 0, 0}, 0x022b }, // U022B # LATIN SMALL LETTER O WITH DIAERESIS AND MACRON ++ { {UNITIZE(Qt::Key_Dead_Macron), UNITIZE(Qt::Key_Multi_key), 0x0022, 0x0075, 0, 0}, 0x01d6 }, // U01D6 # LATIN SMALL LETTER U WITH DIAERESIS AND MACRON ++ { {UNITIZE(Qt::Key_Dead_Macron), UNITIZE(Qt::Key_Multi_key), 0x002e, 0x0041, 0, 0}, 0x01e0 }, // U01E0 # LATIN CAPITAL LETTER A WITH DOT ABOVE AND MACRON ++ { {UNITIZE(Qt::Key_Dead_Macron), UNITIZE(Qt::Key_Multi_key), 0x002e, 0x004f, 0, 0}, 0x0230 }, // U0230 # LATIN CAPITAL LETTER O WITH DOT ABOVE AND MACRON ++ { {UNITIZE(Qt::Key_Dead_Macron), UNITIZE(Qt::Key_Multi_key), 0x002e, 0x0061, 0, 0}, 0x01e1 }, // U01E1 # LATIN SMALL LETTER A WITH DOT ABOVE AND MACRON ++ { {UNITIZE(Qt::Key_Dead_Macron), UNITIZE(Qt::Key_Multi_key), 0x002e, 0x006f, 0, 0}, 0x0231 }, // U0231 # LATIN SMALL LETTER O WITH DOT ABOVE AND MACRON ++ { {UNITIZE(Qt::Key_Dead_Macron), UNITIZE(Qt::Key_Multi_key), 0x003b, 0x004f, 0, 0}, 0x01ec }, // U01EC # LATIN CAPITAL LETTER O WITH OGONEK AND MACRON ++ { {UNITIZE(Qt::Key_Dead_Macron), UNITIZE(Qt::Key_Multi_key), 0x003b, 0x006f, 0, 0}, 0x01ed }, // U01ED # LATIN SMALL LETTER O WITH OGONEK AND MACRON ++ { {UNITIZE(Qt::Key_Dead_Macron), UNITIZE(Qt::Key_Multi_key), 0x007e, 0x004f, 0, 0}, 0x022c }, // U022C # LATIN CAPITAL LETTER O WITH TILDE AND MACRON ++ { {UNITIZE(Qt::Key_Dead_Macron), UNITIZE(Qt::Key_Multi_key), 0x007e, 0x006f, 0, 0}, 0x022d }, // U022D # LATIN SMALL LETTER O WITH TILDE AND MACRON ++ { {UNITIZE(Qt::Key_Dead_Macron), UNITIZE(Qt::Key_Dead_Tilde), 0x004f, 0, 0, 0}, 0x022c }, // U022C # LATIN CAPITAL LETTER O WITH TILDE AND MACRON ++ { {UNITIZE(Qt::Key_Dead_Macron), UNITIZE(Qt::Key_Dead_Tilde), 0x006f, 0, 0, 0}, 0x022d }, // U022D # LATIN SMALL LETTER O WITH TILDE AND MACRON ++ { {UNITIZE(Qt::Key_Dead_Macron), UNITIZE(Qt::Key_Dead_Macron), 0, 0, 0, 0}, 0x00af }, // macron ++ { {UNITIZE(Qt::Key_Dead_Macron), UNITIZE(Qt::Key_Dead_Abovedot), 0x0041, 0, 0, 0}, 0x01e0 }, // U01E0 # LATIN CAPITAL LETTER A WITH DOT ABOVE AND MACRON ++ { {UNITIZE(Qt::Key_Dead_Macron), UNITIZE(Qt::Key_Dead_Abovedot), 0x004f, 0, 0, 0}, 0x0230 }, // U0230 # LATIN CAPITAL LETTER O WITH DOT ABOVE AND MACRON ++ { {UNITIZE(Qt::Key_Dead_Macron), UNITIZE(Qt::Key_Dead_Abovedot), 0x0061, 0, 0, 0}, 0x01e1 }, // U01E1 # LATIN SMALL LETTER A WITH DOT ABOVE AND MACRON ++ { {UNITIZE(Qt::Key_Dead_Macron), UNITIZE(Qt::Key_Dead_Abovedot), 0x006f, 0, 0, 0}, 0x0231 }, // U0231 # LATIN SMALL LETTER O WITH DOT ABOVE AND MACRON ++ { {UNITIZE(Qt::Key_Dead_Macron), UNITIZE(Qt::Key_Dead_Diaeresis), 0x0041, 0, 0, 0}, 0x01de }, // U01DE # LATIN CAPITAL LETTER A WITH DIAERESIS AND MACRON ++ { {UNITIZE(Qt::Key_Dead_Macron), UNITIZE(Qt::Key_Dead_Diaeresis), 0x004f, 0, 0, 0}, 0x022a }, // U022A # LATIN CAPITAL LETTER O WITH DIAERESIS AND MACRON ++ { {UNITIZE(Qt::Key_Dead_Macron), UNITIZE(Qt::Key_Dead_Diaeresis), 0x0055, 0, 0, 0}, 0x01d5 }, // U01D5 # LATIN CAPITAL LETTER U WITH DIAERESIS AND MACRON ++ { {UNITIZE(Qt::Key_Dead_Macron), UNITIZE(Qt::Key_Dead_Diaeresis), 0x0061, 0, 0, 0}, 0x01df }, // U01DF # LATIN SMALL LETTER A WITH DIAERESIS AND MACRON ++ { {UNITIZE(Qt::Key_Dead_Macron), UNITIZE(Qt::Key_Dead_Diaeresis), 0x006f, 0, 0, 0}, 0x022b }, // U022B # LATIN SMALL LETTER O WITH DIAERESIS AND MACRON ++ { {UNITIZE(Qt::Key_Dead_Macron), UNITIZE(Qt::Key_Dead_Diaeresis), 0x0075, 0, 0, 0}, 0x01d6 }, // U01D6 # LATIN SMALL LETTER U WITH DIAERESIS AND MACRON ++ { {UNITIZE(Qt::Key_Dead_Macron), UNITIZE(Qt::Key_Dead_Ogonek), 0x004f, 0, 0, 0}, 0x01ec }, // U01EC # LATIN CAPITAL LETTER O WITH OGONEK AND MACRON ++ { {UNITIZE(Qt::Key_Dead_Macron), UNITIZE(Qt::Key_Dead_Ogonek), 0x006f, 0, 0, 0}, 0x01ed }, // U01ED # LATIN SMALL LETTER O WITH OGONEK AND MACRON ++ { {UNITIZE(Qt::Key_Dead_Macron), UNITIZE(Qt::Key_Dead_Belowdot), 0x004c, 0, 0, 0}, 0x1e38 }, // U1E38 # LATIN CAPITAL LETTER L WITH DOT BELOW AND MACRON ++ { {UNITIZE(Qt::Key_Dead_Macron), UNITIZE(Qt::Key_Dead_Belowdot), 0x0052, 0, 0, 0}, 0x1e5c }, // U1E5C # LATIN CAPITAL LETTER R WITH DOT BELOW AND MACRON ++ { {UNITIZE(Qt::Key_Dead_Macron), UNITIZE(Qt::Key_Dead_Belowdot), 0x006c, 0, 0, 0}, 0x1e39 }, // U1E39 # LATIN SMALL LETTER L WITH DOT BELOW AND MACRON ++ { {UNITIZE(Qt::Key_Dead_Macron), UNITIZE(Qt::Key_Dead_Belowdot), 0x0072, 0, 0, 0}, 0x1e5d }, // U1E5D # LATIN SMALL LETTER R WITH DOT BELOW AND MACRON ++// /* broken */ { {UNITIZE(Qt::Key_Dead_Breve), 0x0000, 0x0041, 0, 0, 0}, 0x1eb6 }, // U1EB6 # LATIN CAPITAL LETTER A WITH BREVE AND DOT BELOW ++// /* broken */ { {UNITIZE(Qt::Key_Dead_Breve), 0x0000, 0x0061, 0, 0, 0}, 0x1eb7 }, // U1EB7 # LATIN SMALL LETTER A WITH BREVE AND DOT BELOW ++ { {UNITIZE(Qt::Key_Dead_Breve), 0x0020, 0, 0, 0, 0}, 0x02d8 }, // breve ++ { {UNITIZE(Qt::Key_Dead_Breve), 0x0041, 0, 0, 0, 0}, 0x0102 }, // U0102 # LATIN CAPITAL LETTER A WITH BREVE ++ { {UNITIZE(Qt::Key_Dead_Breve), 0x0045, 0, 0, 0, 0}, 0x0114 }, // U0114 # LATIN CAPITAL LETTER E WITH BREVE ++ { {UNITIZE(Qt::Key_Dead_Breve), 0x0047, 0, 0, 0, 0}, 0x011e }, // U011E # LATIN CAPITAL LETTER G WITH BREVE ++ { {UNITIZE(Qt::Key_Dead_Breve), 0x0049, 0, 0, 0, 0}, 0x012c }, // U012C # LATIN CAPITAL LETTER I WITH BREVE ++ { {UNITIZE(Qt::Key_Dead_Breve), 0x004f, 0, 0, 0, 0}, 0x014e }, // U014E # LATIN CAPITAL LETTER O WITH BREVE ++ { {UNITIZE(Qt::Key_Dead_Breve), 0x0055, 0, 0, 0, 0}, 0x016c }, // U016C # LATIN CAPITAL LETTER U WITH BREVE ++ { {UNITIZE(Qt::Key_Dead_Breve), 0x0061, 0, 0, 0, 0}, 0x0103 }, // U0103 # LATIN SMALL LETTER A WITH BREVE ++ { {UNITIZE(Qt::Key_Dead_Breve), 0x0065, 0, 0, 0, 0}, 0x0115 }, // U0115 # LATIN SMALL LETTER E WITH BREVE ++ { {UNITIZE(Qt::Key_Dead_Breve), 0x0067, 0, 0, 0, 0}, 0x011f }, // U011F # LATIN SMALL LETTER G WITH BREVE ++ { {UNITIZE(Qt::Key_Dead_Breve), 0x0069, 0, 0, 0, 0}, 0x012d }, // U012D # LATIN SMALL LETTER I WITH BREVE ++ { {UNITIZE(Qt::Key_Dead_Breve), 0x006f, 0, 0, 0, 0}, 0x014f }, // U014F # LATIN SMALL LETTER O WITH BREVE ++ { {UNITIZE(Qt::Key_Dead_Breve), 0x0075, 0, 0, 0, 0}, 0x016d }, // U016D # LATIN SMALL LETTER U WITH BREVE ++ { {UNITIZE(Qt::Key_Dead_Breve), 0x0228, 0, 0, 0, 0}, 0x1e1c }, // U1E1C # LATIN CAPITAL LETTER E WITH CEDILLA AND BREVE ++ { {UNITIZE(Qt::Key_Dead_Breve), 0x0229, 0, 0, 0, 0}, 0x1e1d }, // U1E1D # LATIN SMALL LETTER E WITH CEDILLA AND BREVE ++ { {UNITIZE(Qt::Key_Dead_Breve), 0x0391, 0, 0, 0, 0}, 0x1fb8 }, // U1FB8 # GREEK CAPITAL LETTER ALPHA WITH VRACHY ++ { {UNITIZE(Qt::Key_Dead_Breve), 0x0399, 0, 0, 0, 0}, 0x1fd8 }, // U1FD8 # GREEK CAPITAL LETTER IOTA WITH VRACHY ++ { {UNITIZE(Qt::Key_Dead_Breve), 0x03a5, 0, 0, 0, 0}, 0x1fe8 }, // U1FE8 # GREEK CAPITAL LETTER UPSILON WITH VRACHY ++ { {UNITIZE(Qt::Key_Dead_Breve), 0x03b1, 0, 0, 0, 0}, 0x1fb0 }, // U1FB0 # GREEK SMALL LETTER ALPHA WITH VRACHY ++ { {UNITIZE(Qt::Key_Dead_Breve), 0x03b9, 0, 0, 0, 0}, 0x1fd0 }, // U1FD0 # GREEK SMALL LETTER IOTA WITH VRACHY ++ { {UNITIZE(Qt::Key_Dead_Breve), 0x03c5, 0, 0, 0, 0}, 0x1fe0 }, // U1FE0 # GREEK SMALL LETTER UPSILON WITH VRACHY ++ { {UNITIZE(Qt::Key_Dead_Breve), 0x0410, 0, 0, 0, 0}, 0x04d0 }, // U04D0 # CYRILLIC CAPITAL LETTER A WITH BREVE ++ { {UNITIZE(Qt::Key_Dead_Breve), 0x0415, 0, 0, 0, 0}, 0x04d6 }, // U04D6 # CYRILLIC CAPITAL LETTER IE WITH BREVE ++ { {UNITIZE(Qt::Key_Dead_Breve), 0x0416, 0, 0, 0, 0}, 0x04c1 }, // U04C1 # CYRILLIC CAPITAL LETTER ZHE WITH BREVE ++ { {UNITIZE(Qt::Key_Dead_Breve), 0x0418, 0, 0, 0, 0}, 0x0419 }, // U0419 # CYRILLIC CAPITAL LETTER SHORT I ++ { {UNITIZE(Qt::Key_Dead_Breve), 0x0423, 0, 0, 0, 0}, 0x040e }, // U040E # CYRILLIC CAPITAL LETTER SHORT U ++ { {UNITIZE(Qt::Key_Dead_Breve), 0x0430, 0, 0, 0, 0}, 0x04d1 }, // U04D1 # CYRILLIC SMALL LETTER A WITH BREVE ++ { {UNITIZE(Qt::Key_Dead_Breve), 0x0435, 0, 0, 0, 0}, 0x04d7 }, // U04D7 # CYRILLIC SMALL LETTER IE WITH BREVE ++ { {UNITIZE(Qt::Key_Dead_Breve), 0x0436, 0, 0, 0, 0}, 0x04c2 }, // U04C2 # CYRILLIC SMALL LETTER ZHE WITH BREVE ++ { {UNITIZE(Qt::Key_Dead_Breve), 0x0438, 0, 0, 0, 0}, 0x0439 }, // U0439 # CYRILLIC SMALL LETTER SHORT I ++ { {UNITIZE(Qt::Key_Dead_Breve), 0x0443, 0, 0, 0, 0}, 0x045e }, // U045E # CYRILLIC SMALL LETTER SHORT U ++ { {UNITIZE(Qt::Key_Dead_Breve), 0x1ea0, 0, 0, 0, 0}, 0x1eb6 }, // U1EB6 # LATIN CAPITAL LETTER A WITH BREVE AND DOT BELOW ++ { {UNITIZE(Qt::Key_Dead_Breve), 0x1ea1, 0, 0, 0, 0}, 0x1eb7 }, // U1EB7 # LATIN SMALL LETTER A WITH BREVE AND DOT BELOW ++ { {UNITIZE(Qt::Key_Dead_Breve), UNITIZE(Qt::Key_Multi_key), 0x0021, 0x0041, 0, 0}, 0x1eb6 }, // U1EB6 # LATIN CAPITAL LETTER A WITH BREVE AND DOT BELOW ++ { {UNITIZE(Qt::Key_Dead_Breve), UNITIZE(Qt::Key_Multi_key), 0x0021, 0x0061, 0, 0}, 0x1eb7 }, // U1EB7 # LATIN SMALL LETTER A WITH BREVE AND DOT BELOW ++ { {UNITIZE(Qt::Key_Dead_Breve), UNITIZE(Qt::Key_Multi_key), 0x002c, 0x0045, 0, 0}, 0x1e1c }, // U1E1C # LATIN CAPITAL LETTER E WITH CEDILLA AND BREVE ++ { {UNITIZE(Qt::Key_Dead_Breve), UNITIZE(Qt::Key_Multi_key), 0x002c, 0x0065, 0, 0}, 0x1e1d }, // U1E1D # LATIN SMALL LETTER E WITH CEDILLA AND BREVE ++ { {UNITIZE(Qt::Key_Dead_Breve), UNITIZE(Qt::Key_Dead_Breve), 0, 0, 0, 0}, 0x02d8 }, // breve ++ { {UNITIZE(Qt::Key_Dead_Breve), UNITIZE(Qt::Key_Dead_Cedilla), 0x0045, 0, 0, 0}, 0x1e1c }, // U1E1C # LATIN CAPITAL LETTER E WITH CEDILLA AND BREVE ++ { {UNITIZE(Qt::Key_Dead_Breve), UNITIZE(Qt::Key_Dead_Cedilla), 0x0065, 0, 0, 0}, 0x1e1d }, // U1E1D # LATIN SMALL LETTER E WITH CEDILLA AND BREVE ++ { {UNITIZE(Qt::Key_Dead_Breve), UNITIZE(Qt::Key_Dead_Belowdot), 0x0041, 0, 0, 0}, 0x1eb6 }, // U1EB6 # LATIN CAPITAL LETTER A WITH BREVE AND DOT BELOW ++ { {UNITIZE(Qt::Key_Dead_Breve), UNITIZE(Qt::Key_Dead_Belowdot), 0x0061, 0, 0, 0}, 0x1eb7 }, // U1EB7 # LATIN SMALL LETTER A WITH BREVE AND DOT BELOW ++// /* broken */ { {UNITIZE(Qt::Key_Dead_Abovedot), 0x0000, 0x0053, 0, 0, 0}, 0x1e64 }, // U1E64 # LATIN CAPITAL LETTER S WITH ACUTE AND DOT ABOVE ++// /* broken */ { {UNITIZE(Qt::Key_Dead_Abovedot), 0x0000, 0x0053, 0, 0, 0}, 0x1e68 }, // U1E68 # LATIN CAPITAL LETTER S WITH DOT BELOW AND DOT ABOVE ++// /* broken */ { {UNITIZE(Qt::Key_Dead_Abovedot), 0x0000, 0x0073, 0, 0, 0}, 0x1e69 }, // U1E69 # LATIN SMALL LETTER S WITH DOT BELOW AND DOT ABOVE ++// /* broken */ { {UNITIZE(Qt::Key_Dead_Abovedot), 0x0000, 0x0073, 0, 0, 0}, 0x1e65 }, // U1E65 # LATIN SMALL LETTER S WITH ACUTE AND DOT ABOVE ++ { {UNITIZE(Qt::Key_Dead_Abovedot), 0x0020, 0, 0, 0, 0}, 0x02d9 }, // abovedot ++ { {UNITIZE(Qt::Key_Dead_Abovedot), 0x0041, 0, 0, 0, 0}, 0x0226 }, // U0226 # LATIN CAPITAL LETTER A WITH DOT ABOVE ++ { {UNITIZE(Qt::Key_Dead_Abovedot), 0x0042, 0, 0, 0, 0}, 0x1e02 }, // U1E02 # LATIN CAPITAL LETTER B WITH DOT ABOVE ++ { {UNITIZE(Qt::Key_Dead_Abovedot), 0x0043, 0, 0, 0, 0}, 0x010a }, // U010A # LATIN CAPITAL LETTER C WITH DOT ABOVE ++ { {UNITIZE(Qt::Key_Dead_Abovedot), 0x0044, 0, 0, 0, 0}, 0x1e0a }, // U1E0A # LATIN CAPITAL LETTER D WITH DOT ABOVE ++ { {UNITIZE(Qt::Key_Dead_Abovedot), 0x0045, 0, 0, 0, 0}, 0x0116 }, // U0116 # LATIN CAPITAL LETTER E WITH DOT ABOVE ++ { {UNITIZE(Qt::Key_Dead_Abovedot), 0x0046, 0, 0, 0, 0}, 0x1e1e }, // U1E1E # LATIN CAPITAL LETTER F WITH DOT ABOVE ++ { {UNITIZE(Qt::Key_Dead_Abovedot), 0x0047, 0, 0, 0, 0}, 0x0120 }, // U0120 # LATIN CAPITAL LETTER G WITH DOT ABOVE ++ { {UNITIZE(Qt::Key_Dead_Abovedot), 0x0048, 0, 0, 0, 0}, 0x1e22 }, // U1E22 # LATIN CAPITAL LETTER H WITH DOT ABOVE ++ { {UNITIZE(Qt::Key_Dead_Abovedot), 0x0049, 0, 0, 0, 0}, 0x0130 }, // U0130 # LATIN CAPITAL LETTER I WITH DOT ABOVE ++ { {UNITIZE(Qt::Key_Dead_Abovedot), 0x004d, 0, 0, 0, 0}, 0x1e40 }, // U1E40 # LATIN CAPITAL LETTER M WITH DOT ABOVE ++ { {UNITIZE(Qt::Key_Dead_Abovedot), 0x004e, 0, 0, 0, 0}, 0x1e44 }, // U1E44 # LATIN CAPITAL LETTER N WITH DOT ABOVE ++ { {UNITIZE(Qt::Key_Dead_Abovedot), 0x004f, 0, 0, 0, 0}, 0x022e }, // U022E # LATIN CAPITAL LETTER O WITH DOT ABOVE ++ { {UNITIZE(Qt::Key_Dead_Abovedot), 0x0050, 0, 0, 0, 0}, 0x1e56 }, // U1E56 # LATIN CAPITAL LETTER P WITH DOT ABOVE ++ { {UNITIZE(Qt::Key_Dead_Abovedot), 0x0052, 0, 0, 0, 0}, 0x1e58 }, // U1E58 # LATIN CAPITAL LETTER R WITH DOT ABOVE ++ { {UNITIZE(Qt::Key_Dead_Abovedot), 0x0053, 0, 0, 0, 0}, 0x1e60 }, // U1E60 # LATIN CAPITAL LETTER S WITH DOT ABOVE ++ { {UNITIZE(Qt::Key_Dead_Abovedot), 0x0054, 0, 0, 0, 0}, 0x1e6a }, // U1E6A # LATIN CAPITAL LETTER T WITH DOT ABOVE ++ { {UNITIZE(Qt::Key_Dead_Abovedot), 0x0057, 0, 0, 0, 0}, 0x1e86 }, // U1E86 # LATIN CAPITAL LETTER W WITH DOT ABOVE ++ { {UNITIZE(Qt::Key_Dead_Abovedot), 0x0058, 0, 0, 0, 0}, 0x1e8a }, // U1E8A # LATIN CAPITAL LETTER X WITH DOT ABOVE ++ { {UNITIZE(Qt::Key_Dead_Abovedot), 0x0059, 0, 0, 0, 0}, 0x1e8e }, // U1E8E # LATIN CAPITAL LETTER Y WITH DOT ABOVE ++ { {UNITIZE(Qt::Key_Dead_Abovedot), 0x005a, 0, 0, 0, 0}, 0x017b }, // U017B # LATIN CAPITAL LETTER Z WITH DOT ABOVE ++ { {UNITIZE(Qt::Key_Dead_Abovedot), 0x0061, 0, 0, 0, 0}, 0x0227 }, // U0227 # LATIN SMALL LETTER A WITH DOT ABOVE ++ { {UNITIZE(Qt::Key_Dead_Abovedot), 0x0062, 0, 0, 0, 0}, 0x1e03 }, // U1E03 # LATIN SMALL LETTER B WITH DOT ABOVE ++ { {UNITIZE(Qt::Key_Dead_Abovedot), 0x0063, 0, 0, 0, 0}, 0x010b }, // U010B # LATIN SMALL LETTER C WITH DOT ABOVE ++ { {UNITIZE(Qt::Key_Dead_Abovedot), 0x0064, 0, 0, 0, 0}, 0x1e0b }, // U1E0B # LATIN SMALL LETTER D WITH DOT ABOVE ++ { {UNITIZE(Qt::Key_Dead_Abovedot), 0x0065, 0, 0, 0, 0}, 0x0117 }, // U0117 # LATIN SMALL LETTER E WITH DOT ABOVE ++ { {UNITIZE(Qt::Key_Dead_Abovedot), 0x0066, 0, 0, 0, 0}, 0x1e1f }, // U1E1F # LATIN SMALL LETTER F WITH DOT ABOVE ++ { {UNITIZE(Qt::Key_Dead_Abovedot), 0x0067, 0, 0, 0, 0}, 0x0121 }, // U0121 # LATIN SMALL LETTER G WITH DOT ABOVE ++ { {UNITIZE(Qt::Key_Dead_Abovedot), 0x0068, 0, 0, 0, 0}, 0x1e23 }, // U1E23 # LATIN SMALL LETTER H WITH DOT ABOVE ++ { {UNITIZE(Qt::Key_Dead_Abovedot), 0x0069, 0, 0, 0, 0}, 0x0131 }, // U0131 # LATIN SMALL LETTER DOTLESS I ++ { {UNITIZE(Qt::Key_Dead_Abovedot), 0x006d, 0, 0, 0, 0}, 0x1e41 }, // U1E41 # LATIN SMALL LETTER M WITH DOT ABOVE ++ { {UNITIZE(Qt::Key_Dead_Abovedot), 0x006e, 0, 0, 0, 0}, 0x1e45 }, // U1E45 # LATIN SMALL LETTER N WITH DOT ABOVE ++ { {UNITIZE(Qt::Key_Dead_Abovedot), 0x006f, 0, 0, 0, 0}, 0x022f }, // U022F # LATIN SMALL LETTER O WITH DOT ABOVE ++ { {UNITIZE(Qt::Key_Dead_Abovedot), 0x0070, 0, 0, 0, 0}, 0x1e57 }, // U1E57 # LATIN SMALL LETTER P WITH DOT ABOVE ++ { {UNITIZE(Qt::Key_Dead_Abovedot), 0x0072, 0, 0, 0, 0}, 0x1e59 }, // U1E59 # LATIN SMALL LETTER R WITH DOT ABOVE ++ { {UNITIZE(Qt::Key_Dead_Abovedot), 0x0073, 0, 0, 0, 0}, 0x1e61 }, // U1E61 # LATIN SMALL LETTER S WITH DOT ABOVE ++ { {UNITIZE(Qt::Key_Dead_Abovedot), 0x0074, 0, 0, 0, 0}, 0x1e6b }, // U1E6B # LATIN SMALL LETTER T WITH DOT ABOVE ++ { {UNITIZE(Qt::Key_Dead_Abovedot), 0x0077, 0, 0, 0, 0}, 0x1e87 }, // U1E87 # LATIN SMALL LETTER W WITH DOT ABOVE ++ { {UNITIZE(Qt::Key_Dead_Abovedot), 0x0078, 0, 0, 0, 0}, 0x1e8b }, // U1E8B # LATIN SMALL LETTER X WITH DOT ABOVE ++ { {UNITIZE(Qt::Key_Dead_Abovedot), 0x0079, 0, 0, 0, 0}, 0x1e8f }, // U1E8F # LATIN SMALL LETTER Y WITH DOT ABOVE ++ { {UNITIZE(Qt::Key_Dead_Abovedot), 0x007a, 0, 0, 0, 0}, 0x017c }, // U017C # LATIN SMALL LETTER Z WITH DOT ABOVE ++ { {UNITIZE(Qt::Key_Dead_Abovedot), 0x015a, 0, 0, 0, 0}, 0x1e64 }, // U1E64 # LATIN CAPITAL LETTER S WITH ACUTE AND DOT ABOVE ++ { {UNITIZE(Qt::Key_Dead_Abovedot), 0x015b, 0, 0, 0, 0}, 0x1e65 }, // U1E65 # LATIN SMALL LETTER S WITH ACUTE AND DOT ABOVE ++ { {UNITIZE(Qt::Key_Dead_Abovedot), 0x0160, 0, 0, 0, 0}, 0x1e66 }, // U1E66 # LATIN CAPITAL LETTER S WITH CARON AND DOT ABOVE ++ { {UNITIZE(Qt::Key_Dead_Abovedot), 0x0161, 0, 0, 0, 0}, 0x1e67 }, // U1E67 # LATIN SMALL LETTER S WITH CARON AND DOT ABOVE ++ { {UNITIZE(Qt::Key_Dead_Abovedot), 0x017f, 0, 0, 0, 0}, 0x1e9b }, // U1E9B # LATIN SMALL LETTER LONG S WITH DOT ABOVE ++ { {UNITIZE(Qt::Key_Dead_Abovedot), 0x1e62, 0, 0, 0, 0}, 0x1e68 }, // U1E68 # LATIN CAPITAL LETTER S WITH DOT BELOW AND DOT ABOVE ++ { {UNITIZE(Qt::Key_Dead_Abovedot), 0x1e63, 0, 0, 0, 0}, 0x1e69 }, // U1E69 # LATIN SMALL LETTER S WITH DOT BELOW AND DOT ABOVE ++ { {UNITIZE(Qt::Key_Dead_Abovedot), UNITIZE(Qt::Key_Multi_key), 0x0021, 0x0053, 0, 0}, 0x1e68 }, // U1E68 # LATIN CAPITAL LETTER S WITH DOT BELOW AND DOT ABOVE ++ { {UNITIZE(Qt::Key_Dead_Abovedot), UNITIZE(Qt::Key_Multi_key), 0x0021, 0x0073, 0, 0}, 0x1e69 }, // U1E69 # LATIN SMALL LETTER S WITH DOT BELOW AND DOT ABOVE ++ { {UNITIZE(Qt::Key_Dead_Abovedot), UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0053, 0, 0}, 0x1e64 }, // U1E64 # LATIN CAPITAL LETTER S WITH ACUTE AND DOT ABOVE ++ { {UNITIZE(Qt::Key_Dead_Abovedot), UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0073, 0, 0}, 0x1e65 }, // U1E65 # LATIN SMALL LETTER S WITH ACUTE AND DOT ABOVE ++ { {UNITIZE(Qt::Key_Dead_Abovedot), UNITIZE(Qt::Key_Multi_key), 0x0063, 0x0053, 0, 0}, 0x1e66 }, // U1E66 # LATIN CAPITAL LETTER S WITH CARON AND DOT ABOVE ++ { {UNITIZE(Qt::Key_Dead_Abovedot), UNITIZE(Qt::Key_Multi_key), 0x0063, 0x0073, 0, 0}, 0x1e67 }, // U1E67 # LATIN SMALL LETTER S WITH CARON AND DOT ABOVE ++ { {UNITIZE(Qt::Key_Dead_Abovedot), UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0053, 0, 0}, 0x1e64 }, // U1E64 # LATIN CAPITAL LETTER S WITH ACUTE AND DOT ABOVE ++ { {UNITIZE(Qt::Key_Dead_Abovedot), UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0073, 0, 0}, 0x1e65 }, // U1E65 # LATIN SMALL LETTER S WITH ACUTE AND DOT ABOVE ++ { {UNITIZE(Qt::Key_Dead_Abovedot), UNITIZE(Qt::Key_Dead_Acute), 0x0053, 0, 0, 0}, 0x1e64 }, // U1E64 # LATIN CAPITAL LETTER S WITH ACUTE AND DOT ABOVE ++ { {UNITIZE(Qt::Key_Dead_Abovedot), UNITIZE(Qt::Key_Dead_Acute), 0x0073, 0, 0, 0}, 0x1e65 }, // U1E65 # LATIN SMALL LETTER S WITH ACUTE AND DOT ABOVE ++ { {UNITIZE(Qt::Key_Dead_Abovedot), UNITIZE(Qt::Key_Dead_Abovedot), 0, 0, 0, 0}, 0x02d9 }, // abovedot ++ { {UNITIZE(Qt::Key_Dead_Abovedot), UNITIZE(Qt::Key_Dead_Caron), 0x0053, 0, 0, 0}, 0x1e66 }, // U1E66 # LATIN CAPITAL LETTER S WITH CARON AND DOT ABOVE ++ { {UNITIZE(Qt::Key_Dead_Abovedot), UNITIZE(Qt::Key_Dead_Caron), 0x0073, 0, 0, 0}, 0x1e67 }, // U1E67 # LATIN SMALL LETTER S WITH CARON AND DOT ABOVE ++ { {UNITIZE(Qt::Key_Dead_Abovedot), UNITIZE(Qt::Key_Dead_Belowdot), 0x0053, 0, 0, 0}, 0x1e68 }, // U1E68 # LATIN CAPITAL LETTER S WITH DOT BELOW AND DOT ABOVE ++ { {UNITIZE(Qt::Key_Dead_Abovedot), UNITIZE(Qt::Key_Dead_Belowdot), 0x0073, 0, 0, 0}, 0x1e69 }, // U1E69 # LATIN SMALL LETTER S WITH DOT BELOW AND DOT ABOVE ++// /* broken */ { {UNITIZE(Qt::Key_Dead_Diaeresis), 0x0000, 0x004f, 0, 0, 0}, 0x1e4e }, // U1E4E # LATIN CAPITAL LETTER O WITH TILDE AND DIAERESIS ++// /* broken */ { {UNITIZE(Qt::Key_Dead_Diaeresis), 0x0000, 0x006f, 0, 0, 0}, 0x1e4f }, // U1E4F # LATIN SMALL LETTER O WITH TILDE AND DIAERESIS ++ { {UNITIZE(Qt::Key_Dead_Diaeresis), 0x0020, 0, 0, 0, 0}, 0x005c }, // quotedbl ++ { {UNITIZE(Qt::Key_Dead_Diaeresis), 0x0027, 0, 0, 0, 0}, 0x0344 }, // U0344 # COMBINING GREEK DIALYTIKA TONOS ++ { {UNITIZE(Qt::Key_Dead_Diaeresis), 0x0041, 0, 0, 0, 0}, 0x00c4 }, // U00C4 # LATIN CAPITAL LETTER A WITH DIAERESIS ++ { {UNITIZE(Qt::Key_Dead_Diaeresis), 0x0045, 0, 0, 0, 0}, 0x00cb }, // U00CB # LATIN CAPITAL LETTER E WITH DIAERESIS ++ { {UNITIZE(Qt::Key_Dead_Diaeresis), 0x0048, 0, 0, 0, 0}, 0x1e26 }, // U1E26 # LATIN CAPITAL LETTER H WITH DIAERESIS ++ { {UNITIZE(Qt::Key_Dead_Diaeresis), 0x0049, 0, 0, 0, 0}, 0x00cf }, // U00CF # LATIN CAPITAL LETTER I WITH DIAERESIS ++ { {UNITIZE(Qt::Key_Dead_Diaeresis), 0x004f, 0, 0, 0, 0}, 0x00d6 }, // U00D6 # LATIN CAPITAL LETTER O WITH DIAERESIS ++ { {UNITIZE(Qt::Key_Dead_Diaeresis), 0x0055, 0, 0, 0, 0}, 0x00dc }, // U00DC # LATIN CAPITAL LETTER U WITH DIAERESIS ++ { {UNITIZE(Qt::Key_Dead_Diaeresis), 0x0057, 0, 0, 0, 0}, 0x1e84 }, // U1E84 # LATIN CAPITAL LETTER W WITH DIAERESIS ++ { {UNITIZE(Qt::Key_Dead_Diaeresis), 0x0058, 0, 0, 0, 0}, 0x1e8c }, // U1E8C # LATIN CAPITAL LETTER X WITH DIAERESIS ++ { {UNITIZE(Qt::Key_Dead_Diaeresis), 0x0059, 0, 0, 0, 0}, 0x0178 }, // U0178 # LATIN CAPITAL LETTER Y WITH DIAERESIS ++ { {UNITIZE(Qt::Key_Dead_Diaeresis), 0x0061, 0, 0, 0, 0}, 0x00e4 }, // U00E4 # LATIN SMALL LETTER A WITH DIAERESIS ++ { {UNITIZE(Qt::Key_Dead_Diaeresis), 0x0065, 0, 0, 0, 0}, 0x00eb }, // U00EB # LATIN SMALL LETTER E WITH DIAERESIS ++ { {UNITIZE(Qt::Key_Dead_Diaeresis), 0x0068, 0, 0, 0, 0}, 0x1e27 }, // U1E27 # LATIN SMALL LETTER H WITH DIAERESIS ++ { {UNITIZE(Qt::Key_Dead_Diaeresis), 0x0069, 0, 0, 0, 0}, 0x00ef }, // U00EF # LATIN SMALL LETTER I WITH DIAERESIS ++ { {UNITIZE(Qt::Key_Dead_Diaeresis), 0x006f, 0, 0, 0, 0}, 0x00f6 }, // U00F6 # LATIN SMALL LETTER O WITH DIAERESIS ++ { {UNITIZE(Qt::Key_Dead_Diaeresis), 0x0074, 0, 0, 0, 0}, 0x1e97 }, // U1E97 # LATIN SMALL LETTER T WITH DIAERESIS ++ { {UNITIZE(Qt::Key_Dead_Diaeresis), 0x0075, 0, 0, 0, 0}, 0x00fc }, // U00FC # LATIN SMALL LETTER U WITH DIAERESIS ++ { {UNITIZE(Qt::Key_Dead_Diaeresis), 0x0077, 0, 0, 0, 0}, 0x1e85 }, // U1E85 # LATIN SMALL LETTER W WITH DIAERESIS ++ { {UNITIZE(Qt::Key_Dead_Diaeresis), 0x0078, 0, 0, 0, 0}, 0x1e8d }, // U1E8D # LATIN SMALL LETTER X WITH DIAERESIS ++ { {UNITIZE(Qt::Key_Dead_Diaeresis), 0x0079, 0, 0, 0, 0}, 0x00ff }, // U00FF # LATIN SMALL LETTER Y WITH DIAERESIS ++ { {UNITIZE(Qt::Key_Dead_Diaeresis), 0x00b4, 0, 0, 0, 0}, 0x0344 }, // U0344 # COMBINING GREEK DIALYTIKA TONOS ++ { {UNITIZE(Qt::Key_Dead_Diaeresis), 0x00d5, 0, 0, 0, 0}, 0x1e4e }, // U1E4E # LATIN CAPITAL LETTER O WITH TILDE AND DIAERESIS ++ { {UNITIZE(Qt::Key_Dead_Diaeresis), 0x00f5, 0, 0, 0, 0}, 0x1e4f }, // U1E4F # LATIN SMALL LETTER O WITH TILDE AND DIAERESIS ++ { {UNITIZE(Qt::Key_Dead_Diaeresis), 0x016a, 0, 0, 0, 0}, 0x1e7a }, // U1E7A # LATIN CAPITAL LETTER U WITH MACRON AND DIAERESIS ++ { {UNITIZE(Qt::Key_Dead_Diaeresis), 0x016b, 0, 0, 0, 0}, 0x1e7b }, // U1E7B # LATIN SMALL LETTER U WITH MACRON AND DIAERESIS ++ { {UNITIZE(Qt::Key_Dead_Diaeresis), 0x0399, 0, 0, 0, 0}, 0x03aa }, // U03AA # GREEK CAPITAL LETTER IOTA WITH DIALYTIKA ++ { {UNITIZE(Qt::Key_Dead_Diaeresis), 0x03a5, 0, 0, 0, 0}, 0x03ab }, // U03AB # GREEK CAPITAL LETTER UPSILON WITH DIALYTIKA ++ { {UNITIZE(Qt::Key_Dead_Diaeresis), 0x03b9, 0, 0, 0, 0}, 0x03ca }, // U03CA # GREEK SMALL LETTER IOTA WITH DIALYTIKA ++ { {UNITIZE(Qt::Key_Dead_Diaeresis), 0x03c5, 0, 0, 0, 0}, 0x03cb }, // U03CB # GREEK SMALL LETTER UPSILON WITH DIALYTIKA ++ { {UNITIZE(Qt::Key_Dead_Diaeresis), 0x0406, 0, 0, 0, 0}, 0x0407 }, // U0407 # CYRILLIC CAPITAL LETTER YI ++ { {UNITIZE(Qt::Key_Dead_Diaeresis), 0x0410, 0, 0, 0, 0}, 0x04d2 }, // U04D2 # CYRILLIC CAPITAL LETTER A WITH DIAERESIS ++ { {UNITIZE(Qt::Key_Dead_Diaeresis), 0x0415, 0, 0, 0, 0}, 0x0401 }, // U0401 # CYRILLIC CAPITAL LETTER IO ++ { {UNITIZE(Qt::Key_Dead_Diaeresis), 0x0416, 0, 0, 0, 0}, 0x04dc }, // U04DC # CYRILLIC CAPITAL LETTER ZHE WITH DIAERESIS ++ { {UNITIZE(Qt::Key_Dead_Diaeresis), 0x0417, 0, 0, 0, 0}, 0x04de }, // U04DE # CYRILLIC CAPITAL LETTER ZE WITH DIAERESIS ++ { {UNITIZE(Qt::Key_Dead_Diaeresis), 0x0418, 0, 0, 0, 0}, 0x04e4 }, // U04E4 # CYRILLIC CAPITAL LETTER I WITH DIAERESIS ++ { {UNITIZE(Qt::Key_Dead_Diaeresis), 0x041e, 0, 0, 0, 0}, 0x04e6 }, // U04E6 # CYRILLIC CAPITAL LETTER O WITH DIAERESIS ++ { {UNITIZE(Qt::Key_Dead_Diaeresis), 0x0423, 0, 0, 0, 0}, 0x04f0 }, // U04F0 # CYRILLIC CAPITAL LETTER U WITH DIAERESIS ++ { {UNITIZE(Qt::Key_Dead_Diaeresis), 0x0427, 0, 0, 0, 0}, 0x04f4 }, // U04F4 # CYRILLIC CAPITAL LETTER CHE WITH DIAERESIS ++ { {UNITIZE(Qt::Key_Dead_Diaeresis), 0x042b, 0, 0, 0, 0}, 0x04f8 }, // U04F8 # CYRILLIC CAPITAL LETTER YERU WITH DIAERESIS ++ { {UNITIZE(Qt::Key_Dead_Diaeresis), 0x042d, 0, 0, 0, 0}, 0x04ec }, // U04EC # CYRILLIC CAPITAL LETTER E WITH DIAERESIS ++ { {UNITIZE(Qt::Key_Dead_Diaeresis), 0x0430, 0, 0, 0, 0}, 0x04d3 }, // U04D3 # CYRILLIC SMALL LETTER A WITH DIAERESIS ++ { {UNITIZE(Qt::Key_Dead_Diaeresis), 0x0435, 0, 0, 0, 0}, 0x0451 }, // U0451 # CYRILLIC SMALL LETTER IO ++ { {UNITIZE(Qt::Key_Dead_Diaeresis), 0x0436, 0, 0, 0, 0}, 0x04dd }, // U04DD # CYRILLIC SMALL LETTER ZHE WITH DIAERESIS ++ { {UNITIZE(Qt::Key_Dead_Diaeresis), 0x0437, 0, 0, 0, 0}, 0x04df }, // U04DF # CYRILLIC SMALL LETTER ZE WITH DIAERESIS ++ { {UNITIZE(Qt::Key_Dead_Diaeresis), 0x0438, 0, 0, 0, 0}, 0x04e5 }, // U04E5 # CYRILLIC SMALL LETTER I WITH DIAERESIS ++ { {UNITIZE(Qt::Key_Dead_Diaeresis), 0x043e, 0, 0, 0, 0}, 0x04e7 }, // U04E7 # CYRILLIC SMALL LETTER O WITH DIAERESIS ++ { {UNITIZE(Qt::Key_Dead_Diaeresis), 0x0443, 0, 0, 0, 0}, 0x04f1 }, // U04F1 # CYRILLIC SMALL LETTER U WITH DIAERESIS ++ { {UNITIZE(Qt::Key_Dead_Diaeresis), 0x0447, 0, 0, 0, 0}, 0x04f5 }, // U04F5 # CYRILLIC SMALL LETTER CHE WITH DIAERESIS ++ { {UNITIZE(Qt::Key_Dead_Diaeresis), 0x044b, 0, 0, 0, 0}, 0x04f9 }, // U04F9 # CYRILLIC SMALL LETTER YERU WITH DIAERESIS ++ { {UNITIZE(Qt::Key_Dead_Diaeresis), 0x044d, 0, 0, 0, 0}, 0x04ed }, // U04ED # CYRILLIC SMALL LETTER E WITH DIAERESIS ++ { {UNITIZE(Qt::Key_Dead_Diaeresis), 0x0456, 0, 0, 0, 0}, 0x0457 }, // U0457 # CYRILLIC SMALL LETTER YI ++ { {UNITIZE(Qt::Key_Dead_Diaeresis), 0x04d8, 0, 0, 0, 0}, 0x04da }, // U04DA # CYRILLIC CAPITAL LETTER SCHWA WITH DIAERESIS ++ { {UNITIZE(Qt::Key_Dead_Diaeresis), 0x04d9, 0, 0, 0, 0}, 0x04db }, // U04DB # CYRILLIC SMALL LETTER SCHWA WITH DIAERESIS ++ { {UNITIZE(Qt::Key_Dead_Diaeresis), 0x04e8, 0, 0, 0, 0}, 0x04ea }, // U04EA # CYRILLIC CAPITAL LETTER BARRED O WITH DIAERESIS ++ { {UNITIZE(Qt::Key_Dead_Diaeresis), 0x04e9, 0, 0, 0, 0}, 0x04eb }, // U04EB # CYRILLIC SMALL LETTER BARRED O WITH DIAERESIS ++ { {UNITIZE(Qt::Key_Dead_Diaeresis), UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0055, 0, 0}, 0x1e7a }, // U1E7A # LATIN CAPITAL LETTER U WITH MACRON AND DIAERESIS ++ { {UNITIZE(Qt::Key_Dead_Diaeresis), UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0075, 0, 0}, 0x1e7b }, // U1E7B # LATIN SMALL LETTER U WITH MACRON AND DIAERESIS ++ { {UNITIZE(Qt::Key_Dead_Diaeresis), UNITIZE(Qt::Key_Multi_key), 0x007e, 0x004f, 0, 0}, 0x1e4e }, // U1E4E # LATIN CAPITAL LETTER O WITH TILDE AND DIAERESIS ++ { {UNITIZE(Qt::Key_Dead_Diaeresis), UNITIZE(Qt::Key_Multi_key), 0x007e, 0x006f, 0, 0}, 0x1e4f }, // U1E4F # LATIN SMALL LETTER O WITH TILDE AND DIAERESIS ++ { {UNITIZE(Qt::Key_Dead_Diaeresis), UNITIZE(Qt::Key_Multi_key), 0x00af, 0x0055, 0, 0}, 0x1e7a }, // U1E7A # LATIN CAPITAL LETTER U WITH MACRON AND DIAERESIS ++ { {UNITIZE(Qt::Key_Dead_Diaeresis), UNITIZE(Qt::Key_Multi_key), 0x00af, 0x0075, 0, 0}, 0x1e7b }, // U1E7B # LATIN SMALL LETTER U WITH MACRON AND DIAERESIS ++ { {UNITIZE(Qt::Key_Dead_Diaeresis), UNITIZE(Qt::Key_Dead_Tilde), 0x004f, 0, 0, 0}, 0x1e4e }, // U1E4E # LATIN CAPITAL LETTER O WITH TILDE AND DIAERESIS ++ { {UNITIZE(Qt::Key_Dead_Diaeresis), UNITIZE(Qt::Key_Dead_Tilde), 0x006f, 0, 0, 0}, 0x1e4f }, // U1E4F # LATIN SMALL LETTER O WITH TILDE AND DIAERESIS ++ { {UNITIZE(Qt::Key_Dead_Diaeresis), UNITIZE(Qt::Key_Dead_Macron), 0x0055, 0, 0, 0}, 0x1e7a }, // U1E7A # LATIN CAPITAL LETTER U WITH MACRON AND DIAERESIS ++ { {UNITIZE(Qt::Key_Dead_Diaeresis), UNITIZE(Qt::Key_Dead_Macron), 0x0075, 0, 0, 0}, 0x1e7b }, // U1E7B # LATIN SMALL LETTER U WITH MACRON AND DIAERESIS ++ { {UNITIZE(Qt::Key_Dead_Diaeresis), UNITIZE(Qt::Key_Dead_Diaeresis), 0, 0, 0, 0}, 0x00a8 }, // diaeresis ++ { {UNITIZE(Qt::Key_Dead_Abovering), 0x0020, 0, 0, 0, 0}, 0x00b0 }, // degree ++ { {UNITIZE(Qt::Key_Dead_Abovering), 0x0041, 0, 0, 0, 0}, 0x00c5 }, // U00C5 # LATIN CAPITAL LETTER A WITH RING ABOVE ++ { {UNITIZE(Qt::Key_Dead_Abovering), 0x0055, 0, 0, 0, 0}, 0x016e }, // U016E # LATIN CAPITAL LETTER U WITH RING ABOVE ++ { {UNITIZE(Qt::Key_Dead_Abovering), 0x0061, 0, 0, 0, 0}, 0x00e5 }, // U00E5 # LATIN SMALL LETTER A WITH RING ABOVE ++ { {UNITIZE(Qt::Key_Dead_Abovering), 0x0075, 0, 0, 0, 0}, 0x016f }, // U016F # LATIN SMALL LETTER U WITH RING ABOVE ++ { {UNITIZE(Qt::Key_Dead_Abovering), 0x0077, 0, 0, 0, 0}, 0x1e98 }, // U1E98 # LATIN SMALL LETTER W WITH RING ABOVE ++ { {UNITIZE(Qt::Key_Dead_Abovering), 0x0079, 0, 0, 0, 0}, 0x1e99 }, // U1E99 # LATIN SMALL LETTER Y WITH RING ABOVE ++ { {UNITIZE(Qt::Key_Dead_Abovering), UNITIZE(Qt::Key_Dead_Abovering), 0, 0, 0, 0}, 0x00b0 }, // degree ++ { {UNITIZE(Qt::Key_Dead_Doubleacute), 0x0020, 0, 0, 0, 0}, 0x02dd }, // U2dd ++ { {UNITIZE(Qt::Key_Dead_Doubleacute), 0x004f, 0, 0, 0, 0}, 0x0150 }, // U0150 # LATIN CAPITAL LETTER O WITH DOUBLE ACUTE ++ { {UNITIZE(Qt::Key_Dead_Doubleacute), 0x0055, 0, 0, 0, 0}, 0x0170 }, // U0170 # LATIN CAPITAL LETTER U WITH DOUBLE ACUTE ++ { {UNITIZE(Qt::Key_Dead_Doubleacute), 0x006f, 0, 0, 0, 0}, 0x0151 }, // U0151 # LATIN SMALL LETTER O WITH DOUBLE ACUTE ++ { {UNITIZE(Qt::Key_Dead_Doubleacute), 0x0075, 0, 0, 0, 0}, 0x0171 }, // U0171 # LATIN SMALL LETTER U WITH DOUBLE ACUTE ++ { {UNITIZE(Qt::Key_Dead_Doubleacute), 0x0423, 0, 0, 0, 0}, 0x04f2 }, // U04F2 # CYRILLIC CAPITAL LETTER U WITH DOUBLE ACUTE ++ { {UNITIZE(Qt::Key_Dead_Doubleacute), 0x0443, 0, 0, 0, 0}, 0x04f3 }, // U04F3 # CYRILLIC SMALL LETTER U WITH DOUBLE ACUTE ++ { {UNITIZE(Qt::Key_Dead_Doubleacute), UNITIZE(Qt::Key_Dead_Doubleacute), 0, 0, 0, 0}, 0x02dd }, // U2dd ++ { {UNITIZE(Qt::Key_Dead_Caron), 0x0020, 0, 0, 0, 0}, 0x02c7 }, // caron ++ { {UNITIZE(Qt::Key_Dead_Caron), 0x0041, 0, 0, 0, 0}, 0x01cd }, // U01CD # LATIN CAPITAL LETTER A WITH CARON ++ { {UNITIZE(Qt::Key_Dead_Caron), 0x0043, 0, 0, 0, 0}, 0x010c }, // U010C # LATIN CAPITAL LETTER C WITH CARON ++ { {UNITIZE(Qt::Key_Dead_Caron), 0x0044, 0, 0, 0, 0}, 0x010e }, // U010E # LATIN CAPITAL LETTER D WITH CARON ++ { {UNITIZE(Qt::Key_Dead_Caron), 0x0045, 0, 0, 0, 0}, 0x011a }, // U011A # LATIN CAPITAL LETTER E WITH CARON ++ { {UNITIZE(Qt::Key_Dead_Caron), 0x0047, 0, 0, 0, 0}, 0x01e6 }, // U01E6 # LATIN CAPITAL LETTER G WITH CARON ++ { {UNITIZE(Qt::Key_Dead_Caron), 0x0048, 0, 0, 0, 0}, 0x021e }, // U021E # LATIN CAPITAL LETTER H WITH CARON ++ { {UNITIZE(Qt::Key_Dead_Caron), 0x0049, 0, 0, 0, 0}, 0x01cf }, // U01CF # LATIN CAPITAL LETTER I WITH CARON ++ { {UNITIZE(Qt::Key_Dead_Caron), 0x004b, 0, 0, 0, 0}, 0x01e8 }, // U01E8 # LATIN CAPITAL LETTER K WITH CARON ++ { {UNITIZE(Qt::Key_Dead_Caron), 0x004c, 0, 0, 0, 0}, 0x013d }, // U013D # LATIN CAPITAL LETTER L WITH CARON ++ { {UNITIZE(Qt::Key_Dead_Caron), 0x004e, 0, 0, 0, 0}, 0x0147 }, // U0147 # LATIN CAPITAL LETTER N WITH CARON ++ { {UNITIZE(Qt::Key_Dead_Caron), 0x004f, 0, 0, 0, 0}, 0x01d1 }, // U01D1 # LATIN CAPITAL LETTER O WITH CARON ++ { {UNITIZE(Qt::Key_Dead_Caron), 0x0052, 0, 0, 0, 0}, 0x0158 }, // U0158 # LATIN CAPITAL LETTER R WITH CARON ++ { {UNITIZE(Qt::Key_Dead_Caron), 0x0053, 0, 0, 0, 0}, 0x0160 }, // U0160 # LATIN CAPITAL LETTER S WITH CARON ++ { {UNITIZE(Qt::Key_Dead_Caron), 0x0054, 0, 0, 0, 0}, 0x0164 }, // U0164 # LATIN CAPITAL LETTER T WITH CARON ++ { {UNITIZE(Qt::Key_Dead_Caron), 0x0055, 0, 0, 0, 0}, 0x01d3 }, // U01D3 # LATIN CAPITAL LETTER U WITH CARON ++ { {UNITIZE(Qt::Key_Dead_Caron), 0x005a, 0, 0, 0, 0}, 0x017d }, // U017D # LATIN CAPITAL LETTER Z WITH CARON ++ { {UNITIZE(Qt::Key_Dead_Caron), 0x0061, 0, 0, 0, 0}, 0x01ce }, // U01CE # LATIN SMALL LETTER A WITH CARON ++ { {UNITIZE(Qt::Key_Dead_Caron), 0x0063, 0, 0, 0, 0}, 0x010d }, // U010D # LATIN SMALL LETTER C WITH CARON ++ { {UNITIZE(Qt::Key_Dead_Caron), 0x0064, 0, 0, 0, 0}, 0x010f }, // U010F # LATIN SMALL LETTER D WITH CARON ++ { {UNITIZE(Qt::Key_Dead_Caron), 0x0065, 0, 0, 0, 0}, 0x011b }, // U011B # LATIN SMALL LETTER E WITH CARON ++ { {UNITIZE(Qt::Key_Dead_Caron), 0x0067, 0, 0, 0, 0}, 0x01e7 }, // U01E7 # LATIN SMALL LETTER G WITH CARON ++ { {UNITIZE(Qt::Key_Dead_Caron), 0x0068, 0, 0, 0, 0}, 0x021f }, // U021F # LATIN SMALL LETTER H WITH CARON ++ { {UNITIZE(Qt::Key_Dead_Caron), 0x0069, 0, 0, 0, 0}, 0x01d0 }, // U01D0 # LATIN SMALL LETTER I WITH CARON ++ { {UNITIZE(Qt::Key_Dead_Caron), 0x006a, 0, 0, 0, 0}, 0x01f0 }, // U01F0 # LATIN SMALL LETTER J WITH CARON ++ { {UNITIZE(Qt::Key_Dead_Caron), 0x006b, 0, 0, 0, 0}, 0x01e9 }, // U01E9 # LATIN SMALL LETTER K WITH CARON ++ { {UNITIZE(Qt::Key_Dead_Caron), 0x006c, 0, 0, 0, 0}, 0x013e }, // U013E # LATIN SMALL LETTER L WITH CARON ++ { {UNITIZE(Qt::Key_Dead_Caron), 0x006e, 0, 0, 0, 0}, 0x0148 }, // U0148 # LATIN SMALL LETTER N WITH CARON ++ { {UNITIZE(Qt::Key_Dead_Caron), 0x006f, 0, 0, 0, 0}, 0x01d2 }, // U01D2 # LATIN SMALL LETTER O WITH CARON ++ { {UNITIZE(Qt::Key_Dead_Caron), 0x0072, 0, 0, 0, 0}, 0x0159 }, // U0159 # LATIN SMALL LETTER R WITH CARON ++ { {UNITIZE(Qt::Key_Dead_Caron), 0x0073, 0, 0, 0, 0}, 0x0161 }, // U0161 # LATIN SMALL LETTER S WITH CARON ++ { {UNITIZE(Qt::Key_Dead_Caron), 0x0074, 0, 0, 0, 0}, 0x0165 }, // U0165 # LATIN SMALL LETTER T WITH CARON ++ { {UNITIZE(Qt::Key_Dead_Caron), 0x0075, 0, 0, 0, 0}, 0x01d4 }, // U01D4 # LATIN SMALL LETTER U WITH CARON ++ { {UNITIZE(Qt::Key_Dead_Caron), 0x007a, 0, 0, 0, 0}, 0x017e }, // U017E # LATIN SMALL LETTER Z WITH CARON ++ { {UNITIZE(Qt::Key_Dead_Caron), 0x00dc, 0, 0, 0, 0}, 0x01d9 }, // U01D9 # LATIN CAPITAL LETTER U WITH DIAERESIS AND CARON ++ { {UNITIZE(Qt::Key_Dead_Caron), 0x00fc, 0, 0, 0, 0}, 0x01da }, // U01DA # LATIN SMALL LETTER U WITH DIAERESIS AND CARON ++ { {UNITIZE(Qt::Key_Dead_Caron), 0x01b7, 0, 0, 0, 0}, 0x01ee }, // U01EE # LATIN CAPITAL LETTER EZH WITH CARON ++ { {UNITIZE(Qt::Key_Dead_Caron), 0x0292, 0, 0, 0, 0}, 0x01ef }, // U01EF # LATIN SMALL LETTER EZH WITH CARON ++ { {UNITIZE(Qt::Key_Dead_Caron), UNITIZE(Qt::Key_Multi_key), 0x0022, 0x0055, 0, 0}, 0x01d9 }, // U01D9 # LATIN CAPITAL LETTER U WITH DIAERESIS AND CARON ++ { {UNITIZE(Qt::Key_Dead_Caron), UNITIZE(Qt::Key_Multi_key), 0x0022, 0x0075, 0, 0}, 0x01da }, // U01DA # LATIN SMALL LETTER U WITH DIAERESIS AND CARON ++ { {UNITIZE(Qt::Key_Dead_Caron), UNITIZE(Qt::Key_Dead_Diaeresis), 0x0055, 0, 0, 0}, 0x01d9 }, // U01D9 # LATIN CAPITAL LETTER U WITH DIAERESIS AND CARON ++ { {UNITIZE(Qt::Key_Dead_Caron), UNITIZE(Qt::Key_Dead_Diaeresis), 0x0075, 0, 0, 0}, 0x01da }, // U01DA # LATIN SMALL LETTER U WITH DIAERESIS AND CARON ++ { {UNITIZE(Qt::Key_Dead_Caron), UNITIZE(Qt::Key_Dead_Caron), 0, 0, 0, 0}, 0x02c7 }, // caron ++ { {UNITIZE(Qt::Key_Dead_Cedilla), 0x0020, 0, 0, 0, 0}, 0x00b8 }, // cedilla ++ { {UNITIZE(Qt::Key_Dead_Cedilla), 0x0043, 0, 0, 0, 0}, 0x00c7 }, // U00C7 # LATIN CAPITAL LETTER C WITH CEDILLA ++ { {UNITIZE(Qt::Key_Dead_Cedilla), 0x0044, 0, 0, 0, 0}, 0x1e10 }, // U1E10 # LATIN CAPITAL LETTER D WITH CEDILLA ++ { {UNITIZE(Qt::Key_Dead_Cedilla), 0x0045, 0, 0, 0, 0}, 0x0228 }, // U0228 # LATIN CAPITAL LETTER E WITH CEDILLA ++ { {UNITIZE(Qt::Key_Dead_Cedilla), 0x0047, 0, 0, 0, 0}, 0x0122 }, // U0122 # LATIN CAPITAL LETTER G WITH CEDILLA ++ { {UNITIZE(Qt::Key_Dead_Cedilla), 0x0048, 0, 0, 0, 0}, 0x1e28 }, // U1E28 # LATIN CAPITAL LETTER H WITH CEDILLA ++ { {UNITIZE(Qt::Key_Dead_Cedilla), 0x004b, 0, 0, 0, 0}, 0x0136 }, // U0136 # LATIN CAPITAL LETTER K WITH CEDILLA ++ { {UNITIZE(Qt::Key_Dead_Cedilla), 0x004c, 0, 0, 0, 0}, 0x013b }, // U013B # LATIN CAPITAL LETTER L WITH CEDILLA ++ { {UNITIZE(Qt::Key_Dead_Cedilla), 0x004e, 0, 0, 0, 0}, 0x0145 }, // U0145 # LATIN CAPITAL LETTER N WITH CEDILLA ++ { {UNITIZE(Qt::Key_Dead_Cedilla), 0x0052, 0, 0, 0, 0}, 0x0156 }, // U0156 # LATIN CAPITAL LETTER R WITH CEDILLA ++ { {UNITIZE(Qt::Key_Dead_Cedilla), 0x0053, 0, 0, 0, 0}, 0x015e }, // U015E # LATIN CAPITAL LETTER S WITH CEDILLA ++ { {UNITIZE(Qt::Key_Dead_Cedilla), 0x0054, 0, 0, 0, 0}, 0x0162 }, // U0162 # LATIN CAPITAL LETTER T WITH CEDILLA ++ { {UNITIZE(Qt::Key_Dead_Cedilla), 0x0063, 0, 0, 0, 0}, 0x00e7 }, // U00E7 # LATIN SMALL LETTER C WITH CEDILLA ++ { {UNITIZE(Qt::Key_Dead_Cedilla), 0x0064, 0, 0, 0, 0}, 0x1e11 }, // U1E11 # LATIN SMALL LETTER D WITH CEDILLA ++ { {UNITIZE(Qt::Key_Dead_Cedilla), 0x0065, 0, 0, 0, 0}, 0x0229 }, // U0229 # LATIN SMALL LETTER E WITH CEDILLA ++ { {UNITIZE(Qt::Key_Dead_Cedilla), 0x0067, 0, 0, 0, 0}, 0x0123 }, // U0123 # LATIN SMALL LETTER G WITH CEDILLA ++ { {UNITIZE(Qt::Key_Dead_Cedilla), 0x0068, 0, 0, 0, 0}, 0x1e29 }, // U1E29 # LATIN SMALL LETTER H WITH CEDILLA ++ { {UNITIZE(Qt::Key_Dead_Cedilla), 0x006b, 0, 0, 0, 0}, 0x0137 }, // U0137 # LATIN SMALL LETTER K WITH CEDILLA ++ { {UNITIZE(Qt::Key_Dead_Cedilla), 0x006c, 0, 0, 0, 0}, 0x013c }, // U013C # LATIN SMALL LETTER L WITH CEDILLA ++ { {UNITIZE(Qt::Key_Dead_Cedilla), 0x006e, 0, 0, 0, 0}, 0x0146 }, // U0146 # LATIN SMALL LETTER N WITH CEDILLA ++ { {UNITIZE(Qt::Key_Dead_Cedilla), 0x0072, 0, 0, 0, 0}, 0x0157 }, // U0157 # LATIN SMALL LETTER R WITH CEDILLA ++ { {UNITIZE(Qt::Key_Dead_Cedilla), 0x0073, 0, 0, 0, 0}, 0x015f }, // U015F # LATIN SMALL LETTER S WITH CEDILLA ++ { {UNITIZE(Qt::Key_Dead_Cedilla), 0x0074, 0, 0, 0, 0}, 0x0163 }, // U0163 # LATIN SMALL LETTER T WITH CEDILLA ++ { {UNITIZE(Qt::Key_Dead_Cedilla), UNITIZE(Qt::Key_Dead_Cedilla), 0, 0, 0, 0}, 0x00b8 }, // cedilla ++ { {UNITIZE(Qt::Key_Dead_Ogonek), 0x0041, 0, 0, 0, 0}, 0x0104 }, // U0104 # LATIN CAPITAL LETTER A WITH OGONEK ++ { {UNITIZE(Qt::Key_Dead_Ogonek), 0x0045, 0, 0, 0, 0}, 0x0118 }, // U0118 # LATIN CAPITAL LETTER E WITH OGONEK ++ { {UNITIZE(Qt::Key_Dead_Ogonek), 0x0049, 0, 0, 0, 0}, 0x012e }, // U012E # LATIN CAPITAL LETTER I WITH OGONEK ++ { {UNITIZE(Qt::Key_Dead_Ogonek), 0x004f, 0, 0, 0, 0}, 0x01ea }, // U01EA # LATIN CAPITAL LETTER O WITH OGONEK ++ { {UNITIZE(Qt::Key_Dead_Ogonek), 0x0055, 0, 0, 0, 0}, 0x0172 }, // U0172 # LATIN CAPITAL LETTER U WITH OGONEK ++ { {UNITIZE(Qt::Key_Dead_Ogonek), 0x0061, 0, 0, 0, 0}, 0x0105 }, // U0105 # LATIN SMALL LETTER A WITH OGONEK ++ { {UNITIZE(Qt::Key_Dead_Ogonek), 0x0065, 0, 0, 0, 0}, 0x0119 }, // U0119 # LATIN SMALL LETTER E WITH OGONEK ++ { {UNITIZE(Qt::Key_Dead_Ogonek), 0x0069, 0, 0, 0, 0}, 0x012f }, // U012F # LATIN SMALL LETTER I WITH OGONEK ++ { {UNITIZE(Qt::Key_Dead_Ogonek), 0x006f, 0, 0, 0, 0}, 0x01eb }, // U01EB # LATIN SMALL LETTER O WITH OGONEK ++ { {UNITIZE(Qt::Key_Dead_Ogonek), 0x0075, 0, 0, 0, 0}, 0x0173 }, // U0173 # LATIN SMALL LETTER U WITH OGONEK ++ { {UNITIZE(Qt::Key_Dead_Ogonek), UNITIZE(Qt::Key_Dead_Ogonek), 0, 0, 0, 0}, 0x02db }, // ogonek ++// /* broken */ { {UNITIZE(Qt::Key_Dead_Ogonek), dead_space, 0, 0, 0, 0}, 0x02db }, // ogonek ++// /* broken */ { {UNITIZE(Qt::Key_Dead_Iota), 0x0000, 0x0313, 0x0391, 0, 0}, 0x1f8c }, // U1F8C # GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA AND PROSGEGRAMMENI ++// /* broken */ { {UNITIZE(Qt::Key_Dead_Iota), 0x0000, 0x0313, 0x0391, 0, 0}, 0x1f8a }, // U1F8A # GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA AND PROSGEGRAMMENI ++// /* broken */ { {UNITIZE(Qt::Key_Dead_Iota), 0x0000, 0x0313, 0x0397, 0, 0}, 0x1f9c }, // U1F9C # GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA AND PROSGEGRAMMENI ++// /* broken */ { {UNITIZE(Qt::Key_Dead_Iota), 0x0000, 0x0313, 0x0397, 0, 0}, 0x1f9a }, // U1F9A # GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA AND PROSGEGRAMMENI ++// /* broken */ { {UNITIZE(Qt::Key_Dead_Iota), 0x0000, 0x0313, 0x03a9, 0, 0}, 0x1faa }, // U1FAA # GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA AND PROSGEGRAMMENI ++// /* broken */ { {UNITIZE(Qt::Key_Dead_Iota), 0x0000, 0x0313, 0x03a9, 0, 0}, 0x1fac }, // U1FAC # GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA AND PROSGEGRAMMENI ++// /* broken */ { {UNITIZE(Qt::Key_Dead_Iota), 0x0000, 0x0313, 0x03b1, 0, 0}, 0x1f82 }, // U1F82 # GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA AND YPOGEGRAMMENI ++// /* broken */ { {UNITIZE(Qt::Key_Dead_Iota), 0x0000, 0x0313, 0x03b1, 0, 0}, 0x1f84 }, // U1F84 # GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA AND YPOGEGRAMMENI ++// /* broken */ { {UNITIZE(Qt::Key_Dead_Iota), 0x0000, 0x0313, 0x03b7, 0, 0}, 0x1f94 }, // U1F94 # GREEK SMALL LETTER ETA WITH PSILI AND OXIA AND YPOGEGRAMMENI ++// /* broken */ { {UNITIZE(Qt::Key_Dead_Iota), 0x0000, 0x0313, 0x03b7, 0, 0}, 0x1f92 }, // U1F92 # GREEK SMALL LETTER ETA WITH PSILI AND VARIA AND YPOGEGRAMMENI ++// /* broken */ { {UNITIZE(Qt::Key_Dead_Iota), 0x0000, 0x0313, 0x03c9, 0, 0}, 0x1fa2 }, // U1FA2 # GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA AND YPOGEGRAMMENI ++// /* broken */ { {UNITIZE(Qt::Key_Dead_Iota), 0x0000, 0x0313, 0x03c9, 0, 0}, 0x1fa4 }, // U1FA4 # GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA AND YPOGEGRAMMENI ++// /* broken */ { {UNITIZE(Qt::Key_Dead_Iota), 0x0000, 0x0314, 0x0391, 0, 0}, 0x1f8b }, // U1F8B # GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA AND PROSGEGRAMMENI ++// /* broken */ { {UNITIZE(Qt::Key_Dead_Iota), 0x0000, 0x0314, 0x0391, 0, 0}, 0x1f8d }, // U1F8D # GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA AND PROSGEGRAMMENI ++// /* broken */ { {UNITIZE(Qt::Key_Dead_Iota), 0x0000, 0x0314, 0x0397, 0, 0}, 0x1f9b }, // U1F9B # GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA AND PROSGEGRAMMENI ++// /* broken */ { {UNITIZE(Qt::Key_Dead_Iota), 0x0000, 0x0314, 0x0397, 0, 0}, 0x1f9d }, // U1F9D # GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA AND PROSGEGRAMMENI ++// /* broken */ { {UNITIZE(Qt::Key_Dead_Iota), 0x0000, 0x0314, 0x03a9, 0, 0}, 0x1fab }, // U1FAB # GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA AND PROSGEGRAMMENI ++// /* broken */ { {UNITIZE(Qt::Key_Dead_Iota), 0x0000, 0x0314, 0x03a9, 0, 0}, 0x1fad }, // U1FAD # GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA AND PROSGEGRAMMENI ++// /* broken */ { {UNITIZE(Qt::Key_Dead_Iota), 0x0000, 0x0314, 0x03b1, 0, 0}, 0x1f83 }, // U1F83 # GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA AND YPOGEGRAMMENI ++// /* broken */ { {UNITIZE(Qt::Key_Dead_Iota), 0x0000, 0x0314, 0x03b1, 0, 0}, 0x1f85 }, // U1F85 # GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA AND YPOGEGRAMMENI ++// /* broken */ { {UNITIZE(Qt::Key_Dead_Iota), 0x0000, 0x0314, 0x03b7, 0, 0}, 0x1f95 }, // U1F95 # GREEK SMALL LETTER ETA WITH DASIA AND OXIA AND YPOGEGRAMMENI ++// /* broken */ { {UNITIZE(Qt::Key_Dead_Iota), 0x0000, 0x0314, 0x03b7, 0, 0}, 0x1f93 }, // U1F93 # GREEK SMALL LETTER ETA WITH DASIA AND VARIA AND YPOGEGRAMMENI ++// /* broken */ { {UNITIZE(Qt::Key_Dead_Iota), 0x0000, 0x0314, 0x03c9, 0, 0}, 0x1fa5 }, // U1FA5 # GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA AND YPOGEGRAMMENI ++// /* broken */ { {UNITIZE(Qt::Key_Dead_Iota), 0x0000, 0x0314, 0x03c9, 0, 0}, 0x1fa3 }, // U1FA3 # GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA AND YPOGEGRAMMENI ++// /* broken */ { {UNITIZE(Qt::Key_Dead_Iota), 0x0000, 0x03b1, 0, 0, 0}, 0x1fb4 }, // U1FB4 # GREEK SMALL LETTER ALPHA WITH OXIA AND YPOGEGRAMMENI ++// /* broken */ { {UNITIZE(Qt::Key_Dead_Iota), 0x0000, 0x03b1, 0, 0, 0}, 0x1fb2 }, // U1FB2 # GREEK SMALL LETTER ALPHA WITH VARIA AND YPOGEGRAMMENI ++// /* broken */ { {UNITIZE(Qt::Key_Dead_Iota), 0x0000, 0x03b7, 0, 0, 0}, 0x1fc4 }, // U1FC4 # GREEK SMALL LETTER ETA WITH OXIA AND YPOGEGRAMMENI ++// /* broken */ { {UNITIZE(Qt::Key_Dead_Iota), 0x0000, 0x03b7, 0, 0, 0}, 0x1fc2 }, // U1FC2 # GREEK SMALL LETTER ETA WITH VARIA AND YPOGEGRAMMENI ++// /* broken */ { {UNITIZE(Qt::Key_Dead_Iota), 0x0000, 0x03c9, 0, 0, 0}, 0x1ff4 }, // U1FF4 # GREEK SMALL LETTER OMEGA WITH OXIA AND YPOGEGRAMMENI ++// /* broken */ { {UNITIZE(Qt::Key_Dead_Iota), 0x0000, 0x03c9, 0, 0, 0}, 0x1ff2 }, // U1FF2 # GREEK SMALL LETTER OMEGA WITH VARIA AND YPOGEGRAMMENI ++// /* broken */ { {UNITIZE(Qt::Key_Dead_Iota), 0x0000, 0x1f00, 0, 0, 0}, 0x1f84 }, // U1F84 # GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA AND YPOGEGRAMMENI ++// /* broken */ { {UNITIZE(Qt::Key_Dead_Iota), 0x0000, 0x1f00, 0, 0, 0}, 0x1f82 }, // U1F82 # GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA AND YPOGEGRAMMENI ++// /* broken */ { {UNITIZE(Qt::Key_Dead_Iota), 0x0000, 0x1f01, 0, 0, 0}, 0x1f83 }, // U1F83 # GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA AND YPOGEGRAMMENI ++// /* broken */ { {UNITIZE(Qt::Key_Dead_Iota), 0x0000, 0x1f01, 0, 0, 0}, 0x1f85 }, // U1F85 # GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA AND YPOGEGRAMMENI ++// /* broken */ { {UNITIZE(Qt::Key_Dead_Iota), 0x0000, 0x1f08, 0, 0, 0}, 0x1f8a }, // U1F8A # GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA AND PROSGEGRAMMENI ++// /* broken */ { {UNITIZE(Qt::Key_Dead_Iota), 0x0000, 0x1f08, 0, 0, 0}, 0x1f8c }, // U1F8C # GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA AND PROSGEGRAMMENI ++// /* broken */ { {UNITIZE(Qt::Key_Dead_Iota), 0x0000, 0x1f09, 0, 0, 0}, 0x1f8b }, // U1F8B # GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA AND PROSGEGRAMMENI ++// /* broken */ { {UNITIZE(Qt::Key_Dead_Iota), 0x0000, 0x1f09, 0, 0, 0}, 0x1f8d }, // U1F8D # GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA AND PROSGEGRAMMENI ++// /* broken */ { {UNITIZE(Qt::Key_Dead_Iota), 0x0000, 0x1f20, 0, 0, 0}, 0x1f94 }, // U1F94 # GREEK SMALL LETTER ETA WITH PSILI AND OXIA AND YPOGEGRAMMENI ++// /* broken */ { {UNITIZE(Qt::Key_Dead_Iota), 0x0000, 0x1f20, 0, 0, 0}, 0x1f92 }, // U1F92 # GREEK SMALL LETTER ETA WITH PSILI AND VARIA AND YPOGEGRAMMENI ++// /* broken */ { {UNITIZE(Qt::Key_Dead_Iota), 0x0000, 0x1f21, 0, 0, 0}, 0x1f93 }, // U1F93 # GREEK SMALL LETTER ETA WITH DASIA AND VARIA AND YPOGEGRAMMENI ++// /* broken */ { {UNITIZE(Qt::Key_Dead_Iota), 0x0000, 0x1f21, 0, 0, 0}, 0x1f95 }, // U1F95 # GREEK SMALL LETTER ETA WITH DASIA AND OXIA AND YPOGEGRAMMENI ++// /* broken */ { {UNITIZE(Qt::Key_Dead_Iota), 0x0000, 0x1f28, 0, 0, 0}, 0x1f9c }, // U1F9C # GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA AND PROSGEGRAMMENI ++// /* broken */ { {UNITIZE(Qt::Key_Dead_Iota), 0x0000, 0x1f28, 0, 0, 0}, 0x1f9a }, // U1F9A # GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA AND PROSGEGRAMMENI ++// /* broken */ { {UNITIZE(Qt::Key_Dead_Iota), 0x0000, 0x1f29, 0, 0, 0}, 0x1f9d }, // U1F9D # GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA AND PROSGEGRAMMENI ++// /* broken */ { {UNITIZE(Qt::Key_Dead_Iota), 0x0000, 0x1f29, 0, 0, 0}, 0x1f9b }, // U1F9B # GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA AND PROSGEGRAMMENI ++// /* broken */ { {UNITIZE(Qt::Key_Dead_Iota), 0x0000, 0x1f60, 0, 0, 0}, 0x1fa2 }, // U1FA2 # GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA AND YPOGEGRAMMENI ++// /* broken */ { {UNITIZE(Qt::Key_Dead_Iota), 0x0000, 0x1f60, 0, 0, 0}, 0x1fa4 }, // U1FA4 # GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA AND YPOGEGRAMMENI ++// /* broken */ { {UNITIZE(Qt::Key_Dead_Iota), 0x0000, 0x1f61, 0, 0, 0}, 0x1fa5 }, // U1FA5 # GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA AND YPOGEGRAMMENI ++// /* broken */ { {UNITIZE(Qt::Key_Dead_Iota), 0x0000, 0x1f61, 0, 0, 0}, 0x1fa3 }, // U1FA3 # GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA AND YPOGEGRAMMENI ++// /* broken */ { {UNITIZE(Qt::Key_Dead_Iota), 0x0000, 0x1f68, 0, 0, 0}, 0x1fac }, // U1FAC # GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA AND PROSGEGRAMMENI ++// /* broken */ { {UNITIZE(Qt::Key_Dead_Iota), 0x0000, 0x1f68, 0, 0, 0}, 0x1faa }, // U1FAA # GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA AND PROSGEGRAMMENI ++// /* broken */ { {UNITIZE(Qt::Key_Dead_Iota), 0x0000, 0x1f69, 0, 0, 0}, 0x1fad }, // U1FAD # GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA AND PROSGEGRAMMENI ++// /* broken */ { {UNITIZE(Qt::Key_Dead_Iota), 0x0000, 0x1f69, 0, 0, 0}, 0x1fab }, // U1FAB # GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA AND PROSGEGRAMMENI ++// /* broken */ { {UNITIZE(Qt::Key_Dead_Iota), 0x0000, UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0391, 0}, 0x1f8d }, // U1F8D # GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA AND PROSGEGRAMMENI ++// /* broken */ { {UNITIZE(Qt::Key_Dead_Iota), 0x0000, UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0391, 0}, 0x1f8b }, // U1F8B # GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA AND PROSGEGRAMMENI ++// /* broken */ { {UNITIZE(Qt::Key_Dead_Iota), 0x0000, UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0397, 0}, 0x1f9d }, // U1F9D # GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA AND PROSGEGRAMMENI ++// /* broken */ { {UNITIZE(Qt::Key_Dead_Iota), 0x0000, UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0397, 0}, 0x1f9b }, // U1F9B # GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA AND PROSGEGRAMMENI ++// /* broken */ { {UNITIZE(Qt::Key_Dead_Iota), 0x0000, UNITIZE(Qt::Key_Multi_key), 0x0028, 0x03a9, 0}, 0x1fab }, // U1FAB # GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA AND PROSGEGRAMMENI ++// /* broken */ { {UNITIZE(Qt::Key_Dead_Iota), 0x0000, UNITIZE(Qt::Key_Multi_key), 0x0028, 0x03a9, 0}, 0x1fad }, // U1FAD # GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA AND PROSGEGRAMMENI ++// /* broken */ { {UNITIZE(Qt::Key_Dead_Iota), 0x0000, UNITIZE(Qt::Key_Multi_key), 0x0028, 0x03b1, 0}, 0x1f85 }, // U1F85 # GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA AND YPOGEGRAMMENI ++// /* broken */ { {UNITIZE(Qt::Key_Dead_Iota), 0x0000, UNITIZE(Qt::Key_Multi_key), 0x0028, 0x03b1, 0}, 0x1f83 }, // U1F83 # GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA AND YPOGEGRAMMENI ++// /* broken */ { {UNITIZE(Qt::Key_Dead_Iota), 0x0000, UNITIZE(Qt::Key_Multi_key), 0x0028, 0x03b7, 0}, 0x1f95 }, // U1F95 # GREEK SMALL LETTER ETA WITH DASIA AND OXIA AND YPOGEGRAMMENI ++// /* broken */ { {UNITIZE(Qt::Key_Dead_Iota), 0x0000, UNITIZE(Qt::Key_Multi_key), 0x0028, 0x03b7, 0}, 0x1f93 }, // U1F93 # GREEK SMALL LETTER ETA WITH DASIA AND VARIA AND YPOGEGRAMMENI ++// /* broken */ { {UNITIZE(Qt::Key_Dead_Iota), 0x0000, UNITIZE(Qt::Key_Multi_key), 0x0028, 0x03c9, 0}, 0x1fa3 }, // U1FA3 # GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA AND YPOGEGRAMMENI ++// /* broken */ { {UNITIZE(Qt::Key_Dead_Iota), 0x0000, UNITIZE(Qt::Key_Multi_key), 0x0028, 0x03c9, 0}, 0x1fa5 }, // U1FA5 # GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA AND YPOGEGRAMMENI ++// /* broken */ { {UNITIZE(Qt::Key_Dead_Iota), 0x0000, UNITIZE(Qt::Key_Multi_key), 0x0029, 0x0391, 0}, 0x1f8a }, // U1F8A # GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA AND PROSGEGRAMMENI ++// /* broken */ { {UNITIZE(Qt::Key_Dead_Iota), 0x0000, UNITIZE(Qt::Key_Multi_key), 0x0029, 0x0391, 0}, 0x1f8c }, // U1F8C # GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA AND PROSGEGRAMMENI ++// /* broken */ { {UNITIZE(Qt::Key_Dead_Iota), 0x0000, UNITIZE(Qt::Key_Multi_key), 0x0029, 0x0397, 0}, 0x1f9a }, // U1F9A # GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA AND PROSGEGRAMMENI ++// /* broken */ { {UNITIZE(Qt::Key_Dead_Iota), 0x0000, UNITIZE(Qt::Key_Multi_key), 0x0029, 0x0397, 0}, 0x1f9c }, // U1F9C # GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA AND PROSGEGRAMMENI ++// /* broken */ { {UNITIZE(Qt::Key_Dead_Iota), 0x0000, UNITIZE(Qt::Key_Multi_key), 0x0029, 0x03a9, 0}, 0x1fac }, // U1FAC # GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA AND PROSGEGRAMMENI ++// /* broken */ { {UNITIZE(Qt::Key_Dead_Iota), 0x0000, UNITIZE(Qt::Key_Multi_key), 0x0029, 0x03a9, 0}, 0x1faa }, // U1FAA # GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA AND PROSGEGRAMMENI ++// /* broken */ { {UNITIZE(Qt::Key_Dead_Iota), 0x0000, UNITIZE(Qt::Key_Multi_key), 0x0029, 0x03b1, 0}, 0x1f84 }, // U1F84 # GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA AND YPOGEGRAMMENI ++// /* broken */ { {UNITIZE(Qt::Key_Dead_Iota), 0x0000, UNITIZE(Qt::Key_Multi_key), 0x0029, 0x03b1, 0}, 0x1f82 }, // U1F82 # GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA AND YPOGEGRAMMENI ++// /* broken */ { {UNITIZE(Qt::Key_Dead_Iota), 0x0000, UNITIZE(Qt::Key_Multi_key), 0x0029, 0x03b7, 0}, 0x1f94 }, // U1F94 # GREEK SMALL LETTER ETA WITH PSILI AND OXIA AND YPOGEGRAMMENI ++// /* broken */ { {UNITIZE(Qt::Key_Dead_Iota), 0x0000, UNITIZE(Qt::Key_Multi_key), 0x0029, 0x03b7, 0}, 0x1f92 }, // U1F92 # GREEK SMALL LETTER ETA WITH PSILI AND VARIA AND YPOGEGRAMMENI ++// /* broken */ { {UNITIZE(Qt::Key_Dead_Iota), 0x0000, UNITIZE(Qt::Key_Multi_key), 0x0029, 0x03c9, 0}, 0x1fa2 }, // U1FA2 # GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA AND YPOGEGRAMMENI ++// /* broken */ { {UNITIZE(Qt::Key_Dead_Iota), 0x0000, UNITIZE(Qt::Key_Multi_key), 0x0029, 0x03c9, 0}, 0x1fa4 }, // U1FA4 # GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), 0x0313, 0x0391, 0, 0, 0}, 0x1f88 }, // U1F88 # GREEK CAPITAL LETTER ALPHA WITH PSILI AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), 0x0313, 0x0397, 0, 0, 0}, 0x1f98 }, // U1F98 # GREEK CAPITAL LETTER ETA WITH PSILI AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), 0x0313, 0x03a9, 0, 0, 0}, 0x1fa8 }, // U1FA8 # GREEK CAPITAL LETTER OMEGA WITH PSILI AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), 0x0313, 0x03b1, 0, 0, 0}, 0x1f80 }, // U1F80 # GREEK SMALL LETTER ALPHA WITH PSILI AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), 0x0313, 0x03b7, 0, 0, 0}, 0x1f90 }, // U1F90 # GREEK SMALL LETTER ETA WITH PSILI AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), 0x0313, 0x03c9, 0, 0, 0}, 0x1fa0 }, // U1FA0 # GREEK SMALL LETTER OMEGA WITH PSILI AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), 0x0314, 0x0391, 0, 0, 0}, 0x1f89 }, // U1F89 # GREEK CAPITAL LETTER ALPHA WITH DASIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), 0x0314, 0x0397, 0, 0, 0}, 0x1f99 }, // U1F99 # GREEK CAPITAL LETTER ETA WITH DASIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), 0x0314, 0x03a9, 0, 0, 0}, 0x1fa9 }, // U1FA9 # GREEK CAPITAL LETTER OMEGA WITH DASIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), 0x0314, 0x03b1, 0, 0, 0}, 0x1f81 }, // U1F81 # GREEK SMALL LETTER ALPHA WITH DASIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), 0x0314, 0x03b7, 0, 0, 0}, 0x1f91 }, // U1F91 # GREEK SMALL LETTER ETA WITH DASIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), 0x0314, 0x03c9, 0, 0, 0}, 0x1fa1 }, // U1FA1 # GREEK SMALL LETTER OMEGA WITH DASIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), 0x0342, 0x0313, 0x0391, 0, 0}, 0x1f8e }, // U1F8E # GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), 0x0342, 0x0313, 0x0397, 0, 0}, 0x1f9e }, // U1F9E # GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), 0x0342, 0x0313, 0x03a9, 0, 0}, 0x1fae }, // U1FAE # GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), 0x0342, 0x0313, 0x03b1, 0, 0}, 0x1f86 }, // U1F86 # GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), 0x0342, 0x0313, 0x03b7, 0, 0}, 0x1f96 }, // U1F96 # GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), 0x0342, 0x0313, 0x03c9, 0, 0}, 0x1fa6 }, // U1FA6 # GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), 0x0342, 0x0314, 0x0391, 0, 0}, 0x1f8f }, // U1F8F # GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), 0x0342, 0x0314, 0x0397, 0, 0}, 0x1f9f }, // U1F9F # GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), 0x0342, 0x0314, 0x03a9, 0, 0}, 0x1faf }, // U1FAF # GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), 0x0342, 0x0314, 0x03b1, 0, 0}, 0x1f87 }, // U1F87 # GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), 0x0342, 0x0314, 0x03b7, 0, 0}, 0x1f97 }, // U1F97 # GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), 0x0342, 0x0314, 0x03c9, 0, 0}, 0x1fa7 }, // U1FA7 # GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), 0x0342, 0x03b1, 0, 0, 0}, 0x1fb7 }, // U1FB7 # GREEK SMALL LETTER ALPHA WITH PERISPOMENI AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), 0x0342, 0x03b7, 0, 0, 0}, 0x1fc7 }, // U1FC7 # GREEK SMALL LETTER ETA WITH PERISPOMENI AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), 0x0342, 0x03c9, 0, 0, 0}, 0x1ff7 }, // U1FF7 # GREEK SMALL LETTER OMEGA WITH PERISPOMENI AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), 0x0342, 0x1f00, 0, 0, 0}, 0x1f86 }, // U1F86 # GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), 0x0342, 0x1f01, 0, 0, 0}, 0x1f87 }, // U1F87 # GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), 0x0342, 0x1f08, 0, 0, 0}, 0x1f8e }, // U1F8E # GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), 0x0342, 0x1f09, 0, 0, 0}, 0x1f8f }, // U1F8F # GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), 0x0342, 0x1f20, 0, 0, 0}, 0x1f96 }, // U1F96 # GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), 0x0342, 0x1f21, 0, 0, 0}, 0x1f97 }, // U1F97 # GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), 0x0342, 0x1f28, 0, 0, 0}, 0x1f9e }, // U1F9E # GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), 0x0342, 0x1f29, 0, 0, 0}, 0x1f9f }, // U1F9F # GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), 0x0342, 0x1f60, 0, 0, 0}, 0x1fa6 }, // U1FA6 # GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), 0x0342, 0x1f61, 0, 0, 0}, 0x1fa7 }, // U1FA7 # GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), 0x0342, 0x1f68, 0, 0, 0}, 0x1fae }, // U1FAE # GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), 0x0342, 0x1f69, 0, 0, 0}, 0x1faf }, // U1FAF # GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), 0x0342, UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0391, 0}, 0x1f8f }, // U1F8F # GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), 0x0342, UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0397, 0}, 0x1f9f }, // U1F9F # GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), 0x0342, UNITIZE(Qt::Key_Multi_key), 0x0028, 0x03a9, 0}, 0x1faf }, // U1FAF # GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), 0x0342, UNITIZE(Qt::Key_Multi_key), 0x0028, 0x03b1, 0}, 0x1f87 }, // U1F87 # GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), 0x0342, UNITIZE(Qt::Key_Multi_key), 0x0028, 0x03b7, 0}, 0x1f97 }, // U1F97 # GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), 0x0342, UNITIZE(Qt::Key_Multi_key), 0x0028, 0x03c9, 0}, 0x1fa7 }, // U1FA7 # GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), 0x0342, UNITIZE(Qt::Key_Multi_key), 0x0029, 0x0391, 0}, 0x1f8e }, // U1F8E # GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), 0x0342, UNITIZE(Qt::Key_Multi_key), 0x0029, 0x0397, 0}, 0x1f9e }, // U1F9E # GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), 0x0342, UNITIZE(Qt::Key_Multi_key), 0x0029, 0x03a9, 0}, 0x1fae }, // U1FAE # GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), 0x0342, UNITIZE(Qt::Key_Multi_key), 0x0029, 0x03b1, 0}, 0x1f86 }, // U1F86 # GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), 0x0342, UNITIZE(Qt::Key_Multi_key), 0x0029, 0x03b7, 0}, 0x1f96 }, // U1F96 # GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), 0x0342, UNITIZE(Qt::Key_Multi_key), 0x0029, 0x03c9, 0}, 0x1fa6 }, // U1FA6 # GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), 0x0391, 0, 0, 0, 0}, 0x1fbc }, // U1FBC # GREEK CAPITAL LETTER ALPHA WITH PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), 0x0397, 0, 0, 0, 0}, 0x1fcc }, // U1FCC # GREEK CAPITAL LETTER ETA WITH PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), 0x03a9, 0, 0, 0, 0}, 0x1ffc }, // U1FFC # GREEK CAPITAL LETTER OMEGA WITH PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), 0x03ac, 0, 0, 0, 0}, 0x1fb4 }, // U1FB4 # GREEK SMALL LETTER ALPHA WITH OXIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), 0x03ae, 0, 0, 0, 0}, 0x1fc4 }, // U1FC4 # GREEK SMALL LETTER ETA WITH OXIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), 0x03b1, 0, 0, 0, 0}, 0x1fb3 }, // U1FB3 # GREEK SMALL LETTER ALPHA WITH YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), 0x03b7, 0, 0, 0, 0}, 0x1fc3 }, // U1FC3 # GREEK SMALL LETTER ETA WITH YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), 0x03c9, 0, 0, 0, 0}, 0x1ff3 }, // U1FF3 # GREEK SMALL LETTER OMEGA WITH YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), 0x03ce, 0, 0, 0, 0}, 0x1ff4 }, // U1FF4 # GREEK SMALL LETTER OMEGA WITH OXIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), 0x1f00, 0, 0, 0, 0}, 0x1f80 }, // U1F80 # GREEK SMALL LETTER ALPHA WITH PSILI AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), 0x1f01, 0, 0, 0, 0}, 0x1f81 }, // U1F81 # GREEK SMALL LETTER ALPHA WITH DASIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), 0x1f02, 0, 0, 0, 0}, 0x1f82 }, // U1F82 # GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), 0x1f03, 0, 0, 0, 0}, 0x1f83 }, // U1F83 # GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), 0x1f04, 0, 0, 0, 0}, 0x1f84 }, // U1F84 # GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), 0x1f05, 0, 0, 0, 0}, 0x1f85 }, // U1F85 # GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), 0x1f06, 0, 0, 0, 0}, 0x1f86 }, // U1F86 # GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), 0x1f07, 0, 0, 0, 0}, 0x1f87 }, // U1F87 # GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), 0x1f08, 0, 0, 0, 0}, 0x1f88 }, // U1F88 # GREEK CAPITAL LETTER ALPHA WITH PSILI AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), 0x1f09, 0, 0, 0, 0}, 0x1f89 }, // U1F89 # GREEK CAPITAL LETTER ALPHA WITH DASIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), 0x1f0a, 0, 0, 0, 0}, 0x1f8a }, // U1F8A # GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), 0x1f0b, 0, 0, 0, 0}, 0x1f8b }, // U1F8B # GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), 0x1f0c, 0, 0, 0, 0}, 0x1f8c }, // U1F8C # GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), 0x1f0d, 0, 0, 0, 0}, 0x1f8d }, // U1F8D # GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), 0x1f0e, 0, 0, 0, 0}, 0x1f8e }, // U1F8E # GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), 0x1f0f, 0, 0, 0, 0}, 0x1f8f }, // U1F8F # GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), 0x1f20, 0, 0, 0, 0}, 0x1f90 }, // U1F90 # GREEK SMALL LETTER ETA WITH PSILI AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), 0x1f21, 0, 0, 0, 0}, 0x1f91 }, // U1F91 # GREEK SMALL LETTER ETA WITH DASIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), 0x1f22, 0, 0, 0, 0}, 0x1f92 }, // U1F92 # GREEK SMALL LETTER ETA WITH PSILI AND VARIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), 0x1f23, 0, 0, 0, 0}, 0x1f93 }, // U1F93 # GREEK SMALL LETTER ETA WITH DASIA AND VARIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), 0x1f24, 0, 0, 0, 0}, 0x1f94 }, // U1F94 # GREEK SMALL LETTER ETA WITH PSILI AND OXIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), 0x1f25, 0, 0, 0, 0}, 0x1f95 }, // U1F95 # GREEK SMALL LETTER ETA WITH DASIA AND OXIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), 0x1f26, 0, 0, 0, 0}, 0x1f96 }, // U1F96 # GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), 0x1f27, 0, 0, 0, 0}, 0x1f97 }, // U1F97 # GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), 0x1f28, 0, 0, 0, 0}, 0x1f98 }, // U1F98 # GREEK CAPITAL LETTER ETA WITH PSILI AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), 0x1f29, 0, 0, 0, 0}, 0x1f99 }, // U1F99 # GREEK CAPITAL LETTER ETA WITH DASIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), 0x1f2a, 0, 0, 0, 0}, 0x1f9a }, // U1F9A # GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), 0x1f2b, 0, 0, 0, 0}, 0x1f9b }, // U1F9B # GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), 0x1f2c, 0, 0, 0, 0}, 0x1f9c }, // U1F9C # GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), 0x1f2d, 0, 0, 0, 0}, 0x1f9d }, // U1F9D # GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), 0x1f2e, 0, 0, 0, 0}, 0x1f9e }, // U1F9E # GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), 0x1f2f, 0, 0, 0, 0}, 0x1f9f }, // U1F9F # GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), 0x1f60, 0, 0, 0, 0}, 0x1fa0 }, // U1FA0 # GREEK SMALL LETTER OMEGA WITH PSILI AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), 0x1f61, 0, 0, 0, 0}, 0x1fa1 }, // U1FA1 # GREEK SMALL LETTER OMEGA WITH DASIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), 0x1f62, 0, 0, 0, 0}, 0x1fa2 }, // U1FA2 # GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), 0x1f63, 0, 0, 0, 0}, 0x1fa3 }, // U1FA3 # GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), 0x1f64, 0, 0, 0, 0}, 0x1fa4 }, // U1FA4 # GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), 0x1f65, 0, 0, 0, 0}, 0x1fa5 }, // U1FA5 # GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), 0x1f66, 0, 0, 0, 0}, 0x1fa6 }, // U1FA6 # GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), 0x1f67, 0, 0, 0, 0}, 0x1fa7 }, // U1FA7 # GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), 0x1f68, 0, 0, 0, 0}, 0x1fa8 }, // U1FA8 # GREEK CAPITAL LETTER OMEGA WITH PSILI AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), 0x1f69, 0, 0, 0, 0}, 0x1fa9 }, // U1FA9 # GREEK CAPITAL LETTER OMEGA WITH DASIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), 0x1f6a, 0, 0, 0, 0}, 0x1faa }, // U1FAA # GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), 0x1f6b, 0, 0, 0, 0}, 0x1fab }, // U1FAB # GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), 0x1f6c, 0, 0, 0, 0}, 0x1fac }, // U1FAC # GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), 0x1f6d, 0, 0, 0, 0}, 0x1fad }, // U1FAD # GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), 0x1f6e, 0, 0, 0, 0}, 0x1fae }, // U1FAE # GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), 0x1f6f, 0, 0, 0, 0}, 0x1faf }, // U1FAF # GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), 0x1f70, 0, 0, 0, 0}, 0x1fb2 }, // U1FB2 # GREEK SMALL LETTER ALPHA WITH VARIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), 0x1f74, 0, 0, 0, 0}, 0x1fc2 }, // U1FC2 # GREEK SMALL LETTER ETA WITH VARIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), 0x1f7c, 0, 0, 0, 0}, 0x1ff2 }, // U1FF2 # GREEK SMALL LETTER OMEGA WITH VARIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), 0x1fb6, 0, 0, 0, 0}, 0x1fb7 }, // U1FB7 # GREEK SMALL LETTER ALPHA WITH PERISPOMENI AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), 0x1fc6, 0, 0, 0, 0}, 0x1fc7 }, // U1FC7 # GREEK SMALL LETTER ETA WITH PERISPOMENI AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), 0x1ff6, 0, 0, 0, 0}, 0x1ff7 }, // U1FF7 # GREEK SMALL LETTER OMEGA WITH PERISPOMENI AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0028, 0x0391, 0}, 0x1f8d }, // U1F8D # GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0028, 0x0397, 0}, 0x1f9d }, // U1F9D # GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0028, 0x03a9, 0}, 0x1fad }, // U1FAD # GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0028, 0x03b1, 0}, 0x1f85 }, // U1F85 # GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0028, 0x03b7, 0}, 0x1f95 }, // U1F95 # GREEK SMALL LETTER ETA WITH DASIA AND OXIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0028, 0x03c9, 0}, 0x1fa5 }, // U1FA5 # GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0029, 0x0391, 0}, 0x1f8c }, // U1F8C # GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0029, 0x0397, 0}, 0x1f9c }, // U1F9C # GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0029, 0x03a9, 0}, 0x1fac }, // U1FAC # GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0029, 0x03b1, 0}, 0x1f84 }, // U1F84 # GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0029, 0x03b7, 0}, 0x1f94 }, // U1F94 # GREEK SMALL LETTER ETA WITH PSILI AND OXIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0029, 0x03c9, 0}, 0x1fa4 }, // U1FA4 # GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0313, 0x0391, 0}, 0x1f8c }, // U1F8C # GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0313, 0x0397, 0}, 0x1f9c }, // U1F9C # GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0313, 0x03a9, 0}, 0x1fac }, // U1FAC # GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0313, 0x03b1, 0}, 0x1f84 }, // U1F84 # GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0313, 0x03b7, 0}, 0x1f94 }, // U1F94 # GREEK SMALL LETTER ETA WITH PSILI AND OXIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0313, 0x03c9, 0}, 0x1fa4 }, // U1FA4 # GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0314, 0x0391, 0}, 0x1f8d }, // U1F8D # GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0314, 0x0397, 0}, 0x1f9d }, // U1F9D # GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0314, 0x03a9, 0}, 0x1fad }, // U1FAD # GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0314, 0x03b1, 0}, 0x1f85 }, // U1F85 # GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0314, 0x03b7, 0}, 0x1f95 }, // U1F95 # GREEK SMALL LETTER ETA WITH DASIA AND OXIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0314, 0x03c9, 0}, 0x1fa5 }, // U1FA5 # GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x0027, 0x03b1, 0, 0}, 0x1fb4 }, // U1FB4 # GREEK SMALL LETTER ALPHA WITH OXIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x0027, 0x03b7, 0, 0}, 0x1fc4 }, // U1FC4 # GREEK SMALL LETTER ETA WITH OXIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x0027, 0x03c9, 0, 0}, 0x1ff4 }, // U1FF4 # GREEK SMALL LETTER OMEGA WITH OXIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x0027, 0x1f00, 0, 0}, 0x1f84 }, // U1F84 # GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x0027, 0x1f01, 0, 0}, 0x1f85 }, // U1F85 # GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x0027, 0x1f08, 0, 0}, 0x1f8c }, // U1F8C # GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x0027, 0x1f09, 0, 0}, 0x1f8d }, // U1F8D # GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x0027, 0x1f20, 0, 0}, 0x1f94 }, // U1F94 # GREEK SMALL LETTER ETA WITH PSILI AND OXIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x0027, 0x1f21, 0, 0}, 0x1f95 }, // U1F95 # GREEK SMALL LETTER ETA WITH DASIA AND OXIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x0027, 0x1f28, 0, 0}, 0x1f9c }, // U1F9C # GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x0027, 0x1f29, 0, 0}, 0x1f9d }, // U1F9D # GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x0027, 0x1f60, 0, 0}, 0x1fa4 }, // U1FA4 # GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x0027, 0x1f61, 0, 0}, 0x1fa5 }, // U1FA5 # GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x0027, 0x1f68, 0, 0}, 0x1fac }, // U1FAC # GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x0027, 0x1f69, 0, 0}, 0x1fad }, // U1FAD # GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0391, 0, 0}, 0x1f89 }, // U1F89 # GREEK CAPITAL LETTER ALPHA WITH DASIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0397, 0, 0}, 0x1f99 }, // U1F99 # GREEK CAPITAL LETTER ETA WITH DASIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x0028, 0x03a9, 0, 0}, 0x1fa9 }, // U1FA9 # GREEK CAPITAL LETTER OMEGA WITH DASIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x0028, 0x03b1, 0, 0}, 0x1f81 }, // U1F81 # GREEK SMALL LETTER ALPHA WITH DASIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x0028, 0x03b7, 0, 0}, 0x1f91 }, // U1F91 # GREEK SMALL LETTER ETA WITH DASIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x0028, 0x03c9, 0, 0}, 0x1fa1 }, // U1FA1 # GREEK SMALL LETTER OMEGA WITH DASIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x0029, 0x0391, 0, 0}, 0x1f88 }, // U1F88 # GREEK CAPITAL LETTER ALPHA WITH PSILI AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x0029, 0x0397, 0, 0}, 0x1f98 }, // U1F98 # GREEK CAPITAL LETTER ETA WITH PSILI AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x0029, 0x03a9, 0, 0}, 0x1fa8 }, // U1FA8 # GREEK CAPITAL LETTER OMEGA WITH PSILI AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x0029, 0x03b1, 0, 0}, 0x1f80 }, // U1F80 # GREEK SMALL LETTER ALPHA WITH PSILI AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x0029, 0x03b7, 0, 0}, 0x1f90 }, // U1F90 # GREEK SMALL LETTER ETA WITH PSILI AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x0029, 0x03c9, 0, 0}, 0x1fa0 }, // U1FA0 # GREEK SMALL LETTER OMEGA WITH PSILI AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0028, 0x0391, 0}, 0x1f8b }, // U1F8B # GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0028, 0x0397, 0}, 0x1f9b }, // U1F9B # GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0028, 0x03a9, 0}, 0x1fab }, // U1FAB # GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0028, 0x03b1, 0}, 0x1f83 }, // U1F83 # GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0028, 0x03b7, 0}, 0x1f93 }, // U1F93 # GREEK SMALL LETTER ETA WITH DASIA AND VARIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0028, 0x03c9, 0}, 0x1fa3 }, // U1FA3 # GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0029, 0x0391, 0}, 0x1f8a }, // U1F8A # GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0029, 0x0397, 0}, 0x1f9a }, // U1F9A # GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0029, 0x03a9, 0}, 0x1faa }, // U1FAA # GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0029, 0x03b1, 0}, 0x1f82 }, // U1F82 # GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0029, 0x03b7, 0}, 0x1f92 }, // U1F92 # GREEK SMALL LETTER ETA WITH PSILI AND VARIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0029, 0x03c9, 0}, 0x1fa2 }, // U1FA2 # GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0313, 0x0391, 0}, 0x1f8a }, // U1F8A # GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0313, 0x0397, 0}, 0x1f9a }, // U1F9A # GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0313, 0x03a9, 0}, 0x1faa }, // U1FAA # GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0313, 0x03b1, 0}, 0x1f82 }, // U1F82 # GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0313, 0x03b7, 0}, 0x1f92 }, // U1F92 # GREEK SMALL LETTER ETA WITH PSILI AND VARIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0313, 0x03c9, 0}, 0x1fa2 }, // U1FA2 # GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0314, 0x0391, 0}, 0x1f8b }, // U1F8B # GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0314, 0x0397, 0}, 0x1f9b }, // U1F9B # GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0314, 0x03a9, 0}, 0x1fab }, // U1FAB # GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0314, 0x03b1, 0}, 0x1f83 }, // U1F83 # GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0314, 0x03b7, 0}, 0x1f93 }, // U1F93 # GREEK SMALL LETTER ETA WITH DASIA AND VARIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0314, 0x03c9, 0}, 0x1fa3 }, // U1FA3 # GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x0060, 0x03b1, 0, 0}, 0x1fb2 }, // U1FB2 # GREEK SMALL LETTER ALPHA WITH VARIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x0060, 0x03b7, 0, 0}, 0x1fc2 }, // U1FC2 # GREEK SMALL LETTER ETA WITH VARIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x0060, 0x03c9, 0, 0}, 0x1ff2 }, // U1FF2 # GREEK SMALL LETTER OMEGA WITH VARIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x0060, 0x1f00, 0, 0}, 0x1f82 }, // U1F82 # GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x0060, 0x1f01, 0, 0}, 0x1f83 }, // U1F83 # GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x0060, 0x1f08, 0, 0}, 0x1f8a }, // U1F8A # GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x0060, 0x1f09, 0, 0}, 0x1f8b }, // U1F8B # GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x0060, 0x1f20, 0, 0}, 0x1f92 }, // U1F92 # GREEK SMALL LETTER ETA WITH PSILI AND VARIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x0060, 0x1f21, 0, 0}, 0x1f93 }, // U1F93 # GREEK SMALL LETTER ETA WITH DASIA AND VARIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x0060, 0x1f28, 0, 0}, 0x1f9a }, // U1F9A # GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x0060, 0x1f29, 0, 0}, 0x1f9b }, // U1F9B # GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x0060, 0x1f60, 0, 0}, 0x1fa2 }, // U1FA2 # GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x0060, 0x1f61, 0, 0}, 0x1fa3 }, // U1FA3 # GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x0060, 0x1f68, 0, 0}, 0x1faa }, // U1FAA # GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x0060, 0x1f69, 0, 0}, 0x1fab }, // U1FAB # GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x007e, 0x0028, 0x0391, 0}, 0x1f8f }, // U1F8F # GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x007e, 0x0028, 0x0397, 0}, 0x1f9f }, // U1F9F # GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x007e, 0x0028, 0x03a9, 0}, 0x1faf }, // U1FAF # GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x007e, 0x0028, 0x03b1, 0}, 0x1f87 }, // U1F87 # GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x007e, 0x0028, 0x03b7, 0}, 0x1f97 }, // U1F97 # GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x007e, 0x0028, 0x03c9, 0}, 0x1fa7 }, // U1FA7 # GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x007e, 0x0029, 0x0391, 0}, 0x1f8e }, // U1F8E # GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x007e, 0x0029, 0x0397, 0}, 0x1f9e }, // U1F9E # GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x007e, 0x0029, 0x03a9, 0}, 0x1fae }, // U1FAE # GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x007e, 0x0029, 0x03b1, 0}, 0x1f86 }, // U1F86 # GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x007e, 0x0029, 0x03b7, 0}, 0x1f96 }, // U1F96 # GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x007e, 0x0029, 0x03c9, 0}, 0x1fa6 }, // U1FA6 # GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x007e, 0x0313, 0x0391, 0}, 0x1f8e }, // U1F8E # GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x007e, 0x0313, 0x0397, 0}, 0x1f9e }, // U1F9E # GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x007e, 0x0313, 0x03a9, 0}, 0x1fae }, // U1FAE # GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x007e, 0x0313, 0x03b1, 0}, 0x1f86 }, // U1F86 # GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x007e, 0x0313, 0x03b7, 0}, 0x1f96 }, // U1F96 # GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x007e, 0x0313, 0x03c9, 0}, 0x1fa6 }, // U1FA6 # GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x007e, 0x0314, 0x0391, 0}, 0x1f8f }, // U1F8F # GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x007e, 0x0314, 0x0397, 0}, 0x1f9f }, // U1F9F # GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x007e, 0x0314, 0x03a9, 0}, 0x1faf }, // U1FAF # GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x007e, 0x0314, 0x03b1, 0}, 0x1f87 }, // U1F87 # GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x007e, 0x0314, 0x03b7, 0}, 0x1f97 }, // U1F97 # GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x007e, 0x0314, 0x03c9, 0}, 0x1fa7 }, // U1FA7 # GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x007e, 0x03b1, 0, 0}, 0x1fb7 }, // U1FB7 # GREEK SMALL LETTER ALPHA WITH PERISPOMENI AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x007e, 0x03b7, 0, 0}, 0x1fc7 }, // U1FC7 # GREEK SMALL LETTER ETA WITH PERISPOMENI AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x007e, 0x03c9, 0, 0}, 0x1ff7 }, // U1FF7 # GREEK SMALL LETTER OMEGA WITH PERISPOMENI AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x007e, 0x1f00, 0, 0}, 0x1f86 }, // U1F86 # GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x007e, 0x1f01, 0, 0}, 0x1f87 }, // U1F87 # GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x007e, 0x1f08, 0, 0}, 0x1f8e }, // U1F8E # GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x007e, 0x1f09, 0, 0}, 0x1f8f }, // U1F8F # GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x007e, 0x1f20, 0, 0}, 0x1f96 }, // U1F96 # GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x007e, 0x1f21, 0, 0}, 0x1f97 }, // U1F97 # GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x007e, 0x1f28, 0, 0}, 0x1f9e }, // U1F9E # GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x007e, 0x1f29, 0, 0}, 0x1f9f }, // U1F9F # GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x007e, 0x1f60, 0, 0}, 0x1fa6 }, // U1FA6 # GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x007e, 0x1f61, 0, 0}, 0x1fa7 }, // U1FA7 # GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x007e, 0x1f68, 0, 0}, 0x1fae }, // U1FAE # GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x007e, 0x1f69, 0, 0}, 0x1faf }, // U1FAF # GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0028, 0x0391, 0}, 0x1f8d }, // U1F8D # GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0028, 0x0397, 0}, 0x1f9d }, // U1F9D # GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0028, 0x03a9, 0}, 0x1fad }, // U1FAD # GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0028, 0x03b1, 0}, 0x1f85 }, // U1F85 # GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0028, 0x03b7, 0}, 0x1f95 }, // U1F95 # GREEK SMALL LETTER ETA WITH DASIA AND OXIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0028, 0x03c9, 0}, 0x1fa5 }, // U1FA5 # GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0029, 0x0391, 0}, 0x1f8c }, // U1F8C # GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0029, 0x0397, 0}, 0x1f9c }, // U1F9C # GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0029, 0x03a9, 0}, 0x1fac }, // U1FAC # GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0029, 0x03b1, 0}, 0x1f84 }, // U1F84 # GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0029, 0x03b7, 0}, 0x1f94 }, // U1F94 # GREEK SMALL LETTER ETA WITH PSILI AND OXIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0029, 0x03c9, 0}, 0x1fa4 }, // U1FA4 # GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0313, 0x0391, 0}, 0x1f8c }, // U1F8C # GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0313, 0x0397, 0}, 0x1f9c }, // U1F9C # GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0313, 0x03a9, 0}, 0x1fac }, // U1FAC # GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0313, 0x03b1, 0}, 0x1f84 }, // U1F84 # GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0313, 0x03b7, 0}, 0x1f94 }, // U1F94 # GREEK SMALL LETTER ETA WITH PSILI AND OXIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0313, 0x03c9, 0}, 0x1fa4 }, // U1FA4 # GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0314, 0x0391, 0}, 0x1f8d }, // U1F8D # GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0314, 0x0397, 0}, 0x1f9d }, // U1F9D # GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0314, 0x03a9, 0}, 0x1fad }, // U1FAD # GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0314, 0x03b1, 0}, 0x1f85 }, // U1F85 # GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0314, 0x03b7, 0}, 0x1f95 }, // U1F95 # GREEK SMALL LETTER ETA WITH DASIA AND OXIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0314, 0x03c9, 0}, 0x1fa5 }, // U1FA5 # GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x03b1, 0, 0}, 0x1fb4 }, // U1FB4 # GREEK SMALL LETTER ALPHA WITH OXIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x03b7, 0, 0}, 0x1fc4 }, // U1FC4 # GREEK SMALL LETTER ETA WITH OXIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x03c9, 0, 0}, 0x1ff4 }, // U1FF4 # GREEK SMALL LETTER OMEGA WITH OXIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x1f00, 0, 0}, 0x1f84 }, // U1F84 # GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x1f01, 0, 0}, 0x1f85 }, // U1F85 # GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x1f08, 0, 0}, 0x1f8c }, // U1F8C # GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x1f09, 0, 0}, 0x1f8d }, // U1F8D # GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x1f20, 0, 0}, 0x1f94 }, // U1F94 # GREEK SMALL LETTER ETA WITH PSILI AND OXIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x1f21, 0, 0}, 0x1f95 }, // U1F95 # GREEK SMALL LETTER ETA WITH DASIA AND OXIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x1f28, 0, 0}, 0x1f9c }, // U1F9C # GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x1f29, 0, 0}, 0x1f9d }, // U1F9D # GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x1f60, 0, 0}, 0x1fa4 }, // U1FA4 # GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x1f61, 0, 0}, 0x1fa5 }, // U1FA5 # GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x1f68, 0, 0}, 0x1fac }, // U1FAC # GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x1f69, 0, 0}, 0x1fad }, // U1FAD # GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Grave), 0x0313, 0x0391, 0, 0}, 0x1f8a }, // U1F8A # GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Grave), 0x0313, 0x0397, 0, 0}, 0x1f9a }, // U1F9A # GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Grave), 0x0313, 0x03a9, 0, 0}, 0x1faa }, // U1FAA # GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Grave), 0x0313, 0x03b1, 0, 0}, 0x1f82 }, // U1F82 # GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Grave), 0x0313, 0x03b7, 0, 0}, 0x1f92 }, // U1F92 # GREEK SMALL LETTER ETA WITH PSILI AND VARIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Grave), 0x0313, 0x03c9, 0, 0}, 0x1fa2 }, // U1FA2 # GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Grave), 0x0314, 0x0391, 0, 0}, 0x1f8b }, // U1F8B # GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Grave), 0x0314, 0x0397, 0, 0}, 0x1f9b }, // U1F9B # GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Grave), 0x0314, 0x03a9, 0, 0}, 0x1fab }, // U1FAB # GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Grave), 0x0314, 0x03b1, 0, 0}, 0x1f83 }, // U1F83 # GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Grave), 0x0314, 0x03b7, 0, 0}, 0x1f93 }, // U1F93 # GREEK SMALL LETTER ETA WITH DASIA AND VARIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Grave), 0x0314, 0x03c9, 0, 0}, 0x1fa3 }, // U1FA3 # GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Grave), 0x03b1, 0, 0, 0}, 0x1fb2 }, // U1FB2 # GREEK SMALL LETTER ALPHA WITH VARIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Grave), 0x03b7, 0, 0, 0}, 0x1fc2 }, // U1FC2 # GREEK SMALL LETTER ETA WITH VARIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Grave), 0x03c9, 0, 0, 0}, 0x1ff2 }, // U1FF2 # GREEK SMALL LETTER OMEGA WITH VARIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Grave), 0x1f00, 0, 0, 0}, 0x1f82 }, // U1F82 # GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Grave), 0x1f01, 0, 0, 0}, 0x1f83 }, // U1F83 # GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Grave), 0x1f08, 0, 0, 0}, 0x1f8a }, // U1F8A # GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Grave), 0x1f09, 0, 0, 0}, 0x1f8b }, // U1F8B # GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Grave), 0x1f20, 0, 0, 0}, 0x1f92 }, // U1F92 # GREEK SMALL LETTER ETA WITH PSILI AND VARIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Grave), 0x1f21, 0, 0, 0}, 0x1f93 }, // U1F93 # GREEK SMALL LETTER ETA WITH DASIA AND VARIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Grave), 0x1f28, 0, 0, 0}, 0x1f9a }, // U1F9A # GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Grave), 0x1f29, 0, 0, 0}, 0x1f9b }, // U1F9B # GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Grave), 0x1f60, 0, 0, 0}, 0x1fa2 }, // U1FA2 # GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Grave), 0x1f61, 0, 0, 0}, 0x1fa3 }, // U1FA3 # GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Grave), 0x1f68, 0, 0, 0}, 0x1faa }, // U1FAA # GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Grave), 0x1f69, 0, 0, 0}, 0x1fab }, // U1FAB # GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Grave), UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0391, 0}, 0x1f8b }, // U1F8B # GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Grave), UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0397, 0}, 0x1f9b }, // U1F9B # GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Grave), UNITIZE(Qt::Key_Multi_key), 0x0028, 0x03a9, 0}, 0x1fab }, // U1FAB # GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Grave), UNITIZE(Qt::Key_Multi_key), 0x0028, 0x03b1, 0}, 0x1f83 }, // U1F83 # GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Grave), UNITIZE(Qt::Key_Multi_key), 0x0028, 0x03b7, 0}, 0x1f93 }, // U1F93 # GREEK SMALL LETTER ETA WITH DASIA AND VARIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Grave), UNITIZE(Qt::Key_Multi_key), 0x0028, 0x03c9, 0}, 0x1fa3 }, // U1FA3 # GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Grave), UNITIZE(Qt::Key_Multi_key), 0x0029, 0x0391, 0}, 0x1f8a }, // U1F8A # GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Grave), UNITIZE(Qt::Key_Multi_key), 0x0029, 0x0397, 0}, 0x1f9a }, // U1F9A # GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Grave), UNITIZE(Qt::Key_Multi_key), 0x0029, 0x03a9, 0}, 0x1faa }, // U1FAA # GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Grave), UNITIZE(Qt::Key_Multi_key), 0x0029, 0x03b1, 0}, 0x1f82 }, // U1F82 # GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Grave), UNITIZE(Qt::Key_Multi_key), 0x0029, 0x03b7, 0}, 0x1f92 }, // U1F92 # GREEK SMALL LETTER ETA WITH PSILI AND VARIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Grave), UNITIZE(Qt::Key_Multi_key), 0x0029, 0x03c9, 0}, 0x1fa2 }, // U1FA2 # GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Acute), 0x0313, 0x0391, 0, 0}, 0x1f8c }, // U1F8C # GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Acute), 0x0313, 0x0397, 0, 0}, 0x1f9c }, // U1F9C # GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Acute), 0x0313, 0x03a9, 0, 0}, 0x1fac }, // U1FAC # GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Acute), 0x0313, 0x03b1, 0, 0}, 0x1f84 }, // U1F84 # GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Acute), 0x0313, 0x03b7, 0, 0}, 0x1f94 }, // U1F94 # GREEK SMALL LETTER ETA WITH PSILI AND OXIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Acute), 0x0313, 0x03c9, 0, 0}, 0x1fa4 }, // U1FA4 # GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Acute), 0x0314, 0x0391, 0, 0}, 0x1f8d }, // U1F8D # GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Acute), 0x0314, 0x0397, 0, 0}, 0x1f9d }, // U1F9D # GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Acute), 0x0314, 0x03a9, 0, 0}, 0x1fad }, // U1FAD # GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Acute), 0x0314, 0x03b1, 0, 0}, 0x1f85 }, // U1F85 # GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Acute), 0x0314, 0x03b7, 0, 0}, 0x1f95 }, // U1F95 # GREEK SMALL LETTER ETA WITH DASIA AND OXIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Acute), 0x0314, 0x03c9, 0, 0}, 0x1fa5 }, // U1FA5 # GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Acute), 0x03b1, 0, 0, 0}, 0x1fb4 }, // U1FB4 # GREEK SMALL LETTER ALPHA WITH OXIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Acute), 0x03b7, 0, 0, 0}, 0x1fc4 }, // U1FC4 # GREEK SMALL LETTER ETA WITH OXIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Acute), 0x03c9, 0, 0, 0}, 0x1ff4 }, // U1FF4 # GREEK SMALL LETTER OMEGA WITH OXIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Acute), 0x1f00, 0, 0, 0}, 0x1f84 }, // U1F84 # GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Acute), 0x1f01, 0, 0, 0}, 0x1f85 }, // U1F85 # GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Acute), 0x1f08, 0, 0, 0}, 0x1f8c }, // U1F8C # GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Acute), 0x1f09, 0, 0, 0}, 0x1f8d }, // U1F8D # GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Acute), 0x1f20, 0, 0, 0}, 0x1f94 }, // U1F94 # GREEK SMALL LETTER ETA WITH PSILI AND OXIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Acute), 0x1f21, 0, 0, 0}, 0x1f95 }, // U1F95 # GREEK SMALL LETTER ETA WITH DASIA AND OXIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Acute), 0x1f28, 0, 0, 0}, 0x1f9c }, // U1F9C # GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Acute), 0x1f29, 0, 0, 0}, 0x1f9d }, // U1F9D # GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Acute), 0x1f60, 0, 0, 0}, 0x1fa4 }, // U1FA4 # GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Acute), 0x1f61, 0, 0, 0}, 0x1fa5 }, // U1FA5 # GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Acute), 0x1f68, 0, 0, 0}, 0x1fac }, // U1FAC # GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Acute), 0x1f69, 0, 0, 0}, 0x1fad }, // U1FAD # GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0391, 0}, 0x1f8d }, // U1F8D # GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0397, 0}, 0x1f9d }, // U1F9D # GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Multi_key), 0x0028, 0x03a9, 0}, 0x1fad }, // U1FAD # GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Multi_key), 0x0028, 0x03b1, 0}, 0x1f85 }, // U1F85 # GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Multi_key), 0x0028, 0x03b7, 0}, 0x1f95 }, // U1F95 # GREEK SMALL LETTER ETA WITH DASIA AND OXIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Multi_key), 0x0028, 0x03c9, 0}, 0x1fa5 }, // U1FA5 # GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Multi_key), 0x0029, 0x0391, 0}, 0x1f8c }, // U1F8C # GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Multi_key), 0x0029, 0x0397, 0}, 0x1f9c }, // U1F9C # GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Multi_key), 0x0029, 0x03a9, 0}, 0x1fac }, // U1FAC # GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Multi_key), 0x0029, 0x03b1, 0}, 0x1f84 }, // U1F84 # GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Multi_key), 0x0029, 0x03b7, 0}, 0x1f94 }, // U1F94 # GREEK SMALL LETTER ETA WITH PSILI AND OXIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Multi_key), 0x0029, 0x03c9, 0}, 0x1fa4 }, // U1FA4 # GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Tilde), 0x0313, 0x0391, 0, 0}, 0x1f8e }, // U1F8E # GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Tilde), 0x0313, 0x0397, 0, 0}, 0x1f9e }, // U1F9E # GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Tilde), 0x0313, 0x03a9, 0, 0}, 0x1fae }, // U1FAE # GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Tilde), 0x0313, 0x03b1, 0, 0}, 0x1f86 }, // U1F86 # GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Tilde), 0x0313, 0x03b7, 0, 0}, 0x1f96 }, // U1F96 # GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Tilde), 0x0313, 0x03c9, 0, 0}, 0x1fa6 }, // U1FA6 # GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Tilde), 0x0314, 0x0391, 0, 0}, 0x1f8f }, // U1F8F # GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Tilde), 0x0314, 0x0397, 0, 0}, 0x1f9f }, // U1F9F # GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Tilde), 0x0314, 0x03a9, 0, 0}, 0x1faf }, // U1FAF # GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Tilde), 0x0314, 0x03b1, 0, 0}, 0x1f87 }, // U1F87 # GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Tilde), 0x0314, 0x03b7, 0, 0}, 0x1f97 }, // U1F97 # GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Tilde), 0x0314, 0x03c9, 0, 0}, 0x1fa7 }, // U1FA7 # GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Tilde), 0x03b1, 0, 0, 0}, 0x1fb7 }, // U1FB7 # GREEK SMALL LETTER ALPHA WITH PERISPOMENI AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Tilde), 0x03b7, 0, 0, 0}, 0x1fc7 }, // U1FC7 # GREEK SMALL LETTER ETA WITH PERISPOMENI AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Tilde), 0x03c9, 0, 0, 0}, 0x1ff7 }, // U1FF7 # GREEK SMALL LETTER OMEGA WITH PERISPOMENI AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Tilde), 0x1f00, 0, 0, 0}, 0x1f86 }, // U1F86 # GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Tilde), 0x1f01, 0, 0, 0}, 0x1f87 }, // U1F87 # GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Tilde), 0x1f08, 0, 0, 0}, 0x1f8e }, // U1F8E # GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Tilde), 0x1f09, 0, 0, 0}, 0x1f8f }, // U1F8F # GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Tilde), 0x1f20, 0, 0, 0}, 0x1f96 }, // U1F96 # GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Tilde), 0x1f21, 0, 0, 0}, 0x1f97 }, // U1F97 # GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Tilde), 0x1f28, 0, 0, 0}, 0x1f9e }, // U1F9E # GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Tilde), 0x1f29, 0, 0, 0}, 0x1f9f }, // U1F9F # GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Tilde), 0x1f60, 0, 0, 0}, 0x1fa6 }, // U1FA6 # GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Tilde), 0x1f61, 0, 0, 0}, 0x1fa7 }, // U1FA7 # GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Tilde), 0x1f68, 0, 0, 0}, 0x1fae }, // U1FAE # GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Tilde), 0x1f69, 0, 0, 0}, 0x1faf }, // U1FAF # GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Tilde), UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0391, 0}, 0x1f8f }, // U1F8F # GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Tilde), UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0397, 0}, 0x1f9f }, // U1F9F # GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Tilde), UNITIZE(Qt::Key_Multi_key), 0x0028, 0x03a9, 0}, 0x1faf }, // U1FAF # GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Tilde), UNITIZE(Qt::Key_Multi_key), 0x0028, 0x03b1, 0}, 0x1f87 }, // U1F87 # GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Tilde), UNITIZE(Qt::Key_Multi_key), 0x0028, 0x03b7, 0}, 0x1f97 }, // U1F97 # GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Tilde), UNITIZE(Qt::Key_Multi_key), 0x0028, 0x03c9, 0}, 0x1fa7 }, // U1FA7 # GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Tilde), UNITIZE(Qt::Key_Multi_key), 0x0029, 0x0391, 0}, 0x1f8e }, // U1F8E # GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Tilde), UNITIZE(Qt::Key_Multi_key), 0x0029, 0x0397, 0}, 0x1f9e }, // U1F9E # GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Tilde), UNITIZE(Qt::Key_Multi_key), 0x0029, 0x03a9, 0}, 0x1fae }, // U1FAE # GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Tilde), UNITIZE(Qt::Key_Multi_key), 0x0029, 0x03b1, 0}, 0x1f86 }, // U1F86 # GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Tilde), UNITIZE(Qt::Key_Multi_key), 0x0029, 0x03b7, 0}, 0x1f96 }, // U1F96 # GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Tilde), UNITIZE(Qt::Key_Multi_key), 0x0029, 0x03c9, 0}, 0x1fa6 }, // U1FA6 # GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Iota), 0, 0, 0, 0}, 0x037a }, // U37a ++// /* broken */ { {UNITIZE(Qt::Key_Dead_Iota), dead_space, 0, 0, 0, 0}, 0x037a }, // U37a ++ { {UNITIZE(Qt::Key_Dead_Voiced_Sound), 0x3046, 0, 0, 0, 0}, 0x3094 }, // U3094 # HIRAGANA LETTER VU ++ { {UNITIZE(Qt::Key_Dead_Voiced_Sound), 0x304b, 0, 0, 0, 0}, 0x304c }, // U304C # HIRAGANA LETTER GA ++ { {UNITIZE(Qt::Key_Dead_Voiced_Sound), 0x304d, 0, 0, 0, 0}, 0x304e }, // U304E # HIRAGANA LETTER GI ++ { {UNITIZE(Qt::Key_Dead_Voiced_Sound), 0x304f, 0, 0, 0, 0}, 0x3050 }, // U3050 # HIRAGANA LETTER GU ++ { {UNITIZE(Qt::Key_Dead_Voiced_Sound), 0x3051, 0, 0, 0, 0}, 0x3052 }, // U3052 # HIRAGANA LETTER GE ++ { {UNITIZE(Qt::Key_Dead_Voiced_Sound), 0x3053, 0, 0, 0, 0}, 0x3054 }, // U3054 # HIRAGANA LETTER GO ++ { {UNITIZE(Qt::Key_Dead_Voiced_Sound), 0x3055, 0, 0, 0, 0}, 0x3056 }, // U3056 # HIRAGANA LETTER ZA ++ { {UNITIZE(Qt::Key_Dead_Voiced_Sound), 0x3057, 0, 0, 0, 0}, 0x3058 }, // U3058 # HIRAGANA LETTER ZI ++ { {UNITIZE(Qt::Key_Dead_Voiced_Sound), 0x3059, 0, 0, 0, 0}, 0x305a }, // U305A # HIRAGANA LETTER ZU ++ { {UNITIZE(Qt::Key_Dead_Voiced_Sound), 0x305b, 0, 0, 0, 0}, 0x305c }, // U305C # HIRAGANA LETTER ZE ++ { {UNITIZE(Qt::Key_Dead_Voiced_Sound), 0x305d, 0, 0, 0, 0}, 0x305e }, // U305E # HIRAGANA LETTER ZO ++ { {UNITIZE(Qt::Key_Dead_Voiced_Sound), 0x305f, 0, 0, 0, 0}, 0x3060 }, // U3060 # HIRAGANA LETTER DA ++ { {UNITIZE(Qt::Key_Dead_Voiced_Sound), 0x3061, 0, 0, 0, 0}, 0x3062 }, // U3062 # HIRAGANA LETTER DI ++ { {UNITIZE(Qt::Key_Dead_Voiced_Sound), 0x3064, 0, 0, 0, 0}, 0x3065 }, // U3065 # HIRAGANA LETTER DU ++ { {UNITIZE(Qt::Key_Dead_Voiced_Sound), 0x3066, 0, 0, 0, 0}, 0x3067 }, // U3067 # HIRAGANA LETTER DE ++ { {UNITIZE(Qt::Key_Dead_Voiced_Sound), 0x3068, 0, 0, 0, 0}, 0x3069 }, // U3069 # HIRAGANA LETTER DO ++ { {UNITIZE(Qt::Key_Dead_Voiced_Sound), 0x306f, 0, 0, 0, 0}, 0x3070 }, // U3070 # HIRAGANA LETTER BA ++ { {UNITIZE(Qt::Key_Dead_Voiced_Sound), 0x3072, 0, 0, 0, 0}, 0x3073 }, // U3073 # HIRAGANA LETTER BI ++ { {UNITIZE(Qt::Key_Dead_Voiced_Sound), 0x3075, 0, 0, 0, 0}, 0x3076 }, // U3076 # HIRAGANA LETTER BU ++ { {UNITIZE(Qt::Key_Dead_Voiced_Sound), 0x3078, 0, 0, 0, 0}, 0x3079 }, // U3079 # HIRAGANA LETTER BE ++ { {UNITIZE(Qt::Key_Dead_Voiced_Sound), 0x307b, 0, 0, 0, 0}, 0x307c }, // U307C # HIRAGANA LETTER BO ++ { {UNITIZE(Qt::Key_Dead_Voiced_Sound), 0x309d, 0, 0, 0, 0}, 0x309e }, // U309E # HIRAGANA VOICED ITERATION MARK ++ { {UNITIZE(Qt::Key_Dead_Voiced_Sound), 0x30a6, 0, 0, 0, 0}, 0x30f4 }, // U30F4 # KATAKANA LETTER VU ++ { {UNITIZE(Qt::Key_Dead_Voiced_Sound), 0x30ab, 0, 0, 0, 0}, 0x30ac }, // U30AC # KATAKANA LETTER GA ++ { {UNITIZE(Qt::Key_Dead_Voiced_Sound), 0x30ad, 0, 0, 0, 0}, 0x30ae }, // U30AE # KATAKANA LETTER GI ++ { {UNITIZE(Qt::Key_Dead_Voiced_Sound), 0x30af, 0, 0, 0, 0}, 0x30b0 }, // U30B0 # KATAKANA LETTER GU ++ { {UNITIZE(Qt::Key_Dead_Voiced_Sound), 0x30b1, 0, 0, 0, 0}, 0x30b2 }, // U30B2 # KATAKANA LETTER GE ++ { {UNITIZE(Qt::Key_Dead_Voiced_Sound), 0x30b3, 0, 0, 0, 0}, 0x30b4 }, // U30B4 # KATAKANA LETTER GO ++ { {UNITIZE(Qt::Key_Dead_Voiced_Sound), 0x30b5, 0, 0, 0, 0}, 0x30b6 }, // U30B6 # KATAKANA LETTER ZA ++ { {UNITIZE(Qt::Key_Dead_Voiced_Sound), 0x30b7, 0, 0, 0, 0}, 0x30b8 }, // U30B8 # KATAKANA LETTER ZI ++ { {UNITIZE(Qt::Key_Dead_Voiced_Sound), 0x30b9, 0, 0, 0, 0}, 0x30ba }, // U30BA # KATAKANA LETTER ZU ++ { {UNITIZE(Qt::Key_Dead_Voiced_Sound), 0x30bb, 0, 0, 0, 0}, 0x30bc }, // U30BC # KATAKANA LETTER ZE ++ { {UNITIZE(Qt::Key_Dead_Voiced_Sound), 0x30bd, 0, 0, 0, 0}, 0x30be }, // U30BE # KATAKANA LETTER ZO ++ { {UNITIZE(Qt::Key_Dead_Voiced_Sound), 0x30bf, 0, 0, 0, 0}, 0x30c0 }, // U30C0 # KATAKANA LETTER DA ++ { {UNITIZE(Qt::Key_Dead_Voiced_Sound), 0x30c1, 0, 0, 0, 0}, 0x30c2 }, // U30C2 # KATAKANA LETTER DI ++ { {UNITIZE(Qt::Key_Dead_Voiced_Sound), 0x30c4, 0, 0, 0, 0}, 0x30c5 }, // U30C5 # KATAKANA LETTER DU ++ { {UNITIZE(Qt::Key_Dead_Voiced_Sound), 0x30c6, 0, 0, 0, 0}, 0x30c7 }, // U30C7 # KATAKANA LETTER DE ++ { {UNITIZE(Qt::Key_Dead_Voiced_Sound), 0x30c8, 0, 0, 0, 0}, 0x30c9 }, // U30C9 # KATAKANA LETTER DO ++ { {UNITIZE(Qt::Key_Dead_Voiced_Sound), 0x30cf, 0, 0, 0, 0}, 0x30d0 }, // U30D0 # KATAKANA LETTER BA ++ { {UNITIZE(Qt::Key_Dead_Voiced_Sound), 0x30d2, 0, 0, 0, 0}, 0x30d3 }, // U30D3 # KATAKANA LETTER BI ++ { {UNITIZE(Qt::Key_Dead_Voiced_Sound), 0x30d5, 0, 0, 0, 0}, 0x30d6 }, // U30D6 # KATAKANA LETTER BU ++ { {UNITIZE(Qt::Key_Dead_Voiced_Sound), 0x30d8, 0, 0, 0, 0}, 0x30d9 }, // U30D9 # KATAKANA LETTER BE ++ { {UNITIZE(Qt::Key_Dead_Voiced_Sound), 0x30db, 0, 0, 0, 0}, 0x30dc }, // U30DC # KATAKANA LETTER BO ++ { {UNITIZE(Qt::Key_Dead_Voiced_Sound), 0x30ef, 0, 0, 0, 0}, 0x30f7 }, // U30F7 # KATAKANA LETTER VA ++ { {UNITIZE(Qt::Key_Dead_Voiced_Sound), 0x30f0, 0, 0, 0, 0}, 0x30f8 }, // U30F8 # KATAKANA LETTER VI ++ { {UNITIZE(Qt::Key_Dead_Voiced_Sound), 0x30f1, 0, 0, 0, 0}, 0x30f9 }, // U30F9 # KATAKANA LETTER VE ++ { {UNITIZE(Qt::Key_Dead_Voiced_Sound), 0x30f2, 0, 0, 0, 0}, 0x30fa }, // U30FA # KATAKANA LETTER VO ++ { {UNITIZE(Qt::Key_Dead_Voiced_Sound), 0x30fd, 0, 0, 0, 0}, 0x30fe }, // U30FE # KATAKANA VOICED ITERATION MARK ++ { {UNITIZE(Qt::Key_Dead_Semivoiced_Sound), 0x306f, 0, 0, 0, 0}, 0x3071 }, // U3071 # HIRAGANA LETTER PA ++ { {UNITIZE(Qt::Key_Dead_Semivoiced_Sound), 0x3072, 0, 0, 0, 0}, 0x3074 }, // U3074 # HIRAGANA LETTER PI ++ { {UNITIZE(Qt::Key_Dead_Semivoiced_Sound), 0x3075, 0, 0, 0, 0}, 0x3077 }, // U3077 # HIRAGANA LETTER PU ++ { {UNITIZE(Qt::Key_Dead_Semivoiced_Sound), 0x3078, 0, 0, 0, 0}, 0x307a }, // U307A # HIRAGANA LETTER PE ++ { {UNITIZE(Qt::Key_Dead_Semivoiced_Sound), 0x307b, 0, 0, 0, 0}, 0x307d }, // U307D # HIRAGANA LETTER PO ++ { {UNITIZE(Qt::Key_Dead_Semivoiced_Sound), 0x30cf, 0, 0, 0, 0}, 0x30d1 }, // U30D1 # KATAKANA LETTER PA ++ { {UNITIZE(Qt::Key_Dead_Semivoiced_Sound), 0x30d2, 0, 0, 0, 0}, 0x30d4 }, // U30D4 # KATAKANA LETTER PI ++ { {UNITIZE(Qt::Key_Dead_Semivoiced_Sound), 0x30d5, 0, 0, 0, 0}, 0x30d7 }, // U30D7 # KATAKANA LETTER PU ++ { {UNITIZE(Qt::Key_Dead_Semivoiced_Sound), 0x30d8, 0, 0, 0, 0}, 0x30da }, // U30DA # KATAKANA LETTER PE ++ { {UNITIZE(Qt::Key_Dead_Semivoiced_Sound), 0x30db, 0, 0, 0, 0}, 0x30dd }, // U30DD # KATAKANA LETTER PO ++// /* broken */ { {UNITIZE(Qt::Key_Dead_Belowdot), 0x0000, 0, 0, 0, 0}, 0x1ee2 }, // U1EE2 # LATIN CAPITAL LETTER O WITH HORN AND DOT BELOW ++// /* broken */ { {UNITIZE(Qt::Key_Dead_Belowdot), 0x0000, 0, 0, 0, 0}, 0x1ef1 }, // U1EF1 # LATIN SMALL LETTER U WITH HORN AND DOT BELOW ++// /* broken */ { {UNITIZE(Qt::Key_Dead_Belowdot), 0x0000, 0, 0, 0, 0}, 0x1ee3 }, // U1EE3 # LATIN SMALL LETTER O WITH HORN AND DOT BELOW ++// /* broken */ { {UNITIZE(Qt::Key_Dead_Belowdot), 0x0000, 0, 0, 0, 0}, 0x1ef0 }, // U1EF0 # LATIN CAPITAL LETTER U WITH HORN AND DOT BELOW ++ { {UNITIZE(Qt::Key_Dead_Belowdot), 0x0041, 0, 0, 0, 0}, 0x1ea0 }, // U1EA0 # LATIN CAPITAL LETTER A WITH DOT BELOW ++ { {UNITIZE(Qt::Key_Dead_Belowdot), 0x0042, 0, 0, 0, 0}, 0x1e04 }, // U1E04 # LATIN CAPITAL LETTER B WITH DOT BELOW ++ { {UNITIZE(Qt::Key_Dead_Belowdot), 0x0044, 0, 0, 0, 0}, 0x1e0c }, // U1E0C # LATIN CAPITAL LETTER D WITH DOT BELOW ++ { {UNITIZE(Qt::Key_Dead_Belowdot), 0x0045, 0, 0, 0, 0}, 0x1eb8 }, // U1EB8 # LATIN CAPITAL LETTER E WITH DOT BELOW ++ { {UNITIZE(Qt::Key_Dead_Belowdot), 0x0048, 0, 0, 0, 0}, 0x1e24 }, // U1E24 # LATIN CAPITAL LETTER H WITH DOT BELOW ++ { {UNITIZE(Qt::Key_Dead_Belowdot), 0x0049, 0, 0, 0, 0}, 0x1eca }, // U1ECA # LATIN CAPITAL LETTER I WITH DOT BELOW ++ { {UNITIZE(Qt::Key_Dead_Belowdot), 0x004b, 0, 0, 0, 0}, 0x1e32 }, // U1E32 # LATIN CAPITAL LETTER K WITH DOT BELOW ++ { {UNITIZE(Qt::Key_Dead_Belowdot), 0x004c, 0, 0, 0, 0}, 0x1e36 }, // U1E36 # LATIN CAPITAL LETTER L WITH DOT BELOW ++ { {UNITIZE(Qt::Key_Dead_Belowdot), 0x004d, 0, 0, 0, 0}, 0x1e42 }, // U1E42 # LATIN CAPITAL LETTER M WITH DOT BELOW ++ { {UNITIZE(Qt::Key_Dead_Belowdot), 0x004e, 0, 0, 0, 0}, 0x1e46 }, // U1E46 # LATIN CAPITAL LETTER N WITH DOT BELOW ++ { {UNITIZE(Qt::Key_Dead_Belowdot), 0x004f, 0, 0, 0, 0}, 0x1ecc }, // U1ECC # LATIN CAPITAL LETTER O WITH DOT BELOW ++ { {UNITIZE(Qt::Key_Dead_Belowdot), 0x0052, 0, 0, 0, 0}, 0x1e5a }, // U1E5A # LATIN CAPITAL LETTER R WITH DOT BELOW ++ { {UNITIZE(Qt::Key_Dead_Belowdot), 0x0053, 0, 0, 0, 0}, 0x1e62 }, // U1E62 # LATIN CAPITAL LETTER S WITH DOT BELOW ++ { {UNITIZE(Qt::Key_Dead_Belowdot), 0x0054, 0, 0, 0, 0}, 0x1e6c }, // U1E6C # LATIN CAPITAL LETTER T WITH DOT BELOW ++ { {UNITIZE(Qt::Key_Dead_Belowdot), 0x0055, 0, 0, 0, 0}, 0x1ee4 }, // U1EE4 # LATIN CAPITAL LETTER U WITH DOT BELOW ++ { {UNITIZE(Qt::Key_Dead_Belowdot), 0x0056, 0, 0, 0, 0}, 0x1e7e }, // U1E7E # LATIN CAPITAL LETTER V WITH DOT BELOW ++ { {UNITIZE(Qt::Key_Dead_Belowdot), 0x0057, 0, 0, 0, 0}, 0x1e88 }, // U1E88 # LATIN CAPITAL LETTER W WITH DOT BELOW ++ { {UNITIZE(Qt::Key_Dead_Belowdot), 0x0059, 0, 0, 0, 0}, 0x1ef4 }, // U1EF4 # LATIN CAPITAL LETTER Y WITH DOT BELOW ++ { {UNITIZE(Qt::Key_Dead_Belowdot), 0x005a, 0, 0, 0, 0}, 0x1e92 }, // U1E92 # LATIN CAPITAL LETTER Z WITH DOT BELOW ++ { {UNITIZE(Qt::Key_Dead_Belowdot), 0x0061, 0, 0, 0, 0}, 0x1ea1 }, // U1EA1 # LATIN SMALL LETTER A WITH DOT BELOW ++ { {UNITIZE(Qt::Key_Dead_Belowdot), 0x0062, 0, 0, 0, 0}, 0x1e05 }, // U1E05 # LATIN SMALL LETTER B WITH DOT BELOW ++ { {UNITIZE(Qt::Key_Dead_Belowdot), 0x0064, 0, 0, 0, 0}, 0x1e0d }, // U1E0D # LATIN SMALL LETTER D WITH DOT BELOW ++ { {UNITIZE(Qt::Key_Dead_Belowdot), 0x0065, 0, 0, 0, 0}, 0x1eb9 }, // U1EB9 # LATIN SMALL LETTER E WITH DOT BELOW ++ { {UNITIZE(Qt::Key_Dead_Belowdot), 0x0068, 0, 0, 0, 0}, 0x1e25 }, // U1E25 # LATIN SMALL LETTER H WITH DOT BELOW ++ { {UNITIZE(Qt::Key_Dead_Belowdot), 0x0069, 0, 0, 0, 0}, 0x1ecb }, // U1ECB # LATIN SMALL LETTER I WITH DOT BELOW ++ { {UNITIZE(Qt::Key_Dead_Belowdot), 0x006b, 0, 0, 0, 0}, 0x1e33 }, // U1E33 # LATIN SMALL LETTER K WITH DOT BELOW ++ { {UNITIZE(Qt::Key_Dead_Belowdot), 0x006c, 0, 0, 0, 0}, 0x1e37 }, // U1E37 # LATIN SMALL LETTER L WITH DOT BELOW ++ { {UNITIZE(Qt::Key_Dead_Belowdot), 0x006d, 0, 0, 0, 0}, 0x1e43 }, // U1E43 # LATIN SMALL LETTER M WITH DOT BELOW ++ { {UNITIZE(Qt::Key_Dead_Belowdot), 0x006e, 0, 0, 0, 0}, 0x1e47 }, // U1E47 # LATIN SMALL LETTER N WITH DOT BELOW ++ { {UNITIZE(Qt::Key_Dead_Belowdot), 0x006f, 0, 0, 0, 0}, 0x1ecd }, // U1ECD # LATIN SMALL LETTER O WITH DOT BELOW ++ { {UNITIZE(Qt::Key_Dead_Belowdot), 0x0072, 0, 0, 0, 0}, 0x1e5b }, // U1E5B # LATIN SMALL LETTER R WITH DOT BELOW ++ { {UNITIZE(Qt::Key_Dead_Belowdot), 0x0073, 0, 0, 0, 0}, 0x1e63 }, // U1E63 # LATIN SMALL LETTER S WITH DOT BELOW ++ { {UNITIZE(Qt::Key_Dead_Belowdot), 0x0074, 0, 0, 0, 0}, 0x1e6d }, // U1E6D # LATIN SMALL LETTER T WITH DOT BELOW ++ { {UNITIZE(Qt::Key_Dead_Belowdot), 0x0075, 0, 0, 0, 0}, 0x1ee5 }, // U1EE5 # LATIN SMALL LETTER U WITH DOT BELOW ++ { {UNITIZE(Qt::Key_Dead_Belowdot), 0x0076, 0, 0, 0, 0}, 0x1e7f }, // U1E7F # LATIN SMALL LETTER V WITH DOT BELOW ++ { {UNITIZE(Qt::Key_Dead_Belowdot), 0x0077, 0, 0, 0, 0}, 0x1e89 }, // U1E89 # LATIN SMALL LETTER W WITH DOT BELOW ++ { {UNITIZE(Qt::Key_Dead_Belowdot), 0x0079, 0, 0, 0, 0}, 0x1ef5 }, // U1EF5 # LATIN SMALL LETTER Y WITH DOT BELOW ++ { {UNITIZE(Qt::Key_Dead_Belowdot), 0x007a, 0, 0, 0, 0}, 0x1e93 }, // U1E93 # LATIN SMALL LETTER Z WITH DOT BELOW ++ { {UNITIZE(Qt::Key_Dead_Belowdot), 0x00c2, 0, 0, 0, 0}, 0x1eac }, // U1EAC # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND DOT BELOW ++ { {UNITIZE(Qt::Key_Dead_Belowdot), 0x00ca, 0, 0, 0, 0}, 0x1ec6 }, // U1EC6 # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND DOT BELOW ++ { {UNITIZE(Qt::Key_Dead_Belowdot), 0x00d4, 0, 0, 0, 0}, 0x1ed8 }, // U1ED8 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND DOT BELOW ++ { {UNITIZE(Qt::Key_Dead_Belowdot), 0x00e2, 0, 0, 0, 0}, 0x1ead }, // U1EAD # LATIN SMALL LETTER A WITH CIRCUMFLEX AND DOT BELOW ++ { {UNITIZE(Qt::Key_Dead_Belowdot), 0x00ea, 0, 0, 0, 0}, 0x1ec7 }, // U1EC7 # LATIN SMALL LETTER E WITH CIRCUMFLEX AND DOT BELOW ++ { {UNITIZE(Qt::Key_Dead_Belowdot), 0x00f4, 0, 0, 0, 0}, 0x1ed9 }, // U1ED9 # LATIN SMALL LETTER O WITH CIRCUMFLEX AND DOT BELOW ++ { {UNITIZE(Qt::Key_Dead_Belowdot), 0x0102, 0, 0, 0, 0}, 0x1eb6 }, // U1EB6 # LATIN CAPITAL LETTER A WITH BREVE AND DOT BELOW ++ { {UNITIZE(Qt::Key_Dead_Belowdot), 0x0103, 0, 0, 0, 0}, 0x1eb7 }, // U1EB7 # LATIN SMALL LETTER A WITH BREVE AND DOT BELOW ++ { {UNITIZE(Qt::Key_Dead_Belowdot), 0x01A0, 0, 0, 0, 0}, 0x1ee2 }, // U1EE2 # LATIN CAPITAL LETTER O WITH HORN AND DOT BELOW ++ { {UNITIZE(Qt::Key_Dead_Belowdot), 0x01A1, 0, 0, 0, 0}, 0x1ee3 }, // U1EE3 # LATIN SMALL LETTER O WITH HORN AND DOT BELOW ++ { {UNITIZE(Qt::Key_Dead_Belowdot), 0x01AF, 0, 0, 0, 0}, 0x1ef0 }, // U1EF0 # LATIN CAPITAL LETTER U WITH HORN AND DOT BELOW ++ { {UNITIZE(Qt::Key_Dead_Belowdot), 0x01B0, 0, 0, 0, 0}, 0x1ef1 }, // U1EF1 # LATIN SMALL LETTER U WITH HORN AND DOT BELOW ++ { {UNITIZE(Qt::Key_Dead_Belowdot), UNITIZE(Qt::Key_Multi_key), 0x002b, 0x004f, 0, 0}, 0x1ee2 }, // U1EE2 # LATIN CAPITAL LETTER O WITH HORN AND DOT BELOW ++ { {UNITIZE(Qt::Key_Dead_Belowdot), UNITIZE(Qt::Key_Multi_key), 0x002b, 0x0055, 0, 0}, 0x1ef0 }, // U1EF0 # LATIN CAPITAL LETTER U WITH HORN AND DOT BELOW ++ { {UNITIZE(Qt::Key_Dead_Belowdot), UNITIZE(Qt::Key_Multi_key), 0x002b, 0x006f, 0, 0}, 0x1ee3 }, // U1EE3 # LATIN SMALL LETTER O WITH HORN AND DOT BELOW ++ { {UNITIZE(Qt::Key_Dead_Belowdot), UNITIZE(Qt::Key_Multi_key), 0x002b, 0x0075, 0, 0}, 0x1ef1 }, // U1EF1 # LATIN SMALL LETTER U WITH HORN AND DOT BELOW ++ { {UNITIZE(Qt::Key_Dead_Belowdot), UNITIZE(Qt::Key_Dead_Horn), 0x004f, 0, 0, 0}, 0x1ee2 }, // U1EE2 # LATIN CAPITAL LETTER O WITH HORN AND DOT BELOW ++ { {UNITIZE(Qt::Key_Dead_Belowdot), UNITIZE(Qt::Key_Dead_Horn), 0x0055, 0, 0, 0}, 0x1ef0 }, // U1EF0 # LATIN CAPITAL LETTER U WITH HORN AND DOT BELOW ++ { {UNITIZE(Qt::Key_Dead_Belowdot), UNITIZE(Qt::Key_Dead_Horn), 0x006f, 0, 0, 0}, 0x1ee3 }, // U1EE3 # LATIN SMALL LETTER O WITH HORN AND DOT BELOW ++ { {UNITIZE(Qt::Key_Dead_Belowdot), UNITIZE(Qt::Key_Dead_Horn), 0x0075, 0, 0, 0}, 0x1ef1 }, // U1EF1 # LATIN SMALL LETTER U WITH HORN AND DOT BELOW ++// /* broken */ { {UNITIZE(Qt::Key_Dead_Hook), 0x0000, 0, 0, 0, 0}, 0x1edf }, // U1EDF # LATIN SMALL LETTER O WITH HORN AND HOOK ABOVE ++// /* broken */ { {UNITIZE(Qt::Key_Dead_Hook), 0x0000, 0, 0, 0, 0}, 0x1eec }, // U1EEC # LATIN CAPITAL LETTER U WITH HORN AND HOOK ABOVE ++// /* broken */ { {UNITIZE(Qt::Key_Dead_Hook), 0x0000, 0, 0, 0, 0}, 0x1eed }, // U1EED # LATIN SMALL LETTER U WITH HORN AND HOOK ABOVE ++// /* broken */ { {UNITIZE(Qt::Key_Dead_Hook), 0x0000, 0, 0, 0, 0}, 0x1ede }, // U1EDE # LATIN CAPITAL LETTER O WITH HORN AND HOOK ABOVE ++ { {UNITIZE(Qt::Key_Dead_Hook), 0x0041, 0, 0, 0, 0}, 0x1ea2 }, // U1EA2 # LATIN CAPITAL LETTER A WITH HOOK ABOVE ++ { {UNITIZE(Qt::Key_Dead_Hook), 0x0045, 0, 0, 0, 0}, 0x1eba }, // U1EBA # LATIN CAPITAL LETTER E WITH HOOK ABOVE ++ { {UNITIZE(Qt::Key_Dead_Hook), 0x0049, 0, 0, 0, 0}, 0x1ec8 }, // U1EC8 # LATIN CAPITAL LETTER I WITH HOOK ABOVE ++ { {UNITIZE(Qt::Key_Dead_Hook), 0x004f, 0, 0, 0, 0}, 0x1ece }, // U1ECE # LATIN CAPITAL LETTER O WITH HOOK ABOVE ++ { {UNITIZE(Qt::Key_Dead_Hook), 0x0055, 0, 0, 0, 0}, 0x1ee6 }, // U1EE6 # LATIN CAPITAL LETTER U WITH HOOK ABOVE ++ { {UNITIZE(Qt::Key_Dead_Hook), 0x0059, 0, 0, 0, 0}, 0x1ef6 }, // U1EF6 # LATIN CAPITAL LETTER Y WITH HOOK ABOVE ++ { {UNITIZE(Qt::Key_Dead_Hook), 0x0061, 0, 0, 0, 0}, 0x1ea3 }, // U1EA3 # LATIN SMALL LETTER A WITH HOOK ABOVE ++ { {UNITIZE(Qt::Key_Dead_Hook), 0x0065, 0, 0, 0, 0}, 0x1ebb }, // U1EBB # LATIN SMALL LETTER E WITH HOOK ABOVE ++ { {UNITIZE(Qt::Key_Dead_Hook), 0x0069, 0, 0, 0, 0}, 0x1ec9 }, // U1EC9 # LATIN SMALL LETTER I WITH HOOK ABOVE ++ { {UNITIZE(Qt::Key_Dead_Hook), 0x006f, 0, 0, 0, 0}, 0x1ecf }, // U1ECF # LATIN SMALL LETTER O WITH HOOK ABOVE ++ { {UNITIZE(Qt::Key_Dead_Hook), 0x0075, 0, 0, 0, 0}, 0x1ee7 }, // U1EE7 # LATIN SMALL LETTER U WITH HOOK ABOVE ++ { {UNITIZE(Qt::Key_Dead_Hook), 0x0079, 0, 0, 0, 0}, 0x1ef7 }, // U1EF7 # LATIN SMALL LETTER Y WITH HOOK ABOVE ++ { {UNITIZE(Qt::Key_Dead_Hook), 0x00c2, 0, 0, 0, 0}, 0x1ea8 }, // U1EA8 # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE ++ { {UNITIZE(Qt::Key_Dead_Hook), 0x00ca, 0, 0, 0, 0}, 0x1ec2 }, // U1EC2 # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE ++ { {UNITIZE(Qt::Key_Dead_Hook), 0x00d4, 0, 0, 0, 0}, 0x1ed4 }, // U1ED4 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE ++ { {UNITIZE(Qt::Key_Dead_Hook), 0x00e2, 0, 0, 0, 0}, 0x1ea9 }, // U1EA9 # LATIN SMALL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE ++ { {UNITIZE(Qt::Key_Dead_Hook), 0x00ea, 0, 0, 0, 0}, 0x1ec3 }, // U1EC3 # LATIN SMALL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE ++ { {UNITIZE(Qt::Key_Dead_Hook), 0x00f4, 0, 0, 0, 0}, 0x1ed5 }, // U1ED5 # LATIN SMALL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE ++ { {UNITIZE(Qt::Key_Dead_Hook), 0x0102, 0, 0, 0, 0}, 0x1eb2 }, // U1EB2 # LATIN CAPITAL LETTER A WITH BREVE AND HOOK ABOVE ++ { {UNITIZE(Qt::Key_Dead_Hook), 0x0103, 0, 0, 0, 0}, 0x1eb3 }, // U1EB3 # LATIN SMALL LETTER A WITH BREVE AND HOOK ABOVE ++ { {UNITIZE(Qt::Key_Dead_Hook), 0x01A0, 0, 0, 0, 0}, 0x1ede }, // U1EDE # LATIN CAPITAL LETTER O WITH HORN AND HOOK ABOVE ++ { {UNITIZE(Qt::Key_Dead_Hook), 0x01A1, 0, 0, 0, 0}, 0x1edf }, // U1EDF # LATIN SMALL LETTER O WITH HORN AND HOOK ABOVE ++ { {UNITIZE(Qt::Key_Dead_Hook), 0x01AF, 0, 0, 0, 0}, 0x1eec }, // U1EEC # LATIN CAPITAL LETTER U WITH HORN AND HOOK ABOVE ++ { {UNITIZE(Qt::Key_Dead_Hook), 0x01B0, 0, 0, 0, 0}, 0x1eed }, // U1EED # LATIN SMALL LETTER U WITH HORN AND HOOK ABOVE ++ { {UNITIZE(Qt::Key_Dead_Hook), UNITIZE(Qt::Key_Multi_key), 0x002b, 0x004f, 0, 0}, 0x1ede }, // U1EDE # LATIN CAPITAL LETTER O WITH HORN AND HOOK ABOVE ++ { {UNITIZE(Qt::Key_Dead_Hook), UNITIZE(Qt::Key_Multi_key), 0x002b, 0x0055, 0, 0}, 0x1eec }, // U1EEC # LATIN CAPITAL LETTER U WITH HORN AND HOOK ABOVE ++ { {UNITIZE(Qt::Key_Dead_Hook), UNITIZE(Qt::Key_Multi_key), 0x002b, 0x006f, 0, 0}, 0x1edf }, // U1EDF # LATIN SMALL LETTER O WITH HORN AND HOOK ABOVE ++ { {UNITIZE(Qt::Key_Dead_Hook), UNITIZE(Qt::Key_Multi_key), 0x002b, 0x0075, 0, 0}, 0x1eed }, // U1EED # LATIN SMALL LETTER U WITH HORN AND HOOK ABOVE ++ { {UNITIZE(Qt::Key_Dead_Hook), UNITIZE(Qt::Key_Multi_key), 0x0055, 0x0041, 0, 0}, 0x1eb2 }, // U1EB2 # LATIN CAPITAL LETTER A WITH BREVE AND HOOK ABOVE ++ { {UNITIZE(Qt::Key_Dead_Hook), UNITIZE(Qt::Key_Multi_key), 0x0055, 0x0061, 0, 0}, 0x1eb3 }, // U1EB3 # LATIN SMALL LETTER A WITH BREVE AND HOOK ABOVE ++ { {UNITIZE(Qt::Key_Dead_Hook), UNITIZE(Qt::Key_Multi_key), 0x005e, 0x0041, 0, 0}, 0x1ea8 }, // U1EA8 # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE ++ { {UNITIZE(Qt::Key_Dead_Hook), UNITIZE(Qt::Key_Multi_key), 0x005e, 0x0045, 0, 0}, 0x1ec2 }, // U1EC2 # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE ++ { {UNITIZE(Qt::Key_Dead_Hook), UNITIZE(Qt::Key_Multi_key), 0x005e, 0x004f, 0, 0}, 0x1ed4 }, // U1ED4 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE ++ { {UNITIZE(Qt::Key_Dead_Hook), UNITIZE(Qt::Key_Multi_key), 0x005e, 0x0061, 0, 0}, 0x1ea9 }, // U1EA9 # LATIN SMALL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE ++ { {UNITIZE(Qt::Key_Dead_Hook), UNITIZE(Qt::Key_Multi_key), 0x005e, 0x0065, 0, 0}, 0x1ec3 }, // U1EC3 # LATIN SMALL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE ++ { {UNITIZE(Qt::Key_Dead_Hook), UNITIZE(Qt::Key_Multi_key), 0x005e, 0x006f, 0, 0}, 0x1ed5 }, // U1ED5 # LATIN SMALL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE ++ { {UNITIZE(Qt::Key_Dead_Hook), UNITIZE(Qt::Key_Multi_key), 0x0062, 0x0041, 0, 0}, 0x1eb2 }, // U1EB2 # LATIN CAPITAL LETTER A WITH BREVE AND HOOK ABOVE ++ { {UNITIZE(Qt::Key_Dead_Hook), UNITIZE(Qt::Key_Multi_key), 0x0062, 0x0061, 0, 0}, 0x1eb3 }, // U1EB3 # LATIN SMALL LETTER A WITH BREVE AND HOOK ABOVE ++ { {UNITIZE(Qt::Key_Dead_Hook), UNITIZE(Qt::Key_Dead_Circumflex), 0x0041, 0, 0, 0}, 0x1ea8 }, // U1EA8 # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE ++ { {UNITIZE(Qt::Key_Dead_Hook), UNITIZE(Qt::Key_Dead_Circumflex), 0x0045, 0, 0, 0}, 0x1ec2 }, // U1EC2 # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE ++ { {UNITIZE(Qt::Key_Dead_Hook), UNITIZE(Qt::Key_Dead_Circumflex), 0x004f, 0, 0, 0}, 0x1ed4 }, // U1ED4 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE ++ { {UNITIZE(Qt::Key_Dead_Hook), UNITIZE(Qt::Key_Dead_Circumflex), 0x0061, 0, 0, 0}, 0x1ea9 }, // U1EA9 # LATIN SMALL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE ++ { {UNITIZE(Qt::Key_Dead_Hook), UNITIZE(Qt::Key_Dead_Circumflex), 0x0065, 0, 0, 0}, 0x1ec3 }, // U1EC3 # LATIN SMALL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE ++ { {UNITIZE(Qt::Key_Dead_Hook), UNITIZE(Qt::Key_Dead_Circumflex), 0x006f, 0, 0, 0}, 0x1ed5 }, // U1ED5 # LATIN SMALL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE ++ { {UNITIZE(Qt::Key_Dead_Hook), UNITIZE(Qt::Key_Dead_Breve), 0x0041, 0, 0, 0}, 0x1eb2 }, // U1EB2 # LATIN CAPITAL LETTER A WITH BREVE AND HOOK ABOVE ++ { {UNITIZE(Qt::Key_Dead_Hook), UNITIZE(Qt::Key_Dead_Breve), 0x0061, 0, 0, 0}, 0x1eb3 }, // U1EB3 # LATIN SMALL LETTER A WITH BREVE AND HOOK ABOVE ++ { {UNITIZE(Qt::Key_Dead_Hook), UNITIZE(Qt::Key_Dead_Horn), 0x004f, 0, 0, 0}, 0x1ede }, // U1EDE # LATIN CAPITAL LETTER O WITH HORN AND HOOK ABOVE ++ { {UNITIZE(Qt::Key_Dead_Hook), UNITIZE(Qt::Key_Dead_Horn), 0x0055, 0, 0, 0}, 0x1eec }, // U1EEC # LATIN CAPITAL LETTER U WITH HORN AND HOOK ABOVE ++ { {UNITIZE(Qt::Key_Dead_Hook), UNITIZE(Qt::Key_Dead_Horn), 0x006f, 0, 0, 0}, 0x1edf }, // U1EDF # LATIN SMALL LETTER O WITH HORN AND HOOK ABOVE ++ { {UNITIZE(Qt::Key_Dead_Hook), UNITIZE(Qt::Key_Dead_Horn), 0x0075, 0, 0, 0}, 0x1eed }, // U1EED # LATIN SMALL LETTER U WITH HORN AND HOOK ABOVE ++ { {UNITIZE(Qt::Key_Dead_Horn), 0x004f, 0, 0, 0, 0}, 0x01a0 }, // U01A0 # LATIN CAPITAL LETTER O WITH HORN ++ { {UNITIZE(Qt::Key_Dead_Horn), 0x0055, 0, 0, 0, 0}, 0x01af }, // U01AF # LATIN CAPITAL LETTER U WITH HORN ++ { {UNITIZE(Qt::Key_Dead_Horn), 0x006f, 0, 0, 0, 0}, 0x01a1 }, // U01A1 # LATIN SMALL LETTER O WITH HORN ++ { {UNITIZE(Qt::Key_Dead_Horn), 0x0075, 0, 0, 0, 0}, 0x01b0 } // U01B0 # LATIN SMALL LETTER U WITH HORN ++}; ++ ++const QComposeTable QSimpleInputContext::defaultComposeTable = { ++ defaultTable, ++ ( sizeof(defaultTable) / sizeof(QComposeTableElement) ) ++}; +--- plugins/src/inputmethods/simple/qsimpleinputcontext.cpp ++++ plugins/src/inputmethods/simple/qsimpleinputcontext.cpp +@@ -0,0 +1,285 @@ ++/**************************************************************************** ++** $Id$ ++** ++** Implementation of QSimpleInputContext class ++** ++** Copyright (C) 2004 immodule for Qt Project. All rights reserved. ++** ++** This file is written to contribute to Trolltech AS under their own ++** licence. You may use this file under your Qt license. Following ++** description is copied from their original file headers. Contact ++** immodule-qt@freedesktop.org if any conditions of this licensing are ++** not clear to you. ++** ++** ++** This file is part of the input method module of the Qt GUI Toolkit. ++** ++** This file may be distributed under the terms of the Q Public License ++** as defined by Trolltech AS of Norway and appearing in the file ++** LICENSE.QPL included in the packaging of this file. ++** ++** This file may be distributed and/or modified under the terms of the ++** GNU General Public License version 2 as published by the Free Software ++** Foundation and appearing in the file LICENSE.GPL included in the ++** packaging of this file. ++** ++** Licensees holding valid Qt Enterprise Edition or Qt Professional Edition ++** licenses may use this file in accordance with the Qt Commercial License ++** Agreement provided with the Software. ++** ++** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE ++** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. ++** ++** See http://www.trolltech.com/pricing.html or email sales@trolltech.com for ++** information about Qt Commercial License Agreements. ++** See http://www.trolltech.com/qpl/ for QPL licensing information. ++** See http://www.trolltech.com/gpl/ for GPL licensing information. ++** ++** Contact info@trolltech.com if any conditions of this licensing are ++** not clear to you. ++** ++**********************************************************************/ ++ ++#include "qsimpleinputcontext.h" ++ ++#include ++#include ++#include ++#include ++ ++static const int ignoreKeys[] = { ++ Qt::Key_Shift, ++ Qt::Key_Control, ++ Qt::Key_Meta, ++ Qt::Key_Alt, ++ Qt::Key_CapsLock, ++ Qt::Key_Super_L, ++ Qt::Key_Super_R, ++ Qt::Key_Hyper_L, ++ Qt::Key_Hyper_R, ++ Qt::Key_Mode_switch ++}; ++ ++static const int composingKeys[] = { ++ Qt::Key_Multi_key, ++ Qt::Key_Dead_Grave, ++ Qt::Key_Dead_Acute, ++ Qt::Key_Dead_Circumflex, ++ Qt::Key_Dead_Tilde, ++ Qt::Key_Dead_Macron, ++ Qt::Key_Dead_Breve, ++ Qt::Key_Dead_Abovedot, ++ Qt::Key_Dead_Diaeresis, ++ Qt::Key_Dead_Abovering, ++ Qt::Key_Dead_Doubleacute, ++ Qt::Key_Dead_Caron, ++ Qt::Key_Dead_Cedilla, ++ Qt::Key_Dead_Ogonek, ++ Qt::Key_Dead_Iota, ++ Qt::Key_Dead_Voiced_Sound, ++ Qt::Key_Dead_Semivoiced_Sound, ++ Qt::Key_Dead_Belowdot, ++ Qt::Key_Dead_Hook, ++ Qt::Key_Dead_Horn ++}; ++ ++class Cmp ++{ ++public: ++ bool operator () (const QComposeTableElement &lhs, const QComposeTableElement &rhs) const { ++ for ( size_t i=0; i < QT_KEYSEQUENCE_MAX_LEN; i++ ) { ++ if ( lhs.keys[i] < rhs.keys[i] ) return TRUE; ++ else ++ if ( lhs.keys[i] > rhs.keys[i] ) return FALSE; ++ } ++ return FALSE; ++ } ++ ++ bool operator () (const QComposeTableElement &lhs, const uint rhs[QT_KEYSEQUENCE_MAX_LEN]) const { ++ for ( size_t i=0; i < QT_KEYSEQUENCE_MAX_LEN; i++ ) { ++ if ( lhs.keys[i] < rhs[i] ) return TRUE; ++ else ++ if ( lhs.keys[i] > rhs[i] ) return FALSE; ++ } ++ return FALSE; ++ } ++}; ++ ++QSimpleInputContext::QSimpleInputContext() ++ : QInputContext() ++{ ++ clearComposeBuffer(); ++} ++ ++QSimpleInputContext::~QSimpleInputContext() ++{ ++ clearComposeBuffer(); ++} ++ ++bool QSimpleInputContext::filterEvent( const QEvent *event ) ++{ ++ if ( event->type() != QEvent::KeyPress ) ++ return FALSE; ++ ++ QKeyEvent *keyevent = (QKeyEvent *)event; ++ int keyval = keyevent->key(); ++ int val = 0; ++ ++ if ( isIgnoreKeys( keyval ) ) ++ return FALSE; ++ ++ if ( isComposingKeys( keyval ) ) { ++ // If composing keys are pressed, use keyval directly ++ val = UNITIZE( keyval ); ++ } else { ++ QString text = keyevent->text(); ++ if ( text.isEmpty() ) ++ return FALSE; ++ ++ // If not composing keys are pressed, use the character's unicode value ++ // NOTE : The contents of QKeyEvent::text() is restricted to ++ // only one character. See description of ++ // QInputContext::filterEvent() about key compression. ++ val = text[0].unicode(); ++ qDebug( "str = %s", (const char*)keyevent->text().local8Bit() ); ++ } ++ ++ // Store value ++ int nCompose = 0; ++ while ( composeBuffer[nCompose] != 0 && nCompose < QT_KEYSEQUENCE_MAX_LEN ) ++ nCompose++; ++ ++ if ( nCompose == QT_KEYSEQUENCE_MAX_LEN ) { ++ clearComposeBuffer(); ++ nCompose = 0; ++ } ++ ++ composeBuffer[nCompose] = val; ++ ++ // check sequence ++ if( checkComposeTable( composeBuffer, &defaultComposeTable ) ) ++ return TRUE; ++ ++ return FALSE; ++} ++ ++void QSimpleInputContext::setFocus() ++{ ++ qDebug( "QSimpleInputContext: %p->setFocus(), focusWidget()=%p", ++ this, focusWidget() ); ++} ++ ++void QSimpleInputContext::unsetFocus() ++{ ++ qDebug( "QSimpleInputContext: %p->unsetFocus(), focusWidget()=%p", ++ this, focusWidget() ); ++ reset(); ++} ++ ++void QSimpleInputContext::setMicroFocus( int x, int y, int w, int h, QFont *f ) ++{ ++} ++ ++void QSimpleInputContext::mouseHandler( int x, QEvent::Type type, ++ Qt::ButtonState button, ++ Qt::ButtonState state ) ++{ ++ switch ( type ) { ++ case QEvent::MouseButtonPress: ++ case QEvent::MouseButtonRelease: ++ case QEvent::MouseButtonDblClick: ++ case QEvent::MouseMove: ++ qDebug( "QSimpleInputContext::mouseHandler: " ++ "x=%d, type=%d, button=%d, state=%d", x, type, button, state ); ++ break; ++ default: ++ break; ++ } ++} ++ ++ ++void QSimpleInputContext::reset() ++{ ++ clearComposeBuffer(); ++ QInputContext::reset(); ++} ++ ++QString QSimpleInputContext::identifierName() ++{ ++ return "simple"; ++} ++ ++QString QSimpleInputContext::language() ++{ ++ return ""; // FIXME ++} ++ ++bool QSimpleInputContext::isIgnoreKeys( int keyval ) ++{ ++ for ( uint i = 0; i < (sizeof(ignoreKeys)/sizeof(ignoreKeys[0])); i++ ) ++ if ( keyval == ignoreKeys[i] ) ++ return TRUE; ++ ++ return FALSE; ++} ++ ++bool QSimpleInputContext::isComposingKeys( int keyval ) ++{ ++ for ( uint i = 0; i < (sizeof(composingKeys)/sizeof(composingKeys[0])); i++ ) ++ if ( keyval == composingKeys[i] ) ++ return TRUE; ++ ++ return FALSE; ++} ++ ++bool QSimpleInputContext::checkComposeTable( uint* composeBuffer, const QComposeTable *composeTable ) ++{ ++ const QComposeTableElement *p = std::lower_bound( composeTable->data, ++ composeTable->data + composeTable->size, ++ composeBuffer, ++ Cmp() ); ++ ++ // no entries were found ++ if ( p == composeTable->data + composeTable->size ) { ++ qDebug( "no match" ); ++ clearComposeBuffer(); ++ return FALSE; ++ } ++ ++ // check if compose buffer is matched ++ for ( int i=0; i < QT_KEYSEQUENCE_MAX_LEN; i++ ) { ++ ++ // check if partial match ++ if ( composeBuffer[i] == 0 && p->keys[i] ) { ++ qDebug("partial match"); ++ return TRUE; ++ } ++ ++ if ( composeBuffer[i] != p->keys[i] ) { ++ qDebug("different entry"); ++ clearComposeBuffer(); ++ return i!=0; ++ } ++ } ++ ++ qDebug("match exactly"); ++ ++ // match exactly ++ commitChar( p->value ); ++ clearComposeBuffer(); ++ ++ return TRUE; ++} ++ ++void QSimpleInputContext::commitChar( uint c ) ++{ ++ sendIMEvent( QEvent::IMStart ); ++ sendIMEvent( QEvent::IMEnd, QString(QChar(c)) ); ++} ++ ++void QSimpleInputContext::clearComposeBuffer(void) ++{ ++ for ( uint i=0; i < (sizeof(composeBuffer)/sizeof(int)); i++ ) ++ composeBuffer[i] = 0; ++} ++ +--- plugins/src/inputmethods/simple/qsimpleinputcontext.h ++++ plugins/src/inputmethods/simple/qsimpleinputcontext.h +@@ -0,0 +1,93 @@ ++/**************************************************************************** ++** $Id$ ++** ++** Definition of QSimpleInputContext class ++** ++** Copyright (C) 2004 immodule for Qt Project. All rights reserved. ++** ++** This file is written to contribute to Trolltech AS under their own ++** licence. You may use this file under your Qt license. Following ++** description is copied from their original file headers. Contact ++** immodule-qt@freedesktop.org if any conditions of this licensing are ++** not clear to you. ++** ++** ++** This file is part of the input method module of the Qt GUI Toolkit. ++** ++** This file may be distributed under the terms of the Q Public License ++** as defined by Trolltech AS of Norway and appearing in the file ++** LICENSE.QPL included in the packaging of this file. ++** ++** This file may be distributed and/or modified under the terms of the ++** GNU General Public License version 2 as published by the Free Software ++** Foundation and appearing in the file LICENSE.GPL included in the ++** packaging of this file. ++** ++** Licensees holding valid Qt Enterprise Edition or Qt Professional Edition ++** licenses may use this file in accordance with the Qt Commercial License ++** Agreement provided with the Software. ++** ++** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE ++** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. ++** ++** See http://www.trolltech.com/pricing.html or email sales@trolltech.com for ++** information about Qt Commercial License Agreements. ++** See http://www.trolltech.com/qpl/ for QPL licensing information. ++** See http://www.trolltech.com/gpl/ for GPL licensing information. ++** ++** Contact info@trolltech.com if any conditions of this licensing are ++** not clear to you. ++** ++**********************************************************************/ ++ ++#ifndef QSIMPLEINPUT_CONTEXT_H ++#define QSIMPLEINPUT_CONTEXT_H ++ ++#include ++#include ++ ++#define QT_KEYSEQUENCE_MAX_LEN 6 ++#define UNITIZE(qkey) (0x02000000|qkey) ++ ++struct QComposeTableElement { ++ uint keys[QT_KEYSEQUENCE_MAX_LEN]; ++ uint value; ++}; ++ ++struct QComposeTable { ++ const QComposeTableElement *data; ++ uint size; ++}; ++ ++ ++class QSimpleInputContext : public QInputContext { ++ Q_OBJECT ++public: ++ QSimpleInputContext(); ++ ~QSimpleInputContext(); ++ ++ virtual QString identifierName(); ++ virtual QString language(); ++ ++ virtual bool filterEvent( const QEvent *event ); ++ virtual void reset(); ++ virtual void setFocus(); ++ virtual void unsetFocus(); ++ virtual void setMicroFocus( int x, int y, int w, int h, QFont *f = 0 ); ++ virtual void mouseHandler( int x, QEvent::Type type, ++ Qt::ButtonState button, Qt::ButtonState state ); ++ ++protected: ++ bool isIgnoreKeys(int keyval ); ++ bool isComposingKeys( int keyval ); ++ bool checkComposeTable( uint composeBuffer[], const QComposeTable *composeTable ); ++ void commitChar( uint c ); ++ ++ void clearComposeBuffer(void); ++ ++protected: ++ uint composeBuffer[QT_KEYSEQUENCE_MAX_LEN + 1]; ++ static const QComposeTable defaultComposeTable; ++}; ++ ++#endif // QSIMPLEINPUT_CONTEXT_H +--- plugins/src/inputmethods/simple/qsimpleinputcontextplugin.cpp ++++ plugins/src/inputmethods/simple/qsimpleinputcontextplugin.cpp +@@ -0,0 +1,86 @@ ++/**************************************************************************** ++** $Id$ ++** ++** Implementation of QSimpleInputContextPlugin class ++** ++** Copyright (C) 2004 immodule for Qt Project. All rights reserved. ++** ++** This file is written to contribute to Trolltech AS under their own ++** licence. You may use this file under your Qt license. Following ++** description is copied from their original file headers. Contact ++** immodule-qt@freedesktop.org if any conditions of this licensing are ++** not clear to you. ++** ++** ++** This file is part of the input method module of the Qt GUI Toolkit. ++** ++** This file may be distributed under the terms of the Q Public License ++** as defined by Trolltech AS of Norway and appearing in the file ++** LICENSE.QPL included in the packaging of this file. ++** ++** This file may be distributed and/or modified under the terms of the ++** GNU General Public License version 2 as published by the Free Software ++** Foundation and appearing in the file LICENSE.GPL included in the ++** packaging of this file. ++** ++** Licensees holding valid Qt Enterprise Edition or Qt Professional Edition ++** licenses may use this file in accordance with the Qt Commercial License ++** Agreement provided with the Software. ++** ++** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE ++** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. ++** ++** See http://www.trolltech.com/pricing.html or email sales@trolltech.com for ++** information about Qt Commercial License Agreements. ++** See http://www.trolltech.com/qpl/ for QPL licensing information. ++** See http://www.trolltech.com/gpl/ for GPL licensing information. ++** ++** Contact info@trolltech.com if any conditions of this licensing are ++** not clear to you. ++** ++**********************************************************************/ ++ ++#ifndef QT_NO_IM ++#include "qsimpleinputcontext.h" ++#include "qsimpleinputcontextplugin.h" ++#include ++#include ++ ++ ++QSimpleInputContextPlugin::QSimpleInputContextPlugin() ++{ ++} ++ ++QSimpleInputContextPlugin::~QSimpleInputContextPlugin() ++{ ++} ++ ++QStringList QSimpleInputContextPlugin::keys() const ++{ ++ return QStringList( "simple" ); ++} ++ ++QInputContext *QSimpleInputContextPlugin::create( const QString & ) ++{ ++ return new QSimpleInputContext; ++} ++ ++QStringList QSimpleInputContextPlugin::languages( const QString & ) ++{ ++ return QStringList( "" ); ++} ++ ++QString QSimpleInputContextPlugin::displayName( const QString & ) ++{ ++ return tr( "Simple Composing Input Method" ); ++} ++ ++QString QSimpleInputContextPlugin::description( const QString & ) ++{ ++ return tr( "Simple composing input method" ); ++} ++ ++ ++Q_EXPORT_PLUGIN( QSimpleInputContextPlugin ) ++ ++#endif +--- plugins/src/inputmethods/simple/qsimpleinputcontextplugin.h ++++ plugins/src/inputmethods/simple/qsimpleinputcontextplugin.h +@@ -0,0 +1,63 @@ ++/**************************************************************************** ++** $Id$ ++** ++** Definition of QSimpleInputContextPlugin class ++** ++** Copyright (C) 2004 immodule for Qt Project. All rights reserved. ++** ++** This file is written to contribute to Trolltech AS under their own ++** licence. You may use this file under your Qt license. Following ++** description is copied from their original file headers. Contact ++** immodule-qt@freedesktop.org if any conditions of this licensing are ++** not clear to you. ++** ++** ++** This file is part of the input method module of the Qt GUI Toolkit. ++** ++** This file may be distributed under the terms of the Q Public License ++** as defined by Trolltech AS of Norway and appearing in the file ++** LICENSE.QPL included in the packaging of this file. ++** ++** This file may be distributed and/or modified under the terms of the ++** GNU General Public License version 2 as published by the Free Software ++** Foundation and appearing in the file LICENSE.GPL included in the ++** packaging of this file. ++** ++** Licensees holding valid Qt Enterprise Edition or Qt Professional Edition ++** licenses may use this file in accordance with the Qt Commercial License ++** Agreement provided with the Software. ++** ++** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE ++** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. ++** ++** See http://www.trolltech.com/pricing.html or email sales@trolltech.com for ++** information about Qt Commercial License Agreements. ++** See http://www.trolltech.com/qpl/ for QPL licensing information. ++** See http://www.trolltech.com/gpl/ for GPL licensing information. ++** ++** Contact info@trolltech.com if any conditions of this licensing are ++** not clear to you. ++** ++**********************************************************************/ ++ ++#ifndef QT_NO_IM ++#include "qsimpleinputcontext.h" ++#include ++#include ++ ++ ++class QSimpleInputContextPlugin : public QInputContextPlugin ++{ ++ Q_OBJECT ++public: ++ QSimpleInputContextPlugin(); ++ ~QSimpleInputContextPlugin(); ++ ++ QStringList keys() const; ++ QInputContext *create( const QString &key ); ++ QStringList languages( const QString &key ); ++ QString displayName( const QString &key ); ++ QString description( const QString &key ); ++}; ++ ++#endif +--- plugins/src/inputmethods/simple/simple.pro ++++ plugins/src/inputmethods/simple/simple.pro +@@ -0,0 +1,15 @@ ++TEMPLATE = lib ++TARGET = qsimple ++DESTDIR = ../../../inputmethods ++ ++INCLUDEPATH += . ++CONFIG += qt warn_on debug plugin ++target.path += $$plugins.path/inputmethods ++INSTALLS += target ++ ++# Input ++HEADERS += qsimpleinputcontext.h \ ++ qsimpleinputcontextplugin.h ++SOURCES += qsimpleinputcontext.cpp \ ++ qsimpleinputcontextplugin.cpp \ ++ composetable.cpp +--- plugins/src/inputmethods/simple/xcompose2q.rb ++++ plugins/src/inputmethods/simple/xcompose2q.rb +@@ -0,0 +1,450 @@ ++#!/usr/bin/env ruby ++ ++# xcompose2q.rb: X Compose table to QSimpleInputContext table translator ++# Copyright (C) 2004 immodule for Qt Project. All rights reserved. ++# ++# This file is written to contribute to Trolltech AS under their own ++# licence. You may use this file under your Qt license. Following ++# description is copied from their original file headers. Contact ++# immodule-qt@freedesktop.org if any conditions of this licensing are ++# not clear to you. ++ ++# This file may be distributed under the terms of the Q Public License ++# as defined by Trolltech AS of Norway and appearing in the file ++# LICENSE.QPL included in the packaging of this file. ++# ++# This file may be distributed and/or modified under the terms of the ++# GNU General Public License version 2 as published by the Free Software ++# Foundation and appearing in the file LICENSE.GPL included in the ++# packaging of this file. ++# ++# Licensees holding valid Qt Enterprise Edition or Qt Professional Edition ++# licenses may use this file in accordance with the Qt Commercial License ++# Agreement provided with the Software. ++# ++# This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE ++# WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. ++# ++# See http://www.trolltech.com/pricing.html or email sales@trolltech.com for ++# information about Qt Commercial License Agreements. ++# See http://www.trolltech.com/qpl/ for QPL licensing information. ++# See http://www.trolltech.com/gpl/ for GPL licensing information. ++# ++# Contact info@trolltech.com if any conditions of this licensing are ++# not clear to you. ++ ++ ++# Usage: ++# xcompose2q.rb /usr/X11R6/lib/X11/locale/en_US.UTF-8/Compose ++ ++require 'uconv' ++ ++# translation table for lazy sorting ++raw2key = { ++ "0y1120" => "UNITIZE(Qt::Key_Multi_key)", ++ "0y1250" => "UNITIZE(Qt::Key_Dead_Grave)", ++ "0y1251" => "UNITIZE(Qt::Key_Dead_Acute)", ++ "0y1252" => "UNITIZE(Qt::Key_Dead_Circumflex)", ++ "0y1253" => "UNITIZE(Qt::Key_Dead_Tilde)", ++ "0y1254" => "UNITIZE(Qt::Key_Dead_Macron)", ++ "0y1255" => "UNITIZE(Qt::Key_Dead_Breve)", ++ "0y1256" => "UNITIZE(Qt::Key_Dead_Abovedot)", ++ "0y1257" => "UNITIZE(Qt::Key_Dead_Diaeresis)", ++ "0y1258" => "UNITIZE(Qt::Key_Dead_Abovering)", ++ "0y1259" => "UNITIZE(Qt::Key_Dead_Doubleacute)", ++ "0y125a" => "UNITIZE(Qt::Key_Dead_Caron)", ++ "0y125b" => "UNITIZE(Qt::Key_Dead_Cedilla)", ++ "0y125c" => "UNITIZE(Qt::Key_Dead_Ogonek)", ++ "0y125d" => "UNITIZE(Qt::Key_Dead_Iota)", ++ "0y125e" => "UNITIZE(Qt::Key_Dead_Voiced_Sound)", ++ "0y125f" => "UNITIZE(Qt::Key_Dead_Semivoiced_Sound)", ++ "0y1260" => "UNITIZE(Qt::Key_Dead_Belowdot)", ++ "0y1261" => "UNITIZE(Qt::Key_Dead_Hook)", ++ "0y1262" => "UNITIZE(Qt::Key_Dead_Horn)", ++} ++ ++# X's KeySym to Unicode translation table. The unicode value is ++# extracted from ++# QETWidget::translateKeyEventInternal(). Translation for some ++# keys are not available ++x2q = { ++ "Multi_key" => "0y1120", ++ "dead_grave" => "0y1250", ++ "dead_acute" => "0y1251", ++ "dead_circumflex" => "0y1252", ++ "dead_tilde" => "0y1253", ++ "dead_macron" => "0y1254", ++ "dead_breve" => "0y1255", ++ "dead_abovedot" => "0y1256", ++ "dead_diaeresis" => "0y1257", ++ "dead_abovering" => "0y1258", ++ "dead_doubleacute" => "0y1259", ++ "dead_caron" => "0y125a", ++ "dead_cedilla" => "0y125b", ++ "dead_ogonek" => "0y125c", ++ "dead_iota" => "0y125d", ++ "dead_voiced_sound" => "0y125e", ++ "dead_semivoiced_sound" => "0y125f", ++ "dead_belowdot" => "0y1260", ++ "dead_hook" => "0y1261", ++ "dead_horn" => "0y1262", ++ ++ "0" => "0x0030", ++ "1" => "0x0031", ++ "2" => "0x0032", ++ "3" => "0x0033", ++ "4" => "0x0034", ++ "5" => "0x0035", ++ "6" => "0x0036", ++ "7" => "0x0037", ++ "8" => "0x0038", ++ "9" => "0x0039", ++ "A" => "0x0041", ++ "AE" => "0x00c6", ++ "Abreve" => "0x0102", ++ "Acircumflex" => "0x00c2", ++ "Adiaeresis" => "0x00c4", ++ "Arabic_alef" => "0x0627", ++ "Arabic_waw" => "0x0648", ++ "Arabic_yeh" => "0x064a", ++ "Aring" => "0x00c5", ++ "B" => "0x0042", ++ "C" => "0x0043", ++ "Ccedilla" => "0x00c7", ++ "Cyrillic_A" => "0x0410", ++ "Cyrillic_CHE" => "0x0427", ++ "Cyrillic_E" => "0x042d", ++ "Cyrillic_GHE" => "0x0413", ++ "Cyrillic_I" => "0x0418", ++ "Cyrillic_IE" => "0x0415", ++ "Cyrillic_KA" => "0x041a", ++ "Cyrillic_O" => "0x041e", ++ "Cyrillic_U" => "0x0423", ++ "Cyrillic_YERU" => "0x042b", ++ "Cyrillic_ZE" => "0x0417", ++ "Cyrillic_ZHE" => "0x0416", ++ "Cyrillic_a" => "0x0430", ++ "Cyrillic_che" => "0x0447", ++ "Cyrillic_e" => "0x044d", ++ "Cyrillic_ghe" => "0x0433", ++ "Cyrillic_i" => "0x0438", ++ "Cyrillic_ie" => "0x0435", ++ "Cyrillic_ka" => "0x043a", ++ "Cyrillic_o" => "0x043e", ++ "Cyrillic_u" => "0x0443", ++ "Cyrillic_yeru" => "0x044b", ++ "Cyrillic_ze" => "0x0437", ++ "Cyrillic_zhe" => "0x0436", ++ "D" => "0x0044", ++ "E" => "0x0045", ++ "Ecircumflex" => "0x00ca", ++ "Emacron" => "0x0112", ++ "F" => "0x0046", ++ "G" => "0x0047", ++ "Greek_ALPHA" => "0x0391", ++ "Greek_EPSILON" => "0x0395", ++ "Greek_ETA" => "0x0397", ++ "Greek_IOTA" => "0x0399", ++ "Greek_OMEGA" => "0x03a9", ++ "Greek_OMICRON" => "0x039f", ++ "Greek_RHO" => "0x03a1", ++ "Greek_UPSILON" => "0x03a5", ++ "Greek_alpha" => "0x03b1", ++ "Greek_alphaaccent" => "0x03ac", ++ "Greek_epsilon" => "0x03b5", ++ "Greek_eta" => "0x03b7", ++ "Greek_etaaccent" => "0x03ae", ++ "Greek_iota" => "0x03b9", ++ "Greek_iotadieresis" => "0x03ca", ++ "Greek_omega" => "0x03c9", ++ "Greek_omegaaccent" => "0x03ce", ++ "Greek_omicron" => "0x03bf", ++ "Greek_rho" => "0x03c1", ++ "Greek_upsilon" => "0x03c5", ++ "Greek_upsilondieresis" => "0x03cb", ++ "H" => "0x0048", ++ "I" => "0x0049", ++ "Idiaeresis" => "0x00cf", ++ "J" => "0x004a", ++ "K" => "0x004b", ++ "KP_0" => "0x0000", ++ "KP_1" => "0x0000", ++ "KP_2" => "0x0000", ++ "KP_3" => "0x0000", ++ "KP_4" => "0x0000", ++ "KP_5" => "0x0000", ++ "KP_6" => "0x0000", ++ "KP_7" => "0x0000", ++ "KP_8" => "0x0000", ++ "KP_9" => "0x0000", ++ "KP_Add" => "0x0000", ++ "KP_Divide" => "0x0000", ++ "KP_Equal" => "0x0000", ++ "KP_Space" => "0x0000", ++ "L" => "0x004c", ++ "M" => "0x004d", ++ "N" => "0x004e", ++ "O" => "0x004f", ++ "Ocircumflex" => "0x00d4", ++ "Odiaeresis" => "0x00d6", ++ "Ohorn" => "0x0000", ++ "Omacron" => "0x014c", ++ "Ooblique" => "0x00d8", ++ "Otilde" => "0x00d5", ++ "P" => "0x0050", ++ "Q" => "0x0051", ++ "R" => "0x0052", ++ "S" => "0x0053", ++ "Sacute" => "0x015a", ++ "Scaron" => "0x0160", ++ "T" => "0x0054", ++ "U" => "0x0055", ++ "Udiaeresis" => "0x00dc", ++ "Uhorn" => "0x0000", ++ "Ukrainian_I" => "0x0406", ++ "Ukrainian_i" => "0x0456", ++ "Umacron" => "0x016a", ++ "Utilde" => "0x0168", ++ "V" => "0x0056", ++ "W" => "0x0057", ++ "X" => "0x0058", ++ "Y" => "0x0059", ++ "Z" => "0x005a", ++ "a" => "0x0061", ++ "abreve" => "0x0103", ++ "acircumflex" => "0x00e2", ++ "acute" => "0x00b4", ++ "adiaeresis" => "0x00e4", ++ "ae" => "0x00e6", ++ "ampersand" => "0x0026", ++ "apostrophe" => "0x0027", ++ "approximate" => "0x223c", ++ "aring" => "0x00e5", ++ "asciicircum" => "0x005e", ++ "asciitilde" => "0x007e", ++ "asterisk" => "0x002a", ++ "at" => "0x0040", ++ "b" => "0x0062", ++ "backslash" => "0x005c", ++ "bar" => "0x007c", ++ "braceleft" => "0x007b", ++ "braceright" => "0x007d", ++ "bracketleft" => "0x005b", ++ "bracketright" => "0x005d", ++ "c" => "0x0063", ++ "ccedilla" => "0x00e7", ++ "colon" => "0x003a", ++ "combining_acute" => "0x0000", ++ "combining_belowdot" => "0x0000", ++ "combining_grave" => "0x0000", ++ "combining_hook" => "0x0000", ++ "combining_tilde" => "0x0000", ++ "comma" => "0x002c", ++ "d" => "0x0064", ++ "diaeresis" => "0x00a8", ++ "dollar" => "0x0024", ++ "e" => "0x0065", ++ "ecircumflex" => "0x00ea", ++ "emacron" => "0x0113", ++ "equal" => "0x003d", ++ "exclam" => "0x0021", ++ "f" => "0x0066", ++ "g" => "0x0067", ++ "grave" => "0x0060", ++ "greater" => "0x003e", ++ "greaterthanequal" => "0x2265", ++ "h" => "0x0068", ++ "hebrew_aleph" => "0x05d0", ++ "hebrew_bet" => "0x05d1", ++ "hebrew_beth" => "0x05d1", ++ "hebrew_dalet" => "0x05d3", ++ "hebrew_daleth" => "0x05d3", ++ "hebrew_finalkaph" => "0x05da", ++ "hebrew_finalpe" => "0x05e3", ++ "hebrew_gimel" => "0x05d2", ++ "hebrew_gimmel" => "0x05d2", ++ "hebrew_he" => "0x05d4", ++ "hebrew_kaph" => "0x05db", ++ "hebrew_kuf" => "0x05e7", ++ "hebrew_lamed" => "0x05dc", ++ "hebrew_mem" => "0x05de", ++ "hebrew_nun" => "0x05e0", ++ "hebrew_pe" => "0x05e4", ++ "hebrew_qoph" => "0x05e7", ++ "hebrew_resh" => "0x05e8", ++ "hebrew_samech" => "0x05e1", ++ "hebrew_samekh" => "0x05e1", ++ "hebrew_shin" => "0x05e9", ++ "hebrew_taf" => "0x05ea", ++ "hebrew_taw" => "0x05ea", ++ "hebrew_tet" => "0x05d8", ++ "hebrew_teth" => "0x05d8", ++ "hebrew_waw" => "0x05d5", ++ "hebrew_yod" => "0x05d9", ++ "hebrew_zade" => "0x05e6", ++ "hebrew_zadi" => "0x05e6", ++ "hebrew_zain" => "0x05d6", ++ "hebrew_zayin" => "0x05d6", ++ "i" => "0x0069", ++ "identical" => "0x2261", ++ "idiaeresis" => "0x00ef", ++ "includedin" => "0x2282", ++ "includes" => "0x2283", ++ "j" => "0x006a", ++ "k" => "0x006b", ++ "kana_A" => "0x30a2", ++ "kana_CHI" => "0x30c1", ++ "kana_E" => "0x30a8", ++ "kana_FU" => "0x30d5", ++ "kana_HA" => "0x30cf", ++ "kana_HE" => "0x30d8", ++ "kana_HI" => "0x30d2", ++ "kana_HO" => "0x30db", ++ "kana_I" => "0x30a4", ++ "kana_KA" => "0x30ab", ++ "kana_KE" => "0x30b1", ++ "kana_KI" => "0x30ad", ++ "kana_KO" => "0x30b3", ++ "kana_KU" => "0x30af", ++ "kana_MA" => "0x30de", ++ "kana_ME" => "0x30e1", ++ "kana_MI" => "0x30df", ++ "kana_MO" => "0x30e2", ++ "kana_MU" => "0x30e0", ++ "kana_NA" => "0x30ca", ++ "kana_NE" => "0x30cd", ++ "kana_NI" => "0x30cb", ++ "kana_NO" => "0x30ce", ++ "kana_NU" => "0x30cc", ++ "kana_O" => "0x30aa", ++ "kana_RA" => "0x30e9", ++ "kana_RE" => "0x30ec", ++ "kana_RI" => "0x30ea", ++ "kana_RO" => "0x30ed", ++ "kana_RU" => "0x30eb", ++ "kana_SA" => "0x30b5", ++ "kana_SE" => "0x30bb", ++ "kana_SHI" => "0x30b7", ++ "kana_SO" => "0x30bd", ++ "kana_SU" => "0x30b9", ++ "kana_TA" => "0x30bf", ++ "kana_TE" => "0x30c6", ++ "kana_TO" => "0x30c8", ++ "kana_TSU" => "0x30c4", ++ "kana_U" => "0x30a6", ++ "kana_WA" => "0x30ef", ++ "kana_WO" => "0x30f2", ++ "kana_YA" => "0x30e4", ++ "kana_YO" => "0x30e8", ++ "kana_YU" => "0x30e6", ++ "l" => "0x006c", ++ "leftarrow" => "0x2190", ++ "leftcaret" => "0x003c", ++ "leftshoe" => "0x2282", ++ "less" => "0x003c", ++ "lessthanequal" => "0x2264", ++ "m" => "0x006d", ++ "macron" => "0x00af", ++ "minus" => "0x002d", ++ "n" => "0x006e", ++ "numbersign" => "0x0023", ++ "o" => "0x006f", ++ "ocircumflex" => "0x00f4", ++ "odiaeresis" => "0x00f6", ++ "ohorn" => "0x0000", ++ "omacron" => "0x014d", ++ "oslash" => "0x00f8", ++ "otilde" => "0x00f5", ++ "p" => "0x0070", ++ "parenleft" => "0x0028", ++ "parenright" => "0x0029", ++ "percent" => "0x0025", ++ "period" => "0x002e", ++ "plus" => "0x002b", ++ "q" => "0x0071", ++ "question" => "0x003f", ++ "quotedbl" => "0x0022", ++ "r" => "0x0072", ++ "rightarrow" => "0x2192", ++ "rightcaret" => "0x003e", ++ "rightshoe" => "0x2283", ++ "righttack" => "0x22a3", ++ "s" => "0x0073", ++ "sacute" => "0x015b", ++ "scaron" => "0x0161", ++ "semicolon" => "0x003b", ++ "slash" => "0x002f", ++ "space" => "0x0020", ++ "t" => "0x0074", ++ "u" => "0x0075", ++ "udiaeresis" => "0x00fc", ++ "uhorn" => "0x0000", ++ "umacron" => "0x016b", ++ "underbar" => "0x005f", ++ "underscore" => "0x005f", ++ "utilde" => "0x0169", ++ "v" => "0x0076", ++ "w" => "0x0077", ++ "x" => "0x0078", ++ "y" => "0x0079", ++ "z" => "0x007a", ++} ++ ++readlines.collect { ++ |line| ++ ++ broken = "" ++ seq = ["0", "0", "0", "0", "0", "0"] ++ index = 0 ++ rhs = "0x0000" ++ comment = "" ++ ++ case line ++ when /^(#|XCOMM)(.*)$/ ++ comment = "// #{$2}\n" ++ rhs = :isCommentLine ++ when /^$/ ++ comment = "\n" ++ rhs = :isCommentLine ++ else ++ line.scan(/<([^>]+)>/) { ++ |args| ++ keysym = args[0] ++ unit = x2q[keysym] || keysym.sub(/^U([\da-fA-F]{4,5})$/, "0x\\1") ++ if (/^(0x(0000|[\da-fA-F]{5,})|dead_space)$/ =~ unit) ++ broken = "// /* broken */" ++ end ++ seq[index] = unit ++ index += 1 ++ } ++ ++ Regexp.new(':\s+"(.+)"\s+(.+)$', nil, 'u') =~ line ++ rhs = Uconv::u8tou16($1).unpack('v')[0] ++ rhs = format("0x%04x", rhs) ++ comment = $2 ++ end ++ ++ entry = { ++ :broken => broken, ++ :seq => seq, ++ :rhs => rhs, ++ :comment => comment ++ } ++}.sort { ++ |entry_a, entry_b| ++ ++ entry_a[:seq] <=> entry_b[:seq] ++}.each { ++ |entry| ++ ++ broken, seq, rhs, comment = entry.values_at(:broken, :seq, :rhs, :comment) ++ if (rhs == :isCommentLine) ++ print comment ++ else ++ seq = seq.collect { ++ |unit| ++ raw2key[unit] || unit ++ } ++ print "#{broken} { {#{seq.join(", ")}}, #{rhs} }, // #{comment}\n" ++ end ++} +--- plugins/src/inputmethods/xim/qximinputcontext.h ++++ plugins/src/inputmethods/xim/qximinputcontext.h +@@ -0,0 +1,130 @@ ++/**************************************************************************** ++** $Id: qximinputcontext_p.h,v 1.6 2004/06/22 06:47:27 daisuke Exp $ ++** ++** Definition of QXIMInputContext ++** ++** Copyright (C) 1992-2002 Trolltech AS. All rights reserved. ++** ++** This file is part of the input method module of the Qt GUI Toolkit. ++** ++** This file may be distributed under the terms of the Q Public License ++** as defined by Trolltech AS of Norway and appearing in the file ++** LICENSE.QPL included in the packaging of this file. ++** ++** This file may be distributed and/or modified under the terms of the ++** GNU General Public License version 2 as published by the Free Software ++** Foundation and appearing in the file LICENSE.GPL included in the ++** packaging of this file. ++** ++** Licensees holding valid Qt Enterprise Edition or Qt Professional Edition ++** licenses may use this file in accordance with the Qt Commercial License ++** Agreement provided with the Software. ++** ++** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE ++** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. ++** ++** See http://www.trolltech.com/pricing.html or email sales@trolltech.com for ++** information about Qt Commercial License Agreements. ++** See http://www.trolltech.com/qpl/ for QPL licensing information. ++** See http://www.trolltech.com/gpl/ for GPL licensing information. ++** ++** Contact info@trolltech.com if any conditions of this licensing are ++** not clear to you. ++** ++**********************************************************************/ ++ ++#ifndef QXIMINPUTCONTEXT_H ++#define QXIMINPUTCONTEXT_H ++ ++ ++// ++// W A R N I N G ++// ------------- ++// ++// This file is not part of the Qt API. It exists for the convenience ++// of internal files. This header file may change from version to version ++// without notice, or even be removed. ++// ++// We mean it. ++// ++// ++ ++#if !defined(Q_NO_IM) ++ ++#include "qglobal.h" ++#include ++#include ++#include ++ ++class QKeyEvent; ++class QWidget; ++class QFont; ++class QString; ++ ++ ++#ifdef Q_WS_X11 ++#include "qarray.h" ++#include "qwindowdefs.h" ++#include ++#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 selectedChars; ++ ++protected: ++ virtual bool isPreeditPreservationEnabled(); // not a QInputContext func ++ ++ QCString _language; ++ ++private: ++ void setComposePosition(int, int); ++ void setComposeArea(int, int, int, int); ++ void setXFontSet(const QFont &); ++ ++ int lookupString(XKeyEvent *, QCString &, KeySym *, Status *) const; ++ ++#endif // Q_WS_X11 ++}; ++ ++ ++#endif //Q_NO_IM ++ ++#endif // QXIMINPUTCONTEXT_H +--- plugins/src/inputmethods/xim/qximinputcontextplugin.cpp ++++ plugins/src/inputmethods/xim/qximinputcontextplugin.cpp +@@ -0,0 +1,86 @@ ++/**************************************************************************** ++** $Id$ ++** ++** Implementation of QXIMInputContextPlugin class ++** ++** Copyright (C) 2004 immodule for Qt Project. All rights reserved. ++** ++** This file is written to contribute to Trolltech AS under their own ++** licence. You may use this file under your Qt license. Following ++** description is copied from their original file headers. Contact ++** immodule-qt@freedesktop.org if any conditions of this licensing are ++** not clear to you. ++** ++** ++** This file is part of the input method module of the Qt GUI Toolkit. ++** ++** This file may be distributed under the terms of the Q Public License ++** as defined by Trolltech AS of Norway and appearing in the file ++** LICENSE.QPL included in the packaging of this file. ++** ++** This file may be distributed and/or modified under the terms of the ++** GNU General Public License version 2 as published by the Free Software ++** Foundation and appearing in the file LICENSE.GPL included in the ++** packaging of this file. ++** ++** Licensees holding valid Qt Enterprise Edition or Qt Professional Edition ++** licenses may use this file in accordance with the Qt Commercial License ++** Agreement provided with the Software. ++** ++** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE ++** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. ++** ++** See http://www.trolltech.com/pricing.html or email sales@trolltech.com for ++** information about Qt Commercial License Agreements. ++** See http://www.trolltech.com/qpl/ for QPL licensing information. ++** See http://www.trolltech.com/gpl/ for GPL licensing information. ++** ++** Contact info@trolltech.com if any conditions of this licensing are ++** not clear to you. ++** ++**********************************************************************/ ++ ++#ifndef QT_NO_IM ++#include "qximinputcontext.h" ++#include "qximinputcontextplugin.h" ++#include ++#include ++ ++ ++QXIMInputContextPlugin::QXIMInputContextPlugin() ++{ ++} ++ ++QXIMInputContextPlugin::~QXIMInputContextPlugin() ++{ ++} ++ ++QStringList QXIMInputContextPlugin::keys() const ++{ ++ return QStringList( "xim" ); ++} ++ ++QInputContext *QXIMInputContextPlugin::create( const QString & ) ++{ ++ return new QXIMInputContext; ++} ++ ++QStringList QXIMInputContextPlugin::languages( const QString & ) ++{ ++ return QStringList( "" ); ++} ++ ++QString QXIMInputContextPlugin::displayName( const QString & ) ++{ ++ return tr( "XIM" ); ++} ++ ++QString QXIMInputContextPlugin::description( const QString & ) ++{ ++ return tr( "XIM input method" ); ++} ++ ++ ++Q_EXPORT_PLUGIN( QXIMInputContextPlugin ) ++ ++#endif +--- plugins/src/inputmethods/xim/qximinputcontextplugin.h ++++ plugins/src/inputmethods/xim/qximinputcontextplugin.h +@@ -0,0 +1,63 @@ ++/**************************************************************************** ++** $Id$ ++** ++** Definition of QXIMInputContextPlugin class ++** ++** Copyright (C) 2004 immodule for Qt Project. All rights reserved. ++** ++** This file is written to contribute to Trolltech AS under their own ++** licence. You may use this file under your Qt license. Following ++** description is copied from their original file headers. Contact ++** immodule-qt@freedesktop.org if any conditions of this licensing are ++** not clear to you. ++** ++** ++** This file is part of the input method module of the Qt GUI Toolkit. ++** ++** This file may be distributed under the terms of the Q Public License ++** as defined by Trolltech AS of Norway and appearing in the file ++** LICENSE.QPL included in the packaging of this file. ++** ++** This file may be distributed and/or modified under the terms of the ++** GNU General Public License version 2 as published by the Free Software ++** Foundation and appearing in the file LICENSE.GPL included in the ++** packaging of this file. ++** ++** Licensees holding valid Qt Enterprise Edition or Qt Professional Edition ++** licenses may use this file in accordance with the Qt Commercial License ++** Agreement provided with the Software. ++** ++** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE ++** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. ++** ++** See http://www.trolltech.com/pricing.html or email sales@trolltech.com for ++** information about Qt Commercial License Agreements. ++** See http://www.trolltech.com/qpl/ for QPL licensing information. ++** See http://www.trolltech.com/gpl/ for GPL licensing information. ++** ++** Contact info@trolltech.com if any conditions of this licensing are ++** not clear to you. ++** ++**********************************************************************/ ++ ++#ifndef QT_NO_IM ++#include "qximinputcontext.h" ++#include ++#include ++ ++ ++class QXIMInputContextPlugin : public QInputContextPlugin ++{ ++ Q_OBJECT ++public: ++ QXIMInputContextPlugin(); ++ ~QXIMInputContextPlugin(); ++ ++ QStringList keys() const; ++ QInputContext *create( const QString &key ); ++ QStringList languages( const QString &key ); ++ QString displayName( const QString &key ); ++ QString description( const QString &key ); ++}; ++ ++#endif +--- plugins/src/inputmethods/xim/qximinputcontext_x11.cpp ++++ plugins/src/inputmethods/xim/qximinputcontext_x11.cpp +@@ -0,0 +1,930 @@ ++/**************************************************************************** ++** $Id: qximinputcontext_x11.cpp,v 1.10 2004/06/22 06:47:27 daisuke Exp $ ++** ++** Implementation of QXIMInputContext class ++** ++** Copyright (C) 2000-2003 Trolltech AS. All rights reserved. ++** ++** This file is part of the input method module of the Qt GUI Toolkit. ++** ++** This file may be distributed under the terms of the Q Public License ++** as defined by Trolltech AS of Norway and appearing in the file ++** LICENSE.QPL included in the packaging of this file. ++** ++** This file may be distributed and/or modified under the terms of the ++** GNU General Public License version 2 as published by the Free Software ++** Foundation and appearing in the file LICENSE.GPL included in the ++** packaging of this file. ++** ++** Licensees holding valid Qt Enterprise Edition or Qt Professional Edition ++** licenses for Unix/X11 may use this file in accordance with the Qt Commercial ++** License Agreement provided with the Software. ++** ++** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE ++** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. ++** ++** See http://www.trolltech.com/pricing.html or email sales@trolltech.com for ++** information about Qt Commercial License Agreements. ++** See http://www.trolltech.com/qpl/ for QPL licensing information. ++** See http://www.trolltech.com/gpl/ for GPL licensing information. ++** ++** Contact info@trolltech.com if any conditions of this licensing are ++** not clear to you. ++** ++**********************************************************************/ ++ ++ ++#include "qximinputcontext.h" ++ ++const int XKeyPress = KeyPress; ++const int XKeyRelease = KeyRelease; ++#undef KeyPress ++#undef KeyRelease ++ ++#if !defined(QT_NO_IM) ++ ++#include "qplatformdefs.h" ++ ++#include "qapplication.h" ++#include "qwidget.h" ++#include "qstring.h" ++#include "qptrlist.h" ++#include "qintdict.h" ++#include "qtextcodec.h" ++ ++#include ++#include ++ ++#if !defined(QT_NO_XIM) ++ ++#define XK_MISCELLANY ++#define XK_LATIN1 ++#include ++ ++// #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 *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; ++ 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 contexts( *ximContextList ); ++ QPtrList::Iterator it = contexts.begin(); ++ while( it != contexts.end() ) { ++ (*it)->close( errMsg ); ++ ++it; ++ } ++ // ximContextList will be deleted in ~QXIMInputContext ++ } ++#endif // QT_NO_XIM ++} ++ ++ ++bool QXIMInputContext::x11FilterEvent( QWidget *keywidget, XEvent *event ) ++{ ++#ifndef QT_NO_XIM ++ int xkey_keycode = event->xkey.keycode; ++ if ( XFilterEvent( event, keywidget->topLevelWidget()->winId() ) ) { ++ qt_ximComposingKeycode = xkey_keycode; // ### not documented in xlib ++ ++ // Cancel of the composition is realizable even if ++ // follwing codes don't exist ++#if 0 ++ if ( event->type != XKeyPress || ! (qt_xim_style & XIMPreeditCallbacks) ) ++ return TRUE; ++ ++ /* ++ * The Solaris htt input method will transform a ClientMessage ++ * event into a filtered KeyPress event, in which case our ++ * keywidget is still zero. ++ */ ++ QETWidget *widget = (QETWidget*)QWidget::find( (WId)event->xany.window ); ++ if ( ! keywidget ) { ++ keywidget = (QETWidget*)QWidget::keyboardGrabber(); ++ if ( keywidget ) { ++ grabbed = TRUE; ++ } else { ++ if ( focus_widget ) ++ keywidget = (QETWidget*)focus_widget; ++ if ( !keywidget ) { ++ if ( qApp->inPopupMode() ) // no focus widget, see if we have a popup ++ keywidget = (QETWidget*) qApp->activePopupWidget(); ++ else if ( widget ) ++ keywidget = (QETWidget*)widget->topLevelWidget(); ++ } ++ } ++ } ++ ++ /* ++ if the composition string has been emptied, we need to send ++ an IMEnd event. however, we have no way to tell if the user ++ has cancelled input, or if the user has accepted the ++ composition. ++ ++ so, we have to look for the next keypress and see if it is ++ the 'commit' key press (keycode == 0). if it is, we deliver ++ an IMEnd event with the final text, otherwise we deliver an ++ IMEnd with empty text (meaning the user has cancelled the ++ input). ++ */ ++ if ( composing && focusWidget && qt_compose_emptied ) { ++ XEvent event2; ++ bool found = FALSE; ++ if ( XCheckTypedEvent( QPaintDevice::x11AppDisplay(), ++ XKeyPress, &event2 ) ) { ++ if ( event2.xkey.keycode == 0 ) { ++ // found a key event with the 'commit' string ++ found = TRUE; ++ XPutBackEvent( QPaintDevice::x11AppDisplay(), &event2 ); ++ } ++ } ++ ++ if ( !found ) { ++ // no key event, so the user must have cancelled the composition ++ QIMEvent endevent( QEvent::IMEnd, QString::null, -1 ); ++ QApplication::sendEvent( focusWidget, &endevent ); ++ ++ focusWidget = 0; ++ } ++ ++ qt_compose_emptied = FALSE; ++ } ++#endif ++ return TRUE; ++ } else if ( focusWidget() ) { ++ if ( event->type == XKeyPress && event->xkey.keycode == 0 ) { ++ // input method has sent us a commit string ++ QCString data(513); ++ KeySym sym; // unused ++ Status status; // unused ++ QString inputText; ++ int count = lookupString( &(event->xkey), data, &sym, &status ); ++ if ( count > 0 ) ++ inputText = qt_input_mapper->toUnicode( data, count ); ++ ++ if ( ! ( qt_xim_style & XIMPreeditCallbacks ) || ! isComposing() ) { ++ // there is no composing state ++ sendIMEvent( QEvent::IMStart ); ++ } ++ ++ sendIMEvent( QEvent::IMEnd, inputText ); ++ resetClientState(); ++ ++ return TRUE; ++ } ++ } ++#endif // !QT_NO_XIM ++ ++ return FALSE; ++} ++ ++ ++void QXIMInputContext::sendIMEvent( QEvent::Type type, const QString &text, ++ int cursorPosition, int selLength ) ++{ ++ QInputContext::sendIMEvent( type, text, cursorPosition, selLength ); ++ if ( type == QEvent::IMCompose ) ++ composingText = text; ++} ++ ++ ++void QXIMInputContext::reset() ++{ ++#if !defined(QT_NO_XIM) ++ if ( focusWidget() && isComposing() && ! composingText.isNull() ) { ++#ifdef QT_XIM_DEBUG ++ qDebug("QXIMInputContext::reset: composing - sending IMEnd (empty) to %p", ++ focusWidget() ); ++#endif // QT_XIM_DEBUG ++ ++ QInputContext::reset(); ++ resetClientState(); ++ ++ char *mb = XmbResetIC((XIC) ic); ++ if (mb) ++ XFree(mb); ++ } ++#endif // !QT_NO_XIM ++} ++ ++ ++void QXIMInputContext::resetClientState() ++{ ++#if !defined(QT_NO_XIM) ++ composingText = QString::null; ++ if ( selectedChars.size() < 128 ) ++ selectedChars.resize( 128 ); ++ selectedChars.fill( 0 ); ++#endif // !QT_NO_XIM ++} ++ ++ ++void QXIMInputContext::close( const QString &errMsg ) ++{ ++ qDebug( errMsg ); ++ emit deletionRequested(); ++} ++ ++ ++bool QXIMInputContext::hasFocus() const ++{ ++ return ( focusWidget() != 0 ); ++} ++ ++ ++void QXIMInputContext::setMicroFocus(int x, int y, int, int h, QFont *f) ++{ ++ QWidget *widget = focusWidget(); ++ if ( qt_xim && widget ) { ++ QPoint p( x, y ); ++ QPoint p2 = widget->mapTo( widget->topLevelWidget(), QPoint( 0, 0 ) ); ++ p = widget->topLevelWidget()->mapFromGlobal( p ); ++ setXFontSet( f ? *f : widget->font() ); ++ setComposePosition(p.x(), p.y() + h); ++ setComposeArea(p2.x(), p2.y(), widget->width(), widget->height()); ++ } ++ ++} ++ ++void QXIMInputContext::mouseHandler( int , QEvent::Type type, ++ Qt::ButtonState button, ++ Qt::ButtonState) ++{ ++ if ( type == QEvent::MouseButtonPress || ++ type == QEvent::MouseButtonDblClick ) { ++ // Don't reset Japanese input context here. Japanese input ++ // context sometimes contains a whole paragraph and has ++ // minutes of lifetime different to ephemeral one in other ++ // languages. The input context should be survived until ++ // focused again. ++ if ( ! isPreeditPreservationEnabled() ) ++ reset(); ++ } ++} ++ ++void QXIMInputContext::setComposePosition(int x, int y) ++{ ++#if !defined(QT_NO_XIM) ++ if (qt_xim && ic) { ++ XPoint point; ++ point.x = x; ++ point.y = y; ++ ++ XVaNestedList preedit_attr = ++ XVaCreateNestedList(0, ++ XNSpotLocation, &point, ++ ++ (char *) 0); ++ XSetICValues((XIC) ic, XNPreeditAttributes, preedit_attr, (char *) 0); ++ XFree(preedit_attr); ++ } ++#endif // !QT_NO_XIM ++} ++ ++ ++void QXIMInputContext::setComposeArea(int x, int y, int w, int h) ++{ ++#if !defined(QT_NO_XIM) ++ if (qt_xim && ic) { ++ XRectangle rect; ++ rect.x = x; ++ rect.y = y; ++ rect.width = w; ++ rect.height = h; ++ ++ XVaNestedList preedit_attr = XVaCreateNestedList(0, ++ XNArea, &rect, ++ ++ (char *) 0); ++ XSetICValues((XIC) ic, XNPreeditAttributes, preedit_attr, (char *) 0); ++ XFree(preedit_attr); ++ } ++#endif ++} ++ ++ ++void QXIMInputContext::setXFontSet(const QFont &f) ++{ ++#if !defined(QT_NO_XIM) ++ if (font == f) return; // nothing to do ++ font = f; ++ ++ XFontSet fs = getFontSet(font); ++ if (fontset == fs) return; // nothing to do ++ fontset = fs; ++ ++ XVaNestedList preedit_attr = XVaCreateNestedList(0, XNFontSet, fontset, (char *) 0); ++ XSetICValues((XIC) ic, XNPreeditAttributes, preedit_attr, (char *) 0); ++ XFree(preedit_attr); ++#else ++ Q_UNUSED( f ); ++#endif ++} ++ ++ ++int QXIMInputContext::lookupString(XKeyEvent *event, QCString &chars, ++ KeySym *key, Status *status) const ++{ ++ int count = 0; ++ ++#if !defined(QT_NO_XIM) ++ if (qt_xim && ic) { ++ count = XmbLookupString((XIC) ic, event, chars.data(), ++ chars.size(), key, status); ++ ++ if ((*status) == XBufferOverflow ) { ++ chars.resize(count + 1); ++ count = XmbLookupString((XIC) ic, event, chars.data(), ++ chars.size(), key, status); ++ } ++ } ++ ++#endif // QT_NO_XIM ++ ++ return count; ++} ++ ++void QXIMInputContext::setFocus() ++{ ++#if !defined(QT_NO_XIM) ++ if ( qt_xim && ic ) ++ XSetICFocus((XIC) ic); ++#endif // !QT_NO_XIM ++} ++ ++void QXIMInputContext::unsetFocus() ++{ ++#if !defined(QT_NO_XIM) ++ if (qt_xim && ic) ++ XUnsetICFocus((XIC) ic); ++#endif // !QT_NO_XIM ++ ++ // Don't reset Japanese input context here. Japanese input context ++ // sometimes contains a whole paragraph and has minutes of ++ // lifetime different to ephemeral one in other languages. The ++ // input context should be survived until focused again. ++ if ( ! isPreeditPreservationEnabled() ) ++ reset(); ++} ++ ++ ++bool QXIMInputContext::isPreeditRelocationEnabled() ++{ ++ return ( language() == "ja" ); ++} ++ ++ ++bool QXIMInputContext::isPreeditPreservationEnabled() ++{ ++ return ( language() == "ja" ); ++} ++ ++ ++QString QXIMInputContext::identifierName() ++{ ++ // the name should be "xim" rather than "XIM" to be consistent ++ // with corresponding immodule of GTK+ ++ return "xim"; ++} ++ ++ ++QString QXIMInputContext::language() ++{ ++#if !defined(QT_NO_XIM) ++ if ( qt_xim ) { ++ QString locale( XLocaleOfIM( qt_xim ) ); ++ ++ if ( locale.startsWith( "zh" ) ) { ++ // Chinese language should be formed as "zh_CN", "zh_TW", "zh_HK" ++ _language = locale.left( 5 ); ++ } else { ++ // other languages should be two-letter ISO 639 language code ++ _language = locale.left( 2 ); ++ } ++ } ++#endif ++ return _language; ++} ++ ++#endif //QT_NO_IM +--- plugins/src/inputmethods/xim/xim.pro ++++ plugins/src/inputmethods/xim/xim.pro +@@ -0,0 +1,14 @@ ++TEMPLATE = lib ++TARGET = qxim ++DESTDIR = ../../../inputmethods ++ ++INCLUDEPATH += . ++CONFIG += qt warn_on debug plugin ++target.path += $$plugins.path/inputmethods ++INSTALLS += target ++ ++# Input ++HEADERS += qximinputcontext.h \ ++ qximinputcontextplugin.h ++SOURCES += qximinputcontext_x11.cpp \ ++ qximinputcontextplugin.cpp +--- plugins/src/src.pro ++++ plugins/src/src.pro +@@ -1,10 +1,10 @@ + TEMPLATE = subdirs + + shared { +- SUBDIRS *= accessible codecs imageformats sqldrivers styles ++ SUBDIRS *= accessible codecs imageformats inputmethods sqldrivers styles + embedded:SUBDIRS *= gfxdrivers + } + dll { +- SUBDIRS *= accessible codecs imageformats sqldrivers styles ++ SUBDIRS *= accessible codecs imageformats inputmethods sqldrivers styles + embedded:SUBDIRS *= gfxdrivers + } +--- README.immodule ++++ README.immodule +@@ -0,0 +1,107 @@ ++immodule for Qt ++ ++ ++* What is this? ++ ++ immodule for Qt is a modular, extensible input method subsystem for ++ Qt. ++ ++ This project brings functionality similar to the immodule for GTK+ ++ to the Qt library. The main goal of the project is to extend and ++ enhance the input method support in the Qt library, in order to ++ provide a modern and powerful multi-language input system. Our short ++ term goal is to make Qt (especially Qt/X11) "up-to-date" with other ++ X11-based toolkits such as GTK+. We are also focusing on what the ++ input method API should be for future Qt versions. ++ ++ See our webpage for further information. ++ ++ http://immodule-qt.freedesktop.org/ ++ ++ ++* About this release ++ ++ qt-x11-immodule-unified-qt3.3.3-20040910 is a stable release. Since ++ it breaks backward compatibility (source and binary) about immodule ++ with our previous releases qt-x11-immodule-unified-qt3.3.3-20040819 ++ and qt-x11-immodule-bc-qt3.3.2-20040623, optional immodule plugins ++ must be updated to proper version. See 'Optional immodule plugins' ++ section of our download page. ++ ++ http://immodule-qt.freedesktop.org/Software/ImmoduleQtDownload ++ ++ However, backward compatibility (source and binary) with normal Qt ++ 3.3.3 is kept in 'Binary Compatible' mode. ++ ++ ++* How to install ++ ++ After extract the Qt archive, perform following instructions ++ ++ cd qt-x11-free-3.3.3 ++ patch -p0 < qt-x11-immodule-unified-qt3.3.3-20040910.diff ++ ./make-symlinks.sh ++ ./configure ++ ++ Our patch provides following two configure options. Choose 'Binary ++ Compatible' for normal use. ++ ++ Build Qt with 'Binary Compatible' immodule support (default) ++ ++ configure -inputmethod ++ ++ Build Qt without binary compatibility, but supports more advanced ++ immodule extensions. It cannot be used with ordinary application ++ binaries (i.e. the option is for developers) ++ ++ configure -inputmethod -inputmethod-ext ++ ++ ++* How to use ++ ++ - See users manual of each input method plugins ++ ++ - Run qtconfig to choose your favorite XIM input style ++ ++ ++* Environment variables ++ ++ Some environment variables are available for expert users and system ++ integrators. The specification is preliminary and may be changed ++ without notification. Be careful. ++ ++ See following examples to use the variables. ++ ++ ++ - set "xim" input method as default ++ ++ export QT_IM_MODULE=xim ++ ++ ++ - set "simple" composing input method as default ++ ++ export QT_IM_MODULE=simple ++ ++ ++ - set "xim" input method as default, and disable input method ++ selection menu in the context menu ++ ++ export QT_IM_SWITCHER=imsw-none ++ export QT_IM_MODULE=xim ++ ++ ++ - set "xim" input method as default, and enable input method ++ selection menu in the context menu (default configuration) ++ ++ export QT_IM_SWITCHER=imsw-multi ++ export QT_IM_MODULE=xim ++ ++ ++ - set "iiimqcf" that has its own input method switching framework as ++ default, and disable input method selection menu in the context ++ menu. Such configuration is required by some system integrators to ++ provide unified user interface for global input method switching ++ over the desktop ++ ++ export QT_IM_SWITCHER=imsw-none ++ export QT_IM_MODULE=iiimqcf +--- src/inputmethod/qinputcontextfactory.cpp ++++ src/inputmethod/qinputcontextfactory.cpp +@@ -0,0 +1,186 @@ ++/**************************************************************************** ++** $Id: qinputcontextfactory.cpp,v 1.2 2004/06/20 18:43:11 daisuke Exp $ ++** ++** Implementation of QInputContextFactory class ++** ++** Created : 001103 ++** ++** Copyright (C) 1992-2002 Trolltech AS. All rights reserved. ++** ++** This file is part of the widgets module of the Qt GUI Toolkit. ++** ++** This file may be distributed under the terms of the Q Public License ++** as defined by Trolltech AS of Norway and appearing in the file ++** LICENSE.QPL included in the packaging of this file. ++** ++** This file may be distributed and/or modified under the terms of the ++** GNU General Public License version 2 as published by the Free Software ++** Foundation and appearing in the file LICENSE.GPL included in the ++** packaging of this file. ++** ++** Licensees holding valid Qt Enterprise Edition licenses may use this ++** file in accordance with the Qt Commercial License Agreement provided ++** with the Software. ++** ++** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE ++** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. ++** ++** See http://www.trolltech.com/pricing.html or email sales@trolltech.com for ++** information about Qt Commercial License Agreements. ++** See http://www.trolltech.com/qpl/ for QPL licensing information. ++** See http://www.trolltech.com/gpl/ for GPL licensing information. ++** ++** Contact info@trolltech.com if any conditions of this licensing are ++** not clear to you. ++** ++**********************************************************************/ ++ ++#include "qinputcontextinterface_p.h" // up here for GCC 2.7.* compatibility ++#include "qinputcontextfactory.h" ++#include "qinputcontext.h" ++ ++#ifndef QT_NO_IM ++ ++#include "qapplication.h" ++ ++#ifdef QT_THREAD_SUPPORT ++#include ++#endif // QT_THREAD_SUPPORT ++ ++#include ++ ++#include "qcleanuphandler.h" ++#include ++#ifndef QT_NO_COMPONENT ++ ++ ++static QPluginManager *manager = 0; ++static QSingleCleanupHandler< QPluginManager > 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( 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 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 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 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 iface; ++ manager->queryInterface( key, &iface ); ++ ++ if ( iface ) ++ result = iface->description( key ); ++#endif //QT_NO_COMPONENT ++ ++ return result; ++} ++ ++#endif // QT_NO_IM +--- src/inputmethod/qinputcontextfactory.h ++++ src/inputmethod/qinputcontextfactory.h +@@ -0,0 +1,59 @@ ++/**************************************************************************** ++** $Id: qinputcontextfactory.h,v 1.1.1.1 2004/05/11 11:16:49 daisuke Exp $ ++** ++** Definition of QInputContextFactory class ++** ++** Copyright (C) 2000-2002 Trolltech AS. All rights reserved. ++** ++** This file is part of the widgets module of the Qt GUI Toolkit. ++** ++** This file may be distributed under the terms of the Q Public License ++** as defined by Trolltech AS of Norway and appearing in the file ++** LICENSE.QPL included in the packaging of this file. ++** ++** This file may be distributed and/or modified under the terms of the ++** GNU General Public License version 2 as published by the Free Software ++** Foundation and appearing in the file LICENSE.GPL included in the ++** packaging of this file. ++** ++** Licensees holding valid Qt Enterprise Edition or Qt Professional Edition ++** licenses may use this file in accordance with the Qt Commercial License ++** Agreement provided with the Software. ++** ++** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE ++** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. ++** ++** See http://www.trolltech.com/pricing.html or email sales@trolltech.com for ++** information about Qt Commercial License Agreements. ++** See http://www.trolltech.com/qpl/ for QPL licensing information. ++** See http://www.trolltech.com/gpl/ for GPL licensing information. ++** ++** Contact info@trolltech.com if any conditions of this licensing are ++** not clear to you. ++** ++**********************************************************************/ ++ ++#ifndef QINPUTCONTEXTFACTORY_H ++#define QINPUTCONTEXTFACTORY_H ++ ++#ifndef QT_H ++#include "qstringlist.h" ++#endif // QT_H ++ ++#ifndef QT_NO_IM ++ ++class QInputContext; ++class QWidget; ++ ++class Q_EXPORT QInputContextFactory ++{ ++public: ++ static QStringList keys(); ++ static QInputContext *create( const QString &key, QWidget *widget ); // should be a toplevel widget ++ static QStringList languages( const QString &key ); ++ static QString displayName( const QString &key ); ++ static QString description( const QString &key ); ++}; ++#endif //QT_NO_IM ++ ++#endif //QINPUTCONTEXTFACTORY_H +--- src/inputmethod/qinputcontextinterface_p.h ++++ src/inputmethod/qinputcontextinterface_p.h +@@ -0,0 +1,87 @@ ++/**************************************************************************** ++** $Id: qinputcontextinterface_p.h,v 1.2 2004/06/20 18:43:11 daisuke Exp $ ++** ++** ... ++** ++** Copyright (C) 2000-2002 Trolltech AS. All rights reserved. ++** ++** This file is part of the widgets module of the Qt GUI Toolkit. ++** ++** This file may be distributed under the terms of the Q Public License ++** as defined by Trolltech AS of Norway and appearing in the file ++** LICENSE.QPL included in the packaging of this file. ++** ++** This file may be distributed and/or modified under the terms of the ++** GNU General Public License version 2 as published by the Free Software ++** Foundation and appearing in the file LICENSE.GPL included in the ++** packaging of this file. ++** ++** Licensees holding valid Qt Enterprise Edition or Qt Professional Edition ++** licenses may use this file in accordance with the Qt Commercial License ++** Agreement provided with the Software. ++** ++** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE ++** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. ++** ++** See http://www.trolltech.com/pricing.html or email sales@trolltech.com for ++** information about Qt Commercial License Agreements. ++** See http://www.trolltech.com/qpl/ for QPL licensing information. ++** See http://www.trolltech.com/gpl/ for GPL licensing information. ++** ++** Contact info@trolltech.com if any conditions of this licensing are ++** not clear to you. ++** ++**********************************************************************/ ++ ++#ifndef QINPUTCONTEXTINTERFACE_P_H ++#define QINPUTCONTEXTINTERFACE_P_H ++ ++// ++// W A R N I N G ++// ------------- ++// ++// This file is not part of the Qt API. This header file may ++// change from version to version without notice, or even be ++// removed. ++// ++// We mean it. ++// ++// ++ ++#ifndef QT_H ++#include ++#endif // QT_H ++ ++#ifndef QT_NO_IM ++#ifndef QT_NO_COMPONENT ++ ++class QWidget; ++class QInputContext; ++ ++// old version interface in qt-x11-immodule-bc-qt3.3.2-20040623.diff: ++// {6C2B9EDE-B63C-14c9-A729-3C7643739C4C} ++// ++// new version interface: ++// {a5f5c63d-e044-11d8-9718-000d6077a78d} ++// {b0bf3e59-e526-11d8-80da-000d6077a78d} ++// {9ef05c7f-0272-11d9-846c-000d6077a78d} ++ ++#ifndef IID_QInputContextFactory ++//#define IID_QInputContextFactory QUuid(0x6c2b9ede, 0xb63c, 0x14c9, 0xa7, 0x29, 0x3c, 0x76, 0x43, 0x73, 0x9c, 0x4c) ++//#define IID_QInputContextFactory QUuid(0xa5f5c63d, 0xe044, 0x11d8, 0x97, 0x18, 0x00, 0x0d, 0x60, 0x77, 0xa7, 0x8d) ++//#define IID_QInputContextFactory QUuid(0xb0bf3e59, 0xe526, 0x11d8, 0x80, 0xda, 0x00, 0x0d, 0x60, 0x77, 0xa7, 0x8d) ++#define IID_QInputContextFactory QUuid(0x9ef05c7f, 0x0272, 0x11d9, 0x84, 0x6c, 0x00, 0x0d, 0x60, 0x77, 0xa7, 0x8d) ++#endif ++ ++struct Q_EXPORT QInputContextFactoryInterface : public QFeatureListInterface ++{ ++ virtual QInputContext *create( const QString &key ) = 0; ++ virtual QStringList languages( const QString &key ) = 0; ++ virtual QString displayName( const QString &key ) = 0; ++ virtual QString description( const QString &key ) = 0; ++}; ++ ++#endif //QT_NO_COMPONENT ++#endif //QT_NO_IM ++ ++#endif //QINPUTCONTEXTINTERFACE_P_H +--- src/inputmethod/qinputcontextplugin.cpp ++++ src/inputmethod/qinputcontextplugin.cpp +@@ -0,0 +1,231 @@ ++/**************************************************************************** ++** $Id: qinputcontextplugin.cpp,v 1.2 2004/06/20 18:43:11 daisuke Exp $ ++** ++** Implementation of QInputContextPlugin class ++** ++** Created : 010920 ++** ++** Copyright (C) 2001 Trolltech AS. All rights reserved. ++** ++** This file is part of the widgets module of the Qt GUI Toolkit. ++** ++** This file may be distributed under the terms of the Q Public License ++** as defined by Trolltech AS of Norway and appearing in the file ++** LICENSE.QPL included in the packaging of this file. ++** ++** This file may be distributed and/or modified under the terms of the ++** GNU General Public License version 2 as published by the Free Software ++** Foundation and appearing in the file LICENSE.GPL included in the ++** packaging of this file. ++** ++** Licensees holding valid Qt Enterprise Edition or Qt Professional Edition ++** licenses may use this file in accordance with the Qt Commercial License ++** Agreement provided with the Software. ++** ++** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE ++** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. ++** ++** See http://www.trolltech.com/pricing.html or email sales@trolltech.com for ++** information about Qt Commercial License Agreements. ++** See http://www.trolltech.com/qpl/ for QPL licensing information. ++** See http://www.trolltech.com/gpl/ for GPL licensing information. ++** ++** Contact info@trolltech.com if any conditions of this licensing are ++** not clear to you. ++** ++**********************************************************************/ ++ ++#include "qinputcontextplugin.h" ++ ++#ifndef QT_NO_IM ++#ifndef QT_NO_COMPONENT ++ ++#include "qinputcontextinterface_p.h" ++ ++/*! ++ \class QInputContextPlugin qinputcontextplugin.h ++ \brief The QInputContextPlugin class provides an abstract base for custom QInputContext plugins. ++ \reentrant ++ \ingroup plugins ++ ++ The input context plugin is a simple plugin interface that makes it ++ easy to create custom input contexts that can be loaded dynamically ++ into applications. ++ ++ Writing a input context plugin is achieved by subclassing this ++ base class, reimplementing the pure virtual functions keys(), ++ create(), languages(), displayName() description() and exporting ++ the class with the \c Q_EXPORT_PLUGIN macro. See the \link ++ plugins-howto.html Qt Plugins documentation \endlink for details. ++ ++ \sa QInputContext ++*/ ++ ++/*! ++ \fn QStringList QInputContextPlugin::keys() const ++ ++ Returns the list of QInputContext keys this plugin provides. ++ ++ These keys are usually the class names of the custom input context ++ that are implemented in the plugin. ++ ++ Return value is the names to identify and specify input methods ++ for the input method switching mechanism and so on. The names have ++ to be consistent with QInputContext::identifierName(). The names ++ have to consist of ASCII characters only. See also ++ QInputContext::identifierName() for further information. ++ ++ \sa create(), displayName(), QInputContext::identifierName() ++*/ ++ ++/*! ++ \fn QInputContext* QInputContextPlugin::create( const QString& key ) ++ ++ Creates and returns a QInputContext instance for the input context key \a key. ++ The input context key is usually the class name of the required input method. ++ ++ \sa keys() ++*/ ++ ++/*! ++ \fn QStringList languages( const QString &key ) ++ ++ Returns what languages are supported by the QInputContext instance ++ specified by \a key. ++ ++ The languages are expressed as language code (e.g. "zh_CN", ++ "zh_TW", "zh_HK", "ja", "ko", ...). An input context that suports ++ multiple languages can return all supported languages as ++ QStringList. The name has to be consistent with ++ QInputContextPlugin::language(). ++ ++ This information may be used to optimize user interface. ++ ++ \sa QInputContext::language() ++*/ ++ ++/*! ++ \fn QString displayName( const QString &key ) ++ ++ Returns a user friendly i18n-ized name of the QInputContext ++ instance specified by \a key. This string may be appeared in a ++ menu and so on for users. ++ ++ There are two different names with different responsibility in the ++ input method domain. This function returns one of them. Another ++ name is called 'identifier name' to identify and specify input ++ methods for the input method switching mechanism and so on. ++ ++ Although tr( identifierName ) can provide user friendly i18n-ized ++ name without this function, the message catalog have to be managed ++ by Qt in the case. However, some sophisticated input method ++ framework manages their own message catalogs to provide this ++ i18n-ized name string. So we need this function rather than just ++ call tr() for identifier name. ++ ++ \sa keys(), QInputContext::identifierName() ++*/ ++ ++/*! ++ \fn QString description( const QString &key ) ++ ++ Returns a i18n-ized brief description of the QInputContext ++ instance specified by \a key. This string may be appeared in some ++ user interfaces. ++*/ ++ ++ ++ ++class QInputContextPluginPrivate : public QInputContextFactoryInterface ++{ ++public: ++ QInputContextPluginPrivate( QInputContextPlugin *p ) ++ : plugin( p ) ++ { ++ } ++ ++ virtual ~QInputContextPluginPrivate(); ++ ++ QRESULT queryInterface( const QUuid &iid, QUnknownInterface **iface ); ++ Q_REFCOUNT; ++ ++ QStringList featureList() const; ++ QInputContext *create( const QString &key ); ++ QStringList languages( const QString &key ); ++ QString displayName( const QString &key ); ++ QString description( const QString &key ); ++ ++private: ++ QInputContextPlugin *plugin; ++}; ++ ++QRESULT QInputContextPluginPrivate::queryInterface( const QUuid &iid, QUnknownInterface **iface ) ++{ ++ *iface = 0; ++ ++ if ( iid == IID_QUnknown ) ++ *iface = this; ++ else if ( iid == IID_QFeatureList ) ++ *iface = this; ++ else if ( iid == IID_QInputContextFactory ) ++ *iface = this; ++ else ++ return QE_NOINTERFACE; ++ ++ (*iface)->addRef(); ++ return QS_OK; ++} ++ ++QInputContextPluginPrivate::~QInputContextPluginPrivate() ++{ ++ delete plugin; ++} ++ ++QStringList QInputContextPluginPrivate::featureList() const ++{ ++ return plugin->keys(); ++} ++ ++QInputContext *QInputContextPluginPrivate::create( const QString &key ) ++{ ++ return plugin->create( key ); ++} ++ ++QStringList QInputContextPluginPrivate::languages( const QString &key ) ++{ ++ return plugin->languages( key ); ++} ++ ++QString QInputContextPluginPrivate::displayName( const QString &key ) ++{ ++ return plugin->displayName( key ); ++} ++ ++QString QInputContextPluginPrivate::description( const QString &key ) ++{ ++ return plugin->description( key ); ++} ++ ++ ++/*! ++ Constructs a input context plugin. This is invoked automatically by the ++ \c Q_EXPORT_PLUGIN macro. ++*/ ++QInputContextPlugin::QInputContextPlugin() ++ : QGPlugin( d = new QInputContextPluginPrivate( this ) ) ++{ ++} ++ ++/*! ++ Destroys the input context plugin. ++ ++ You never have to call this explicitly. Qt destroys a plugin ++ automatically when it is no longer used. ++*/ ++QInputContextPlugin::~QInputContextPlugin() ++{ ++ // don't delete d, as this is deleted by d ++} ++ ++#endif // QT_NO_COMPONENT ++#endif // QT_NO_IM +--- src/inputmethod/qinputcontextplugin.h ++++ src/inputmethod/qinputcontextplugin.h +@@ -0,0 +1,67 @@ ++/**************************************************************************** ++** $Id: qinputcontextplugin.h,v 1.2 2004/06/20 18:43:11 daisuke Exp $ ++** ++** Definition of QInputContextPlugin class ++** ++** Created : 010920 ++** ++** Copyright (C) 2001 Trolltech AS. All rights reserved. ++** ++** This file is part of the tools module of the Qt GUI Toolkit. ++** ++** This file may be distributed under the terms of the Q Public License ++** as defined by Trolltech AS of Norway and appearing in the file ++** LICENSE.QPL included in the packaging of this file. ++** ++** This file may be distributed and/or modified under the terms of the ++** GNU General Public License version 2 as published by the Free Software ++** Foundation and appearing in the file LICENSE.GPL included in the ++** packaging of this file. ++** ++** Licensees holding valid Qt Enterprise Edition or Qt Professional Edition ++** licenses may use this file in accordance with the Qt Commercial License ++** Agreement provided with the Software. ++** ++** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE ++** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. ++** ++** See http://www.trolltech.com/pricing.html or email sales@trolltech.com for ++** information about Qt Commercial License Agreements. ++** See http://www.trolltech.com/qpl/ for QPL licensing information. ++** See http://www.trolltech.com/gpl/ for GPL licensing information. ++** ++** Contact info@trolltech.com if any conditions of this licensing are ++** not clear to you. ++** ++**********************************************************************/ ++ ++#ifndef QINPUTCONTEXTPLUGIN_H ++#define QINPUTCONTEXTPLUGIN_H ++ ++#ifndef QT_H ++#include "qgplugin.h" ++#include "qstringlist.h" ++#endif // QT_H ++ ++#ifndef QT_NO_IM ++class QInputContext; ++class QInputContextPluginPrivate; ++ ++class Q_EXPORT QInputContextPlugin : public QGPlugin ++{ ++ Q_OBJECT ++public: ++ QInputContextPlugin(); ++ ~QInputContextPlugin(); ++ ++ virtual QStringList keys() const = 0; ++ virtual QInputContext *create( const QString &key ) = 0; ++ virtual QStringList languages( const QString &key ) = 0; ++ virtual QString displayName( const QString &key ) = 0; ++ virtual QString description( const QString &key ) = 0; ++ ++private: ++ QInputContextPluginPrivate *d; ++}; ++#endif // QT_NO_IM ++#endif // QINPUTCONTEXTPLUGIN_H +--- src/inputmethod/qt_inputmethod.pri ++++ src/inputmethod/qt_inputmethod.pri +@@ -0,0 +1,10 @@ ++# Qt inputmetod module ++ ++inputmethod { ++ INPUTMETHOD_P = inputmethod ++ HEADERS +=$$INPUTMETHOD_H/qinputcontextfactory.h \ ++ $$INPUTMETHOD_P/qinputcontextinterface_p.h \ ++ $$INPUTMETHOD_H/qinputcontextplugin.h ++ SOURCES +=$$INPUTMETHOD_CPP/qinputcontextfactory.cpp \ ++ $$INPUTMETHOD_CPP/qinputcontextplugin.cpp ++} +--- src/kernel/qapplication.cpp ++++ src/kernel/qapplication.cpp +@@ -3161,6 +3161,35 @@ + }; + } + ++#if !defined(QT_NO_IM) ++ // if this is one of the compressible IM events, do compression ++ else if ( event->type() == QEvent::IMCompose ) { ++ l->last(); ++ QPostEvent * cur = 0; ++ for ( ;; ) { ++ while ( (cur=l->current()) != 0 && ++ ( cur->receiver != receiver || ++ cur->event == 0 || ++ cur->event->type() != event->type() || ++ cur->event->type() != QEvent::IMStart ) ) ++ l->prev(); ++ if ( l->current() != 0 ) { ++ // IMCompose must not be compressed with another one ++ // beyond its IMStart boundary ++ if ( cur->event->type() == QEvent::IMStart ) { ++ break; ++ } else if ( cur->event->type() == QEvent::IMCompose ) { ++ QIMComposeEvent * e = (QIMComposeEvent *)(cur->event); ++ *e = *(QIMComposeEvent *)event; ++ delete event; ++ return; ++ } ++ } ++ break; ++ }; ++ } ++#endif ++ + // if no compression could be done, just append something + event->posted = TRUE; + QPostEvent * pe = new QPostEvent( receiver, event ); +@@ -3307,6 +3336,23 @@ + + void QApplication::removePostedEvents( QObject *receiver ) + { ++ removePostedEvents( receiver, 0 ); ++} ++ ++/*! ++ Removes all events that have the event type \a event_type posted ++ using postEvent() for \a receiver. ++ ++ The events are \e not dispatched, instead they are removed from the ++ queue. ++ ++ If \a event_type is 0, all the events are removed from the queue. ++ ++ \threadsafe ++*/ ++ ++void QApplication::removePostedEvents( QObject *receiver, int event_type ) ++{ + if ( !receiver ) + return; + +@@ -3325,18 +3371,24 @@ + // leave the QPostEvent objects; they'll be deleted by + // sendPostedEvents(). + QPostEventList * l = receiver->postedEvents; +- receiver->postedEvents = 0; + l->first(); + QPostEvent * pe; + while( (pe=l->current()) != 0 ) { +- if ( pe->event ) { +- pe->event->posted = FALSE; +- delete pe->event; +- pe->event = 0; ++ if ( !event_type || pe->event->type() == event_type ) { ++ if ( pe->event ) { ++ pe->event->posted = FALSE; ++ delete pe->event; ++ pe->event = 0; ++ } ++ l->remove(); ++ } else { ++ l->next(); + } +- l->remove(); + } +- delete l; ++ if ( !event_type || !l->count() ) { ++ receiver->postedEvents = 0; ++ delete l; ++ } + } + + +@@ -3521,6 +3573,8 @@ + focus_widget = 0; + #ifdef Q_WS_WIN + QInputContext::accept( tmp ); ++#elif defined(Q_WS_X11) ++ tmp->unfocusInputContext(); + #endif + QApplication::sendSpontaneousEvent( tmp, &out ); + } else if ( active_window ) { +--- src/kernel/qapplication.h ++++ src/kernel/qapplication.h +@@ -51,6 +51,9 @@ + class QStyle; + class QTranslator; + class QEventLoop; ++#if defined(Q_WS_X11) ++class QIMEvent; ++#endif + #if defined(Q_WS_QWS) + class QWSDecoration; + #endif +@@ -272,8 +275,19 @@ + virtual void saveState( QSessionManager& sm ); + #endif + #if defined(Q_WS_X11) ++#if !defined(QT_NO_IM_EXTENSIONS) ++ virtual QWidget *locateICHolderWidget( QWidget *w ); ++ virtual QWidgetList *icHolderWidgets(); ++ static void create_im(); ++ static void close_im(); ++#else ++ QWidget *locateICHolderWidget( QWidget *w ); ++ QWidgetList *icHolderWidgets(); + static void create_xim(); + static void close_xim(); ++#endif ++ static QString defaultInputMethod(); ++ void changeAllInputContext( const QString & ); + static bool x11_apply_settings(); + #endif + void wakeUpGuiThread(); +@@ -328,6 +342,12 @@ + friend void qt_init(int *, char **, QApplication::Type); + #endif + ++#if defined(Q_WS_X11) ++private slots: ++ void postIMEvent( QObject *receiver, QIMEvent *event ); ++#endif ++ ++private: + #ifdef QT_THREAD_SUPPORT + static QMutex *qt_mutex; + #endif // QT_THREAD_SUPPORT +@@ -377,9 +397,12 @@ + static QString* session_key; + bool is_session_restored; + #endif +-#if defined(Q_WS_X11) && !defined (QT_NO_STYLE ) ++#if defined(Q_WS_X11) ++#if !defined (QT_NO_STYLE) + static void x11_initialize_style(); + #endif ++ static QString defaultIM; // default input method's name in this application. ++#endif + + static QSize app_strut; + #ifndef QT_NO_COMPONENT +@@ -396,6 +419,7 @@ + + static bool sendSpontaneousEvent( QObject *receiver, QEvent *event ); + static void removePostedEvent( QEvent * ); ++ static void removePostedEvents( QObject *receiver, int event_type ); + + friend class QWidget; + friend class QETWidget; +--- src/kernel/qapplication_x11.cpp ++++ src/kernel/qapplication_x11.cpp +@@ -89,7 +89,9 @@ + #include "qfileinfo.h" + + // Input method stuff - UNFINISHED +-#include "qinputcontext_p.h" ++#ifndef QT_NO_IM ++#include "qinputcontext.h" ++#endif // QT_NO_IM + #include "qinternal_p.h" // shared double buffer cleanup + + #if defined(QT_THREAD_SUPPORT) +@@ -189,10 +191,9 @@ + static const char *mwGeometry = 0; // main widget geometry + static const char *mwTitle = 0; // main widget title + //Ming-Che 10/10 +-static char *ximServer = 0; // XIM Server will connect to ++char *qt_ximServer = 0; // XIM Server will connect to + static bool mwIconic = FALSE; // main widget iconified + //Ming-Che 10/10 +-static bool noxim = FALSE; // connect to xim or not + static Display *appDpy = 0; // X11 application display + static char *appDpyName = 0; // X11 display name + static bool appForeignDpy = FALSE; // we didn't create display +@@ -391,14 +392,14 @@ + + + #if !defined(QT_NO_XIM) +-XIM qt_xim = 0; ++//XIM qt_xim = 0; + XIMStyle qt_xim_style = 0; ++XIMStyle qt_xim_preferred_style = 0; + static XIMStyle xim_default_style = XIMPreeditCallbacks | XIMStatusNothing; +-static XIMStyle xim_preferred_style = 0; + #endif + +-static int composingKeycode=0; +-static QTextCodec * input_mapper = 0; ++int qt_ximComposingKeycode=0; ++QTextCodec * qt_input_mapper = 0; + + Q_EXPORT Time qt_x_time = CurrentTime; + Q_EXPORT Time qt_x_user_time = CurrentTime; +@@ -511,8 +512,7 @@ + void setWFlags( WFlags f ) { QWidget::setWFlags(f); } + void clearWFlags( WFlags f ) { QWidget::clearWFlags(f); } + bool translateMouseEvent( const XEvent * ); +- bool translateKeyEventInternal( const XEvent *, int& count, QString& text, int& state, char& ascii, int &code, +- QEvent::Type &type, bool willRepeat=FALSE ); ++ bool translateKeyEventInternal( const XEvent *, int& count, QString& text, int& state, char& ascii, int &code, QEvent::Type &type, bool willRepeat=FALSE, bool statefulTranslation=TRUE ); + bool translateKeyEvent( const XEvent *, bool grab ); + bool translatePaintEvent( const XEvent * ); + bool translateConfigEvent( const XEvent * ); +@@ -529,114 +529,120 @@ + + + // ************************************************************************ +-// X Input Method support ++// Input Method support + // ************************************************************************ + +-#if !defined(QT_NO_XIM) ++/*! ++ An identifier name of the default input method. ++*/ ++QString QApplication::defaultIM = "imsw-multi"; + +-#if defined(Q_C_CALLBACKS) +-extern "C" { +-#endif // Q_C_CALLBACKS + +-#ifdef USE_X11R6_XIM +- static void xim_create_callback(XIM /*im*/, +- XPointer /*client_data*/, +- XPointer /*call_data*/) +- { +- // qDebug("xim_create_callback"); +- QApplication::create_xim(); +- } ++/*! ++ This function handles the query about location of the widget ++ holding the QInputContext instance for widget \a w. + +- static void xim_destroy_callback(XIM /*im*/, +- XPointer /*client_data*/, +- XPointer /*call_data*/) +- { +- // qDebug("xim_destroy_callback"); +- QApplication::close_xim(); +- XRegisterIMInstantiateCallback(appDpy, 0, 0, 0, +- (XIMProc) xim_create_callback, 0); +- } ++ The input context is used for text input to widget \a w. By ++ default, it returns the top-level widget of \a w. + +-#endif // USE_X11R6_XIM ++ If you want to change the mapping of widget \w to QInputContext ++ instance, reimplement both this function and ++ QApplication::icHolderWidgets(). For example, suppose a tabbed web ++ browser. The browser should allocate a input context per tab ++ widget because users may switch the tabs and input a new text ++ during previous input contexts live. + +-#if defined(Q_C_CALLBACKS) ++ See also 'Sharing input context between text widgets' and 'Preedit ++ preservation' section of the class description of QInputContext. ++ ++ \sa QInputContext, icHolderWidgets() ++*/ ++QWidget *QApplication::locateICHolderWidget( QWidget *w ) ++{ ++ return w->topLevelWidget(); + } +-#endif // Q_C_CALLBACKS + +-#endif // QT_NO_XIM + ++/*! ++ This function returns all widgets holding QInputContext. + +-/*! \internal +- Creates the application input method. +- */ +-void QApplication::create_xim() ++ By default, This function returns top-level widgets. So if you ++ want to change the mapping of a widget to QInputContext instance, ++ you must override this function and locateICHolderWidget(). ++ ++ \sa locateICHolderWidget() ++*/ ++QWidgetList *QApplication::icHolderWidgets() + { +-#ifndef QT_NO_XIM +- qt_xim = XOpenIM( appDpy, 0, 0, 0 ); +- if ( qt_xim ) { ++ return QApplication::topLevelWidgets(); ++} + +-#ifdef USE_X11R6_XIM +- XIMCallback destroy; +- destroy.callback = (XIMProc) xim_destroy_callback; +- destroy.client_data = 0; +- if ( XSetIMValues( qt_xim, XNDestroyCallback, &destroy, (char *) 0 ) != 0 ) +- qWarning( "Xlib dosn't support destroy callback"); +-#endif // USE_X11R6_XIM +- +- XIMStyles *styles = 0; +- XGetIMValues(qt_xim, XNQueryInputStyle, &styles, (char *) 0, (char *) 0); +- if ( styles ) { +- int i; +- for ( i = 0; !qt_xim_style && i < styles->count_styles; i++ ) { +- if ( styles->supported_styles[i] == xim_preferred_style ) { +- qt_xim_style = xim_preferred_style; +- break; +- } +- } +- // if the preferred input style couldn't be found, look for +- // Nothing +- for ( i = 0; !qt_xim_style && i < styles->count_styles; i++ ) { +- if ( styles->supported_styles[i] == (XIMPreeditNothing | +- XIMStatusNothing) ) { +- qt_xim_style = XIMPreeditNothing | XIMStatusNothing; +- break; +- } +- } +- // ... and failing that, None. +- for ( i = 0; !qt_xim_style && i < styles->count_styles; i++ ) { +- if ( styles->supported_styles[i] == (XIMPreeditNone | +- XIMStatusNone) ) { +- qt_xim_style = XIMPreeditNone | XIMStatusNone; +- break; +- } +- } + +- // qDebug("QApplication: using im style %lx", qt_xim_style); +- XFree( (char *)styles ); +- } ++/*! ++ This function replaces all QInputContext instances in the ++ application. The function's argument is the identifier name of ++ the newly selected input method. ++*/ ++void QApplication::changeAllInputContext( const QString &identifierName ) ++{ ++ QWidgetList *list = qApp->icHolderWidgets(); ++ QWidgetListIt it(*list); ++ while(it.current()) { ++ it.current()->changeInputContext( identifierName ); ++ ++it; ++ } ++ delete list; ++ ++ // defaultIM = identifierName ; // Change of defaultIM -- default input method -- may be enabled. ++} + +- if ( qt_xim_style ) { + +-#ifdef USE_X11R6_XIM +- XUnregisterIMInstantiateCallback(appDpy, 0, 0, 0, +- (XIMProc) xim_create_callback, 0); +-#endif // USE_X11R6_XIM +- +- QWidgetList *list= qApp->topLevelWidgets(); +- QWidgetListIt it(*list); +- QWidget * w; +- while( (w=it.current()) != 0 ) { +- ++it; +- w->createTLSysExtra(); +- } +- delete list; +- } else { +- // Give up +- qWarning( "No supported input style found." +- " See InputMethod documentation."); +- close_xim(); +- } ++/*! ++ \internal ++ This is an internal function, you should never call this. ++ ++ \sa QInputContext::imEventGenerated() ++*/ ++void QApplication::postIMEvent( QObject *receiver, QIMEvent *event ) ++{ ++ if ( event->type() == QEvent::IMCompose ) { ++ // enable event compression to reduce preedit flicker on fast ++ // typing ++ postEvent( receiver, event ); ++ } else { ++ // cancel queued preedit update ++ if ( event->type() == QEvent::IMEnd ) ++ removePostedEvents( receiver, QEvent::IMCompose ); ++ ++ // to avoid event receiving order inversion between QKeyEvent ++ // and QIMEvent, we must send IMStart and IMEnd via ++ // sendEvent(). ++ sendEvent( receiver, event ); ++ delete event; + } ++} ++ ++ ++/*! ++ This function returns the identifier name of the default input ++ method in this Application. The value is identical to the value of ++ QApplication::defaultIM. ++*/ ++QString QApplication::defaultInputMethod() ++{ ++ return QApplication::defaultIM; ++} ++ ++ ++#if !defined(QT_NO_IM_EXTENSIONS) ++/*! \internal ++ Creates the application input method. ++*/ ++void QApplication::create_im() ++{ ++#ifndef QT_NO_XIM ++ if ( ! qt_xim_preferred_style ) // no configured input style, use the default ++ qt_xim_preferred_style = xim_default_style; + #endif // QT_NO_XIM + } + +@@ -644,6 +650,43 @@ + /*! \internal + Closes the application input method. + */ ++void QApplication::close_im() ++{ ++ QWidgetList *list = qApp->icHolderWidgets(); ++ QWidgetListIt it(*list); ++ while(it.current()) { ++ it.current()->destroyInputContext(); ++ ++it; ++ } ++ delete list; ++} ++ ++#else ++ ++/*! \internal ++ Creates the application input method. ++*/ ++void QApplication::create_xim() ++{ ++#ifndef QT_NO_XIM ++ if ( ! qt_xim_preferred_style ) // no configured input style, use the default ++ qt_xim_preferred_style = xim_default_style; ++#endif // QT_NO_XIM ++ ++ QWidgetList *list= qApp->topLevelWidgets(); ++ QWidgetListIt it(*list); ++ QWidget * w; ++ while( (w=it.current()) != 0 ) { ++ ++it; ++ w->createTLSysExtra(); ++ } ++ delete list; ++} ++ ++ ++ /*! \internal ++ Closes the application input method. ++ */ + void QApplication::close_xim() + { + #ifndef QT_NO_XIM +@@ -651,7 +694,10 @@ + // XCloseIM( qt_xim ); + // We prefer a less serious memory leak + +- qt_xim = 0; ++ // if ( qt_xim ) ++ // qt_xim = 0; ++ ++#endif // QT_NO_XIM + QWidgetList *list = qApp->topLevelWidgets(); + QWidgetListIt it(*list); + while(it.current()) { +@@ -659,9 +705,8 @@ + ++it; + } + delete list; +-#endif // QT_NO_XIM + } +- ++#endif + + /***************************************************************************** + Default X error handlers +@@ -1032,18 +1077,40 @@ + settings.readBoolEntry("/qt/useRtlExtensions", FALSE); + + #ifndef QT_NO_XIM +- if (xim_preferred_style == 0) { ++ if (qt_xim_preferred_style == 0) { + QString ximInputStyle = + settings.readEntry( "/qt/XIMInputStyle", + QObject::trUtf8( "On The Spot" ) ).lower(); + if ( ximInputStyle == "on the spot" ) +- xim_preferred_style = XIMPreeditCallbacks | XIMStatusNothing; ++ qt_xim_preferred_style = XIMPreeditCallbacks | XIMStatusNothing; + else if ( ximInputStyle == "over the spot" ) +- xim_preferred_style = XIMPreeditPosition | XIMStatusNothing; ++ qt_xim_preferred_style = XIMPreeditPosition | XIMStatusNothing; + else if ( ximInputStyle == "off the spot" ) +- xim_preferred_style = XIMPreeditArea | XIMStatusArea; ++ qt_xim_preferred_style = XIMPreeditArea | XIMStatusArea; + else if ( ximInputStyle == "root" ) +- xim_preferred_style = XIMPreeditNothing | XIMStatusNothing; ++ qt_xim_preferred_style = XIMPreeditNothing | XIMStatusNothing; ++ } ++#endif ++ ++#ifndef QT_NO_IM ++ /* ++ The identifier name of an input method is acquired from the ++ configuration file as a default. If a environment variable ++ "QT_IM_SWITCHER" is not empty it will overwrite the ++ configuration file. The "imsw-multi" becomes the default if the entry ++ is not configured. ++ */ ++ if ( getenv( "QT_IM_SWITCHER" ) ) ++ defaultIM = getenv( "QT_IM_SWITCHER" ); ++#ifndef QT_NO_IM_EXTENSIONS ++ else ++ defaultIM = settings.readEntry( "/qt/DefaultInputMethodSwitcher", "imsw-multi" ); ++#endif ++ ++ // defaultIM is restricted to be an IM-switcher. An IM-switcher ++ // has a 'imsw-' prefix ++ if ( ! defaultIM.startsWith( "imsw-" ) ) { ++ defaultIM = "imsw-multi"; + } + #endif + +@@ -1079,19 +1146,19 @@ + // Always use the locale codec, since we have no examples of non-local + // XIMs, and since we cannot get a sensible answer about the encoding + // from the XIM. +- input_mapper = QTextCodec::codecForLocale(); ++ qt_input_mapper = QTextCodec::codecForLocale(); + + } else { + if ( !qstricmp( data, "locale" ) ) +- input_mapper = QTextCodec::codecForLocale(); ++ qt_input_mapper = QTextCodec::codecForLocale(); + else +- input_mapper = QTextCodec::codecForName( data ); ++ qt_input_mapper = QTextCodec::codecForName( data ); + // make sure we have an input codec +- if( !input_mapper ) +- input_mapper = QTextCodec::codecForName( "ISO 8859-1" ); ++ if( !qt_input_mapper ) ++ qt_input_mapper = QTextCodec::codecForName( "ISO 8859-1" ); + } +- if ( input_mapper->mibEnum() == 11 ) // 8859-8 +- input_mapper = QTextCodec::codecForName( "ISO 8859-8-I"); ++ if ( qt_input_mapper->mibEnum() == 11 ) // 8859-8 ++ qt_input_mapper = QTextCodec::codecForName( "ISO 8859-8-I"); + if( data ) + XFree( (char *)data ); + } +@@ -1529,6 +1596,8 @@ + + #define XK_MISCELLANY + #define XK_LATIN1 ++#define XK_KOREAN ++#define XK_XKB_KEYS + #include + + // ### This should be static but it isn't because of the friend declaration +@@ -1619,10 +1688,7 @@ + //Ming-Che 10/10 + } else if ( arg == "-im" ) { + if ( ++i < argc ) +- ximServer = argv[i]; +- } else if ( arg == "-noxim" ) { +- noxim=TRUE; +- // ++ qt_ximServer = argv[i]; + } else if ( arg == "-iconic" ) { + mwIconic = !mwIconic; + } else if ( arg == "-ncols" ) { // xv and netscape use this name +@@ -1642,17 +1708,17 @@ + if ( ++i < argc ) { + QCString s = QCString(argv[i]).lower(); + if ( s == "onthespot" ) +- xim_preferred_style = XIMPreeditCallbacks | +- XIMStatusNothing; ++ qt_xim_preferred_style = XIMPreeditCallbacks | ++ XIMStatusNothing; + else if ( s == "overthespot" ) +- xim_preferred_style = XIMPreeditPosition | +- XIMStatusNothing; ++ qt_xim_preferred_style = XIMPreeditPosition | ++ XIMStatusNothing; + else if ( s == "offthespot" ) +- xim_preferred_style = XIMPreeditArea | +- XIMStatusArea; ++ qt_xim_preferred_style = XIMPreeditArea | ++ XIMStatusArea; + else if ( s == "root" ) +- xim_preferred_style = XIMPreeditNothing | +- XIMStatusNothing; ++ qt_xim_preferred_style = XIMPreeditNothing | ++ XIMStatusNothing; + } + #endif + } else if ( arg == "-cmap" ) { // xv uses this name +@@ -2100,34 +2166,13 @@ + QApplication::setFont( f ); + } + +-#ifndef QT_NO_XIM +- if ( ! xim_preferred_style ) // no configured input style, use the default +- xim_preferred_style = xim_default_style; +- +- qt_xim = 0; +- QString ximServerName(ximServer); +- if (ximServer) +- ximServerName.prepend("@im="); +- else +- ximServerName = ""; +- +- if ( !XSupportsLocale() ) +- qWarning("Qt: Locales not supported on X server"); +- +-#ifdef USE_X11R6_XIM +- else if ( XSetLocaleModifiers (ximServerName.ascii()) == 0 ) +- qWarning( "Qt: Cannot set locale modifiers: %s", +- ximServerName.ascii()); +- else if (! noxim) +- XRegisterIMInstantiateCallback(appDpy, 0, 0, 0, +- (XIMProc) xim_create_callback, 0); +-#else // !USE_X11R6_XIM +- else if ( XSetLocaleModifiers ("") == 0 ) +- qWarning("Qt: Cannot set locale modifiers"); +- else if (! noxim) +- QApplication::create_xim(); +-#endif // USE_X11R6_XIM +-#endif // QT_NO_XIM ++#if !defined(QT_NO_IM) ++#if !defined(QT_NO_IM_EXTENSIONS) ++ QApplication::create_im(); ++#else ++ QApplication::create_xim(); ++#endif ++#endif + + #if defined (QT_TABLET_SUPPORT) + int ndev, +@@ -2376,9 +2421,12 @@ + XCloseDevice( appDpy, devEraser ); + #endif + +-#if !defined(QT_NO_XIM) +- if ( qt_xim ) +- QApplication::close_xim(); ++#if !defined(QT_NO_IM) ++#if !defined(QT_NO_IM_EXTENSIONS) ++ QApplication::close_im(); ++#else ++ QApplication::close_xim(); ++#endif + #endif + + if ( qt_is_gui_used ) { +@@ -3237,77 +3285,59 @@ + } + } + +- int xkey_keycode = event->xkey.keycode; +- if ( XFilterEvent( event, +- keywidget ? keywidget->topLevelWidget()->winId() : None ) ) { +- if ( keywidget ) +- composingKeycode = xkey_keycode; // ### not documented in xlib +- +-#ifndef QT_NO_XIM +- if ( event->type != XKeyPress || ! (qt_xim_style & XIMPreeditCallbacks) ) +- return 1; +- +- /* +- * The Solaris htt input method will transform a ClientMessage +- * event into a filtered KeyPress event, in which case our +- * keywidget is still zero. +- */ +- if ( ! keywidget ) { +- keywidget = (QETWidget*)QWidget::keyboardGrabber(); +- if ( keywidget ) { +- grabbed = TRUE; +- } else { +- if ( focus_widget ) +- keywidget = (QETWidget*)focus_widget; +- if ( !keywidget ) { +- if ( inPopupMode() ) // no focus widget, see if we have a popup +- keywidget = (QETWidget*) activePopupWidget(); +- else if ( widget ) +- keywidget = (QETWidget*)widget->topLevelWidget(); +- } +- } +- } ++#ifndef QT_NO_IM ++ // Filtering input events by the input context. It has to be taken ++ // place before any other key event consumers such as eventfilters ++ // and accelerators because some input methods require quite ++ // various key combination and sequences. It often conflicts with ++ // accelerators and so on, so we must give the input context the ++ // filtering opportunity first to ensure all input methods work ++ // properly regardless of application design. + +- /* +- if the composition string has been emptied, we need to send +- an IMEnd event. however, we have no way to tell if the user +- has cancelled input, or if the user has accepted the +- composition. +- +- so, we have to look for the next keypress and see if it is +- the 'commit' key press (keycode == 0). if it is, we deliver +- an IMEnd event with the final text, otherwise we deliver an +- IMEnd with empty text (meaning the user has cancelled the +- input). +- */ +- QInputContext *qic = +- (QInputContext *) keywidget->topLevelWidget()->topData()->xic; +- extern bool qt_compose_emptied; // qinputcontext_x11.cpp +- if ( qic && qic->composing && qic->focusWidget && qt_compose_emptied ) { +- XEvent event2; +- bool found = FALSE; +- if ( XCheckTypedEvent( QPaintDevice::x11AppDisplay(), +- XKeyPress, &event2 ) ) { +- if ( event2.xkey.keycode == 0 ) { +- // found a key event with the 'commit' string +- found = TRUE; +- XPutBackEvent( QPaintDevice::x11AppDisplay(), &event2 ); +- } +- } ++#ifndef QT_NO_IM_EXTENSIONS ++ if( keywidget && keywidget->isEnabled() && keywidget->isInputMethodEnabled() ) { ++#else ++ if( keywidget && keywidget->isEnabled() ) { ++#endif ++ if( ( event->type==XKeyPress || event->type==XKeyRelease ) && ++ sm_blockUserInput ) // block user interaction during session management ++ return TRUE; + +- if ( !found ) { +- // no key event, so the user must have cancelled the composition +- QIMEvent endevent( QEvent::IMEnd, QString::null, -1 ); +- QApplication::sendEvent( qic->focusWidget, &endevent ); ++ // for XIM handling ++ QInputContext *qic = keywidget->getInputContext(); ++ if( qic && qic->x11FilterEvent( keywidget, event ) ) ++ return TRUE; + +- qic->focusWidget = 0; +- } ++ // filterEvent() accepts QEvent *event rather than preexpanded key ++ // event attribute values. This is intended to pass other IM-related ++ // events in future. The IM-related events are supposed as ++ // QWheelEvent, QTabletEvent and so on. Other non IM-related events ++ // should not be forwarded to input contexts to prevent weird event ++ // handling. ++ if ( ( event->type == XKeyPress || event->type == XKeyRelease ) ) { ++ int code = -1; ++ int count = 0; ++ int state; ++ char ascii = 0; ++ QEvent::Type type; ++ QString text; ++ ++ keywidget->translateKeyEventInternal( event, count, text, ++ state, ascii, code, type, ++ FALSE, FALSE ); ++ ++ // both key press/release is required for some complex ++ // input methods. don't eliminate anything. ++ QKeyEvent keyevent( type, code, ascii, state, text, FALSE, count ); + +- qt_compose_emptied = FALSE; ++ if( qic && qic->filterEvent( &keyevent ) ) ++ return TRUE; + } +-#endif // QT_NO_XIM +- +- return 1; ++ } else ++#endif // QT_NO_IM ++ { ++ if ( XFilterEvent( event, None ) ) ++ return TRUE; + } + + if ( qt_x11EventFilter(event) ) // send through app filter +@@ -3459,34 +3489,8 @@ + case XKeyRelease: + { + if ( keywidget && keywidget->isEnabled() ) { // should always exist +-#ifndef QT_NO_XIM +- QInputContext *qic = +- (QInputContext *) keywidget->topLevelWidget()->topData()->xic; +- +- if ((qt_xim_style & XIMPreeditCallbacks) && event->xkey.keycode == 0 && +- qic && qic->composing && qic->focusWidget) { +- // input method has sent us a commit string +- QCString data(513); +- KeySym sym; // unused +- Status status; // unused +- QString text; +- int count = qic->lookupString( &(event->xkey), data, +- &sym, &status ); +- if ( count > 0 ) +- text = input_mapper->toUnicode( data, count ); +- +- // qDebug( "sending IMEnd with %d chars", text.length() ); +- QIMEvent endevent( QEvent::IMEnd, text, -1 ); +- QApplication::sendEvent( qic->focusWidget, &endevent ); +- +- qic->focusWidget = 0; +- qic->text = QString::null; +- } else +-#endif // !QT_NO_XIM +- { +- // qDebug( "sending key event" ); +- keywidget->translateKeyEvent( event, grabbed ); +- } ++ // qDebug( "sending key event" ); ++ keywidget->translateKeyEvent( event, grabbed ); + } + break; + } +@@ -4781,6 +4785,92 @@ + 0x1005FF10, Qt::Key_F11, // hardcoded Sun F36 (labeled F11) + 0x1005FF11, Qt::Key_F12, // hardcoded Sun F37 (labeled F12) + ++ // International input method support keys ++ ++ // International & multi-key character composition ++ XK_Multi_key, Qt::Key_Multi_key, ++ XK_Codeinput, Qt::Key_Codeinput, ++ XK_SingleCandidate, Qt::Key_SingleCandidate, ++ XK_MultipleCandidate, Qt::Key_MultipleCandidate, ++ XK_PreviousCandidate, Qt::Key_PreviousCandidate, ++ ++ // Misc Functions ++ XK_Mode_switch, Qt::Key_Mode_switch, ++ //XK_script_switch, Qt::Key_script_switch, ++ XK_script_switch, Qt::Key_Mode_switch, ++ ++ // Japanese keyboard support ++ XK_Kanji, Qt::Key_Kanji, ++ XK_Muhenkan, Qt::Key_Muhenkan, ++ //XK_Henkan_Mode, Qt::Key_Henkan_Mode, ++ XK_Henkan_Mode, Qt::Key_Henkan, ++ XK_Henkan, Qt::Key_Henkan, ++ XK_Romaji, Qt::Key_Romaji, ++ XK_Hiragana, Qt::Key_Hiragana, ++ XK_Katakana, Qt::Key_Katakana, ++ XK_Hiragana_Katakana, Qt::Key_Hiragana_Katakana, ++ XK_Zenkaku, Qt::Key_Zenkaku, ++ XK_Hankaku, Qt::Key_Hankaku, ++ XK_Zenkaku_Hankaku, Qt::Key_Zenkaku_Hankaku, ++ XK_Touroku, Qt::Key_Touroku, ++ XK_Massyo, Qt::Key_Massyo, ++ XK_Kana_Lock, Qt::Key_Kana_Lock, ++ XK_Kana_Shift, Qt::Key_Kana_Shift, ++ XK_Eisu_Shift, Qt::Key_Eisu_Shift, ++ XK_Eisu_toggle, Qt::Key_Eisu_toggle, ++ //XK_Kanji_Bangou, Qt::Key_Kanji_Bangou, ++ //XK_Zen_Koho, Qt::Key_Zen_Koho, ++ //XK_Mae_Koho, Qt::Key_Mae_Koho, ++ XK_Kanji_Bangou, Qt::Key_Codeinput, ++ XK_Zen_Koho, Qt::Key_MultipleCandidate, ++ XK_Mae_Koho, Qt::Key_PreviousCandidate, ++ ++#ifdef XK_KOREAN ++ // Korean keyboard support ++ XK_Hangul, Qt::Key_Hangul, ++ XK_Hangul_Start, Qt::Key_Hangul_Start, ++ XK_Hangul_End, Qt::Key_Hangul_End, ++ XK_Hangul_Hanja, Qt::Key_Hangul_Hanja, ++ XK_Hangul_Jamo, Qt::Key_Hangul_Jamo, ++ XK_Hangul_Romaja, Qt::Key_Hangul_Romaja, ++ //XK_Hangul_Codeinput, Qt::Key_Hangul_Codeinput, ++ XK_Hangul_Codeinput, Qt::Key_Codeinput, ++ XK_Hangul_Jeonja, Qt::Key_Hangul_Jeonja, ++ XK_Hangul_Banja, Qt::Key_Hangul_Banja, ++ XK_Hangul_PreHanja, Qt::Key_Hangul_PreHanja, ++ XK_Hangul_PostHanja, Qt::Key_Hangul_PostHanja, ++ //XK_Hangul_SingleCandidate, Qt::Key_Hangul_SingleCandidate, ++ //XK_Hangul_MultipleCandidate, Qt::Key_Hangul_MultipleCandidate, ++ //XK_Hangul_PreviousCandidate, Qt::Key_Hangul_PreviousCandidate, ++ XK_Hangul_SingleCandidate, Qt::Key_SingleCandidate, ++ XK_Hangul_MultipleCandidate, Qt::Key_MultipleCandidate, ++ XK_Hangul_PreviousCandidate, Qt::Key_PreviousCandidate, ++ XK_Hangul_Special, Qt::Key_Hangul_Special, ++ //XK_Hangul_switch, Qt::Key_Hangul_switch, ++ XK_Hangul_switch, Qt::Key_Mode_switch, ++#endif // XK_KOREAN ++ ++ // dead keys ++ XK_dead_grave, Qt::Key_Dead_Grave, ++ XK_dead_acute, Qt::Key_Dead_Acute, ++ XK_dead_circumflex, Qt::Key_Dead_Circumflex, ++ XK_dead_tilde, Qt::Key_Dead_Tilde, ++ XK_dead_macron, Qt::Key_Dead_Macron, ++ XK_dead_breve, Qt::Key_Dead_Breve, ++ XK_dead_abovedot, Qt::Key_Dead_Abovedot, ++ XK_dead_diaeresis, Qt::Key_Dead_Diaeresis, ++ XK_dead_abovering, Qt::Key_Dead_Abovering, ++ XK_dead_doubleacute, Qt::Key_Dead_Doubleacute, ++ XK_dead_caron, Qt::Key_Dead_Caron, ++ XK_dead_cedilla, Qt::Key_Dead_Cedilla, ++ XK_dead_ogonek, Qt::Key_Dead_Ogonek, ++ XK_dead_iota, Qt::Key_Dead_Iota, ++ XK_dead_voiced_sound, Qt::Key_Dead_Voiced_Sound, ++ XK_dead_semivoiced_sound, Qt::Key_Dead_Semivoiced_Sound, ++ XK_dead_belowdot, Qt::Key_Dead_Belowdot, ++ XK_dead_hook, Qt::Key_Dead_Hook, ++ XK_dead_horn, Qt::Key_Dead_Horn, ++ + // Special multimedia keys + // currently only tested with MS internet keyboard + +@@ -4998,9 +5088,9 @@ + bool QETWidget::translateKeyEventInternal( const XEvent *event, int& count, + QString& text, + int& state, +- char& ascii, int& code, QEvent::Type &type, bool willRepeat ) ++ char& ascii, int& code, QEvent::Type &type, bool willRepeat, bool statefulTranslation ) + { +- QTextCodec *mapper = input_mapper; ++ QTextCodec *mapper = qt_input_mapper; + // some XmbLookupString implementations don't return buffer overflow correctly, + // so we increase the input buffer to allow for long strings... + // 256 chars * 2 bytes + 1 null-term == 513 bytes +@@ -5047,6 +5137,11 @@ + + if ( type == QEvent::KeyPress ) { + bool mb=FALSE; ++ // commit string handling is done by ++ // QXIMInputContext::x11FilterEvent() and are passed to ++ // widgets via QIMEvent regardless of XIM style, so the ++ // following code is commented out. ++#if 0 + if ( qt_xim ) { + QTLWExtra* xd = tlw->topData(); + QInputContext *qic = (QInputContext *) xd->xic; +@@ -5055,13 +5150,14 @@ + count = qic->lookupString(&xkeyevent, chars, &key, &status); + } + } ++#endif + if ( !mb ) { + count = XLookupString( &xkeyevent, + chars.data(), chars.size(), &key, 0 ); + } + if ( count && !keycode ) { +- keycode = composingKeycode; +- composingKeycode = 0; ++ keycode = qt_ximComposingKeycode; ++ qt_ximComposingKeycode = 0; + } + if ( key ) + keyDict->replace( keycode, (void*)key ); +@@ -5138,15 +5234,18 @@ + state = qt_x11_translateButtonState( keystate ); + + static int directionKeyEvent = 0; +- if ( qt_use_rtl_extensions && type == QEvent::KeyRelease ) { ++ static unsigned int lastWinId = 0; ++ if ( qt_use_rtl_extensions && type == QEvent::KeyRelease && statefulTranslation ) { + if (directionKeyEvent == Key_Direction_R || directionKeyEvent == Key_Direction_L ) { + type = QEvent::KeyPress; + code = directionKeyEvent; + chars[0] = 0; + directionKeyEvent = 0; ++ lastWinId = 0; + return TRUE; + } else { + directionKeyEvent = 0; ++ lastWinId = 0; + } + } + +@@ -5156,10 +5255,14 @@ + // (to figure out whether the Ctrl modifier is held while Shift is pressed, + // or Shift is held while Ctrl is pressed) since the 'state' doesn't tell + // us whether the modifier held is Left or Right. +- if (qt_use_rtl_extensions && type == QEvent::KeyPress) ++ if ( qt_use_rtl_extensions && type == QEvent::KeyPress && statefulTranslation ) + if (key == XK_Control_L || key == XK_Control_R || key == XK_Shift_L || key == XK_Shift_R) { +- if (!directionKeyEvent) ++ if (!directionKeyEvent) { + directionKeyEvent = key; ++ // This code exists in order to check that ++ // the event is occurred in the same widget. ++ lastWinId = winId(); ++ } + } else { + // this can no longer be a direction-changing accel. + // if any other key was pressed. +@@ -5173,7 +5276,7 @@ + // Qt keycodes between 128 and 255, but should rather use the + // QKeyEvent::text(). + // +- if ( key < 128 || (key < 256 && (!input_mapper || input_mapper->mibEnum()==4)) ) { ++ if ( key < 128 || (key < 256 && (!qt_input_mapper || qt_input_mapper->mibEnum()==4)) ) { + code = isprint((int)key) ? toupper((int)key) : 0; // upper-case key, if known + } else if ( key >= XK_F1 && key <= XK_F35 ) { + code = Key_F1 + ((int)key - XK_F1); // function keys +@@ -5224,8 +5327,8 @@ + chars[0] = 0; + } + +- if ( qt_use_rtl_extensions && type == QEvent::KeyPress ) { +- if ( directionKeyEvent ) { ++ if ( qt_use_rtl_extensions && type == QEvent::KeyPress && statefulTranslation ) { ++ if ( directionKeyEvent && lastWinId == winId() ) { + if ( key == XK_Shift_L && directionKeyEvent == XK_Control_L || + key == XK_Control_L && directionKeyEvent == XK_Shift_L ) { + directionKeyEvent = Key_Direction_L; +@@ -5403,8 +5506,34 @@ + translateKeyEventInternal( event, count, text, state, ascii, code, type ); + } + ++#ifndef QT_NO_IM ++ QInputContext *qic = getInputContext(); ++#endif ++ + // compress keys + if ( !text.isEmpty() && testWState(WState_CompressKeys) && ++#ifndef QT_NO_IM ++ // Ordinary input methods require discrete key events to work ++ // properly, so key compression has to be disabled when input ++ // context exists. ++ // ++ // And further consideration, some complex input method ++ // require all key press/release events discretely even if ++ // the input method awares of key compression and compressed ++ // keys are ordinary alphabets. For example, the uim project ++ // is planning to implement "combinational shift" feature for ++ // a Japanese input method, uim-skk. It will work as follows. ++ // ++ // 1. press "r" ++ // 2. press "u" ++ // 3. release both "r" and "u" in arbitrary order ++ // 4. above key sequence generates "Ru" ++ // ++ // Of course further consideration about other participants ++ // such as key repeat mechanism is required to implement such ++ // feature. ++ ! qic && ++#endif // QT_NO_IM + // do not compress keys if the key event we just got above matches + // one of the key ranges used to compute stopCompression + ! ( ( code >= Key_Escape && code <= Key_SysReq ) || +@@ -5463,7 +5592,12 @@ + + // autorepeat compression makes sense for all widgets (Windows + // does it automatically .... ) +- if ( event->type == XKeyPress && text.length() <= 1 ) { ++ if ( event->type == XKeyPress && text.length() <= 1 ++#ifndef QT_NO_IM ++ // input methods need discrete key events ++ && ! qic ++#endif// QT_NO_IM ++ ) { + XEvent dummy; + + for (;;) { +--- src/kernel/qevent.cpp ++++ src/kernel/qevent.cpp +@@ -732,6 +732,10 @@ + the result of a known key (e.g. it may be the result of a compose + sequence or a keyboard macro, or due to key event compression). + ++ Applications should not use the Qt latin 1 keycodes between 128 ++ and 255, but should rather use the QKeyEvent::text(). This is ++ mainly for compatibility. ++ + \sa QWidget::setKeyCompression() + */ + +--- src/kernel/qinputcontext.cpp ++++ src/kernel/qinputcontext.cpp +@@ -0,0 +1,856 @@ ++/**************************************************************************** ++** $Id: qinputcontext.cpp,v 1.6 2004/06/22 06:47:30 daisuke Exp $ ++** ++** Implementation of QInputContext class ++** ++** Copyright (C) 2000-2003 Trolltech AS. All rights reserved. ++** ++** This file is part of the kernel module of the Qt GUI Toolkit. ++** ++** This file may be distributed under the terms of the Q Public License ++** as defined by Trolltech AS of Norway and appearing in the file ++** LICENSE.QPL included in the packaging of this file. ++** ++** This file may be distributed and/or modified under the terms of the ++** GNU General Public License version 2 as published by the Free Software ++** Foundation and appearing in the file LICENSE.GPL included in the ++** packaging of this file. ++** ++** Licensees holding valid Qt Enterprise Edition or Qt Professional Edition ++** licenses for Unix/X11 may use this file in accordance with the Qt Commercial ++** License Agreement provided with the Software. ++** ++** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE ++** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. ++** ++** See http://www.trolltech.com/pricing.html or email sales@trolltech.com for ++** information about Qt Commercial License Agreements. ++** See http://www.trolltech.com/qpl/ for QPL licensing information. ++** See http://www.trolltech.com/gpl/ for GPL licensing information. ++** ++** Contact info@trolltech.com if any conditions of this licensing are ++** not clear to you. ++** ++**********************************************************************/ ++ ++//#define QT_NO_IM_PREEDIT_RELOCATION ++ ++#include "qinputcontext.h" ++ ++#ifndef QT_NO_IM ++ ++#include "qplatformdefs.h" ++ ++#include "qapplication.h" ++#include "qwidget.h" ++#include "qpopupmenu.h" ++ ++#include ++#include ++ ++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 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 *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 *imMenus = menus(); ++ if ( imMenus ) { ++ if ( action == QInputContextMenu::InsertSeparator ) ++ popup->insertSeparator(); ++ for ( QPtrList::Iterator it = imMenus->begin(); ++ it != imMenus->end(); ++ ++it ) { ++ QInputContextMenu *imMenu = *it; ++ popup->insertItem( imMenu->title, imMenu->popup ); ++ } ++ imMenus->clear(); ++ delete imMenus; ++ } ++} ++ ++#endif //Q_NO_IM +--- src/kernel/qinputcontext.h ++++ src/kernel/qinputcontext.h +@@ -0,0 +1,143 @@ ++/**************************************************************************** ++** $Id: qinputcontext.h,v 1.8 2004/06/22 06:47:30 daisuke Exp $ ++** ++** Definition of QInputContext ++** ++** Copyright (C) 1992-2002 Trolltech AS. All rights reserved. ++** ++** This file is part of the kernel module of the Qt GUI Toolkit. ++** ++** This file may be distributed under the terms of the Q Public License ++** as defined by Trolltech AS of Norway and appearing in the file ++** LICENSE.QPL included in the packaging of this file. ++** ++** This file may be distributed and/or modified under the terms of the ++** GNU General Public License version 2 as published by the Free Software ++** Foundation and appearing in the file LICENSE.GPL included in the ++** packaging of this file. ++** ++** Licensees holding valid Qt Enterprise Edition or Qt Professional Edition ++** licenses may use this file in accordance with the Qt Commercial License ++** Agreement provided with the Software. ++** ++** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE ++** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. ++** ++** See http://www.trolltech.com/pricing.html or email sales@trolltech.com for ++** information about Qt Commercial License Agreements. ++** See http://www.trolltech.com/qpl/ for QPL licensing information. ++** See http://www.trolltech.com/gpl/ for GPL licensing information. ++** ++** Contact info@trolltech.com if any conditions of this licensing are ++** not clear to you. ++** ++**********************************************************************/ ++ ++#ifndef QINPUTCONTEXT_H ++#define QINPUTCONTEXT_H ++ ++#ifndef QT_NO_IM ++ ++#ifndef QT_H ++#include "qobject.h" ++#include "qglobal.h" ++#include "qevent.h" ++#include "qstring.h" ++#if (QT_VERSION-0 >= 0x040000) ++#include "qlist.h" ++#include "qaction.h" ++#else ++#include "qptrlist.h" ++#endif ++#endif ++ ++class QWidget; ++class QFont; ++class QPopupMenu; ++class QInputContextPrivate; ++ ++ ++struct QInputContextMenu { ++ enum Action { ++ NoSeparator, ++ InsertSeparator ++ }; ++#if !(QT_VERSION-0 >= 0x040000) ++ QString title; ++ QPopupMenu *popup; ++#endif ++}; ++ ++ ++class QInputContext : public QObject ++{ ++ Q_OBJECT ++public: ++ QInputContext( QObject *parent = 0 ); ++ virtual ~QInputContext(); ++ ++ virtual QString identifierName(); ++ virtual QString language(); ++ ++#if defined(Q_WS_X11) ++ virtual bool x11FilterEvent( QWidget *keywidget, XEvent *event ); ++#endif // Q_WS_X11 ++ virtual bool filterEvent( const QEvent *event ); ++ virtual void reset(); ++ ++ virtual void setFocus(); ++ virtual void unsetFocus(); ++ virtual void setMicroFocus( int x, int y, int w, int h, QFont *f = 0 ); ++ virtual void mouseHandler( int x, QEvent::Type type, ++ Qt::ButtonState button, Qt::ButtonState state ); ++ virtual QFont font() const; ++ virtual bool isComposing() const; ++ virtual bool isPreeditRelocationEnabled(); ++ ++#if (QT_VERSION-0 >= 0x040000) ++ virtual QList actions(); ++ void addActionsTo( QMenu *menu, QInputContextMenu::Action action = QInputContextMenu::InsertSeparator ); ++#else ++ virtual QPtrList *menus(); ++ void addMenusTo( QPopupMenu *popup, QInputContextMenu::Action action = QInputContextMenu::InsertSeparator ); ++#endif ++ ++#if defined(Q_WS_X11) ++ // these functions are not recommended for ordinary use ++ virtual QWidget *focusWidget() const; ++ virtual QWidget *holderWidget() const; ++ ++ // these functions must not be used by ordinary input method ++ virtual void setFocusWidget( QWidget *w ); ++ virtual void setHolderWidget( QWidget *w ); ++ virtual void releaseComposingWidget( QWidget *w ); ++#endif ++ ++signals: ++ void deletionRequested(); ++ void imEventGenerated( QObject *receiver, QIMEvent *e ); ++ ++protected: ++ virtual void sendIMEvent( QEvent::Type type, ++ const QString &text = QString::null, ++ int cursorPosition = -1, int selLength = 0 ); ++ ++private: ++ void sendIMEventInternal( QEvent::Type type, ++ const QString &text = QString::null, ++ int cursorPosition = -1, int selLength = 0 ); ++ ++ QInputContextPrivate *d; ++ ++ friend class QWidget; ++ friend class QInputContextFactory; ++ ++private: // Disabled copy constructor and operator= ++ QInputContext( const QInputContext & ); ++ QInputContext &operator=( const QInputContext & ); ++ ++}; ++ ++#endif //Q_NO_IM ++ ++#endif // QINPUTCONTEXT_H +--- src/kernel/qinputcontext_x11.cpp ++++ src/kernel/qinputcontext_x11.cpp +@@ -33,500 +33,38 @@ + ** + **********************************************************************/ + ++#include "qinputcontext.h" ++ ++#ifndef QT_NO_IM ++ + #include "qplatformdefs.h" + + #include "qapplication.h" + #include "qwidget.h" +-#include "qinputcontext_p.h" +- +-#include +-#include + ++#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 ++ Return TRUE if the \a event has been consumed. Otherwise, the ++ unfiltered \a event will be translated into QEvent and forwarded ++ to filterEvent(). Filtering at both x11FilterEvent() and ++ filterEvent() in single input method is allowed. + +-// #define QT_XIM_DEBUG ++ \a keywidget is a client widget into which a text is inputted. \a ++ event is inputted XEvent. + +-// from qapplication_x11.cpp +-extern XIM qt_xim; +-extern XIMStyle qt_xim_style; +- +-/* The cache here is needed, as X11 leaks a few kb for every +- XFreeFontSet call, so we avoid creating and deletion of fontsets as +- much as possible ++ \sa filterEvent() + */ +-static XFontSet fontsetCache[8] = { 0, 0, 0, 0, 0, 0, 0, 0 }; +-static int fontsetRefCount = 0; +- +-static const char * const fontsetnames[] = { +- "-*-fixed-medium-r-*-*-16-*,-*-*-medium-r-*-*-16-*", +- "-*-fixed-medium-i-*-*-16-*,-*-*-medium-i-*-*-16-*", +- "-*-fixed-bold-r-*-*-16-*,-*-*-bold-r-*-*-16-*", +- "-*-fixed-bold-i-*-*-16-*,-*-*-bold-i-*-*-16-*", +- "-*-fixed-medium-r-*-*-24-*,-*-*-medium-r-*-*-24-*", +- "-*-fixed-medium-i-*-*-24-*,-*-*-medium-i-*-*-24-*", +- "-*-fixed-bold-r-*-*-24-*,-*-*-bold-r-*-*-24-*", +- "-*-fixed-bold-i-*-*-24-*,-*-*-bold-i-*-*-24-*" +-}; +- +-static XFontSet getFontSet( const QFont &f ) +-{ +- int i = 0; +- if (f.italic()) +- i |= 1; +- if (f.bold()) +- i |= 2; +- +- if ( f.pointSize() > 20 ) +- i += 4; +- +- if ( !fontsetCache[i] ) { +- Display* dpy = QPaintDevice::x11AppDisplay(); +- int missCount; +- char** missList; +- fontsetCache[i] = XCreateFontSet(dpy, fontsetnames[i], &missList, &missCount, 0); +- if(missCount > 0) +- XFreeStringList(missList); +- if ( !fontsetCache[i] ) { +- fontsetCache[i] = XCreateFontSet(dpy, "-*-fixed-*-*-*-*-16-*", &missList, &missCount, 0); +- if(missCount > 0) +- XFreeStringList(missList); +- if ( !fontsetCache[i] ) +- fontsetCache[i] = (XFontSet)-1; +- } +- } +- return (fontsetCache[i] == (XFontSet)-1) ? 0 : fontsetCache[i]; +-} +- +- +-#ifdef Q_C_CALLBACKS +-extern "C" { +-#endif // Q_C_CALLBACKS +- +- static int xic_start_callback(XIC, XPointer client_data, XPointer) { +- QInputContext *qic = (QInputContext *) client_data; +- if (! qic) { +-#ifdef QT_XIM_DEBUG +- qDebug("compose start: no qic"); +-#endif // QT_XIM_DEBUG +- +- return 0; +- } +- +- qic->composing = TRUE; +- qic->text = QString::null; +- qic->focusWidget = 0; +- +- if ( qic->selectedChars.size() < 128 ) +- qic->selectedChars.resize( 128 ); +- qic->selectedChars.fill( 0 ); +- +-#ifdef QT_XIM_DEBUG +- qDebug("compose start"); +-#endif // QT_XIM_DEBUG +- +- return 0; +- } +- +- static int xic_draw_callback(XIC, XPointer client_data, XPointer call_data) { +- QInputContext *qic = (QInputContext *) client_data; +- if (! qic) { +-#ifdef QT_XIM_DEBUG +- qDebug("compose event: invalid compose event %p", qic); +-#endif // QT_XIM_DEBUG +- +- return 0; +- } +- +- bool send_imstart = FALSE; +- if (qApp->focusWidget() != qic->focusWidget && qic->text.isEmpty()) { +- if (qic->focusWidget) { +-#ifdef QT_XIM_DEBUG +- qDebug( "sending IMEnd (empty) to %p", qic->focusWidget ); +-#endif // QT_XIM_DEBUG +- +- QIMEvent endevent(QEvent::IMEnd, QString::null, -1); +- QApplication::sendEvent(qic->focusWidget, &endevent); +- } +- +- qic->text = QString::null; +- qic->focusWidget = qApp->focusWidget(); +- qic->composing = FALSE; +- +- if ( qic->selectedChars.size() < 128 ) +- qic->selectedChars.resize( 128 ); +- qic->selectedChars.fill( 0 ); +- +- if (qic->focusWidget) { +- qic->composing = TRUE; +- send_imstart = TRUE; +- } +- } +- +- if (! qic->composing || ! qic->focusWidget) { +-#ifdef QT_XIM_DEBUG +- qDebug("compose event: invalid compose event %d %p", +- qic->composing, qic->focusWidget); +-#endif // QT_XIM_DEBUG +- +- return 0; +- } +- +- if ( send_imstart ) { +-#ifdef QT_XIM_DEBUG +- qDebug( "sending IMStart to %p", qic->focusWidget ); +-#endif // QT_XIM_DEBUG +- +- qt_compose_emptied = FALSE; +- QIMEvent startevent(QEvent::IMStart, QString::null, -1); +- QApplication::sendEvent(qic->focusWidget, &startevent); +- } +- +- XIMPreeditDrawCallbackStruct *drawstruct = +- (XIMPreeditDrawCallbackStruct *) call_data; +- XIMText *text = (XIMText *) drawstruct->text; +- int cursor = drawstruct->caret, sellen = 0; +- +- if ( ! drawstruct->caret && ! drawstruct->chg_first && +- ! drawstruct->chg_length && ! text ) { +- // nothing to do +- return 0; +- } +- +- if (text) { +- char *str = 0; +- if (text->encoding_is_wchar) { +- int l = wcstombs(NULL, text->string.wide_char, text->length); +- if (l != -1) { +- str = new char[l + 1]; +- wcstombs(str, text->string.wide_char, l); +- str[l] = 0; +- } +- } else +- str = text->string.multi_byte; +- +- if (! str) +- return 0; +- +- QString s = QString::fromLocal8Bit(str); +- +- if (text->encoding_is_wchar) +- delete [] str; +- +- if (drawstruct->chg_length < 0) +- qic->text.replace(drawstruct->chg_first, UINT_MAX, s); +- else +- qic->text.replace(drawstruct->chg_first, drawstruct->chg_length, s); +- +- if ( qic->selectedChars.size() < qic->text.length() ) { +- // expand the selectedChars array if the compose string is longer +- uint from = qic->selectedChars.size(); +- qic->selectedChars.resize( qic->text.length() ); +- for ( uint x = from; from < qic->selectedChars.size(); ++x ) +- qic->selectedChars[x] = 0; +- } +- +- uint x; +- bool *p = qic->selectedChars.data() + drawstruct->chg_first; +- // determine if the changed chars are selected based on text->feedback +- for ( x = 0; x < s.length(); ++x ) +- *p++ = ( text->feedback ? ( text->feedback[x] & XIMReverse ) : 0 ); +- +- // figure out where the selection starts, and how long it is +- p = qic->selectedChars.data(); +- bool started = FALSE; +- for ( x = 0; x < QMIN(qic->text.length(), qic->selectedChars.size()); ++x ) { +- if ( started ) { +- if ( *p ) ++sellen; +- else break; +- } else { +- if ( *p ) { +- cursor = x; +- started = TRUE; +- sellen = 1; +- } +- } +- ++p; +- } +- } else { +- if (drawstruct->chg_length == 0) +- drawstruct->chg_length = -1; +- +- qic->text.remove(drawstruct->chg_first, drawstruct->chg_length); +- qt_compose_emptied = qic->text.isEmpty(); +- if ( qt_compose_emptied ) { +-#ifdef QT_XIM_DEBUG +- qDebug( "compose emptied" ); +-#endif // QT_XIM_DEBUG +- +- // don't send an empty compose, since we will send an IMEnd with +- // either the correct compose text (or null text if the user has +- // cancelled the compose or deleted all chars). +- return 0; +- } +- } +- +-#ifdef QT_XIM_DEBUG +- qDebug( "sending IMCompose to %p with %d chars", +- qic->focusWidget, qic->text.length() ); +-#endif // QT_XIM_DEBUG +- +- QIMComposeEvent event( QEvent::IMCompose, qic->text, cursor, sellen ); +- QApplication::sendEvent(qic->focusWidget, &event); +- return 0; +- } +- +- static int xic_done_callback(XIC, XPointer client_data, XPointer) { +- QInputContext *qic = (QInputContext *) client_data; +- if (! qic) +- return 0; +- +- if (qic->composing && qic->focusWidget) { +-#ifdef QT_XIM_DEBUG +- qDebug( "sending IMEnd (empty) to %p", qic->focusWidget ); +-#endif // QT_XIM_DEBUG +- +- QIMEvent event(QEvent::IMEnd, QString::null, -1); +- QApplication::sendEvent(qic->focusWidget, &event); +- } +- +- qic->composing = FALSE; +- qic->focusWidget = 0; +- +- if ( qic->selectedChars.size() < 128 ) +- qic->selectedChars.resize( 128 ); +- qic->selectedChars.fill( 0 ); +- +- return 0; +- } +- +-#ifdef Q_C_CALLBACKS +-} +-#endif // Q_C_CALLBACKS +- +-#endif // !QT_NO_XIM +- +- +- +-QInputContext::QInputContext(QWidget *widget) +- : ic(0), focusWidget(0), composing(FALSE), fontset(0) +-{ +-#if !defined(QT_NO_XIM) +- fontsetRefCount++; +- if (! qt_xim) { +- qWarning("QInputContext: no input method context available"); +- return; +- } +- +- if (! widget->isTopLevel()) { +- qWarning("QInputContext: cannot create input context for non-toplevel widgets"); +- return; +- } +- +- XPoint spot; +- XRectangle rect; +- XVaNestedList preedit_attr = 0; +- XIMCallback startcallback, drawcallback, donecallback; +- +- font = widget->font(); +- fontset = getFontSet( font ); +- +- if (qt_xim_style & XIMPreeditArea) { +- rect.x = 0; +- rect.y = 0; +- rect.width = widget->width(); +- rect.height = widget->height(); +- +- preedit_attr = XVaCreateNestedList(0, +- XNArea, &rect, +- XNFontSet, fontset, +- (char *) 0); +- } else if (qt_xim_style & XIMPreeditPosition) { +- spot.x = 1; +- spot.y = 1; +- +- preedit_attr = XVaCreateNestedList(0, +- XNSpotLocation, &spot, +- XNFontSet, fontset, +- (char *) 0); +- } else if (qt_xim_style & XIMPreeditCallbacks) { +- startcallback.client_data = (XPointer) this; +- startcallback.callback = (XIMProc) xic_start_callback; +- drawcallback.client_data = (XPointer) this; +- drawcallback.callback = (XIMProc)xic_draw_callback; +- donecallback.client_data = (XPointer) this; +- donecallback.callback = (XIMProc) xic_done_callback; +- +- preedit_attr = XVaCreateNestedList(0, +- XNPreeditStartCallback, &startcallback, +- XNPreeditDrawCallback, &drawcallback, +- XNPreeditDoneCallback, &donecallback, +- (char *) 0); +- } +- +- if (preedit_attr) { +- ic = XCreateIC(qt_xim, +- XNInputStyle, qt_xim_style, +- XNClientWindow, widget->winId(), +- XNPreeditAttributes, preedit_attr, +- (char *) 0); +- XFree(preedit_attr); +- } else +- ic = XCreateIC(qt_xim, +- XNInputStyle, qt_xim_style, +- XNClientWindow, widget->winId(), +- (char *) 0); +- +- if (! ic) +- qFatal("Failed to create XIM input context!"); +- +- // when resetting the input context, preserve the input state +- (void) XSetICValues((XIC) ic, XNResetState, XIMPreserveState, (char *) 0); +-#endif // !QT_NO_XIM +-} +- +- +-QInputContext::~QInputContext() +-{ +- +-#if !defined(QT_NO_XIM) +- if (ic) +- XDestroyIC((XIC) ic); +- +- if ( --fontsetRefCount == 0 ) { +- Display *dpy = QPaintDevice::x11AppDisplay(); +- for ( int i = 0; i < 8; i++ ) { +- if ( fontsetCache[i] && fontsetCache[i] != (XFontSet)-1 ) { +- XFreeFontSet(dpy, fontsetCache[i]); +- fontsetCache[i] = 0; +- } +- } +- } +- +-#endif // !QT_NO_XIM +- +- ic = 0; +- focusWidget = 0; +- composing = FALSE; +-} +- +- +-void QInputContext::reset() +-{ +-#if !defined(QT_NO_XIM) +- if (focusWidget && composing && ! text.isNull()) { +-#ifdef QT_XIM_DEBUG +- qDebug("QInputContext::reset: composing - sending IMEnd (empty) to %p", +- focusWidget); +-#endif // QT_XIM_DEBUG +- +- QIMEvent endevent(QEvent::IMEnd, QString::null, -1); +- QApplication::sendEvent(focusWidget, &endevent); +- focusWidget = 0; +- text = QString::null; +- if ( selectedChars.size() < 128 ) +- selectedChars.resize( 128 ); +- selectedChars.fill( 0 ); +- +- char *mb = XmbResetIC((XIC) ic); +- if (mb) +- XFree(mb); +- } +-#endif // !QT_NO_XIM +-} +- +- +-void QInputContext::setComposePosition(int x, int y) +-{ +-#if !defined(QT_NO_XIM) +- if (qt_xim && ic) { +- XPoint point; +- point.x = x; +- point.y = y; +- +- XVaNestedList preedit_attr = +- XVaCreateNestedList(0, +- XNSpotLocation, &point, +- +- (char *) 0); +- XSetICValues((XIC) ic, XNPreeditAttributes, preedit_attr, (char *) 0); +- XFree(preedit_attr); +- } +-#endif // !QT_NO_XIM +-} +- +- +-void QInputContext::setComposeArea(int x, int y, int w, int h) ++bool QInputContext::x11FilterEvent( QWidget *keywidget, XEvent *event ) + { +-#if !defined(QT_NO_XIM) +- if (qt_xim && ic) { +- XRectangle rect; +- rect.x = x; +- rect.y = y; +- rect.width = w; +- rect.height = h; +- +- XVaNestedList preedit_attr = XVaCreateNestedList(0, +- XNArea, &rect, +- +- (char *) 0); +- XSetICValues((XIC) ic, XNPreeditAttributes, preedit_attr, (char *) 0); +- XFree(preedit_attr); +- } +-#endif ++ return FALSE; + } + +- +-int QInputContext::lookupString(XKeyEvent *event, QCString &chars, +- KeySym *key, Status *status) const +-{ +- int count = 0; +- +-#if !defined(QT_NO_XIM) +- if (qt_xim && ic) { +- count = XmbLookupString((XIC) ic, event, chars.data(), +- chars.size(), key, status); +- +- if ((*status) == XBufferOverflow ) { +- chars.resize(count + 1); +- count = XmbLookupString((XIC) ic, event, chars.data(), +- chars.size(), key, status); +- } +- } +- +-#endif // QT_NO_XIM +- +- return count; +-} +- +-void QInputContext::setFocus() +-{ +-#if !defined(QT_NO_XIM) +- if (qt_xim && ic) +- XSetICFocus((XIC) ic); +-#endif // !QT_NO_XIM +-} +- +-void QInputContext::setXFontSet(const QFont &f) +-{ +-#if !defined(QT_NO_XIM) +- if (font == f) return; // nothing to do +- font = f; +- +- XFontSet fs = getFontSet(font); +- if (fontset == fs) return; // nothing to do +- fontset = fs; +- +- XVaNestedList preedit_attr = XVaCreateNestedList(0, XNFontSet, fontset, (char *) 0); +- XSetICValues((XIC) ic, XNPreeditAttributes, preedit_attr, (char *) 0); +- XFree(preedit_attr); +-#else +- Q_UNUSED( f ); +-#endif +-} ++#endif //Q_NO_IM +--- src/kernel/qnamespace.h ++++ src/kernel/qnamespace.h +@@ -397,6 +397,87 @@ + Key_Help = 0x1058, + Key_Direction_L = 0x1059, + Key_Direction_R = 0x1060, ++ ++ // International input method support (X keycode - 0xEE00, the ++ // definition follows Qt/Embedded 2.3.7) Only interesting if ++ // you are writing your own input method ++ ++ // International & multi-key character composition ++ Key_Multi_key = 0x1120, // Multi-key character compose ++ Key_Codeinput = 0x1137, ++ Key_SingleCandidate = 0x113c, ++ Key_MultipleCandidate = 0x113d, ++ Key_PreviousCandidate = 0x113e, ++ ++ // Misc Functions ++ Key_Mode_switch = 0x117e, // Character set switch ++ //Key_script_switch = 0x117e, // Alias for mode_switch ++ ++ // Japanese keyboard support ++ Key_Kanji = 0x1121, // Kanji, Kanji convert ++ Key_Muhenkan = 0x1122, // Cancel Conversion ++ //Key_Henkan_Mode = 0x1123, // Start/Stop Conversion ++ Key_Henkan = 0x1123, // Alias for Henkan_Mode ++ Key_Romaji = 0x1124, // to Romaji ++ Key_Hiragana = 0x1125, // to Hiragana ++ Key_Katakana = 0x1126, // to Katakana ++ Key_Hiragana_Katakana = 0x1127, // Hiragana/Katakana toggle ++ Key_Zenkaku = 0x1128, // to Zenkaku ++ Key_Hankaku = 0x1129, // to Hankaku ++ Key_Zenkaku_Hankaku = 0x112a, // Zenkaku/Hankaku toggle ++ Key_Touroku = 0x112b, // Add to Dictionary ++ Key_Massyo = 0x112c, // Delete from Dictionary ++ Key_Kana_Lock = 0x112d, // Kana Lock ++ Key_Kana_Shift = 0x112e, // Kana Shift ++ Key_Eisu_Shift = 0x112f, // Alphanumeric Shift ++ Key_Eisu_toggle = 0x1130, // Alphanumeric toggle ++ //Key_Kanji_Bangou = 0x1137, // Codeinput ++ //Key_Zen_Koho = 0x113d, // Multiple/All Candidate(s) ++ //Key_Mae_Koho = 0x113e, // Previous Candidate ++ ++ // Korean keyboard support ++ // ++ // In fact, many Korean users need only 2 keys, Key_Hangul and ++ // Key_Hangul_Hanja. But rest of the keys are good for future. ++ ++ Key_Hangul = 0x1131, // Hangul start/stop(toggle) ++ Key_Hangul_Start = 0x1132, // Hangul start ++ Key_Hangul_End = 0x1133, // Hangul end, English start ++ Key_Hangul_Hanja = 0x1134, // Start Hangul->Hanja Conversion ++ Key_Hangul_Jamo = 0x1135, // Hangul Jamo mode ++ Key_Hangul_Romaja = 0x1136, // Hangul Romaja mode ++ //Key_Hangul_Codeinput = 0x1137, // Hangul code input mode ++ Key_Hangul_Jeonja = 0x1138, // Jeonja mode ++ Key_Hangul_Banja = 0x1139, // Banja mode ++ Key_Hangul_PreHanja = 0x113a, // Pre Hanja conversion ++ Key_Hangul_PostHanja = 0x113b, // Post Hanja conversion ++ //Key_Hangul_SingleCandidate = 0x113c, // Single candidate ++ //Key_Hangul_MultipleCandidate = 0x113d, // Multiple candidate ++ //Key_Hangul_PreviousCandidate = 0x113e, // Previous candidate ++ Key_Hangul_Special = 0x113f, // Special symbols ++ //Key_Hangul_switch = 0x117e, // Alias for mode_switch ++ ++ // dead keys (X keycode - 0xED00 to avoid the conflict) ++ Key_Dead_Grave = 0x1250, ++ Key_Dead_Acute = 0x1251, ++ Key_Dead_Circumflex = 0x1252, ++ Key_Dead_Tilde = 0x1253, ++ Key_Dead_Macron = 0x1254, ++ Key_Dead_Breve = 0x1255, ++ Key_Dead_Abovedot = 0x1256, ++ Key_Dead_Diaeresis = 0x1257, ++ Key_Dead_Abovering = 0x1258, ++ Key_Dead_Doubleacute = 0x1259, ++ Key_Dead_Caron = 0x125a, ++ Key_Dead_Cedilla = 0x125b, ++ Key_Dead_Ogonek = 0x125c, ++ Key_Dead_Iota = 0x125d, ++ Key_Dead_Voiced_Sound = 0x125e, ++ Key_Dead_Semivoiced_Sound = 0x125f, ++ Key_Dead_Belowdot = 0x1260, ++ Key_Dead_Hook = 0x1261, ++ Key_Dead_Horn = 0x1262, ++ + Key_Space = 0x20, // 7 bit printable ASCII + Key_Any = Key_Space, + Key_Exclam = 0x21, +@@ -469,6 +550,11 @@ + Key_AsciiTilde = 0x7e, + + // Latin 1 codes adapted from X: keysymdef.h,v 1.21 94/08/28 16:17:06 ++ // ++ // This is mainly for compatibility - applications and input ++ // methods should not use the Qt keycodes between 128 and 255, ++ // but should rather use the QKeyEvent::text(). See ++ // QETWidget::translateKeyEventInternal() for more details. + + Key_nobreakspace = 0x0a0, + Key_exclamdown = 0x0a1, +--- src/kernel/qrichtext.cpp ++++ src/kernel/qrichtext.cpp +@@ -662,7 +662,7 @@ + pop(); + } + +-bool QTextCursor::place( const QPoint &p, QTextParagraph *s, bool link ) ++bool QTextCursor::place( const QPoint &p, QTextParagraph *s, bool link, bool loosePlacing, bool matchBetweenCharacters ) + { + QPoint pos( p ); + QRect r; +@@ -680,7 +680,7 @@ + str = s; + if ( pos.y() >= r.y() && pos.y() <= r.y() + r.height() ) + break; +- if ( !s->next() ) { ++ if ( loosePlacing == TRUE && !s->next() ) { + #ifdef Q_WS_MACX + pos.setX( s->rect().x() + s->rect().width() ); + #endif +@@ -721,7 +721,7 @@ + if ( pos.x() < x ) + pos.setX( x + 1 ); + int cw; +- int curpos = s->length()-1; ++ int curpos = -1; + int dist = 10000000; + bool inCustom = FALSE; + while ( i < nextLine ) { +@@ -743,14 +743,21 @@ + cpos += cw; + int d = cpos - pos.x(); + bool dm = d < 0 ? !chr->rightToLeft : chr->rightToLeft; +- if ( (QABS( d ) < dist || (dist == d && dm == TRUE )) && para->string()->validCursorPosition( i ) ) { ++ if ( ( matchBetweenCharacters == TRUE && (QABS( d ) < dist || (dist == d && dm == TRUE )) && para->string()->validCursorPosition( i ) ) || ++ ( matchBetweenCharacters == FALSE && ( d == 0 || dm == TRUE ) ) ) { + dist = QABS( d ); +- if ( !link || pos.x() >= x + chr->x ) ++ if ( !link || ( pos.x() >= x + chr->x && ( loosePlacing == TRUE || pos.x() < cpos ) ) ) + curpos = i; + } + } + i++; + } ++ if ( curpos == -1 ) { ++ if ( loosePlacing == TRUE ) ++ curpos = s->length()-1; ++ else ++ return FALSE; ++ } + setIndex( curpos ); + + #ifndef QT_NO_TEXTCUSTOMITEM +@@ -4876,6 +4883,9 @@ + tmpw = fullSelectionWidth - xleft; + painter.fillRect( xleft, y, tmpw, h, color ); + painter.drawText( xstart, y + baseLine, str, start, len, dir ); ++ // draw preedit's underline ++ if (selection == QTextDocument::IMCompositionText) ++ painter.drawLine(xstart, y + baseLine + 1, xstart + w, y + baseLine + 1); + if (selStart != start || selEnd != start + len || selWrap) + painter.restore(); + } +--- src/kernel/qrichtext_p.h ++++ src/kernel/qrichtext_p.h +@@ -362,7 +362,8 @@ + int totalOffsetY() const; // total document offset + + bool place( const QPoint &pos, QTextParagraph *s ) { return place( pos, s, FALSE ); } +- bool place( const QPoint &pos, QTextParagraph *s, bool link ); ++ bool place( const QPoint &pos, QTextParagraph *s, bool link ) { return place( pos, s, link, TRUE, TRUE ); } ++ bool place( const QPoint &pos, QTextParagraph *s, bool link, bool loosePlacing, bool matchBetweenCharacters ); + void restoreState(); + + +--- src/kernel/qt_kernel.pri ++++ src/kernel/qt_kernel.pri +@@ -34,7 +34,6 @@ + $$KERNEL_H/qimage.h \ + $$KERNEL_P/qimageformatinterface_p.h \ + $$KERNEL_H/qimageformatplugin.h \ +- $$KERNEL_P/qinputcontext_p.h \ + $$KERNEL_H/qkeycode.h \ + $$KERNEL_H/qkeysequence.h \ + $$KERNEL_H/qlayout.h \ +@@ -99,6 +98,12 @@ + $$KERNEL_CPP/qfontengine_p.h \ + $$KERNEL_CPP/qtextlayout_p.h + ++ unix:x11 { ++ HEADERS += $$KERNEL_H/qinputcontext.h ++ } else { ++ HEADERS += $$KERNEL_P/qinputcontext_p.h ++ } ++ + win32:SOURCES += $$KERNEL_CPP/qapplication_win.cpp \ + $$KERNEL_CPP/qclipboard_win.cpp \ + $$KERNEL_CPP/qcolor_win.cpp \ +@@ -130,6 +135,7 @@ + $$KERNEL_CPP/qdesktopwidget_x11.cpp \ + $$KERNEL_CPP/qeventloop_x11.cpp \ + $$KERNEL_CPP/qfont_x11.cpp \ ++ $$KERNEL_CPP/qinputcontext.cpp \ + $$KERNEL_CPP/qinputcontext_x11.cpp \ + $$KERNEL_CPP/qmotifdnd_x11.cpp \ + $$KERNEL_CPP/qpixmap_x11.cpp \ +--- src/kernel/qwidget.cpp ++++ src/kernel/qwidget.cpp +@@ -3282,8 +3282,24 @@ + if ( isActiveWindow() ) { + QWidget * prev = qApp->focus_widget; + if ( prev ) { +- if ( prev != this ) ++ // This part is never executed when Q_WS_X11? Preceding XFocusOut ++ // had already reset focus_widget when received XFocusIn ++ ++ // Don't reset input context explicitly here. Whether reset or not ++ // when focusing out is a responsibility of input methods. For ++ // example, Japanese input context should not be reset here. The ++ // context sometimes contains a whole paragraph and has minutes of ++ // lifetime different to ephemeral one in other languages. The ++ // input context should be survived until focused again. So we ++ // delegate the responsibility to input context via ++ // unfocusInputContext(). ++ if ( prev != this && prev->isInputMethodEnabled() ) { ++#if 0 + prev->resetInputContext(); ++#else ++ prev->unfocusInputContext(); ++#endif ++ } + } + #if defined(Q_WS_WIN) + else { +@@ -3291,9 +3307,8 @@ + } + #endif + qApp->focus_widget = this; +-#if defined(Q_WS_X11) +- focusInputContext(); +-#endif ++ if( isInputMethodEnabled() ) ++ focusInputContext(); + + #if defined(Q_WS_WIN) + if ( !topLevelWidget()->isPopup() ) +@@ -3341,7 +3356,11 @@ + focusProxy()->clearFocus(); + return; + } else if ( hasFocus() ) { ++#if !defined(Q_WS_X11) + resetInputContext(); ++#else ++ unfocusInputContext(); ++#endif + QWidget* w = qApp->focusWidget(); + // clear active focus + qApp->focus_widget = 0; +@@ -4667,7 +4686,13 @@ + break; + + case QEvent::MouseButtonPress: ++ // Don't reset input context here. Whether reset or not is ++ // a responsibility of input method. reset() will be ++ // called by mouseHandler() of input method if necessary ++ // via mousePressEvent() of text widgets. ++#if 0 + resetInputContext(); ++#endif + mousePressEvent( (QMouseEvent*)e ); + if ( ! ((QMouseEvent*)e)->isAccepted() ) + return FALSE; +--- src/kernel/qwidget.h ++++ src/kernel/qwidget.h +@@ -49,6 +49,10 @@ + #include "qsizepolicy.h" + #endif // QT_H + ++#if defined(Q_WS_X11) && !defined(QT_NO_IM) ++class QInputContext; ++#endif ++ + class QLayout; + struct QWExtra; + struct QTLWExtra; +@@ -535,6 +539,18 @@ + + int metric( int ) const; + ++#if defined(Q_WS_X11) ++#if !defined(QT_NO_IM_EXTENSIONS) ++ virtual QWidget *icHolderWidget(); ++#else ++ QWidget *icHolderWidget(); ++#endif ++ QInputContext *getInputContext(); ++ void changeInputContext( const QString & ); ++ void sendMouseEventToInputContext( int x, QEvent::Type type, ++ Qt::ButtonState button, ++ Qt::ButtonState state ); ++#endif + void resetInputContext(); + + virtual void create( WId = 0, bool initializeWindow = TRUE, +@@ -566,13 +582,16 @@ + + private slots: + void focusProxyDestroyed(); ++#if defined(Q_WS_X11) ++ void destroyInputContext(); ++#endif + + private: + void setFontSys( QFont *f = 0 ); + #if defined(Q_WS_X11) + void createInputContext(); +- void destroyInputContext(); + void focusInputContext(); ++ void unfocusInputContext(); + void checkChildrenDnd(); + #elif defined(Q_WS_MAC) + uint own_id : 1, macDropEnabled : 1; +@@ -644,6 +663,9 @@ + #ifndef QT_NO_LAYOUT + QLayout *lay_out; + #endif ++#if defined(Q_WS_X11) && !defined(QT_NO_IM) && !defined(QT_NO_IM_EXTENSIONS) ++ QInputContext *ic; // Input Context ++#endif + QWExtra *extra; + #if defined(Q_WS_QWS) + QRegion req_region; // Requested region +@@ -949,7 +971,9 @@ + uint dnd : 1; // DND properties installed + uint uspos : 1; // User defined position + uint ussize : 1; // User defined size +- void *xic; // XIM Input Context ++#if defined(QT_NO_IM_EXTENSIONS) ++ void *xic; // Input Context ++#endif + #endif + #if defined(Q_WS_MAC) + WindowGroupRef group; +--- src/kernel/qwidget_x11.cpp ++++ src/kernel/qwidget_x11.cpp +@@ -61,11 +61,9 @@ + bool qt_wstate_iconified( WId ); + void qt_updated_rootinfo(); + +-#ifndef QT_NO_XIM +-#include "qinputcontext_p.h" +- +-extern XIM qt_xim; +-extern XIMStyle qt_xim_style; ++#ifndef QT_NO_IM ++#include "qinputcontext.h" ++#include "qinputcontextfactory.h" + #endif + + // Paint event clipping magic +@@ -688,6 +686,10 @@ + + if ( destroyw ) + qt_XDestroyWindow( this, dpy, destroyw ); ++ ++#if !defined(QT_NO_IM_EXTENSIONS) ++ ic = 0; ++#endif + } + + +@@ -751,6 +753,16 @@ + extern void qPRCleanup( QWidget *widget ); // from qapplication_x11.cpp + if ( testWState(WState_Reparented) ) + qPRCleanup(this); ++ ++ if( this == icHolderWidget() ) { ++ destroyInputContext(); ++ } else { ++ // release previous focus information participating with ++ // preedit preservation of qic ++ QInputContext *qic = getInputContext(); ++ if ( qic ) ++ qic->releaseComposingWidget( this ); ++ } + } + } + +@@ -787,11 +799,11 @@ + XReparentWindow( x11Display(), old_winid, + RootWindow( x11Display(), x11Screen() ), 0, 0 ); + +- if ( isTopLevel() ) { +- // input contexts are associated with toplevel widgets, so we need +- // destroy the context here. if we are reparenting back to toplevel, +- // then we will have another context created, otherwise we will +- // use our new toplevel's context ++ if ( this == icHolderWidget() ) { ++ // input contexts are sometimes associated with toplevel widgets, so ++ // we need destroy the context here. if we are reparenting back to ++ // toplevel, then we may have another context created, otherwise we ++ // will use our new ic holder's context + destroyInputContext(); + } + +@@ -947,7 +959,8 @@ + language input systems. + + In the X11 version of Qt, if \a text is TRUE, this method sets the +- XIM "spot" point for complex language input handling. ++ input method focus point in the preedit (XIM "spot" point) for ++ complex language input handling. + + The font \a f is a rendering hint to the currently active input method. + If \a f is 0 the widget's font is used. +@@ -957,22 +970,15 @@ + void QWidget::setMicroFocusHint(int x, int y, int width, int height, + bool text, QFont *f ) + { +-#ifndef QT_NO_XIM ++#ifndef QT_NO_IM + if ( text ) { +- QWidget* tlw = topLevelWidget(); +- QTLWExtra *topdata = tlw->topData(); +- + // trigger input context creation if it hasn't happened already + createInputContext(); +- QInputContext *qic = (QInputContext *) topdata->xic; + +- if ( qt_xim && qic ) { +- QPoint p( x, y ); +- QPoint p2 = mapTo( topLevelWidget(), QPoint( 0, 0 ) ); +- p = mapTo( topLevelWidget(), p); +- qic->setXFontSet( f ? *f : fnt ); +- qic->setComposePosition(p.x(), p.y() + height); +- qic->setComposeArea(p2.x(), p2.y(), this->width(), this->height()); ++ QInputContext *qic = getInputContext(); ++ if(qic) { ++ QPoint gp = mapToGlobal( QPoint( x, y ) ); ++ qic->setMicroFocus(gp.x(), gp.y(), width, height, f); + } + } + #endif +@@ -1442,7 +1448,7 @@ + QWidget *tlw = topLevelWidget(); + if ( tlw->isVisible() && !tlw->topData()->embedded && !qt_deferred_map_contains(tlw) ) { + XSetInputFocus( x11Display(), tlw->winId(), RevertToNone, qt_x_time); +- focusInputContext(); ++ focusInputContext(); + } + } + +@@ -2422,13 +2428,16 @@ + + void QWidget::createTLSysExtra() + { ++#if defined(QT_NO_IM_EXTENSIONS) + // created lazily + extra->topextra->xic = 0; ++#endif + } + + void QWidget::deleteTLSysExtra() + { +- destroyInputContext(); ++ // don't destroy input context here. it will be destroyed in ++ // QWidget::destroy() destroyInputContext(); + } + + /* +@@ -2660,76 +2669,255 @@ + } + + ++/*! ++ This function returns the widget holding the QInputContext ++ instance for this widget. The instance is used for text input to ++ this widget, switching input method, etc. ++ ++ By default, this function delegates the role of returning input ++ context holder widget to QApplication::locateICHolderWidget(). ++ ++ This definition enables application developer to change the ++ mapping of widgets to QInputContext instance simply by overriding ++ QApplication::locateICHolderWidget(). ++ ++ \sa QApplication::locateICHolderWidget() ++*/ ++QWidget *QWidget::icHolderWidget() ++{ ++ return qApp->locateICHolderWidget(this); ++} ++ ++ ++/*! ++ This function returns the QInputContext instance for this widget. ++ This instance is used for text input to this widget, etc. ++ It is simply the accessor function. ++*/ ++QInputContext *QWidget::getInputContext() ++{ ++ QInputContext *qic = 0; ++ ++#if !defined(QT_NO_IM_EXTENSIONS) ++ if ( isInputMethodEnabled() ) { ++ qic = icHolderWidget()->ic; ++#else ++ { ++ // icHolderWidget is always topLevelWidget ++ QTLWExtra *topdata = icHolderWidget()->topData(); ++ qic = (QInputContext *)topdata->xic; ++#endif ++ } ++ ++ return qic; ++} ++ ++ ++/*! ++ This function replaces the QInputContext instance used for text ++ input to this widget. The \a identifierName is the identifier name ++ of newly choosed input method. ++*/ ++void QWidget::changeInputContext( const QString& identifierName ) ++{ ++ QWidget *icWidget = icHolderWidget(); ++#if !defined(QT_NO_IM_EXTENSIONS) ++ QInputContext **qicp = &icWidget->ic; ++#else ++ QInputContext **qicp = (QInputContext **)&icWidget->topData()->xic; ++#endif ++ ++ if( *qicp ) ++ delete *qicp; ++ // an input context that has the identifierName is generated. ++ QInputContext *qic = QInputContextFactory::create( identifierName, icWidget ); ++ *qicp = qic; ++ if ( qic ) { ++ QObject::connect( qic, SIGNAL(imEventGenerated(QObject *,QIMEvent *)), ++ qApp, SLOT(postIMEvent(QObject *,QIMEvent *)) ); ++ QObject::connect( qic, SIGNAL(deletionRequested()), ++ icWidget, SLOT(destroyInputContext()) ); ++ } ++} ++ ++ ++/*! ++ \internal ++ This is an internal function, you should never call this. ++ ++ This function is called to generate an input context ++ according to a configuration for default input method ++ ++ When QT_NO_IM_EXTENSIONS is not set, input context is ++ generated only when isInputMethodEnabled() returns TRUE. ++*/ + void QWidget::createInputContext() + { +- QWidget *tlw = topLevelWidget(); +- QTLWExtra *topdata = tlw->topData(); ++#if !defined(QT_NO_IM_EXTENSIONS) ++ if( !isInputMethodEnabled() || QApplication::closingDown() ) ++ return; ++#endif + +-#ifndef QT_NO_XIM +- if (qt_xim) { +- if (! topdata->xic) { +- QInputContext *qic = new QInputContext(tlw); +- topdata->xic = (void *) qic; +- } +- } else +-#endif // QT_NO_XIM +- { +- // qDebug("QWidget::createInputContext: no xim"); +- topdata->xic = 0; +- } ++ QWidget *icWidget = icHolderWidget(); ++#ifndef QT_NO_IM ++#if !defined(QT_NO_IM_EXTENSIONS) ++ QInputContext **qicp = &icWidget->ic; ++#else ++ QInputContext **qicp = (QInputContext **)&icWidget->topData()->xic; ++#endif ++ ++ if ( ! *qicp ) { ++ // an input context of the default input method is generated. ++ QInputContext *qic = QInputContextFactory::create( QApplication::defaultInputMethod(), icWidget ); ++ ++ *qicp = qic; ++ if ( qic ) { ++ QObject::connect( qic, SIGNAL(imEventGenerated(QObject *,QIMEvent *)), ++ qApp, SLOT(postIMEvent(QObject *,QIMEvent *)) ); ++ QObject::connect( qic, SIGNAL(deletionRequested()), ++ icWidget, SLOT(destroyInputContext()) ); ++ } ++ } ++#endif // QT_NO_IM + } + + ++/*! ++ \internal ++ ++ This slot is used to destroy the input context that belonging ++ to the widget itself, so icHolderWidget()->ic is not fetched. ++ ++ \sa QInputContext::deletionRequested() ++*/ + void QWidget::destroyInputContext() + { +-#ifndef QT_NO_XIM +- QInputContext *qic = (QInputContext *) extra->topextra->xic; +- delete qic; +-#endif // QT_NO_XIM +- extra->topextra->xic = 0; ++#ifndef QT_NO_IM ++#if !defined(QT_NO_IM_EXTENSIONS) ++ QInputContext **qicp = ⁣ ++#else ++ if ( ! extra || ! extra->topextra ) ++ return; ++ ++ QInputContext **qicp = (QInputContext **)&extra->topextra->xic; ++#endif ++ ++ if( *qicp ) ++ delete *qicp; ++ ++ *qicp = 0; ++#endif // QT_NO_IM + } + + + /*! +- This function is called when the user finishes input composition, +- e.g. changes focus to another widget, moves the cursor, etc. ++ This function is called when text widgets need to be neutral state to ++ execute text operations properly. See qlineedit.cpp and qtextedit.cpp as ++ example. ++ ++ Ordinary reset that along with changing focus to another widget, ++ moving the cursor, etc, is implicitly handled via ++ unfocusInputContext() because whether reset or not when such ++ situation is a responsibility of input methods. So we delegate the ++ responsibility to the input context via unfocusInputContext(). See ++ 'Preedit preservation' section of the class description of ++ QInputContext for further information. ++ ++ \sa QInputContext, unfocusInputContext(), QInputContext::unsetFocus() + */ + void QWidget::resetInputContext() + { +-#ifndef QT_NO_XIM +- if ((qt_xim_style & XIMPreeditCallbacks) && hasFocus()) { +- QWidget *tlw = topLevelWidget(); +- QTLWExtra *topdata = tlw->topData(); ++#ifndef QT_NO_IM ++ // trigger input context creation if it hasn't happened already ++ createInputContext(); ++ ++ QInputContext *qic = getInputContext(); ++ if( qic ) ++ qic->reset(); ++#endif // QT_NO_IM ++} ++ ++ ++/*! ++ \internal ++ This is an internal function, you should never call this. ++ ++ This function is called to focus associated input context. The ++ code intends to eliminate duplicate focus for the context even if ++ the context is shared between widgets ++ ++ \sa QInputContext::setFocus() ++ */ ++void QWidget::focusInputContext() ++{ ++#ifndef QT_NO_IM ++ QWidget* tlw = topLevelWidget(); + ++ if (!tlw->isPopup() || isInputMethodEnabled()) { + // trigger input context creation if it hasn't happened already + createInputContext(); + +- if (topdata->xic) { +- QInputContext *qic = (QInputContext *) topdata->xic; +- qic->reset(); ++ QInputContext *qic = getInputContext(); ++ if ( qic ) { ++ if( qic->focusWidget() != this ) { ++ qic->setFocusWidget( this ); ++ qic->setFocus(); ++ } + } + } +-#endif // QT_NO_XIM ++#endif // QT_NO_IM + } + + +-void QWidget::focusInputContext() ++/*! ++ \internal ++ This is an internal function, you should never call this. ++ ++ This function is called to remove focus from associated input ++ context. ++ ++ \sa QInputContext::unsetFocus() ++ */ ++void QWidget::unfocusInputContext() + { +-#ifndef QT_NO_XIM +- QWidget *tlw = topLevelWidget(); +- if (!tlw->isPopup() || isInputMethodEnabled()) { +- QTLWExtra *topdata = tlw->topData(); ++#ifndef QT_NO_IM ++ // trigger input context creation if it hasn't happened already ++ createInputContext(); ++ ++ QInputContext *qic = getInputContext(); ++ if ( qic ) { ++ // may be caused reset() in some input methods ++ qic->unsetFocus(); ++ qic->setFocusWidget( 0 ); ++ } ++#endif // QT_NO_IM ++} ++ + +- // trigger input context creation if it hasn't happened already +- createInputContext(); ++/*! ++ This function is called to send mouse event to associated input ++ context by derived text widgets. A derived text widget must be ++ calculate \a x as character offset at the mouse cursor in the ++ preedit. + +- if (topdata->xic) { +- QInputContext *qic = (QInputContext *) topdata->xic; +- qic->setFocus(); +- } ++ \sa QInputContext::mouseHandler() ++ */ ++void QWidget::sendMouseEventToInputContext( int x, QEvent::Type type, ++ Qt::ButtonState button, ++ Qt::ButtonState state ) ++{ ++#ifndef QT_NO_IM ++ // trigger input context creation if it hasn't happened already ++ createInputContext(); ++ ++ QInputContext *qic = getInputContext(); ++ if ( qic ) { ++ // may be causing reset() in some input methods ++ qic->mouseHandler( x, type, button, state ); + } +-#endif // QT_NO_XIM ++#endif // QT_NO_IM + } ++ + + void QWidget::setWindowOpacity(double) + { +--- src/qt.pro ++++ src/qt.pro +@@ -37,6 +37,7 @@ + TOOLS_CPP = tools + CODECS_CPP = codecs + WORKSPACE_CPP = workspace ++INPUTMETHOD_CPP = inputmethod + XML_CPP = xml + STYLES_CPP = styles + EMBEDDED_CPP = embedded +@@ -54,6 +55,7 @@ + TOOLS_H = $$TOOLS_CPP + CODECS_H = $$CODECS_CPP + WORKSPACE_H = $$WORKSPACE_CPP ++ #INPUTMETHOD_H = $$INPUTMETHOD_CPP + XML_H = $$XML_CPP + CANVAS_H = $$CANVAS_CPP + STYLES_H = $$STYLES_CPP +@@ -70,6 +72,7 @@ + TOOLS_H = $$WIN_ALL_H + CODECS_H = $$WIN_ALL_H + WORKSPACE_H = $$WIN_ALL_H ++ #INPUTMETHOD_H = $$WIN_ALL_H + XML_H = $$WIN_ALL_H + CANVAS_H = $$WIN_ALL_H + STYLES_H = $$WIN_ALL_H +@@ -98,6 +101,7 @@ + TOOLS_H = $$TOOLS_CPP + CODECS_H = $$CODECS_CPP + WORKSPACE_H = $$WORKSPACE_CPP ++ INPUTMETHOD_H = $$INPUTMETHOD_CPP + XML_H = $$XML_CPP + STYLES_H = $$STYLES_CPP + !embedded:!mac:CONFIG += x11 x11inc +@@ -112,7 +116,7 @@ + EMBEDDED_H = $$EMBEDDED_CPP + } + +-DEPENDPATH += ;$$NETWORK_H;$$KERNEL_H;$$WIDGETS_H;$$SQL_H;$$TABLE_H;$$DIALOGS_H; ++DEPENDPATH += ;$$NETWORK_H;$$KERNEL_H;$$WIDGETS_H;$$INPUTMETHOD_H;$$SQL_H;$$TABLE_H;$$DIALOGS_H; + DEPENDPATH += $$ICONVIEW_H;$$OPENGL_H;$$TOOLS_H;$$CODECS_H;$$WORKSPACE_H;$$XML_H; + DEPENDPATH += $$CANVAS_H;$$STYLES_H + embedded:DEPENDPATH += ;$$EMBEDDED_H +@@ -147,6 +151,7 @@ + include($$DIALOGS_CPP/qt_dialogs.pri) + include($$ICONVIEW_CPP/qt_iconview.pri) + include($$WORKSPACE_CPP/qt_workspace.pri) ++include($$INPUTMETHOD_CPP/qt_inputmethod.pri) + include($$NETWORK_CPP/qt_network.pri) + include($$CANVAS_CPP/qt_canvas.pri) + include($$TABLE_CPP/qt_table.pri) +--- src/tools/qfeatures.h ++++ src/tools/qfeatures.h +@@ -982,3 +982,13 @@ + #define QT_NO_WORKSPACE + #endif + ++// Input method ++#if !defined(QT_NO_IM) && (defined(QT_NO_STRINGLIST)) ++#define QT_NO_IM ++#endif ++ ++// Input method extensions ++#if !defined(QT_NO_IM_EXTENSIONS) && (defined(QT_NO_IM) || defined(QT_NO_STRINGLIST)) ++#define QT_NO_IM_EXTENSIONS ++#endif ++ +--- src/widgets/qlineedit.cpp ++++ src/widgets/qlineedit.cpp +@@ -37,6 +37,12 @@ + + #include "qlineedit.h" + #ifndef QT_NO_LINEEDIT ++ ++// Keep this position to avoid patch rejection ++#ifndef QT_NO_IM ++#include "qinputcontext.h" ++#endif ++ + #include "qpainter.h" + #include "qdrawutil.h" + #include "qfontmetrics.h" +@@ -245,12 +251,17 @@ + + // input methods + int imstart, imend, imselstart, imselend; ++ bool composeMode() const { return preeditLength(); } ++ bool hasIMSelection() const { return imSelectionLength(); } ++ int preeditLength() const { return ( imend - imstart ); } ++ int imSelectionLength() const { return ( imselend - imselstart ); } + + // complex text layout + QTextLayout textLayout; + void updateTextLayout(); + void moveCursor( int pos, bool mark = FALSE ); + void setText( const QString& txt ); ++ int xToPosInternal( int x, QTextItem::CursorPosition ) const; + int xToPos( int x, QTextItem::CursorPosition = QTextItem::BetweenCharacters ) const; + inline int visualAlignment() const { return alignment ? alignment : int( isRightToLeft() ? AlignRight : AlignLeft ); } + QRect cursorRect() const; +@@ -588,6 +599,7 @@ + return; + d->echoMode = mode; + d->updateTextLayout(); ++ setInputMethodEnabled( mode == Normal ); + update(); + } + +@@ -1419,6 +1431,8 @@ + */ + void QLineEdit::mousePressEvent( QMouseEvent* e ) + { ++ if ( sendMouseEventToInputContext( e ) ) ++ return; + if ( e->button() == RightButton ) + return; + if ( d->tripleClickTimer && ( e->pos() - d->tripleClick ).manhattanLength() < +@@ -1448,7 +1462,8 @@ + */ + void QLineEdit::mouseMoveEvent( QMouseEvent * e ) + { +- ++ if ( sendMouseEventToInputContext( e ) ) ++ return; + #ifndef QT_NO_CURSOR + if ( ( e->state() & MouseButtonMask ) == 0 ) { + if ( !d->readOnly && d->dragEnabled +@@ -1477,6 +1492,8 @@ + */ + void QLineEdit::mouseReleaseEvent( QMouseEvent* e ) + { ++ if ( sendMouseEventToInputContext( e ) ) ++ return; + #ifndef QT_NO_DRAGANDDROP + if ( e->button() == LeftButton ) { + if ( d->dndTimer ) { +@@ -1503,6 +1520,8 @@ + */ + void QLineEdit::mouseDoubleClickEvent( QMouseEvent* e ) + { ++ if ( sendMouseEventToInputContext( e ) ) ++ return; + if ( e->button() == Qt::LeftButton ) { + deselect(); + d->cursor = d->xToPos( e->pos().x() ); +@@ -1772,6 +1791,33 @@ + e->ignore(); + } + ++ ++/*! ++ This function is not intended as polymorphic usage. Just a shared code ++ fragment that calls QWidget::sendMouseEventToInputContext() easily for this ++ class. ++ */ ++bool QLineEdit::sendMouseEventToInputContext( QMouseEvent *e ) ++{ ++#ifndef QT_NO_IM ++ if ( d->composeMode() ) { ++ int cursor = d->xToPosInternal( e->pos().x(), QTextItem::OnCharacters ); ++ int mousePos = cursor - d->imstart; ++ if ( mousePos >= 0 && mousePos < d->preeditLength() ) { ++ QWidget::sendMouseEventToInputContext( mousePos, e->type(), ++ e->button(), e->state() ); ++ } else if ( e->type() != QEvent::MouseMove ) { ++ // send button events on out of preedit ++ QWidget::sendMouseEventToInputContext( -1, e->type(), ++ e->button(), e->state() ); ++ } ++ return TRUE; ++ } ++#endif ++ return FALSE; ++} ++ ++ + /*! \reimp + */ + void QLineEdit::imStartEvent( QIMEvent *e ) +@@ -1832,6 +1878,8 @@ + } + if( !hasSelectedText() || style().styleHint( QStyle::SH_BlinkCursorWhenTextSelected ) ) + d->setCursorVisible( TRUE ); ++ if ( d->hasIMSelection() ) ++ d->cursor = d->imselstart; + d->updateMicroFocusHint(); + } + +@@ -1916,6 +1964,14 @@ + } else if (d->hscroll < 0) { + d->hscroll = 0; + } ++ // This updateMicroFocusHint() is corresponding to update() at ++ // IMCompose event. Although the function is invoked from various ++ // other points, some situations such as "candidate selection on ++ // AlignHCenter'ed text" need this invocation because ++ // updateMicroFocusHint() requires updated contentsRect(), and ++ // there are no other chances in such situation that invoke the ++ // function. ++ d->updateMicroFocusHint(); + // the y offset is there to keep the baseline constant in case we have script changes in the text. + QPoint topLeft = lineRect.topLeft() - QPoint(d->hscroll, d->ascent-fm.ascent()); + +@@ -1956,7 +2012,7 @@ + } + + // input method edit area +- if ( d->imstart < d->imend && (last >= d->imstart && first < d->imend ) ) { ++ if ( d->composeMode() && (last >= d->imstart && first < d->imend ) ) { + QRect highlight = QRect( QPoint( tix + ti.cursorToX( QMAX( d->imstart - first, 0 ) ), lineRect.top() ), + QPoint( tix + ti.cursorToX( QMIN( d->imend - first, last - first + 1 ) )-1, lineRect.bottom() ) ).normalize(); + p->save(); +@@ -1969,11 +2025,16 @@ + imCol.setHsv( h1, s1, ( v1 + v2 ) / 2 ); + p->fillRect( highlight, imCol ); + p->drawTextItem( topLeft, ti, textflags ); ++ // draw preedit's underline ++ if (d->imend - d->imstart > 0) { ++ p->setPen( cg.text() ); ++ p->drawLine( highlight.bottomLeft(), highlight.bottomRight() ); ++ } + p->restore(); + } + + // input method selection +- if ( d->imselstart < d->imselend && (last >= d->imselstart && first < d->imselend ) ) { ++ if ( d->hasIMSelection() && (last >= d->imselstart && first < d->imselend ) ) { + QRect highlight = QRect( QPoint( tix + ti.cursorToX( QMAX( d->imselstart - first, 0 ) ), lineRect.top() ), + QPoint( tix + ti.cursorToX( QMIN( d->imselend - first, last - first + 1 ) )-1, lineRect.bottom() ) ).normalize(); + p->save(); +@@ -2001,7 +2062,11 @@ + } + + // draw cursor +- if ( d->cursorVisible && !supressCursor ) { ++ // ++ // Asian users regard IM selection text as cursor on candidate ++ // selection phase of input method, so ordinary cursor should be ++ // invisible if IM selection text exists. ++ if ( d->cursorVisible && !supressCursor && !d->hasIMSelection() ) { + QPoint from( topLeft.x() + cix, lineRect.top() ); + QPoint to = from + QPoint( 0, lineRect.height() ); + p->drawLine( from, to ); +@@ -2116,6 +2181,10 @@ + void QLineEdit::contextMenuEvent( QContextMenuEvent * e ) + { + #ifndef QT_NO_POPUPMENU ++#ifndef QT_NO_IM ++ if ( d->composeMode() ) ++ return; ++#endif + d->separate(); + QPopupMenu *menu = createPopupMenu(); + if (!menu) +@@ -2169,6 +2238,13 @@ + + ACCEL_KEY( A ) + #endif + ); ++ ++#ifndef QT_NO_IM ++ QInputContext *qic = getInputContext(); ++ if ( qic ) ++ qic->addMenusTo( popup ); ++#endif ++ + popup->setItemEnabled( id - IdUndo, d->isUndoAvailable() ); + popup->setItemEnabled( id - IdRedo, d->isRedoAvailable() ); + #ifndef QT_NO_CLIPBOARD +@@ -2302,7 +2378,7 @@ + textLayout.endLine(0, 0, Qt::AlignLeft|Qt::SingleLine, &ascent); + } + +-int QLineEditPrivate::xToPos( int x, QTextItem::CursorPosition betweenOrOn ) const ++int QLineEditPrivate::xToPosInternal( int x, QTextItem::CursorPosition betweenOrOn ) const + { + x-= q->contentsRect().x() - hscroll + innerMargin; + for ( int i = 0; i < textLayout.numItems(); ++i ) { +@@ -2311,7 +2387,13 @@ + if ( x >= tir.left() && x <= tir.right() ) + return ti.xToCursor( x - tir.x(), betweenOrOn ) + ti.from(); + } +- return x < 0 ? 0 : text.length(); ++ return x < 0 ? -1 : text.length(); ++} ++ ++int QLineEditPrivate::xToPos( int x, QTextItem::CursorPosition betweenOrOn ) const ++{ ++ int pos = xToPosInternal( x, betweenOrOn ); ++ return ( pos < 0 ) ? 0 : pos; + } + + +@@ -2332,9 +2414,19 @@ + + void QLineEditPrivate::updateMicroFocusHint() + { ++ // To reduce redundant microfocus update notification, we remember ++ // the old rect and update the microfocus if actual update is ++ // required. The rect o is intentionally static because some ++ // notifyee requires the microfocus information as global update ++ // rather than per notifyee update to place shared widget around ++ // microfocus. ++ static QRect o; + if ( q->hasFocus() ) { +- QRect r = cursorRect(); +- q->setMicroFocusHint( r.x(), r.y(), r.width(), r.height() ); ++ QRect r = cursorRect(); ++ if ( o != r ) { ++ o = r; ++ q->setMicroFocusHint( r.x(), r.y(), r.width(), r.height() ); ++ } + } + } + +--- src/widgets/qlineedit.h ++++ src/widgets/qlineedit.h +@@ -196,6 +196,7 @@ + void dropEvent( QDropEvent * ); + #endif + void contextMenuEvent( QContextMenuEvent * ); ++ bool sendMouseEventToInputContext( QMouseEvent *e ); + virtual QPopupMenu *createPopupMenu(); + void windowActivationChange( bool ); + #ifndef QT_NO_COMPAT +--- src/widgets/qtextedit.cpp ++++ src/widgets/qtextedit.cpp +@@ -39,6 +39,11 @@ + + #ifndef QT_NO_TEXTEDIT + ++// Keep this position to avoid patch rejection ++#ifndef QT_NO_IM ++#include "qinputcontext.h" ++#endif ++ + #include "../kernel/qrichtext_p.h" + #include "qpainter.h" + #include "qpen.h" +@@ -108,6 +113,8 @@ + int id[ 7 ]; + int preeditStart; + int preeditLength; ++ bool composeMode() const { return ( preeditLength > 0 ); } ++ + uint ensureCursorVisibleInShowEvent : 1; + uint tabChangesFocus : 1; + QString scrollToAnchor; // used to deferr scrollToAnchor() until the show event when we are resized +@@ -1078,6 +1085,10 @@ + l += v; + } + } ++ ++ // This invocation is required to follow dragging of active window ++ // by the showed candidate window. ++ updateMicroFocusHint(); + } + + /*! +@@ -1553,6 +1564,35 @@ + } + + /*! ++ This function is not intended as polymorphic usage. Just a shared code ++ fragment that calls QWidget::sendMouseEventToInputContext() easily for this ++ class. ++ */ ++bool QTextEdit::sendMouseEventToInputContext( QMouseEvent *e ) ++{ ++#ifndef QT_NO_IM ++ if ( d->composeMode() ) { ++ QTextCursor c( doc ); ++ if ( c.place( e->pos(), doc->firstParagraph(), FALSE, FALSE, FALSE ) ) { ++ int mousePos = c.index() - d->preeditStart; ++ if ( cursor->globalY() == c.globalY() && ++ mousePos >= 0 && mousePos < d->preeditLength ) { ++ QWidget::sendMouseEventToInputContext( mousePos, e->type(), ++ e->button(), e->state() ); ++ } ++ } else if ( e->type() != QEvent::MouseMove ) { ++ // send button events on out of preedit ++ QWidget::sendMouseEventToInputContext( -1, e->type(), ++ e->button(), e->state() ); ++ } ++ return TRUE; ++ } ++#endif ++ return FALSE; ++} ++ ++ ++/*! + \reimp + */ + void QTextEdit::imStartEvent( QIMEvent *e ) +@@ -1582,11 +1622,17 @@ + doc->removeSelection( QTextDocument::IMCompositionText ); + doc->removeSelection( QTextDocument::IMSelectionText ); + +- if ( d->preeditLength > 0 && cursor->paragraph() ) ++ if ( d->composeMode() && cursor->paragraph() ) + cursor->paragraph()->remove( d->preeditStart, d->preeditLength ); + cursor->setIndex( d->preeditStart ); + d->preeditLength = e->text().length(); +- insert( e->text() ); ++ ++ int sellen = e->selectionLength(); ++ uint insertionFlags = CheckNewLines | RemoveSelected | AsIMCompositionText; ++ if ( sellen > 0 ) { ++ insertionFlags |= WithIMSelection; ++ } ++ insert( e->text(), insertionFlags ); + // insert can trigger an imEnd event as it emits a textChanged signal, so better + // be careful + if(d->preeditStart != -1) { +@@ -1598,14 +1644,20 @@ + + cursor->setIndex( d->preeditStart + e->cursorPos() ); + +- int sellen = e->selectionLength(); + if ( sellen > 0 ) { + cursor->setIndex( d->preeditStart + e->cursorPos() + sellen ); + c = *cursor; + cursor->setIndex( d->preeditStart + e->cursorPos() ); + doc->setSelectionStart( QTextDocument::IMSelectionText, *cursor ); + doc->setSelectionEnd( QTextDocument::IMSelectionText, c ); ++#if 0 ++ // Disabled for Asian input method that shows candidate ++ // window. This behavior is same as Qt/E 2.3.7 which supports ++ // Asian input methods. Asian input methods need start point ++ // of IM selection text to place candidate window as adjacent ++ // to the selection text. + cursor->setIndex( d->preeditStart + d->preeditLength ); ++#endif + } + } + +@@ -1629,11 +1681,12 @@ + if (undoRedoInfo.type == UndoRedoInfo::IME) + undoRedoInfo.type = UndoRedoInfo::Invalid; + +- if ( d->preeditLength > 0 && cursor->paragraph() ) ++ if ( d->composeMode() && cursor->paragraph() ) + cursor->paragraph()->remove( d->preeditStart, d->preeditLength ); + if ( d->preeditStart >= 0 ) { + cursor->setIndex( d->preeditStart ); +- insert( e->text() ); ++ //TODO: Qt 4 we should use the new virtual insert function ++ insert( e->text(), FALSE ); + } + d->preeditStart = d->preeditLength = -1; + +@@ -2124,6 +2177,13 @@ + isReadOnly() ) + return; + ++ // Asian users regard selection text as cursor on candidate ++ // selection phase of input method, so ordinary cursor should be ++ // invisible if IM selection text exists. ++ if ( doc->hasSelection( QTextDocument::IMSelectionText ) ) { ++ visible = FALSE; ++ } ++ + QPainter p( viewport() ); + QRect r( cursor->topParagraph()->rect() ); + cursor->paragraph()->setChanged( TRUE ); +@@ -2198,6 +2258,9 @@ + } + #endif + ++ if ( sendMouseEventToInputContext( e ) ) ++ return; ++ + if ( d->trippleClickTimer->isActive() && + ( e->globalPos() - d->trippleClickPoint ).manhattanLength() < + QApplication::startDragDistance() ) { +@@ -2303,7 +2366,9 @@ + return; + } + #endif +- if ( mousePressed ) { ++ if ( sendMouseEventToInputContext( e ) ) { ++ // don't return from here to avoid cursor vanishing ++ } else if ( mousePressed ) { + #ifndef QT_NO_DRAGANDDROP + if ( mightStartDrag ) { + dragStartTimer->stop(); +@@ -2360,7 +2425,7 @@ + + void QTextEdit::contentsMouseReleaseEvent( QMouseEvent * e ) + { +- if ( !inDoubleClick ) { // could be the release of a dblclick ++ if ( !inDoubleClick && !d->composeMode() ) { // could be the release of a dblclick + int para = 0; + int index = charAt( e->pos(), ¶ ); + emit clicked( para, index ); +@@ -2371,6 +2436,8 @@ + return; + } + #endif ++ if ( sendMouseEventToInputContext( e ) ) ++ return; + QTextCursor oldCursor = *cursor; + if ( scrollTimer->isActive() ) + scrollTimer->stop(); +@@ -2464,7 +2531,7 @@ + + void QTextEdit::contentsMouseDoubleClickEvent( QMouseEvent * e ) + { +- if ( e->button() != Qt::LeftButton ) { ++ if ( e->button() != Qt::LeftButton && !d->composeMode() ) { + e->ignore(); + return; + } +@@ -2495,6 +2562,9 @@ + } else + #endif + { ++ if ( sendMouseEventToInputContext( e ) ) ++ return; ++ + QTextCursor c1 = *cursor; + QTextCursor c2 = *cursor; + #if defined(Q_OS_MAC) +@@ -2670,10 +2740,15 @@ + */ + void QTextEdit::contentsContextMenuEvent( QContextMenuEvent *e ) + { ++ e->accept(); ++#ifndef QT_NO_IM ++ if ( d->composeMode() ) ++ return; ++#endif ++ + clearUndoRedo(); + mousePressed = FALSE; + +- e->accept(); + #ifndef QT_NO_POPUPMENU + QGuardedPtr that = this; + QGuardedPtr popup = createPopupMenu( e->pos() ); +@@ -2823,6 +2898,12 @@ + void QTextEdit::updateMicroFocusHint() + { + QTextCursor c( *cursor ); ++#if 0 ++ // Disabled for Asian input method that shows candidate ++ // window. This behavior is same as Qt/E 2.3.7 which supports ++ // Asian input methods. Asian input methods need start point of IM ++ // selection text to place candidate window as adjacent to the ++ // selection text. + if ( d->preeditStart != -1 ) { + c.setIndex( d->preeditStart ); + if(doc->hasSelection(QTextDocument::IMSelectionText)) { +@@ -2831,7 +2912,8 @@ + c.setIndex(index); + } + } +- ++#endif ++ + if ( hasFocus() || viewport()->hasFocus() ) { + int h = c.paragraph()->lineHeightOfChar( cursor->index() ); + if ( !readonly ) { +@@ -2995,6 +3077,8 @@ + bool indent = insertionFlags & RedoIndentation; + bool checkNewLine = insertionFlags & CheckNewLines; + bool removeSelected = insertionFlags & RemoveSelected; ++ bool imComposition = insertionFlags & AsIMCompositionText; ++ bool imSelection = insertionFlags & WithIMSelection; + QString txt( text ); + drawCursor( FALSE ); + if ( !isReadOnly() && doc->hasSelection( QTextDocument::Standard ) && removeSelected ) +@@ -3034,7 +3118,10 @@ + formatMore(); + repaintChanged(); + ensureCursorVisible(); +- drawCursor( TRUE ); ++ // Asian users regard selection text as cursor on candidate ++ // selection phase of input method, so ordinary cursor should be ++ // invisible if IM selection text exists. ++ drawCursor( !imSelection ); + + if ( undoEnabled && !isReadOnly() && undoRedoInfo.type != UndoRedoInfo::IME ) { + undoRedoInfo.d->text += txt; +@@ -3056,7 +3143,13 @@ + doc->setSelectionEnd( QTextDocument::Standard, *cursor ); + repaintChanged(); + } +- updateMicroFocusHint(); ++ // updateMicroFocusHint() should not be invoked here when this ++ // function is invoked from imComposeEvent() because cursor ++ // postion is incorrect yet. imComposeEvent() invokes ++ // updateMicroFocusHint() later. ++ if ( !imComposition ) { ++ updateMicroFocusHint(); ++ } + setModified(); + emit textChanged(); + } +@@ -5568,6 +5661,13 @@ + #else + d->id[ IdSelectAll ] = popup->insertItem( tr( "Select All" ) + ACCEL_KEY( A ) ); + #endif ++ ++#ifndef QT_NO_IM ++ QInputContext *qic = getInputContext(); ++ if ( qic ) ++ qic->addMenusTo( popup ); ++#endif ++ + popup->setItemEnabled( d->id[ IdUndo ], !isReadOnly() && doc->commands()->isUndoAvailable() ); + popup->setItemEnabled( d->id[ IdRedo ], !isReadOnly() && doc->commands()->isRedoAvailable() ); + #ifndef QT_NO_CLIPBOARD +--- src/widgets/qtextedit.h ++++ src/widgets/qtextedit.h +@@ -211,7 +211,9 @@ + enum TextInsertionFlags { + RedoIndentation = 0x0001, + CheckNewLines = 0x0002, +- RemoveSelected = 0x0004 ++ RemoveSelected = 0x0004, ++ AsIMCompositionText = 0x0008, // internal use ++ WithIMSelection = 0x0010 // internal use + }; + + QTextEdit( const QString& text, const QString& context = QString::null, +@@ -439,6 +441,7 @@ + void contentsDropEvent( QDropEvent *e ); + #endif + void contentsContextMenuEvent( QContextMenuEvent *e ); ++ bool sendMouseEventToInputContext( QMouseEvent *e ); + bool focusNextPrevChild( bool next ); + QTextDocument *document() const; + QTextCursor *textCursor() const; +--- tools/qtconfig/mainwindowbase.ui ++++ tools/qtconfig/mainwindowbase.ui +@@ -1016,6 +1016,19 @@ + 0 + + ++ ++ ++ inputMethodLabel ++ ++ ++ Default Input Method: ++ ++ ++ ++ ++ inputMethodCombo ++ ++ + + + spacer5 +@@ -1029,7 +1042,7 @@ + + + 20 +- 40 ++ 30 + + + +@@ -1705,6 +1718,12 @@ + somethingModified() + + ++ inputMethodCombo ++ activated(int) ++ MainWindowBase ++ somethingModified() ++ ++ + gstylecombo + activated(const QString&) + MainWindowBase +--- tools/qtconfig/mainwindow.cpp ++++ tools/qtconfig/mainwindow.cpp +@@ -27,6 +27,7 @@ + #include + #include + #include ++#include + #include + #include + #include +@@ -361,13 +362,73 @@ + + rtlExtensions->setChecked( settings.readBoolEntry( "/qt/useRtlExtensions", FALSE ) ); + +-#ifdef Q_WS_X11 ++#if defined(Q_WS_X11) + inputStyle->setCurrentText( settings.readEntry( "/qt/XIMInputStyle", trUtf8( "On The Spot" ) ) ); + #else + inputStyle->hide(); + inputStyleLabel->hide(); + #endif + ++#if defined(Q_WS_X11) && !defined(QT_NO_IM_EXTENSIONS) ++ /* ++ This code makes it possible to set up default input method. ++ ++ The list of identifier names of input method which can be used ++ is acquired using QInputContextFactory::keys(). And it is ++ translated to display name and set to inputMethodCombo which ++ displays the list of input method. ++ */ ++ inputMethodIdentifiers = QInputContextFactory::keys(); ++ QStringList imDispNames; ++ { ++ // input method switcher should named with "imsw-" prefix to ++ // prevent to be listed in ordinary input method list. ++ QStringList::Iterator imIt = inputMethodIdentifiers.begin(); ++ while (imIt != inputMethodIdentifiers.end()) { ++ if ((*imIt).find("imsw-") == 0) ++ imIt = inputMethodIdentifiers.remove(imIt); ++ else ++ imIt++; ++ } ++ // we should not sort the list ++ //inputMethodIdentifiers.sort(); ++ for (imIt = inputMethodIdentifiers.begin(); ++ imIt != inputMethodIdentifiers.end(); ++ imIt++) { ++ QString dispName = QInputContextFactory::displayName(*imIt); ++ if (dispName.isNull() || dispName.isEmpty()) ++ dispName = *imIt; ++ imDispNames << dispName; ++ } ++ } ++ //inputMethodCombo->insertStringList(inputMethodIdentifiers); ++ inputMethodCombo->insertStringList(imDispNames); ++ ++ /* ++ input method set up as a default in the past is chosen. ++ If nothing is set up, default input method in the platform is chosen. ++ */ ++ // default input method is XIM in X11. ++ QString currentIM = settings.readEntry("/qt/DefaultInputMethod", "xim"); ++ { ++ int index = inputMethodIdentifiers.findIndex(currentIM); ++ // set up Selected input method. ++ if (0 <= index && index < inputMethodIdentifiers.count()) { ++ inputMethodCombo->setCurrentItem(index); ++ } else { ++ // Give up. this part is executed when specified IM is not ++ // installed. ++ QString dispName = tr("Unknown Input Method") + " (" + currentIM + ")"; ++ inputMethodCombo->insertItem(dispName); ++ inputMethodCombo->setCurrentItem(inputMethodCombo->count() - 1); ++ inputMethodIdentifiers << currentIM; ++ } ++ } ++#else ++ inputMethodCombo->hide(); ++ inputMethodLabel->hide(); ++#endif ++ + fontembeddingcheckbox->setChecked( settings.readBoolEntry("/qt/embedFonts", TRUE) ); + fontpaths = settings.readListEntry("/qt/fontPath", ':'); + fontpathlistbox->insertStringList(fontpaths); +@@ -444,6 +505,13 @@ + else if ( style == trUtf8( "Root" ) ) + str = "Root"; + settings.writeEntry( "/qt/XIMInputStyle", inputStyle->currentText() ); ++ ++#if !defined(QT_NO_IM_EXTENSIONS) ++ QString imSwitcher = settings.readEntry("/qt/DefaultInputMethodSwitcher", "imsw-multi"); ++ settings.writeEntry("/qt/DefaultInputMethodSwitcher", imSwitcher); ++ int imIndex = inputMethodCombo->currentItem(); ++ settings.writeEntry("/qt/DefaultInputMethod", inputMethodIdentifiers[imIndex]); ++#endif + #endif + + QStringList effects; +--- tools/qtconfig/mainwindow.h ++++ tools/qtconfig/mainwindow.h +@@ -83,6 +83,7 @@ + QPalette editPalette, previewPalette; + QStyle *previewstyle; + QStringList fontpaths; ++ QStringList inputMethodIdentifiers; + bool modified; + }; + diff --git a/opensuse/core/qt3/qt.patch b/opensuse/core/qt3/qt.patch new file mode 100644 index 000000000..fb236265a --- /dev/null +++ b/opensuse/core/qt3/qt.patch @@ -0,0 +1,270 @@ +--- src/dialogs/qcolordialog.cpp ++++ src/dialogs/qcolordialog.cpp +@@ -60,6 +60,10 @@ + QColor macGetColor( const QColor& initial, QWidget *parent, const char *name ); + #endif + ++#ifdef Q_WS_X11 ++#include "private/qtkdeintegration_x11_p.h" ++#endif ++ + //////////// QWellArray BEGIN + + struct QWellArrayData; +@@ -1478,7 +1482,10 @@ + QColor QColorDialog::getColor( const QColor& initial, QWidget *parent, + const char *name ) + { +-#if defined(Q_WS_MAC) ++#if defined(Q_WS_X11) ++ if( QKDEIntegration::enabled()) ++ return QKDEIntegration::getColor( initial, parent, name ); ++#elif defined(Q_WS_MAC) + return macGetColor(initial, parent, name); + #endif + +@@ -1516,6 +1523,13 @@ + QWidget *parent, const char* name ) + { + #if defined(Q_WS_MAC) ++ if( QKDEIntegration::enabled()) { ++ QColor color = QKDEIntegration::getColor( QColor( initial ), parent, name ); ++ if( ok ) ++ *ok = color.isValid(); ++ return color.rgba(); ++ } ++#elif defined(Q_WS_MAC) + return macGetRgba(initial, ok, parent, name); + #endif + +--- src/dialogs/qfiledialog.cpp ++++ src/dialogs/qfiledialog.cpp +@@ -92,6 +92,10 @@ + #include "qvbox.h" + #include "qwidgetstack.h" + ++#ifdef Q_WS_X11 ++#include "private/qtkdeintegration_x11_p.h" ++#endif ++ + #ifdef Q_WS_WIN + #ifdef QT_THREAD_SUPPORT + # include +@@ -3464,7 +3468,11 @@ + if ( workingDirectory->isNull() ) + *workingDirectory = ::toRootIfNotExists( QDir::currentDirPath() ); + +-#if defined(Q_WS_WIN) ++#if defined(Q_WS_X11) ++ if ( qt_use_native_dialogs && QKDEIntegration::enabled()) ++ return QKDEIntegration::getOpenFileNames( filter, workingDirectory, parent, name, ++ caption, selectedFilter, false ).first(); ++#elif defined(Q_WS_WIN) + if ( qt_use_native_dialogs && qApp->style().styleHint( QStyle::SH_GUIStyle ) == WindowsStyle ) + return winGetOpenFileName( initialSelection, filter, workingDirectory, + parent, name, caption, selectedFilter ); +@@ -3585,7 +3593,11 @@ + if ( workingDirectory->isNull() ) + *workingDirectory = ::toRootIfNotExists( QDir::currentDirPath() ); + +-#if defined(Q_WS_WIN) ++#if defined(Q_WS_X11) ++ if ( qt_use_native_dialogs && QKDEIntegration::enabled()) ++ return QKDEIntegration::getSaveFileName( initialSelection, filter, workingDirectory, ++ parent, name, caption, selectedFilter ); ++#elif defined(Q_WS_WIN) + if ( qt_use_native_dialogs && qApp->style().styleHint( QStyle::SH_GUIStyle ) == WindowsStyle ) + return winGetSaveFileName( initialSelection, filter, workingDirectory, + parent, name, caption, selectedFilter ); +@@ -4475,7 +4487,17 @@ + if ( workingDirectory ) + wd = *workingDirectory; + +-#if defined(Q_WS_WIN) ++#if defined(Q_WS_X11) ++ QString initialDir; ++ if ( !dir.isEmpty() ) { ++ QUrlOperator u( dir ); ++ if ( QFileInfo( u.path() ).isDir() ) ++ initialDir = dir; ++ } else ++ initialDir = QString::null; ++ if ( qt_use_native_dialogs && QKDEIntegration::enabled()) ++ return QKDEIntegration::getExistingDirectory( initialDir, parent, name, caption ); ++#elif defined(Q_WS_WIN) + QString initialDir; + if ( !dir.isEmpty() ) { + QUrlOperator u( dir ); +@@ -5636,7 +5658,10 @@ + } + } + +-#if defined(Q_WS_WIN) ++#if defined(Q_WS_X11) ++ if ( qt_use_native_dialogs && QKDEIntegration::enabled()) ++ return QKDEIntegration::getOpenFileNames( filter, workingDirectory, parent, name, caption, selectedFilter, true ); ++#elif defined(Q_WS_WIN) + if ( qt_use_native_dialogs && qApp->style().styleHint( QStyle::SH_GUIStyle ) == WindowsStyle ) + return winGetOpenFileNames( filter, workingDirectory, parent, name, caption, selectedFilter ); + #elif defined(Q_WS_MAC) +--- src/dialogs/qfontdialog.cpp ++++ src/dialogs/qfontdialog.cpp +@@ -56,6 +56,10 @@ + #include + #include + ++#ifdef Q_WS_X11 ++#include "private/qtkdeintegration_x11_p.h" ++#endif ++ + /*! + \class QFontDialog qfontdialog.h + \ingroup dialogs +@@ -384,9 +388,15 @@ + return getFont( ok, 0, parent, name ); + } + ++extern bool qt_use_native_dialogs; ++ + QFont QFontDialog::getFont( bool *ok, const QFont *def, + QWidget *parent, const char* name) + { ++#if defined(Q_WS_X11) ++ if ( qt_use_native_dialogs && QKDEIntegration::enabled()) ++ return QKDEIntegration::getFont( ok, def, parent, name ); ++#endif + QFont result; + if ( def ) + result = *def; +--- src/dialogs/qmessagebox.cpp ++++ src/dialogs/qmessagebox.cpp +@@ -54,6 +54,12 @@ + #endif + + ++#ifdef Q_WS_X11 ++#include "private/qtkdeintegration_x11_p.h" ++#endif ++ ++extern bool qt_use_native_dialogs; ++ + // Internal class - don't touch + + class QMessageBoxLabel : public QLabel +@@ -1110,6 +1116,10 @@ + const QString& caption, const QString& text, + int button0, int button1, int button2 ) + { ++#if defined(Q_WS_X11) ++ if ( qt_use_native_dialogs && QKDEIntegration::enabled()) ++ return QKDEIntegration::information( parent, caption, text, button0, button1, button2 ); ++#endif + QMessageBox *mb = new QMessageBox( caption, text, Information, + button0, button1, button2, + parent, "qt_msgbox_information", TRUE, +@@ -1157,6 +1167,10 @@ + const QString& caption, const QString& text, + int button0, int button1, int button2 ) + { ++#if defined(Q_WS_X11) ++ if ( qt_use_native_dialogs && QKDEIntegration::enabled()) ++ return QKDEIntegration::question( parent, caption, text, button0, button1, button2 ); ++#endif + QMessageBox *mb = new QMessageBox( caption, text, Question, + button0, button1, button2, + parent, "qt_msgbox_information", TRUE, +@@ -1205,6 +1219,10 @@ + const QString& caption, const QString& text, + int button0, int button1, int button2 ) + { ++#if defined(Q_WS_X11) ++ if ( qt_use_native_dialogs && QKDEIntegration::enabled()) ++ return QKDEIntegration::warning( parent, caption, text, button0, button1, button2 ); ++#endif + QMessageBox *mb = new QMessageBox( caption, text, Warning, + button0, button1, button2, + parent, "qt_msgbox_warning", TRUE, +@@ -1253,6 +1271,10 @@ + const QString& caption, const QString& text, + int button0, int button1, int button2 ) + { ++#if defined(Q_WS_X11) ++ if ( qt_use_native_dialogs && QKDEIntegration::enabled()) ++ return QKDEIntegration::critical( parent, caption, text, button0, button1, button2 ); ++#endif + QMessageBox *mb = new QMessageBox( caption, text, Critical, + button0, button1, button2, + parent, "qt_msgbox_critical", TRUE, +@@ -1400,6 +1422,11 @@ + int defaultButtonNumber, + int escapeButtonNumber ) + { ++#if defined(Q_WS_X11) ++ if ( qt_use_native_dialogs && QKDEIntegration::enabled()) ++ return QKDEIntegration::information( parent, caption, text, ++ button0Text, button1Text, button2Text, defaultButtonNumber, escapeButtonNumber ); ++#endif + return textBox( parent, Information, caption, text, + button0Text, button1Text, button2Text, + defaultButtonNumber, escapeButtonNumber ); +@@ -1442,6 +1469,11 @@ + int defaultButtonNumber, + int escapeButtonNumber ) + { ++#if defined(Q_WS_X11) ++ if ( qt_use_native_dialogs && QKDEIntegration::enabled()) ++ return QKDEIntegration::question( parent, caption, text, ++ button0Text, button1Text, button2Text, defaultButtonNumber, escapeButtonNumber ); ++#endif + return textBox( parent, Question, caption, text, + button0Text, button1Text, button2Text, + defaultButtonNumber, escapeButtonNumber ); +@@ -1486,6 +1518,11 @@ + int defaultButtonNumber, + int escapeButtonNumber ) + { ++#if defined(Q_WS_X11) ++ if ( qt_use_native_dialogs && QKDEIntegration::enabled()) ++ return QKDEIntegration::warning( parent, caption, text, ++ button0Text, button1Text, button2Text, defaultButtonNumber, escapeButtonNumber ); ++#endif + return textBox( parent, Warning, caption, text, + button0Text, button1Text, button2Text, + defaultButtonNumber, escapeButtonNumber ); +@@ -1526,6 +1563,11 @@ + int defaultButtonNumber, + int escapeButtonNumber ) + { ++#if defined(Q_WS_X11) ++ if ( qt_use_native_dialogs && QKDEIntegration::enabled()) ++ return QKDEIntegration::critical( parent, caption, text, ++ button0Text, button1Text, button2Text, defaultButtonNumber, escapeButtonNumber ); ++#endif + return textBox( parent, Critical, caption, text, + button0Text, button1Text, button2Text, + defaultButtonNumber, escapeButtonNumber ); +--- src/kernel/qt.h ++++ src/kernel/qt.h +@@ -313,6 +313,10 @@ + #endif // Private headers + + ++#ifdef Q_WS_X11 ++#include "private/qtkdeintegration_x11_p.h" ++#endif ++ + #ifdef Q_WS_MAC + #include + #include +--- src/kernel/qt_x11.pri ++++ src/kernel/qt_x11.pri +@@ -10,6 +10,9 @@ + + SOURCES += $$KERNEL_CPP/qtaddons_x11.cpp + PRECOMPILED_HEADER = kernel/qt_pch.h ++ ++ SOURCES += $$KERNEL_CPP/qtkdeintegration_x11.cpp ++ HEADERS += $$KERNEL_H/qtkdeintegration_x11_p.h + } + + nas { diff --git a/opensuse/core/qt3/qt3-3.3.8b-translations.tar.bz2 b/opensuse/core/qt3/qt3-3.3.8b-translations.tar.bz2 new file mode 100644 index 000000000..a94839aa5 Binary files /dev/null and b/opensuse/core/qt3/qt3-3.3.8b-translations.tar.bz2 differ diff --git a/opensuse/core/qt3/qt3-arm-gcc4.patch b/opensuse/core/qt3/qt3-arm-gcc4.patch new file mode 100644 index 000000000..d9f38f547 --- /dev/null +++ b/opensuse/core/qt3/qt3-arm-gcc4.patch @@ -0,0 +1,22 @@ +--- src/tools/qglobal.h ++++ src/tools/qglobal.h +@@ -317,7 +317,7 @@ + supposedly know what you are doing.) */ + # if (defined(__arm__) || defined(__ARMEL__)) && !defined(QT_MOC_CPP) + # define Q_PACKED __attribute__ ((packed)) +-# if __GNUC__ == 3 && __GNUC_MINOR__ >= 4 ++# if (__GNUC__ == 3 && __GNUC_MINOR__ >= 4) || __GNUC__ > 3 + # define Q_NO_PACKED_REFERENCE + # endif + # endif +--- src/tools/qstring.h ++++ src/tools/qstring.h +@@ -194,7 +194,7 @@ + char latin1() const { return ucs > 0xff ? 0 : (char) ucs; } + ushort unicode() const { return ucs; } + #ifdef Q_NO_PACKED_REFERENCE +- ushort &unicode() { return *(&ucs); } ++ ushort &unicode() { return *((ushort*)&ucs); } + #else + ushort &unicode() { return ucs; } + #endif diff --git a/opensuse/core/qt3/qt3-devel-doc.changes b/opensuse/core/qt3/qt3-devel-doc.changes new file mode 100644 index 000000000..db0df1efa --- /dev/null +++ b/opensuse/core/qt3/qt3-devel-doc.changes @@ -0,0 +1,2475 @@ +------------------------------------------------------------------- +Fri Sep 23 10:16:33 UTC 2011 - coolo@suse.com + +- fix qt3-extensions + +------------------------------------------------------------------- +Fri Apr 22 18:31:12 UTC 2011 - anixx@opensuse.org + +- changed compression to .tar.bz2 + +------------------------------------------------------------------- +Thu Apr 21 11:40:38 CEST 2011 - pth@suse.de + +- Don't try to patch in the version twice in qt-3.3.8c.diff. +- Resync those patches that don't apply without offset. +- Mark scriptlets in profile.d as being configuration files. +- Remove the calls to run_ldconfig. + +------------------------------------------------------------------- +Mon Apr 18 18:46:34 UTC 2011 - robxu9@gmail.com + +- a fix to the 3.3.8c patch + +------------------------------------------------------------------- +Thu Mar 31 18:15:29 UTC 2011 - coolo@novell.com + +- another gcc 4.6 fix + +------------------------------------------------------------------- +Mon Jan 31 21:23:51 UTC 2011 - robxu9@gmail.com + +- Update to version 3.3.8c, by the Trinity Project +- pre_checkin.sh was not run as this caused too many unneccesary + changes to occur. +- The translations tarball was left at version 3.3.8b. + +------------------------------------------------------------------- +Sat Nov 20 02:26:08 CET 2010 - dmueller@suse.de + +- fix build against gcc 4.6 + +------------------------------------------------------------------- +Mon Nov 1 10:09:40 UTC 2010 - coolo@novell.com + +- fix libpng dependencies + +------------------------------------------------------------------- +Wed Sep 1 13:22:38 UTC 2010 - pgajdos@novell.com + +- port to libpng14 + +------------------------------------------------------------------- +Wed May 5 19:42:33 UTC 2010 - coolo@novell.com + +- do not patch the symlink + +------------------------------------------------------------------- +Mon Apr 5 21:06:20 CEST 2010 - dmueller@suse.de + +- fix -devel package requires +- simplify requires of sub-specfiles + +------------------------------------------------------------------- +Mon Apr 5 16:00:15 CEST 2010 - dmueller@suse.de + +- build against libpng12 + +------------------------------------------------------------------- +Thu Jan 21 14:24:13 CET 2010 - dmueller@suse.de + +- recommend kdelibs3-default-style (bnc#544581) + +------------------------------------------------------------------- +Fri Dec 18 17:04:51 CET 2009 - jengelh@medozas.de + +- add baselibs.conf as a source +- add baselib definitions for SPARC + +------------------------------------------------------------------- +Fri Nov 13 14:28:47 CET 2009 - dmueller@suse.de + +- fix patches to apply with fuzz=0 + +------------------------------------------------------------------- +Tue Nov 3 19:14:30 UTC 2009 - coolo@novell.com + +- updated patches to apply with fuzz=0 + +------------------------------------------------------------------- +Tue Aug 11 11:24:13 CEST 2009 - dmueller@suse.de + +- fix popen leak (bnc#529615) + +------------------------------------------------------------------- +Mon Feb 9 12:08:04 CET 2009 - coolo@suse.de + +- strip out date from .la files + +------------------------------------------------------------------- +Sat Feb 7 20:43:40 CET 2009 - coolo@suse.de + +- do not put timestamps in generated sources + +------------------------------------------------------------------- +Wed Jan 7 12:34:56 CET 2009 - olh@suse.de + +- obsolete old -XXbit packages (bnc#437293) + +------------------------------------------------------------------- +Tue Nov 11 16:57:56 CET 2008 - ro@suse.de + +- SLE-11 uses PPC64 instead of PPC, adapt baselibs.conf + +------------------------------------------------------------------- +Wed Sep 10 18:50:12 CEST 2008 - dmueller@suse.de + +- remove qt3-static package + +------------------------------------------------------------------- +Mon Jul 21 21:20:47 CEST 2008 - dmueller@suse.de + +- more verbose qtimer debug + +------------------------------------------------------------------- +Sun Jun 22 13:00:45 CEST 2008 - schwab@suse.de + +- Fix invalid array reference in font name parser. + +------------------------------------------------------------------- +Thu Apr 10 12:54:45 CEST 2008 - ro@suse.de + +- added baselibs.conf file to build xxbit packages + for multilib support + +------------------------------------------------------------------- +Mon Mar 10 16:48:36 CET 2008 - dmueller@suse.de + +- fix build with updated x.org + +------------------------------------------------------------------- +Thu Feb 7 17:51:25 CET 2008 - dmueller@suse.de + +- fix memory corruption when removing CRTc's dynamically + +------------------------------------------------------------------- +Sat Jan 19 07:19:25 CET 2008 - stbinner@suse.de + +- This version adds the GNU Public License version 3 as a + possible choice for licenses to the Open Source releases of Qt 3. +- upstreaming of patches and few other minor bugfixes + +------------------------------------------------------------------- +Tue Jan 15 01:42:37 CET 2008 - dmueller@suse.de + +- fix xrandr resize race (#335410) + +------------------------------------------------------------------- +Thu Dec 6 01:32:32 CET 2007 - dmueller@suse.de + +- fix the build key for gcc 4.3 + +------------------------------------------------------------------- +Mon Dec 3 15:12:36 CET 2007 - dmueller@suse.de + +- back out khmer "fix" from 3.3.8, which apparently + made it worse (#345459) + +------------------------------------------------------------------- +Tue Nov 20 20:25:18 CET 2007 - dmueller@suse.de + +- fix build with gcc 4.3 again + +------------------------------------------------------------------- +Mon Oct 1 11:48:51 CEST 2007 - dmueller@suse.de + +- fix build with gcc 4.3 + +------------------------------------------------------------------- +Fri Sep 7 12:32:22 CEST 2007 - dmueller@suse.de + +- fix off-by-one in utf8 decoder (#304249, CVE-2007-4137) +- fix typo in QDate::fromString() + +------------------------------------------------------------------- +Wed Aug 29 17:08:22 CEST 2007 - llunak@suse.cz + +- fix reading MNG files, visible in Kickoff (#278548) +- remove patching of symlinks from the immodule patch +- improve support for compositing (qt-copy patches #0079,#0080) + +------------------------------------------------------------------- +Fri Aug 24 18:39:04 CEST 2007 - dmueller@suse.de + +- fix format string issues (#291754, CVE-2007-3388) +- fix xrandr 1.2 detection + +------------------------------------------------------------------- +Thu Jul 5 17:25:18 CEST 2007 - coolo@suse.de + +- package desktop files and png files + +------------------------------------------------------------------- +Thu Jun 21 12:04:33 CEST 2007 - stbinner@suse.de + +- run fdupes in qt3-extensions.spec + +------------------------------------------------------------------- +Thu May 24 19:15:38 CEST 2007 - dmueller@suse.de + +- redo the last change in the correct spec file + +------------------------------------------------------------------- +Wed May 23 17:08:39 CEST 2007 - dmueller@suse.de + +- qt3-examples -> qt3-devel-examples + +------------------------------------------------------------------- +Thu May 17 06:49:50 CEST 2007 - stbinner@suse.de + +- removed some historic stuff from the spec file + +------------------------------------------------------------------- +Tue May 8 14:32:40 CEST 2007 - dmueller@suse.de + +- trust libxinerama only if it provides more screens + than xrandr crtcs (#264199) + +------------------------------------------------------------------- +Fri May 4 19:06:40 CEST 2007 - dmueller@suse.de + +- fix permissions of qmake specs + +------------------------------------------------------------------- +Wed May 2 11:50:07 CEST 2007 - coolo@suse.de + +- remove Suse-translate from desktop file +- remove obsolete suse version support + +------------------------------------------------------------------- +Mon Apr 30 14:39:40 CEST 2007 - stbinner@suse.de + +- fix build of qt3-devel-doc with desktop-file-validate run + +------------------------------------------------------------------- +Mon Apr 16 16:10:59 CEST 2007 - dmueller@suse.de + +- temporarily disable Xrandr 1.2 support until (#264199) is + resolved +- use -Bsymbolic-functions + +------------------------------------------------------------------- +Sun Apr 1 20:40:04 CEST 2007 - dmueller@suse.de + +- fix utf8 decoder (#259187, CVE-2007-0242) + +------------------------------------------------------------------- +Thu Mar 29 18:02:30 CEST 2007 - dmueller@suse.de + +- Fix XRandr 1.2 support + +------------------------------------------------------------------- +Fri Mar 16 14:52:22 CET 2007 - dmueller@suse.de + +- call XftDefaultSubstitute (#255330) + +------------------------------------------------------------------- +Thu Mar 15 11:07:44 CET 2007 - dmueller@suse.de + +- update font fix patch (#244579) + +------------------------------------------------------------------- +Mon Mar 12 16:09:29 CET 2007 - dmueller@suse.de + +- enable tablet support (#253392) +- add default substitution for font queries (#244579) + +------------------------------------------------------------------- +Tue Mar 6 19:37:48 CET 2007 - dmueller@suse.de + +- fix mysql driver crash on shutdown (#251222) + +------------------------------------------------------------------- +Sun Feb 25 11:52:26 CET 2007 - dmueller@suse.de + +- update to 3.3.8: + * changelog is under /usr/share/doc/packages/qt3/changes-3.3.8 + +------------------------------------------------------------------- +Wed Feb 21 13:00:52 CET 2007 - dmueller@suse.de + +- fix build for 9.3 + +------------------------------------------------------------------- +Wed Feb 7 10:39:13 CET 2007 - dmueller@suse.de + +- also build qt3-static as full-config + +------------------------------------------------------------------- +Mon Feb 5 15:18:34 CET 2007 - stbinner@suse.de + +- fix build of qt3-extensions on 9.3 + +------------------------------------------------------------------- +Fri Feb 2 15:41:36 CET 2007 - stbinner@suse.de + +- fix changelog chronological order + +------------------------------------------------------------------- +Wed Jan 31 21:40:07 CET 2007 - dmueller@suse.de + +- add a sanity check to ensure that we have a full version +- fix compile warnings in headers + +------------------------------------------------------------------- +Tue Jan 9 15:36:14 CET 2007 - dmueller@suse.de + +- drop misfuzzed patch + +------------------------------------------------------------------- +Mon Jan 8 18:35:16 CET 2007 - dmueller@suse.de + +- add patch to fix indic rendering issue + +------------------------------------------------------------------- +Tue Oct 31 13:18:44 CET 2006 - dmueller@suse.de + +- add patch to fix han localisation issue (#216183) +- update qt-debug-timer patch to output more verbose debug +- add patch to fix xinerama issue with popupmenus (#216235) + +------------------------------------------------------------------- +Fri Oct 20 15:54:30 CEST 2006 - dmueller@suse.de + +- update to 3.3.7: + * include CVE-2006-4811 patch + +------------------------------------------------------------------- +Thu Oct 19 15:21:51 CEST 2006 - dmueller@suse.de + +- add patch for integer overflow in QPixmap/QImage + (#212544, CVE-2006-4811) + +------------------------------------------------------------------- +Tue Oct 10 23:31:01 CEST 2006 - dmueller@suse.de + +- add patch for qtimer debugging + +------------------------------------------------------------------- +Wed Oct 4 19:39:56 CEST 2006 - dmueller@suse.de + +- fix headers to compile in -pedantic mode + +------------------------------------------------------------------- +Thu Sep 14 13:27:03 CEST 2006 - dmueller@suse.de + +- don't install static libs as executable + +------------------------------------------------------------------- +Fri Sep 1 16:18:07 CEST 2006 - llunak@suse.cz + +- Add patches with Xinerama improvements. + +------------------------------------------------------------------- +Thu Aug 17 13:42:28 CEST 2006 - stbinner@suse.de + +- fix qt3-devel-tools file conflict with qt-devel-doc + +------------------------------------------------------------------- +Tue Aug 1 14:47:18 CEST 2006 - stbinner@suse.de + +- disable noisy debug message in qt-x11-immodule-unified diff + +------------------------------------------------------------------- +Sun Jul 9 21:39:54 CEST 2006 - stbinner@suse.de + +- fix {designer3,linguist}.desktop starting Qt4 versions (#190135) + +------------------------------------------------------------------- +Tue Jul 04 15:12:18 CEST 2006 - mfabian@suse.de + +- update qt-x11-immodule-unified diff to 20060318 version. + This update already includes the following patches: + + fix-x11-immodule.diff + + disable-inputmethod-for-passords.patch + + qt-x11-immodule-capitalization-fix.diff + + fix-im-crash-on-exit.diff + + fix-immodule-buffer-overflow.diff + + qt-x11-immodule-qtextedit-fix.diff + + qt-x11-immodule-focus-handling.diff + + qt-x11-immodule-fix-inputcontext-crash.diff + which are thus removed. + +------------------------------------------------------------------- +Wed Jun 28 10:07:30 CEST 2006 - dmueller@suse.de + +- fix $QT_SYSTEM_DIR (#188217) + +------------------------------------------------------------------- +Fri Jun 9 15:25:49 CEST 2006 - llunak@suse.de + +- add $QT_SYSTEM_DIR (#183059) + +------------------------------------------------------------------- +Wed May 31 15:51:01 CEST 2006 - adrian@suse.de + +- remove BuildRequires libdrm-devel + +------------------------------------------------------------------- +Wed May 31 13:24:56 CEST 2006 - dmueller@suse.de + +- fix xpm image loading problem +- add performance regression fix +- add asian font loading fix + +------------------------------------------------------------------- +Mon May 29 08:41:44 CEST 2006 - adrian@suse.de + +- revert requires macro, this breaks the build system mapping +- require right packages in -devel for < 10.1 + +------------------------------------------------------------------- +Fri May 26 19:40:44 CEST 2006 - dmueller@suse.de + +- fix build + +------------------------------------------------------------------- +Fri May 26 10:42:43 CEST 2006 - dmueller@suse.de + +- 3.3.6 update + * numerous bugfixes and translations + +------------------------------------------------------------------- +Wed May 10 17:12:34 CEST 2006 - dmueller@suse.de + +- drop substitutions from global rc file (#171513) + +------------------------------------------------------------------- +Fri Apr 14 01:46:36 CEST 2006 - dmueller@suse.de + +- drop linguist3.png/desktop as its unused and install + linguist.desktop instead (fixes build failure). + +------------------------------------------------------------------- +Mon Apr 10 10:40:11 CEST 2006 - dmueller@suse.de + +- strip installed static libraries +- fix file conflict with Qt4 packages + +------------------------------------------------------------------- +Mon Apr 3 16:34:14 CEST 2006 - dmueller@suse.de + +- restore libraryPaths which broke instsys (#162930) + +------------------------------------------------------------------- +Thu Mar 30 12:49:05 CEST 2006 - coolo@suse.de + +- update qtrc to the real values avoiding dark gray platinum even + if not overwritten with desktop settings + +------------------------------------------------------------------- +Tue Mar 21 14:59:49 CET 2006 - dmueller@suse.de + +- update patch for QLabel layout issues to the one from Qt 3.3.7 + +------------------------------------------------------------------- +Fri Mar 17 18:39:04 CET 2006 - dmueller@suse.de + +- add patch for QLabel layout management issues (#153029) + +------------------------------------------------------------------- +Fri Mar 17 12:23:30 CET 2006 - dmueller@suse.de + +- fix crash on painting > 32000 chars at once +- fix error in wrapping japanese text +- fix QFile::flush() not setting error status +- fix window gravity being wrong for RTL + +------------------------------------------------------------------- +Tue Mar 14 00:22:32 CET 2006 - dmueller@suse.de + +- fix filelist + +------------------------------------------------------------------- +Mon Mar 13 17:02:09 CET 2006 - dmueller@suse.de + +- build qt3-devel-doc as noarch package + +------------------------------------------------------------------- +Tue Mar 7 10:49:56 CET 2006 - dmueller@suse.de + +- moving libqassistantclient to -devel (#155519) and assistant + to qt3. +- translation update +- fix assistant invocation to prefer Qt3's assistant over Qt 4.x + +------------------------------------------------------------------- +Wed Feb 22 14:00:00 CET 2006 - dmueller@suse.de + +- fix crash when not able to load imswitch (#117443) + +------------------------------------------------------------------- +Sat Feb 18 01:15:54 CET 2006 - dmueller@suse.de + +- add more immodule fixes +- fix build of qt3-extensions +- remove sections for SL < 9.2 + +------------------------------------------------------------------- +Fri Feb 17 16:47:41 CET 2006 - dmueller@suse.de + +- fix crash on shutdown (#151831) + +------------------------------------------------------------------- +Mon Feb 13 15:52:19 CET 2006 - coolo@suse.de + +- update translations + +------------------------------------------------------------------- +Mon Feb 6 05:22:44 CET 2006 - zsu@suse.de + +- Add patch qt3-khmer-script.patch to fix a rendering issue of Khmer + script (by Jens Herden, #147190). + +------------------------------------------------------------------- +Sat Jan 28 10:48:06 CET 2006 - coolo@suse.de + +- really install the icon + +------------------------------------------------------------------- +Fri Jan 27 20:02:59 CET 2006 - llunak@suse.cz + +- fix rubberband.diff to emit selectionChanged() properly (#132920) + +------------------------------------------------------------------- +Fri Jan 27 12:24:41 CET 2006 - coolo@suse.de + +- avoid file conflict with qt package + +------------------------------------------------------------------- +Fri Jan 27 08:08:10 CET 2006 - coolo@suse.de + +- fix qt3.sh + +------------------------------------------------------------------- +Fri Jan 27 02:21:53 CET 2006 - mls@suse.de + +- converted neededforbuild to BuildRequires + +------------------------------------------------------------------- +Wed Jan 25 18:06:26 CET 2006 - dmueller@suse.de + +- set $QTDIR in /etc/profile.d/qt3.(c)sh + +------------------------------------------------------------------- +Sat Dec 3 14:30:43 CET 2005 - coolo@suse.de + +- build with -Bdirect if available +- updating font patch + +------------------------------------------------------------------- +Fri Dec 2 00:11:21 CET 2005 - dmueller@suse.de + +- build with -fno-strict-aliasing + +------------------------------------------------------------------- +Wed Nov 23 10:18:29 CET 2005 - dmueller@suse.de + +- unify spec files via a common patch/sources section + and adjust spec files accordingly +- add /etc/profile.d hook to put qmake in the path (#134377) +- drop fast-malloc patch for all packages (#134563) + +------------------------------------------------------------------- +Fri Nov 18 15:20:21 CET 2005 - stbinner@suse.de + +- only disable FcFontSort patch for released distributions + +------------------------------------------------------------------- +Fri Nov 18 12:08:43 CET 2005 - stbinner@suse.de + +- disable FcFontSort patch because of immaturity + +------------------------------------------------------------------- +Fri Nov 11 15:48:07 CET 2005 - dmueller@suse.de + +- avoid crashes after QListView::clear() + +------------------------------------------------------------------- +Wed Nov 2 15:52:04 CET 2005 - coolo@suse.de + +- avoid FcFontSort as it's very expensive + +------------------------------------------------------------------- +Thu Oct 27 14:38:16 CEST 2005 - stbinner@suse.de + +- extend fix-key-release-event-with-imm.diff to fix another Immodule + related key release event bug (#130727) + +------------------------------------------------------------------- +Wed Oct 12 19:25:52 CEST 2005 - dmueller@suse.de + +- update -Werror patch to catch one more case + +------------------------------------------------------------------- +Mon Oct 10 16:58:30 CEST 2005 - dmueller@suse.de + +- add patch to fix broken key compression (#121049) + +------------------------------------------------------------------- +Sat Oct 8 00:04:41 CEST 2005 - dmueller@suse.de + +- patch cleanup + +------------------------------------------------------------------- +Wed Oct 5 13:59:53 CEST 2005 - dmueller@suse.de + +- add 0065-fix_werror_with_gcc4.patch (#119209) + +------------------------------------------------------------------- +Wed Sep 28 16:32:43 CEST 2005 - stbinner@suse.de + +- removed historic "Autoreqprov:off" leftover + +------------------------------------------------------------------- +Wed Sep 28 15:27:34 CEST 2005 - stbinner@suse.de + +- add a patch to fix capitalization of Immodule strings + +------------------------------------------------------------------- +Mon Sep 26 10:57:35 CEST 2005 - coolo@suse.de + +- fix build on x86_64 + +------------------------------------------------------------------- +Mon Sep 19 12:40:22 CEST 2005 - mfabian@suse.de + +- Bugzilla #117115: enable input methods in qlineedit widgets + only when "mode == Normal" (i.e. not when "mode == NoEcho" or + "mode == Password"). Using input methods while inputting + passwords is useless and confusing. + +------------------------------------------------------------------- +Fri Sep 16 23:06:14 CEST 2005 - schwab@suse.de + +- Never strip gratuitously. + +------------------------------------------------------------------- +Thu Sep 15 10:57:05 CEST 2005 - stbinner@suse.de + +- update to version 3.3.5 + +------------------------------------------------------------------- +Mon Sep 5 13:04:30 CEST 2005 - coolo@suse.de + +- layout popup menus correctly (#113048) + +------------------------------------------------------------------- +Fri Aug 19 17:04:02 CEST 2005 - llunak@suse.cz + +- Place dialog properly for systray icons on xinerama (#104794). + +------------------------------------------------------------------- +Fri Jul 29 18:24:24 CEST 2005 - dmueller@suse.de + +- add Q_EXPORT visibility support +- Fix gcc 4.0.x compiler detection for qt plugin buildkey + +------------------------------------------------------------------- +Thu Jun 23 14:37:00 CEST 2005 - mrueckert@suse.de + +- Applied patch from Lubos Lunak to fix drag'n'drop when the + visible window is not at the top of the window stack. + +------------------------------------------------------------------- +Fri Jun 10 17:28:47 CEST 2005 - adrian@suse.de + +- Apply workaround from Simon Hausmann to avoid miscompilation with gcc4 + +------------------------------------------------------------------- +Tue Jun 7 16:15:54 CEST 2005 - adrian@suse.de + +- do not trigger -debug configure flag on -g, but use it for beta + distribution + +------------------------------------------------------------------- +Tue May 31 10:49:30 CEST 2005 - adrian@suse.de + +- require freeglut-devel instead of XFree86-Mesa-devel + +------------------------------------------------------------------- +Fri Apr 15 19:52:35 CEST 2005 - mfabian@suse.de + +- Bugzilla #74133: check for some more glyphs for Katakana and + Hiragana, especially also check for all the glyphs which are + checked for Han_Japanese. This usually guarantees that the same + font is used for Katakana and Hiragana as for Japanese Kanji, + which is what we want. + +------------------------------------------------------------------- +Fri Apr 8 15:28:36 CEST 2005 - uli@suse.de + +- fixed to build with GCC4 on ARM + +------------------------------------------------------------------- +Mon Apr 4 15:02:41 CEST 2005 - adrian@suse.de + +- apply patches from qt-copy, fixes for mouse handling in popups + +------------------------------------------------------------------- +Thu Mar 24 09:57:01 CET 2005 - adrian@suse.de + +- update font mappings in qtrc for asian languages (#74363) + +------------------------------------------------------------------- +Wed Mar 16 17:54:12 CET 2005 - adrian@suse.de + +- fix possible crash in qtranslator (#71968, by Lubos) + +------------------------------------------------------------------- +Fri Mar 4 15:50:50 CET 2005 - adrian@suse.de + +- fix loading of style plugins for lib/lib64 mixed systesm (by Lubos) + +------------------------------------------------------------------- +Fri Feb 25 13:26:56 CET 2005 - adrian@suse.de + +- fix all Exec= lines for menu entries + +------------------------------------------------------------------- +Fri Feb 11 18:29:14 CET 2005 - adrian@suse.de + +- apply patch for rubberband selections from Andre Moreira Magalhaes + +------------------------------------------------------------------- +Wed Feb 9 17:55:47 CET 2005 - adrian@suse.de + +- add qclipboard hack to avoid freezes from qt-copy again + +------------------------------------------------------------------- +Wed Feb 2 16:35:44 CET 2005 - adrian@suse.de + +- fix plugin loading for the KDE integration + +------------------------------------------------------------------- +Wed Jan 26 17:49:46 CET 2005 - adrian@suse.de + +- update to version 3.3.4 +- reenable limit size patch to keep BC +- remove qclipboard fix, it got merged +- remove bidi fixes, they got merged +- remove gif handler fixes, they got merged +- apply KDE dialog integration code from Lubos +- revert some changes in imm code to solve a problem with missing + key release events + +------------------------------------------------------------------- +Fri Jan 14 14:12:06 CET 2005 - adrian@suse.de + +- update imm patch to version from 20041203 +- disable image size patch for now, it broke printing of large images + +------------------------------------------------------------------- +Wed Jan 5 13:37:00 CET 2005 - adrian@suse.de + +- reenable the SHM patch again +- add qtimm patch to solve an issue with Opera +- remove binary links from /usr/bin/, they do conflict with Qt 4 + +------------------------------------------------------------------- +Mon Nov 22 12:06:33 CET 2004 - ro@suse.de + +- "sed -i" does not work on old distributions + +------------------------------------------------------------------- +Tue Nov 16 11:04:55 CET 2004 - adrian@suse.de + +- package icon files for desktop entries + +------------------------------------------------------------------- +Mon Nov 8 16:07:11 CET 2004 - coolo@suse.de + +- improve Waldo's patch to limit image dimensions + +------------------------------------------------------------------- +Fri Oct 29 23:29:44 CEST 2004 - schwab@suse.de + +- Revert last change to png writing. + +------------------------------------------------------------------- +Tue Oct 26 10:51:34 CEST 2004 - adrian@suse.de + +- fix from Lubos for full screen mode switching on 64bit (#46972) + +------------------------------------------------------------------- +Mon Oct 25 14:26:40 CEST 2004 - schwab@suse.de + +- Extend last change to png writing. + +------------------------------------------------------------------- +Sat Oct 23 23:23:21 CEST 2004 - schwab@suse.de + +- Fix endian bug in png reading. + +------------------------------------------------------------------- +Thu Oct 14 18:09:56 CEST 2004 - adrian@suse.de + +- fix assitant zoom functionality, patch by Waldo (#45688) + +------------------------------------------------------------------- +Mon Oct 11 18:11:32 CEST 2004 - adrian@suse.de + +- fix requires of qt3-devel for new x.org packages + +------------------------------------------------------------------- +Wed Sep 29 10:27:12 CEST 2004 - adrian@suse.de + +- prefer MiscGlyphSymbol fonts with tics over others (#46280) +- enable BiDi support by default + +------------------------------------------------------------------- +Tue Sep 28 11:45:55 CEST 2004 - mfabian@suse.de + +- Bugzilla #46216: make "On The Spot" the default input style + for Qt. + +------------------------------------------------------------------- +Sat Sep 25 13:46:59 CEST 2004 - adrian@suse.de + +- prefer the .lib64.so extension on lib64 systems, but do not + require it anymore + +------------------------------------------------------------------- +Fri Sep 24 22:10:29 CEST 2004 - adrian@suse.de + +- fix load of plugins on lib64 systems. The plugins do need a + .lib64.so extension now + +------------------------------------------------------------------- +Wed Sep 15 17:52:55 CEST 2004 - adrian@suse.de + +- add two more glyphs to simplified chinese detection. (#44059) + +------------------------------------------------------------------- +Tue Sep 14 13:57:01 CEST 2004 - adrian@suse.de + +- handle also hongkong chinese local in a correct way (#44059) +- prefer chinese fonts via optional glyphs, but use also + the free ones, if no commercial font is avaible (#44059) + +------------------------------------------------------------------- +Mon Sep 13 20:14:31 CEST 2004 - adrian@suse.de + +- hopefully solve the chinese font detection problems (#44059) + +------------------------------------------------------------------- +Mon Sep 13 11:17:50 CEST 2004 - adrian@suse.de + +- fix build for old distributions +- prepare qt for konsole transparency mode (via composite extension) + +------------------------------------------------------------------- +Fri Sep 10 17:43:56 CEST 2004 - mfabian@suse.de + +- update to qt-x11-immodule-unified-qt3.3.3-20040910.diff which + merges the previous three patches (With help from Adrian to + make it build). + +------------------------------------------------------------------- +Fri Sep 10 16:34:52 CEST 2004 - mfabian@suse.de + +- add qt-x11-immodule-unified-qt3.3.3-r123-event-inversion-20040909.diff + to fix the endless loop problem when using M17N-t-latin1-post + or M17N-vi-viqr. See also + http://freedesktop.org/pipermail/immodule-qt/2004-September/000447.html + and followups. Patch thanks to Yamaken. + +------------------------------------------------------------------- +Wed Sep 8 10:13:26 CEST 2004 - adrian@suse.de + +- add 3.3.3 regression fixes in pre-3.3.4.diff +- add bidi fixes from qt-copy +- add qpixmap mitshm support from Lubos +- update immodule patch to stable release 20040819 +- adding event inversion fix for immodule from Zhe Su + +------------------------------------------------------------------- +Fri Sep 3 15:06:55 CEST 2004 - adrian@suse.de + +- udpate qt immodule patch to snapshot from 20040814 + +------------------------------------------------------------------- +Thu Aug 26 17:09:14 CEST 2004 - adrian@suse.de + +- disable explicit debug flags again + +------------------------------------------------------------------- +Mon Aug 23 13:23:02 CEST 2004 - adrian@suse.de + +- apply workaround for broken focus handling cause by the xim + patch due to a bug in X for released distributions (by Lubos) + +------------------------------------------------------------------- +Wed Aug 18 12:06:15 CEST 2004 - adrian@suse.de + +- enable full debug compile, if -g is in RPM_OPT_FLAGS + +------------------------------------------------------------------- +Tue Aug 17 14:46:19 CEST 2004 - coolo@suse.de + +- install qt3 after grep + +------------------------------------------------------------------- +Tue Aug 17 07:27:13 CEST 2004 - adrian@suse.de + +- apply patch from Waldo to be able to limit the size of loaded + images. Important for khtml (#43841) +- apply fix to handle the side pixmap of the kmenu correctly (0047) +- apply KToolBarButton fix (0051) + +------------------------------------------------------------------- +Fri Aug 13 06:19:32 CEST 2004 - adrian@suse.de + +- fix gif handling (#43356) + +------------------------------------------------------------------- +Thu Aug 12 08:23:16 CEST 2004 - adrian@suse.de + +- update to version 3.3.3 +- remove obsolete patches + +------------------------------------------------------------------- +Tue Aug 3 16:16:53 CEST 2004 - adrian@suse.de + +- add patch to support scim + +------------------------------------------------------------------- +Wed Jun 9 15:21:27 CEST 2004 - adrian@suse.de + +- update asian font mappings for commercial japanese fonts + (by mfabian) + +------------------------------------------------------------------- +Wed Jun 2 16:17:53 CEST 2004 - adrian@suse.de + +- fix libGL loading in the right way, no .so link is needed anymore + again + +------------------------------------------------------------------- +Wed May 26 16:47:34 CEST 2004 - adrian@suse.de + +- load libGL via .so link again (due to the different possible + setups #41118) +- libXmu gets still loaded via hardcoded path and version + +------------------------------------------------------------------- +Tue Apr 27 15:55:48 CEST 2004 - adrian@suse.de + +- update to version 3.3.2 + * remove obsolete patches +- do apply %patch16 + +------------------------------------------------------------------- +Fri Apr 23 09:26:44 CEST 2004 - adrian@suse.de + +- disable atk support for released distributions + +------------------------------------------------------------------- +Thu Apr 22 11:40:17 CEST 2004 - coolo@suse.de + +- another try to fix wrong font caching also for japanese/chinese + +------------------------------------------------------------------- +Tue Apr 20 11:34:13 CEST 2004 - coolo@suse.de + +- apply fix for wrong font caching (#39175) + +------------------------------------------------------------------- +Fri Apr 16 11:42:30 CEST 2004 - adrian@suse.de + +- apply fix for opentype aliasing issues + +------------------------------------------------------------------- +Tue Apr 13 10:50:22 CEST 2004 - adrian@suse.de + +- fix OpenGL support, if no -devel package is installed (#38857) +- fix xcursor support +- add current snapshot of Qt-ATK bridge patch + (disabled as long USE_QACCESSIBLE enviroment variable isn't set) + +------------------------------------------------------------------- +Sat Apr 3 10:07:55 CEST 2004 - adrian@suse.de + +- apply 0043-fix_expired_cookie_crash.diff from qt-copy(by Dirk) + * qt based applications can crash in ssh sessions with new + openssh (#38185) + +------------------------------------------------------------------- +Wed Mar 31 17:47:33 CEST 2004 - mfabian@suse.de + +- Bugzilla #37720: + add font substitutions for "SUSE*" fonts to default qtrc. + +------------------------------------------------------------------- +Thu Mar 25 10:12:37 CET 2004 - coolo@suse.de + +- fix for richtext tags (in knotes) +- fix for fonts with multiple scripts (#36583) +- fix for custom resolutions + +------------------------------------------------------------------- +Tue Mar 16 16:29:42 CET 2004 - adrian@suse.de + +- fix for command line handling (XIM in QApplication)(#35881) +- fix double packaging of qassistant translations + +------------------------------------------------------------------- +Mon Mar 15 17:55:57 CET 2004 - adrian@suse.de + +- define a default Font again. (Sans Serif with 10points) + (#36014) + +------------------------------------------------------------------- +Wed Mar 10 08:44:03 CET 2004 - adrian@suse.de + +- fix for xcursor cache hangling (by Lubos) +- move assistant to -devel-doc package + +------------------------------------------------------------------- +Thu Mar 4 22:10:52 CET 2004 - adrian@suse.de + +- apply fix for not found monospaced fonts without Euro glyph + (Patch by Lars Knoll) + +------------------------------------------------------------------- +Thu Mar 4 13:53:53 CET 2004 - adrian@suse.de + +- apply different bugfix and speed enhancement patches from qt-copy + as recommended by Lubos + * 0001: DnD optimisation + * 0002: Active Window Fix + * 0007: MITSHM extension support for QPixmap<>Qimage conversation + * 0037: dnd timestamp fix + * 0038: dragobject prefer fix + +------------------------------------------------------------------- +Mon Mar 1 11:39:25 CET 2004 - adrian@suse.de + +- update to final 3.3.1 version +- disable fast-malloc for > 9.0, nptl does work good enough +- add qclipboard-recursion-fix from Lubos +- further 64bit aliasing fixes + +------------------------------------------------------------------- +Mon Feb 16 14:43:49 CET 2004 - adrian@suse.de + +- update to current snapshot (3.3.1-snapshot-20040216) +- build opentype with -fno-strict-aliasing + +------------------------------------------------------------------- +Mon Feb 9 17:02:41 CET 2004 - adrian@suse.de + +- fix non-latin1 QString handling + (patch from Roman Stepanov) + +------------------------------------------------------------------- +Wed Feb 4 20:24:37 CET 2004 - adrian@suse.de + +- update to version 3.3.0 final +- disable 3rdparty source and use system libraries + +------------------------------------------------------------------- +Thu Jan 29 14:05:26 CET 2004 - adrian@suse.de + +- update to snapshot 20040129 +- use original qstring again, kprinter got fixed + +------------------------------------------------------------------- +Sun Jan 25 17:53:03 CET 2004 - adrian@suse.de + +- update to snapshot 20040125 +- revert qstring changes + +------------------------------------------------------------------- +Tue Jan 13 14:52:07 CET 2004 - adrian@suse.de + +- update to snapshot 20040113 + +------------------------------------------------------------------- +Mon Dec 29 11:48:49 CET 2003 - adrian@suse.de + +- update to snapshot from 20031229 to get KDE compiling again +- remove upstream included translation files +- cleanup stuff not anymore needed +- do not build sqlite plugin with (broken) sqlite sources from qt + tar ball anymore + +------------------------------------------------------------------- +Thu Dec 11 13:10:37 CET 2003 - adrian@suse.de + +- update to version 3.3 beta 1 + * solves the remaining issues with dlopen GL + +------------------------------------------------------------------- +Tue Dec 9 17:20:56 CET 2003 - adrian@suse.de + +- add KDE plugin path for qt 3.3 + +------------------------------------------------------------------- +Thu Dec 4 11:25:27 CET 2003 - adrian@suse.de + +- update to snapshot 20031204 +- do not link against GL libs anymore, but still support GL via dlopen + apps and libs beside libbqt* are still linked against GL for now +- build fix for qt3-extensions + +------------------------------------------------------------------- +Tue Dec 2 17:54:34 CET 2003 - adrian@suse.de + +- update to current 3.3 snapshot ( 20031202 - pre beta 1) + * obsoletes several patches + * IPv6 support +- temporary disabled PostgreSQL support +- add SQLite support + +------------------------------------------------------------------- +Fri Nov 21 11:05:33 CET 2003 - adrian@suse.de + +- drop not applyed font_fixes patch and add the old Xft2 fixes + again, to support displays without Render extension. + +------------------------------------------------------------------- +Fri Nov 14 14:30:11 CET 2003 - adrian@suse.de + +- update to version 3.2.3 and usual patch cleanup + +------------------------------------------------------------------- +Thu Oct 23 09:52:28 CEST 2003 - adrian@suse.de + +- build without -mminimal-toc on ppc64 +- apply crash fix from TT for some fonts in XLFD mode + +------------------------------------------------------------------- +Thu Oct 16 16:00:46 CEST 2003 - adrian@suse.de + +- update to version 3.2.2 + * font fixes patch is not applied intentionaly, for testing + plain qt behaviour for now. + +------------------------------------------------------------------- +Thu Oct 2 12:06:08 CEST 2003 - adrian@suse.de + +- require freeglut-devel, instead of mesaglut-devel for > 9.0 + +------------------------------------------------------------------- +Tue Sep 30 09:25:31 CEST 2003 - coolo@suse.de + +- using the right tool to compile translation files + +------------------------------------------------------------------- +Thu Sep 25 13:05:03 CEST 2003 - adrian@suse.de + +- update fontconfig patch again, fixes multiple listing of fonts +- do not complain anymore about not matching plugin + +------------------------------------------------------------------- +Sun Sep 21 15:02:56 CEST 2003 - adrian@suse.de + +- prefer Nimbus fonts, instead of using asian fonts, if possible + (the asian fonts have some broken latin chars) + +------------------------------------------------------------------- +Sun Sep 21 12:35:19 CEST 2003 - adrian@suse.de + +- install html docu to the same place as on 8.2, to solve + update problems (#31507). (install dir and symlink was + swapped for unknown reason) + +------------------------------------------------------------------- +Fri Sep 19 15:48:11 CEST 2003 - adrian@suse.de + +- memory leak fix from Lars in QTextEngine + +------------------------------------------------------------------- +Thu Sep 18 16:35:05 CEST 2003 - adrian@suse.de + +- updated patches from Lars + * fixing Unicode families and foundaries issues + * printing issues +- clean up unused patches + +------------------------------------------------------------------- +Wed Sep 17 18:31:56 CEST 2003 - adrian@suse.de + +- a bit more silence .. QPixmap before QApplication warning is away +- new asian font mappings from mfabian + +------------------------------------------------------------------- +Mon Sep 15 18:02:31 CEST 2003 - adrian@suse.de + +- new font fixes from Lars, the default size problem should be away +- fix build for non-Xft2 distibutions + +------------------------------------------------------------------- +Thu Sep 11 22:18:01 CEST 2003 - adrian@suse.de + +- silence on lib64 systems with 32bit plugins installed (#30559) +- ensure to have a [3.2] section in old qtrc files + +------------------------------------------------------------------- +Mon Sep 8 16:26:49 CEST 2003 - coolo@suse.de + +- apply fix from TT to fix konsole + setRawName + +------------------------------------------------------------------- +Thu Sep 4 12:53:19 CEST 2003 - adrian@suse.de + +- add always lib and lib64 kde plugin path to qtrc + +------------------------------------------------------------------- +Wed Sep 3 16:55:00 CEST 2003 - adrian@suse.de + +- apply fix from TT: "don't generate bogus mouse move events." +- qt3-devel requires XFree86-Mesa-devel + +------------------------------------------------------------------- +Tue Sep 2 17:20:05 CEST 2003 - adrian@suse.de + +- add slovak translation from Stanislav Visnovsky +- add czech translation from Klara Cihlarova + +------------------------------------------------------------------- +Tue Sep 2 16:20:15 CEST 2003 - adrian@suse.de + +- add asian mappings from 8.2 to qtrc again + +------------------------------------------------------------------- +Mon Sep 1 18:13:33 CEST 2003 - meissner@suse.de + +- Don't do readlink checks for set*id programs (will break + in TLS startup sequence of glibc), just fall back to old + malloc. #29530 + +------------------------------------------------------------------- +Mon Sep 1 12:02:00 CEST 2003 - adrian@suse.de + +- apply qlineedit fix from TT + +------------------------------------------------------------------- +Mon Sep 1 11:30:31 CEST 2003 - adrian@suse.de + +- qtconfig menu entry becomes unimportant + +------------------------------------------------------------------- +Sun Aug 31 22:33:44 CEST 2003 - adrian@suse.de + +- generate .la file again + +------------------------------------------------------------------- +Fri Aug 29 15:16:43 CEST 2003 - adrian@suse.de + +- use newer font_fixes patch from Lars +- enforce usage of Xft2 even on non-Xrender displays +- revert qclipboard changes to 3.1.2 code + +------------------------------------------------------------------- +Wed Aug 27 13:38:51 CEST 2003 - adrian@suse.de + +- use official 3.2.1 tar ball instead of 3.2.0+patch + +------------------------------------------------------------------- +Tue Aug 26 08:20:07 CEST 2003 - adrian@suse.de + +- new _big_ fix from Lars for fixing the remaining font issues + +------------------------------------------------------------------- +Sun Aug 24 16:55:24 CEST 2003 - adrian@suse.de + +- apply fix from Lars for the foundary font problem, when + using pixmap fonts via Xft2. This makes the freetype2 + foundary-family patch obsolete from qt view. + +------------------------------------------------------------------- +Sat Aug 23 13:44:22 CEST 2003 - adrian@suse.de + +- apply 3.2.1 patch, until the official tar ball arrives + +------------------------------------------------------------------- +Sat Aug 16 13:58:14 CEST 2003 - adrian@suse.de + +- justify Category of qtconfig + +------------------------------------------------------------------- +Fri Aug 1 18:00:24 CEST 2003 - adrian@suse.de + +- add desktop file for qtconfig + +------------------------------------------------------------------- +Wed Jul 23 16:20:03 CEST 2003 - adrian@suse.de + +- update to version 3.2.0 final + +------------------------------------------------------------------- +Thu Jul 17 12:55:23 CEST 2003 - adrian@suse.de + +- fix .la files after build + +------------------------------------------------------------------- +Tue Jul 15 08:49:39 CEST 2003 - adrian@suse.de + +- update to 3.2.0 beta 2 +- remove obsolete patches + +------------------------------------------------------------------- +Sun Jun 15 12:19:14 CEST 2003 - coolo@suse.de + +- never strip explicitly +- always build with -release to avoid debug output even with -g + +------------------------------------------------------------------- +Thu Jun 12 09:07:58 CEST 2003 - coolo@suse.de + +- move the html docu into docdir and put the link in lib +- package directories +- fix directory permissions + +------------------------------------------------------------------- +Fri May 30 15:04:29 CEST 2003 - adrian@suse.de + +- fix file conflicts + +------------------------------------------------------------------- +Mon May 19 11:28:36 CEST 2003 - adrian@suse.de + +- revert source incompatibility to 3.1.x in qhbox constructor + +------------------------------------------------------------------- +Sun May 18 14:03:31 CEST 2003 - adrian@suse.de + +- update to version 3.2 beta 1 +- big patch clean up +- use largefile support api for > 8.2 + +------------------------------------------------------------------- +Thu Apr 10 17:01:32 CEST 2003 - coolo@suse.de + +- fixing long font names as returned by font-config + +------------------------------------------------------------------- +Wed Mar 26 13:19:48 CET 2003 - adrian@suse.de + +- workaround rpm bug on 7.3-ppc + +------------------------------------------------------------------- +Mon Mar 24 10:04:18 CET 2003 - adrian@suse.de + +- fix build on SuSE < 8.1 + +------------------------------------------------------------------- +Fri Mar 21 14:59:11 CET 2003 - adrian@suse.de + +- update to version 3.1.2 and remove obsolete patches + +------------------------------------------------------------------- +Tue Mar 11 20:33:03 CET 2003 - coolo@suse.de + +- fixing the fix + +------------------------------------------------------------------- +Tue Mar 11 13:35:31 CET 2003 - coolo@suse.de + +- applied patch by TT to fix kmail folder selection + (#24519 - also known as kde bug #48888) + +------------------------------------------------------------------- +Fri Mar 7 21:16:17 CET 2003 - adrian@suse.de + +- do not use XListFonts, if X server supports Xft on >8.1 (Xft2) + +------------------------------------------------------------------- +Fri Feb 28 00:25:14 CET 2003 - adrian@suse.de + +- fast malloc is back + (still 20% with glibc 2.3 without spinlock'ed-malloc) +- extend blacklist +- use fast malloc also on hammer + +------------------------------------------------------------------- +Wed Feb 26 11:43:08 CET 2003 - adrian@suse.de + +- add [3.1] plugin path +- add fix for mouse cursor bug over ssh + +------------------------------------------------------------------- +Mon Feb 24 11:56:07 CET 2003 - adrian@suse.de + +- use correct kde plugin path on lib64 systems + +------------------------------------------------------------------- +Mon Feb 3 11:39:24 CET 2003 - adrian@suse.de + +- fix missing symbols in libqt* + +------------------------------------------------------------------- +Thu Jan 30 16:19:31 CET 2003 - adrian@suse.de + +- fix %pre script + +------------------------------------------------------------------- +Sun Jan 26 14:05:56 CET 2003 - adrian@suse.de + +- prefix=/usr/lib/qt3 + (third party apps installing translations into $QTDIR now) +- modify qdesktopwidget resize patch to be BC with Qt 3.2 +- comment out non-official api extensions +- remove private headers tar ball again + (qsa beta2 contains them) +- fix qtrc enviroment patch +- hardcode qt settings dir to /etc/X11 (no need for $QTDIR/etc/settings anymore) +- enable all designer plugins + +------------------------------------------------------------------- +Thu Jan 23 18:36:05 CET 2003 - adrian@suse.de + +- add xrandr extension from Qt 3.2 +- add resize event to qdesktopwidget (patch from Lubos) +- compile codecs as plugins + +------------------------------------------------------------------- +Tue Jan 21 12:52:33 CET 2003 - adrian@suse.de + +- use fast malloc only on %ix86 + +------------------------------------------------------------------- +Thu Jan 16 15:58:23 CET 2003 - adrian@suse.de + +- include qt default translations + +------------------------------------------------------------------- +Fri Jan 10 15:12:46 CET 2003 - adrian@suse.de + +- hppa is parisc + +------------------------------------------------------------------- +Thu Jan 9 14:44:06 CET 2003 - adrian@suse.de + +- fix some more qmake.conf entries + (esp. pathes to lib64 directories and flags based on $RPM_OPT_FLAGS) + +------------------------------------------------------------------- +Tue Jan 7 16:42:59 CET 2003 - adrian@suse.de + +- use -ffunction-sections on hppa + +------------------------------------------------------------------- +Thu Jan 2 13:07:01 CET 2003 - adrian@suse.de + +- fix build ( patch -p1 -> -p0 ) + +------------------------------------------------------------------- +Fri Dec 27 17:50:17 CET 2002 - adrian@suse.de + +- several small changes/fixes/workarounds to be able to compile qsa + (they will be changed in 3.1.2) + +------------------------------------------------------------------- +Tue Dec 17 12:40:16 CET 2002 - adrian@suse.de + +- update to version 3.1.1 and cleanup patches +- apply Xft speed-up patch from dfaure + +------------------------------------------------------------------- +Wed Dec 4 15:10:17 CET 2002 - adrian@suse.de + +- drop fast-malloc, not needed since glibc 2.3 + +------------------------------------------------------------------- +Thu Nov 28 18:33:28 CET 2002 - adrian@suse.de + +- add qprinter fix from Lars + +------------------------------------------------------------------- +Wed Nov 27 00:44:44 CET 2002 - ro@suse.de + +- added expat to neededforbuild + +------------------------------------------------------------------- +Sat Nov 23 14:12:16 CET 2002 - adrian@suse.de + +- use Xft2 from XFree package now for > SuSE 8.1 + (experimental fontconfig package is dropped) +- build qt3-non-mt with extra spec file now +- fix korean [Font Substitutions] (#19575) +- fix broken qmake debug defaults (#21891) +- fix requires of database plugin packages + +------------------------------------------------------------------- +Fri Nov 15 10:33:53 CET 2002 - adrian@suse.de + +- update to 3.1.0 final version +- apply qwidget/hideChildren patch from Harri +- move libqui into qt3 main package + +------------------------------------------------------------------- +Tue Nov 5 20:00:37 CET 2002 - adrian@suse.de + +- package also missing mkspecs/* + +------------------------------------------------------------------- +Sun Nov 3 12:54:52 CET 2002 - adrian@suse.de + +- update to post 3.1 beta 2 snapshot (rc1 or rc2 ?) +- big rework of spec file, lots of workarounds are not needed anymore :) +- use experimental fontconfig/Xft2 package for > 8.1 +- enable nis & cups support + +------------------------------------------------------------------- +Mon Oct 21 18:25:53 CEST 2002 - adrian@suse.de + +- swab %ifarch <> %if for old broken rpm's + +------------------------------------------------------------------- +Mon Oct 21 13:44:15 CEST 2002 - adrian@suse.de + +- remove rpath again, which came back with 3.0.5 update (#20929) +- disable qDebug lines in chinese patch (#20959) + +------------------------------------------------------------------- +Wed Oct 9 11:47:44 CEST 2002 - adrian@suse.de + +- implement a blacklist of executables which should not use + the fast malloc implementation. (python and perl atm) +- disable fast-malloc for >8.1 +- enable fast-malloc for x86_64 + +------------------------------------------------------------------- +Fri Sep 20 11:24:51 CEST 2002 - adrian@suse.de + +- qclipboard fix from Lubos. Copy from old X applications works again + +------------------------------------------------------------------- +Mon Sep 16 12:07:53 CEST 2002 - adrian@suse.de + +- replace qt3-gb18030.diff patch with the new patch from + James Su for chinese handling (#19399) +- set XIMInputStyle for japanese input (#19387) +- change Requires: from /usr/include/png.h to libpng-devel, since + connectivas apt can not handle this. + +------------------------------------------------------------------- +Fri Aug 30 14:13:34 CEST 2002 - adrian@suse.de + +- remove the dlopen patch again. It is not needed anymore and may + cause crashes in rare cases. + +------------------------------------------------------------------- +Wed Aug 28 15:26:02 CEST 2002 - adrian@suse.de + +- apply fix from Lubos for DND in kcontrol +- apply fix to fix gb18030 encoding (from Turbolinux China) + +------------------------------------------------------------------- +Mon Aug 26 16:25:40 CEST 2002 - adrian@suse.de + +- do not use -plugindir configure option anymore. it caused the + broken plugin support and remov $QTDIR/plugins again from qtrc + qtrc is also a (noreplace) config file again +- s,getenv,__secure_getenv, as suggested by okir in plugin_path.dif + +------------------------------------------------------------------- +Thu Aug 22 18:33:55 CEST 2002 - adrian@suse.de + +- add patch to set the qt settings dir to a non-default dir +- add patches from qt 3.0.6 to fix asian copy&paste problems +- set explicit plugin pathes in qtrc and replace them during update + (this is only a workaround until I know why qt does not use the + compiled path) + +------------------------------------------------------------------- +Thu Aug 22 14:53:57 CEST 2002 - adrian@suse.de + +- remove dangeling symlink in /usr/lib/qt3/mkspecs/linux-g++ +- add plugin path to global qtrc + +------------------------------------------------------------------- +Tue Aug 20 13:24:25 CEST 2002 - adrian@suse.de + +- fix #defines + +------------------------------------------------------------------- +Tue Aug 20 00:24:37 CEST 2002 - adrian@suse.de + +- redo the plugin path patch again, we use now a implicit + subdirectory like "lib64", if needed. +- qtconfig is patched to hide/not write back those entries + +------------------------------------------------------------------- +Fri Aug 16 14:00:33 CEST 2002 - coolo@suse.de + +- fixing the patches + +------------------------------------------------------------------- +Fri Aug 16 13:18:21 CEST 2002 - coolo@suse.de + +- applying the plugin path patches, so they actually do something + on lib64 platforms + +------------------------------------------------------------------- +Fri Aug 9 17:35:58 CEST 2002 - adrian@suse.de + +- fix plugin installation + +------------------------------------------------------------------- +Thu Aug 8 10:00:46 CEST 2002 - adrian@suse.de + +- use %suse_version macro instead of /etc/SuSE-release + +------------------------------------------------------------------- +Fri Aug 2 14:41:33 CEST 2002 - coolo@suse.de + +- shut up if passed -noxim is passed and xim doesn't work + +------------------------------------------------------------------- +Tue Jul 30 14:43:32 CEST 2002 - adrian@suse.de + +- disable pre-3.0.6 patches again, until focus problem is located +- add zlib-devel to Requires for qt3-devel and SuSE 8.1 +- add %run_ldconfig + +------------------------------------------------------------------- +Mon Jul 29 17:31:37 CEST 2002 - adrian@suse.de + +- apply shut-up.dif +- clean up neededforbuild + +------------------------------------------------------------------- +Fri Jul 26 16:33:25 CEST 2002 - adrian@suse.de + +- port Lea's fast malloc implementation to libqt-mt +- designer sig11 fixes are not needed anymore +- use some patches from qt-rsync + +------------------------------------------------------------------- +Fri Jul 19 13:07:05 CEST 2002 - adrian@suse.de + +- fix designer sig11 really +- kick warnings about unsuccesfull locks for non-root users + +------------------------------------------------------------------- +Thu Jul 18 18:00:13 CEST 2002 - adrian@suse.de + +- don't strip when in debug mode +- fix typo in build script + +------------------------------------------------------------------- +Wed Jul 17 09:59:28 CEST 2002 - adrian@suse.de + +- update to 3.0.5 final + * lots of bugfixes, see changes-3.0.5 for details + * new, binary incompatible plugin system +- fix sig11 in designer +- clean spec file, drop all not applied patches + +------------------------------------------------------------------- +Thu Jul 11 10:42:14 CEST 2002 - coolo@suse.de + +- reenable work around for transparenent images while printing + (PR16188) + +------------------------------------------------------------------- +Wed Jul 10 17:51:47 CEST 2002 - adrian@suse.de + +- update to near 3.0.5-final snapshot 3.0.5-snapshot-20020710 + +------------------------------------------------------------------- +Fri Jul 5 14:16:16 CEST 2002 - adrian@suse.de + +- fix -g detection during build + +------------------------------------------------------------------- +Fri Jun 21 00:21:28 CEST 2002 - adrian@suse.de + +- fix use of $RPM_OPT_FLAGS (broken since 3.0.4 update) +- use -mminimal-toc on ppc64 to workaround compiler bug atm +- update to pre-3.0.5 snapshot-20020620 + * use buildkey for plugins instead of our own plugin hack + * lots of fixes (exact description in changes-3.0.5) +- add lib64 to build key, if needed +- remove obsolete patches + +------------------------------------------------------------------- +Thu Jun 6 13:41:19 CEST 2002 - adrian@suse.de + +- rework plugin path patch for distributions > 8.0 + change name of "plugins" directory instead of filenames + * plugins -- lib32 and multithreaded plugins + * plugins-non-mt -- lib32 and without multithread support + * plugins-lib64 -- lib64 and multithreaded plugins + * plugins-lib64-non-mt -- lib64 and without multithread support + +------------------------------------------------------------------- +Thu May 30 20:03:50 CEST 2002 - adrian@suse.de + +- disable style-plugins again (too much qt apps have problems) +- disable Xft/Xrender support also for SuSE 7.3 (XFree 4.1.0) + (no one reads READMES and too many people had crashes) + +------------------------------------------------------------------- +Tue May 28 10:58:01 CEST 2002 - adrian@suse.de + +- fix %files + +------------------------------------------------------------------- +Mon May 27 13:37:15 CEST 2002 - adrian@suse.de + +- move qconfig, qmake to qt3-devel-tools +- build styles as plugin (except our default style: Platinum) + +------------------------------------------------------------------- +Mon May 27 00:10:23 CEST 2002 - ro@suse.de + +- lib64: fix qtmake.conf: QTLIBDIR also has the trailing "64" +- fix build-script for lib64 issues + +------------------------------------------------------------------- +Mon May 20 23:26:35 CEST 2002 - adrian@suse.de + +- fix build (disable odbc during qt3.spec build) + +------------------------------------------------------------------- +Mon May 20 10:13:55 CEST 2002 - adrian@suse.de + +- enable -tablet support if XFree86 provides it +- compile with -debug mode, if -g is set in enviroment +- fix postgres plugin build +- enable unixODBC support for newer distributions +- split sql drivers to extra packages +- fix dlopen call + +------------------------------------------------------------------- +Tue May 14 12:39:51 CEST 2002 - adrian@suse.de + +- fix lib64 patch to find OpenGL libs + +------------------------------------------------------------------- +Thu May 9 21:54:41 CEST 2002 - adrian@suse.de + +- apply fix for NetAccess focus, insertTitle(), QTextEdit and + QToolbar from qt-copy + +------------------------------------------------------------------- +Wed May 8 09:39:48 CEST 2002 - coolo@suse.de + +- fixing patch section (grr) + +------------------------------------------------------------------- +Tue May 7 17:13:41 CEST 2002 - coolo@suse.de + +- adding fix for x86_64 + +------------------------------------------------------------------- +Tue May 7 14:32:39 MEST 2002 - coolo@suse.de + +- update to qt 3.0.4 - remove fixes that do + not apply any longer +- disable asian patches as they do not apply + and I don't want to split them as I have no + idea if the problems they try to fix are still + there + +------------------------------------------------------------------- +Wed Apr 24 16:09:09 CEST 2002 - coolo@suse.de + +- fix lib64 support +- fix asian patch not to use arrays in unused arrays + (triggers compiler problem) + +------------------------------------------------------------------- +Sun Apr 21 12:58:33 CEST 2002 - adrian@suse.de + +- improve image rendering speed (patch by Lubos) + +------------------------------------------------------------------- +Tue Apr 9 16:21:07 CEST 2002 - adrian@suse.de + +- apply patch from Lubos to fix alpha channel in QMovie + +------------------------------------------------------------------- +Fri Apr 5 15:29:03 CEST 2002 - adrian@suse.de + +- fixed print support in qpsprint +- binary compatibility fixes by Lars for gbk encoding + +------------------------------------------------------------------- +Wed Apr 3 21:33:26 CEST 2002 - adrian@suse.de + +- apply fixes/extensions for asian/utf-8-based languages + (assembled by Lars and Brad, thank you, verifed by mfabian) +- 64bit fixes from Andreas Schwab (const char*) null pointer casts + +------------------------------------------------------------------- +Sun Mar 24 13:23:18 CET 2002 - adrian@suse.de + +- apply qtabbar fix. Fixes crashes with kcm modules. + +------------------------------------------------------------------- +Fri Mar 22 10:33:58 CET 2002 - adrian@suse.de + +- apply fix for sig11 in QCommonStyle (made by Waldo/Trolltech) +- apply fix to use libpng instead of libmng to load pngs (by coolo) +- add missing Requires for qt3-devel + +------------------------------------------------------------------- +Wed Mar 20 22:47:59 CET 2002 - adrian@suse.de + +- verify 3.0.3 final version +- add check for null pointer returned by libXft + (fix sig11 when no Xft fonts are configured) +- fix scrollbar behaviour for QT Platinum style + (we are X Windows compatible instead of MS Windows) + +------------------------------------------------------------------- +Tue Mar 19 10:36:42 CET 2002 - adrian@suse.de + +- update to version 3.0.3 + (rc6 tar ball from troll, I have to check after the qt-3.0.3 release, + if this is really qt-3.0.3 final) + +------------------------------------------------------------------- +Tue Mar 12 20:01:34 CET 2002 - adrian@suse.de + +- update to pre 3.0.3 snapshot (3.0.2.20020312) + +------------------------------------------------------------------- +Mon Mar 4 09:44:37 CET 2002 - adrian@suse.de + +- more fixes + * fix auto-resizing with QMovie + * fix to correctly open submenues in right to left layout + * reduce number of mallocs by sharing QColorGroup + * Simplified static cleanup handlers. + * smarter tooltip placement +- require "c++_compiler" for distributions newer than 7.3 only + +------------------------------------------------------------------- +Sun Mar 3 02:31:31 CET 2002 - adrian@suse.de + +- apply some fixes from qt-copy + * 8 bit color depth image format fixes + * spinbox flicker fix + * qrichtext dangeling pointers fix + * qmenubar right to left layout mode cursor navigation fix + * qcombobox avoid emitting highlighted twice on keyPressEvent + +------------------------------------------------------------------- +Mon Feb 25 17:34:15 CET 2002 - adrian@suse.de + +- update to version 3.0.2 +- remove compile fixes +- fix symlink for qtconfig + +------------------------------------------------------------------- +Thu Feb 14 01:05:14 CET 2002 - adrian@suse.de + +- fix Requires for qt3-devel (add g++ compiler) + +------------------------------------------------------------------- +Tue Feb 12 01:01:31 CET 2002 - adrian@suse.de + +- fix build for lib64/s390x + +------------------------------------------------------------------- +Wed Feb 6 21:08:43 CET 2002 - adrian@suse.de + +- add links in /usr/bin for qtconfig + +------------------------------------------------------------------- +Sun Feb 3 14:57:30 CET 2002 - adrian@suse.de + +- fix dumb-packager-bug (s,%fi,%endif,) + +------------------------------------------------------------------- +Sun Feb 3 12:23:35 CET 2002 - adrian@suse.de + +- compile fix for postrgres module +- extend plugin patch to work on s390x and sparc64 to work with + lib64 plugins +- add %{_libdir}/qt3 symlink for s390x and sparc64 + +------------------------------------------------------------------- +Sat Feb 2 13:00:38 CET 2002 - ro@suse.de + +- cleaned changes file + +------------------------------------------------------------------- +Fri Feb 1 15:29:58 CET 2002 - adrian@suse.de + +- update to current qt-copy snapshot (needed for KDE 3.0 beta 2) +- make threaded plugins as usual again +- non-threaded plugins needs now the not compatible -non-mt.so + suffix + +------------------------------------------------------------------- +Fri Feb 1 00:26:05 CET 2002 - ro@suse.de + +- changed neededforbuild to + +------------------------------------------------------------------- +Tue Jan 29 16:29:15 CET 2002 - adrian@suse.de + +- enable AA for SuSE > 7.3 + +------------------------------------------------------------------- +Tue Jan 29 10:58:57 CET 2002 - schwab@suse.de + +- Fix use of varargs on 64 bit platforms. + +------------------------------------------------------------------- +Wed Jan 23 22:56:28 CET 2002 - adrian@suse.de + +- patch plugin loader to load only plugins with -mt.so + extension +- link direct against libpng +- move qt3.conf file to susehelp +- TODO: make plugin loader path depending on %_libdir + +------------------------------------------------------------------- +Tue Jan 22 21:47:19 CET 2002 - adrian@suse.de + +- enable Xrender/Xft again for SuSE 7.3 + (I was misleaded by a broken libXft :/ ) +- using qt plugin mechanism for picture format support +- enable XRender by default, but leave Xft disabled by default + (kcontrol can switch Xft on for KDE applications now) +- add additional include path for postgres 7.2b5 + +------------------------------------------------------------------- +Mon Jan 21 16:58:53 CET 2002 - adrian@suse.de + +- disable Xft for all distributions until 7.3 + (XFree 4.2 is needed) +- sync QClipboard fix from qt-copy + +------------------------------------------------------------------- +Tue Jan 8 16:11:14 CET 2002 - adrian@suse.de + +- fix Requires +- disable rpath + +------------------------------------------------------------------- +Sun Jan 6 00:31:11 CET 2002 - adrian@suse.de + +- split non multithreaded librarys into qt3-non-mt package +- split developer tutorial into qt3-tutorial package +- use common config script to prepare build +- move libs to /usr/lib/qt3/%{_libdir} +- remove .prl files from file list again + +------------------------------------------------------------------- +Thu Jan 3 16:48:59 CET 2002 - adrian@suse.de + +- rename qt3-designer subpackage to qt3-devel-tools +- add default qtrc file + * disable Xft support by default + * use Platinum style + * set qt plugin path +- move qtconfig to qt base package +- apply fixes from qt-copy/KDE-cvs + +------------------------------------------------------------------- +Thu Dec 13 10:42:07 CET 2001 - adrian@suse.de + +- use $RPM_OPT_FLAGS during compile +- add missing .prl files to file list + +------------------------------------------------------------------- +Wed Dec 12 16:39:16 CET 2001 - adrian@suse.de + +- update to version 3.0.1 +- build all extra tools +- fix default mkspec symlink +- include examples to devel-doc package + +------------------------------------------------------------------- +Thu Nov 8 18:39:52 CET 2001 - ro@suse.de + +- use mesa-devel-packages in neededforbuild + +------------------------------------------------------------------- +Tue Oct 16 11:13:50 CEST 2001 - adrian@suse.de + +- fix hardcoded install dir in libqt + (no $QTDIR is needed at runtime anymore) + +------------------------------------------------------------------- +Mon Oct 15 18:16:49 CEST 2001 - adrian@suse.de + +- update to QT 3.0.0 final + (the KDE 3 battle begins :) + +------------------------------------------------------------------- +Fri Oct 5 10:50:24 CEST 2001 - adrian@suse.de + +- add missing header files +- cleanup workarounds in spec file and add some new (but less ;) + +------------------------------------------------------------------- +Mon Oct 1 16:35:56 CEST 2001 - adrian@suse.de + +- update to beta6 + +------------------------------------------------------------------- +Tue Sep 18 08:54:02 CEST 2001 - adrian@suse.de + +- update to beta5 + +------------------------------------------------------------------- +Wed Sep 5 12:17:19 CEST 2001 - adrian@suse.de + +- okay, my last try ... cp -f has different return values on the + distributions :( + +------------------------------------------------------------------- +Tue Sep 4 10:18:20 CEST 2001 - adrian@suse.de + +- disable postgres support for old distributions + (now it also builds with SuSE 6.4) + +------------------------------------------------------------------- +Mon Sep 3 15:42:48 CEST 2001 - adrian@suse.de + +- fix broken links in include path + +------------------------------------------------------------------- +Sun Sep 2 19:47:01 CEST 2001 - adrian@suse.de + +- workaround bugs in Makefile to install all needed files +- remove -j4 behind make + +------------------------------------------------------------------- +Tue Jun 19 15:26:54 CEST 2001 - adrian@suse.de + +- split documentation from qt3-devel to qt3-doc + +------------------------------------------------------------------- +Fri May 25 11:57:34 CEST 2001 - adrian@suse.de + +- first try with QT 3.0.0 beta 1 + ( this package is far away from being perfect ) + +------------------------------------------------------------------- +Sun May 6 10:52:33 CEST 2001 - adrian@suse.de + +- apply XftGlyph fix for qfont_x11.cpp from Keith Packard +- fix build for distributions before 7.1 + +------------------------------------------------------------------- +Fri May 4 11:39:55 CEST 2001 - adrian@suse.de + +- add fix for buffer overflow on qfont_x11 and some minor glitches + in qt-png +- qt-experimental is dropped, since we can enable AA in qt now. + +------------------------------------------------------------------- +Fri Apr 27 15:29:17 CEST 2001 - adrian@suse.de + +- switch BuildIndex for SuSEhelp to false by default + +------------------------------------------------------------------- +Mon Apr 23 22:22:19 CEST 2001 - adrian@suse.de + +- using -DNO_DEBUG +- apply latin9 patch from mls@suse.de + +------------------------------------------------------------------- +Wed Apr 4 22:48:01 CEST 2001 - mfabian@suse.de + +- add /etc/qt.fontguess (config file for Japanese and Korean + fonts) + +------------------------------------------------------------------- +Wed Mar 21 17:43:49 CET 2001 - adrian@suse.de + +- disable AA by default (still to many problems) + +------------------------------------------------------------------- +Sun Mar 18 09:46:50 CET 2001 - adrian@suse.de + +- reenable qt-experimental for SuSE distribution < 7.2 + disable opengl module for these distris in this package + +------------------------------------------------------------------- +Sat Mar 17 14:43:11 CET 2001 - adrian@suse.de + +- update to QT 2.3.0 + this makes qt-experimental obsolete + (maybe still some problems with the nvidia driver, but the nv + should work fine and the users are warned about nvidia since + SuSE 7.1) + +------------------------------------------------------------------- +Sun Mar 11 20:20:41 CET 2001 - mfabian@suse.de + +- fix spec-file to make it build with "rpm -ba" + +------------------------------------------------------------------- +Fri Feb 9 19:55:09 CET 2001 - adrian@suse.de + +- use $RPM_OPT_FLAGS + drop signed char patch + +------------------------------------------------------------------- +Sat Feb 3 14:12:01 CET 2001 - adrian@suse.de + +- update to QT 2.2.4 + qt-static is an own package and no sub packages anymore + fix/patch for qprintdialog is no longer needed + add fix from Andreas Schwab for 64bit platforms + +------------------------------------------------------------------- +Fri Jan 19 11:33:07 CET 2001 - adrian@suse.de + +- swap link and directory of html documentation. This makes + trouble during update from older distributions + +------------------------------------------------------------------- +Sat Jan 13 21:18:58 CET 2001 - adrian@suse.de + +- remove not necessary susehelp/htdig conf file + remove file conflicts between qt-devel and qt-experimental + +------------------------------------------------------------------- +Thu Jan 4 21:37:49 CET 2001 - adrian@suse.de + +- added qt-experimental,qt-japanese,qt-korean to Obsoletes: + +------------------------------------------------------------------- +Wed Jan 3 02:24:50 CET 2001 - adrian@suse.de + +- fix qprintdialog + fix qrichtext (Thanks Stefan) + +------------------------------------------------------------------- +Wed Jan 3 02:24:15 CET 2001 - adrian@suse.de + +- fix qprintdialog + +------------------------------------------------------------------- +Mon Jan 1 17:18:43 CET 2001 - adrian@suse.de + +- spec file fix + +------------------------------------------------------------------- +Sun Dec 31 13:18:17 CET 2000 - adrian@suse.de + +- added small tools to qt-devel (thanks Dirk) + +------------------------------------------------------------------- +Fri Dec 22 20:46:34 CET 2000 - adrian@suse.de + +- remove asian patches from qt-experimental + +------------------------------------------------------------------- +Wed Dec 20 18:51:44 CET 2000 - adrian@suse.de + +- fixe type in package name + +------------------------------------------------------------------- +Wed Dec 20 18:44:44 CET 2000 - adrian@suse.de + +- move docu from qtlib2 to qt + +------------------------------------------------------------------- +Sat Dec 16 17:02:47 CET 2000 - adrian@suse.de + +- initial package. support for font anti aliasing has been added + Also OpenGL module is active + +------------------------------------------------------------------- +Thu Dec 14 11:51:41 CET 2000 - adrian@suse.de + +- update to 2.2.3 and remove all the unneeded fix patches. + added SuSE help conf files to qt-devel + +------------------------------------------------------------------- +Tue Dec 12 15:32:01 CET 2000 - schwab@suse.de + +- Build with -O0 on ia64. + +------------------------------------------------------------------- +Fri Dec 1 00:29:50 CET 2000 - adrian@suse.de + +- added rpath for uic/kdelibs and fixed uic fix .. + to drunk to drink more + +------------------------------------------------------------------- +Thu Nov 30 11:31:36 CET 2000 - adrian@suse.de + +- fixed dif + +------------------------------------------------------------------- +Thu Nov 30 00:33:26 CET 2000 - adrian@suse.de + +- added fix for uic and qiconview + +------------------------------------------------------------------- +Wed Nov 29 11:33:51 CET 2000 - adrian@suse.de + +- fixed build on ppc + +------------------------------------------------------------------- +Tue Nov 21 09:31:40 CET 2000 - ro@suse.de + +- spec fix + +------------------------------------------------------------------- +Fri Nov 17 14:57:54 CET 2000 - ro@suse.de + +- fixed neededforbuild: += libmng-devel + +------------------------------------------------------------------- +Mon Nov 13 21:40:29 CET 2000 - adrian@suse.de + +- new version 2.2.2 + added qpngio fix from waldo + +------------------------------------------------------------------- +Fri Nov 10 00:57:39 CET 2000 - adrian@suse.de + +- fixed static config for <6.4 distris (no libmng) + +------------------------------------------------------------------- +Tue Oct 31 13:45:29 CET 2000 - adrian@suse.de + +- split the qt package in + qt + qt-devel + qt-extensions + qt-man + qt-static + + Added an ugly patch to get an uic with KDE support. The designer + is broken in this package after this patch, so it is not packaged. + The designer can be found in the qt-designer package + +------------------------------------------------------------------- +Tue Oct 17 09:59:23 MEST 2000 - adrian@suse.de + +- switch to -O0 for ppc + +------------------------------------------------------------------- +Sat Oct 14 09:51:19 CEST 2000 - adrian@suse.de + +- drop OpenGL support. Problems with Nvidia's binary only driver + +- added fix from waldo (fixing memory leak in qpngio) + +------------------------------------------------------------------- +Mon Oct 9 16:00:44 CEST 2000 - adrian@suse.de + +- update the tar archiv (which contains a corrected classes.html file) + +------------------------------------------------------------------- +Fri Oct 6 12:46:48 CEST 2000 - adrian@suse.de + +- update to 2.2.1 + added static libs for libqt and libqt-mt + added support for libmng + +------------------------------------------------------------------- +Mon Oct 2 10:56:03 CEST 2000 - adrian@suse.de + +- added missing header files + +------------------------------------------------------------------- +Tue Sep 19 16:03:56 MEST 2000 - adrian@suse.de + +- switch to -O0 for axp + +------------------------------------------------------------------- +Fri Sep 8 17:09:15 CEST 2000 - schwab@suse.de + +- Update ia64 configuration. + +------------------------------------------------------------------- +Fri Sep 8 15:36:30 CEST 2000 - adrian@suse.de + +- added missing libqt-mt.so + clean up in filelist + changed copyright/license to GPL + +------------------------------------------------------------------- +Thu Sep 7 22:35:05 CEST 2000 - adrian@suse.de + +- update to qt 2.2.0 final + +------------------------------------------------------------------- +Tue Aug 22 19:56:07 CEST 2000 - adrian@suse.de + +- removed uic/moc bindings to libGL and other + +------------------------------------------------------------------- +Fri Aug 18 20:33:25 CEST 2000 - adrian@suse.de + +- update to qt 2.2.0 beta 2 + spec file rewritten + +------------------------------------------------------------------- +Tue Jul 4 15:11:10 CEST 2000 - adrian@suse.de + +- moved links from /usr/lib/qt/lib to /usr/lib/ + +------------------------------------------------------------------- +Thu Jun 22 15:59:04 CEST 2000 - adrian@suse.de + +- add libqt.so.2 links in /usr/lib/qt/lib + +------------------------------------------------------------------- +Fri Jun 16 16:26:31 CEST 2000 - adrian@suse.de + +- moved libqt.so back to qtlib2, after religios war. + +------------------------------------------------------------------- +Fri Jun 16 12:26:33 CEST 2000 - adrian@suse.de + +- enable gif support again + +------------------------------------------------------------------- +Fri Jun 16 09:18:31 CEST 2000 - adrian@suse.de + +- moved static libs to qtdevel2 + +------------------------------------------------------------------- +Tue Jun 6 14:06:10 CEST 2000 - schwab@suse.de + +- Reduce opt level on ia64. + +------------------------------------------------------------------- +Tue Jun 6 01:06:59 CEST 2000 - adrian@suse.de + +- fixed dependencies + +------------------------------------------------------------------- +Tue May 30 23:02:56 CEST 2000 - adrian@suse.de + +- readded mesadev in neededforbuild + +------------------------------------------------------------------- +Tue May 30 15:30:16 CEST 2000 - adrian@suse.de + +- update to 2.1.1 + +------------------------------------------------------------------- +Wed May 24 13:06:43 CEST 2000 - adrian@suse.de + +- added mesadev in neededforbuild + removed gif support (license issue) + +------------------------------------------------------------------- +Tue May 16 21:44:53 CEST 2000 - adrian@suse.de + +- added -fno-exception (smaller binaries) + +------------------------------------------------------------------- +Fri May 12 08:55:01 CEST 2000 - adrian@suse.de + +- fixed link /usr/doc/packages/html + using %{_defaultdocdir} + using %{_mandir} + +------------------------------------------------------------------- +Fri Apr 14 15:14:19 CEST 2000 - adrian@suse.de + +- update to 2.1.0 final + new package for all man pages + +------------------------------------------------------------------- +Thu Apr 6 19:16:55 CEST 2000 - adrian@suse.de + +- update to 2.1.0 beta 4 + +------------------------------------------------------------------- +Thu Mar 30 15:57:33 CEST 2000 - adrian@suse.de + +- update to qtlib 2.1.0 beta 3 + the destination directory is not longer /usr/lib/qt !!! + QTDIR=/usr/lib/qt-2.1.0 + There is also a link /usr/lib/qt2 to /usr/lib/qt-2.1.0 + +------------------------------------------------------------------- +Thu Mar 2 11:17:22 CET 2000 - ro@suse.de + +- removed obsolete part of patch + +------------------------------------------------------------------- +Thu Mar 2 07:27:34 CET 2000 - ro@suse.de + +- configure doesn't know --mandir ... :( + +------------------------------------------------------------------- +Thu Mar 2 01:59:58 CET 2000 - ro@suse.de + +- work-around for prepare-spec buglet + +------------------------------------------------------------------- +Wed Mar 1 00:05:15 CET 2000 - ro@suse.de + +- man to /usr/share using macro + +------------------------------------------------------------------- +Tue Feb 29 15:55:33 CET 2000 - kettner@suse.de + +- Apply patch for qfont_x11.cpp from warwick@warwick-bippy + +------------------------------------------------------------------- +Mon Feb 28 18:26:18 CET 2000 - kettner@suse.de + +- increased font cache from 4MB to 9MB in order to + speed up UNICODE fonts for YaST2 + +------------------------------------------------------------------- +Thu Nov 11 20:00:14 MET 1999 - uli@suse.de + +- removed netscape from neededforbuild + +------------------------------------------------------------------- +Tue Nov 9 11:12:48 MET 1999 - kettner@suse.de + +- Removed mesa from Requires, as it is not required + +------------------------------------------------------------------- +Fri Oct 22 14:42:35 MEST 1999 - kettner@suse.de + + - Patch extensions/imageio/src/Makefile.in in order to get + shared library of libimgio again. Worked in 2.00. + +------------------------------------------------------------------- +Mon Oct 11 21:06:47 MEST 1999 - kettner@suse.de + + - New version 2.0.2 + +------------------------------------------------------------------- +Tue Sep 28 18:09:12 MEST 1999 - uli@suse.de + +- switched from Motif to lesstif + +------------------------------------------------------------------- +Mon Sep 27 16:31:01 CEST 1999 - bs@suse.de + +- fixed requirements for sub packages + +------------------------------------------------------------------- +Fri Sep 17 11:28:09 MEST 1999 - kettner@suse.de + +- Reinserted old # Commandline line. + +------------------------------------------------------------------- +Mon Sep 13 17:23:57 CEST 1999 - bs@suse.de + +- ran old prepare_spec on spec file to switch to new prepare_spec. + +------------------------------------------------------------------- +Wed Jul 14 11:49:22 CEST 1999 - kettner@suse.de + + - New version 2.00 + +------------------------------------------------------------------- +Tue Jul 13 19:31:56 CEST 1999 - kettner@suse.de + + - New version 2.00 + +------------------------------------------------------------------- +Mon Jul 12 19:15:16 CEST 1999 - kettner@suse.de + + - New version 2.00 + diff --git a/opensuse/core/qt3/qt3-devel-doc.spec b/opensuse/core/qt3/qt3-devel-doc.spec new file mode 100644 index 000000000..cf4a5e869 --- /dev/null +++ b/opensuse/core/qt3/qt3-devel-doc.spec @@ -0,0 +1,297 @@ +# +# spec file for package qt3-devel-doc +# +# Copyright (c) 2011 SUSE LINUX Products GmbH, Nuernberg, Germany. +# +# All modifications and additions to the file contributed by third parties +# remain the property of their copyright owners, unless otherwise agreed +# upon. The license for this file, and modifications and additions to the +# file, is the same license as for the pristine package itself (unless the +# license for the pristine package is not an Open Source License, in which +# case the license is the MIT License). An "Open Source License" is a +# license that conforms to the Open Source Definition (Version 1.9) +# published by the Open Source Initiative. + +# Please submit bugfixes or comments via http://bugs.opensuse.org/ +# + +# norootforbuild + + +Name: qt3-devel-doc +BuildRequires: cups-devel freeglut-devel freetype2-devel gcc-c++ pkgconfig qt3-devel update-desktop-files +%if %suse_version < 1130 +BuildRequires: libpng-devel +%else +BuildRequires: libpng14-devel +%endif +Url: http://www.trolltech.com/ +License: GPL, QPL +AutoReqProv: on +Summary: Documentation for the Qt 3 Development Kit +Group: Documentation/HTML +Version: 3.3.8c +Release: 1 +PreReq: /bin/grep +BuildArch: noarch +Provides: qt3-devel-tutorial +Obsoletes: qt3-devel-tutorial +Requires: qt3-devel +%define x11_free -x11-free- +%define rversion %version +# COMMON-BEGIN +# COMMON-BEGIN +%define x11_free -x11-free- +%define rversion 3.3.8b +Source0: qt%{x11_free}%rversion.tar.bz2 +Source1: build_script.sh +Source2: qtconfig3.desktop +Source3: qtrc +Source4: assistant3.png +Source6: assistant3.desktop +Source7: designer.desktop +Source8: designer.png +Source9: linguist.desktop +Source5: linguist.png +Source10: qt3.sh +Source11: qt3.csh +# Translations did not change at 3.3.8c +Source12: qt3-3.3.8b-translations.tar.bz2 +Source100: qtkdeintegration_x11.cpp +Source101: qtkdeintegration_x11_p.h +Source102: baselibs.conf +Source200: attributes +Source201: update_spec.pl +Patch1: aliasing.diff +Patch2: head.diff +Patch4: qt3-never-strip.diff +Patch5: external-libs.diff +Patch6: 0001-dnd_optimization.patch +Patch7: 0002-dnd_active_window_fix.patch +Patch8: 0007-qpixmap_constants.patch +Patch11: 0038-dragobject-dont-prefer-unknown.patch +Patch12: qtrc-path.diff +Patch14: lib64-plugin-support.diff +Patch15: pluginmanager-fix.diff +Patch18: no-rpath.dif +Patch19: shut-up.diff +Patch20: rubberband.diff +Patch21: fix-GL-loading.diff +Patch23: fix-accessible.diff +# From http://www.freedesktop.org/wiki/Software_2fImmoduleQtDownload +# Current version from http://freedesktop.org/~daisuke/qt-x11-immodule-unified-qt3.3.5-20060318.diff.bz2 +Patch25: qt-x11-immodule-unified-qt3.3.8-20060318.diff +Patch28: fix-key-release-event-with-imm.diff +Patch29: 0047-fix-kmenu-width.diff +Patch31: limit-image-size.diff +Patch34: 0005-qpixmap_mitshm.patch +Patch35: qt-transparency.patch +Patch37: 0055-qtextedit_zoom.patch +Patch38: 0048-qclipboard_hack_80072.patch +Patch39: fix-qtranslator-crash.diff +Patch40: 0059-qpopup_has_mouse.patch +Patch41: 0060-qpopup_ignore_mousepos.patch +Patch42: add_qexport_visibility.patch +Patch43: 0056-khotkeys_input_84434.patch +Source250: enable-designer-plugins.diff +Patch53: fix-xinerama-dialog-placement.diff +Patch54: kmenu-search-fix.diff +Patch55: qt3-fix-cast.diff +Patch100: qt.patch +Patch101: qt3-arm-gcc4.patch +Patch102: xinerama.patch +Patch113: fix-assistant-path.patch +Patch117: qtimer-debug.diff +Patch119: xinerama-qpopupmenu.diff +Patch121: qt3-warnings.diff +Patch123: use-xrandr-1.2.diff +Patch125: qcstring-format-warnings.diff +Patch127: mng-reading-fix.patch +Patch128: 0079-compositing-types.patch +Patch129: 0080-net-wm-sync-request.patch +Patch132: revert-qt-3.3.8-khmer-fix.diff +Patch133: 0085-fix-buildkey.diff +Patch134: fix-xinput-clash.diff +Patch135: parseFontName.diff +Patch136: qt3-no-date.diff +Patch137: popen-leak-fix.diff +Patch138: qt3-libpng14.diff +Patch139: gcc46.diff + +# TQt integration +Patch200: qt-3.3.8c.diff + +BuildRoot: %{_tmppath}/%{name}-%{version}-build + +%description +This package contains the documentation for the Qt 3 Development Kit. + +You will find documentation, precompiled examples, and a tutorial for +getting started with Qt in /usr/lib/qt3/doc. + +This package contains the documentation for the Qt 3 Development Kit. + +You will find documentation, precompiled examples, and a tutorial for +getting started with Qt in /usr/lib/qt3/doc. + +This package contains the documentation for the Qt 3 Development Kit. + +You will find documentation, precompiled examples, and a tutorial for +getting started with Qt in /usr/lib/qt3/doc. + +This package contains the documentation for the Qt 3 Development Kit. + +You will find documentation, precompiled examples, and a tutorial for +getting started with Qt in /usr/lib/qt3/doc. + +%define build_sub_dirs src plugins/src tools/designer/uilib/ tools/designer/uic tools/qtconfig tools/assistant/lib tools/assistant tutorial + +%prep +%setup -q -n qt%{x11_free}%rversion +%patch1 +%patch2 +%patch4 +%patch5 +%patch6 +%patch7 +%patch8 +%patch11 +%patch12 +if [ "%_lib" = "lib64" ]; then +%patch14 +fi +%patch15 +%patch18 +%patch19 +%patch20 +%patch23 +%patch25 +%patch28 +%patch29 +%patch31 +%patch34 +%patch35 +%patch37 +%patch38 +%patch39 +%patch40 +%patch41 +%patch42 +%patch43 +%patch100 +%patch102 +%patch53 +%patch54 +%patch55 +%patch101 +%patch113 +%patch117 +%patch119 +%patch121 +%patch123 +ln -sf $PWD/src/inputmethod/qinputcontextfactory.h include/ +ln -sf $PWD/src/inputmethod/qinputcontextplugin.h include/ +ln -sf $PWD/src/kernel/qinputcontext.h include/ +ln -sf $PWD/src/kernel/qinputcontextinterface_p.h include/private/ +ln -sf $PWD/src/kernel/qximinputcontext_p.h include/private/ +if [ %_lib = "lib" ]; then +sed 's,/lib64/,/lib/,' %PATCH21 | patch -p0 +else +%patch21 +fi +%patch125 +%patch127 +%patch128 +%patch129 +%patch132 +%patch133 +%patch134 +%patch135 +%patch136 +%patch137 +%if %suse_version > 1120 +%patch138 -p1 +%endif +%patch139 +%patch200 +# copy qt kde integration files +cp %SOURCE100 %SOURCE101 src/kernel/ +cp %SOURCE101 include/private/ +cd translations +tar xvjf %SOURCE12 +cd .. +# COMMON-END +# COMMON-END + +%description +This package contains the documentation for the Qt 3 Development Kit. + +You will find documentation, precompiled examples, and a tutorial for +getting started with Qt in /usr/lib/qt3/doc. + +This package contains the documentation for the Qt 3 Development Kit. + +You will find documentation, precompiled examples, and a tutorial for +getting started with Qt in /usr/lib/qt3/doc. + +This package contains the documentation for the Qt 3 Development Kit. + +You will find documentation, precompiled examples, and a tutorial for +getting started with Qt in /usr/lib/qt3/doc. + +This package contains the documentation for the Qt 3 Development Kit. + +You will find documentation, precompiled examples, and a tutorial for +getting started with Qt in /usr/lib/qt3/doc. + +%build +export VERSION=%suse_version +source %SOURCE1 %{version} +export WLIB=%_lib +export QTDIR=`pwd` +if [ %_lib == "lib64" ]; then +export RPM_OPT_FLAGS="$RPM_OPT_FLAGS -DUSE_LIB64_PATHES" +fi +export RPM_OPT_FLAGS="$RPM_OPT_FLAGS -fno-strict-aliasing" +# +# call build from build_script.rpmrc for threaded Qt library +# only really needed tools will be builded here, all extra tools will be +# builded in qt3.spec +# +call_configure -thread -shared -no-sql-mysql -no-sql-psql -no-sql-odbc -no-sql-sqlite $OPTIONS +cd src +make %{?jobs:-j%jobs} +cd .. + +%install +export VERSION=%suse_version +export WLIB=%_lib +export QTDIR=`pwd` +source %SOURCE1 %{version} +cd src +make INSTALL_ROOT=$RPM_BUILD_ROOT install_htmldocs +cd .. +# +# install menu entries +# +%suse_update_desktop_file -i -u qtconfig3 Qt Utility DesktopSettings +%suse_update_desktop_file -i assistant3 Qt Development Documentation + +install -d -m 0755 ${RPM_BUILD_ROOT}/%{_defaultdocdir}/qt3/ +ln -sf /usr/lib/qt3/doc/html ${RPM_BUILD_ROOT}/%{_defaultdocdir}/qt3/ +mkdir -p $RPM_BUILD_ROOT/usr/share/pixmaps/ +install -m 0644 %SOURCE4 $RPM_BUILD_ROOT/usr/share/pixmaps/ + +%clean +rm -rf ${RPM_BUILD_ROOT} + +%files +%defattr(-,root,root) +%dir /usr/lib/qt3/doc +%doc /usr/lib/qt3/doc/html +%{_docdir}/qt3/html +/usr/share/applications/qtconfig3.desktop +/usr/share/applications/assistant3.desktop +/usr/share/pixmaps/assistant3.png + +%changelog diff --git a/opensuse/core/qt3/qt3-devel-doc.spec.in b/opensuse/core/qt3/qt3-devel-doc.spec.in new file mode 100644 index 000000000..ad9fd3e99 --- /dev/null +++ b/opensuse/core/qt3/qt3-devel-doc.spec.in @@ -0,0 +1,93 @@ +# +# spec file for package qt3 (Version 3.3.8b) +# +# Copyright (c) 2006 SUSE LINUX Products GmbH, Nuernberg, Germany. +# This file and all modifications and additions to the pristine +# package are under the same license as the package itself. +# +# Please submit bugfixes or comments via http://bugs.opensuse.org/ +# + +# norootforbuild + +Name: qt3-devel-doc +BuildRequires: cups-devel freeglut-devel freetype2-devel gcc-c++ pkgconfig update-desktop-files qt3-devel +%if %suse_version < 1130 +BuildRequires: libpng-devel +%else +BuildRequires: libpng14-devel +%endif +URL: http://www.trolltech.com/ +License: GPL, QPL +Autoreqprov: on +Summary: Qt 3 Development Kit +Group: Documentation/HTML +Version: 3.3.8c +Release: 1 +PreReq: /bin/grep +BuildArch: noarch +Provides: qt3-devel-tutorial +Obsoletes: qt3-devel-tutorial +Requires: qt3-devel +%define x11_free -x11-free- +%define rversion %version +# COMMON-BEGIN +# COMMON-END + +%description +You need this package if you want to compile programs with Qt 3. It +contains the "Qt Crossplatform Development Kit 2". You will find +include files, documentation, precompiled examples, and a tutorial for +getting started with Qt in /usr/lib/qt3. + +%build +export VERSION=%suse_version +source %SOURCE1 %{version} +export WLIB=%_lib +export QTDIR=`pwd` +if [ %_lib == "lib64" ]; then +export RPM_OPT_FLAGS="$RPM_OPT_FLAGS -DUSE_LIB64_PATHES" +fi +export RPM_OPT_FLAGS="$RPM_OPT_FLAGS -fno-strict-aliasing" +# +# call build from build_script.rpmrc for threaded Qt library +# only really needed tools will be builded here, all extra tools will be +# builded in qt3.spec +# +call_configure -thread -shared -no-sql-mysql -no-sql-psql -no-sql-odbc -no-sql-sqlite $OPTIONS +cd src +make %{?jobs:-j%jobs} +cd .. + +%install +export VERSION=%suse_version +export WLIB=%_lib +export QTDIR=`pwd` +source %SOURCE1 %{version} +cd src +make INSTALL_ROOT=$RPM_BUILD_ROOT install_htmldocs +cd .. +# +# install menu entries +# +%suse_update_desktop_file -i -u qtconfig3 Qt Utility DesktopSettings +%suse_update_desktop_file -i assistant3 Qt Development Documentation + +install -d -m 0755 ${RPM_BUILD_ROOT}/%{_defaultdocdir}/qt3/ +ln -sf /usr/lib/qt3/doc/html ${RPM_BUILD_ROOT}/%{_defaultdocdir}/qt3/ +mkdir -p $RPM_BUILD_ROOT/usr/share/pixmaps/ +install -m 0644 %SOURCE4 $RPM_BUILD_ROOT/usr/share/pixmaps/ + +%clean +rm -rf ${RPM_BUILD_ROOT} + +%files +%defattr(-,root,root) +%dir /usr/lib/qt3/doc +%doc /usr/lib/qt3/doc/html +%{_docdir}/qt3/html +/usr/share/applications/qtconfig3.desktop +/usr/share/applications/assistant3.desktop +/usr/share/pixmaps/assistant3.png + +%changelog -n qt3 diff --git a/opensuse/core/qt3/qt3-extensions.changes b/opensuse/core/qt3/qt3-extensions.changes new file mode 100644 index 000000000..db0df1efa --- /dev/null +++ b/opensuse/core/qt3/qt3-extensions.changes @@ -0,0 +1,2475 @@ +------------------------------------------------------------------- +Fri Sep 23 10:16:33 UTC 2011 - coolo@suse.com + +- fix qt3-extensions + +------------------------------------------------------------------- +Fri Apr 22 18:31:12 UTC 2011 - anixx@opensuse.org + +- changed compression to .tar.bz2 + +------------------------------------------------------------------- +Thu Apr 21 11:40:38 CEST 2011 - pth@suse.de + +- Don't try to patch in the version twice in qt-3.3.8c.diff. +- Resync those patches that don't apply without offset. +- Mark scriptlets in profile.d as being configuration files. +- Remove the calls to run_ldconfig. + +------------------------------------------------------------------- +Mon Apr 18 18:46:34 UTC 2011 - robxu9@gmail.com + +- a fix to the 3.3.8c patch + +------------------------------------------------------------------- +Thu Mar 31 18:15:29 UTC 2011 - coolo@novell.com + +- another gcc 4.6 fix + +------------------------------------------------------------------- +Mon Jan 31 21:23:51 UTC 2011 - robxu9@gmail.com + +- Update to version 3.3.8c, by the Trinity Project +- pre_checkin.sh was not run as this caused too many unneccesary + changes to occur. +- The translations tarball was left at version 3.3.8b. + +------------------------------------------------------------------- +Sat Nov 20 02:26:08 CET 2010 - dmueller@suse.de + +- fix build against gcc 4.6 + +------------------------------------------------------------------- +Mon Nov 1 10:09:40 UTC 2010 - coolo@novell.com + +- fix libpng dependencies + +------------------------------------------------------------------- +Wed Sep 1 13:22:38 UTC 2010 - pgajdos@novell.com + +- port to libpng14 + +------------------------------------------------------------------- +Wed May 5 19:42:33 UTC 2010 - coolo@novell.com + +- do not patch the symlink + +------------------------------------------------------------------- +Mon Apr 5 21:06:20 CEST 2010 - dmueller@suse.de + +- fix -devel package requires +- simplify requires of sub-specfiles + +------------------------------------------------------------------- +Mon Apr 5 16:00:15 CEST 2010 - dmueller@suse.de + +- build against libpng12 + +------------------------------------------------------------------- +Thu Jan 21 14:24:13 CET 2010 - dmueller@suse.de + +- recommend kdelibs3-default-style (bnc#544581) + +------------------------------------------------------------------- +Fri Dec 18 17:04:51 CET 2009 - jengelh@medozas.de + +- add baselibs.conf as a source +- add baselib definitions for SPARC + +------------------------------------------------------------------- +Fri Nov 13 14:28:47 CET 2009 - dmueller@suse.de + +- fix patches to apply with fuzz=0 + +------------------------------------------------------------------- +Tue Nov 3 19:14:30 UTC 2009 - coolo@novell.com + +- updated patches to apply with fuzz=0 + +------------------------------------------------------------------- +Tue Aug 11 11:24:13 CEST 2009 - dmueller@suse.de + +- fix popen leak (bnc#529615) + +------------------------------------------------------------------- +Mon Feb 9 12:08:04 CET 2009 - coolo@suse.de + +- strip out date from .la files + +------------------------------------------------------------------- +Sat Feb 7 20:43:40 CET 2009 - coolo@suse.de + +- do not put timestamps in generated sources + +------------------------------------------------------------------- +Wed Jan 7 12:34:56 CET 2009 - olh@suse.de + +- obsolete old -XXbit packages (bnc#437293) + +------------------------------------------------------------------- +Tue Nov 11 16:57:56 CET 2008 - ro@suse.de + +- SLE-11 uses PPC64 instead of PPC, adapt baselibs.conf + +------------------------------------------------------------------- +Wed Sep 10 18:50:12 CEST 2008 - dmueller@suse.de + +- remove qt3-static package + +------------------------------------------------------------------- +Mon Jul 21 21:20:47 CEST 2008 - dmueller@suse.de + +- more verbose qtimer debug + +------------------------------------------------------------------- +Sun Jun 22 13:00:45 CEST 2008 - schwab@suse.de + +- Fix invalid array reference in font name parser. + +------------------------------------------------------------------- +Thu Apr 10 12:54:45 CEST 2008 - ro@suse.de + +- added baselibs.conf file to build xxbit packages + for multilib support + +------------------------------------------------------------------- +Mon Mar 10 16:48:36 CET 2008 - dmueller@suse.de + +- fix build with updated x.org + +------------------------------------------------------------------- +Thu Feb 7 17:51:25 CET 2008 - dmueller@suse.de + +- fix memory corruption when removing CRTc's dynamically + +------------------------------------------------------------------- +Sat Jan 19 07:19:25 CET 2008 - stbinner@suse.de + +- This version adds the GNU Public License version 3 as a + possible choice for licenses to the Open Source releases of Qt 3. +- upstreaming of patches and few other minor bugfixes + +------------------------------------------------------------------- +Tue Jan 15 01:42:37 CET 2008 - dmueller@suse.de + +- fix xrandr resize race (#335410) + +------------------------------------------------------------------- +Thu Dec 6 01:32:32 CET 2007 - dmueller@suse.de + +- fix the build key for gcc 4.3 + +------------------------------------------------------------------- +Mon Dec 3 15:12:36 CET 2007 - dmueller@suse.de + +- back out khmer "fix" from 3.3.8, which apparently + made it worse (#345459) + +------------------------------------------------------------------- +Tue Nov 20 20:25:18 CET 2007 - dmueller@suse.de + +- fix build with gcc 4.3 again + +------------------------------------------------------------------- +Mon Oct 1 11:48:51 CEST 2007 - dmueller@suse.de + +- fix build with gcc 4.3 + +------------------------------------------------------------------- +Fri Sep 7 12:32:22 CEST 2007 - dmueller@suse.de + +- fix off-by-one in utf8 decoder (#304249, CVE-2007-4137) +- fix typo in QDate::fromString() + +------------------------------------------------------------------- +Wed Aug 29 17:08:22 CEST 2007 - llunak@suse.cz + +- fix reading MNG files, visible in Kickoff (#278548) +- remove patching of symlinks from the immodule patch +- improve support for compositing (qt-copy patches #0079,#0080) + +------------------------------------------------------------------- +Fri Aug 24 18:39:04 CEST 2007 - dmueller@suse.de + +- fix format string issues (#291754, CVE-2007-3388) +- fix xrandr 1.2 detection + +------------------------------------------------------------------- +Thu Jul 5 17:25:18 CEST 2007 - coolo@suse.de + +- package desktop files and png files + +------------------------------------------------------------------- +Thu Jun 21 12:04:33 CEST 2007 - stbinner@suse.de + +- run fdupes in qt3-extensions.spec + +------------------------------------------------------------------- +Thu May 24 19:15:38 CEST 2007 - dmueller@suse.de + +- redo the last change in the correct spec file + +------------------------------------------------------------------- +Wed May 23 17:08:39 CEST 2007 - dmueller@suse.de + +- qt3-examples -> qt3-devel-examples + +------------------------------------------------------------------- +Thu May 17 06:49:50 CEST 2007 - stbinner@suse.de + +- removed some historic stuff from the spec file + +------------------------------------------------------------------- +Tue May 8 14:32:40 CEST 2007 - dmueller@suse.de + +- trust libxinerama only if it provides more screens + than xrandr crtcs (#264199) + +------------------------------------------------------------------- +Fri May 4 19:06:40 CEST 2007 - dmueller@suse.de + +- fix permissions of qmake specs + +------------------------------------------------------------------- +Wed May 2 11:50:07 CEST 2007 - coolo@suse.de + +- remove Suse-translate from desktop file +- remove obsolete suse version support + +------------------------------------------------------------------- +Mon Apr 30 14:39:40 CEST 2007 - stbinner@suse.de + +- fix build of qt3-devel-doc with desktop-file-validate run + +------------------------------------------------------------------- +Mon Apr 16 16:10:59 CEST 2007 - dmueller@suse.de + +- temporarily disable Xrandr 1.2 support until (#264199) is + resolved +- use -Bsymbolic-functions + +------------------------------------------------------------------- +Sun Apr 1 20:40:04 CEST 2007 - dmueller@suse.de + +- fix utf8 decoder (#259187, CVE-2007-0242) + +------------------------------------------------------------------- +Thu Mar 29 18:02:30 CEST 2007 - dmueller@suse.de + +- Fix XRandr 1.2 support + +------------------------------------------------------------------- +Fri Mar 16 14:52:22 CET 2007 - dmueller@suse.de + +- call XftDefaultSubstitute (#255330) + +------------------------------------------------------------------- +Thu Mar 15 11:07:44 CET 2007 - dmueller@suse.de + +- update font fix patch (#244579) + +------------------------------------------------------------------- +Mon Mar 12 16:09:29 CET 2007 - dmueller@suse.de + +- enable tablet support (#253392) +- add default substitution for font queries (#244579) + +------------------------------------------------------------------- +Tue Mar 6 19:37:48 CET 2007 - dmueller@suse.de + +- fix mysql driver crash on shutdown (#251222) + +------------------------------------------------------------------- +Sun Feb 25 11:52:26 CET 2007 - dmueller@suse.de + +- update to 3.3.8: + * changelog is under /usr/share/doc/packages/qt3/changes-3.3.8 + +------------------------------------------------------------------- +Wed Feb 21 13:00:52 CET 2007 - dmueller@suse.de + +- fix build for 9.3 + +------------------------------------------------------------------- +Wed Feb 7 10:39:13 CET 2007 - dmueller@suse.de + +- also build qt3-static as full-config + +------------------------------------------------------------------- +Mon Feb 5 15:18:34 CET 2007 - stbinner@suse.de + +- fix build of qt3-extensions on 9.3 + +------------------------------------------------------------------- +Fri Feb 2 15:41:36 CET 2007 - stbinner@suse.de + +- fix changelog chronological order + +------------------------------------------------------------------- +Wed Jan 31 21:40:07 CET 2007 - dmueller@suse.de + +- add a sanity check to ensure that we have a full version +- fix compile warnings in headers + +------------------------------------------------------------------- +Tue Jan 9 15:36:14 CET 2007 - dmueller@suse.de + +- drop misfuzzed patch + +------------------------------------------------------------------- +Mon Jan 8 18:35:16 CET 2007 - dmueller@suse.de + +- add patch to fix indic rendering issue + +------------------------------------------------------------------- +Tue Oct 31 13:18:44 CET 2006 - dmueller@suse.de + +- add patch to fix han localisation issue (#216183) +- update qt-debug-timer patch to output more verbose debug +- add patch to fix xinerama issue with popupmenus (#216235) + +------------------------------------------------------------------- +Fri Oct 20 15:54:30 CEST 2006 - dmueller@suse.de + +- update to 3.3.7: + * include CVE-2006-4811 patch + +------------------------------------------------------------------- +Thu Oct 19 15:21:51 CEST 2006 - dmueller@suse.de + +- add patch for integer overflow in QPixmap/QImage + (#212544, CVE-2006-4811) + +------------------------------------------------------------------- +Tue Oct 10 23:31:01 CEST 2006 - dmueller@suse.de + +- add patch for qtimer debugging + +------------------------------------------------------------------- +Wed Oct 4 19:39:56 CEST 2006 - dmueller@suse.de + +- fix headers to compile in -pedantic mode + +------------------------------------------------------------------- +Thu Sep 14 13:27:03 CEST 2006 - dmueller@suse.de + +- don't install static libs as executable + +------------------------------------------------------------------- +Fri Sep 1 16:18:07 CEST 2006 - llunak@suse.cz + +- Add patches with Xinerama improvements. + +------------------------------------------------------------------- +Thu Aug 17 13:42:28 CEST 2006 - stbinner@suse.de + +- fix qt3-devel-tools file conflict with qt-devel-doc + +------------------------------------------------------------------- +Tue Aug 1 14:47:18 CEST 2006 - stbinner@suse.de + +- disable noisy debug message in qt-x11-immodule-unified diff + +------------------------------------------------------------------- +Sun Jul 9 21:39:54 CEST 2006 - stbinner@suse.de + +- fix {designer3,linguist}.desktop starting Qt4 versions (#190135) + +------------------------------------------------------------------- +Tue Jul 04 15:12:18 CEST 2006 - mfabian@suse.de + +- update qt-x11-immodule-unified diff to 20060318 version. + This update already includes the following patches: + + fix-x11-immodule.diff + + disable-inputmethod-for-passords.patch + + qt-x11-immodule-capitalization-fix.diff + + fix-im-crash-on-exit.diff + + fix-immodule-buffer-overflow.diff + + qt-x11-immodule-qtextedit-fix.diff + + qt-x11-immodule-focus-handling.diff + + qt-x11-immodule-fix-inputcontext-crash.diff + which are thus removed. + +------------------------------------------------------------------- +Wed Jun 28 10:07:30 CEST 2006 - dmueller@suse.de + +- fix $QT_SYSTEM_DIR (#188217) + +------------------------------------------------------------------- +Fri Jun 9 15:25:49 CEST 2006 - llunak@suse.de + +- add $QT_SYSTEM_DIR (#183059) + +------------------------------------------------------------------- +Wed May 31 15:51:01 CEST 2006 - adrian@suse.de + +- remove BuildRequires libdrm-devel + +------------------------------------------------------------------- +Wed May 31 13:24:56 CEST 2006 - dmueller@suse.de + +- fix xpm image loading problem +- add performance regression fix +- add asian font loading fix + +------------------------------------------------------------------- +Mon May 29 08:41:44 CEST 2006 - adrian@suse.de + +- revert requires macro, this breaks the build system mapping +- require right packages in -devel for < 10.1 + +------------------------------------------------------------------- +Fri May 26 19:40:44 CEST 2006 - dmueller@suse.de + +- fix build + +------------------------------------------------------------------- +Fri May 26 10:42:43 CEST 2006 - dmueller@suse.de + +- 3.3.6 update + * numerous bugfixes and translations + +------------------------------------------------------------------- +Wed May 10 17:12:34 CEST 2006 - dmueller@suse.de + +- drop substitutions from global rc file (#171513) + +------------------------------------------------------------------- +Fri Apr 14 01:46:36 CEST 2006 - dmueller@suse.de + +- drop linguist3.png/desktop as its unused and install + linguist.desktop instead (fixes build failure). + +------------------------------------------------------------------- +Mon Apr 10 10:40:11 CEST 2006 - dmueller@suse.de + +- strip installed static libraries +- fix file conflict with Qt4 packages + +------------------------------------------------------------------- +Mon Apr 3 16:34:14 CEST 2006 - dmueller@suse.de + +- restore libraryPaths which broke instsys (#162930) + +------------------------------------------------------------------- +Thu Mar 30 12:49:05 CEST 2006 - coolo@suse.de + +- update qtrc to the real values avoiding dark gray platinum even + if not overwritten with desktop settings + +------------------------------------------------------------------- +Tue Mar 21 14:59:49 CET 2006 - dmueller@suse.de + +- update patch for QLabel layout issues to the one from Qt 3.3.7 + +------------------------------------------------------------------- +Fri Mar 17 18:39:04 CET 2006 - dmueller@suse.de + +- add patch for QLabel layout management issues (#153029) + +------------------------------------------------------------------- +Fri Mar 17 12:23:30 CET 2006 - dmueller@suse.de + +- fix crash on painting > 32000 chars at once +- fix error in wrapping japanese text +- fix QFile::flush() not setting error status +- fix window gravity being wrong for RTL + +------------------------------------------------------------------- +Tue Mar 14 00:22:32 CET 2006 - dmueller@suse.de + +- fix filelist + +------------------------------------------------------------------- +Mon Mar 13 17:02:09 CET 2006 - dmueller@suse.de + +- build qt3-devel-doc as noarch package + +------------------------------------------------------------------- +Tue Mar 7 10:49:56 CET 2006 - dmueller@suse.de + +- moving libqassistantclient to -devel (#155519) and assistant + to qt3. +- translation update +- fix assistant invocation to prefer Qt3's assistant over Qt 4.x + +------------------------------------------------------------------- +Wed Feb 22 14:00:00 CET 2006 - dmueller@suse.de + +- fix crash when not able to load imswitch (#117443) + +------------------------------------------------------------------- +Sat Feb 18 01:15:54 CET 2006 - dmueller@suse.de + +- add more immodule fixes +- fix build of qt3-extensions +- remove sections for SL < 9.2 + +------------------------------------------------------------------- +Fri Feb 17 16:47:41 CET 2006 - dmueller@suse.de + +- fix crash on shutdown (#151831) + +------------------------------------------------------------------- +Mon Feb 13 15:52:19 CET 2006 - coolo@suse.de + +- update translations + +------------------------------------------------------------------- +Mon Feb 6 05:22:44 CET 2006 - zsu@suse.de + +- Add patch qt3-khmer-script.patch to fix a rendering issue of Khmer + script (by Jens Herden, #147190). + +------------------------------------------------------------------- +Sat Jan 28 10:48:06 CET 2006 - coolo@suse.de + +- really install the icon + +------------------------------------------------------------------- +Fri Jan 27 20:02:59 CET 2006 - llunak@suse.cz + +- fix rubberband.diff to emit selectionChanged() properly (#132920) + +------------------------------------------------------------------- +Fri Jan 27 12:24:41 CET 2006 - coolo@suse.de + +- avoid file conflict with qt package + +------------------------------------------------------------------- +Fri Jan 27 08:08:10 CET 2006 - coolo@suse.de + +- fix qt3.sh + +------------------------------------------------------------------- +Fri Jan 27 02:21:53 CET 2006 - mls@suse.de + +- converted neededforbuild to BuildRequires + +------------------------------------------------------------------- +Wed Jan 25 18:06:26 CET 2006 - dmueller@suse.de + +- set $QTDIR in /etc/profile.d/qt3.(c)sh + +------------------------------------------------------------------- +Sat Dec 3 14:30:43 CET 2005 - coolo@suse.de + +- build with -Bdirect if available +- updating font patch + +------------------------------------------------------------------- +Fri Dec 2 00:11:21 CET 2005 - dmueller@suse.de + +- build with -fno-strict-aliasing + +------------------------------------------------------------------- +Wed Nov 23 10:18:29 CET 2005 - dmueller@suse.de + +- unify spec files via a common patch/sources section + and adjust spec files accordingly +- add /etc/profile.d hook to put qmake in the path (#134377) +- drop fast-malloc patch for all packages (#134563) + +------------------------------------------------------------------- +Fri Nov 18 15:20:21 CET 2005 - stbinner@suse.de + +- only disable FcFontSort patch for released distributions + +------------------------------------------------------------------- +Fri Nov 18 12:08:43 CET 2005 - stbinner@suse.de + +- disable FcFontSort patch because of immaturity + +------------------------------------------------------------------- +Fri Nov 11 15:48:07 CET 2005 - dmueller@suse.de + +- avoid crashes after QListView::clear() + +------------------------------------------------------------------- +Wed Nov 2 15:52:04 CET 2005 - coolo@suse.de + +- avoid FcFontSort as it's very expensive + +------------------------------------------------------------------- +Thu Oct 27 14:38:16 CEST 2005 - stbinner@suse.de + +- extend fix-key-release-event-with-imm.diff to fix another Immodule + related key release event bug (#130727) + +------------------------------------------------------------------- +Wed Oct 12 19:25:52 CEST 2005 - dmueller@suse.de + +- update -Werror patch to catch one more case + +------------------------------------------------------------------- +Mon Oct 10 16:58:30 CEST 2005 - dmueller@suse.de + +- add patch to fix broken key compression (#121049) + +------------------------------------------------------------------- +Sat Oct 8 00:04:41 CEST 2005 - dmueller@suse.de + +- patch cleanup + +------------------------------------------------------------------- +Wed Oct 5 13:59:53 CEST 2005 - dmueller@suse.de + +- add 0065-fix_werror_with_gcc4.patch (#119209) + +------------------------------------------------------------------- +Wed Sep 28 16:32:43 CEST 2005 - stbinner@suse.de + +- removed historic "Autoreqprov:off" leftover + +------------------------------------------------------------------- +Wed Sep 28 15:27:34 CEST 2005 - stbinner@suse.de + +- add a patch to fix capitalization of Immodule strings + +------------------------------------------------------------------- +Mon Sep 26 10:57:35 CEST 2005 - coolo@suse.de + +- fix build on x86_64 + +------------------------------------------------------------------- +Mon Sep 19 12:40:22 CEST 2005 - mfabian@suse.de + +- Bugzilla #117115: enable input methods in qlineedit widgets + only when "mode == Normal" (i.e. not when "mode == NoEcho" or + "mode == Password"). Using input methods while inputting + passwords is useless and confusing. + +------------------------------------------------------------------- +Fri Sep 16 23:06:14 CEST 2005 - schwab@suse.de + +- Never strip gratuitously. + +------------------------------------------------------------------- +Thu Sep 15 10:57:05 CEST 2005 - stbinner@suse.de + +- update to version 3.3.5 + +------------------------------------------------------------------- +Mon Sep 5 13:04:30 CEST 2005 - coolo@suse.de + +- layout popup menus correctly (#113048) + +------------------------------------------------------------------- +Fri Aug 19 17:04:02 CEST 2005 - llunak@suse.cz + +- Place dialog properly for systray icons on xinerama (#104794). + +------------------------------------------------------------------- +Fri Jul 29 18:24:24 CEST 2005 - dmueller@suse.de + +- add Q_EXPORT visibility support +- Fix gcc 4.0.x compiler detection for qt plugin buildkey + +------------------------------------------------------------------- +Thu Jun 23 14:37:00 CEST 2005 - mrueckert@suse.de + +- Applied patch from Lubos Lunak to fix drag'n'drop when the + visible window is not at the top of the window stack. + +------------------------------------------------------------------- +Fri Jun 10 17:28:47 CEST 2005 - adrian@suse.de + +- Apply workaround from Simon Hausmann to avoid miscompilation with gcc4 + +------------------------------------------------------------------- +Tue Jun 7 16:15:54 CEST 2005 - adrian@suse.de + +- do not trigger -debug configure flag on -g, but use it for beta + distribution + +------------------------------------------------------------------- +Tue May 31 10:49:30 CEST 2005 - adrian@suse.de + +- require freeglut-devel instead of XFree86-Mesa-devel + +------------------------------------------------------------------- +Fri Apr 15 19:52:35 CEST 2005 - mfabian@suse.de + +- Bugzilla #74133: check for some more glyphs for Katakana and + Hiragana, especially also check for all the glyphs which are + checked for Han_Japanese. This usually guarantees that the same + font is used for Katakana and Hiragana as for Japanese Kanji, + which is what we want. + +------------------------------------------------------------------- +Fri Apr 8 15:28:36 CEST 2005 - uli@suse.de + +- fixed to build with GCC4 on ARM + +------------------------------------------------------------------- +Mon Apr 4 15:02:41 CEST 2005 - adrian@suse.de + +- apply patches from qt-copy, fixes for mouse handling in popups + +------------------------------------------------------------------- +Thu Mar 24 09:57:01 CET 2005 - adrian@suse.de + +- update font mappings in qtrc for asian languages (#74363) + +------------------------------------------------------------------- +Wed Mar 16 17:54:12 CET 2005 - adrian@suse.de + +- fix possible crash in qtranslator (#71968, by Lubos) + +------------------------------------------------------------------- +Fri Mar 4 15:50:50 CET 2005 - adrian@suse.de + +- fix loading of style plugins for lib/lib64 mixed systesm (by Lubos) + +------------------------------------------------------------------- +Fri Feb 25 13:26:56 CET 2005 - adrian@suse.de + +- fix all Exec= lines for menu entries + +------------------------------------------------------------------- +Fri Feb 11 18:29:14 CET 2005 - adrian@suse.de + +- apply patch for rubberband selections from Andre Moreira Magalhaes + +------------------------------------------------------------------- +Wed Feb 9 17:55:47 CET 2005 - adrian@suse.de + +- add qclipboard hack to avoid freezes from qt-copy again + +------------------------------------------------------------------- +Wed Feb 2 16:35:44 CET 2005 - adrian@suse.de + +- fix plugin loading for the KDE integration + +------------------------------------------------------------------- +Wed Jan 26 17:49:46 CET 2005 - adrian@suse.de + +- update to version 3.3.4 +- reenable limit size patch to keep BC +- remove qclipboard fix, it got merged +- remove bidi fixes, they got merged +- remove gif handler fixes, they got merged +- apply KDE dialog integration code from Lubos +- revert some changes in imm code to solve a problem with missing + key release events + +------------------------------------------------------------------- +Fri Jan 14 14:12:06 CET 2005 - adrian@suse.de + +- update imm patch to version from 20041203 +- disable image size patch for now, it broke printing of large images + +------------------------------------------------------------------- +Wed Jan 5 13:37:00 CET 2005 - adrian@suse.de + +- reenable the SHM patch again +- add qtimm patch to solve an issue with Opera +- remove binary links from /usr/bin/, they do conflict with Qt 4 + +------------------------------------------------------------------- +Mon Nov 22 12:06:33 CET 2004 - ro@suse.de + +- "sed -i" does not work on old distributions + +------------------------------------------------------------------- +Tue Nov 16 11:04:55 CET 2004 - adrian@suse.de + +- package icon files for desktop entries + +------------------------------------------------------------------- +Mon Nov 8 16:07:11 CET 2004 - coolo@suse.de + +- improve Waldo's patch to limit image dimensions + +------------------------------------------------------------------- +Fri Oct 29 23:29:44 CEST 2004 - schwab@suse.de + +- Revert last change to png writing. + +------------------------------------------------------------------- +Tue Oct 26 10:51:34 CEST 2004 - adrian@suse.de + +- fix from Lubos for full screen mode switching on 64bit (#46972) + +------------------------------------------------------------------- +Mon Oct 25 14:26:40 CEST 2004 - schwab@suse.de + +- Extend last change to png writing. + +------------------------------------------------------------------- +Sat Oct 23 23:23:21 CEST 2004 - schwab@suse.de + +- Fix endian bug in png reading. + +------------------------------------------------------------------- +Thu Oct 14 18:09:56 CEST 2004 - adrian@suse.de + +- fix assitant zoom functionality, patch by Waldo (#45688) + +------------------------------------------------------------------- +Mon Oct 11 18:11:32 CEST 2004 - adrian@suse.de + +- fix requires of qt3-devel for new x.org packages + +------------------------------------------------------------------- +Wed Sep 29 10:27:12 CEST 2004 - adrian@suse.de + +- prefer MiscGlyphSymbol fonts with tics over others (#46280) +- enable BiDi support by default + +------------------------------------------------------------------- +Tue Sep 28 11:45:55 CEST 2004 - mfabian@suse.de + +- Bugzilla #46216: make "On The Spot" the default input style + for Qt. + +------------------------------------------------------------------- +Sat Sep 25 13:46:59 CEST 2004 - adrian@suse.de + +- prefer the .lib64.so extension on lib64 systems, but do not + require it anymore + +------------------------------------------------------------------- +Fri Sep 24 22:10:29 CEST 2004 - adrian@suse.de + +- fix load of plugins on lib64 systems. The plugins do need a + .lib64.so extension now + +------------------------------------------------------------------- +Wed Sep 15 17:52:55 CEST 2004 - adrian@suse.de + +- add two more glyphs to simplified chinese detection. (#44059) + +------------------------------------------------------------------- +Tue Sep 14 13:57:01 CEST 2004 - adrian@suse.de + +- handle also hongkong chinese local in a correct way (#44059) +- prefer chinese fonts via optional glyphs, but use also + the free ones, if no commercial font is avaible (#44059) + +------------------------------------------------------------------- +Mon Sep 13 20:14:31 CEST 2004 - adrian@suse.de + +- hopefully solve the chinese font detection problems (#44059) + +------------------------------------------------------------------- +Mon Sep 13 11:17:50 CEST 2004 - adrian@suse.de + +- fix build for old distributions +- prepare qt for konsole transparency mode (via composite extension) + +------------------------------------------------------------------- +Fri Sep 10 17:43:56 CEST 2004 - mfabian@suse.de + +- update to qt-x11-immodule-unified-qt3.3.3-20040910.diff which + merges the previous three patches (With help from Adrian to + make it build). + +------------------------------------------------------------------- +Fri Sep 10 16:34:52 CEST 2004 - mfabian@suse.de + +- add qt-x11-immodule-unified-qt3.3.3-r123-event-inversion-20040909.diff + to fix the endless loop problem when using M17N-t-latin1-post + or M17N-vi-viqr. See also + http://freedesktop.org/pipermail/immodule-qt/2004-September/000447.html + and followups. Patch thanks to Yamaken. + +------------------------------------------------------------------- +Wed Sep 8 10:13:26 CEST 2004 - adrian@suse.de + +- add 3.3.3 regression fixes in pre-3.3.4.diff +- add bidi fixes from qt-copy +- add qpixmap mitshm support from Lubos +- update immodule patch to stable release 20040819 +- adding event inversion fix for immodule from Zhe Su + +------------------------------------------------------------------- +Fri Sep 3 15:06:55 CEST 2004 - adrian@suse.de + +- udpate qt immodule patch to snapshot from 20040814 + +------------------------------------------------------------------- +Thu Aug 26 17:09:14 CEST 2004 - adrian@suse.de + +- disable explicit debug flags again + +------------------------------------------------------------------- +Mon Aug 23 13:23:02 CEST 2004 - adrian@suse.de + +- apply workaround for broken focus handling cause by the xim + patch due to a bug in X for released distributions (by Lubos) + +------------------------------------------------------------------- +Wed Aug 18 12:06:15 CEST 2004 - adrian@suse.de + +- enable full debug compile, if -g is in RPM_OPT_FLAGS + +------------------------------------------------------------------- +Tue Aug 17 14:46:19 CEST 2004 - coolo@suse.de + +- install qt3 after grep + +------------------------------------------------------------------- +Tue Aug 17 07:27:13 CEST 2004 - adrian@suse.de + +- apply patch from Waldo to be able to limit the size of loaded + images. Important for khtml (#43841) +- apply fix to handle the side pixmap of the kmenu correctly (0047) +- apply KToolBarButton fix (0051) + +------------------------------------------------------------------- +Fri Aug 13 06:19:32 CEST 2004 - adrian@suse.de + +- fix gif handling (#43356) + +------------------------------------------------------------------- +Thu Aug 12 08:23:16 CEST 2004 - adrian@suse.de + +- update to version 3.3.3 +- remove obsolete patches + +------------------------------------------------------------------- +Tue Aug 3 16:16:53 CEST 2004 - adrian@suse.de + +- add patch to support scim + +------------------------------------------------------------------- +Wed Jun 9 15:21:27 CEST 2004 - adrian@suse.de + +- update asian font mappings for commercial japanese fonts + (by mfabian) + +------------------------------------------------------------------- +Wed Jun 2 16:17:53 CEST 2004 - adrian@suse.de + +- fix libGL loading in the right way, no .so link is needed anymore + again + +------------------------------------------------------------------- +Wed May 26 16:47:34 CEST 2004 - adrian@suse.de + +- load libGL via .so link again (due to the different possible + setups #41118) +- libXmu gets still loaded via hardcoded path and version + +------------------------------------------------------------------- +Tue Apr 27 15:55:48 CEST 2004 - adrian@suse.de + +- update to version 3.3.2 + * remove obsolete patches +- do apply %patch16 + +------------------------------------------------------------------- +Fri Apr 23 09:26:44 CEST 2004 - adrian@suse.de + +- disable atk support for released distributions + +------------------------------------------------------------------- +Thu Apr 22 11:40:17 CEST 2004 - coolo@suse.de + +- another try to fix wrong font caching also for japanese/chinese + +------------------------------------------------------------------- +Tue Apr 20 11:34:13 CEST 2004 - coolo@suse.de + +- apply fix for wrong font caching (#39175) + +------------------------------------------------------------------- +Fri Apr 16 11:42:30 CEST 2004 - adrian@suse.de + +- apply fix for opentype aliasing issues + +------------------------------------------------------------------- +Tue Apr 13 10:50:22 CEST 2004 - adrian@suse.de + +- fix OpenGL support, if no -devel package is installed (#38857) +- fix xcursor support +- add current snapshot of Qt-ATK bridge patch + (disabled as long USE_QACCESSIBLE enviroment variable isn't set) + +------------------------------------------------------------------- +Sat Apr 3 10:07:55 CEST 2004 - adrian@suse.de + +- apply 0043-fix_expired_cookie_crash.diff from qt-copy(by Dirk) + * qt based applications can crash in ssh sessions with new + openssh (#38185) + +------------------------------------------------------------------- +Wed Mar 31 17:47:33 CEST 2004 - mfabian@suse.de + +- Bugzilla #37720: + add font substitutions for "SUSE*" fonts to default qtrc. + +------------------------------------------------------------------- +Thu Mar 25 10:12:37 CET 2004 - coolo@suse.de + +- fix for richtext tags (in knotes) +- fix for fonts with multiple scripts (#36583) +- fix for custom resolutions + +------------------------------------------------------------------- +Tue Mar 16 16:29:42 CET 2004 - adrian@suse.de + +- fix for command line handling (XIM in QApplication)(#35881) +- fix double packaging of qassistant translations + +------------------------------------------------------------------- +Mon Mar 15 17:55:57 CET 2004 - adrian@suse.de + +- define a default Font again. (Sans Serif with 10points) + (#36014) + +------------------------------------------------------------------- +Wed Mar 10 08:44:03 CET 2004 - adrian@suse.de + +- fix for xcursor cache hangling (by Lubos) +- move assistant to -devel-doc package + +------------------------------------------------------------------- +Thu Mar 4 22:10:52 CET 2004 - adrian@suse.de + +- apply fix for not found monospaced fonts without Euro glyph + (Patch by Lars Knoll) + +------------------------------------------------------------------- +Thu Mar 4 13:53:53 CET 2004 - adrian@suse.de + +- apply different bugfix and speed enhancement patches from qt-copy + as recommended by Lubos + * 0001: DnD optimisation + * 0002: Active Window Fix + * 0007: MITSHM extension support for QPixmap<>Qimage conversation + * 0037: dnd timestamp fix + * 0038: dragobject prefer fix + +------------------------------------------------------------------- +Mon Mar 1 11:39:25 CET 2004 - adrian@suse.de + +- update to final 3.3.1 version +- disable fast-malloc for > 9.0, nptl does work good enough +- add qclipboard-recursion-fix from Lubos +- further 64bit aliasing fixes + +------------------------------------------------------------------- +Mon Feb 16 14:43:49 CET 2004 - adrian@suse.de + +- update to current snapshot (3.3.1-snapshot-20040216) +- build opentype with -fno-strict-aliasing + +------------------------------------------------------------------- +Mon Feb 9 17:02:41 CET 2004 - adrian@suse.de + +- fix non-latin1 QString handling + (patch from Roman Stepanov) + +------------------------------------------------------------------- +Wed Feb 4 20:24:37 CET 2004 - adrian@suse.de + +- update to version 3.3.0 final +- disable 3rdparty source and use system libraries + +------------------------------------------------------------------- +Thu Jan 29 14:05:26 CET 2004 - adrian@suse.de + +- update to snapshot 20040129 +- use original qstring again, kprinter got fixed + +------------------------------------------------------------------- +Sun Jan 25 17:53:03 CET 2004 - adrian@suse.de + +- update to snapshot 20040125 +- revert qstring changes + +------------------------------------------------------------------- +Tue Jan 13 14:52:07 CET 2004 - adrian@suse.de + +- update to snapshot 20040113 + +------------------------------------------------------------------- +Mon Dec 29 11:48:49 CET 2003 - adrian@suse.de + +- update to snapshot from 20031229 to get KDE compiling again +- remove upstream included translation files +- cleanup stuff not anymore needed +- do not build sqlite plugin with (broken) sqlite sources from qt + tar ball anymore + +------------------------------------------------------------------- +Thu Dec 11 13:10:37 CET 2003 - adrian@suse.de + +- update to version 3.3 beta 1 + * solves the remaining issues with dlopen GL + +------------------------------------------------------------------- +Tue Dec 9 17:20:56 CET 2003 - adrian@suse.de + +- add KDE plugin path for qt 3.3 + +------------------------------------------------------------------- +Thu Dec 4 11:25:27 CET 2003 - adrian@suse.de + +- update to snapshot 20031204 +- do not link against GL libs anymore, but still support GL via dlopen + apps and libs beside libbqt* are still linked against GL for now +- build fix for qt3-extensions + +------------------------------------------------------------------- +Tue Dec 2 17:54:34 CET 2003 - adrian@suse.de + +- update to current 3.3 snapshot ( 20031202 - pre beta 1) + * obsoletes several patches + * IPv6 support +- temporary disabled PostgreSQL support +- add SQLite support + +------------------------------------------------------------------- +Fri Nov 21 11:05:33 CET 2003 - adrian@suse.de + +- drop not applyed font_fixes patch and add the old Xft2 fixes + again, to support displays without Render extension. + +------------------------------------------------------------------- +Fri Nov 14 14:30:11 CET 2003 - adrian@suse.de + +- update to version 3.2.3 and usual patch cleanup + +------------------------------------------------------------------- +Thu Oct 23 09:52:28 CEST 2003 - adrian@suse.de + +- build without -mminimal-toc on ppc64 +- apply crash fix from TT for some fonts in XLFD mode + +------------------------------------------------------------------- +Thu Oct 16 16:00:46 CEST 2003 - adrian@suse.de + +- update to version 3.2.2 + * font fixes patch is not applied intentionaly, for testing + plain qt behaviour for now. + +------------------------------------------------------------------- +Thu Oct 2 12:06:08 CEST 2003 - adrian@suse.de + +- require freeglut-devel, instead of mesaglut-devel for > 9.0 + +------------------------------------------------------------------- +Tue Sep 30 09:25:31 CEST 2003 - coolo@suse.de + +- using the right tool to compile translation files + +------------------------------------------------------------------- +Thu Sep 25 13:05:03 CEST 2003 - adrian@suse.de + +- update fontconfig patch again, fixes multiple listing of fonts +- do not complain anymore about not matching plugin + +------------------------------------------------------------------- +Sun Sep 21 15:02:56 CEST 2003 - adrian@suse.de + +- prefer Nimbus fonts, instead of using asian fonts, if possible + (the asian fonts have some broken latin chars) + +------------------------------------------------------------------- +Sun Sep 21 12:35:19 CEST 2003 - adrian@suse.de + +- install html docu to the same place as on 8.2, to solve + update problems (#31507). (install dir and symlink was + swapped for unknown reason) + +------------------------------------------------------------------- +Fri Sep 19 15:48:11 CEST 2003 - adrian@suse.de + +- memory leak fix from Lars in QTextEngine + +------------------------------------------------------------------- +Thu Sep 18 16:35:05 CEST 2003 - adrian@suse.de + +- updated patches from Lars + * fixing Unicode families and foundaries issues + * printing issues +- clean up unused patches + +------------------------------------------------------------------- +Wed Sep 17 18:31:56 CEST 2003 - adrian@suse.de + +- a bit more silence .. QPixmap before QApplication warning is away +- new asian font mappings from mfabian + +------------------------------------------------------------------- +Mon Sep 15 18:02:31 CEST 2003 - adrian@suse.de + +- new font fixes from Lars, the default size problem should be away +- fix build for non-Xft2 distibutions + +------------------------------------------------------------------- +Thu Sep 11 22:18:01 CEST 2003 - adrian@suse.de + +- silence on lib64 systems with 32bit plugins installed (#30559) +- ensure to have a [3.2] section in old qtrc files + +------------------------------------------------------------------- +Mon Sep 8 16:26:49 CEST 2003 - coolo@suse.de + +- apply fix from TT to fix konsole + setRawName + +------------------------------------------------------------------- +Thu Sep 4 12:53:19 CEST 2003 - adrian@suse.de + +- add always lib and lib64 kde plugin path to qtrc + +------------------------------------------------------------------- +Wed Sep 3 16:55:00 CEST 2003 - adrian@suse.de + +- apply fix from TT: "don't generate bogus mouse move events." +- qt3-devel requires XFree86-Mesa-devel + +------------------------------------------------------------------- +Tue Sep 2 17:20:05 CEST 2003 - adrian@suse.de + +- add slovak translation from Stanislav Visnovsky +- add czech translation from Klara Cihlarova + +------------------------------------------------------------------- +Tue Sep 2 16:20:15 CEST 2003 - adrian@suse.de + +- add asian mappings from 8.2 to qtrc again + +------------------------------------------------------------------- +Mon Sep 1 18:13:33 CEST 2003 - meissner@suse.de + +- Don't do readlink checks for set*id programs (will break + in TLS startup sequence of glibc), just fall back to old + malloc. #29530 + +------------------------------------------------------------------- +Mon Sep 1 12:02:00 CEST 2003 - adrian@suse.de + +- apply qlineedit fix from TT + +------------------------------------------------------------------- +Mon Sep 1 11:30:31 CEST 2003 - adrian@suse.de + +- qtconfig menu entry becomes unimportant + +------------------------------------------------------------------- +Sun Aug 31 22:33:44 CEST 2003 - adrian@suse.de + +- generate .la file again + +------------------------------------------------------------------- +Fri Aug 29 15:16:43 CEST 2003 - adrian@suse.de + +- use newer font_fixes patch from Lars +- enforce usage of Xft2 even on non-Xrender displays +- revert qclipboard changes to 3.1.2 code + +------------------------------------------------------------------- +Wed Aug 27 13:38:51 CEST 2003 - adrian@suse.de + +- use official 3.2.1 tar ball instead of 3.2.0+patch + +------------------------------------------------------------------- +Tue Aug 26 08:20:07 CEST 2003 - adrian@suse.de + +- new _big_ fix from Lars for fixing the remaining font issues + +------------------------------------------------------------------- +Sun Aug 24 16:55:24 CEST 2003 - adrian@suse.de + +- apply fix from Lars for the foundary font problem, when + using pixmap fonts via Xft2. This makes the freetype2 + foundary-family patch obsolete from qt view. + +------------------------------------------------------------------- +Sat Aug 23 13:44:22 CEST 2003 - adrian@suse.de + +- apply 3.2.1 patch, until the official tar ball arrives + +------------------------------------------------------------------- +Sat Aug 16 13:58:14 CEST 2003 - adrian@suse.de + +- justify Category of qtconfig + +------------------------------------------------------------------- +Fri Aug 1 18:00:24 CEST 2003 - adrian@suse.de + +- add desktop file for qtconfig + +------------------------------------------------------------------- +Wed Jul 23 16:20:03 CEST 2003 - adrian@suse.de + +- update to version 3.2.0 final + +------------------------------------------------------------------- +Thu Jul 17 12:55:23 CEST 2003 - adrian@suse.de + +- fix .la files after build + +------------------------------------------------------------------- +Tue Jul 15 08:49:39 CEST 2003 - adrian@suse.de + +- update to 3.2.0 beta 2 +- remove obsolete patches + +------------------------------------------------------------------- +Sun Jun 15 12:19:14 CEST 2003 - coolo@suse.de + +- never strip explicitly +- always build with -release to avoid debug output even with -g + +------------------------------------------------------------------- +Thu Jun 12 09:07:58 CEST 2003 - coolo@suse.de + +- move the html docu into docdir and put the link in lib +- package directories +- fix directory permissions + +------------------------------------------------------------------- +Fri May 30 15:04:29 CEST 2003 - adrian@suse.de + +- fix file conflicts + +------------------------------------------------------------------- +Mon May 19 11:28:36 CEST 2003 - adrian@suse.de + +- revert source incompatibility to 3.1.x in qhbox constructor + +------------------------------------------------------------------- +Sun May 18 14:03:31 CEST 2003 - adrian@suse.de + +- update to version 3.2 beta 1 +- big patch clean up +- use largefile support api for > 8.2 + +------------------------------------------------------------------- +Thu Apr 10 17:01:32 CEST 2003 - coolo@suse.de + +- fixing long font names as returned by font-config + +------------------------------------------------------------------- +Wed Mar 26 13:19:48 CET 2003 - adrian@suse.de + +- workaround rpm bug on 7.3-ppc + +------------------------------------------------------------------- +Mon Mar 24 10:04:18 CET 2003 - adrian@suse.de + +- fix build on SuSE < 8.1 + +------------------------------------------------------------------- +Fri Mar 21 14:59:11 CET 2003 - adrian@suse.de + +- update to version 3.1.2 and remove obsolete patches + +------------------------------------------------------------------- +Tue Mar 11 20:33:03 CET 2003 - coolo@suse.de + +- fixing the fix + +------------------------------------------------------------------- +Tue Mar 11 13:35:31 CET 2003 - coolo@suse.de + +- applied patch by TT to fix kmail folder selection + (#24519 - also known as kde bug #48888) + +------------------------------------------------------------------- +Fri Mar 7 21:16:17 CET 2003 - adrian@suse.de + +- do not use XListFonts, if X server supports Xft on >8.1 (Xft2) + +------------------------------------------------------------------- +Fri Feb 28 00:25:14 CET 2003 - adrian@suse.de + +- fast malloc is back + (still 20% with glibc 2.3 without spinlock'ed-malloc) +- extend blacklist +- use fast malloc also on hammer + +------------------------------------------------------------------- +Wed Feb 26 11:43:08 CET 2003 - adrian@suse.de + +- add [3.1] plugin path +- add fix for mouse cursor bug over ssh + +------------------------------------------------------------------- +Mon Feb 24 11:56:07 CET 2003 - adrian@suse.de + +- use correct kde plugin path on lib64 systems + +------------------------------------------------------------------- +Mon Feb 3 11:39:24 CET 2003 - adrian@suse.de + +- fix missing symbols in libqt* + +------------------------------------------------------------------- +Thu Jan 30 16:19:31 CET 2003 - adrian@suse.de + +- fix %pre script + +------------------------------------------------------------------- +Sun Jan 26 14:05:56 CET 2003 - adrian@suse.de + +- prefix=/usr/lib/qt3 + (third party apps installing translations into $QTDIR now) +- modify qdesktopwidget resize patch to be BC with Qt 3.2 +- comment out non-official api extensions +- remove private headers tar ball again + (qsa beta2 contains them) +- fix qtrc enviroment patch +- hardcode qt settings dir to /etc/X11 (no need for $QTDIR/etc/settings anymore) +- enable all designer plugins + +------------------------------------------------------------------- +Thu Jan 23 18:36:05 CET 2003 - adrian@suse.de + +- add xrandr extension from Qt 3.2 +- add resize event to qdesktopwidget (patch from Lubos) +- compile codecs as plugins + +------------------------------------------------------------------- +Tue Jan 21 12:52:33 CET 2003 - adrian@suse.de + +- use fast malloc only on %ix86 + +------------------------------------------------------------------- +Thu Jan 16 15:58:23 CET 2003 - adrian@suse.de + +- include qt default translations + +------------------------------------------------------------------- +Fri Jan 10 15:12:46 CET 2003 - adrian@suse.de + +- hppa is parisc + +------------------------------------------------------------------- +Thu Jan 9 14:44:06 CET 2003 - adrian@suse.de + +- fix some more qmake.conf entries + (esp. pathes to lib64 directories and flags based on $RPM_OPT_FLAGS) + +------------------------------------------------------------------- +Tue Jan 7 16:42:59 CET 2003 - adrian@suse.de + +- use -ffunction-sections on hppa + +------------------------------------------------------------------- +Thu Jan 2 13:07:01 CET 2003 - adrian@suse.de + +- fix build ( patch -p1 -> -p0 ) + +------------------------------------------------------------------- +Fri Dec 27 17:50:17 CET 2002 - adrian@suse.de + +- several small changes/fixes/workarounds to be able to compile qsa + (they will be changed in 3.1.2) + +------------------------------------------------------------------- +Tue Dec 17 12:40:16 CET 2002 - adrian@suse.de + +- update to version 3.1.1 and cleanup patches +- apply Xft speed-up patch from dfaure + +------------------------------------------------------------------- +Wed Dec 4 15:10:17 CET 2002 - adrian@suse.de + +- drop fast-malloc, not needed since glibc 2.3 + +------------------------------------------------------------------- +Thu Nov 28 18:33:28 CET 2002 - adrian@suse.de + +- add qprinter fix from Lars + +------------------------------------------------------------------- +Wed Nov 27 00:44:44 CET 2002 - ro@suse.de + +- added expat to neededforbuild + +------------------------------------------------------------------- +Sat Nov 23 14:12:16 CET 2002 - adrian@suse.de + +- use Xft2 from XFree package now for > SuSE 8.1 + (experimental fontconfig package is dropped) +- build qt3-non-mt with extra spec file now +- fix korean [Font Substitutions] (#19575) +- fix broken qmake debug defaults (#21891) +- fix requires of database plugin packages + +------------------------------------------------------------------- +Fri Nov 15 10:33:53 CET 2002 - adrian@suse.de + +- update to 3.1.0 final version +- apply qwidget/hideChildren patch from Harri +- move libqui into qt3 main package + +------------------------------------------------------------------- +Tue Nov 5 20:00:37 CET 2002 - adrian@suse.de + +- package also missing mkspecs/* + +------------------------------------------------------------------- +Sun Nov 3 12:54:52 CET 2002 - adrian@suse.de + +- update to post 3.1 beta 2 snapshot (rc1 or rc2 ?) +- big rework of spec file, lots of workarounds are not needed anymore :) +- use experimental fontconfig/Xft2 package for > 8.1 +- enable nis & cups support + +------------------------------------------------------------------- +Mon Oct 21 18:25:53 CEST 2002 - adrian@suse.de + +- swab %ifarch <> %if for old broken rpm's + +------------------------------------------------------------------- +Mon Oct 21 13:44:15 CEST 2002 - adrian@suse.de + +- remove rpath again, which came back with 3.0.5 update (#20929) +- disable qDebug lines in chinese patch (#20959) + +------------------------------------------------------------------- +Wed Oct 9 11:47:44 CEST 2002 - adrian@suse.de + +- implement a blacklist of executables which should not use + the fast malloc implementation. (python and perl atm) +- disable fast-malloc for >8.1 +- enable fast-malloc for x86_64 + +------------------------------------------------------------------- +Fri Sep 20 11:24:51 CEST 2002 - adrian@suse.de + +- qclipboard fix from Lubos. Copy from old X applications works again + +------------------------------------------------------------------- +Mon Sep 16 12:07:53 CEST 2002 - adrian@suse.de + +- replace qt3-gb18030.diff patch with the new patch from + James Su for chinese handling (#19399) +- set XIMInputStyle for japanese input (#19387) +- change Requires: from /usr/include/png.h to libpng-devel, since + connectivas apt can not handle this. + +------------------------------------------------------------------- +Fri Aug 30 14:13:34 CEST 2002 - adrian@suse.de + +- remove the dlopen patch again. It is not needed anymore and may + cause crashes in rare cases. + +------------------------------------------------------------------- +Wed Aug 28 15:26:02 CEST 2002 - adrian@suse.de + +- apply fix from Lubos for DND in kcontrol +- apply fix to fix gb18030 encoding (from Turbolinux China) + +------------------------------------------------------------------- +Mon Aug 26 16:25:40 CEST 2002 - adrian@suse.de + +- do not use -plugindir configure option anymore. it caused the + broken plugin support and remov $QTDIR/plugins again from qtrc + qtrc is also a (noreplace) config file again +- s,getenv,__secure_getenv, as suggested by okir in plugin_path.dif + +------------------------------------------------------------------- +Thu Aug 22 18:33:55 CEST 2002 - adrian@suse.de + +- add patch to set the qt settings dir to a non-default dir +- add patches from qt 3.0.6 to fix asian copy&paste problems +- set explicit plugin pathes in qtrc and replace them during update + (this is only a workaround until I know why qt does not use the + compiled path) + +------------------------------------------------------------------- +Thu Aug 22 14:53:57 CEST 2002 - adrian@suse.de + +- remove dangeling symlink in /usr/lib/qt3/mkspecs/linux-g++ +- add plugin path to global qtrc + +------------------------------------------------------------------- +Tue Aug 20 13:24:25 CEST 2002 - adrian@suse.de + +- fix #defines + +------------------------------------------------------------------- +Tue Aug 20 00:24:37 CEST 2002 - adrian@suse.de + +- redo the plugin path patch again, we use now a implicit + subdirectory like "lib64", if needed. +- qtconfig is patched to hide/not write back those entries + +------------------------------------------------------------------- +Fri Aug 16 14:00:33 CEST 2002 - coolo@suse.de + +- fixing the patches + +------------------------------------------------------------------- +Fri Aug 16 13:18:21 CEST 2002 - coolo@suse.de + +- applying the plugin path patches, so they actually do something + on lib64 platforms + +------------------------------------------------------------------- +Fri Aug 9 17:35:58 CEST 2002 - adrian@suse.de + +- fix plugin installation + +------------------------------------------------------------------- +Thu Aug 8 10:00:46 CEST 2002 - adrian@suse.de + +- use %suse_version macro instead of /etc/SuSE-release + +------------------------------------------------------------------- +Fri Aug 2 14:41:33 CEST 2002 - coolo@suse.de + +- shut up if passed -noxim is passed and xim doesn't work + +------------------------------------------------------------------- +Tue Jul 30 14:43:32 CEST 2002 - adrian@suse.de + +- disable pre-3.0.6 patches again, until focus problem is located +- add zlib-devel to Requires for qt3-devel and SuSE 8.1 +- add %run_ldconfig + +------------------------------------------------------------------- +Mon Jul 29 17:31:37 CEST 2002 - adrian@suse.de + +- apply shut-up.dif +- clean up neededforbuild + +------------------------------------------------------------------- +Fri Jul 26 16:33:25 CEST 2002 - adrian@suse.de + +- port Lea's fast malloc implementation to libqt-mt +- designer sig11 fixes are not needed anymore +- use some patches from qt-rsync + +------------------------------------------------------------------- +Fri Jul 19 13:07:05 CEST 2002 - adrian@suse.de + +- fix designer sig11 really +- kick warnings about unsuccesfull locks for non-root users + +------------------------------------------------------------------- +Thu Jul 18 18:00:13 CEST 2002 - adrian@suse.de + +- don't strip when in debug mode +- fix typo in build script + +------------------------------------------------------------------- +Wed Jul 17 09:59:28 CEST 2002 - adrian@suse.de + +- update to 3.0.5 final + * lots of bugfixes, see changes-3.0.5 for details + * new, binary incompatible plugin system +- fix sig11 in designer +- clean spec file, drop all not applied patches + +------------------------------------------------------------------- +Thu Jul 11 10:42:14 CEST 2002 - coolo@suse.de + +- reenable work around for transparenent images while printing + (PR16188) + +------------------------------------------------------------------- +Wed Jul 10 17:51:47 CEST 2002 - adrian@suse.de + +- update to near 3.0.5-final snapshot 3.0.5-snapshot-20020710 + +------------------------------------------------------------------- +Fri Jul 5 14:16:16 CEST 2002 - adrian@suse.de + +- fix -g detection during build + +------------------------------------------------------------------- +Fri Jun 21 00:21:28 CEST 2002 - adrian@suse.de + +- fix use of $RPM_OPT_FLAGS (broken since 3.0.4 update) +- use -mminimal-toc on ppc64 to workaround compiler bug atm +- update to pre-3.0.5 snapshot-20020620 + * use buildkey for plugins instead of our own plugin hack + * lots of fixes (exact description in changes-3.0.5) +- add lib64 to build key, if needed +- remove obsolete patches + +------------------------------------------------------------------- +Thu Jun 6 13:41:19 CEST 2002 - adrian@suse.de + +- rework plugin path patch for distributions > 8.0 + change name of "plugins" directory instead of filenames + * plugins -- lib32 and multithreaded plugins + * plugins-non-mt -- lib32 and without multithread support + * plugins-lib64 -- lib64 and multithreaded plugins + * plugins-lib64-non-mt -- lib64 and without multithread support + +------------------------------------------------------------------- +Thu May 30 20:03:50 CEST 2002 - adrian@suse.de + +- disable style-plugins again (too much qt apps have problems) +- disable Xft/Xrender support also for SuSE 7.3 (XFree 4.1.0) + (no one reads READMES and too many people had crashes) + +------------------------------------------------------------------- +Tue May 28 10:58:01 CEST 2002 - adrian@suse.de + +- fix %files + +------------------------------------------------------------------- +Mon May 27 13:37:15 CEST 2002 - adrian@suse.de + +- move qconfig, qmake to qt3-devel-tools +- build styles as plugin (except our default style: Platinum) + +------------------------------------------------------------------- +Mon May 27 00:10:23 CEST 2002 - ro@suse.de + +- lib64: fix qtmake.conf: QTLIBDIR also has the trailing "64" +- fix build-script for lib64 issues + +------------------------------------------------------------------- +Mon May 20 23:26:35 CEST 2002 - adrian@suse.de + +- fix build (disable odbc during qt3.spec build) + +------------------------------------------------------------------- +Mon May 20 10:13:55 CEST 2002 - adrian@suse.de + +- enable -tablet support if XFree86 provides it +- compile with -debug mode, if -g is set in enviroment +- fix postgres plugin build +- enable unixODBC support for newer distributions +- split sql drivers to extra packages +- fix dlopen call + +------------------------------------------------------------------- +Tue May 14 12:39:51 CEST 2002 - adrian@suse.de + +- fix lib64 patch to find OpenGL libs + +------------------------------------------------------------------- +Thu May 9 21:54:41 CEST 2002 - adrian@suse.de + +- apply fix for NetAccess focus, insertTitle(), QTextEdit and + QToolbar from qt-copy + +------------------------------------------------------------------- +Wed May 8 09:39:48 CEST 2002 - coolo@suse.de + +- fixing patch section (grr) + +------------------------------------------------------------------- +Tue May 7 17:13:41 CEST 2002 - coolo@suse.de + +- adding fix for x86_64 + +------------------------------------------------------------------- +Tue May 7 14:32:39 MEST 2002 - coolo@suse.de + +- update to qt 3.0.4 - remove fixes that do + not apply any longer +- disable asian patches as they do not apply + and I don't want to split them as I have no + idea if the problems they try to fix are still + there + +------------------------------------------------------------------- +Wed Apr 24 16:09:09 CEST 2002 - coolo@suse.de + +- fix lib64 support +- fix asian patch not to use arrays in unused arrays + (triggers compiler problem) + +------------------------------------------------------------------- +Sun Apr 21 12:58:33 CEST 2002 - adrian@suse.de + +- improve image rendering speed (patch by Lubos) + +------------------------------------------------------------------- +Tue Apr 9 16:21:07 CEST 2002 - adrian@suse.de + +- apply patch from Lubos to fix alpha channel in QMovie + +------------------------------------------------------------------- +Fri Apr 5 15:29:03 CEST 2002 - adrian@suse.de + +- fixed print support in qpsprint +- binary compatibility fixes by Lars for gbk encoding + +------------------------------------------------------------------- +Wed Apr 3 21:33:26 CEST 2002 - adrian@suse.de + +- apply fixes/extensions for asian/utf-8-based languages + (assembled by Lars and Brad, thank you, verifed by mfabian) +- 64bit fixes from Andreas Schwab (const char*) null pointer casts + +------------------------------------------------------------------- +Sun Mar 24 13:23:18 CET 2002 - adrian@suse.de + +- apply qtabbar fix. Fixes crashes with kcm modules. + +------------------------------------------------------------------- +Fri Mar 22 10:33:58 CET 2002 - adrian@suse.de + +- apply fix for sig11 in QCommonStyle (made by Waldo/Trolltech) +- apply fix to use libpng instead of libmng to load pngs (by coolo) +- add missing Requires for qt3-devel + +------------------------------------------------------------------- +Wed Mar 20 22:47:59 CET 2002 - adrian@suse.de + +- verify 3.0.3 final version +- add check for null pointer returned by libXft + (fix sig11 when no Xft fonts are configured) +- fix scrollbar behaviour for QT Platinum style + (we are X Windows compatible instead of MS Windows) + +------------------------------------------------------------------- +Tue Mar 19 10:36:42 CET 2002 - adrian@suse.de + +- update to version 3.0.3 + (rc6 tar ball from troll, I have to check after the qt-3.0.3 release, + if this is really qt-3.0.3 final) + +------------------------------------------------------------------- +Tue Mar 12 20:01:34 CET 2002 - adrian@suse.de + +- update to pre 3.0.3 snapshot (3.0.2.20020312) + +------------------------------------------------------------------- +Mon Mar 4 09:44:37 CET 2002 - adrian@suse.de + +- more fixes + * fix auto-resizing with QMovie + * fix to correctly open submenues in right to left layout + * reduce number of mallocs by sharing QColorGroup + * Simplified static cleanup handlers. + * smarter tooltip placement +- require "c++_compiler" for distributions newer than 7.3 only + +------------------------------------------------------------------- +Sun Mar 3 02:31:31 CET 2002 - adrian@suse.de + +- apply some fixes from qt-copy + * 8 bit color depth image format fixes + * spinbox flicker fix + * qrichtext dangeling pointers fix + * qmenubar right to left layout mode cursor navigation fix + * qcombobox avoid emitting highlighted twice on keyPressEvent + +------------------------------------------------------------------- +Mon Feb 25 17:34:15 CET 2002 - adrian@suse.de + +- update to version 3.0.2 +- remove compile fixes +- fix symlink for qtconfig + +------------------------------------------------------------------- +Thu Feb 14 01:05:14 CET 2002 - adrian@suse.de + +- fix Requires for qt3-devel (add g++ compiler) + +------------------------------------------------------------------- +Tue Feb 12 01:01:31 CET 2002 - adrian@suse.de + +- fix build for lib64/s390x + +------------------------------------------------------------------- +Wed Feb 6 21:08:43 CET 2002 - adrian@suse.de + +- add links in /usr/bin for qtconfig + +------------------------------------------------------------------- +Sun Feb 3 14:57:30 CET 2002 - adrian@suse.de + +- fix dumb-packager-bug (s,%fi,%endif,) + +------------------------------------------------------------------- +Sun Feb 3 12:23:35 CET 2002 - adrian@suse.de + +- compile fix for postrgres module +- extend plugin patch to work on s390x and sparc64 to work with + lib64 plugins +- add %{_libdir}/qt3 symlink for s390x and sparc64 + +------------------------------------------------------------------- +Sat Feb 2 13:00:38 CET 2002 - ro@suse.de + +- cleaned changes file + +------------------------------------------------------------------- +Fri Feb 1 15:29:58 CET 2002 - adrian@suse.de + +- update to current qt-copy snapshot (needed for KDE 3.0 beta 2) +- make threaded plugins as usual again +- non-threaded plugins needs now the not compatible -non-mt.so + suffix + +------------------------------------------------------------------- +Fri Feb 1 00:26:05 CET 2002 - ro@suse.de + +- changed neededforbuild to + +------------------------------------------------------------------- +Tue Jan 29 16:29:15 CET 2002 - adrian@suse.de + +- enable AA for SuSE > 7.3 + +------------------------------------------------------------------- +Tue Jan 29 10:58:57 CET 2002 - schwab@suse.de + +- Fix use of varargs on 64 bit platforms. + +------------------------------------------------------------------- +Wed Jan 23 22:56:28 CET 2002 - adrian@suse.de + +- patch plugin loader to load only plugins with -mt.so + extension +- link direct against libpng +- move qt3.conf file to susehelp +- TODO: make plugin loader path depending on %_libdir + +------------------------------------------------------------------- +Tue Jan 22 21:47:19 CET 2002 - adrian@suse.de + +- enable Xrender/Xft again for SuSE 7.3 + (I was misleaded by a broken libXft :/ ) +- using qt plugin mechanism for picture format support +- enable XRender by default, but leave Xft disabled by default + (kcontrol can switch Xft on for KDE applications now) +- add additional include path for postgres 7.2b5 + +------------------------------------------------------------------- +Mon Jan 21 16:58:53 CET 2002 - adrian@suse.de + +- disable Xft for all distributions until 7.3 + (XFree 4.2 is needed) +- sync QClipboard fix from qt-copy + +------------------------------------------------------------------- +Tue Jan 8 16:11:14 CET 2002 - adrian@suse.de + +- fix Requires +- disable rpath + +------------------------------------------------------------------- +Sun Jan 6 00:31:11 CET 2002 - adrian@suse.de + +- split non multithreaded librarys into qt3-non-mt package +- split developer tutorial into qt3-tutorial package +- use common config script to prepare build +- move libs to /usr/lib/qt3/%{_libdir} +- remove .prl files from file list again + +------------------------------------------------------------------- +Thu Jan 3 16:48:59 CET 2002 - adrian@suse.de + +- rename qt3-designer subpackage to qt3-devel-tools +- add default qtrc file + * disable Xft support by default + * use Platinum style + * set qt plugin path +- move qtconfig to qt base package +- apply fixes from qt-copy/KDE-cvs + +------------------------------------------------------------------- +Thu Dec 13 10:42:07 CET 2001 - adrian@suse.de + +- use $RPM_OPT_FLAGS during compile +- add missing .prl files to file list + +------------------------------------------------------------------- +Wed Dec 12 16:39:16 CET 2001 - adrian@suse.de + +- update to version 3.0.1 +- build all extra tools +- fix default mkspec symlink +- include examples to devel-doc package + +------------------------------------------------------------------- +Thu Nov 8 18:39:52 CET 2001 - ro@suse.de + +- use mesa-devel-packages in neededforbuild + +------------------------------------------------------------------- +Tue Oct 16 11:13:50 CEST 2001 - adrian@suse.de + +- fix hardcoded install dir in libqt + (no $QTDIR is needed at runtime anymore) + +------------------------------------------------------------------- +Mon Oct 15 18:16:49 CEST 2001 - adrian@suse.de + +- update to QT 3.0.0 final + (the KDE 3 battle begins :) + +------------------------------------------------------------------- +Fri Oct 5 10:50:24 CEST 2001 - adrian@suse.de + +- add missing header files +- cleanup workarounds in spec file and add some new (but less ;) + +------------------------------------------------------------------- +Mon Oct 1 16:35:56 CEST 2001 - adrian@suse.de + +- update to beta6 + +------------------------------------------------------------------- +Tue Sep 18 08:54:02 CEST 2001 - adrian@suse.de + +- update to beta5 + +------------------------------------------------------------------- +Wed Sep 5 12:17:19 CEST 2001 - adrian@suse.de + +- okay, my last try ... cp -f has different return values on the + distributions :( + +------------------------------------------------------------------- +Tue Sep 4 10:18:20 CEST 2001 - adrian@suse.de + +- disable postgres support for old distributions + (now it also builds with SuSE 6.4) + +------------------------------------------------------------------- +Mon Sep 3 15:42:48 CEST 2001 - adrian@suse.de + +- fix broken links in include path + +------------------------------------------------------------------- +Sun Sep 2 19:47:01 CEST 2001 - adrian@suse.de + +- workaround bugs in Makefile to install all needed files +- remove -j4 behind make + +------------------------------------------------------------------- +Tue Jun 19 15:26:54 CEST 2001 - adrian@suse.de + +- split documentation from qt3-devel to qt3-doc + +------------------------------------------------------------------- +Fri May 25 11:57:34 CEST 2001 - adrian@suse.de + +- first try with QT 3.0.0 beta 1 + ( this package is far away from being perfect ) + +------------------------------------------------------------------- +Sun May 6 10:52:33 CEST 2001 - adrian@suse.de + +- apply XftGlyph fix for qfont_x11.cpp from Keith Packard +- fix build for distributions before 7.1 + +------------------------------------------------------------------- +Fri May 4 11:39:55 CEST 2001 - adrian@suse.de + +- add fix for buffer overflow on qfont_x11 and some minor glitches + in qt-png +- qt-experimental is dropped, since we can enable AA in qt now. + +------------------------------------------------------------------- +Fri Apr 27 15:29:17 CEST 2001 - adrian@suse.de + +- switch BuildIndex for SuSEhelp to false by default + +------------------------------------------------------------------- +Mon Apr 23 22:22:19 CEST 2001 - adrian@suse.de + +- using -DNO_DEBUG +- apply latin9 patch from mls@suse.de + +------------------------------------------------------------------- +Wed Apr 4 22:48:01 CEST 2001 - mfabian@suse.de + +- add /etc/qt.fontguess (config file for Japanese and Korean + fonts) + +------------------------------------------------------------------- +Wed Mar 21 17:43:49 CET 2001 - adrian@suse.de + +- disable AA by default (still to many problems) + +------------------------------------------------------------------- +Sun Mar 18 09:46:50 CET 2001 - adrian@suse.de + +- reenable qt-experimental for SuSE distribution < 7.2 + disable opengl module for these distris in this package + +------------------------------------------------------------------- +Sat Mar 17 14:43:11 CET 2001 - adrian@suse.de + +- update to QT 2.3.0 + this makes qt-experimental obsolete + (maybe still some problems with the nvidia driver, but the nv + should work fine and the users are warned about nvidia since + SuSE 7.1) + +------------------------------------------------------------------- +Sun Mar 11 20:20:41 CET 2001 - mfabian@suse.de + +- fix spec-file to make it build with "rpm -ba" + +------------------------------------------------------------------- +Fri Feb 9 19:55:09 CET 2001 - adrian@suse.de + +- use $RPM_OPT_FLAGS + drop signed char patch + +------------------------------------------------------------------- +Sat Feb 3 14:12:01 CET 2001 - adrian@suse.de + +- update to QT 2.2.4 + qt-static is an own package and no sub packages anymore + fix/patch for qprintdialog is no longer needed + add fix from Andreas Schwab for 64bit platforms + +------------------------------------------------------------------- +Fri Jan 19 11:33:07 CET 2001 - adrian@suse.de + +- swap link and directory of html documentation. This makes + trouble during update from older distributions + +------------------------------------------------------------------- +Sat Jan 13 21:18:58 CET 2001 - adrian@suse.de + +- remove not necessary susehelp/htdig conf file + remove file conflicts between qt-devel and qt-experimental + +------------------------------------------------------------------- +Thu Jan 4 21:37:49 CET 2001 - adrian@suse.de + +- added qt-experimental,qt-japanese,qt-korean to Obsoletes: + +------------------------------------------------------------------- +Wed Jan 3 02:24:50 CET 2001 - adrian@suse.de + +- fix qprintdialog + fix qrichtext (Thanks Stefan) + +------------------------------------------------------------------- +Wed Jan 3 02:24:15 CET 2001 - adrian@suse.de + +- fix qprintdialog + +------------------------------------------------------------------- +Mon Jan 1 17:18:43 CET 2001 - adrian@suse.de + +- spec file fix + +------------------------------------------------------------------- +Sun Dec 31 13:18:17 CET 2000 - adrian@suse.de + +- added small tools to qt-devel (thanks Dirk) + +------------------------------------------------------------------- +Fri Dec 22 20:46:34 CET 2000 - adrian@suse.de + +- remove asian patches from qt-experimental + +------------------------------------------------------------------- +Wed Dec 20 18:51:44 CET 2000 - adrian@suse.de + +- fixe type in package name + +------------------------------------------------------------------- +Wed Dec 20 18:44:44 CET 2000 - adrian@suse.de + +- move docu from qtlib2 to qt + +------------------------------------------------------------------- +Sat Dec 16 17:02:47 CET 2000 - adrian@suse.de + +- initial package. support for font anti aliasing has been added + Also OpenGL module is active + +------------------------------------------------------------------- +Thu Dec 14 11:51:41 CET 2000 - adrian@suse.de + +- update to 2.2.3 and remove all the unneeded fix patches. + added SuSE help conf files to qt-devel + +------------------------------------------------------------------- +Tue Dec 12 15:32:01 CET 2000 - schwab@suse.de + +- Build with -O0 on ia64. + +------------------------------------------------------------------- +Fri Dec 1 00:29:50 CET 2000 - adrian@suse.de + +- added rpath for uic/kdelibs and fixed uic fix .. + to drunk to drink more + +------------------------------------------------------------------- +Thu Nov 30 11:31:36 CET 2000 - adrian@suse.de + +- fixed dif + +------------------------------------------------------------------- +Thu Nov 30 00:33:26 CET 2000 - adrian@suse.de + +- added fix for uic and qiconview + +------------------------------------------------------------------- +Wed Nov 29 11:33:51 CET 2000 - adrian@suse.de + +- fixed build on ppc + +------------------------------------------------------------------- +Tue Nov 21 09:31:40 CET 2000 - ro@suse.de + +- spec fix + +------------------------------------------------------------------- +Fri Nov 17 14:57:54 CET 2000 - ro@suse.de + +- fixed neededforbuild: += libmng-devel + +------------------------------------------------------------------- +Mon Nov 13 21:40:29 CET 2000 - adrian@suse.de + +- new version 2.2.2 + added qpngio fix from waldo + +------------------------------------------------------------------- +Fri Nov 10 00:57:39 CET 2000 - adrian@suse.de + +- fixed static config for <6.4 distris (no libmng) + +------------------------------------------------------------------- +Tue Oct 31 13:45:29 CET 2000 - adrian@suse.de + +- split the qt package in + qt + qt-devel + qt-extensions + qt-man + qt-static + + Added an ugly patch to get an uic with KDE support. The designer + is broken in this package after this patch, so it is not packaged. + The designer can be found in the qt-designer package + +------------------------------------------------------------------- +Tue Oct 17 09:59:23 MEST 2000 - adrian@suse.de + +- switch to -O0 for ppc + +------------------------------------------------------------------- +Sat Oct 14 09:51:19 CEST 2000 - adrian@suse.de + +- drop OpenGL support. Problems with Nvidia's binary only driver + +- added fix from waldo (fixing memory leak in qpngio) + +------------------------------------------------------------------- +Mon Oct 9 16:00:44 CEST 2000 - adrian@suse.de + +- update the tar archiv (which contains a corrected classes.html file) + +------------------------------------------------------------------- +Fri Oct 6 12:46:48 CEST 2000 - adrian@suse.de + +- update to 2.2.1 + added static libs for libqt and libqt-mt + added support for libmng + +------------------------------------------------------------------- +Mon Oct 2 10:56:03 CEST 2000 - adrian@suse.de + +- added missing header files + +------------------------------------------------------------------- +Tue Sep 19 16:03:56 MEST 2000 - adrian@suse.de + +- switch to -O0 for axp + +------------------------------------------------------------------- +Fri Sep 8 17:09:15 CEST 2000 - schwab@suse.de + +- Update ia64 configuration. + +------------------------------------------------------------------- +Fri Sep 8 15:36:30 CEST 2000 - adrian@suse.de + +- added missing libqt-mt.so + clean up in filelist + changed copyright/license to GPL + +------------------------------------------------------------------- +Thu Sep 7 22:35:05 CEST 2000 - adrian@suse.de + +- update to qt 2.2.0 final + +------------------------------------------------------------------- +Tue Aug 22 19:56:07 CEST 2000 - adrian@suse.de + +- removed uic/moc bindings to libGL and other + +------------------------------------------------------------------- +Fri Aug 18 20:33:25 CEST 2000 - adrian@suse.de + +- update to qt 2.2.0 beta 2 + spec file rewritten + +------------------------------------------------------------------- +Tue Jul 4 15:11:10 CEST 2000 - adrian@suse.de + +- moved links from /usr/lib/qt/lib to /usr/lib/ + +------------------------------------------------------------------- +Thu Jun 22 15:59:04 CEST 2000 - adrian@suse.de + +- add libqt.so.2 links in /usr/lib/qt/lib + +------------------------------------------------------------------- +Fri Jun 16 16:26:31 CEST 2000 - adrian@suse.de + +- moved libqt.so back to qtlib2, after religios war. + +------------------------------------------------------------------- +Fri Jun 16 12:26:33 CEST 2000 - adrian@suse.de + +- enable gif support again + +------------------------------------------------------------------- +Fri Jun 16 09:18:31 CEST 2000 - adrian@suse.de + +- moved static libs to qtdevel2 + +------------------------------------------------------------------- +Tue Jun 6 14:06:10 CEST 2000 - schwab@suse.de + +- Reduce opt level on ia64. + +------------------------------------------------------------------- +Tue Jun 6 01:06:59 CEST 2000 - adrian@suse.de + +- fixed dependencies + +------------------------------------------------------------------- +Tue May 30 23:02:56 CEST 2000 - adrian@suse.de + +- readded mesadev in neededforbuild + +------------------------------------------------------------------- +Tue May 30 15:30:16 CEST 2000 - adrian@suse.de + +- update to 2.1.1 + +------------------------------------------------------------------- +Wed May 24 13:06:43 CEST 2000 - adrian@suse.de + +- added mesadev in neededforbuild + removed gif support (license issue) + +------------------------------------------------------------------- +Tue May 16 21:44:53 CEST 2000 - adrian@suse.de + +- added -fno-exception (smaller binaries) + +------------------------------------------------------------------- +Fri May 12 08:55:01 CEST 2000 - adrian@suse.de + +- fixed link /usr/doc/packages/html + using %{_defaultdocdir} + using %{_mandir} + +------------------------------------------------------------------- +Fri Apr 14 15:14:19 CEST 2000 - adrian@suse.de + +- update to 2.1.0 final + new package for all man pages + +------------------------------------------------------------------- +Thu Apr 6 19:16:55 CEST 2000 - adrian@suse.de + +- update to 2.1.0 beta 4 + +------------------------------------------------------------------- +Thu Mar 30 15:57:33 CEST 2000 - adrian@suse.de + +- update to qtlib 2.1.0 beta 3 + the destination directory is not longer /usr/lib/qt !!! + QTDIR=/usr/lib/qt-2.1.0 + There is also a link /usr/lib/qt2 to /usr/lib/qt-2.1.0 + +------------------------------------------------------------------- +Thu Mar 2 11:17:22 CET 2000 - ro@suse.de + +- removed obsolete part of patch + +------------------------------------------------------------------- +Thu Mar 2 07:27:34 CET 2000 - ro@suse.de + +- configure doesn't know --mandir ... :( + +------------------------------------------------------------------- +Thu Mar 2 01:59:58 CET 2000 - ro@suse.de + +- work-around for prepare-spec buglet + +------------------------------------------------------------------- +Wed Mar 1 00:05:15 CET 2000 - ro@suse.de + +- man to /usr/share using macro + +------------------------------------------------------------------- +Tue Feb 29 15:55:33 CET 2000 - kettner@suse.de + +- Apply patch for qfont_x11.cpp from warwick@warwick-bippy + +------------------------------------------------------------------- +Mon Feb 28 18:26:18 CET 2000 - kettner@suse.de + +- increased font cache from 4MB to 9MB in order to + speed up UNICODE fonts for YaST2 + +------------------------------------------------------------------- +Thu Nov 11 20:00:14 MET 1999 - uli@suse.de + +- removed netscape from neededforbuild + +------------------------------------------------------------------- +Tue Nov 9 11:12:48 MET 1999 - kettner@suse.de + +- Removed mesa from Requires, as it is not required + +------------------------------------------------------------------- +Fri Oct 22 14:42:35 MEST 1999 - kettner@suse.de + + - Patch extensions/imageio/src/Makefile.in in order to get + shared library of libimgio again. Worked in 2.00. + +------------------------------------------------------------------- +Mon Oct 11 21:06:47 MEST 1999 - kettner@suse.de + + - New version 2.0.2 + +------------------------------------------------------------------- +Tue Sep 28 18:09:12 MEST 1999 - uli@suse.de + +- switched from Motif to lesstif + +------------------------------------------------------------------- +Mon Sep 27 16:31:01 CEST 1999 - bs@suse.de + +- fixed requirements for sub packages + +------------------------------------------------------------------- +Fri Sep 17 11:28:09 MEST 1999 - kettner@suse.de + +- Reinserted old # Commandline line. + +------------------------------------------------------------------- +Mon Sep 13 17:23:57 CEST 1999 - bs@suse.de + +- ran old prepare_spec on spec file to switch to new prepare_spec. + +------------------------------------------------------------------- +Wed Jul 14 11:49:22 CEST 1999 - kettner@suse.de + + - New version 2.00 + +------------------------------------------------------------------- +Tue Jul 13 19:31:56 CEST 1999 - kettner@suse.de + + - New version 2.00 + +------------------------------------------------------------------- +Mon Jul 12 19:15:16 CEST 1999 - kettner@suse.de + + - New version 2.00 + diff --git a/opensuse/core/qt3/qt3-extensions.spec b/opensuse/core/qt3/qt3-extensions.spec new file mode 100644 index 000000000..d914a2e06 --- /dev/null +++ b/opensuse/core/qt3/qt3-extensions.spec @@ -0,0 +1,477 @@ +# +# spec file for package qt3-extensions +# +# Copyright (c) 2011 SUSE LINUX Products GmbH, Nuernberg, Germany. +# +# All modifications and additions to the file contributed by third parties +# remain the property of their copyright owners, unless otherwise agreed +# upon. The license for this file, and modifications and additions to the +# file, is the same license as for the pristine package itself (unless the +# license for the pristine package is not an Open Source License, in which +# case the license is the MIT License). An "Open Source License" is a +# license that conforms to the Open Source Definition (Version 1.9) +# published by the Open Source Initiative. + +# Please submit bugfixes or comments via http://bugs.opensuse.org/ +# + +# norootforbuild + + +Name: qt3-extensions +BuildRequires: cups-devel krb5-devel mysql-devel postgresql-devel qt3-devel sqlite2-devel unixODBC-devel update-desktop-files +%if %suse_version > 1020 +BuildRequires: fdupes +%endif +License: GPL, QPL +Version: 3.3.8c +Release: 1 +AutoReqProv: on +Requires: qt3 = %version +Group: Development/Tools/Other +Summary: Qt3 Extensions +# COMMON-BEGIN +# COMMON-BEGIN +%define x11_free -x11-free- +%define rversion 3.3.8b +Source0: qt%{x11_free}%rversion.tar.bz2 +Source1: build_script.sh +Source2: qtconfig3.desktop +Source3: qtrc +Source4: assistant3.png +Source6: assistant3.desktop +Source7: designer.desktop +Source8: designer.png +Source9: linguist.desktop +Source5: linguist.png +Source10: qt3.sh +Source11: qt3.csh +# Translations did not change at 3.3.8c +Source12: qt3-3.3.8b-translations.tar.bz2 +Source100: qtkdeintegration_x11.cpp +Source101: qtkdeintegration_x11_p.h +Source102: baselibs.conf +Source200: attributes +Source201: update_spec.pl +Patch1: aliasing.diff +Patch2: head.diff +Patch4: qt3-never-strip.diff +Patch5: external-libs.diff +Patch6: 0001-dnd_optimization.patch +Patch7: 0002-dnd_active_window_fix.patch +Patch8: 0007-qpixmap_constants.patch +Patch11: 0038-dragobject-dont-prefer-unknown.patch +Patch12: qtrc-path.diff +Patch14: lib64-plugin-support.diff +Patch15: pluginmanager-fix.diff +Patch18: no-rpath.dif +Patch19: shut-up.diff +Patch20: rubberband.diff +Patch21: fix-GL-loading.diff +Patch23: fix-accessible.diff +# From http://www.freedesktop.org/wiki/Software_2fImmoduleQtDownload +# Current version from http://freedesktop.org/~daisuke/qt-x11-immodule-unified-qt3.3.5-20060318.diff.bz2 +Patch25: qt-x11-immodule-unified-qt3.3.8-20060318.diff +Patch28: fix-key-release-event-with-imm.diff +Patch29: 0047-fix-kmenu-width.diff +Patch31: limit-image-size.diff +Patch34: 0005-qpixmap_mitshm.patch +Patch35: qt-transparency.patch +Patch37: 0055-qtextedit_zoom.patch +Patch38: 0048-qclipboard_hack_80072.patch +Patch39: fix-qtranslator-crash.diff +Patch40: 0059-qpopup_has_mouse.patch +Patch41: 0060-qpopup_ignore_mousepos.patch +Patch42: add_qexport_visibility.patch +Patch43: 0056-khotkeys_input_84434.patch +Source250: enable-designer-plugins.diff +Patch53: fix-xinerama-dialog-placement.diff +Patch54: kmenu-search-fix.diff +Patch55: qt3-fix-cast.diff +Patch100: qt.patch +Patch101: qt3-arm-gcc4.patch +Patch102: xinerama.patch +Patch113: fix-assistant-path.patch +Patch117: qtimer-debug.diff +Patch119: xinerama-qpopupmenu.diff +Patch121: qt3-warnings.diff +Patch123: use-xrandr-1.2.diff +Patch125: qcstring-format-warnings.diff +Patch127: mng-reading-fix.patch +Patch128: 0079-compositing-types.patch +Patch129: 0080-net-wm-sync-request.patch +Patch132: revert-qt-3.3.8-khmer-fix.diff +Patch133: 0085-fix-buildkey.diff +Patch134: fix-xinput-clash.diff +Patch135: parseFontName.diff +Patch136: qt3-no-date.diff +Patch137: popen-leak-fix.diff +Patch138: qt3-libpng14.diff +Patch139: gcc46.diff + +# TQt integration +Patch200: qt-3.3.8c.diff + +BuildRoot: %{_tmppath}/%{name}-%{version}-build + +%description +This package contains extension libraries for Qt 3, such as the +Netscape plug-in modules. + +This package contains extension libraries for Qt 3, such as the +Netscape plug-in modules. + +This package contains extension libraries for Qt 3, such as the +Netscape plug-in modules. + +This package contains extension libraries for Qt 3, such as the +Netscape plug-in modules. + +%define build_sub_dirs src plugins/src tools/designer/uilib/ tools/designer/uic tools/qtconfig tools/assistant/lib tools/assistant tutorial + +%prep +%setup -q -n qt%{x11_free}%rversion +%patch1 +%patch2 +%patch4 +%patch5 +%patch6 +%patch7 +%patch8 +%patch11 +%patch12 +if [ "%_lib" = "lib64" ]; then +%patch14 +fi +%patch15 +%patch18 +%patch19 +%patch20 +%patch23 +%patch25 +%patch28 +%patch29 +%patch31 +%patch34 +%patch35 +%patch37 +%patch38 +%patch39 +%patch40 +%patch41 +%patch42 +%patch43 +%patch100 +%patch102 +%patch53 +%patch54 +%patch55 +%patch101 +%patch113 +%patch117 +%patch119 +%patch121 +%patch123 +ln -sf $PWD/src/inputmethod/qinputcontextfactory.h include/ +ln -sf $PWD/src/inputmethod/qinputcontextplugin.h include/ +ln -sf $PWD/src/kernel/qinputcontext.h include/ +ln -sf $PWD/src/kernel/qinputcontextinterface_p.h include/private/ +ln -sf $PWD/src/kernel/qximinputcontext_p.h include/private/ +if [ %_lib = "lib" ]; then +sed 's,/lib64/,/lib/,' %PATCH21 | patch -p0 +else +%patch21 +fi +%patch125 +%patch127 +%patch128 +%patch129 +%patch132 +%patch133 +%patch134 +%patch135 +%patch136 +%patch137 +%if %suse_version > 1120 +%patch138 -p1 +%endif +%patch139 +%patch200 +# copy qt kde integration files +cp %SOURCE100 %SOURCE101 src/kernel/ +cp %SOURCE101 include/private/ +cd translations +tar xvjf %SOURCE12 +cd .. +# COMMON-END +# COMMON-END + +%description +This package contains extension libraries for Qt 3, such as the +Netscape plug-in modules. + +This package contains extension libraries for Qt 3, such as the +Netscape plug-in modules. + +This package contains extension libraries for Qt 3, such as the +Netscape plug-in modules. + +This package contains extension libraries for Qt 3, such as the +Netscape plug-in modules. + +%package -n qt3-devel-examples +Summary: Programming Examples for Qt 3 +AutoReqProv: on +Group: Development/Sources +Provides: qt3-examples +Obsoletes: qt3-examples + +%description -n qt3-devel-examples +This package contains small executables with code to demonstrate Qt +programming. + +Have a look in /usr/share/doc/packages/qt3/examples/. + +%package -n qt3-mysql +Summary: MySQL Plug-In for Qt +Provides: qt3_database_plugin +Group: Productivity/Databases/Clients + +%description -n qt3-mysql +Plug-in for using the MySQL database with the generic Qt database +interface. + +%package -n qt3-unixODBC +Summary: A UnixODBC Plug-In for Qt +Provides: qt3_database_plugin +Group: Productivity/Databases/Clients + +%description -n qt3-unixODBC +A plug-in for using UnixODBC supported databases with the generic Qt +database interface. + +%package -n qt3-postgresql +Summary: A PostgreSQL Plug-In for Qt +Provides: qt3_database_plugin +Group: Productivity/Databases/Clients + +%description -n qt3-postgresql +A Plug-in for using the PostgreSQL database with the generic Qt +database interface. + +%package -n qt3-sqlite +Summary: SQLite Database Plug-In for Qt +Provides: qt3_database_plugin +Group: Development/Tools/Other + +%description -n qt3-sqlite +The Qt database supports SQLite with this plug-in. (No configured and +running daemon is required.) + +%package -n qt3-devel-tools +Summary: User Interface Builder and other tools (designer, assistant, linguist) +AutoReqProv: on +Requires: qt3-devel = %version +Provides: qt3-designer +Obsoletes: qt3-designer +Group: Development/Tools/GUI Builders + +%description -n qt3-devel-tools +The designer creates .ui files. The uic generates C++ code from these +files. The package also contains the Qt Assistant (Qt documentation +browser) and the Qt Linguist (for translations). + +%package -n qt3-man +Summary: Qt 3 Man Pages +AutoReqProv: on +Requires: qt3-devel = %version +Conflicts: qtman qt-man +Group: Documentation/Man + +%description -n qt3-man +This package contains all the man pages for all the Qt 3 classes. + +%build +export QTDIR=/usr/lib/qt3/ +export WLIB=%_lib +export VERSION=%suse_version +source %{SOURCE1} %{version} +export RPM_OPT_FLAGS="$RPM_OPT_FLAGS -fno-strict-aliasing" +# +# compile threaded version to build all tools. +# the lib itself becomes packaged from qt3.spec +# +call_configure -thread -shared -L$PWD/%_lib $OPTIONS +ln -sf /usr/lib/qt3/%_lib/* lib/ +ln -sf /usr/lib/qt3/bin/* bin/ +cd plugins/src +make %{?jobs:-j%jobs} +make INSTALL_ROOT=$RPM_BUILD_ROOT install +cd - +# +# build examples +# +cd tools/assistant/lib +make %{?jobs:-j%jobs} +cd - +cd examples +make %{?jobs:-j%jobs} +cd - +# +# build extra tools +# +cd tools +make %{?jobs:-j%jobs} +make INSTALL_ROOT=$RPM_BUILD_ROOT install +for i in qvfb qembed qconfig msg2qm mergetr ; do + cd "$i" && make %{?jobs:-j%jobs} && install -m 0755 $i ${RPM_BUILD_ROOT}/usr/lib/qt3/bin/ && cd - +done +cd .. +install -m 0755 bin/findtr bin/qt20fix bin/qtrename140 ${RPM_BUILD_ROOT}/usr/lib/qt3/bin/ +if [ %_lib = lib64 ]; then + for i in $RPM_BUILD_ROOT/usr/lib/qt3/plugins/*/*.so; do + mv "$i" "${i%.so}.lib64.so" + done +fi + +%install +export WLIB=%_lib +export VERSION=%suse_version +source %{SOURCE1} +post_install $RPM_BUILD_ROOT/usr/lib/qt3/ +# +# create default doc dir +# +install -d -m 0755 ${RPM_BUILD_ROOT}/%{_docdir}/qt3/ +# +# create links in ld.so.conf path +# +install -d -m 0755 ${RPM_BUILD_ROOT}/%{_libdir} +#install -d -m 0755 ${RPM_BUILD_ROOT}/usr/bin/ +#ln -sf ../lib/qt3/bin/designer ${RPM_BUILD_ROOT}/usr/bin/designer +#ln -sf ../lib/qt3/bin/linguist ${RPM_BUILD_ROOT}/usr/bin/linguist +%suse_update_desktop_file -i designer Qt Development GUIDesigner +%suse_update_desktop_file -i linguist Qt Development Translation +mkdir -p $RPM_BUILD_ROOT/usr/share/pixmaps +perl -pi -e 's/Icon=designer/Icon=designer3/' ${RPM_BUILD_ROOT}/usr/share/applications/designer.desktop +perl -pi -e 's,Exec=designer,Exec=/usr/lib/qt3/bin/designer,' ${RPM_BUILD_ROOT}/usr/share/applications/designer.desktop +mv ${RPM_BUILD_ROOT}/usr/share/applications/designer.desktop ${RPM_BUILD_ROOT}/usr/share/applications/designer3.desktop +install -m 0644 tools/assistant/images/designer.png $RPM_BUILD_ROOT/usr/share/pixmaps/designer3.png +rm -f ${RPM_BUILD_ROOT}/usr/share/pixmaps/designer.png +perl -pi -e 's,Exec=linguist,Exec=/usr/lib/qt3/bin/linguist,' ${RPM_BUILD_ROOT}/usr/share/applications/linguist.desktop +perl -pi -e 's,Icon=linguist,Icon=linguist3,' ${RPM_BUILD_ROOT}/usr/share/applications/linguist.desktop +mv ${RPM_BUILD_ROOT}/usr/share/pixmaps/linguist.png ${RPM_BUILD_ROOT}/usr/share/pixmaps/linguist3.png + +##### these files are not getting installed by "make install" ... bug ? +# +# +# install manpages +# +rm -rf $RPM_BUILD_ROOT/%{_mandir} +install -d $RPM_BUILD_ROOT/%{_mandir} +cp -a doc/man/* $RPM_BUILD_ROOT/%{_mandir}/ +# +# install examples +# +install -d ${RPM_BUILD_ROOT}/usr/lib/qt3/doc/ +find ./examples/ \ + -name \*.o -o -name .obj -o -name .moc -o -name Makefile \ + | xargs rm -rf +cp -a examples ${RPM_BUILD_ROOT}/usr/lib/qt3/doc/ +ln -sf /usr/lib/qt3/doc/examples ${RPM_BUILD_ROOT}/%{_docdir}/qt3/ +# +# to be sure we do not package files which are packaged in other qt3 packages +# +rpm -ql qt3 qt3-devel qt3-devel-doc \ + | while read i ; do + [ -d "$i" ] || rm -f $RPM_BUILD_ROOT/"$i" +done +# +# we do have them in qt3-devel-doc already +# +rm -f $RPM_BUILD_ROOT/usr/lib/qt3/bin/assistant +rm -f $RPM_BUILD_ROOT/usr/lib/qt3/%_lib/libqassistantclient.* +rm -f $RPM_BUILD_ROOT/usr/lib/qt3/translations/assistant_de.qm + +for l in $RPM_BUILD_ROOT/usr/lib/qt3/%_lib/*.a; do + strip --strip-unneeded $l +done + +%if %suse_version > 1020 +%fdupes -s $RPM_BUILD_ROOT +%endif + +%pre +if test -L usr/lib/qt3; then + rm usr/lib/qt3 +fi + +%clean +rm -rf ${RPM_BUILD_ROOT} + +%post +%run_ldconfig + +%post -n qt3-devel-tools +%run_ldconfig + +%files +%defattr(-,root,root) +/usr/lib/qt3/bin/qembed +/usr/lib/qt3/bin/qvfb + +%files -n qt3-mysql +%defattr(-,root,root) +%dir /usr/lib/qt3/plugins/sqldrivers +/usr/lib/qt3/plugins/sqldrivers/libqsqlmysql*.so + +%files -n qt3-postgresql +%defattr(-,root,root) +%dir /usr/lib/qt3/plugins/sqldrivers +/usr/lib/qt3/plugins/sqldrivers/libqsqlpsql*.so + +%files -n qt3-unixODBC +%defattr(-,root,root) +%dir /usr/lib/qt3/plugins/sqldrivers +/usr/lib/qt3/plugins/sqldrivers/libqsqlodbc*.so + +%files -n qt3-sqlite +%defattr(-,root,root) +%dir /usr/lib/qt3/plugins/sqldrivers +/usr/lib/qt3/plugins/sqldrivers/libqsqlite*.so + +%files -n qt3-devel-tools +%defattr(-,root,root) +#/usr/bin/designer +#/usr/bin/linguist +/usr/lib/qt3/bin/qconfig +/usr/lib/qt3/bin/findtr +/usr/lib/qt3/bin/qt20fix +/usr/lib/qt3/bin/qtrename140 +/usr/lib/qt3/bin/msg2qm +/usr/lib/qt3/bin/mergetr +/usr/lib/qt3/bin/designer +/usr/lib/qt3/bin/linguist +/usr/lib/qt3/bin/qm2ts +/usr/lib/qt3/bin/lrelease +/usr/lib/qt3/bin/lupdate +/usr/lib/qt3/templates +/usr/lib/qt3/plugins/designer +/usr/lib/qt3/phrasebooks +/usr/lib/qt3/%_lib/libdesignercore.* +/usr/lib/qt3/%_lib/libeditor.* +/usr/share/applications/* +/usr/share/pixmaps/designer3.png +/usr/share/pixmaps/linguist3.png + +%files -n qt3-devel-examples +%defattr(-,root,root) +%dir /usr/lib/qt3/doc +/%{_docdir}/qt3/examples +/usr/lib/qt3/doc/examples + +%files -n qt3-man +%defattr(-,root,root) +%{_mandir}/man*/* + +%changelog diff --git a/opensuse/core/qt3/qt3-extensions.spec.in b/opensuse/core/qt3/qt3-extensions.spec.in new file mode 100644 index 000000000..e1014767a --- /dev/null +++ b/opensuse/core/qt3/qt3-extensions.spec.in @@ -0,0 +1,358 @@ +# +# spec file for package qt3-extensions (Version 3.3.8b) +# +# Copyright (c) 2005 SUSE LINUX Products GmbH, Nuernberg, Germany. +# This file and all modifications and additions to the pristine +# package are under the same license as the package itself. +# +# Please submit bugfixes or comments via http://bugs.opensuse.org +# + +# norootforbuild + +Name: qt3-extensions +BuildRequires: cups-devel krb5-devel mysql-devel postgresql-devel qt3-devel sqlite2-devel unixODBC-devel update-desktop-files +%if %suse_version > 1020 +BuildRequires: fdupes +%endif +License: GPL, QPL +Version: 3.3.8c +Release: 1 +Autoreqprov: on +Requires: qt3 = %version +Group: Development/Tools/Other +Summary: Qt3 Extensions +# COMMON-BEGIN +# COMMON-END + +%description +Qt is a program library for developing applications with graphical user +interfaces. It allows you to rapidly develop professional programs. The +Qt library is available not only for Linux but for a great number of +Unices and even for Windows. Thus it is possible to write programs that +may be easily ported to those platforms. + +You need a license for using Qt with a non-GPL application, which can +be acquired from sales@trolltech.com. + +See /usr/share/doc/packages/qt3 for details about the new features of +the current Qt library! + +%package -n qt3-devel-examples +Summary: Programming Examples for Qt 3 +Autoreqprov: on +Group: Development/Sources +Provides: qt3-examples +Obsoletes: qt3-examples + +%description -n qt3-devel-examples +Qt is a program library for developing applications with graphical user +interfaces. It allows you to rapidly develop professional programs. The +Qt library is available not only for Linux but for a great number of +Unices and even for Windows. Thus it is possible to write programs that +may be easily ported to those platforms. + +You need a license for using Qt with a non-GPL application, which can +be acquired from sales@trolltech.com. + +See /usr/share/doc/packages/qt3 for details about the new features of +the current Qt library! + +%package -n qt3-mysql +Summary: MySQL Plug-In for Qt +Provides: qt3_database_plugin +Group: Productivity/Databases/Clients + +%description -n qt3-mysql +Qt is a program library for developing applications with graphical user +interfaces. It allows you to rapidly develop professional programs. The +Qt library is available not only for Linux but for a great number of +Unices and even for Windows. Thus it is possible to write programs that +may be easily ported to those platforms. + +You need a license for using Qt with a non-GPL application, which can +be acquired from sales@trolltech.com. + +See /usr/share/doc/packages/qt3 for details about the new features of +the current Qt library! + +%package -n qt3-unixODBC +Summary: A UnixODBC Plug-In for Qt +Provides: qt3_database_plugin +Group: Productivity/Databases/Clients + +%description -n qt3-unixODBC +Qt is a program library for developing applications with graphical user +interfaces. It allows you to rapidly develop professional programs. The +Qt library is available not only for Linux but for a great number of +Unices and even for Windows. Thus it is possible to write programs that +may be easily ported to those platforms. + +You need a license for using Qt with a non-GPL application, which can +be acquired from sales@trolltech.com. + +See /usr/share/doc/packages/qt3 for details about the new features of +the current Qt library! + +%package -n qt3-postgresql +Summary: A PostgreSQL Plug-In for Qt +Provides: qt3_database_plugin +Group: Productivity/Databases/Clients + +%description -n qt3-postgresql +Qt is a program library for developing applications with graphical user +interfaces. It allows you to rapidly develop professional programs. The +Qt library is available not only for Linux but for a great number of +Unices and even for Windows. Thus it is possible to write programs that +may be easily ported to those platforms. + +You need a license for using Qt with a non-GPL application, which can +be acquired from sales@trolltech.com. + +See /usr/share/doc/packages/qt3 for details about the new features of +the current Qt library! + +%package -n qt3-sqlite +Summary: SQLite Database Plug-In for Qt +Provides: qt3_database_plugin +Group: Development/Tools/Other + +%description -n qt3-sqlite +Qt is a program library for developing applications with graphical user +interfaces. It allows you to rapidly develop professional programs. The +Qt library is available not only for Linux but for a great number of +Unices and even for Windows. Thus it is possible to write programs that +may be easily ported to those platforms. + +You need a license for using Qt with a non-GPL application, which can +be acquired from sales@trolltech.com. + +See /usr/share/doc/packages/qt3 for details about the new features of +the current Qt library! + +%package -n qt3-devel-tools +Summary: User Interface Builder and other tools (designer, assistant, linguist) +Autoreqprov: on +Requires: qt3-devel = %version +Provides: qt3-designer +Obsoletes: qt3-designer +Group: Development/Tools/GUI Builders + +%description -n qt3-devel-tools +Qt is a program library for developing applications with graphical user +interfaces. It allows you to rapidly develop professional programs. The +Qt library is available not only for Linux but for a great number of +Unices and even for Windows. Thus it is possible to write programs that +may be easily ported to those platforms. + +You need a license for using Qt with a non-GPL application, which can +be acquired from sales@trolltech.com. + +See /usr/share/doc/packages/qt3 for details about the new features of +the current Qt library! + +%package -n qt3-man +Summary: Qt 3 Man Pages +Autoreqprov: on +Requires: qt3-devel = %version +Conflicts: qtman qt-man +Group: Documentation/Man + +%description -n qt3-man +Qt is a program library for developing applications with graphical user +interfaces. It allows you to rapidly develop professional programs. The +Qt library is available not only for Linux but for a great number of +Unices and even for Windows. Thus it is possible to write programs that +may be easily ported to those platforms. + +You need a license for using Qt with a non-GPL application, which can +be acquired from sales@trolltech.com. + +See /usr/share/doc/packages/qt3 for details about the new features of +the current Qt library! + +%build +export QTDIR=/usr/lib/qt3/ +export WLIB=%_lib +export VERSION=%suse_version +source %{SOURCE1} %{version} +export RPM_OPT_FLAGS="$RPM_OPT_FLAGS -fno-strict-aliasing" +# +# compile threaded version to build all tools. +# the lib itself becomes packaged from qt3.spec +# +call_configure -thread -shared -L$PWD/%_lib $OPTIONS +ln -sf /usr/lib/qt3/%_lib/* lib/ +ln -sf /usr/lib/qt3/bin/* bin/ +cd plugins/src +make %{?jobs:-j%jobs} +make INSTALL_ROOT=$RPM_BUILD_ROOT install +cd - +# +# build examples +# +cd tools/assistant/lib +make %{?jobs:-j%jobs} +cd - +cd examples +make %{?jobs:-j%jobs} +cd - +# +# build extra tools +# +cd tools +make %{?jobs:-j%jobs} +make INSTALL_ROOT=$RPM_BUILD_ROOT install +for i in qvfb qembed qconfig msg2qm mergetr ; do + cd "$i" && make %{?jobs:-j%jobs} && install -m 0755 $i ${RPM_BUILD_ROOT}/usr/lib/qt3/bin/ && cd - +done +cd .. +install -m 0755 bin/findtr bin/qt20fix bin/qtrename140 ${RPM_BUILD_ROOT}/usr/lib/qt3/bin/ +if [ %_lib = lib64 ]; then + for i in $RPM_BUILD_ROOT/usr/lib/qt3/plugins/*/*.so; do + mv "$i" "${i%.so}.lib64.so" + done +fi + +%install +export WLIB=%_lib +export VERSION=%suse_version +source %{SOURCE1} +post_install $RPM_BUILD_ROOT/usr/lib/qt3/ +# +# create default doc dir +# +install -d -m 0755 ${RPM_BUILD_ROOT}/%{_docdir}/qt3/ +# +# create links in ld.so.conf path +# +install -d -m 0755 ${RPM_BUILD_ROOT}/%{_libdir} +#install -d -m 0755 ${RPM_BUILD_ROOT}/usr/bin/ +#ln -sf ../lib/qt3/bin/designer ${RPM_BUILD_ROOT}/usr/bin/designer +#ln -sf ../lib/qt3/bin/linguist ${RPM_BUILD_ROOT}/usr/bin/linguist +%suse_update_desktop_file -i designer Qt Development GUIDesigner +%suse_update_desktop_file -i linguist Qt Development Translation +mkdir -p $RPM_BUILD_ROOT/usr/share/pixmaps +perl -pi -e 's/Icon=designer/Icon=designer3/' ${RPM_BUILD_ROOT}/usr/share/applications/designer.desktop +perl -pi -e 's,Exec=designer,Exec=/usr/lib/qt3/bin/designer,' ${RPM_BUILD_ROOT}/usr/share/applications/designer.desktop +mv ${RPM_BUILD_ROOT}/usr/share/applications/designer.desktop ${RPM_BUILD_ROOT}/usr/share/applications/designer3.desktop +install -m 0644 tools/assistant/images/designer.png $RPM_BUILD_ROOT/usr/share/pixmaps/designer3.png +rm -f ${RPM_BUILD_ROOT}/usr/share/pixmaps/designer.png +perl -pi -e 's,Exec=linguist,Exec=/usr/lib/qt3/bin/linguist,' ${RPM_BUILD_ROOT}/usr/share/applications/linguist.desktop +perl -pi -e 's,Icon=linguist,Icon=linguist3,' ${RPM_BUILD_ROOT}/usr/share/applications/linguist.desktop +mv ${RPM_BUILD_ROOT}/usr/share/pixmaps/linguist.png ${RPM_BUILD_ROOT}/usr/share/pixmaps/linguist3.png + +##### these files are not getting installed by "make install" ... bug ? +# +# +# install manpages +# +rm -rf $RPM_BUILD_ROOT/%{_mandir} +install -d $RPM_BUILD_ROOT/%{_mandir} +cp -a doc/man/* $RPM_BUILD_ROOT/%{_mandir}/ +# +# install examples +# +install -d ${RPM_BUILD_ROOT}/usr/lib/qt3/doc/ +find ./examples/ \ + -name \*.o -o -name .obj -o -name .moc -o -name Makefile \ + | xargs rm -rf +cp -a examples ${RPM_BUILD_ROOT}/usr/lib/qt3/doc/ +ln -sf /usr/lib/qt3/doc/examples ${RPM_BUILD_ROOT}/%{_docdir}/qt3/ +# +# to be sure we do not package files which are packaged in other qt3 packages +# +rpm -ql qt3 qt3-devel qt3-devel-doc \ + | while read i ; do + [ -d "$i" ] || rm -f $RPM_BUILD_ROOT/"$i" +done +# +# we do have them in qt3-devel-doc already +# +rm -f $RPM_BUILD_ROOT/usr/lib/qt3/bin/assistant +rm -f $RPM_BUILD_ROOT/usr/lib/qt3/%_lib/libqassistantclient.* +rm -f $RPM_BUILD_ROOT/usr/lib/qt3/translations/assistant_de.qm + +for l in $RPM_BUILD_ROOT/usr/lib/qt3/%_lib/*.a; do + strip --strip-unneeded $l +done + +%if %suse_version > 1020 +%fdupes -s $RPM_BUILD_ROOT +%endif + + +%pre +if test -L usr/lib/qt3; then + rm usr/lib/qt3 +fi + +%clean +rm -rf ${RPM_BUILD_ROOT} + +%post +%run_ldconfig + +%post -n qt3-devel-tools +%run_ldconfig + +%files +%defattr(-,root,root) +/usr/lib/qt3/bin/qembed +/usr/lib/qt3/bin/qvfb + +%files -n qt3-mysql +%defattr(-,root,root) +%dir /usr/lib/qt3/plugins/sqldrivers +/usr/lib/qt3/plugins/sqldrivers/libqsqlmysql*.so + +%files -n qt3-postgresql +%defattr(-,root,root) +%dir /usr/lib/qt3/plugins/sqldrivers +/usr/lib/qt3/plugins/sqldrivers/libqsqlpsql*.so + +%files -n qt3-unixODBC +%defattr(-,root,root) +%dir /usr/lib/qt3/plugins/sqldrivers +/usr/lib/qt3/plugins/sqldrivers/libqsqlodbc*.so + +%files -n qt3-sqlite +%defattr(-,root,root) +%dir /usr/lib/qt3/plugins/sqldrivers +/usr/lib/qt3/plugins/sqldrivers/libqsqlite*.so + +%files -n qt3-devel-tools +%defattr(-,root,root) +#/usr/bin/designer +#/usr/bin/linguist +/usr/lib/qt3/bin/qconfig +/usr/lib/qt3/bin/findtr +/usr/lib/qt3/bin/qt20fix +/usr/lib/qt3/bin/qtrename140 +/usr/lib/qt3/bin/msg2qm +/usr/lib/qt3/bin/mergetr +/usr/lib/qt3/bin/designer +/usr/lib/qt3/bin/linguist +/usr/lib/qt3/bin/qm2ts +/usr/lib/qt3/bin/lrelease +/usr/lib/qt3/bin/lupdate +/usr/lib/qt3/templates +/usr/lib/qt3/plugins/designer +/usr/lib/qt3/phrasebooks +/usr/lib/qt3/%_lib/libdesignercore.* +/usr/lib/qt3/%_lib/libeditor.* +/usr/share/applications/* +/usr/share/pixmaps/designer3.png +/usr/share/pixmaps/linguist3.png + +%files -n qt3-devel-examples +%defattr(-,root,root) +%dir /usr/lib/qt3/doc +/%{_docdir}/qt3/examples +/usr/lib/qt3/doc/examples + +%files -n qt3-man +%defattr(-,root,root) +%{_mandir}/man*/* + +%changelog -n qt3-extensions diff --git a/opensuse/core/qt3/qt3-fix-cast.diff b/opensuse/core/qt3/qt3-fix-cast.diff new file mode 100644 index 000000000..5ad34108b --- /dev/null +++ b/opensuse/core/qt3/qt3-fix-cast.diff @@ -0,0 +1,13 @@ +Index: tools/qvfb/qvfbview.cpp +================================================================================ +--- tools/qvfb/qvfbview.cpp ++++ tools/qvfb/qvfbview.cpp +@@ -115,7 +115,7 @@ + data = (unsigned char *)shmat( shmId, 0, 0 ); + } + +- if ( (int)data == -1 ) ++ if ( (long)data == -1 ) + qFatal( "Cannot attach to shared memory" ); + + hdr = (QVFbHeader *)data; diff --git a/opensuse/core/qt3/qt3-libpng14.diff b/opensuse/core/qt3/qt3-libpng14.diff new file mode 100644 index 000000000..8df6929fa --- /dev/null +++ b/opensuse/core/qt3/qt3-libpng14.diff @@ -0,0 +1,22 @@ +Index: qt-x11-free-3.3.8b/src/kernel/qpngio.cpp +=================================================================== +--- qt-x11-free-3.3.8b.orig/src/kernel/qpngio.cpp ++++ qt-x11-free-3.3.8b/src/kernel/qpngio.cpp +@@ -162,7 +162,7 @@ void setup_qt( QImage& image, png_struct + image.setColor( i, qRgba(c,c,c,0xff) ); + } + if ( png_get_valid(png_ptr, info_ptr, PNG_INFO_tRNS) ) { +- const int g = info_ptr->trans_values.gray; ++ const int g = info_ptr->trans_color.gray; + if (g < ncols) { + image.setAlphaBuffer(TRUE); + image.setColor(g, image.color(g) & RGB_MASK); +@@ -190,7 +190,7 @@ void setup_qt( QImage& image, png_struct + info_ptr->palette[i].red, + info_ptr->palette[i].green, + info_ptr->palette[i].blue, +- info_ptr->trans[i] ++ info_ptr->trans_alpha[i] + ) + ); + i++; diff --git a/opensuse/core/qt3/qt3-never-strip.diff b/opensuse/core/qt3/qt3-never-strip.diff new file mode 100644 index 000000000..86e09c1ef --- /dev/null +++ b/opensuse/core/qt3/qt3-never-strip.diff @@ -0,0 +1,11 @@ +--- qmake/generators/unix/unixmake.cpp ++++ qmake/generators/unix/unixmake.cpp +@@ -836,7 +836,7 @@ + ret += "\n\t"; + ret += QString(resource ? "-$(INSTALL_DIR)" : "-$(INSTALL_FILE)") + " \"" + + src_targ + "\" \"" + dst_targ + "\""; +- if(!project->isActiveConfig("debug") && !project->isEmpty("QMAKE_STRIP") && ++ if(false && !project->isActiveConfig("debug") && !project->isEmpty("QMAKE_STRIP") && + (project->first("TEMPLATE") != "lib" || !project->isActiveConfig("staticlib"))) { + ret += "\n\t-" + var("QMAKE_STRIP"); + if(project->first("TEMPLATE") == "lib" && !project->isEmpty("QMAKE_STRIPFLAGS_LIB")) diff --git a/opensuse/core/qt3/qt3-no-date.diff b/opensuse/core/qt3/qt3-no-date.diff new file mode 100644 index 000000000..fd505da0e --- /dev/null +++ b/opensuse/core/qt3/qt3-no-date.diff @@ -0,0 +1,65 @@ +--- src/moc/moc.y 2008-01-15 20:09:13.000000000 +0100 ++++ src/moc/moc.y 2009-02-07 19:35:47.703930527 +0100 +@@ -2833,7 +2833,7 @@ + { + const char *hdr1 = "/****************************************************************************\n" + "** %s meta object code from reading C++ file '%s'\n**\n"; +- const char *hdr2 = "** Created: %s\n" ++ const char *hdr2 = "** Created:\n" + const char *hdr3 = "** WARNING! All changes made in this file will be lost!\n"; + const char *hdr4 = "*****************************************************************************/\n\n"; + int i; +@@ -2872,7 +2872,7 @@ + if ( i >= 0 ) + fn = &g->fileName[i]; + fprintf( out, hdr1, (const char*)qualifiedClassName(),(const char*)fn); +- fprintf( out, hdr2, (const char*)dstr ); ++ fprintf( out, hdr2 ); + fprintf( out, hdr3 ); + fprintf( out, hdr4 ); + +diff -ru src/moc/moc_yacc.cpp src/moc/moc_yacc.cpp +--- src/moc/moc_yacc.cpp 2008-01-14 13:24:36.000000000 +0100 ++++ src/moc/moc_yacc.cpp 2009-02-07 19:35:30.039680400 +0100 +@@ -2872,7 +2872,7 @@ + { + const char *hdr1 = "/****************************************************************************\n" + "** %s meta object code from reading C++ file '%s'\n**\n"; +- const char *hdr2 = "** Created: %s\n" ++ const char *hdr2 = "** Created: \n" + "** by: The Qt MOC ($Id: qt/moc_yacc.cpp 3.3.8 edited Feb 2 14:59 $)\n**\n"; + const char *hdr3 = "** WARNING! All changes made in this file will be lost!\n"; + const char *hdr4 = "*****************************************************************************/\n\n"; +@@ -2912,7 +2912,7 @@ + if ( i >= 0 ) + fn = &g->fileName[i]; + fprintf( out, hdr1, (const char*)qualifiedClassName(),(const char*)fn); +- fprintf( out, hdr2, (const char*)dstr ); ++ fprintf( out, hdr2 ); + fprintf( out, hdr3 ); + fprintf( out, hdr4 ); + +diff -ru tools/designer/uic/embed.cpp tools/designer/uic/embed.cpp +--- tools/designer/uic/embed.cpp 2008-01-15 20:09:14.000000000 +0100 ++++ tools/designer/uic/embed.cpp 2009-02-07 19:36:25.950931409 +0100 +@@ -137,7 +137,7 @@ + for ( it = images.begin(); it != images.end(); ++it ) + out << "** " << *it << "\n"; + out << "**\n"; +- out << "** Created: " << QDateTime::currentDateTime().toString() << "\n"; ++ out << "** Created:\n"; + out << "**\n"; + out << "** WARNING! All changes made in this file will be lost!\n"; + out << "****************************************************************************/\n"; +diff -ru tools/designer/uic/main.cpp tools/designer/uic/main.cpp +--- tools/designer/uic/main.cpp 2008-01-15 20:09:14.000000000 +0100 ++++ tools/designer/uic/main.cpp 2009-02-07 19:36:36.603680916 +0100 +@@ -320,7 +320,7 @@ + out << "/****************************************************************************" << endl; + out << "** Form "<< (impl? "implementation" : "interface") << " generated from reading ui file '" << fileName << "'" << endl; + out << "**" << endl; +- out << "** Created: " << QDateTime::currentDateTime().toString() << endl; ++ out << "** Created:" << endl; + out << "**" << endl; + out << "** WARNING! All changes made in this file will be lost!" << endl; + out << "****************************************************************************/" << endl << endl; diff --git a/opensuse/core/qt3/qt3-warnings.diff b/opensuse/core/qt3/qt3-warnings.diff new file mode 100644 index 000000000..870017ded --- /dev/null +++ b/opensuse/core/qt3/qt3-warnings.diff @@ -0,0 +1,13 @@ +Index: src/kernel/qimage.h +=================================================================== +--- src/kernel/qimage.h (revision 594273) ++++ src/kernel/qimage.h (working copy) +@@ -55,7 +55,7 @@ public: + QCString lang; + + bool operator< (const QImageTextKeyLang& other) const +- { return key < other.key || key==other.key && lang < other.lang; } ++ { return key < other.key || (key==other.key && lang < other.lang); } + bool operator== (const QImageTextKeyLang& other) const + { return key==other.key && lang==other.lang; } + }; diff --git a/opensuse/core/qt3/qt3.changes b/opensuse/core/qt3/qt3.changes new file mode 100644 index 000000000..db0df1efa --- /dev/null +++ b/opensuse/core/qt3/qt3.changes @@ -0,0 +1,2475 @@ +------------------------------------------------------------------- +Fri Sep 23 10:16:33 UTC 2011 - coolo@suse.com + +- fix qt3-extensions + +------------------------------------------------------------------- +Fri Apr 22 18:31:12 UTC 2011 - anixx@opensuse.org + +- changed compression to .tar.bz2 + +------------------------------------------------------------------- +Thu Apr 21 11:40:38 CEST 2011 - pth@suse.de + +- Don't try to patch in the version twice in qt-3.3.8c.diff. +- Resync those patches that don't apply without offset. +- Mark scriptlets in profile.d as being configuration files. +- Remove the calls to run_ldconfig. + +------------------------------------------------------------------- +Mon Apr 18 18:46:34 UTC 2011 - robxu9@gmail.com + +- a fix to the 3.3.8c patch + +------------------------------------------------------------------- +Thu Mar 31 18:15:29 UTC 2011 - coolo@novell.com + +- another gcc 4.6 fix + +------------------------------------------------------------------- +Mon Jan 31 21:23:51 UTC 2011 - robxu9@gmail.com + +- Update to version 3.3.8c, by the Trinity Project +- pre_checkin.sh was not run as this caused too many unneccesary + changes to occur. +- The translations tarball was left at version 3.3.8b. + +------------------------------------------------------------------- +Sat Nov 20 02:26:08 CET 2010 - dmueller@suse.de + +- fix build against gcc 4.6 + +------------------------------------------------------------------- +Mon Nov 1 10:09:40 UTC 2010 - coolo@novell.com + +- fix libpng dependencies + +------------------------------------------------------------------- +Wed Sep 1 13:22:38 UTC 2010 - pgajdos@novell.com + +- port to libpng14 + +------------------------------------------------------------------- +Wed May 5 19:42:33 UTC 2010 - coolo@novell.com + +- do not patch the symlink + +------------------------------------------------------------------- +Mon Apr 5 21:06:20 CEST 2010 - dmueller@suse.de + +- fix -devel package requires +- simplify requires of sub-specfiles + +------------------------------------------------------------------- +Mon Apr 5 16:00:15 CEST 2010 - dmueller@suse.de + +- build against libpng12 + +------------------------------------------------------------------- +Thu Jan 21 14:24:13 CET 2010 - dmueller@suse.de + +- recommend kdelibs3-default-style (bnc#544581) + +------------------------------------------------------------------- +Fri Dec 18 17:04:51 CET 2009 - jengelh@medozas.de + +- add baselibs.conf as a source +- add baselib definitions for SPARC + +------------------------------------------------------------------- +Fri Nov 13 14:28:47 CET 2009 - dmueller@suse.de + +- fix patches to apply with fuzz=0 + +------------------------------------------------------------------- +Tue Nov 3 19:14:30 UTC 2009 - coolo@novell.com + +- updated patches to apply with fuzz=0 + +------------------------------------------------------------------- +Tue Aug 11 11:24:13 CEST 2009 - dmueller@suse.de + +- fix popen leak (bnc#529615) + +------------------------------------------------------------------- +Mon Feb 9 12:08:04 CET 2009 - coolo@suse.de + +- strip out date from .la files + +------------------------------------------------------------------- +Sat Feb 7 20:43:40 CET 2009 - coolo@suse.de + +- do not put timestamps in generated sources + +------------------------------------------------------------------- +Wed Jan 7 12:34:56 CET 2009 - olh@suse.de + +- obsolete old -XXbit packages (bnc#437293) + +------------------------------------------------------------------- +Tue Nov 11 16:57:56 CET 2008 - ro@suse.de + +- SLE-11 uses PPC64 instead of PPC, adapt baselibs.conf + +------------------------------------------------------------------- +Wed Sep 10 18:50:12 CEST 2008 - dmueller@suse.de + +- remove qt3-static package + +------------------------------------------------------------------- +Mon Jul 21 21:20:47 CEST 2008 - dmueller@suse.de + +- more verbose qtimer debug + +------------------------------------------------------------------- +Sun Jun 22 13:00:45 CEST 2008 - schwab@suse.de + +- Fix invalid array reference in font name parser. + +------------------------------------------------------------------- +Thu Apr 10 12:54:45 CEST 2008 - ro@suse.de + +- added baselibs.conf file to build xxbit packages + for multilib support + +------------------------------------------------------------------- +Mon Mar 10 16:48:36 CET 2008 - dmueller@suse.de + +- fix build with updated x.org + +------------------------------------------------------------------- +Thu Feb 7 17:51:25 CET 2008 - dmueller@suse.de + +- fix memory corruption when removing CRTc's dynamically + +------------------------------------------------------------------- +Sat Jan 19 07:19:25 CET 2008 - stbinner@suse.de + +- This version adds the GNU Public License version 3 as a + possible choice for licenses to the Open Source releases of Qt 3. +- upstreaming of patches and few other minor bugfixes + +------------------------------------------------------------------- +Tue Jan 15 01:42:37 CET 2008 - dmueller@suse.de + +- fix xrandr resize race (#335410) + +------------------------------------------------------------------- +Thu Dec 6 01:32:32 CET 2007 - dmueller@suse.de + +- fix the build key for gcc 4.3 + +------------------------------------------------------------------- +Mon Dec 3 15:12:36 CET 2007 - dmueller@suse.de + +- back out khmer "fix" from 3.3.8, which apparently + made it worse (#345459) + +------------------------------------------------------------------- +Tue Nov 20 20:25:18 CET 2007 - dmueller@suse.de + +- fix build with gcc 4.3 again + +------------------------------------------------------------------- +Mon Oct 1 11:48:51 CEST 2007 - dmueller@suse.de + +- fix build with gcc 4.3 + +------------------------------------------------------------------- +Fri Sep 7 12:32:22 CEST 2007 - dmueller@suse.de + +- fix off-by-one in utf8 decoder (#304249, CVE-2007-4137) +- fix typo in QDate::fromString() + +------------------------------------------------------------------- +Wed Aug 29 17:08:22 CEST 2007 - llunak@suse.cz + +- fix reading MNG files, visible in Kickoff (#278548) +- remove patching of symlinks from the immodule patch +- improve support for compositing (qt-copy patches #0079,#0080) + +------------------------------------------------------------------- +Fri Aug 24 18:39:04 CEST 2007 - dmueller@suse.de + +- fix format string issues (#291754, CVE-2007-3388) +- fix xrandr 1.2 detection + +------------------------------------------------------------------- +Thu Jul 5 17:25:18 CEST 2007 - coolo@suse.de + +- package desktop files and png files + +------------------------------------------------------------------- +Thu Jun 21 12:04:33 CEST 2007 - stbinner@suse.de + +- run fdupes in qt3-extensions.spec + +------------------------------------------------------------------- +Thu May 24 19:15:38 CEST 2007 - dmueller@suse.de + +- redo the last change in the correct spec file + +------------------------------------------------------------------- +Wed May 23 17:08:39 CEST 2007 - dmueller@suse.de + +- qt3-examples -> qt3-devel-examples + +------------------------------------------------------------------- +Thu May 17 06:49:50 CEST 2007 - stbinner@suse.de + +- removed some historic stuff from the spec file + +------------------------------------------------------------------- +Tue May 8 14:32:40 CEST 2007 - dmueller@suse.de + +- trust libxinerama only if it provides more screens + than xrandr crtcs (#264199) + +------------------------------------------------------------------- +Fri May 4 19:06:40 CEST 2007 - dmueller@suse.de + +- fix permissions of qmake specs + +------------------------------------------------------------------- +Wed May 2 11:50:07 CEST 2007 - coolo@suse.de + +- remove Suse-translate from desktop file +- remove obsolete suse version support + +------------------------------------------------------------------- +Mon Apr 30 14:39:40 CEST 2007 - stbinner@suse.de + +- fix build of qt3-devel-doc with desktop-file-validate run + +------------------------------------------------------------------- +Mon Apr 16 16:10:59 CEST 2007 - dmueller@suse.de + +- temporarily disable Xrandr 1.2 support until (#264199) is + resolved +- use -Bsymbolic-functions + +------------------------------------------------------------------- +Sun Apr 1 20:40:04 CEST 2007 - dmueller@suse.de + +- fix utf8 decoder (#259187, CVE-2007-0242) + +------------------------------------------------------------------- +Thu Mar 29 18:02:30 CEST 2007 - dmueller@suse.de + +- Fix XRandr 1.2 support + +------------------------------------------------------------------- +Fri Mar 16 14:52:22 CET 2007 - dmueller@suse.de + +- call XftDefaultSubstitute (#255330) + +------------------------------------------------------------------- +Thu Mar 15 11:07:44 CET 2007 - dmueller@suse.de + +- update font fix patch (#244579) + +------------------------------------------------------------------- +Mon Mar 12 16:09:29 CET 2007 - dmueller@suse.de + +- enable tablet support (#253392) +- add default substitution for font queries (#244579) + +------------------------------------------------------------------- +Tue Mar 6 19:37:48 CET 2007 - dmueller@suse.de + +- fix mysql driver crash on shutdown (#251222) + +------------------------------------------------------------------- +Sun Feb 25 11:52:26 CET 2007 - dmueller@suse.de + +- update to 3.3.8: + * changelog is under /usr/share/doc/packages/qt3/changes-3.3.8 + +------------------------------------------------------------------- +Wed Feb 21 13:00:52 CET 2007 - dmueller@suse.de + +- fix build for 9.3 + +------------------------------------------------------------------- +Wed Feb 7 10:39:13 CET 2007 - dmueller@suse.de + +- also build qt3-static as full-config + +------------------------------------------------------------------- +Mon Feb 5 15:18:34 CET 2007 - stbinner@suse.de + +- fix build of qt3-extensions on 9.3 + +------------------------------------------------------------------- +Fri Feb 2 15:41:36 CET 2007 - stbinner@suse.de + +- fix changelog chronological order + +------------------------------------------------------------------- +Wed Jan 31 21:40:07 CET 2007 - dmueller@suse.de + +- add a sanity check to ensure that we have a full version +- fix compile warnings in headers + +------------------------------------------------------------------- +Tue Jan 9 15:36:14 CET 2007 - dmueller@suse.de + +- drop misfuzzed patch + +------------------------------------------------------------------- +Mon Jan 8 18:35:16 CET 2007 - dmueller@suse.de + +- add patch to fix indic rendering issue + +------------------------------------------------------------------- +Tue Oct 31 13:18:44 CET 2006 - dmueller@suse.de + +- add patch to fix han localisation issue (#216183) +- update qt-debug-timer patch to output more verbose debug +- add patch to fix xinerama issue with popupmenus (#216235) + +------------------------------------------------------------------- +Fri Oct 20 15:54:30 CEST 2006 - dmueller@suse.de + +- update to 3.3.7: + * include CVE-2006-4811 patch + +------------------------------------------------------------------- +Thu Oct 19 15:21:51 CEST 2006 - dmueller@suse.de + +- add patch for integer overflow in QPixmap/QImage + (#212544, CVE-2006-4811) + +------------------------------------------------------------------- +Tue Oct 10 23:31:01 CEST 2006 - dmueller@suse.de + +- add patch for qtimer debugging + +------------------------------------------------------------------- +Wed Oct 4 19:39:56 CEST 2006 - dmueller@suse.de + +- fix headers to compile in -pedantic mode + +------------------------------------------------------------------- +Thu Sep 14 13:27:03 CEST 2006 - dmueller@suse.de + +- don't install static libs as executable + +------------------------------------------------------------------- +Fri Sep 1 16:18:07 CEST 2006 - llunak@suse.cz + +- Add patches with Xinerama improvements. + +------------------------------------------------------------------- +Thu Aug 17 13:42:28 CEST 2006 - stbinner@suse.de + +- fix qt3-devel-tools file conflict with qt-devel-doc + +------------------------------------------------------------------- +Tue Aug 1 14:47:18 CEST 2006 - stbinner@suse.de + +- disable noisy debug message in qt-x11-immodule-unified diff + +------------------------------------------------------------------- +Sun Jul 9 21:39:54 CEST 2006 - stbinner@suse.de + +- fix {designer3,linguist}.desktop starting Qt4 versions (#190135) + +------------------------------------------------------------------- +Tue Jul 04 15:12:18 CEST 2006 - mfabian@suse.de + +- update qt-x11-immodule-unified diff to 20060318 version. + This update already includes the following patches: + + fix-x11-immodule.diff + + disable-inputmethod-for-passords.patch + + qt-x11-immodule-capitalization-fix.diff + + fix-im-crash-on-exit.diff + + fix-immodule-buffer-overflow.diff + + qt-x11-immodule-qtextedit-fix.diff + + qt-x11-immodule-focus-handling.diff + + qt-x11-immodule-fix-inputcontext-crash.diff + which are thus removed. + +------------------------------------------------------------------- +Wed Jun 28 10:07:30 CEST 2006 - dmueller@suse.de + +- fix $QT_SYSTEM_DIR (#188217) + +------------------------------------------------------------------- +Fri Jun 9 15:25:49 CEST 2006 - llunak@suse.de + +- add $QT_SYSTEM_DIR (#183059) + +------------------------------------------------------------------- +Wed May 31 15:51:01 CEST 2006 - adrian@suse.de + +- remove BuildRequires libdrm-devel + +------------------------------------------------------------------- +Wed May 31 13:24:56 CEST 2006 - dmueller@suse.de + +- fix xpm image loading problem +- add performance regression fix +- add asian font loading fix + +------------------------------------------------------------------- +Mon May 29 08:41:44 CEST 2006 - adrian@suse.de + +- revert requires macro, this breaks the build system mapping +- require right packages in -devel for < 10.1 + +------------------------------------------------------------------- +Fri May 26 19:40:44 CEST 2006 - dmueller@suse.de + +- fix build + +------------------------------------------------------------------- +Fri May 26 10:42:43 CEST 2006 - dmueller@suse.de + +- 3.3.6 update + * numerous bugfixes and translations + +------------------------------------------------------------------- +Wed May 10 17:12:34 CEST 2006 - dmueller@suse.de + +- drop substitutions from global rc file (#171513) + +------------------------------------------------------------------- +Fri Apr 14 01:46:36 CEST 2006 - dmueller@suse.de + +- drop linguist3.png/desktop as its unused and install + linguist.desktop instead (fixes build failure). + +------------------------------------------------------------------- +Mon Apr 10 10:40:11 CEST 2006 - dmueller@suse.de + +- strip installed static libraries +- fix file conflict with Qt4 packages + +------------------------------------------------------------------- +Mon Apr 3 16:34:14 CEST 2006 - dmueller@suse.de + +- restore libraryPaths which broke instsys (#162930) + +------------------------------------------------------------------- +Thu Mar 30 12:49:05 CEST 2006 - coolo@suse.de + +- update qtrc to the real values avoiding dark gray platinum even + if not overwritten with desktop settings + +------------------------------------------------------------------- +Tue Mar 21 14:59:49 CET 2006 - dmueller@suse.de + +- update patch for QLabel layout issues to the one from Qt 3.3.7 + +------------------------------------------------------------------- +Fri Mar 17 18:39:04 CET 2006 - dmueller@suse.de + +- add patch for QLabel layout management issues (#153029) + +------------------------------------------------------------------- +Fri Mar 17 12:23:30 CET 2006 - dmueller@suse.de + +- fix crash on painting > 32000 chars at once +- fix error in wrapping japanese text +- fix QFile::flush() not setting error status +- fix window gravity being wrong for RTL + +------------------------------------------------------------------- +Tue Mar 14 00:22:32 CET 2006 - dmueller@suse.de + +- fix filelist + +------------------------------------------------------------------- +Mon Mar 13 17:02:09 CET 2006 - dmueller@suse.de + +- build qt3-devel-doc as noarch package + +------------------------------------------------------------------- +Tue Mar 7 10:49:56 CET 2006 - dmueller@suse.de + +- moving libqassistantclient to -devel (#155519) and assistant + to qt3. +- translation update +- fix assistant invocation to prefer Qt3's assistant over Qt 4.x + +------------------------------------------------------------------- +Wed Feb 22 14:00:00 CET 2006 - dmueller@suse.de + +- fix crash when not able to load imswitch (#117443) + +------------------------------------------------------------------- +Sat Feb 18 01:15:54 CET 2006 - dmueller@suse.de + +- add more immodule fixes +- fix build of qt3-extensions +- remove sections for SL < 9.2 + +------------------------------------------------------------------- +Fri Feb 17 16:47:41 CET 2006 - dmueller@suse.de + +- fix crash on shutdown (#151831) + +------------------------------------------------------------------- +Mon Feb 13 15:52:19 CET 2006 - coolo@suse.de + +- update translations + +------------------------------------------------------------------- +Mon Feb 6 05:22:44 CET 2006 - zsu@suse.de + +- Add patch qt3-khmer-script.patch to fix a rendering issue of Khmer + script (by Jens Herden, #147190). + +------------------------------------------------------------------- +Sat Jan 28 10:48:06 CET 2006 - coolo@suse.de + +- really install the icon + +------------------------------------------------------------------- +Fri Jan 27 20:02:59 CET 2006 - llunak@suse.cz + +- fix rubberband.diff to emit selectionChanged() properly (#132920) + +------------------------------------------------------------------- +Fri Jan 27 12:24:41 CET 2006 - coolo@suse.de + +- avoid file conflict with qt package + +------------------------------------------------------------------- +Fri Jan 27 08:08:10 CET 2006 - coolo@suse.de + +- fix qt3.sh + +------------------------------------------------------------------- +Fri Jan 27 02:21:53 CET 2006 - mls@suse.de + +- converted neededforbuild to BuildRequires + +------------------------------------------------------------------- +Wed Jan 25 18:06:26 CET 2006 - dmueller@suse.de + +- set $QTDIR in /etc/profile.d/qt3.(c)sh + +------------------------------------------------------------------- +Sat Dec 3 14:30:43 CET 2005 - coolo@suse.de + +- build with -Bdirect if available +- updating font patch + +------------------------------------------------------------------- +Fri Dec 2 00:11:21 CET 2005 - dmueller@suse.de + +- build with -fno-strict-aliasing + +------------------------------------------------------------------- +Wed Nov 23 10:18:29 CET 2005 - dmueller@suse.de + +- unify spec files via a common patch/sources section + and adjust spec files accordingly +- add /etc/profile.d hook to put qmake in the path (#134377) +- drop fast-malloc patch for all packages (#134563) + +------------------------------------------------------------------- +Fri Nov 18 15:20:21 CET 2005 - stbinner@suse.de + +- only disable FcFontSort patch for released distributions + +------------------------------------------------------------------- +Fri Nov 18 12:08:43 CET 2005 - stbinner@suse.de + +- disable FcFontSort patch because of immaturity + +------------------------------------------------------------------- +Fri Nov 11 15:48:07 CET 2005 - dmueller@suse.de + +- avoid crashes after QListView::clear() + +------------------------------------------------------------------- +Wed Nov 2 15:52:04 CET 2005 - coolo@suse.de + +- avoid FcFontSort as it's very expensive + +------------------------------------------------------------------- +Thu Oct 27 14:38:16 CEST 2005 - stbinner@suse.de + +- extend fix-key-release-event-with-imm.diff to fix another Immodule + related key release event bug (#130727) + +------------------------------------------------------------------- +Wed Oct 12 19:25:52 CEST 2005 - dmueller@suse.de + +- update -Werror patch to catch one more case + +------------------------------------------------------------------- +Mon Oct 10 16:58:30 CEST 2005 - dmueller@suse.de + +- add patch to fix broken key compression (#121049) + +------------------------------------------------------------------- +Sat Oct 8 00:04:41 CEST 2005 - dmueller@suse.de + +- patch cleanup + +------------------------------------------------------------------- +Wed Oct 5 13:59:53 CEST 2005 - dmueller@suse.de + +- add 0065-fix_werror_with_gcc4.patch (#119209) + +------------------------------------------------------------------- +Wed Sep 28 16:32:43 CEST 2005 - stbinner@suse.de + +- removed historic "Autoreqprov:off" leftover + +------------------------------------------------------------------- +Wed Sep 28 15:27:34 CEST 2005 - stbinner@suse.de + +- add a patch to fix capitalization of Immodule strings + +------------------------------------------------------------------- +Mon Sep 26 10:57:35 CEST 2005 - coolo@suse.de + +- fix build on x86_64 + +------------------------------------------------------------------- +Mon Sep 19 12:40:22 CEST 2005 - mfabian@suse.de + +- Bugzilla #117115: enable input methods in qlineedit widgets + only when "mode == Normal" (i.e. not when "mode == NoEcho" or + "mode == Password"). Using input methods while inputting + passwords is useless and confusing. + +------------------------------------------------------------------- +Fri Sep 16 23:06:14 CEST 2005 - schwab@suse.de + +- Never strip gratuitously. + +------------------------------------------------------------------- +Thu Sep 15 10:57:05 CEST 2005 - stbinner@suse.de + +- update to version 3.3.5 + +------------------------------------------------------------------- +Mon Sep 5 13:04:30 CEST 2005 - coolo@suse.de + +- layout popup menus correctly (#113048) + +------------------------------------------------------------------- +Fri Aug 19 17:04:02 CEST 2005 - llunak@suse.cz + +- Place dialog properly for systray icons on xinerama (#104794). + +------------------------------------------------------------------- +Fri Jul 29 18:24:24 CEST 2005 - dmueller@suse.de + +- add Q_EXPORT visibility support +- Fix gcc 4.0.x compiler detection for qt plugin buildkey + +------------------------------------------------------------------- +Thu Jun 23 14:37:00 CEST 2005 - mrueckert@suse.de + +- Applied patch from Lubos Lunak to fix drag'n'drop when the + visible window is not at the top of the window stack. + +------------------------------------------------------------------- +Fri Jun 10 17:28:47 CEST 2005 - adrian@suse.de + +- Apply workaround from Simon Hausmann to avoid miscompilation with gcc4 + +------------------------------------------------------------------- +Tue Jun 7 16:15:54 CEST 2005 - adrian@suse.de + +- do not trigger -debug configure flag on -g, but use it for beta + distribution + +------------------------------------------------------------------- +Tue May 31 10:49:30 CEST 2005 - adrian@suse.de + +- require freeglut-devel instead of XFree86-Mesa-devel + +------------------------------------------------------------------- +Fri Apr 15 19:52:35 CEST 2005 - mfabian@suse.de + +- Bugzilla #74133: check for some more glyphs for Katakana and + Hiragana, especially also check for all the glyphs which are + checked for Han_Japanese. This usually guarantees that the same + font is used for Katakana and Hiragana as for Japanese Kanji, + which is what we want. + +------------------------------------------------------------------- +Fri Apr 8 15:28:36 CEST 2005 - uli@suse.de + +- fixed to build with GCC4 on ARM + +------------------------------------------------------------------- +Mon Apr 4 15:02:41 CEST 2005 - adrian@suse.de + +- apply patches from qt-copy, fixes for mouse handling in popups + +------------------------------------------------------------------- +Thu Mar 24 09:57:01 CET 2005 - adrian@suse.de + +- update font mappings in qtrc for asian languages (#74363) + +------------------------------------------------------------------- +Wed Mar 16 17:54:12 CET 2005 - adrian@suse.de + +- fix possible crash in qtranslator (#71968, by Lubos) + +------------------------------------------------------------------- +Fri Mar 4 15:50:50 CET 2005 - adrian@suse.de + +- fix loading of style plugins for lib/lib64 mixed systesm (by Lubos) + +------------------------------------------------------------------- +Fri Feb 25 13:26:56 CET 2005 - adrian@suse.de + +- fix all Exec= lines for menu entries + +------------------------------------------------------------------- +Fri Feb 11 18:29:14 CET 2005 - adrian@suse.de + +- apply patch for rubberband selections from Andre Moreira Magalhaes + +------------------------------------------------------------------- +Wed Feb 9 17:55:47 CET 2005 - adrian@suse.de + +- add qclipboard hack to avoid freezes from qt-copy again + +------------------------------------------------------------------- +Wed Feb 2 16:35:44 CET 2005 - adrian@suse.de + +- fix plugin loading for the KDE integration + +------------------------------------------------------------------- +Wed Jan 26 17:49:46 CET 2005 - adrian@suse.de + +- update to version 3.3.4 +- reenable limit size patch to keep BC +- remove qclipboard fix, it got merged +- remove bidi fixes, they got merged +- remove gif handler fixes, they got merged +- apply KDE dialog integration code from Lubos +- revert some changes in imm code to solve a problem with missing + key release events + +------------------------------------------------------------------- +Fri Jan 14 14:12:06 CET 2005 - adrian@suse.de + +- update imm patch to version from 20041203 +- disable image size patch for now, it broke printing of large images + +------------------------------------------------------------------- +Wed Jan 5 13:37:00 CET 2005 - adrian@suse.de + +- reenable the SHM patch again +- add qtimm patch to solve an issue with Opera +- remove binary links from /usr/bin/, they do conflict with Qt 4 + +------------------------------------------------------------------- +Mon Nov 22 12:06:33 CET 2004 - ro@suse.de + +- "sed -i" does not work on old distributions + +------------------------------------------------------------------- +Tue Nov 16 11:04:55 CET 2004 - adrian@suse.de + +- package icon files for desktop entries + +------------------------------------------------------------------- +Mon Nov 8 16:07:11 CET 2004 - coolo@suse.de + +- improve Waldo's patch to limit image dimensions + +------------------------------------------------------------------- +Fri Oct 29 23:29:44 CEST 2004 - schwab@suse.de + +- Revert last change to png writing. + +------------------------------------------------------------------- +Tue Oct 26 10:51:34 CEST 2004 - adrian@suse.de + +- fix from Lubos for full screen mode switching on 64bit (#46972) + +------------------------------------------------------------------- +Mon Oct 25 14:26:40 CEST 2004 - schwab@suse.de + +- Extend last change to png writing. + +------------------------------------------------------------------- +Sat Oct 23 23:23:21 CEST 2004 - schwab@suse.de + +- Fix endian bug in png reading. + +------------------------------------------------------------------- +Thu Oct 14 18:09:56 CEST 2004 - adrian@suse.de + +- fix assitant zoom functionality, patch by Waldo (#45688) + +------------------------------------------------------------------- +Mon Oct 11 18:11:32 CEST 2004 - adrian@suse.de + +- fix requires of qt3-devel for new x.org packages + +------------------------------------------------------------------- +Wed Sep 29 10:27:12 CEST 2004 - adrian@suse.de + +- prefer MiscGlyphSymbol fonts with tics over others (#46280) +- enable BiDi support by default + +------------------------------------------------------------------- +Tue Sep 28 11:45:55 CEST 2004 - mfabian@suse.de + +- Bugzilla #46216: make "On The Spot" the default input style + for Qt. + +------------------------------------------------------------------- +Sat Sep 25 13:46:59 CEST 2004 - adrian@suse.de + +- prefer the .lib64.so extension on lib64 systems, but do not + require it anymore + +------------------------------------------------------------------- +Fri Sep 24 22:10:29 CEST 2004 - adrian@suse.de + +- fix load of plugins on lib64 systems. The plugins do need a + .lib64.so extension now + +------------------------------------------------------------------- +Wed Sep 15 17:52:55 CEST 2004 - adrian@suse.de + +- add two more glyphs to simplified chinese detection. (#44059) + +------------------------------------------------------------------- +Tue Sep 14 13:57:01 CEST 2004 - adrian@suse.de + +- handle also hongkong chinese local in a correct way (#44059) +- prefer chinese fonts via optional glyphs, but use also + the free ones, if no commercial font is avaible (#44059) + +------------------------------------------------------------------- +Mon Sep 13 20:14:31 CEST 2004 - adrian@suse.de + +- hopefully solve the chinese font detection problems (#44059) + +------------------------------------------------------------------- +Mon Sep 13 11:17:50 CEST 2004 - adrian@suse.de + +- fix build for old distributions +- prepare qt for konsole transparency mode (via composite extension) + +------------------------------------------------------------------- +Fri Sep 10 17:43:56 CEST 2004 - mfabian@suse.de + +- update to qt-x11-immodule-unified-qt3.3.3-20040910.diff which + merges the previous three patches (With help from Adrian to + make it build). + +------------------------------------------------------------------- +Fri Sep 10 16:34:52 CEST 2004 - mfabian@suse.de + +- add qt-x11-immodule-unified-qt3.3.3-r123-event-inversion-20040909.diff + to fix the endless loop problem when using M17N-t-latin1-post + or M17N-vi-viqr. See also + http://freedesktop.org/pipermail/immodule-qt/2004-September/000447.html + and followups. Patch thanks to Yamaken. + +------------------------------------------------------------------- +Wed Sep 8 10:13:26 CEST 2004 - adrian@suse.de + +- add 3.3.3 regression fixes in pre-3.3.4.diff +- add bidi fixes from qt-copy +- add qpixmap mitshm support from Lubos +- update immodule patch to stable release 20040819 +- adding event inversion fix for immodule from Zhe Su + +------------------------------------------------------------------- +Fri Sep 3 15:06:55 CEST 2004 - adrian@suse.de + +- udpate qt immodule patch to snapshot from 20040814 + +------------------------------------------------------------------- +Thu Aug 26 17:09:14 CEST 2004 - adrian@suse.de + +- disable explicit debug flags again + +------------------------------------------------------------------- +Mon Aug 23 13:23:02 CEST 2004 - adrian@suse.de + +- apply workaround for broken focus handling cause by the xim + patch due to a bug in X for released distributions (by Lubos) + +------------------------------------------------------------------- +Wed Aug 18 12:06:15 CEST 2004 - adrian@suse.de + +- enable full debug compile, if -g is in RPM_OPT_FLAGS + +------------------------------------------------------------------- +Tue Aug 17 14:46:19 CEST 2004 - coolo@suse.de + +- install qt3 after grep + +------------------------------------------------------------------- +Tue Aug 17 07:27:13 CEST 2004 - adrian@suse.de + +- apply patch from Waldo to be able to limit the size of loaded + images. Important for khtml (#43841) +- apply fix to handle the side pixmap of the kmenu correctly (0047) +- apply KToolBarButton fix (0051) + +------------------------------------------------------------------- +Fri Aug 13 06:19:32 CEST 2004 - adrian@suse.de + +- fix gif handling (#43356) + +------------------------------------------------------------------- +Thu Aug 12 08:23:16 CEST 2004 - adrian@suse.de + +- update to version 3.3.3 +- remove obsolete patches + +------------------------------------------------------------------- +Tue Aug 3 16:16:53 CEST 2004 - adrian@suse.de + +- add patch to support scim + +------------------------------------------------------------------- +Wed Jun 9 15:21:27 CEST 2004 - adrian@suse.de + +- update asian font mappings for commercial japanese fonts + (by mfabian) + +------------------------------------------------------------------- +Wed Jun 2 16:17:53 CEST 2004 - adrian@suse.de + +- fix libGL loading in the right way, no .so link is needed anymore + again + +------------------------------------------------------------------- +Wed May 26 16:47:34 CEST 2004 - adrian@suse.de + +- load libGL via .so link again (due to the different possible + setups #41118) +- libXmu gets still loaded via hardcoded path and version + +------------------------------------------------------------------- +Tue Apr 27 15:55:48 CEST 2004 - adrian@suse.de + +- update to version 3.3.2 + * remove obsolete patches +- do apply %patch16 + +------------------------------------------------------------------- +Fri Apr 23 09:26:44 CEST 2004 - adrian@suse.de + +- disable atk support for released distributions + +------------------------------------------------------------------- +Thu Apr 22 11:40:17 CEST 2004 - coolo@suse.de + +- another try to fix wrong font caching also for japanese/chinese + +------------------------------------------------------------------- +Tue Apr 20 11:34:13 CEST 2004 - coolo@suse.de + +- apply fix for wrong font caching (#39175) + +------------------------------------------------------------------- +Fri Apr 16 11:42:30 CEST 2004 - adrian@suse.de + +- apply fix for opentype aliasing issues + +------------------------------------------------------------------- +Tue Apr 13 10:50:22 CEST 2004 - adrian@suse.de + +- fix OpenGL support, if no -devel package is installed (#38857) +- fix xcursor support +- add current snapshot of Qt-ATK bridge patch + (disabled as long USE_QACCESSIBLE enviroment variable isn't set) + +------------------------------------------------------------------- +Sat Apr 3 10:07:55 CEST 2004 - adrian@suse.de + +- apply 0043-fix_expired_cookie_crash.diff from qt-copy(by Dirk) + * qt based applications can crash in ssh sessions with new + openssh (#38185) + +------------------------------------------------------------------- +Wed Mar 31 17:47:33 CEST 2004 - mfabian@suse.de + +- Bugzilla #37720: + add font substitutions for "SUSE*" fonts to default qtrc. + +------------------------------------------------------------------- +Thu Mar 25 10:12:37 CET 2004 - coolo@suse.de + +- fix for richtext tags (in knotes) +- fix for fonts with multiple scripts (#36583) +- fix for custom resolutions + +------------------------------------------------------------------- +Tue Mar 16 16:29:42 CET 2004 - adrian@suse.de + +- fix for command line handling (XIM in QApplication)(#35881) +- fix double packaging of qassistant translations + +------------------------------------------------------------------- +Mon Mar 15 17:55:57 CET 2004 - adrian@suse.de + +- define a default Font again. (Sans Serif with 10points) + (#36014) + +------------------------------------------------------------------- +Wed Mar 10 08:44:03 CET 2004 - adrian@suse.de + +- fix for xcursor cache hangling (by Lubos) +- move assistant to -devel-doc package + +------------------------------------------------------------------- +Thu Mar 4 22:10:52 CET 2004 - adrian@suse.de + +- apply fix for not found monospaced fonts without Euro glyph + (Patch by Lars Knoll) + +------------------------------------------------------------------- +Thu Mar 4 13:53:53 CET 2004 - adrian@suse.de + +- apply different bugfix and speed enhancement patches from qt-copy + as recommended by Lubos + * 0001: DnD optimisation + * 0002: Active Window Fix + * 0007: MITSHM extension support for QPixmap<>Qimage conversation + * 0037: dnd timestamp fix + * 0038: dragobject prefer fix + +------------------------------------------------------------------- +Mon Mar 1 11:39:25 CET 2004 - adrian@suse.de + +- update to final 3.3.1 version +- disable fast-malloc for > 9.0, nptl does work good enough +- add qclipboard-recursion-fix from Lubos +- further 64bit aliasing fixes + +------------------------------------------------------------------- +Mon Feb 16 14:43:49 CET 2004 - adrian@suse.de + +- update to current snapshot (3.3.1-snapshot-20040216) +- build opentype with -fno-strict-aliasing + +------------------------------------------------------------------- +Mon Feb 9 17:02:41 CET 2004 - adrian@suse.de + +- fix non-latin1 QString handling + (patch from Roman Stepanov) + +------------------------------------------------------------------- +Wed Feb 4 20:24:37 CET 2004 - adrian@suse.de + +- update to version 3.3.0 final +- disable 3rdparty source and use system libraries + +------------------------------------------------------------------- +Thu Jan 29 14:05:26 CET 2004 - adrian@suse.de + +- update to snapshot 20040129 +- use original qstring again, kprinter got fixed + +------------------------------------------------------------------- +Sun Jan 25 17:53:03 CET 2004 - adrian@suse.de + +- update to snapshot 20040125 +- revert qstring changes + +------------------------------------------------------------------- +Tue Jan 13 14:52:07 CET 2004 - adrian@suse.de + +- update to snapshot 20040113 + +------------------------------------------------------------------- +Mon Dec 29 11:48:49 CET 2003 - adrian@suse.de + +- update to snapshot from 20031229 to get KDE compiling again +- remove upstream included translation files +- cleanup stuff not anymore needed +- do not build sqlite plugin with (broken) sqlite sources from qt + tar ball anymore + +------------------------------------------------------------------- +Thu Dec 11 13:10:37 CET 2003 - adrian@suse.de + +- update to version 3.3 beta 1 + * solves the remaining issues with dlopen GL + +------------------------------------------------------------------- +Tue Dec 9 17:20:56 CET 2003 - adrian@suse.de + +- add KDE plugin path for qt 3.3 + +------------------------------------------------------------------- +Thu Dec 4 11:25:27 CET 2003 - adrian@suse.de + +- update to snapshot 20031204 +- do not link against GL libs anymore, but still support GL via dlopen + apps and libs beside libbqt* are still linked against GL for now +- build fix for qt3-extensions + +------------------------------------------------------------------- +Tue Dec 2 17:54:34 CET 2003 - adrian@suse.de + +- update to current 3.3 snapshot ( 20031202 - pre beta 1) + * obsoletes several patches + * IPv6 support +- temporary disabled PostgreSQL support +- add SQLite support + +------------------------------------------------------------------- +Fri Nov 21 11:05:33 CET 2003 - adrian@suse.de + +- drop not applyed font_fixes patch and add the old Xft2 fixes + again, to support displays without Render extension. + +------------------------------------------------------------------- +Fri Nov 14 14:30:11 CET 2003 - adrian@suse.de + +- update to version 3.2.3 and usual patch cleanup + +------------------------------------------------------------------- +Thu Oct 23 09:52:28 CEST 2003 - adrian@suse.de + +- build without -mminimal-toc on ppc64 +- apply crash fix from TT for some fonts in XLFD mode + +------------------------------------------------------------------- +Thu Oct 16 16:00:46 CEST 2003 - adrian@suse.de + +- update to version 3.2.2 + * font fixes patch is not applied intentionaly, for testing + plain qt behaviour for now. + +------------------------------------------------------------------- +Thu Oct 2 12:06:08 CEST 2003 - adrian@suse.de + +- require freeglut-devel, instead of mesaglut-devel for > 9.0 + +------------------------------------------------------------------- +Tue Sep 30 09:25:31 CEST 2003 - coolo@suse.de + +- using the right tool to compile translation files + +------------------------------------------------------------------- +Thu Sep 25 13:05:03 CEST 2003 - adrian@suse.de + +- update fontconfig patch again, fixes multiple listing of fonts +- do not complain anymore about not matching plugin + +------------------------------------------------------------------- +Sun Sep 21 15:02:56 CEST 2003 - adrian@suse.de + +- prefer Nimbus fonts, instead of using asian fonts, if possible + (the asian fonts have some broken latin chars) + +------------------------------------------------------------------- +Sun Sep 21 12:35:19 CEST 2003 - adrian@suse.de + +- install html docu to the same place as on 8.2, to solve + update problems (#31507). (install dir and symlink was + swapped for unknown reason) + +------------------------------------------------------------------- +Fri Sep 19 15:48:11 CEST 2003 - adrian@suse.de + +- memory leak fix from Lars in QTextEngine + +------------------------------------------------------------------- +Thu Sep 18 16:35:05 CEST 2003 - adrian@suse.de + +- updated patches from Lars + * fixing Unicode families and foundaries issues + * printing issues +- clean up unused patches + +------------------------------------------------------------------- +Wed Sep 17 18:31:56 CEST 2003 - adrian@suse.de + +- a bit more silence .. QPixmap before QApplication warning is away +- new asian font mappings from mfabian + +------------------------------------------------------------------- +Mon Sep 15 18:02:31 CEST 2003 - adrian@suse.de + +- new font fixes from Lars, the default size problem should be away +- fix build for non-Xft2 distibutions + +------------------------------------------------------------------- +Thu Sep 11 22:18:01 CEST 2003 - adrian@suse.de + +- silence on lib64 systems with 32bit plugins installed (#30559) +- ensure to have a [3.2] section in old qtrc files + +------------------------------------------------------------------- +Mon Sep 8 16:26:49 CEST 2003 - coolo@suse.de + +- apply fix from TT to fix konsole + setRawName + +------------------------------------------------------------------- +Thu Sep 4 12:53:19 CEST 2003 - adrian@suse.de + +- add always lib and lib64 kde plugin path to qtrc + +------------------------------------------------------------------- +Wed Sep 3 16:55:00 CEST 2003 - adrian@suse.de + +- apply fix from TT: "don't generate bogus mouse move events." +- qt3-devel requires XFree86-Mesa-devel + +------------------------------------------------------------------- +Tue Sep 2 17:20:05 CEST 2003 - adrian@suse.de + +- add slovak translation from Stanislav Visnovsky +- add czech translation from Klara Cihlarova + +------------------------------------------------------------------- +Tue Sep 2 16:20:15 CEST 2003 - adrian@suse.de + +- add asian mappings from 8.2 to qtrc again + +------------------------------------------------------------------- +Mon Sep 1 18:13:33 CEST 2003 - meissner@suse.de + +- Don't do readlink checks for set*id programs (will break + in TLS startup sequence of glibc), just fall back to old + malloc. #29530 + +------------------------------------------------------------------- +Mon Sep 1 12:02:00 CEST 2003 - adrian@suse.de + +- apply qlineedit fix from TT + +------------------------------------------------------------------- +Mon Sep 1 11:30:31 CEST 2003 - adrian@suse.de + +- qtconfig menu entry becomes unimportant + +------------------------------------------------------------------- +Sun Aug 31 22:33:44 CEST 2003 - adrian@suse.de + +- generate .la file again + +------------------------------------------------------------------- +Fri Aug 29 15:16:43 CEST 2003 - adrian@suse.de + +- use newer font_fixes patch from Lars +- enforce usage of Xft2 even on non-Xrender displays +- revert qclipboard changes to 3.1.2 code + +------------------------------------------------------------------- +Wed Aug 27 13:38:51 CEST 2003 - adrian@suse.de + +- use official 3.2.1 tar ball instead of 3.2.0+patch + +------------------------------------------------------------------- +Tue Aug 26 08:20:07 CEST 2003 - adrian@suse.de + +- new _big_ fix from Lars for fixing the remaining font issues + +------------------------------------------------------------------- +Sun Aug 24 16:55:24 CEST 2003 - adrian@suse.de + +- apply fix from Lars for the foundary font problem, when + using pixmap fonts via Xft2. This makes the freetype2 + foundary-family patch obsolete from qt view. + +------------------------------------------------------------------- +Sat Aug 23 13:44:22 CEST 2003 - adrian@suse.de + +- apply 3.2.1 patch, until the official tar ball arrives + +------------------------------------------------------------------- +Sat Aug 16 13:58:14 CEST 2003 - adrian@suse.de + +- justify Category of qtconfig + +------------------------------------------------------------------- +Fri Aug 1 18:00:24 CEST 2003 - adrian@suse.de + +- add desktop file for qtconfig + +------------------------------------------------------------------- +Wed Jul 23 16:20:03 CEST 2003 - adrian@suse.de + +- update to version 3.2.0 final + +------------------------------------------------------------------- +Thu Jul 17 12:55:23 CEST 2003 - adrian@suse.de + +- fix .la files after build + +------------------------------------------------------------------- +Tue Jul 15 08:49:39 CEST 2003 - adrian@suse.de + +- update to 3.2.0 beta 2 +- remove obsolete patches + +------------------------------------------------------------------- +Sun Jun 15 12:19:14 CEST 2003 - coolo@suse.de + +- never strip explicitly +- always build with -release to avoid debug output even with -g + +------------------------------------------------------------------- +Thu Jun 12 09:07:58 CEST 2003 - coolo@suse.de + +- move the html docu into docdir and put the link in lib +- package directories +- fix directory permissions + +------------------------------------------------------------------- +Fri May 30 15:04:29 CEST 2003 - adrian@suse.de + +- fix file conflicts + +------------------------------------------------------------------- +Mon May 19 11:28:36 CEST 2003 - adrian@suse.de + +- revert source incompatibility to 3.1.x in qhbox constructor + +------------------------------------------------------------------- +Sun May 18 14:03:31 CEST 2003 - adrian@suse.de + +- update to version 3.2 beta 1 +- big patch clean up +- use largefile support api for > 8.2 + +------------------------------------------------------------------- +Thu Apr 10 17:01:32 CEST 2003 - coolo@suse.de + +- fixing long font names as returned by font-config + +------------------------------------------------------------------- +Wed Mar 26 13:19:48 CET 2003 - adrian@suse.de + +- workaround rpm bug on 7.3-ppc + +------------------------------------------------------------------- +Mon Mar 24 10:04:18 CET 2003 - adrian@suse.de + +- fix build on SuSE < 8.1 + +------------------------------------------------------------------- +Fri Mar 21 14:59:11 CET 2003 - adrian@suse.de + +- update to version 3.1.2 and remove obsolete patches + +------------------------------------------------------------------- +Tue Mar 11 20:33:03 CET 2003 - coolo@suse.de + +- fixing the fix + +------------------------------------------------------------------- +Tue Mar 11 13:35:31 CET 2003 - coolo@suse.de + +- applied patch by TT to fix kmail folder selection + (#24519 - also known as kde bug #48888) + +------------------------------------------------------------------- +Fri Mar 7 21:16:17 CET 2003 - adrian@suse.de + +- do not use XListFonts, if X server supports Xft on >8.1 (Xft2) + +------------------------------------------------------------------- +Fri Feb 28 00:25:14 CET 2003 - adrian@suse.de + +- fast malloc is back + (still 20% with glibc 2.3 without spinlock'ed-malloc) +- extend blacklist +- use fast malloc also on hammer + +------------------------------------------------------------------- +Wed Feb 26 11:43:08 CET 2003 - adrian@suse.de + +- add [3.1] plugin path +- add fix for mouse cursor bug over ssh + +------------------------------------------------------------------- +Mon Feb 24 11:56:07 CET 2003 - adrian@suse.de + +- use correct kde plugin path on lib64 systems + +------------------------------------------------------------------- +Mon Feb 3 11:39:24 CET 2003 - adrian@suse.de + +- fix missing symbols in libqt* + +------------------------------------------------------------------- +Thu Jan 30 16:19:31 CET 2003 - adrian@suse.de + +- fix %pre script + +------------------------------------------------------------------- +Sun Jan 26 14:05:56 CET 2003 - adrian@suse.de + +- prefix=/usr/lib/qt3 + (third party apps installing translations into $QTDIR now) +- modify qdesktopwidget resize patch to be BC with Qt 3.2 +- comment out non-official api extensions +- remove private headers tar ball again + (qsa beta2 contains them) +- fix qtrc enviroment patch +- hardcode qt settings dir to /etc/X11 (no need for $QTDIR/etc/settings anymore) +- enable all designer plugins + +------------------------------------------------------------------- +Thu Jan 23 18:36:05 CET 2003 - adrian@suse.de + +- add xrandr extension from Qt 3.2 +- add resize event to qdesktopwidget (patch from Lubos) +- compile codecs as plugins + +------------------------------------------------------------------- +Tue Jan 21 12:52:33 CET 2003 - adrian@suse.de + +- use fast malloc only on %ix86 + +------------------------------------------------------------------- +Thu Jan 16 15:58:23 CET 2003 - adrian@suse.de + +- include qt default translations + +------------------------------------------------------------------- +Fri Jan 10 15:12:46 CET 2003 - adrian@suse.de + +- hppa is parisc + +------------------------------------------------------------------- +Thu Jan 9 14:44:06 CET 2003 - adrian@suse.de + +- fix some more qmake.conf entries + (esp. pathes to lib64 directories and flags based on $RPM_OPT_FLAGS) + +------------------------------------------------------------------- +Tue Jan 7 16:42:59 CET 2003 - adrian@suse.de + +- use -ffunction-sections on hppa + +------------------------------------------------------------------- +Thu Jan 2 13:07:01 CET 2003 - adrian@suse.de + +- fix build ( patch -p1 -> -p0 ) + +------------------------------------------------------------------- +Fri Dec 27 17:50:17 CET 2002 - adrian@suse.de + +- several small changes/fixes/workarounds to be able to compile qsa + (they will be changed in 3.1.2) + +------------------------------------------------------------------- +Tue Dec 17 12:40:16 CET 2002 - adrian@suse.de + +- update to version 3.1.1 and cleanup patches +- apply Xft speed-up patch from dfaure + +------------------------------------------------------------------- +Wed Dec 4 15:10:17 CET 2002 - adrian@suse.de + +- drop fast-malloc, not needed since glibc 2.3 + +------------------------------------------------------------------- +Thu Nov 28 18:33:28 CET 2002 - adrian@suse.de + +- add qprinter fix from Lars + +------------------------------------------------------------------- +Wed Nov 27 00:44:44 CET 2002 - ro@suse.de + +- added expat to neededforbuild + +------------------------------------------------------------------- +Sat Nov 23 14:12:16 CET 2002 - adrian@suse.de + +- use Xft2 from XFree package now for > SuSE 8.1 + (experimental fontconfig package is dropped) +- build qt3-non-mt with extra spec file now +- fix korean [Font Substitutions] (#19575) +- fix broken qmake debug defaults (#21891) +- fix requires of database plugin packages + +------------------------------------------------------------------- +Fri Nov 15 10:33:53 CET 2002 - adrian@suse.de + +- update to 3.1.0 final version +- apply qwidget/hideChildren patch from Harri +- move libqui into qt3 main package + +------------------------------------------------------------------- +Tue Nov 5 20:00:37 CET 2002 - adrian@suse.de + +- package also missing mkspecs/* + +------------------------------------------------------------------- +Sun Nov 3 12:54:52 CET 2002 - adrian@suse.de + +- update to post 3.1 beta 2 snapshot (rc1 or rc2 ?) +- big rework of spec file, lots of workarounds are not needed anymore :) +- use experimental fontconfig/Xft2 package for > 8.1 +- enable nis & cups support + +------------------------------------------------------------------- +Mon Oct 21 18:25:53 CEST 2002 - adrian@suse.de + +- swab %ifarch <> %if for old broken rpm's + +------------------------------------------------------------------- +Mon Oct 21 13:44:15 CEST 2002 - adrian@suse.de + +- remove rpath again, which came back with 3.0.5 update (#20929) +- disable qDebug lines in chinese patch (#20959) + +------------------------------------------------------------------- +Wed Oct 9 11:47:44 CEST 2002 - adrian@suse.de + +- implement a blacklist of executables which should not use + the fast malloc implementation. (python and perl atm) +- disable fast-malloc for >8.1 +- enable fast-malloc for x86_64 + +------------------------------------------------------------------- +Fri Sep 20 11:24:51 CEST 2002 - adrian@suse.de + +- qclipboard fix from Lubos. Copy from old X applications works again + +------------------------------------------------------------------- +Mon Sep 16 12:07:53 CEST 2002 - adrian@suse.de + +- replace qt3-gb18030.diff patch with the new patch from + James Su for chinese handling (#19399) +- set XIMInputStyle for japanese input (#19387) +- change Requires: from /usr/include/png.h to libpng-devel, since + connectivas apt can not handle this. + +------------------------------------------------------------------- +Fri Aug 30 14:13:34 CEST 2002 - adrian@suse.de + +- remove the dlopen patch again. It is not needed anymore and may + cause crashes in rare cases. + +------------------------------------------------------------------- +Wed Aug 28 15:26:02 CEST 2002 - adrian@suse.de + +- apply fix from Lubos for DND in kcontrol +- apply fix to fix gb18030 encoding (from Turbolinux China) + +------------------------------------------------------------------- +Mon Aug 26 16:25:40 CEST 2002 - adrian@suse.de + +- do not use -plugindir configure option anymore. it caused the + broken plugin support and remov $QTDIR/plugins again from qtrc + qtrc is also a (noreplace) config file again +- s,getenv,__secure_getenv, as suggested by okir in plugin_path.dif + +------------------------------------------------------------------- +Thu Aug 22 18:33:55 CEST 2002 - adrian@suse.de + +- add patch to set the qt settings dir to a non-default dir +- add patches from qt 3.0.6 to fix asian copy&paste problems +- set explicit plugin pathes in qtrc and replace them during update + (this is only a workaround until I know why qt does not use the + compiled path) + +------------------------------------------------------------------- +Thu Aug 22 14:53:57 CEST 2002 - adrian@suse.de + +- remove dangeling symlink in /usr/lib/qt3/mkspecs/linux-g++ +- add plugin path to global qtrc + +------------------------------------------------------------------- +Tue Aug 20 13:24:25 CEST 2002 - adrian@suse.de + +- fix #defines + +------------------------------------------------------------------- +Tue Aug 20 00:24:37 CEST 2002 - adrian@suse.de + +- redo the plugin path patch again, we use now a implicit + subdirectory like "lib64", if needed. +- qtconfig is patched to hide/not write back those entries + +------------------------------------------------------------------- +Fri Aug 16 14:00:33 CEST 2002 - coolo@suse.de + +- fixing the patches + +------------------------------------------------------------------- +Fri Aug 16 13:18:21 CEST 2002 - coolo@suse.de + +- applying the plugin path patches, so they actually do something + on lib64 platforms + +------------------------------------------------------------------- +Fri Aug 9 17:35:58 CEST 2002 - adrian@suse.de + +- fix plugin installation + +------------------------------------------------------------------- +Thu Aug 8 10:00:46 CEST 2002 - adrian@suse.de + +- use %suse_version macro instead of /etc/SuSE-release + +------------------------------------------------------------------- +Fri Aug 2 14:41:33 CEST 2002 - coolo@suse.de + +- shut up if passed -noxim is passed and xim doesn't work + +------------------------------------------------------------------- +Tue Jul 30 14:43:32 CEST 2002 - adrian@suse.de + +- disable pre-3.0.6 patches again, until focus problem is located +- add zlib-devel to Requires for qt3-devel and SuSE 8.1 +- add %run_ldconfig + +------------------------------------------------------------------- +Mon Jul 29 17:31:37 CEST 2002 - adrian@suse.de + +- apply shut-up.dif +- clean up neededforbuild + +------------------------------------------------------------------- +Fri Jul 26 16:33:25 CEST 2002 - adrian@suse.de + +- port Lea's fast malloc implementation to libqt-mt +- designer sig11 fixes are not needed anymore +- use some patches from qt-rsync + +------------------------------------------------------------------- +Fri Jul 19 13:07:05 CEST 2002 - adrian@suse.de + +- fix designer sig11 really +- kick warnings about unsuccesfull locks for non-root users + +------------------------------------------------------------------- +Thu Jul 18 18:00:13 CEST 2002 - adrian@suse.de + +- don't strip when in debug mode +- fix typo in build script + +------------------------------------------------------------------- +Wed Jul 17 09:59:28 CEST 2002 - adrian@suse.de + +- update to 3.0.5 final + * lots of bugfixes, see changes-3.0.5 for details + * new, binary incompatible plugin system +- fix sig11 in designer +- clean spec file, drop all not applied patches + +------------------------------------------------------------------- +Thu Jul 11 10:42:14 CEST 2002 - coolo@suse.de + +- reenable work around for transparenent images while printing + (PR16188) + +------------------------------------------------------------------- +Wed Jul 10 17:51:47 CEST 2002 - adrian@suse.de + +- update to near 3.0.5-final snapshot 3.0.5-snapshot-20020710 + +------------------------------------------------------------------- +Fri Jul 5 14:16:16 CEST 2002 - adrian@suse.de + +- fix -g detection during build + +------------------------------------------------------------------- +Fri Jun 21 00:21:28 CEST 2002 - adrian@suse.de + +- fix use of $RPM_OPT_FLAGS (broken since 3.0.4 update) +- use -mminimal-toc on ppc64 to workaround compiler bug atm +- update to pre-3.0.5 snapshot-20020620 + * use buildkey for plugins instead of our own plugin hack + * lots of fixes (exact description in changes-3.0.5) +- add lib64 to build key, if needed +- remove obsolete patches + +------------------------------------------------------------------- +Thu Jun 6 13:41:19 CEST 2002 - adrian@suse.de + +- rework plugin path patch for distributions > 8.0 + change name of "plugins" directory instead of filenames + * plugins -- lib32 and multithreaded plugins + * plugins-non-mt -- lib32 and without multithread support + * plugins-lib64 -- lib64 and multithreaded plugins + * plugins-lib64-non-mt -- lib64 and without multithread support + +------------------------------------------------------------------- +Thu May 30 20:03:50 CEST 2002 - adrian@suse.de + +- disable style-plugins again (too much qt apps have problems) +- disable Xft/Xrender support also for SuSE 7.3 (XFree 4.1.0) + (no one reads READMES and too many people had crashes) + +------------------------------------------------------------------- +Tue May 28 10:58:01 CEST 2002 - adrian@suse.de + +- fix %files + +------------------------------------------------------------------- +Mon May 27 13:37:15 CEST 2002 - adrian@suse.de + +- move qconfig, qmake to qt3-devel-tools +- build styles as plugin (except our default style: Platinum) + +------------------------------------------------------------------- +Mon May 27 00:10:23 CEST 2002 - ro@suse.de + +- lib64: fix qtmake.conf: QTLIBDIR also has the trailing "64" +- fix build-script for lib64 issues + +------------------------------------------------------------------- +Mon May 20 23:26:35 CEST 2002 - adrian@suse.de + +- fix build (disable odbc during qt3.spec build) + +------------------------------------------------------------------- +Mon May 20 10:13:55 CEST 2002 - adrian@suse.de + +- enable -tablet support if XFree86 provides it +- compile with -debug mode, if -g is set in enviroment +- fix postgres plugin build +- enable unixODBC support for newer distributions +- split sql drivers to extra packages +- fix dlopen call + +------------------------------------------------------------------- +Tue May 14 12:39:51 CEST 2002 - adrian@suse.de + +- fix lib64 patch to find OpenGL libs + +------------------------------------------------------------------- +Thu May 9 21:54:41 CEST 2002 - adrian@suse.de + +- apply fix for NetAccess focus, insertTitle(), QTextEdit and + QToolbar from qt-copy + +------------------------------------------------------------------- +Wed May 8 09:39:48 CEST 2002 - coolo@suse.de + +- fixing patch section (grr) + +------------------------------------------------------------------- +Tue May 7 17:13:41 CEST 2002 - coolo@suse.de + +- adding fix for x86_64 + +------------------------------------------------------------------- +Tue May 7 14:32:39 MEST 2002 - coolo@suse.de + +- update to qt 3.0.4 - remove fixes that do + not apply any longer +- disable asian patches as they do not apply + and I don't want to split them as I have no + idea if the problems they try to fix are still + there + +------------------------------------------------------------------- +Wed Apr 24 16:09:09 CEST 2002 - coolo@suse.de + +- fix lib64 support +- fix asian patch not to use arrays in unused arrays + (triggers compiler problem) + +------------------------------------------------------------------- +Sun Apr 21 12:58:33 CEST 2002 - adrian@suse.de + +- improve image rendering speed (patch by Lubos) + +------------------------------------------------------------------- +Tue Apr 9 16:21:07 CEST 2002 - adrian@suse.de + +- apply patch from Lubos to fix alpha channel in QMovie + +------------------------------------------------------------------- +Fri Apr 5 15:29:03 CEST 2002 - adrian@suse.de + +- fixed print support in qpsprint +- binary compatibility fixes by Lars for gbk encoding + +------------------------------------------------------------------- +Wed Apr 3 21:33:26 CEST 2002 - adrian@suse.de + +- apply fixes/extensions for asian/utf-8-based languages + (assembled by Lars and Brad, thank you, verifed by mfabian) +- 64bit fixes from Andreas Schwab (const char*) null pointer casts + +------------------------------------------------------------------- +Sun Mar 24 13:23:18 CET 2002 - adrian@suse.de + +- apply qtabbar fix. Fixes crashes with kcm modules. + +------------------------------------------------------------------- +Fri Mar 22 10:33:58 CET 2002 - adrian@suse.de + +- apply fix for sig11 in QCommonStyle (made by Waldo/Trolltech) +- apply fix to use libpng instead of libmng to load pngs (by coolo) +- add missing Requires for qt3-devel + +------------------------------------------------------------------- +Wed Mar 20 22:47:59 CET 2002 - adrian@suse.de + +- verify 3.0.3 final version +- add check for null pointer returned by libXft + (fix sig11 when no Xft fonts are configured) +- fix scrollbar behaviour for QT Platinum style + (we are X Windows compatible instead of MS Windows) + +------------------------------------------------------------------- +Tue Mar 19 10:36:42 CET 2002 - adrian@suse.de + +- update to version 3.0.3 + (rc6 tar ball from troll, I have to check after the qt-3.0.3 release, + if this is really qt-3.0.3 final) + +------------------------------------------------------------------- +Tue Mar 12 20:01:34 CET 2002 - adrian@suse.de + +- update to pre 3.0.3 snapshot (3.0.2.20020312) + +------------------------------------------------------------------- +Mon Mar 4 09:44:37 CET 2002 - adrian@suse.de + +- more fixes + * fix auto-resizing with QMovie + * fix to correctly open submenues in right to left layout + * reduce number of mallocs by sharing QColorGroup + * Simplified static cleanup handlers. + * smarter tooltip placement +- require "c++_compiler" for distributions newer than 7.3 only + +------------------------------------------------------------------- +Sun Mar 3 02:31:31 CET 2002 - adrian@suse.de + +- apply some fixes from qt-copy + * 8 bit color depth image format fixes + * spinbox flicker fix + * qrichtext dangeling pointers fix + * qmenubar right to left layout mode cursor navigation fix + * qcombobox avoid emitting highlighted twice on keyPressEvent + +------------------------------------------------------------------- +Mon Feb 25 17:34:15 CET 2002 - adrian@suse.de + +- update to version 3.0.2 +- remove compile fixes +- fix symlink for qtconfig + +------------------------------------------------------------------- +Thu Feb 14 01:05:14 CET 2002 - adrian@suse.de + +- fix Requires for qt3-devel (add g++ compiler) + +------------------------------------------------------------------- +Tue Feb 12 01:01:31 CET 2002 - adrian@suse.de + +- fix build for lib64/s390x + +------------------------------------------------------------------- +Wed Feb 6 21:08:43 CET 2002 - adrian@suse.de + +- add links in /usr/bin for qtconfig + +------------------------------------------------------------------- +Sun Feb 3 14:57:30 CET 2002 - adrian@suse.de + +- fix dumb-packager-bug (s,%fi,%endif,) + +------------------------------------------------------------------- +Sun Feb 3 12:23:35 CET 2002 - adrian@suse.de + +- compile fix for postrgres module +- extend plugin patch to work on s390x and sparc64 to work with + lib64 plugins +- add %{_libdir}/qt3 symlink for s390x and sparc64 + +------------------------------------------------------------------- +Sat Feb 2 13:00:38 CET 2002 - ro@suse.de + +- cleaned changes file + +------------------------------------------------------------------- +Fri Feb 1 15:29:58 CET 2002 - adrian@suse.de + +- update to current qt-copy snapshot (needed for KDE 3.0 beta 2) +- make threaded plugins as usual again +- non-threaded plugins needs now the not compatible -non-mt.so + suffix + +------------------------------------------------------------------- +Fri Feb 1 00:26:05 CET 2002 - ro@suse.de + +- changed neededforbuild to + +------------------------------------------------------------------- +Tue Jan 29 16:29:15 CET 2002 - adrian@suse.de + +- enable AA for SuSE > 7.3 + +------------------------------------------------------------------- +Tue Jan 29 10:58:57 CET 2002 - schwab@suse.de + +- Fix use of varargs on 64 bit platforms. + +------------------------------------------------------------------- +Wed Jan 23 22:56:28 CET 2002 - adrian@suse.de + +- patch plugin loader to load only plugins with -mt.so + extension +- link direct against libpng +- move qt3.conf file to susehelp +- TODO: make plugin loader path depending on %_libdir + +------------------------------------------------------------------- +Tue Jan 22 21:47:19 CET 2002 - adrian@suse.de + +- enable Xrender/Xft again for SuSE 7.3 + (I was misleaded by a broken libXft :/ ) +- using qt plugin mechanism for picture format support +- enable XRender by default, but leave Xft disabled by default + (kcontrol can switch Xft on for KDE applications now) +- add additional include path for postgres 7.2b5 + +------------------------------------------------------------------- +Mon Jan 21 16:58:53 CET 2002 - adrian@suse.de + +- disable Xft for all distributions until 7.3 + (XFree 4.2 is needed) +- sync QClipboard fix from qt-copy + +------------------------------------------------------------------- +Tue Jan 8 16:11:14 CET 2002 - adrian@suse.de + +- fix Requires +- disable rpath + +------------------------------------------------------------------- +Sun Jan 6 00:31:11 CET 2002 - adrian@suse.de + +- split non multithreaded librarys into qt3-non-mt package +- split developer tutorial into qt3-tutorial package +- use common config script to prepare build +- move libs to /usr/lib/qt3/%{_libdir} +- remove .prl files from file list again + +------------------------------------------------------------------- +Thu Jan 3 16:48:59 CET 2002 - adrian@suse.de + +- rename qt3-designer subpackage to qt3-devel-tools +- add default qtrc file + * disable Xft support by default + * use Platinum style + * set qt plugin path +- move qtconfig to qt base package +- apply fixes from qt-copy/KDE-cvs + +------------------------------------------------------------------- +Thu Dec 13 10:42:07 CET 2001 - adrian@suse.de + +- use $RPM_OPT_FLAGS during compile +- add missing .prl files to file list + +------------------------------------------------------------------- +Wed Dec 12 16:39:16 CET 2001 - adrian@suse.de + +- update to version 3.0.1 +- build all extra tools +- fix default mkspec symlink +- include examples to devel-doc package + +------------------------------------------------------------------- +Thu Nov 8 18:39:52 CET 2001 - ro@suse.de + +- use mesa-devel-packages in neededforbuild + +------------------------------------------------------------------- +Tue Oct 16 11:13:50 CEST 2001 - adrian@suse.de + +- fix hardcoded install dir in libqt + (no $QTDIR is needed at runtime anymore) + +------------------------------------------------------------------- +Mon Oct 15 18:16:49 CEST 2001 - adrian@suse.de + +- update to QT 3.0.0 final + (the KDE 3 battle begins :) + +------------------------------------------------------------------- +Fri Oct 5 10:50:24 CEST 2001 - adrian@suse.de + +- add missing header files +- cleanup workarounds in spec file and add some new (but less ;) + +------------------------------------------------------------------- +Mon Oct 1 16:35:56 CEST 2001 - adrian@suse.de + +- update to beta6 + +------------------------------------------------------------------- +Tue Sep 18 08:54:02 CEST 2001 - adrian@suse.de + +- update to beta5 + +------------------------------------------------------------------- +Wed Sep 5 12:17:19 CEST 2001 - adrian@suse.de + +- okay, my last try ... cp -f has different return values on the + distributions :( + +------------------------------------------------------------------- +Tue Sep 4 10:18:20 CEST 2001 - adrian@suse.de + +- disable postgres support for old distributions + (now it also builds with SuSE 6.4) + +------------------------------------------------------------------- +Mon Sep 3 15:42:48 CEST 2001 - adrian@suse.de + +- fix broken links in include path + +------------------------------------------------------------------- +Sun Sep 2 19:47:01 CEST 2001 - adrian@suse.de + +- workaround bugs in Makefile to install all needed files +- remove -j4 behind make + +------------------------------------------------------------------- +Tue Jun 19 15:26:54 CEST 2001 - adrian@suse.de + +- split documentation from qt3-devel to qt3-doc + +------------------------------------------------------------------- +Fri May 25 11:57:34 CEST 2001 - adrian@suse.de + +- first try with QT 3.0.0 beta 1 + ( this package is far away from being perfect ) + +------------------------------------------------------------------- +Sun May 6 10:52:33 CEST 2001 - adrian@suse.de + +- apply XftGlyph fix for qfont_x11.cpp from Keith Packard +- fix build for distributions before 7.1 + +------------------------------------------------------------------- +Fri May 4 11:39:55 CEST 2001 - adrian@suse.de + +- add fix for buffer overflow on qfont_x11 and some minor glitches + in qt-png +- qt-experimental is dropped, since we can enable AA in qt now. + +------------------------------------------------------------------- +Fri Apr 27 15:29:17 CEST 2001 - adrian@suse.de + +- switch BuildIndex for SuSEhelp to false by default + +------------------------------------------------------------------- +Mon Apr 23 22:22:19 CEST 2001 - adrian@suse.de + +- using -DNO_DEBUG +- apply latin9 patch from mls@suse.de + +------------------------------------------------------------------- +Wed Apr 4 22:48:01 CEST 2001 - mfabian@suse.de + +- add /etc/qt.fontguess (config file for Japanese and Korean + fonts) + +------------------------------------------------------------------- +Wed Mar 21 17:43:49 CET 2001 - adrian@suse.de + +- disable AA by default (still to many problems) + +------------------------------------------------------------------- +Sun Mar 18 09:46:50 CET 2001 - adrian@suse.de + +- reenable qt-experimental for SuSE distribution < 7.2 + disable opengl module for these distris in this package + +------------------------------------------------------------------- +Sat Mar 17 14:43:11 CET 2001 - adrian@suse.de + +- update to QT 2.3.0 + this makes qt-experimental obsolete + (maybe still some problems with the nvidia driver, but the nv + should work fine and the users are warned about nvidia since + SuSE 7.1) + +------------------------------------------------------------------- +Sun Mar 11 20:20:41 CET 2001 - mfabian@suse.de + +- fix spec-file to make it build with "rpm -ba" + +------------------------------------------------------------------- +Fri Feb 9 19:55:09 CET 2001 - adrian@suse.de + +- use $RPM_OPT_FLAGS + drop signed char patch + +------------------------------------------------------------------- +Sat Feb 3 14:12:01 CET 2001 - adrian@suse.de + +- update to QT 2.2.4 + qt-static is an own package and no sub packages anymore + fix/patch for qprintdialog is no longer needed + add fix from Andreas Schwab for 64bit platforms + +------------------------------------------------------------------- +Fri Jan 19 11:33:07 CET 2001 - adrian@suse.de + +- swap link and directory of html documentation. This makes + trouble during update from older distributions + +------------------------------------------------------------------- +Sat Jan 13 21:18:58 CET 2001 - adrian@suse.de + +- remove not necessary susehelp/htdig conf file + remove file conflicts between qt-devel and qt-experimental + +------------------------------------------------------------------- +Thu Jan 4 21:37:49 CET 2001 - adrian@suse.de + +- added qt-experimental,qt-japanese,qt-korean to Obsoletes: + +------------------------------------------------------------------- +Wed Jan 3 02:24:50 CET 2001 - adrian@suse.de + +- fix qprintdialog + fix qrichtext (Thanks Stefan) + +------------------------------------------------------------------- +Wed Jan 3 02:24:15 CET 2001 - adrian@suse.de + +- fix qprintdialog + +------------------------------------------------------------------- +Mon Jan 1 17:18:43 CET 2001 - adrian@suse.de + +- spec file fix + +------------------------------------------------------------------- +Sun Dec 31 13:18:17 CET 2000 - adrian@suse.de + +- added small tools to qt-devel (thanks Dirk) + +------------------------------------------------------------------- +Fri Dec 22 20:46:34 CET 2000 - adrian@suse.de + +- remove asian patches from qt-experimental + +------------------------------------------------------------------- +Wed Dec 20 18:51:44 CET 2000 - adrian@suse.de + +- fixe type in package name + +------------------------------------------------------------------- +Wed Dec 20 18:44:44 CET 2000 - adrian@suse.de + +- move docu from qtlib2 to qt + +------------------------------------------------------------------- +Sat Dec 16 17:02:47 CET 2000 - adrian@suse.de + +- initial package. support for font anti aliasing has been added + Also OpenGL module is active + +------------------------------------------------------------------- +Thu Dec 14 11:51:41 CET 2000 - adrian@suse.de + +- update to 2.2.3 and remove all the unneeded fix patches. + added SuSE help conf files to qt-devel + +------------------------------------------------------------------- +Tue Dec 12 15:32:01 CET 2000 - schwab@suse.de + +- Build with -O0 on ia64. + +------------------------------------------------------------------- +Fri Dec 1 00:29:50 CET 2000 - adrian@suse.de + +- added rpath for uic/kdelibs and fixed uic fix .. + to drunk to drink more + +------------------------------------------------------------------- +Thu Nov 30 11:31:36 CET 2000 - adrian@suse.de + +- fixed dif + +------------------------------------------------------------------- +Thu Nov 30 00:33:26 CET 2000 - adrian@suse.de + +- added fix for uic and qiconview + +------------------------------------------------------------------- +Wed Nov 29 11:33:51 CET 2000 - adrian@suse.de + +- fixed build on ppc + +------------------------------------------------------------------- +Tue Nov 21 09:31:40 CET 2000 - ro@suse.de + +- spec fix + +------------------------------------------------------------------- +Fri Nov 17 14:57:54 CET 2000 - ro@suse.de + +- fixed neededforbuild: += libmng-devel + +------------------------------------------------------------------- +Mon Nov 13 21:40:29 CET 2000 - adrian@suse.de + +- new version 2.2.2 + added qpngio fix from waldo + +------------------------------------------------------------------- +Fri Nov 10 00:57:39 CET 2000 - adrian@suse.de + +- fixed static config for <6.4 distris (no libmng) + +------------------------------------------------------------------- +Tue Oct 31 13:45:29 CET 2000 - adrian@suse.de + +- split the qt package in + qt + qt-devel + qt-extensions + qt-man + qt-static + + Added an ugly patch to get an uic with KDE support. The designer + is broken in this package after this patch, so it is not packaged. + The designer can be found in the qt-designer package + +------------------------------------------------------------------- +Tue Oct 17 09:59:23 MEST 2000 - adrian@suse.de + +- switch to -O0 for ppc + +------------------------------------------------------------------- +Sat Oct 14 09:51:19 CEST 2000 - adrian@suse.de + +- drop OpenGL support. Problems with Nvidia's binary only driver + +- added fix from waldo (fixing memory leak in qpngio) + +------------------------------------------------------------------- +Mon Oct 9 16:00:44 CEST 2000 - adrian@suse.de + +- update the tar archiv (which contains a corrected classes.html file) + +------------------------------------------------------------------- +Fri Oct 6 12:46:48 CEST 2000 - adrian@suse.de + +- update to 2.2.1 + added static libs for libqt and libqt-mt + added support for libmng + +------------------------------------------------------------------- +Mon Oct 2 10:56:03 CEST 2000 - adrian@suse.de + +- added missing header files + +------------------------------------------------------------------- +Tue Sep 19 16:03:56 MEST 2000 - adrian@suse.de + +- switch to -O0 for axp + +------------------------------------------------------------------- +Fri Sep 8 17:09:15 CEST 2000 - schwab@suse.de + +- Update ia64 configuration. + +------------------------------------------------------------------- +Fri Sep 8 15:36:30 CEST 2000 - adrian@suse.de + +- added missing libqt-mt.so + clean up in filelist + changed copyright/license to GPL + +------------------------------------------------------------------- +Thu Sep 7 22:35:05 CEST 2000 - adrian@suse.de + +- update to qt 2.2.0 final + +------------------------------------------------------------------- +Tue Aug 22 19:56:07 CEST 2000 - adrian@suse.de + +- removed uic/moc bindings to libGL and other + +------------------------------------------------------------------- +Fri Aug 18 20:33:25 CEST 2000 - adrian@suse.de + +- update to qt 2.2.0 beta 2 + spec file rewritten + +------------------------------------------------------------------- +Tue Jul 4 15:11:10 CEST 2000 - adrian@suse.de + +- moved links from /usr/lib/qt/lib to /usr/lib/ + +------------------------------------------------------------------- +Thu Jun 22 15:59:04 CEST 2000 - adrian@suse.de + +- add libqt.so.2 links in /usr/lib/qt/lib + +------------------------------------------------------------------- +Fri Jun 16 16:26:31 CEST 2000 - adrian@suse.de + +- moved libqt.so back to qtlib2, after religios war. + +------------------------------------------------------------------- +Fri Jun 16 12:26:33 CEST 2000 - adrian@suse.de + +- enable gif support again + +------------------------------------------------------------------- +Fri Jun 16 09:18:31 CEST 2000 - adrian@suse.de + +- moved static libs to qtdevel2 + +------------------------------------------------------------------- +Tue Jun 6 14:06:10 CEST 2000 - schwab@suse.de + +- Reduce opt level on ia64. + +------------------------------------------------------------------- +Tue Jun 6 01:06:59 CEST 2000 - adrian@suse.de + +- fixed dependencies + +------------------------------------------------------------------- +Tue May 30 23:02:56 CEST 2000 - adrian@suse.de + +- readded mesadev in neededforbuild + +------------------------------------------------------------------- +Tue May 30 15:30:16 CEST 2000 - adrian@suse.de + +- update to 2.1.1 + +------------------------------------------------------------------- +Wed May 24 13:06:43 CEST 2000 - adrian@suse.de + +- added mesadev in neededforbuild + removed gif support (license issue) + +------------------------------------------------------------------- +Tue May 16 21:44:53 CEST 2000 - adrian@suse.de + +- added -fno-exception (smaller binaries) + +------------------------------------------------------------------- +Fri May 12 08:55:01 CEST 2000 - adrian@suse.de + +- fixed link /usr/doc/packages/html + using %{_defaultdocdir} + using %{_mandir} + +------------------------------------------------------------------- +Fri Apr 14 15:14:19 CEST 2000 - adrian@suse.de + +- update to 2.1.0 final + new package for all man pages + +------------------------------------------------------------------- +Thu Apr 6 19:16:55 CEST 2000 - adrian@suse.de + +- update to 2.1.0 beta 4 + +------------------------------------------------------------------- +Thu Mar 30 15:57:33 CEST 2000 - adrian@suse.de + +- update to qtlib 2.1.0 beta 3 + the destination directory is not longer /usr/lib/qt !!! + QTDIR=/usr/lib/qt-2.1.0 + There is also a link /usr/lib/qt2 to /usr/lib/qt-2.1.0 + +------------------------------------------------------------------- +Thu Mar 2 11:17:22 CET 2000 - ro@suse.de + +- removed obsolete part of patch + +------------------------------------------------------------------- +Thu Mar 2 07:27:34 CET 2000 - ro@suse.de + +- configure doesn't know --mandir ... :( + +------------------------------------------------------------------- +Thu Mar 2 01:59:58 CET 2000 - ro@suse.de + +- work-around for prepare-spec buglet + +------------------------------------------------------------------- +Wed Mar 1 00:05:15 CET 2000 - ro@suse.de + +- man to /usr/share using macro + +------------------------------------------------------------------- +Tue Feb 29 15:55:33 CET 2000 - kettner@suse.de + +- Apply patch for qfont_x11.cpp from warwick@warwick-bippy + +------------------------------------------------------------------- +Mon Feb 28 18:26:18 CET 2000 - kettner@suse.de + +- increased font cache from 4MB to 9MB in order to + speed up UNICODE fonts for YaST2 + +------------------------------------------------------------------- +Thu Nov 11 20:00:14 MET 1999 - uli@suse.de + +- removed netscape from neededforbuild + +------------------------------------------------------------------- +Tue Nov 9 11:12:48 MET 1999 - kettner@suse.de + +- Removed mesa from Requires, as it is not required + +------------------------------------------------------------------- +Fri Oct 22 14:42:35 MEST 1999 - kettner@suse.de + + - Patch extensions/imageio/src/Makefile.in in order to get + shared library of libimgio again. Worked in 2.00. + +------------------------------------------------------------------- +Mon Oct 11 21:06:47 MEST 1999 - kettner@suse.de + + - New version 2.0.2 + +------------------------------------------------------------------- +Tue Sep 28 18:09:12 MEST 1999 - uli@suse.de + +- switched from Motif to lesstif + +------------------------------------------------------------------- +Mon Sep 27 16:31:01 CEST 1999 - bs@suse.de + +- fixed requirements for sub packages + +------------------------------------------------------------------- +Fri Sep 17 11:28:09 MEST 1999 - kettner@suse.de + +- Reinserted old # Commandline line. + +------------------------------------------------------------------- +Mon Sep 13 17:23:57 CEST 1999 - bs@suse.de + +- ran old prepare_spec on spec file to switch to new prepare_spec. + +------------------------------------------------------------------- +Wed Jul 14 11:49:22 CEST 1999 - kettner@suse.de + + - New version 2.00 + +------------------------------------------------------------------- +Tue Jul 13 19:31:56 CEST 1999 - kettner@suse.de + + - New version 2.00 + +------------------------------------------------------------------- +Mon Jul 12 19:15:16 CEST 1999 - kettner@suse.de + + - New version 2.00 + diff --git a/opensuse/core/qt3/qt3.csh b/opensuse/core/qt3/qt3.csh new file mode 100644 index 000000000..e8faf01e9 --- /dev/null +++ b/opensuse/core/qt3/qt3.csh @@ -0,0 +1,2 @@ +set -l path=($path /usr/lib/qt3/bin) +setenv QTDIR /usr/lib/qt3 diff --git a/opensuse/core/qt3/qt3.sh b/opensuse/core/qt3/qt3.sh new file mode 100644 index 000000000..628ee669e --- /dev/null +++ b/opensuse/core/qt3/qt3.sh @@ -0,0 +1,6 @@ +case ":${PATH}:" in + *:/usr/lib/qt3/bin:*) ;; + *) PATH=$PATH:/usr/lib/qt3/bin +esac +QTDIR=/usr/lib/qt3 +export QTDIR diff --git a/opensuse/core/qt3/qt3.spec b/opensuse/core/qt3/qt3.spec new file mode 100644 index 000000000..326d2c03f --- /dev/null +++ b/opensuse/core/qt3/qt3.spec @@ -0,0 +1,415 @@ +# +# spec file for package qt3 +# +# Copyright (c) 2011 SUSE LINUX Products GmbH, Nuernberg, Germany. +# +# All modifications and additions to the file contributed by third parties +# remain the property of their copyright owners, unless otherwise agreed +# upon. The license for this file, and modifications and additions to the +# file, is the same license as for the pristine package itself (unless the +# license for the pristine package is not an Open Source License, in which +# case the license is the MIT License). An "Open Source License" is a +# license that conforms to the Open Source Definition (Version 1.9) +# published by the Open Source Initiative. + +# Please submit bugfixes or comments via http://bugs.opensuse.org/ +# + + + +Name: qt3 +#Remember also to modify Requires in -devel package +BuildRequires: Mesa-devel c++_compiler cups-devel freetype2-devel libjpeg-devel libmng-devel pkgconfig update-desktop-files xorg-x11-devel +Url: http://www.trolltech.com/ +License: GPLv2 ; GPLv3 ; QPL .. +%if %suse_version > 1120 +BuildRequires: libpng14-compat-devel +%else +BuildRequires: libpng-devel +%endif +Group: System/Libraries +# bug437293 +%ifarch ppc64 +Obsoletes: qt3-64bit +%endif +# +Summary: A library for developing applications with graphical user interfaces +Version: 3.3.8c +Release: 110 +Provides: qt_library_%version +Recommends: kdelibs3-default-style +PreReq: /bin/grep +# COMMON-BEGIN +%define x11_free -x11-free- +%define rversion 3.3.8b +Source0: qt%{x11_free}%rversion.tar.bz2 +Source1: build_script.sh +Source2: qtconfig3.desktop +Source3: qtrc +Source4: assistant3.png +Source6: assistant3.desktop +Source7: designer.desktop +Source8: designer.png +Source9: linguist.desktop +Source5: linguist.png +Source10: qt3.sh +Source11: qt3.csh +# Translations did not change at 3.3.8c +Source12: qt3-3.3.8b-translations.tar.bz2 +Source100: qtkdeintegration_x11.cpp +Source101: qtkdeintegration_x11_p.h +Source102: baselibs.conf +Source200: attributes +Source201: update_spec.pl +Patch1: aliasing.diff +Patch2: head.diff +Patch4: qt3-never-strip.diff +Patch5: external-libs.diff +Patch6: 0001-dnd_optimization.patch +Patch7: 0002-dnd_active_window_fix.patch +Patch8: 0007-qpixmap_constants.patch +Patch11: 0038-dragobject-dont-prefer-unknown.patch +Patch12: qtrc-path.diff +Patch14: lib64-plugin-support.diff +Patch15: pluginmanager-fix.diff +Patch18: no-rpath.dif +Patch19: shut-up.diff +Patch20: rubberband.diff +Patch21: fix-GL-loading.diff +Patch23: fix-accessible.diff +# From http://www.freedesktop.org/wiki/Software_2fImmoduleQtDownload +# Current version from http://freedesktop.org/~daisuke/qt-x11-immodule-unified-qt3.3.5-20060318.diff.bz2 +Patch25: qt-x11-immodule-unified-qt3.3.8-20060318.diff +Patch28: fix-key-release-event-with-imm.diff +Patch29: 0047-fix-kmenu-width.diff +Patch31: limit-image-size.diff +Patch34: 0005-qpixmap_mitshm.patch +Patch35: qt-transparency.patch +Patch37: 0055-qtextedit_zoom.patch +Patch38: 0048-qclipboard_hack_80072.patch +Patch39: fix-qtranslator-crash.diff +Patch40: 0059-qpopup_has_mouse.patch +Patch41: 0060-qpopup_ignore_mousepos.patch +Patch42: add_qexport_visibility.patch +Patch43: 0056-khotkeys_input_84434.patch +Source250: enable-designer-plugins.diff +Patch53: fix-xinerama-dialog-placement.diff +Patch54: kmenu-search-fix.diff +Patch55: qt3-fix-cast.diff +Patch100: qt.patch +Patch101: qt3-arm-gcc4.patch +Patch102: xinerama.patch +Patch113: fix-assistant-path.patch +Patch117: qtimer-debug.diff +Patch119: xinerama-qpopupmenu.diff +Patch121: qt3-warnings.diff +Patch123: use-xrandr-1.2.diff +Patch125: qcstring-format-warnings.diff +Patch127: mng-reading-fix.patch +Patch128: 0079-compositing-types.patch +Patch129: 0080-net-wm-sync-request.patch +Patch132: revert-qt-3.3.8-khmer-fix.diff +Patch133: 0085-fix-buildkey.diff +Patch134: fix-xinput-clash.diff +Patch135: parseFontName.diff +Patch136: qt3-no-date.diff +Patch137: popen-leak-fix.diff +Patch138: qt3-libpng14.diff +Patch139: gcc46.diff + +# TQt integration +Patch200: qt-3.3.8c.diff + +BuildRoot: %{_tmppath}/%{name}-%{version}-build + +%description +Qt is a program library for developing applications with graphical user +interfaces. It allows you to rapidly develop professional programs. The +Qt library is available not only for Linux but for a great number of +Unices and even for Windows. Thus it is possible to write programs that +may be easily ported to those platforms. + +You need a license for using Qt with a non-GPL application, which can +be acquired from sales@trolltech.com. + +See /usr/share/doc/packages/qt3 for details about the new features of +the current Qt library! + +%define build_sub_dirs src plugins/src tools/designer/uilib/ tools/designer/uic tools/qtconfig tools/assistant/lib tools/assistant tutorial + +%prep +%setup -q -n qt%{x11_free}%rversion +%patch1 +%patch2 +%patch4 +%patch5 +%patch6 +%patch7 +%patch8 +%patch11 +%patch12 +if [ "%_lib" = "lib64" ]; then +%patch14 +fi +%patch15 +%patch18 +%patch19 +%patch20 +%patch23 +%patch25 +%patch28 +%patch29 +%patch31 +%patch34 +%patch35 +%patch37 +%patch38 +%patch39 +%patch40 +%patch41 +%patch42 +%patch43 +%patch100 +%patch102 +%patch53 +%patch54 +%patch55 +%patch101 +%patch113 +%patch117 +%patch119 +%patch121 +%patch123 +ln -sf $PWD/src/inputmethod/qinputcontextfactory.h include/ +ln -sf $PWD/src/inputmethod/qinputcontextplugin.h include/ +ln -sf $PWD/src/kernel/qinputcontext.h include/ +ln -sf $PWD/src/kernel/qinputcontextinterface_p.h include/private/ +ln -sf $PWD/src/kernel/qximinputcontext_p.h include/private/ +if [ %_lib = "lib" ]; then +sed 's,/lib64/,/lib/,' %PATCH21 | patch -p0 +else +%patch21 +fi +%patch125 +%patch127 +%patch128 +%patch129 +%patch132 +%patch133 +%patch134 +%patch135 +%patch136 +%patch137 +%if %suse_version > 1120 +%patch138 -p1 +%endif +%patch139 +%patch200 +# copy qt kde integration files +cp %SOURCE100 %SOURCE101 src/kernel/ +cp %SOURCE101 include/private/ +cd translations +tar xvjf %SOURCE12 +cd .. +# COMMON-END + +%package devel +License: GPLv2 ; GPLv3 ; QPL .. +Summary: Include Files and Libraries mandatory for Development +Requires: qt3 = %version +Requires: pkgconfig cups-devel freetype2-devel libmng-devel libjpeg-devel c++_compiler xorg-x11-devel +%if %suse_version > 1120 +Recommends: libpng14-compat-devel +Requires: libpng-devel +%else +Requires: libpng-devel +%endif +%if %suse_version > 1000 +Requires: Mesa-devel +%else +Requires: xorg-x11-Mesa xorg-x11-Mesa-devel +%endif +%ifnarch x86_64 s390x sparc64 ppc64 mips64 +Conflicts: devel_libs-32bit +%endif +# bug437293 +%ifarch ppc64 +Obsoletes: qt3-devel-64bit +%endif +# +Group: Development/Libraries/X11 + +%description devel +You need this package if you want to compile programs with Qt 3. It +contains the "Qt Crossplatform Development Kit 2". Under /usr/lib/qt3 +you will find include files. + +You need a license for using Qt with a non-GPL application. A license +can be acquired at sales@trolltech.com. + +%build +export VERSION=%suse_version +source %SOURCE1 %{version} +export WLIB=%_lib +export QTDIR=`pwd` +if [ %_lib == "lib64" ]; then +export RPM_OPT_FLAGS="$RPM_OPT_FLAGS -DUSE_LIB64_PATHES" +fi +export RPM_OPT_FLAGS="$RPM_OPT_FLAGS -fno-strict-aliasing" +# +# call build from build_script.rpmrc for threaded Qt library +# only really needed tools will be builded here, all extra tools will be +# builded in qt3.spec +# +call_configure -v -thread -shared -no-sql-mysql -no-sql-psql -no-sql-odbc -no-sql-sqlite $OPTIONS +for i in %build_sub_dirs ; do + cd $i + make %{?jobs:-j%jobs} + cd - +done + +%install +export VERSION=%suse_version +export WLIB=%_lib +export QTDIR=`pwd` +source %SOURCE1 %{version} +for i in %build_sub_dirs ; do + cd $i + make INSTALL_ROOT=$RPM_BUILD_ROOT install + cd - +done +post_install $RPM_BUILD_ROOT/usr/lib/qt3/ +mkdir -p $RPM_BUILD_ROOT/usr/share/pixmaps/ +sed -i -e 's, on: .*,,' $RPM_BUILD_ROOT/usr/lib/qt3/%_lib/*.la +# +# copy additional files +# +install -m 0755 bin/qmake bin/moc ${RPM_BUILD_ROOT}/usr/lib/qt3/bin/ +install -m 0755 -d ${RPM_BUILD_ROOT}/usr/lib/qt3/translations/ +install -m 0644 translations/*.qm ${RPM_BUILD_ROOT}/usr/lib/qt3/translations/ +if [ %_lib = lib64 ]; then + for i in $RPM_BUILD_ROOT/usr/lib/qt3/plugins/*/*.so; do + mv "$i" "${i%.so}.lib64.so" + done +fi +# +# move pkgconfig files +# +mkdir -p $RPM_BUILD_ROOT/%_libdir/pkgconfig +mv $RPM_BUILD_ROOT/usr/lib/qt3/%_lib/pkgconfig/*.pc \ + $RPM_BUILD_ROOT/%_libdir/pkgconfig +rmdir $RPM_BUILD_ROOT/usr/lib/qt3/%_lib/pkgconfig +# +# move docs in doc dir +# +install -d -m 0755 ${RPM_BUILD_ROOT}/%{_defaultdocdir}/qt3/ +install -d -m 0755 ${RPM_BUILD_ROOT}/usr/lib/qt3/mkspecs/ +install -d -m 0755 ${RPM_BUILD_ROOT}/usr/lib/qt3/mkspecs/ +cp -a mkspecs/* ${RPM_BUILD_ROOT}/usr/lib/qt3/mkspecs/ +if [ %_lib == "lib64" ]; then + ln -sf linux-g++-64 ${RPM_BUILD_ROOT}/usr/lib/qt3/mkspecs/default +else + ln -sf linux-g++ ${RPM_BUILD_ROOT}/usr/lib/qt3/mkspecs/default +fi +find ${RPM_BUILD_ROOT}/usr/lib/qt3/mkspecs -type f -perm /111 -print0 | xargs -0 chmod a-x +# +# create links in ld.so.conf path +# +install -d -m 0755 ${RPM_BUILD_ROOT}/%{_libdir} +ln -sf ../lib/qt3/%{_lib}/libqt-mt.so.3 ${RPM_BUILD_ROOT}/%{_libdir}/libqt-mt.so.3 +ln -sf ../lib/qt3/%{_lib}/libqui.so.1 ${RPM_BUILD_ROOT}/%{_libdir}/libqui.so.1 +[ "lib" != "%{_lib}" ] && \ + ln -sf ../lib/qt3 ${RPM_BUILD_ROOT}/%{_libdir}/qt3 +mkdir -p ${RPM_BUILD_ROOT}/etc/profile.d +install -m 644 %SOURCE10 %SOURCE11 ${RPM_BUILD_ROOT}/etc/profile.d +# +# default qt settings +# +mkdir -p ${RPM_BUILD_ROOT}/etc/X11 +mkdir -p ${RPM_BUILD_ROOT}/usr/lib/qt3/etc/ +ln -sf /etc/X11/ ${RPM_BUILD_ROOT}/usr/lib/qt3/etc/settings +install -m 0644 %SOURCE3 ${RPM_BUILD_ROOT}/etc/X11/qtrc +# +# clean broken links +# +if [ %_lib == "lib64" ]; then + rm ${RPM_BUILD_ROOT}/usr/lib/qt3/mkspecs/linux-g++-64/linux-g++-64 +else + rm ${RPM_BUILD_ROOT}/usr/lib/qt3/mkspecs/linux-g++/linux-g++ +fi +rm -rf ${RPM_BUILD_ROOT}/usr/lib/qt3/doc/html + +%pre +if test -L usr/lib/qt3; then + rm usr/lib/qt3 +fi + +%post +/sbin/ldconfig +if ! grep -q '^\[3.3\]' etc/X11/qtrc ; then +echo "" >> etc/X11/qtrc +echo "[3.3]" >> etc/X11/qtrc +echo "libraryPath=/opt/kde3/lib64/kde3/plugins/:/opt/kde3/lib/kde3/plugins/" >> etc/X11/qtrc +fi + +%postun -p /sbin/ldconfig + +%files +%defattr(-,root,root,755) +# FIXME provide new changelog if kb9vqf will give one +%doc changes-3.3.8b README* LICENSE* MANIFEST FAQ +%dir /usr/lib/qt3/translations +%dir /usr/lib/qt3 +%dir /usr/lib/qt3/bin +%dir /usr/lib/qt3/%{_lib} +%{_libdir}/libqt-mt.so.* +%{_libdir}/libqui.so.* +/usr/lib/qt3/bin/qtconfig +/usr/lib/qt3/%{_lib}/libqt-mt.so.* +/usr/lib/qt3/%{_lib}/libqui.so.* +%dir /usr/lib/qt3/etc +/usr/lib/qt3/etc/settings +/usr/lib/qt3/plugins +/usr/lib/qt3/bin/assistant +%lang(de) /usr/lib/qt3/translations/assistant_de.qm +%lang(ar) /usr/lib/qt3/translations/qt_ar.qm +%lang(ca) /usr/lib/qt3/translations/qt_ca.qm +%lang(cs) /usr/lib/qt3/translations/qt_cs.qm +%lang(de) /usr/lib/qt3/translations/qt_de.qm +%lang(es) /usr/lib/qt3/translations/qt_es.qm +%lang(fr) /usr/lib/qt3/translations/qt_fr.qm +%lang(he) /usr/lib/qt3/translations/qt_he.qm +%lang(ru) /usr/lib/qt3/translations/qt_ru.qm +%lang(sk) /usr/lib/qt3/translations/qt_sk.qm +%lang(it) /usr/lib/qt3/translations/qt_it.qm +%lang(ja) /usr/lib/qt3/translations/qt_ja.qm +%lang(nb) /usr/lib/qt3/translations/qt_nb.qm +%lang(pl) /usr/lib/qt3/translations/qt_pl.qm +%lang(pt) /usr/lib/qt3/translations/qt_pt-br.qm +%lang(pt) /usr/lib/qt3/translations/qt_pt.qm +%lang(zh) /usr/lib/qt3/translations/qt_zh-cn.qm +%lang(zh) /usr/lib/qt3/translations/qt_zh-tw.qm +%config(noreplace) /etc/X11/qtrc +%ifarch s390x sparc64 x86_64 ppc64 mips64 +%dir %{_libdir}/qt3 +%endif + +%files devel +%defattr(-,root,root,755) +# FIXME provide new changelog if kb9vqf will give one +%doc changes-3.3.8b +/usr/lib/qt3/bin/moc +/usr/lib/qt3/bin/qmake +/usr/lib/qt3/bin/uic +/usr/lib/qt3/include +/usr/lib/qt3/%{_lib}/libqt-mt.la +/usr/lib/qt3/%{_lib}/libqt-mt.so +/usr/lib/qt3/%{_lib}/libqt-mt.prl +/usr/lib/qt3/%{_lib}/libqui.so +/usr/lib/qt3/%{_lib}/libqui.prl +/usr/lib/qt3/mkspecs +/%_libdir/pkgconfig/qt-mt.pc +/usr/lib/qt3/%_lib/libqassistantclient.* +%config /etc/profile.d/qt3.* + +%changelog diff --git a/opensuse/core/qt3/qtconfig3.desktop b/opensuse/core/qt3/qtconfig3.desktop new file mode 100644 index 000000000..f7dc027db --- /dev/null +++ b/opensuse/core/qt3/qtconfig3.desktop @@ -0,0 +1,10 @@ +[Desktop Entry] +Categories=Qt;Settings; +Encoding=UTF-8 +Exec=/usr/lib/qt3/bin/qtconfig +Name=Qt Settings +X-KDE-StartupNotify=true +Icon=designer3 +Terminal=false +Type=Application + diff --git a/opensuse/core/qt3/qtimer-debug.diff b/opensuse/core/qt3/qtimer-debug.diff new file mode 100644 index 000000000..5511f2a16 --- /dev/null +++ b/opensuse/core/qt3/qtimer-debug.diff @@ -0,0 +1,48 @@ +--- src/kernel/qeventloop_unix.cpp ++++ src/kernel/qeventloop_unix.cpp +@@ -514,6 +528,17 @@ + return (tm->tv_sec*1000) + (tm->tv_usec/1000); + } + ++static QString fullName(QObject* obj) ++{ ++ QString oname; ++ if (obj && obj->name()) ++ oname = QString(obj->name()) + "(" + QString(obj->className()) + ")"; ++ ++ if (obj && obj->parent()) ++ return fullName(obj->parent()) + "/" + oname; ++ return oname; ++} ++ + int QEventLoop::activateTimers() + { + if ( !timerList || !timerList->count() ) // no timers +@@ -549,9 +574,27 @@ + t->timeout += t->interval; + if ( t->timeout < currentTime ) + t->timeout = currentTime + t->interval; ++ // prefer system clock ticks for low resolution timers ++ // to save cpu power ++ if (t->interval.tv_sec * 1000 + t->interval.tv_usec / 1000 >= 1000) { ++ timeval drift; ++ drift.tv_sec = 0; ++ drift.tv_usec = (t->interval.tv_usec / 8) + (t->interval.tv_sec % 8) * 1000 * 1000 / 8; ++ timeval synced = t->timeout + drift; ++ if (synced.tv_usec < 2 * drift.tv_usec) ++ synced.tv_usec = 0; ++ t->timeout = synced; ++ } + insertTimer( t ); // relink timer + if ( t->interval.tv_usec > 0 || t->interval.tv_sec > 0 ) + n_act++; ++ ++ if (t->obj && getenv("QT_DEBUG_TIMER")) ++ qDebug("qtimer: %ld/%s %d ms for %p/%s %s", ++ getpid(), qApp && qApp->name() ? qApp->name() : "", ++ t->interval.tv_sec * 1000 + t->interval.tv_usec / 1000, ++ t->obj, fullName(t->obj).latin1(), t->obj->className()); ++ + QTimerEvent e( t->id ); + QApplication::sendEvent( t->obj, &e ); // send event + if ( timerList->findRef( begin ) == -1 ) diff --git a/opensuse/core/qt3/qtkdeintegration_x11.cpp b/opensuse/core/qt3/qtkdeintegration_x11.cpp new file mode 100644 index 000000000..8f837b412 --- /dev/null +++ b/opensuse/core/qt3/qtkdeintegration_x11.cpp @@ -0,0 +1,242 @@ +#define QT_CLEAN_NAMESPACE +#include "qtkdeintegration_x11_p.h" + +#include +#include +#include +#include +#include +#include +#include + +bool QKDEIntegration::inited = false; +bool QKDEIntegration::enable = false; + +bool QKDEIntegration::enabled() + { + if( !inited ) + initLibrary(); + return enable; + } + +static QCString findLibrary() + { + if( getenv( "QT_NO_KDE_INTEGRATION" ) == NULL + || getenv( "QT_NO_KDE_INTEGRATION" )[ 0 ] == '0' ) + { +#ifdef USE_LIB64_PATHES + return "/opt/kde3/lib64/kde3/plugins/integration/libqtkde"; +#else + return "/opt/kde3/lib/kde3/plugins/integration/libqtkde"; +#endif + } + return ""; + } + +inline static long widgetToWinId( const QWidget* w ) + { + return w != NULL ? w->winId() : 0; + } + +inline static QFont fontPtrToFontRef( const QFont* f ) + { + return f != NULL ? *f : QFont(); + } + +// --- +static bool (*qtkde_initializeIntegration)( ); +static QStringList (*qtkde_getOpenFileNames)( const QString& filter, QString* workingDirectory, + long parent, const QCString& name, const QString& caption, QString* selectedFilter, + bool multiple ); +static QString (*qtkde_getSaveFileName)( const QString& initialSelection, const QString& filter, + QString* workingDirectory, long parent, const QCString& name, const QString& caption, + QString* selectedFilter ); +static QString (*qtkde_getExistingDirectory)( const QString& initialDirectory, long parent, + const QCString& name, const QString& caption ); +static QColor (*qtkde_getColor)( const QColor& color, long parent, const QCString& name ); +static QFont (*qtkde_getFont)( bool* ok, const QFont& def, long parent, const QCString& name ); +static int (*qtkde_messageBox1)( int type, long parent, const QString& caption, const QString& text, + int button0, int button1, int button2 ); +static int (*qtkde_messageBox2)( int type, long parent, const QString& caption, const QString& text, + const QString& button0Text, const QString& button1Text, const QString& button2Text, + int defaultButton, int escapeButton ); + +void QKDEIntegration::initLibrary() + { + if( !inited ) + { + enable = false; + inited = true; + QString libpath = findLibrary(); + if( libpath.isEmpty()) + return; + QLibrary lib( libpath ); + lib.setAutoUnload( false ); + qtkde_initializeIntegration = ( + bool (*)( ) + ) + lib.resolve("initializeIntegration"); + if( qtkde_initializeIntegration == NULL ) + return; + qtkde_getOpenFileNames = ( + QStringList (*)( const QString& filter, QString* workingDirectory, long parent, + const QCString& name, const QString& caption, QString* selectedFilter, + bool multiple ) + ) + lib.resolve("getOpenFileNames"); + if( qtkde_getOpenFileNames == NULL ) + return; + qtkde_getSaveFileName = ( + QString (*)( const QString& initialSelection, const QString& filter, QString* workingDirectory, + long parent, const QCString& name, const QString& caption, QString* selectedFilter ) + ) + lib.resolve("getSaveFileName"); + if( qtkde_getSaveFileName == NULL ) + return; + qtkde_getExistingDirectory = ( + QString (*)( const QString& initialDirectory, long parent, const QCString& name, + const QString& caption ) + ) + lib.resolve("getExistingDirectory"); + if( qtkde_getExistingDirectory == NULL ) + return; + qtkde_getColor = ( + QColor (*)( const QColor& color, long parent, const QCString& name ) + ) + lib.resolve("getColor"); + if( qtkde_getColor == NULL ) + return; + qtkde_getFont = ( + QFont (*)( bool* ok, const QFont& def, long parent, const QCString& name ) + ) + lib.resolve("getFont"); + if( qtkde_getFont == NULL ) + return; + qtkde_messageBox1 = ( + int (*)( int type, long parent, const QString& caption, const QString& text, + int button0, int button1, int button2 ) + ) + lib.resolve("messageBox1"); + if( qtkde_messageBox1 == NULL ) + return; + qtkde_messageBox2 = ( + int (*)( int type, long parent, const QString& caption, const QString& text, + const QString& button0Text, const QString& button1Text, const QString& button2Text, + int defaultButton, int escapeButton ) + ) + lib.resolve("messageBox2"); + if( qtkde_messageBox2 == NULL ) + return; + enable = qtkde_initializeIntegration(); + } + } + +bool QKDEIntegration::initializeIntegration( ) + { + return qtkde_initializeIntegration( + ); + } +QStringList QKDEIntegration::getOpenFileNames( const QString& filter, QString* workingDirectory, + QWidget* parent, const char* name, const QString& caption, QString* selectedFilter, + bool multiple ) + { + return qtkde_getOpenFileNames( + filter, workingDirectory, widgetToWinId( parent ), name, caption, selectedFilter, multiple ); + } +QString QKDEIntegration::getSaveFileName( const QString& initialSelection, const QString& filter, + QString* workingDirectory, QWidget* parent, const char* name, const QString& caption, + QString* selectedFilter ) + { + return qtkde_getSaveFileName( + initialSelection, filter, workingDirectory, widgetToWinId( parent ), name, caption, selectedFilter ); + } +QString QKDEIntegration::getExistingDirectory( const QString& initialDirectory, QWidget* parent, + const char* name, const QString& caption ) + { + return qtkde_getExistingDirectory( + initialDirectory, widgetToWinId( parent ), name, caption ); + } +QColor QKDEIntegration::getColor( const QColor& color, QWidget* parent, const char* name ) + { + return qtkde_getColor( + color, widgetToWinId( parent ), name ); + } +QFont QKDEIntegration::getFont( bool* ok, const QFont* def, QWidget* parent, const char* name ) + { + return qtkde_getFont( + ok, fontPtrToFontRef( def ), widgetToWinId( parent ), name ); + } +int QKDEIntegration::messageBox1( int type, QWidget* parent, const QString& caption, + const QString& text, int button0, int button1, int button2 ) + { + return qtkde_messageBox1( + type, widgetToWinId( parent ), caption, text, button0, button1, button2 ); + } +int QKDEIntegration::messageBox2( int type, QWidget* parent, const QString& caption, + const QString& text, const QString& button0Text, const QString& button1Text, const QString& button2Text, + int defaultButton, int escapeButton ) + { + return qtkde_messageBox2( + type, widgetToWinId( parent ), caption, text, button0Text, button1Text, button2Text, defaultButton, escapeButton ); + } +// --- + +int QKDEIntegration::information( QWidget* parent, const QString& caption, + const QString& text, int button0, int button1, int button2 ) + { + return qtkde_messageBox1( + QMessageBox::Information, widgetToWinId( parent ), caption, text, button0, button1, button2 ); + } + +int QKDEIntegration::question( QWidget* parent, const QString& caption, + const QString& text, int button0, int button1, int button2 ) + { + return qtkde_messageBox1( + QMessageBox::Question, widgetToWinId( parent ), caption, text, button0, button1, button2 ); + } + +int QKDEIntegration::warning( QWidget* parent, const QString& caption, + const QString& text, int button0, int button1, int button2 ) + { + return qtkde_messageBox1( + QMessageBox::Warning, widgetToWinId( parent ), caption, text, button0, button1, button2 ); + } + +int QKDEIntegration::critical( QWidget* parent, const QString& caption, + const QString& text, int button0, int button1, int button2 ) + { + return qtkde_messageBox1( + QMessageBox::Critical, widgetToWinId( parent ), caption, text, button0, button1, button2 ); + } + +int QKDEIntegration::information( QWidget* parent, const QString& caption, + const QString& text, const QString& button0Text, const QString& button1Text, const QString& button2Text, + int defaultButton, int escapeButton ) + { + return qtkde_messageBox2( + QMessageBox::Information, widgetToWinId( parent ), caption, text, button0Text, button1Text, button2Text, defaultButton, escapeButton ); + } + +int QKDEIntegration::question( QWidget* parent, const QString& caption, + const QString& text, const QString& button0Text, const QString& button1Text, const QString& button2Text, + int defaultButton, int escapeButton ) + { + return qtkde_messageBox2( + QMessageBox::Question, widgetToWinId( parent ), caption, text, button0Text, button1Text, button2Text, defaultButton, escapeButton ); + } + +int QKDEIntegration::warning( QWidget* parent, const QString& caption, + const QString& text, const QString& button0Text, const QString& button1Text, const QString& button2Text, + int defaultButton, int escapeButton ) + { + return qtkde_messageBox2( + QMessageBox::Warning, widgetToWinId( parent ), caption, text, button0Text, button1Text, button2Text, defaultButton, escapeButton ); + } + +int QKDEIntegration::critical( QWidget* parent, const QString& caption, + const QString& text, const QString& button0Text, const QString& button1Text, const QString& button2Text, + int defaultButton, int escapeButton ) + { + return qtkde_messageBox2( + QMessageBox::Critical, widgetToWinId( parent ), caption, text, button0Text, button1Text, button2Text, defaultButton, escapeButton ); + } diff --git a/opensuse/core/qt3/qtkdeintegration_x11_p.h b/opensuse/core/qt3/qtkdeintegration_x11_p.h new file mode 100644 index 000000000..9c1676ddb --- /dev/null +++ b/opensuse/core/qt3/qtkdeintegration_x11_p.h @@ -0,0 +1,59 @@ +#ifndef QKDEINTEGRATION_H +#define QKDEINTEGRATION_H + +#include + +class QLibrary; +class QWidget; +class QColor; +class QFont; + +class QKDEIntegration + { + public: + static bool enabled(); +// --- + static bool initializeIntegration( ); + static QStringList getOpenFileNames( const QString& filter, QString* workingDirectory, + QWidget* parent, const char* name, const QString& caption, QString* selectedFilter, + bool multiple ); + static QString getSaveFileName( const QString& initialSelection, const QString& filter, + QString* workingDirectory, QWidget* parent, const char* name, const QString& caption, + QString* selectedFilter ); + static QString getExistingDirectory( const QString& initialDirectory, QWidget* parent, + const char* name, const QString& caption ); + static QColor getColor( const QColor& color, QWidget* parent, const char* name ); + static QFont getFont( bool* ok, const QFont* def, QWidget* parent, const char* name ); + static int messageBox1( int type, QWidget* parent, const QString& caption, + const QString& text, int button0, int button1, int button2 ); + static int information( QWidget* parent, const QString& caption, const QString& text, + int button0, int button1, int button2 ); + static int question( QWidget* parent, const QString& caption, const QString& text, + int button0, int button1, int button2 ); + static int warning( QWidget* parent, const QString& caption, const QString& text, + int button0, int button1, int button2 ); + static int critical( QWidget* parent, const QString& caption, const QString& text, + int button0, int button1, int button2 ); + static int messageBox2( int type, QWidget* parent, const QString& caption, + const QString& text, const QString& button0Text, const QString& button1Text, + const QString& button2Text, int defaultButton, int escapeButton ); + static int information( QWidget* parent, const QString& caption, const QString& text, + const QString& button0Text, const QString& button1Text, const QString& button2Text, + int defaultButton, int escapeButton ); + static int question( QWidget* parent, const QString& caption, const QString& text, + const QString& button0Text, const QString& button1Text, const QString& button2Text, + int defaultButton, int escapeButton ); + static int warning( QWidget* parent, const QString& caption, const QString& text, + const QString& button0Text, const QString& button1Text, const QString& button2Text, + int defaultButton, int escapeButton ); + static int critical( QWidget* parent, const QString& caption, const QString& text, + const QString& button0Text, const QString& button1Text, const QString& button2Text, + int defaultButton, int escapeButton ); +// --- + private: + static void initLibrary(); + static bool inited; + static bool enable; + }; + +#endif diff --git a/opensuse/core/qt3/qtrc b/opensuse/core/qt3/qtrc new file mode 100644 index 000000000..de342fa33 --- /dev/null +++ b/opensuse/core/qt3/qtrc @@ -0,0 +1,28 @@ +[General] +font=Sans Serif,10,-1,5,50,0,0,0,0,0 +style=plastik +enableXft=true +useXft=true +XIMInputStyle=On The Spot +resolveSymlinks=false +useRtlExtensions=true + +[3.3] +libraryPath=/opt/kde3/lib64/kde3/plugins/:/opt/kde3/lib/kde3/plugins + +[KWinPalette] +activeBackground=#3067a1 +activeBlend=#2fb1dd +activeForeground=#ffffff +activeTitleBtnBg=#dcdcdc +frame=#eeeaee +inactiveBackground=#6e6e6e +inactiveBlend=#949494 +inactiveForeground=#ffffff +inactiveFrame=#eeeaee +inactiveTitleBtnBg=#494949 + +[Palette] +active=#000000^e#f4f4f4^e#ffffff^e#ffffff^e#555555^e#c6c6c6^e#000000^e#ffffff^e#000000^e#ffffff^e#eeeaee^e#000000^e#447bcd^e#ffffff^e#535378^e#004000^e +disabled=#808080^e#f4f4f4^e#ffffff^e#ffffff^e#555555^e#c6c3c6^e#c6c3c6^e#ffffff^e#808080^e#ffffff^e#eeeaee^e#000000^e#000080^e#ffffff^e#535378^e#004000^e +inactive=#000000^e#f4f4f4^e#ffffff^e#ffffff^e#555555^e#c6c3c6^e#000000^e#ffffff^e#000000^e#ffffff^e#eeeaee^e#000000^e#447bcd^e#ffffff^e#535378^e#004000^e diff --git a/opensuse/core/qt3/qtrc-path.diff b/opensuse/core/qt3/qtrc-path.diff new file mode 100644 index 000000000..41830d988 --- /dev/null +++ b/opensuse/core/qt3/qtrc-path.diff @@ -0,0 +1,47 @@ +--- src/tools/qsettings.cpp ++++ src/tools/qsettings.cpp +@@ -36,6 +36,7 @@ + **********************************************************************/ + + #include "qplatformdefs.h" ++#include + + // POSIX Large File Support redefines open -> open64 + static inline int qt_open( const char *pathname, int flags, mode_t mode ) +@@ -465,8 +466,18 @@ + Q_UNUSED( format ); + #endif + +- QString appSettings(QDir::homeDirPath() + "/.qt/"); +- QString defPath; ++ QString home; ++ home = getenv("QT_HOME_DIR"); ++ if ( !home.isEmpty() ){ ++ home += "/"; ++ QFileInfo i( home + "qtrc" ); ++ if ( !i.isReadable() ) ++ home = QDir::homeDirPath() + "/.qt/"; ++ }else ++ home = QDir::homeDirPath() + "/.qt/"; ++ QString appSettings(home); ++ ++ QString defPath("/etc/X11/"); + #ifdef Q_WS_WIN + #ifdef Q_OS_TEMP + TCHAR path[MAX_PATH]; +@@ -514,6 +525,15 @@ + + if ( !!defPath ) + searchPaths.append(defPath); ++ ++ QString system; ++ system = getenv("QT_SYSTEM_DIR"); ++ if ( !system.isEmpty() && system[0] == '/') { ++ QFileInfo i( system + "/qtrc" ); ++ if ( i.isReadable() ) ++ searchPaths.append(system); ++ } ++ + searchPaths.append(dir.path()); + } + diff --git a/opensuse/core/qt3/revert-qt-3.3.8-khmer-fix.diff b/opensuse/core/qt3/revert-qt-3.3.8-khmer-fix.diff new file mode 100644 index 000000000..385e6111a --- /dev/null +++ b/opensuse/core/qt3/revert-qt-3.3.8-khmer-fix.diff @@ -0,0 +1,36 @@ + +according to bug 345459, this fix for stacking letters from 3.3.8 +made it only a lot worse. revert. + + +--- src/kernel/qfontengine_x11.cpp ++++ src/kernel/qfontengine_x11.cpp +@@ -2672,23 +2655,16 @@ bool QOpenType::positionAndAdd(QShaperIt + // ###### fix the case where we have y advances. How do we handle this in Uniscribe????? + if (positions[i].new_advance) { + item->advances[i] = item->flags & QTextEngine::RightToLeft +- ? -qRound((positions[i].x_advance >> 6)*scale) ++ ? -qRound((positions[i].x_advance >> 6)*scale) + : qRound((positions[i].x_advance >> 6)*scale); + } else { + item->advances[i] += item->flags & QTextEngine::RightToLeft +- ? -qRound((positions[i].x_advance >> 6)*scale) ++ ? -qRound((positions[i].x_advance >> 6)*scale) + : qRound((positions[i].x_advance >> 6)*scale); + } +- int back = 0; +- item->offsets[i].x = qRound((positions[i].x_pos >> 6)*scale); +- item->offsets[i].y = qRound((positions[i].y_pos >> 6)*scale); +- while (positions[i-back].back) { +- back += positions[i - back].back; +- item->offsets[i].x += qRound((positions[i - back].x_pos >> 6)*scale); +- item->offsets[i].y += qRound((positions[i - back].y_pos >> 6)*scale); +- } +- item->offsets[i].y = -item->offsets[i].y; +- back = positions[i].back; ++ item->offsets[i].x = qRound((positions[i].x_pos >> 6)*scale); ++ item->offsets[i].y = -qRound((positions[i].y_pos >> 6)*scale); ++ int back = positions[i].back; + if (item->flags & QTextEngine::RightToLeft) { + while (back--) { + item->offsets[i].x -= item->advances[i-back]; diff --git a/opensuse/core/qt3/rubberband.diff b/opensuse/core/qt3/rubberband.diff new file mode 100644 index 000000000..e02b17a98 --- /dev/null +++ b/opensuse/core/qt3/rubberband.diff @@ -0,0 +1,339 @@ +--- src/iconview/qiconview.cpp ++++ src/iconview/qiconview.cpp +@@ -261,6 +261,7 @@ + + QIconViewToolTip *toolTip; + QPixmapCache maskCache; ++ QPixmap *backrubber; + QPtrDict selectedItems; + + struct ItemContainer { +@@ -1975,14 +1976,27 @@ + if ( picture() ) { + QPicture *pic = picture(); + if ( isSelected() ) { +- p->fillRect( pixmapRect( FALSE ), QBrush( cg.highlight(), QBrush::Dense4Pattern) ); ++ p->setBrush( QBrush( cg.highlight(), QBrush::Dense4Pattern ) ); ++ p->setPen( QPen( cg.highlight(), QBrush::Dense4Pattern ) ); ++ p->drawRoundRect( pixmapRect( FALSE ), ++ 1000 / pixmapRect( FALSE ).width(), ++ 1000 / pixmapRect( FALSE ).height() ); + } + p->drawPicture( x()-pic->boundingRect().x(), y()-pic->boundingRect().y(), *pic ); + if ( isSelected() ) { +- p->fillRect( textRect( FALSE ), cg.highlight() ); ++ p->setBrush( QBrush( cg.highlight() ) ); ++ p->setPen( QPen( cg.highlight() ) ); ++ p->drawRoundRect( textRect( FALSE ), ++ 1000 / textRect( FALSE ).width(), ++ 1000 / textRect( FALSE ).height() ); + p->setPen( QPen( cg.highlightedText() ) ); +- } else if ( view->d->itemTextBrush != NoBrush ) +- p->fillRect( textRect( FALSE ), view->d->itemTextBrush ); ++ } else if ( view->d->itemTextBrush != NoBrush ) { ++ p->setBrush( view->d->itemTextBrush ); ++ p->setPen( QPen( view->d->itemTextBrush.color() ) ); ++ p->drawRoundRect( textRect( FALSE ), ++ 1000 / textRect( FALSE ).width(), ++ 1000 / textRect( FALSE ).height() ); ++ } + + int align = view->itemTextPos() == QIconView::Bottom ? AlignHCenter : AlignAuto; + if ( view->d->wordWrapIconText ) +@@ -2040,10 +2054,19 @@ + + p->save(); + if ( isSelected() ) { +- p->fillRect( textRect( FALSE ), cg.highlight() ); ++ p->setBrush( QBrush( cg.highlight() ) ); ++ p->setPen( QPen( cg.highlight() ) ); ++ p->drawRoundRect( textRect( FALSE ), ++ 1000 / textRect( FALSE ).width(), ++ 1000 / textRect( FALSE ).height() ); + p->setPen( QPen( cg.highlightedText() ) ); +- } else if ( view->d->itemTextBrush != NoBrush ) +- p->fillRect( textRect( FALSE ), view->d->itemTextBrush ); ++ } else if ( view->d->itemTextBrush != NoBrush ) { ++ p->setBrush( view->d->itemTextBrush ); ++ p->setPen( QPen( view->d->itemTextBrush.color() ) ); ++ p->drawRoundRect( textRect( FALSE ), ++ 1000 / textRect( FALSE ).width(), ++ 1000 / textRect( FALSE ).height() ); ++ } + + int align = AlignHCenter; + if ( view->d->wordWrapIconText ) +@@ -2059,31 +2082,13 @@ + /*! + Paints the focus rectangle of the item using the painter \a p and + the color group \a cg. ++ ++ The default implementation does nothing; subclasses may ++ reimplement this function. + */ + +-void QIconViewItem::paintFocus( QPainter *p, const QColorGroup &cg ) ++void QIconViewItem::paintFocus( QPainter *, const QColorGroup & ) + { +- if ( !view ) +- return; +- +- view->style().drawPrimitive(QStyle::PE_FocusRect, p, +- QRect( textRect( FALSE ).x(), textRect( FALSE ).y(), +- textRect( FALSE ).width(), +- textRect( FALSE ).height() ), cg, +- (isSelected() ? +- QStyle::Style_FocusAtBorder : +- QStyle::Style_Default), +- QStyleOption(isSelected() ? cg.highlight() : cg.base())); +- +- if ( this != view->d->currentItem ) { +- view->style().drawPrimitive(QStyle::PE_FocusRect, p, +- QRect( pixmapRect( FALSE ).x(), +- pixmapRect( FALSE ).y(), +- pixmapRect( FALSE ).width(), +- pixmapRect( FALSE ).height() ), +- cg, QStyle::Style_Default, +- QStyleOption(cg.base())); +- } + } + + /*! +@@ -2781,6 +2786,7 @@ + d->renamingItem = 0; + d->drawActiveSelection = TRUE; + d->drawDragShapes = FALSE; ++ d->backrubber = 0; + + connect( d->adjustTimer, SIGNAL( timeout() ), + this, SLOT( adjustItems() ) ); +@@ -3265,7 +3271,7 @@ + + void QIconView::doAutoScroll() + { +- QRect oldRubber = QRect( *d->rubber ); ++ QRect oldRubber = *d->rubber; + + QPoint vp = viewport()->mapFromGlobal( QCursor::pos() ); + QPoint pos = viewportToContents( vp ); +@@ -3282,7 +3288,6 @@ + bool block = signalsBlocked(); + + QRect rr; +- QRegion region( 0, 0, visibleWidth(), visibleHeight() ); + + blockSignals( TRUE ); + viewport()->setUpdatesEnabled( FALSE ); +@@ -3308,9 +3313,6 @@ + item->setSelected( TRUE, TRUE ); + changed = TRUE; + rr = rr.unite( item->rect() ); +- } else { +- region = region.subtract( QRect( contentsToViewport( item->pos() ), +- item->size() ) ); + } + + minx = QMIN( minx, item->x() - 1 ); +@@ -3327,42 +3329,77 @@ + viewport()->setUpdatesEnabled( TRUE ); + blockSignals( block ); + +- QRect r = *d->rubber; +- *d->rubber = oldRubber; +- +- QPainter p; +- p.begin( viewport() ); +- p.setRasterOp( NotROP ); +- p.setPen( QPen( color0, 1 ) ); +- p.setBrush( NoBrush ); +- drawRubber( &p ); +- d->dragging = FALSE; +- p.end(); +- +- *d->rubber = r; +- +- if ( changed ) { +- d->drawAllBack = FALSE; +- d->clipRegion = region; +- repaintContents( rr, FALSE ); +- d->drawAllBack = TRUE; ++ // static bool drawAll; ++ if ( d->backrubber == 0 ) { ++ d->backrubber = new QPixmap( viewport()->rect().size() ); ++ d->backrubber->fill( viewport(), viewport()->rect().topLeft() ); ++ // drawAll = true; + } + ++ // int oldX = 0, oldY = 0; ++ // if ( !drawAll && d->scrollTimer ) { ++ // oldX = contentsX(); ++ // oldY = contentsY(); ++ // } + ensureVisible( pos.x(), pos.y() ); ++ // if ( !drawAll && d->scrollTimer && ( oldX != contentsX() || oldY != contentsY() ) ) ++ // drawAll = true; + +- p.begin( viewport() ); +- p.setRasterOp( NotROP ); +- p.setPen( QPen( color0, 1 ) ); +- p.setBrush( NoBrush ); +- drawRubber( &p ); +- d->dragging = TRUE; ++ QRect allRect = oldRubber.normalize(); ++ if ( changed ) ++ allRect |= rr.normalize(); ++ allRect |= d->rubber->normalize(); ++ QPoint point = contentsToViewport( allRect.topLeft() ); ++ allRect = QRect( point.x(), point.y(), allRect.width(), allRect.height() ); ++ allRect &= viewport()->rect(); ++ ++ d->dragging = FALSE; ++ ++ QPainter p( d->backrubber ); ++ p.translate( -contentsX(), -contentsY() ); ++#if 0 ++ if ( !drawAll ) { ++ oldRubber = oldRubber.normalize(); ++ point = contentsToViewport( oldRubber.topLeft() ); ++ oldRubber = QRect( point.x(), point.y(), oldRubber.width(), oldRubber.height() ); ++ oldRubber &= viewport()->rect(); ++ ++ point = contentsToViewport( nr.topLeft() ); ++ nr = QRect( point.x(), point.y(), nr.width(), nr.height() ); ++ nr &= viewport()->rect(); ++ ++ QRegion region; ++ if ( allRect != nr ) ++ region = QRegion(allRect).subtract( QRegion( nr ) ); ++ if ( allRect != oldRubber ) ++ region += QRegion(allRect).subtract( QRegion( oldRubber ) ); ++ ++ QMemArray< QRect > ar = region.rects(); ++ for ( uint i = 0; i < ar.size(); ++i ) { ++ ar[i].addCoords( -2, -2, 4, 4 ); ++ ar[i] = ar[i].normalize(); ++ ++ p.setClipRect( ar[i] ); ++ drawContents( &p, contentsX() + ar[i].left(), contentsY() + ar[i].top(), ar[i].width(), ar[i].height() ); ++ } ++ } ++ else ++#endif ++ { ++ drawContents( &p, ++ contentsX() + allRect.left(), contentsY() + allRect.top(), ++ allRect.width(), allRect.height() ); ++ } + + p.end(); ++ // drawAll = false; ++ d->dragging = TRUE; ++ bitBlt( viewport(), allRect.topLeft(), d->backrubber, allRect ); + + if ( changed ) { + emit selectionChanged(); +- if ( d->selectionMode == Single ) +- emit selectionChanged( d->currentItem ); ++ if ( d->selectionMode == Single ) ++ emit selectionChanged( d->currentItem ); + } + + if ( !QRect( 50, 50, viewport()->width()-100, viewport()->height()-100 ).contains( vp ) && +@@ -3389,9 +3426,7 @@ + + void QIconView::drawContents( QPainter *p, int cx, int cy, int cw, int ch ) + { +- if ( d->dragging && d->rubber ) +- drawRubber( p ); +- ++ p->save(); + QRect r = QRect( cx, cy, cw, ch ); + + QIconViewPrivate::ItemContainer *c = d->firstContainer; +@@ -3465,8 +3500,16 @@ + d->currentItem->paintFocus( p, colorGroup() ); + } + +- if ( d->dragging && d->rubber ) +- drawRubber( p ); ++ p->restore(); ++ if ( d->rubber ) { ++ p->save(); ++ p->translate( contentsX(), contentsY() ); ++ p->setRasterOp( NotROP ); ++ p->setPen( QPen( color0, 1 ) ); ++ p->setBrush( NoBrush ); ++ drawRubber( p ); ++ p->restore(); ++ } + } + + /*! +@@ -4365,17 +4408,15 @@ + void QIconView::contentsMousePressEventEx( QMouseEvent *e ) + { + if ( d->rubber ) { +- QPainter p; +- p.begin( viewport() ); +- p.setRasterOp( NotROP ); +- p.setPen( QPen( color0, 1 ) ); +- p.setBrush( NoBrush ); ++ QRect r( d->rubber->normalize() ); ++ delete d->rubber; ++ d->rubber = 0; ++ ++ repaintContents( r, FALSE ); ++ d->dragging = FALSE; + +- drawRubber( &p ); +- d->dragging = FALSE; +- p.end(); +- delete d->rubber; +- d->rubber = 0; ++ delete d->backrubber; ++ d->backrubber = 0; + + if ( d->scrollTimer ) { + disconnect( d->scrollTimer, SIGNAL( timeout() ), this, SLOT( doAutoScroll() ) ); +@@ -4560,21 +4601,17 @@ + d->startDragItem = 0; + + if ( d->rubber ) { +- QPainter p; +- p.begin( viewport() ); +- p.setRasterOp( NotROP ); +- p.setPen( QPen( color0, 1 ) ); +- p.setBrush( NoBrush ); +- +- drawRubber( &p ); +- d->dragging = FALSE; +- p.end(); +- ++ QRect r(d->rubber->normalize()); ++ + if ( ( d->rubber->topLeft() - d->rubber->bottomRight() ).manhattanLength() > + QApplication::startDragDistance() ) + emitClicked = FALSE; + delete d->rubber; +- d->rubber = 0; ++ d->rubber = 0; ++ repaintContents(r, FALSE); ++ d->dragging = FALSE; ++ delete d->backrubber; ++ d->backrubber = 0; + d->currentItem = d->tmpCurrentItem; + d->tmpCurrentItem = 0; + if ( d->currentItem ) +@@ -5334,9 +5371,9 @@ + QPoint pnt( d->rubber->x(), d->rubber->y() ); + pnt = contentsToViewport( pnt ); + +- style().drawPrimitive(QStyle::PE_RubberBand, p, +- QRect(pnt.x(), pnt.y(), d->rubber->width(), d->rubber->height()), +- colorGroup(), QStyle::Style_Default, QStyleOption(colorGroup().base())); ++ style().drawPrimitive( QStyle::PE_RubberBand, p, ++ QRect( pnt.x(), pnt.y(), d->rubber->width(), d->rubber->height() ).normalize(), ++ colorGroup(), QStyle::Style_Default, QStyleOption(colorGroup().base()) ); + } + + /*! diff --git a/opensuse/core/qt3/shut-up.diff b/opensuse/core/qt3/shut-up.diff new file mode 100644 index 000000000..6191c5d93 --- /dev/null +++ b/opensuse/core/qt3/shut-up.diff @@ -0,0 +1,45 @@ +--- src/kernel/qpixmap_x11.cpp ++++ src/kernel/qpixmap_x11.cpp +@@ -288,8 +288,9 @@ + { + #if defined(QT_CHECK_STATE) + if ( qApp->type() == QApplication::Tty ) { +- qWarning( "QPixmap: Cannot create a QPixmap when no GUI " +- "is being used" ); ++// qWarning( "QPixmap: Cannot create a QPixmap when no GUI " ++// "is being used" ); ++ ; + } + #endif + +--- src/tools/qcomlibrary.cpp ++++ src/tools/qcomlibrary.cpp +@@ -102,25 +102,11 @@ + (const char*) QFile::encodeName(library) ); + } else if ( ( version > QT_VERSION ) || + ( ( QT_VERSION & 0xff0000 ) > ( version & 0xff0000 ) ) ) { +- if ( warn ) +- qWarning( "Conflict in %s:\n" +- " Plugin uses incompatible Qt library (%d.%d.%d)!", +- (const char*) QFile::encodeName(library), +- (version&0xff0000) >> 16, (version&0xff00) >> 8, version&0xff ); ++ return FALSE; + } else if ( (flags & 2) != (our_flags & 2) ) { +- if ( warn ) +- qWarning( "Conflict in %s:\n" +- " Plugin uses %s Qt library!", +- (const char*) QFile::encodeName(library), +- (flags & 2) ? "multi threaded" : "single threaded" ); ++ return FALSE; + } else if ( key != QT_BUILD_KEY ) { +- if ( warn ) +- qWarning( "Conflict in %s:\n" +- " Plugin uses incompatible Qt library!\n" +- " expected build key \"%s\", got \"%s\".", +- (const char*) QFile::encodeName(library), +- QT_BUILD_KEY, +- key.isEmpty() ? "" : (const char *) key ); ++ return FALSE; + } else { + return TRUE; + } diff --git a/opensuse/core/qt3/update_spec.pl b/opensuse/core/qt3/update_spec.pl new file mode 100644 index 000000000..8c67241dc --- /dev/null +++ b/opensuse/core/qt3/update_spec.pl @@ -0,0 +1,106 @@ +#! /usr/bin/perl + +my $name = $ARGV[0]; +$name =~ s,.*/,,; +$name =~ s,\.spec.*,,; + +my %attributes = (); +open(FILE, $ARGV[1]) || die 'no attributes'; +my $pack = undef; +my $text = undef; +while ( ) { + if (/^\+(.*)$/) { $pack = $1; $text = ''; next } + if (/^-(.*)$/) { + if ($pack ne $1) { + die "$pack and $1 do not match"; + } + $text =~ s,^\s*,,; + $text =~ s,\s*$,,; + $attributes{$pack} = $text; + $text = undef; + $pack = undef; + next; + } + if (defined $text) { + $text .= $_; + } elsif (/^(\S*)\s*(.*)$/) { + my $attr = $1; + my $string = $2; + $string =~ s,^\s*,,; + $string =~ s,\s*$,,; + $attributes{$attr} = $string; + } +} +close(FILE); + +open(FILE, $ARGV[0]); + +sub description() +{ + if (/^%description\s*(.*)\s*/) { + my $suffix = $1; + my $pname = $name; + + if ($suffix =~ m/-n\s*(.*)/) { + $pname = $1; + } else { + $pname = "$name-$suffix" if ($suffix); + } + + if (defined $attributes{"description.$pname"}) { + print $_; + my $descr = $attributes{"description.$pname"}; + print "$descr\n"; + $_ = ''; + do { + $_ = ; + } while ( $_ !~ /^%/ && $_ !~ /^@/ ); + print "\n"; + description(); + } + } + +} + +# current subpackage +my $pname = $name; + +while ( ) +{ + if (/^Name:\s*(.*)/) { + $name = $1; + $pname = $1; + } + description(); + + if (/^%package\s*(.*)/) { + my $suffix = $1; + if ($suffix =~ m/-n\s*(.*)/) { + $pname = $1; + } else { + $pname = "$name-$1"; + } + } + + if (/^(Summary:\s*)(.*)$/) { + if (defined $attributes{"summary.$pname"}) { + print $1 . $attributes{"summary.$pname"} ."\n"; + next; + } + } + if (/^(License:\s*)(.*)$/) { + if (defined $attributes{"license.$pname"}) { + print $1 . $attributes{"license.$pname"} ."\n"; + next; + } + } + if (/^(Group:\s*)(.*)$/) { + if (defined $attributes{"group.$pname"}) { + print $1 . $attributes{"group.$pname"} ."\n"; + next; + } + } + print $_; +} + +close(FILE); diff --git a/opensuse/core/qt3/use-xrandr-1.2.diff b/opensuse/core/qt3/use-xrandr-1.2.diff new file mode 100644 index 000000000..4ec4174e7 --- /dev/null +++ b/opensuse/core/qt3/use-xrandr-1.2.diff @@ -0,0 +1,106 @@ +qt-bugs@ issue : +bugs.kde.org number : +applied: no +author: Dirk Mueller + +support xrandr 1.2 configurations. same patch like for trunk qt-copy, +please see there for details. + + +--- src/kernel/qdesktopwidget_x11.cpp ++++ src/kernel/qdesktopwidget_x11.cpp +@@ -107,7 +107,7 @@ QDesktopWidgetPrivate::~QDesktopWidgetPr + screens[i] = 0; + } + +- delete [] screens; ++ free(screens); + } + + if ( rects ) delete [] rects; +@@ -119,30 +119,33 @@ void QDesktopWidgetPrivate::init() + // get the screen count + #ifndef QT_NO_XINERAMA + XineramaScreenInfo *xinerama_screeninfo = 0; +- int unused; ++ int unused, newScreenCount; + use_xinerama = (XineramaQueryExtension(QPaintDevice::x11AppDisplay(), + &unused, &unused) && + XineramaIsActive(QPaintDevice::x11AppDisplay())); + + if (use_xinerama) { + xinerama_screeninfo = +- XineramaQueryScreens(QPaintDevice::x11AppDisplay(), &screenCount); ++ XineramaQueryScreens(QPaintDevice::x11AppDisplay(), &newScreenCount); ++ ++ if (xinerama_screeninfo) + defaultScreen = 0; + } else + #endif // QT_NO_XINERAMA + { + defaultScreen = DefaultScreen(QPaintDevice::x11AppDisplay()); +- screenCount = ScreenCount(QPaintDevice::x11AppDisplay()); ++ newScreenCount = ScreenCount(QPaintDevice::x11AppDisplay()); ++ use_xinerama = false; + } + + delete [] rects; +- rects = new QRect[ screenCount ]; ++ rects = new QRect[ newScreenCount ]; + delete [] workareas; +- workareas = new QRect[ screenCount ]; ++ workareas = new QRect[ newScreenCount ]; + + // get the geometry of each screen +- int i, x, y, w, h; +- for ( i = 0; i < screenCount; i++ ) { ++ int i, j, x, y, w, h; ++ for ( i = 0, j = 0; i < newScreenCount; i++ ) { + + #ifndef QT_NO_XINERAMA + if (use_xinerama) { +@@ -159,11 +162,33 @@ void QDesktopWidgetPrivate::init() + h = HeightOfScreen(ScreenOfDisplay(QPaintDevice::x11AppDisplay(), i)); + } + +- rects[i].setRect(x, y, w, h); + workareas[i] = QRect(); ++ rects[j].setRect(x, y, w, h); ++ ++ // overlapping? ++ if (j > 0 && rects[j-1].intersects(rects[j])) { ++ // pick the bigger one, ignore the other ++ if ((rects[j].width()*rects[j].height()) > ++ (rects[j-1].width()*rects[j-1].height())) ++ rects[j-1] = rects[j]; ++ } ++ else ++ j++; + } + ++ if (screens) { ++ // leaks QWidget* pointers on purpose, can't delete them as pointer escapes ++ screens = (QWidget**) realloc(screens, j * sizeof(QWidget*)); ++ if (j > screenCount) ++ memset(&screens[screenCount], 0, (j-screenCount) * sizeof(QWidget*)); ++ } ++ ++ screenCount = j; ++ + #ifndef QT_NO_XINERAMA ++ if (use_xinerama && screenCount == 1) ++ use_xinerama = false; ++ + if (xinerama_screeninfo) + XFree(xinerama_screeninfo); + #endif // QT_NO_XINERAMA +@@ -216,8 +241,7 @@ QWidget *QDesktopWidget::screen( int scr + screen = d->defaultScreen; + + if ( ! d->screens ) { +- d->screens = new QWidget*[ d->screenCount ]; +- memset( d->screens, 0, d->screenCount * sizeof( QWidget * ) ); ++ d->screens = (QWidget**) calloc( d->screenCount, sizeof(QWidget*)); + d->screens[ d->defaultScreen ] = this; + } + diff --git a/opensuse/core/qt3/xinerama-qpopupmenu.diff b/opensuse/core/qt3/xinerama-qpopupmenu.diff new file mode 100644 index 000000000..07927206f --- /dev/null +++ b/opensuse/core/qt3/xinerama-qpopupmenu.diff @@ -0,0 +1,104 @@ +--- src/widgets/qpopupmenu.cpp.sav ++++ src/widgets/qpopupmenu.cpp +@@ -457,6 +457,15 @@ + menuContentsChanged(); + } + ++QRect QPopupMenu::screenRect( const QPoint& pos ) ++{ ++ int screen_num = QApplication::desktop()->screenNumber( pos ); ++#ifdef Q_WS_MAC ++ return QApplication::desktop()->availableGeometry( screen_num ); ++#else ++ return QApplication::desktop()->screenGeometry( screen_num ); ++#endif ++} + /*! + Displays the popup menu so that the item number \a indexAtPoint + will be at the specified \e global position \a pos. To translate a +@@ -501,6 +510,15 @@ + // point. + #endif + ++ QRect screen = screenRect( geometry().center()); ++ QRect screen2 = screenRect( QApplication::reverseLayout() ++ ? pos+QPoint(width(),0) : pos ); ++ // if the widget is not in the screen given by the position, move it ++ // there, so that updateSize() uses the right size of the screen ++ if( screen != screen2 ) { ++ screen = screen2; ++ move( screen.x(), screen.y()); ++ } + if(d->scroll.scrollable) { + d->scroll.scrollable = QPopupMenuPrivate::Scroll::ScrollNone; + d->scroll.topScrollableIndex = d->scroll.scrollableSize = 0; +@@ -520,18 +538,6 @@ + updateSize(TRUE); + } + +- int screen_num; +- if (QApplication::desktop()->isVirtualDesktop()) +- screen_num = +- QApplication::desktop()->screenNumber( QApplication::reverseLayout() ? +- pos+QPoint(width(),0) : pos ); +- else +- screen_num = QApplication::desktop()->screenNumber( this ); +-#ifdef Q_WS_MAC +- QRect screen = QApplication::desktop()->availableGeometry( screen_num ); +-#else +- QRect screen = QApplication::desktop()->screenGeometry( screen_num ); +-#endif + int sw = screen.width(); // screen width + int sh = screen.height(); // screen height + int sx = screen.x(); // screen pos +@@ -1059,7 +1065,7 @@ + mi->iconSet()->pixmap( QIconSet::Small, QIconSet::Normal ).width() + 4 ); + } + +- int dh = QApplication::desktop()->height(); ++ int dh = screenRect( geometry().center()).height(); + ncols = 1; + + for ( QMenuItemListIt it2( *mitems ); it2.current(); ++it2 ) { +@@ -2313,9 +2319,9 @@ + bool right = FALSE; + if ( ( parentMenu && parentMenu->isPopupMenu && + ((QPopupMenu*)parentMenu)->geometry().x() < geometry().x() ) || +- p.x() < 0 ) ++ p.x() < screenRect( p ).left()) + right = TRUE; +- if ( right && (ps.width() > QApplication::desktop()->width() - mapToGlobal( r.topRight() ).x() ) ) ++ if ( right && (ps.width() > screenRect( p ).right() - mapToGlobal( r.topRight() ).x() ) ) + right = FALSE; + if ( right ) + p.setX( mapToGlobal( r.topRight() ).x() ); +@@ -2326,7 +2332,7 @@ + bool left = FALSE; + if ( ( parentMenu && parentMenu->isPopupMenu && + ((QPopupMenu*)parentMenu)->geometry().x() > geometry().x() ) || +- p.x() + ps.width() > QApplication::desktop()->width() ) ++ p.x() + ps.width() > screenRect( p ).right() ) + left = TRUE; + if ( left && (ps.width() > mapToGlobal( r.topLeft() ).x() ) ) + left = FALSE; +@@ -2334,8 +2340,8 @@ + p.setX( mapToGlobal( r.topLeft() ).x() - ps.width() ); + } + QRect pr = popup->itemGeometry(popup->count() - 1); +- if (p.y() + ps.height() > QApplication::desktop()->height() && +- p.y() - ps.height() + (QCOORD) pr.height() >= 0) ++ if (p.y() + ps.height() > screenRect( p ).bottom() && ++ p.y() - ps.height() + (QCOORD) pr.height() >= screenRect( p ).top()) + p.setY( p.y() - ps.height() + (QCOORD) pr.height()); + + if ( style().styleHint(QStyle::SH_PopupMenu_SloppySubMenus, this )) { +--- src/widgets/qpopupmenu.h.sav ++++ src/widgets/qpopupmenu.h +@@ -152,6 +152,7 @@ + + QSize updateSize(bool force_recalc=FALSE, bool do_resize=TRUE); + void updateRow( int row ); ++ QRect screenRect(const QPoint& pos); + #ifndef QT_NO_ACCEL + void updateAccel( QWidget * ); + void enableAccel( bool ); diff --git a/opensuse/core/qt3/xinerama.patch b/opensuse/core/qt3/xinerama.patch new file mode 100644 index 000000000..1fee04aae --- /dev/null +++ b/opensuse/core/qt3/xinerama.patch @@ -0,0 +1,49 @@ +--- src/dialogs/qdialog.cpp ++++ src/dialogs/qdialog.cpp +@@ -670,6 +670,11 @@ + + #if defined(Q_WS_X11) + extern "C" { int XSetTransientForHint( Display *, unsigned long, unsigned long ); } ++#include ++#undef FocusIn ++// defined in qapplication_x11.cpp ++extern Atom qt_net_wm_full_placement; ++extern bool qt_net_supports(Atom atom); + #endif // Q_WS_X11 + + /*! +@@ -691,10 +696,12 @@ + + if ( !did_resize ) + adjustSize(); +- if ( has_relpos && !did_move ) { +- adjustPositionInternal( parentWidget(), TRUE ); +- } else if ( !did_move ) { +- adjustPositionInternal( parentWidget() ); ++ if( !qt_net_supports( qt_net_wm_full_placement )) { ++ if ( has_relpos && !did_move ) { ++ adjustPositionInternal( parentWidget(), TRUE ); ++ } else if ( !did_move ) { ++ adjustPositionInternal( parentWidget() ); ++ } + } + + if (windowState() != state) +--- src/kernel/qapplication_x11.cpp ++++ src/kernel/qapplication_x11.cpp +@@ -273,6 +273,7 @@ + Atom qt_net_wm_state_stays_on_top = 0; // KDE extension + Atom qt_net_wm_pid = 0; + Atom qt_net_wm_user_time = 0; ++Atom qt_net_wm_full_placement = 0; // KDE extension + // Enlightenment support + Atom qt_enlightenment_desktop = 0; + +@@ -1989,6 +1990,7 @@ + &qt_net_wm_state_stays_on_top ); + qt_x11_intern_atom( "_NET_WM_PID", &qt_net_wm_pid ); + qt_x11_intern_atom( "_NET_WM_USER_TIME", &qt_net_wm_user_time ); ++ qt_x11_intern_atom( "_NET_WM_FULL_PLACEMENT", &qt_net_wm_full_placement ); + qt_x11_intern_atom( "ENLIGHTENMENT_DESKTOP", &qt_enlightenment_desktop ); + qt_x11_intern_atom( "_NET_WM_NAME", &qt_net_wm_name ); + qt_x11_intern_atom( "_NET_WM_ICON_NAME", &qt_net_wm_icon_name ); diff --git a/opensuse/core/tde-filesystem/macros.tde b/opensuse/core/tde-filesystem/macros.tde index b488ea8e7..20998b9b9 100644 --- a/opensuse/core/tde-filesystem/macros.tde +++ b/opensuse/core/tde-filesystem/macros.tde @@ -24,7 +24,7 @@ %_tde_docdir %{_tde_sharedir}/doc/ %_tde_htmldir %{_tde_sharedir}/doc/HTML %_tde_wallpapersdir %{_tde_sharedir}/wallpapers -%_tde_icondir %{_tde_sharedir}/icons +%_tde_icondir %{_tde_iconsdir} %_tde_sounddir %{_tde_sharedir}/sounds %_tde_locale %{_tde_sharedir}/locale %_tde_mimedir %{_tde_sharedir}/mimelnk @@ -42,7 +42,7 @@ %_tde_platform_version 3.5.13 -%tde_runtime_requires Requires: tdebase3-runtime >= %_tde_platform_version qt3 >= 3.3.8c +%tde_runtime_requires Requires: tdebase3-runtime >= %_tde_platform_version qt3 >= 3.3.8d %_tde_build_type release diff --git a/opensuse/core/tdebase/tdebase.spec b/opensuse/core/tdebase/tdebase.spec index 52d6c3c81..1d37c16ca 100644 --- a/opensuse/core/tdebase/tdebase.spec +++ b/opensuse/core/tdebase/tdebase.spec @@ -1,7 +1,7 @@ # -# spec file for package kdebase3 +# spec file for package tdebase (version 3.5.13) # -# Copyright (c) 2011 SUSE LINUX Products GmbH, Nuernberg, Germany. +# copyright (c) 2011 the Trinity Project # # All modifications and additions to the file contributed by third parties # remain the property of their copyright owners, unless otherwise agreed @@ -11,70 +11,41 @@ # case the license is the MIT License). An "Open Source License" is a # license that conforms to the Open Source Definition (Version 1.9) # published by the Open Source Initiative. - -# Please submit bugfixes or comments via http://bugs.opensuse.org/ -# +# +# Please submit bugfixes or comments to http://bugs.trinitydesktop.org/ # norootforbuild -%if %suse_version < 1210 || 0%{?is_kde_kde3} > 0 -%define with_hal 1 -%else -%define with_hal 0 -%endif - -Name: kdebase3 -BuildRequires: OpenEXR-devel cups-devel db-devel doxygen graphviz kdelibs3-devel krb5-devel libsmbclient-devel mDNSResponder-devel openldap2 openldap2-devel openmotif openmotif-devel openslp-devel openssh pam-devel pcsc-lite-devel qt3-devel-doc samba-client utempter xorg-x11 -BuildRequires: unsermake xorg-x11-libfontenc-devel +Name: tdebase +BuildRequires: OpenEXR-devel cups-devel db-devel doxygen graphviz tdelibs-devel krb5-devel libsmbclient-devel mDNSResponder-devel openldap2 openldap2-devel openmotif openmotif-devel openslp-devel openssh pam-devel pcsc-lite-devel qt3-devel-doc samba-client utempter xorg-x11 +BuildRequires: libtqt4-devel tde-filesystem cmake xorg-x11-libfontenc-devel BuildRequires: liblazy-devel -%if %suse_version >= 1130 BuildRequires: libusb-compat-devel -%endif -%if 0%{?with_hal} > 0 -BuildRequires: hal-devel -Provides: kdebase3-with-hal-enabled -%endif BuildRequires: fdupes libbz2-devel -%ifnarch s390 s390x BuildRequires: libsensors4-devel -%endif %define qt_path /usr/lib/qt3 -%define kde_path /opt/kde3 +%define kde_path %{_tde_prefix} Provides: windowmanager kfontinst kdebase3-konqueror kdebase3-khotkeys Obsoletes: kfontinst kdebase3-konqueror kdebase3-khotkeys -# bug437293 -%ifarch ppc64 -Obsoletes: kdebase3-64bit -%endif -# -Requires: kdelibs3 >= %( echo `rpm -q --queryformat '%{VERSION}' kdelibs3`) +Requires: tdelibs >= %( echo `rpm -q --queryformat '%{VERSION}' tdelibs`) Requires: xorg-x11 misc-console-font -Recommends: kdelibs3_doc +Recommends: tdelibs_doc Recommends: gdb PreReq: fileshareset %define fileshare_prefix %{_prefix} -Conflicts: kdebase3-SuSE <= 9.0 PreReq: /bin/sh fileutils permissions -%if %suse_version < 1120 -Requires: kdebase3-apps kdebase3-workspace -%endif -%if %suse_version > 1130 -Provides: kdebase3-beagle = 3.5.10 -Obsoletes: kdebase3-beagle <= 3.5.10 -%endif License: GPLv2+ -Group: System/GUI/KDE -Summary: The KDE Core Components +Group: System/GUI/TDE +Summary: The Trinity Desktop Core Components BuildRoot: %{_tmppath}/%{name}-%{version}-build -Url: http://www.kde.org/ -Version: 3.5.10.1 -Release: 17 -%define kde_version 3.5.10 -Requires: kdebase3-runtime == %{version} -Source0: kdebase-%{kde_version}.tar.bz2 +URL: http://www.trinitydesktop.org/ +Version: 3.5.13 +Release: 1 +Requires: %{name}-runtime == %{version} +Source0: tdebase-%{version}.tar.bz2 Source1: baselibs.conf Source3: startkde.suse.sh -Source4: kdebase3.fillup +Source4: tdebase.fillup Source6: ksysguardd.init # we append this file for older dist verions Source8: mp3-info.tar.bz2 @@ -238,23 +209,23 @@ Patch243: taskbar.patch Patch244: mtab-reenable.patch %description -This package contains kdebase, one of the basic packages of the K -Desktop Environment. It contains, among others, kwin (the KDE window -manager), Konqueror (the KDE Web browser), and KControl (the +This package contains tdebase, one of the basic packages of the Trinity Desktop Environment. It contains, among others, kwin (the window +manager), Konqueror (the Web browser), and KControl (the configuration program) -This package is needed if you want to use the KDE Desktop. It is not -needed if you only want to start some KDE applications. +This package is needed if you want to use the Trinity Desktop. It is not +needed if you only want to start some Trinity applications. Authors: -------- + Timothy Pearson The KDE Team %package -n misc-console-font License: GPLv2+ -Group: System/GUI/KDE +Group: System/GUI/TDE Summary: A font for terminal usage %description -n misc-console-font @@ -264,36 +235,35 @@ This package contains the Misc Console font as shipped with KDE. Authors: -------- + Timothy Pearson The KDE Team %package runtime License: GPLv2+ -Summary: Runtime Dependencies of KDE3 Applications -Group: System/GUI/KDE +Summary: Runtime Dependencies of Trinity Applications +Group: System/GUI/TDE Provides: kio_fish Obsoletes: kio_fish -Provides: kdebase3:/opt/kde3/%_lib/libkonq.so.4 +Provides: tdebase:%{_tde_libdir}/libkonq.so.4 %description runtime -This package contains runtime dependencies of KDE3 applications like +This package contains runtime dependencies of Trinity applications like KIO-slaves. Authors: -------- + Timothy Pearson The KDE Team %package workspace License: GPLv2+ -Summary: Workspace Components of KDE3 Desktop -Group: System/GUI/KDE -Requires: kdebase3 == %{version} -Provides: kdebase3:/opt/kde3/bin/kicker -Recommends: kdebase3-ksysguardd == %{version} -%if 0%{?with_hal} > 0 -Recommends: kdebase3-with-hal-enabled -%endif +Summary: Workspace Components of Trinity Desktop +Group: System/GUI/TDE +Requires: %{name} == %{version} +Provides: tdebase:%{_tde_bindir}/kicker +Recommends: %{name}-ksysguardd == %{version} %description workspace This package contains the wrkspace components of kdebase3 like @@ -302,14 +272,15 @@ kdesktop, kicker and kwin. Authors: -------- + Timothy Pearson The KDE Team %package apps License: GPLv2+ -Summary: Major Applications KDE3 Desktop -Group: System/GUI/KDE -Requires: kdebase3 == %{version} -Provides: kdebase3:/opt/kde3/bin/konsole +Summary: Trinity's Major Applications +Group: System/GUI/TDE +Requires: %{name} == %{version} +Provides: %{name}:%{_tde_bindir}/konsole %description apps This package contains the major applications kdebase3 like @@ -318,55 +289,53 @@ Kate, Konqueror and KWrite. Authors: -------- + Timothy Pearson The KDE Team %package devel License: GPLv2+ -Requires: kdelibs3-devel kdebase3 = %version kdebase3-apps = %version kdebase3-runtime = %version kdebase3-workspace = %version -Summary: KDE Base Package: Base, Build Environment -Group: System/GUI/KDE +Requires: tdelibs-devel %{name} = %{version} %{name}-apps = %{version} %{name}-runtime = %{version} %{name}-workspace = %{version} +Summary: Trinity Base, Build Environment +Group: System/GUI/TDE %description devel -This package contains KDEbase, one of the basic packages of the K -Desktop Environment. It contains, among other things, KWIN, the KDE -window manager; Konqueror, the KDE web and file browser; and KControl, -the KDE configuration program. +This package contains the development files for the Trinity Desktop Environent Base Package, including runtime, workspace, and core applications. -This package is not needed if you do not want to compile high level KDE +It is not needed if you do not want to compile high level KDE applications. Authors: -------- + Timothy Pearson The KDE Team %package kdm License: GPLv2+ # usesubdirs kdm -Summary: The KDE login and display manager -Provides: kdebase3:/opt/kde3/bin/kdm -Provides: kdebase:/opt/kde2/bin/kdm -Provides: kdebase3-kdm-SLD:/opt/kde3/bin/kdm +Summary: The Trinity login and display manager +Provides: tdebase:%{_tde_bindir}/kdm Requires: xorg-x11 -Requires: kdebase3-runtime >= %version -Group: System/GUI/KDE +Requires: %{name}-runtime >= %version +Group: System/GUI/TDE PreReq: %fillup_prereq /bin/grep %description kdm -This package contains kdm, the login and session manager for KDE. - +This package contains kdm, the login and session manager for Trinity. +Note that the RC symlink for Trinity's KDM is /usr/sbin/tdm. Authors: -------- + Timothy Pearson The KDE Team %package samba License: GPLv2+ # usesubdirs kioslave/smb kcontrol/samba -Summary: KDE Base package: Windows Connection Module -Group: System/GUI/KDE +Summary: Trinity's Windows Connection Module +Group: System/GUI/TDE %description samba This package provides the "smb://" protocol, to connect to and from @@ -376,13 +345,14 @@ Windows and Samba shares. Authors: -------- + Timothy Pearson The KDE Team %package extra License: GPLv2+ # usesubdirs kpersonalizer kcontrol/thememgr -Summary: KDE Base package: Extra Applications -Group: System/GUI/KDE +Summary: Trinity's Extra Applications +Group: System/GUI/TDE %description extra This package contains applications which are usually not needed on @@ -396,17 +366,18 @@ SUSE. Authors: -------- + Timothy Pearson The KDE Team %package nsplugin License: GPLv2+ -%ifarch x86_64 ppc64 s390x ia64 +%ifarch x86_64 Requires: nspluginwrapper %endif -Supplements: kdebase3 >= %version -Requires: kdebase3 = %version -Summary: Netscape plugin support for KDE -Group: System/GUI/KDE +Supplements: tdebase >= %version +Requires: tdebase = %version +Summary: Netscape plugin support for Konqueror +Group: System/GUI/TDE %description nsplugin This package contains support for Netscape plug-ins in konqueror. You @@ -416,78 +387,57 @@ have to enable JavaScript for this. Authors: -------- + Timothy Pearson The KDE Team %package ksysguardd License: GPLv2+ PreReq: %insserv_prereq %fillup_prereq aaa_base -Summary: KDE base package: ksysguard daemon -Group: System/GUI/KDE -Provides: kdebase4-workspace-ksysguardd +Summary: Trinity's ksysguard daemon +Group: System/GUI/TDE %description ksysguardd This package contains the ksysguard daemon. It is needed for ksysguard. -This package can be installed on servers without any other KDE packages -to guard the system from remote computers. +This package can be installed on servers without any other Trinity +packages to guard the system from remote computers. Authors: -------- + Timothy Pearson The KDE Team %package session License: GPLv2+ -Summary: The KDE Session -Group: System/GUI/KDE -Provides: kdebase3:/usr/bin/kde +Summary: The Trinity Session +Group: System/GUI/TDE +Provides: tdebase:/usr/bin/tde Requires: kdebase3-workspace %description session -This package contains the startup scripts necessary to start a KDE -session from kdm. +This package contains the startup scripts necessary to start a Trinity +session from the login screen. Authors: -------- + Timothy Pearson The KDE Team -%if %suse_version < 1140 - -%package beagle -License: GPLv2+ -Summary: Beagle dependent plugins for KDE desktop -Group: System/GUI/KDE -Requires: beagle >= 0.3.0 -Requires: kdebase3-workspace = %version -Supplements: packageand(kdebase3-session:beagle) -BuildRequires: libbeagle-devel - -%description beagle -This package contains kdebase plugins which provide additional search -functionality via Beagle. - - - -Authors: --------- - The KDE Team - -%endif - %package -n fileshareset License: GPLv2+ Summary: Set and list fileshares Group: System/Management Version: 2.0 -Release: 578 +Release: 579 %description -n fileshareset -This package contains the the fileshareset utility to allow users to +This package contains the the fieshareset utility to allow users to add or remove file shares. It's also possible to list currently shared locations. /etc/security/fileshare.conf is the main configuration file. @@ -497,10 +447,8 @@ Authors: -------- Uwe Gansert -%define sysconfdir /etc - %prep -%setup -q -b 8 -b 13 -n kdebase-%{kde_version} +%setup -q -b 8 -b 13 -n tdebase-%{version} %patch0 %patch3 %patch5 @@ -543,10 +491,8 @@ Authors: # default-to-halt %patch81 %patch82 -%if %suse_version > 1010 %patch83 %patch77 -%endif %patch200 %patch215 %patch84 @@ -555,16 +501,9 @@ Authors: %patch22 %patch92 %patch88 -%if %suse_version > 1020 %patch96 -%else -%patch996 -%endif # xcursor %patch99 -%ifnarch %ix86 x86_64 -%patch80 -%endif %patch62 %patch69 %patch104 @@ -585,7 +524,6 @@ Authors: %patch156 %patch157 %patch160 -%if %suse_version > 1010 %patch161 pushd kicker %patch162 @@ -593,16 +531,10 @@ pushd ../kcontrol/kicker %patch158 popd popd -%if %suse_version > 1010 -%if %suse_version < 1140 -%patch159 -%endif -%endif %patch165 %patch166 %patch167 tar xvfj %SOURCE20 -%endif %patch163 %patch125 %patch169 @@ -614,15 +546,11 @@ tar xvfj %SOURCE20 %patch177 %patch179 %patch180 -%if %suse_version > 1010 %patch189 -%endif %patch190 %patch195 -%if %suse_version > 1020 %patch198 %patch199 -%endif %patch203 %patch204 %patch205 @@ -645,24 +573,13 @@ popd %patch206 %patch227 %patch228 -%if %suse_version > 1030 -%if %suse_version < 1140 -pushd kicker -%patch1629 -popd -%patch229 -%patch230 -%endif -%endif %patch231 %patch232 %patch233 %patch234 %patch235 %patch236 -%if %suse_version > 1010 %patch237 -%endif %patch238 %patch239 %patch240 -p1 @@ -674,105 +591,58 @@ popd rm -rf kappfinder rm pics/crystalsvg/cr??-*emacs.png cp %SOURCE17 l10n/tw/flag.png -. /etc/opt/kde3/common_options cd ../fileshareset2 aclocal autoconf automake -a -c -cd ../kdebase-%{kde_version} +cd ../%{name}-%{version} update_admin %build -. /etc/opt/kde3/common_options -DEBUG="--disable-debug" -FINAL="--enable-final" -PARANOIA="" -%ifnarch s390 -PARANOIA="--with-cdparanoia" -%endif - LDAP="--with-ldap" -%if %suse_version > 1010 - MOTIF_INCLUDE="/usr/include" -X_SERVER=/usr/bin/X RUN_KAPPFINDER=no \ -%else - MOTIF_INCLUDE="/usr/X11R6/include" -X_SERVER=/usr/X11R6/bin/X RUN_KAPPFINDER=no \ -%endif -./configure \ - $configkde \ - $PARANOIA \ - $LDAP \ - $FLAGS \ - $XINERAMA \ -%if %suse_version > 1010 - --with-motif-libraries=/usr/%{_lib}/ \ -%else - --with-motif-libraries=/usr/X11R6/%{_lib}/ \ -%endif - --with-motif-includes=$MOTIF_INCLUDE \ - --with-samba-libs \ - --with-pam=xdm \ - --with-kdm-xconsole \ - --with-kdm-pam=xdm \ - --with-kcp-pam=kcheckpass \ - --with-kss-pam=kcheckpass - do_make %{?_smp_mflags} + +%cmake_tde -d build -- -DCMAKE_SKIP_RPATH=OFF \ + -DWITH_HAL=OFF \ + -DWITH_LDAP=ON \ + -DWITH_ARTS=ON \ + -DWITH_SAMBA=ON \ + -DWITH_SASL=ON \ + -DWITH_LIBUSB=ON \ + -DWITH_PAM=ON \ + -DBUILD_ALL=ON + +%make_tde -d build + cd ../fileshareset2 ./configure --prefix=%{fileshare_prefix} make %{?_smp_mflags} %install -. /etc/opt/kde3/common_options # relabel smb icon grep -v ^Icon= kioslave/smb/smb-network.desktop | grep -v ^Name > w mv w kioslave/smb/smb-network.desktop echo "Icon=samba" >> kioslave/smb/smb-network.desktop echo "Name=SMB Shares" >> kioslave/smb/smb-network.desktop # install -do_make DESTDIR=$RPM_BUILD_ROOT $INSTALL_TARGET -rm $RPM_BUILD_ROOT/opt/kde3/share/applnk/System/kmenuedit.desktop -rm $RPM_BUILD_ROOT/opt/kde3/share/applnk/System/kpersonalizer.desktop -rm $RPM_BUILD_ROOT/opt/kde3/share/applnk/Utilities/kpager.desktop -rm $RPM_BUILD_ROOT/opt/kde3/share/applnk/Internet/keditbookmarks.desktop -rm $RPM_BUILD_ROOT/opt/kde3/share/applnk/Toys/ktip.desktop -install -m 0644 %SOURCE12 $RPM_BUILD_ROOT/opt/kde3/share/fonts/ -%if %suse_version > 1100 +%makeinstall_tde -d build +rm $RPM_BUILD_ROOT/%{_tde_appsdir}/System/kmenuedit.desktop +rm $RPM_BUILD_ROOT/%{_tde_appsdir}/System/kpersonalizer.desktop +rm $RPM_BUILD_ROOT/%{_tde_appsdir}/Utilities/kpager.desktop +rm $RPM_BUILD_ROOT/%{_tde_appsdir}/Internet/keditbookmarks.desktop +rm $RPM_BUILD_ROOT/%{_tde_appsdir}/Toys/ktip.desktop +install -m 0644 %SOURCE12 $RPM_BUILD_ROOT/%{_tde_sharedir}/fonts/ install -D -m 0644 %SOURCE21 $RPM_BUILD_ROOT/etc/pam.d/kcheckpass -%else -%if %suse_version > 1010 -install -D -m 0644 %SOURCE921 $RPM_BUILD_ROOT/etc/pam.d/kcheckpass -%else -install -D -m 0644 %SOURCE914 $RPM_BUILD_ROOT/etc/pam.d/xdm-np -install -D -m 0644 %SOURCE9921 $RPM_BUILD_ROOT/etc/pam.d/kcheckpass -%endif -%endif -install -m 0644 %SOURCE22 $RPM_BUILD_ROOT/opt/kde3/share/services/searchproviders/ -install -m 0644 %SOURCE23 $RPM_BUILD_ROOT/opt/kde3/share/services/searchproviders/ -%if %suse_version < 1011 -mkdir -p $RPM_BUILD_ROOT/usr/X11R6/bin -%endif -mkdir -p ${RPM_BUILD_ROOT}/usr/bin \ - ${RPM_BUILD_ROOT}/usr/sbin \ +install -m 0644 %SOURCE22 $RPM_BUILD_ROOT/%{_tde_servicesdir}/searchproviders/ +install -m 0644 %SOURCE23 $RPM_BUILD_ROOT/%{_tde_servicesdir}/searchproviders/ +mkdir -p ${RPM_BUILD_ROOT}/%{_bindir} \ + ${RPM_BUILD_ROOT}/%{_sbindir} \ ${RPM_BUILD_ROOT}/var/run/xdmctl -%if %suse_version > 1010 - ln -fs /opt/kde3/bin/startkde $RPM_BUILD_ROOT/usr/bin/kde - ln -fs /opt/kde3/bin/startkde $RPM_BUILD_ROOT/usr/bin/startkde3 -%else - ln -fs /opt/kde3/bin/startkde $RPM_BUILD_ROOT/usr/X11R6/bin/kde -%endif -ln -sf rcxdm ${RPM_BUILD_ROOT}/usr/sbin/rckdm -#%if %suse_version > 1020 -#rm ${RPM_BUILD_ROOT}/opt/kde3/bin/ksysguardd -#rm ${RPM_BUILD_ROOT}/etc/ksysguarddrc -#%else -mv ${RPM_BUILD_ROOT}/opt/kde3/bin/ksysguardd ${RPM_BUILD_ROOT}/usr/bin/ksysguardd -ln -sf /usr/bin/ksysguardd ${RPM_BUILD_ROOT}/opt/kde3/bin/ksysguardd -#%endif -install -d ${RPM_BUILD_ROOT}/opt/kde3/env -%if %suse_version < 1001 -install -m 0755 %SOURCE3 ${RPM_BUILD_ROOT}/opt/kde3/env -%endif -install -D -m 0755 %SOURCE16 ${RPM_BUILD_ROOT}/opt/kde3/shutdown/stopkde.suse.sh +ln -fs %{_tde_bindir}/startkde $RPM_BUILD_ROOT/usr/bin/tde +ln -fs %{_tde_bindir}/startkde $RPM_BUILD_ROOT/usr/bin/starttde +ln -sf rcxdm ${RPM_BUILD_ROOT}/usr/sbin/rctdm +mv ${RPM_BUILD_ROOT}/%{_tde_bindir}/ksysguardd ${RPM_BUILD_ROOT}/%{_bindir}/ksysguardd +ln -sf %{_bindir}/ksysguardd ${RPM_BUILD_ROOT}/%{_tde_bindir}/ksysguardd +install -d ${RPM_BUILD_ROOT}/%{_tde_prefix}/env +install -D -m 0755 %SOURCE16 ${RPM_BUILD_ROOT}/%{_tde_prefix}/shutdown/stopkde.suse.sh mkdir -p "${RPM_BUILD_ROOT}"/etc/security/ echo "RESTRICT=yes" > "${RPM_BUILD_ROOT}"/etc/security/fileshare.conf # @@ -780,71 +650,88 @@ echo "RESTRICT=yes" > "${RPM_BUILD_ROOT}"/etc/security/fileshare.conf # mkdir -p $RPM_BUILD_ROOT/var/adm/fillup-templates mkdir -p $RPM_BUILD_ROOT/etc/init.d/ -install -m 0644 %SOURCE9 ${RPM_BUILD_ROOT}/opt/kde3/share/apps/kdewizard/pics/wizard_small.png -#%if %suse_version < 1031 +install -m 0644 %SOURCE9 ${RPM_BUILD_ROOT}/%{_tde_datadir}/kdewizard/pics/wizard_small.png install -m 0744 %SOURCE6 $RPM_BUILD_ROOT/etc/init.d/ksysguardd -#%endif -mkdir -p $RPM_BUILD_ROOT/opt/kde3/share/apps/kdm/faces/ -ln -s ../pics/users/root1.png $RPM_BUILD_ROOT/opt/kde3/share/apps/kdm/faces/root.face.icon -ln -s ../pics/users/default2.png $RPM_BUILD_ROOT/opt/kde3/share/apps/kdm/faces/.default.face.icon -#%if %suse_version < 1031 -ln -sf /etc/init.d/ksysguardd $RPM_BUILD_ROOT/usr/sbin/rcksysguardd +mkdir -p $RPM_BUILD_ROOT/%{_tde_datadir}/kdm/faces/ +ln -s ../pics/users/root1.png $RPM_BUILD_ROOT/%{_tde_datadir}/kdm/faces/root.face.icon +ln -s ../pics/users/default2.png $RPM_BUILD_ROOT/%{_tde_datadir}/kdm/faces/.default.face.icon +ln -sf /etc/init.d/ksysguardd $RPM_BUILD_ROOT/%{_sbindir}/rcksysguardd install -D -m 644 %SOURCE15 $RPM_BUILD_ROOT/etc/slp.reg.d/ksysguardd.reg -#%endif # even if we use smbro -install -D -m 644 kioslave/smb/smb-network.desktop $RPM_BUILD_ROOT/opt/kde3/share/apps/konqueror/dirtree/remote/smb-network.desktop +install -D -m 644 kioslave/smb/smb-network.desktop $RPM_BUILD_ROOT/{%{_tde_datadir}/konqueror/dirtree/remote/smb-network.desktop # # install kde session file # install -m 0755 -d $RPM_BUILD_ROOT/usr/share/xsessions/ -mv $RPM_BUILD_ROOT/opt/kde3/share/apps/kdm/sessions/kde.desktop $RPM_BUILD_ROOT/usr/share/xsessions/ +mv $RPM_BUILD_ROOT/%{_tde_datadir}/kdm/sessions/tde.desktop $RPM_BUILD_ROOT/usr/share/xsessions/ # for those we have a package for remove the backup and rely on the package for wm in gnome xfce4 xfce wmaker blackbox fvwm95 fvwm icewm enlightenment; do - rm -f $RPM_BUILD_ROOT/opt/kde3/share/apps/kdm/sessions/$wm.desktop + rm -f $RPM_BUILD_ROOT/%{_tde_datadir}/kdm/sessions/$wm.desktop done -%suse_update_desktop_file $RPM_BUILD_ROOT/usr/share/xsessions/kde.desktop +%suse_update_desktop_file $RPM_BUILD_ROOT/usr/share/xsessions/tde.desktop # # delete unwanted/double files # -rm $RPM_BUILD_ROOT/opt/kde3/share/apps/kdesktop/DesktopLinks/Home.desktop -rm $RPM_BUILD_ROOT/opt/kde3/share/apps/kdesktop/DesktopLinks/System.desktop -rm $RPM_BUILD_ROOT/opt/kde3/share/icons/*/*/apps/kvirc.* -mkdir -p $RPM_BUILD_ROOT/usr/share -mv $RPM_BUILD_ROOT/opt/kde3/share/wallpapers $RPM_BUILD_ROOT/usr/share +rm $RPM_BUILD_ROOT/%{_tde_datadir}/kdesktop/DesktopLinks/Home.desktop +rm $RPM_BUILD_ROOT/%{_tde_datadir}/kdesktop/DesktopLinks/System.desktop +rm $RPM_BUILD_ROOT/%{_tde_iconsdir}/*/*/apps/kvirc.* +mkdir -p $RPM_BUILD_ROOT/%{_datadir} +mv $RPM_BUILD_ROOT/%{_tde_wallpapersdir} $RPM_BUILD_ROOT/%{_datadir} cd ../fileshareset2/src -rm -f $RPM_BUILD_ROOT/opt/kde3/bin/fileshare{set,list} +rm -f $RPM_BUILD_ROOT/%{_tde_bindir}/fileshare{set,list} make DESTDIR=$RPM_BUILD_ROOT install chmod 0755 $RPM_BUILD_ROOT/%{fileshare_prefix}/bin/fileshareset cd .. FILLUP_DIR=$RPM_BUILD_ROOT/var/adm/fillup-templates -install -m 644 -D %SOURCE4 $FILLUP_DIR/sysconfig.windowmanager-kdebase3 -mkdir -p $RPM_BUILD_ROOT/opt/kde3/share/icons/hicolor/{16x16,22x22,32x32,48x48,64x64,128x128}/apps/ -for i in {16,32,48,64,128}; do cp $BUILD_ROOT/opt/kde3/share/icons/crystalsvg/"$i"x"$i"/mimetypes/misc.png $RPM_BUILD_ROOT/opt/kde3/share/icons/hicolor/"$i"x"$i"/apps/kcmcomponentchooser.png;done -for i in {16,22,32,48,128}; do cp $BUILD_ROOT/opt/kde3/share/icons/crystalsvg/"$i"x"$i"/actions/launch.png $RPM_BUILD_ROOT/opt/kde3/share/icons/hicolor/"$i"x"$i"/apps/kcmperformance.png;done -cp $BUILD_ROOT/opt/kde3/share/icons/crystalsvg/16x16/actions/services.png $RPM_BUILD_ROOT/opt/kde3/share/icons/hicolor/16x16/apps/kcmkded.png -for i in {16,22,32,48}; do cp $BUILD_ROOT/opt/kde3/share/icons/crystalsvg/"$i"x"$i"/actions/exit.png $RPM_BUILD_ROOT/opt/kde3/share/icons/hicolor/"$i"x"$i"/apps/kcmsmserver.png;done -for i in {16,22,32}; do cp $BUILD_ROOT/opt/kde3/share/icons/crystalsvg/"$i"x"$i"/actions/spellcheck.png $RPM_BUILD_ROOT/opt/kde3/share/icons/hicolor/"$i"x"$i"/apps/kcmspellchecking.png;done -for i in {16,22,32,48,64,128}; do cp $BUILD_ROOT/opt/kde3/share/icons/crystalsvg/"$i"x"$i"/filesystems/desktop.png $RPM_BUILD_ROOT/opt/kde3/share/icons/hicolor/"$i"x"$i"/apps/kcmdesktopbehavior.png;done -for i in {16,22,32,48,64,128}; do cp $BUILD_ROOT/opt/kde3/share/icons/crystalsvg/"$i"x"$i"/filesystems/desktop.png $RPM_BUILD_ROOT/opt/kde3/share/icons/hicolor/"$i"x"$i"/apps/kcmdesktop.png;done -for i in {16,22,32,48,64,128}; do cp $BUILD_ROOT/opt/kde3/share/icons/crystalsvg/"$i"x"$i"/apps/kmenu.png $RPM_BUILD_ROOT/opt/kde3/share/icons/hicolor/"$i"x"$i"/apps/kcmtaskbar.png;done -for i in {16,22,32,48,64,128}; do cp $BUILD_ROOT/opt/kde3/share/icons/crystalsvg/"$i"x"$i"/mimetypes/colorscm.png $RPM_BUILD_ROOT/opt/kde3/share/icons/hicolor/"$i"x"$i"/apps/kcmcolors.png;done -for i in {16,22,32,48,128}; do cp $BUILD_ROOT/opt/kde3/share/icons/crystalsvg/"$i"x"$i"/actions/launch.png $RPM_BUILD_ROOT/opt/kde3/share/icons/hicolor/"$i"x"$i"/apps/kcmlaunch.png;done -for i in {16,22,32}; do cp $BUILD_ROOT/opt/kde3/share/icons/crystalsvg/"$i"x"$i"/actions/filter.png $RPM_BUILD_ROOT/opt/kde3/share/icons/hicolor/"$i"x"$i"/apps/kcmkhtml_filter.png;done -for i in {16,22,32}; do cp $BUILD_ROOT/opt/kde3/share/icons/crystalsvg/"$i"x"$i"/actions/run.png $RPM_BUILD_ROOT/opt/kde3/share/icons/hicolor/"$i"x"$i"/apps/kcmcgi.png;done -for i in {16,22}; do cp $BUILD_ROOT/opt/kde3/share/icons/crystalsvg/"$i"x"$i"/actions/history.png $RPM_BUILD_ROOT/opt/kde3/share/icons/hicolor/"$i"x"$i"/apps/kcmhistory.png;done -for i in {16,22,32,48,64,128}; do cp $BUILD_ROOT/opt/kde3/share/icons/crystalsvg/"$i"x"$i"/filesystems/network.png $RPM_BUILD_ROOT/opt/kde3/share/icons/hicolor/"$i"x"$i"/apps/kcmnetpref.png;done -for i in {16,32,48,64,128}; do cp $BUILD_ROOT/opt/kde3/share/icons/crystalsvg/"$i"x"$i"/devices/blockdevice.png $RPM_BUILD_ROOT/opt/kde3/share/icons/hicolor/"$i"x"$i"/apps/kcmkdnssd.png;done -for i in {16,22,32,48,64}; do cp $BUILD_ROOT/opt/kde3/share/icons/crystalsvg/"$i"x"$i"/devices/joystick.png $RPM_BUILD_ROOT/opt/kde3/share/icons/hicolor/"$i"x"$i"/apps/kcmjoystick.png;done -for i in {16,32,48,64,128}; do cp $BUILD_ROOT/opt/kde3/share/icons/crystalsvg/"$i"x"$i"/devices/mouse.png $RPM_BUILD_ROOT/opt/kde3/share/icons/hicolor/"$i"x"$i"/apps/kcmmouse.png;done -for i in {16,22,32,48,64,128}; do cp $BUILD_ROOT/opt/kde3/share/icons/crystalsvg/"$i"x"$i"/devices/system.png $RPM_BUILD_ROOT/opt/kde3/share/icons/hicolor/"$i"x"$i"/apps/kcmmedia.png;done -for i in {16,22,32}; do cp $BUILD_ROOT/opt/kde3/share/icons/crystalsvg/"$i"x"$i"/actions/encrypted.png $RPM_BUILD_ROOT/opt/kde3/share/icons/hicolor/"$i"x"$i"/apps/kcmcrypto.png;done -for i in {16,22,32,48,64,128}; do cp $BUILD_ROOT/opt/kde3/share/icons/crystalsvg/"$i"x"$i"/filesystems/trashcan_empty.png $RPM_BUILD_ROOT/opt/kde3/share/icons/hicolor/"$i"x"$i"/apps/kcmprivacy.png;done -for i in {16,22,32,48,64,128}; do cp $BUILD_ROOT/opt/kde3/share/icons/crystalsvg/"$i"x"$i"/filesystems/network.png $RPM_BUILD_ROOT/opt/kde3/share/icons/hicolor/"$i"x"$i"/apps/kcmnic.png;done +install -m 644 -D %SOURCE4 $FILLUP_DIR/sysconfig.windowmanager-tdebase +mkdir -p $RPM_BUILD_ROOT/%{_tde_iconsdir}/hicolor/{16x16,22x22,32x32,48x48,64x64,128x128}/apps/ + +for i in {16,32,48,64,128}; do cp %{buildroot}/%{_tde_iconsdir}/crystalsvg/"$i"x"$i"/mimetypes/misc.png $RPM_BUILD_ROOT/%{_tde_iconsdir}/hicolor/"$i"x"$i"/apps/kcmcomponentchooser.png;done + +for i in {16,22,32,48,128}; do cp %{buildroot}/%{_tde_iconsdir}/crystalsvg/"$i"x"$i"/actions/launch.png $RPM_BUILD_ROOT/%{_tde_iconsdir}/hicolor/"$i"x"$i"/apps/kcmperformance.png;done + +cp %{buildroot}/%{_tde_iconsdir}/crystalsvg/16x16/actions/services.png $RPM_BUILD_ROOT/%{_tde_iconsdir}/hicolor/16x16/apps/kcmkded.png + +for i in {16,22,32,48}; do cp %{buildroot}/%{_tde_iconsdir}/crystalsvg/"$i"x"$i"/actions/exit.png $RPM_BUILD_ROOT/%{_tde_iconsdir}/hicolor/"$i"x"$i"/apps/kcmsmserver.png;done + +for i in {16,22,32}; do cp %{buildroot}/%{_tde_iconsdir}/crystalsvg/"$i"x"$i"/actions/spellcheck.png $RPM_BUILD_ROOT/%{_tde_iconsdir}/hicolor/"$i"x"$i"/apps/kcmspellchecking.png;done + +for i in {16,22,32,48,64,128}; do cp %{buildroot}/%{_tde_iconsdir}/crystalsvg/"$i"x"$i"/filesystems/desktop.png $RPM_BUILD_ROOT/%{_tde_iconsdir}/hicolor/"$i"x"$i"/apps/kcmdesktopbehavior.png;done + +for i in {16,22,32,48,64,128}; do cp %{buildroot}/%{_tde_iconsdir}/crystalsvg/"$i"x"$i"/filesystems/desktop.png $RPM_BUILD_ROOT/%{_tde_iconsdir}/hicolor/"$i"x"$i"/apps/kcmdesktop.png;done + +for i in {16,22,32,48,64,128}; do cp %{buildroot}/%{_tde_iconsdir}/crystalsvg/"$i"x"$i"/apps/kmenu.png $RPM_BUILD_ROOT/%{_tde_iconsdir}/hicolor/"$i"x"$i"/apps/kcmtaskbar.png;done + +for i in {16,22,32,48,64,128}; do cp %{buildroot}/%{_tde_iconsdir}/crystalsvg/"$i"x"$i"/mimetypes/colorscm.png $RPM_BUILD_ROOT/%{_tde_iconsdir}/hicolor/"$i"x"$i"/apps/kcmcolors.png;done + +for i in {16,22,32,48,128}; do cp %{buildroot}/%{_tde_iconsdir}/crystalsvg/"$i"x"$i"/actions/launch.png $RPM_BUILD_ROOT/%{_tde_iconsdir}/hicolor/"$i"x"$i"/apps/kcmlaunch.png;done + +for i in {16,22,32}; do cp %{buildroot}/%{_tde_iconsdir}/crystalsvg/"$i"x"$i"/actions/filter.png $RPM_BUILD_ROOT/%{_tde_iconsdir}/hicolor/"$i"x"$i"/apps/kcmkhtml_filter.png;done + +for i in {16,22,32}; do cp %{buildroot}/%{_tde_iconsdir}/crystalsvg/"$i"x"$i"/actions/run.png $RPM_BUILD_ROOT/%{_tde_iconsdir}/hicolor/"$i"x"$i"/apps/kcmcgi.png;done + +for i in {16,22}; do cp %{buildroot}/%{_tde_iconsdir}/crystalsvg/"$i"x"$i"/actions/history.png $RPM_BUILD_ROOT/%{_tde_iconsdir}/hicolor/"$i"x"$i"/apps/kcmhistory.png;done + +for i in {16,22,32,48,64,128}; do cp %{buildroot}/%{_tde_iconsdir}/crystalsvg/"$i"x"$i"/filesystems/network.png $RPM_BUILD_ROOT/%{_tde_iconsdir}/hicolor/"$i"x"$i"/apps/kcmnetpref.png;done + +for i in {16,32,48,64,128}; do cp %{buildroot}/%{_tde_iconsdir}/crystalsvg/"$i"x"$i"/devices/blockdevice.png $RPM_BUILD_ROOT/%{_tde_iconsdir}/hicolor/"$i"x"$i"/apps/kcmkdnssd.png;done + +for i in {16,22,32,48,64}; do cp %{buildroot}/%{_tde_iconsdir}/crystalsvg/"$i"x"$i"/devices/joystick.png $RPM_BUILD_ROOT/%{_tde_iconsdir}/hicolor/"$i"x"$i"/apps/kcmjoystick.png;done + +for i in {16,32,48,64,128}; do cp %{buildroot}/%{_tde_iconsdir}/crystalsvg/"$i"x"$i"/devices/mouse.png $RPM_BUILD_ROOT/%{_tde_iconsdir}/hicolor/"$i"x"$i"/apps/kcmmouse.png;done + +for i in {16,22,32,48,64,128}; do cp %{buildroot}/%{_tde_iconsdir}/crystalsvg/"$i"x"$i"/devices/system.png $RPM_BUILD_ROOT/%{_tde_iconsdir}/hicolor/"$i"x"$i"/apps/kcmmedia.png;done + +for i in {16,22,32}; do cp %{buildroot}/%{_tde_iconsdir}/crystalsvg/"$i"x"$i"/actions/encrypted.png $RPM_BUILD_ROOT/%{_tde_iconsdir}/hicolor/"$i"x"$i"/apps/kcmcrypto.png;done + +for i in {16,22,32,48,64,128}; do cp %{buildroot}/%{_tde_iconsdir}/crystalsvg/"$i"x"$i"/filesystems/trashcan_empty.png $RPM_BUILD_ROOT/%{_tde_iconsdir}/hicolor/"$i"x"$i"/apps/kcmprivacy.png;done + +for i in {16,22,32,48,64,128}; do cp %{buildroot}/%{_tde_iconsdir}/crystalsvg/"$i"x"$i"/filesystems/network.png $RPM_BUILD_ROOT/%{_tde_iconsdir}/hicolor/"$i"x"$i"/apps/kcmnic.png;done # # solve file conflicts with theme packages ... # -mv $RPM_BUILD_ROOT/opt/kde3/share/apps/ksplash/pics $RPM_BUILD_ROOT/opt/kde3/share/apps/ksplash/pics-default -ln -s pics-default $RPM_BUILD_ROOT/opt/kde3/share/apps/ksplash/pics +mv $RPM_BUILD_ROOT/%{_tde_datadir}/ksplash/pics $RPM_BUILD_ROOT/%{_tde_datadir}/ksplash/pics-default +ln -s pics-default $RPM_BUILD_ROOT/%{_tde_datadir}/ksplash/pics chmod 0755 $RPM_BUILD_ROOT/%{fileshare_prefix}/bin/fileshareset %suse_update_desktop_file kate TextEditor %suse_update_desktop_file kwrite TextEditor @@ -870,34 +757,34 @@ chmod 0755 $RPM_BUILD_ROOT/%{fileshare_prefix}/bin/fileshareset %suse_update_desktop_file knetattach System Network %suse_update_desktop_file -r kfontview Graphics Viewer %suse_update_desktop_file -r krandrtray Applet X-KDE-settings-desktop -%suse_update_desktop_file $RPM_BUILD_ROOT/opt/kde3/share/apps/remoteview/smb-network.desktop -for i in $RPM_BUILD_ROOT/opt/kde3/share/applnk/System/ScreenSavers/*.desktop ; do +%suse_update_desktop_file $RPM_BUILD_ROOT/%{_tde_datadir}/remoteview/smb-network.desktop +for i in $RPM_BUILD_ROOT/%{_tde_appsdir}/System/ScreenSavers/*.desktop ; do sed -e '/^\[Desktop Entry\]/a\ Categories=Screensaver;' $i > ${i}_ mv ${i}_ $i %suse_update_desktop_file "$i" done -install -d $RPM_BUILD_ROOT/opt/kde3/share/applnk/apps -ln -sf /opt/kde3/share/applnk/System/ScreenSavers $RPM_BUILD_ROOT/opt/kde3/share/applnk/apps/ScreenSavers - -for i in $RPM_BUILD_ROOT/opt/kde3/share/applications/kde/*.desktop \ - $RPM_BUILD_ROOT/opt/kde3/share/apps/konqueror/servicemenus/*.desktop \ - $RPM_BUILD_ROOT/opt/kde3/share/apps/kicker/*/*.desktop \ - $RPM_BUILD_ROOT/opt/kde3/share/apps/kicker/*/*/*.desktop \ - $RPM_BUILD_ROOT/opt/kde3/share/apps/kicker/*/*/*.desktop \ - $RPM_BUILD_ROOT/usr/share/wallpapers/*.desktop \ - $RPM_BUILD_ROOT/opt/kde3/share/apps/konqsidebartng/virtual_folders/services/*.desktop; do +install -d $RPM_BUILD_ROOT/%{_tde_appsdir}/apps +ln -sf %{_tde_appsdir}/System/ScreenSavers $RPM_BUILD_ROOT/%{_tde_appsdir}/apps/ScreenSavers + +for i in $RPM_BUILD_ROOT/%{_tde_applicationsdir}/kde/*.desktop \ + $RPM_BUILD_ROOT/%{_tde_datadir}/konqueror/servicemenus/*.desktop \ + $RPM_BUILD_ROOT/%{_tde_datadir}/kicker/*/*.desktop \ + $RPM_BUILD_ROOT/%{_tde_datadir}/kicker/*/*/*.desktop \ + $RPM_BUILD_ROOT/%{_tde_datadir}/kicker/*/*/*.desktop \ + $RPM_BUILD_ROOT/%{_datadir}/wallpapers/*.desktop \ + $RPM_BUILD_ROOT/%{_tde_datadir}/konqsidebartng/virtual_folders/services/*.desktop; do [ "`sed -n '/^\[Desktop Entry\]/,/^\[/ s,NoDisplay=\(.*\),\1,p' "$i"`" = "true" ] && continue [ "`sed -n '/^\[Desktop Entry\]/,/^\[/ s,Hidden=\(.*\),\1,p' "$i"`" = "true" ] && continue grep -q X-SuSE-translate "$i" && continue %suse_update_desktop_file "$i" done -rm -f $RPM_BUILD_ROOT/opt/kde3/share/config/kdm/README -rm -f $RPM_BUILD_ROOT/opt/kde3/share/apps/kdm/sessions/icewm.desktop +rm -f $RPM_BUILD_ROOT/%{_tde_configdir}/kdm/README +rm -f $RPM_BUILD_ROOT/%{_tde_datadir}/kdm/sessions/icewm.desktop # # gimp 2.0 does have a different named icon # -for i in $RPM_BUILD_ROOT//opt/kde3/share/icons/*/*/apps/gimp.png; do +for i in $RPM_BUILD_ROOT/%{_tde_iconsdir}/*/*/apps/gimp.png; do ln "$i" "${i%/*}/wilber-icon.png" done mkdir -p -m 755 $RPM_BUILD_ROOT/%_mandir/man8 @@ -908,33 +795,33 @@ rm $RPM_BUILD_ROOT/%_mandir/man1/kate.* rm $RPM_BUILD_ROOT/%_mandir/man1/kdesu.* rm $RPM_BUILD_ROOT/%_mandir/man1/kbookmarkmerger.* rm $RPM_BUILD_ROOT/%_mandir/man1/kfind.* -kde_post_install -%if %suse_version > 1020 -%fdupes $RPM_BUILD_ROOT/opt/kde3/share -%endif +%tde_post_install +%fdupes $RPM_BUILD_ROOT/%{_tde_sharedir} # move konqueror.desktop back to old position (#281572) -mv $RPM_BUILD_ROOT/opt/kde3/share/applications/kde/konqueror.desktop $RPM_BUILD_ROOT/opt/kde3/share/applnk/konqueror.desktop - -%if 0%{?with_hal} == 0 -cp -f %{SOURCE24} $RPM_BUILD_ROOT/opt/kde3/bin -chmod +x $RPM_BUILD_ROOT/opt/kde3/bin/devmon-automounter.sh -sed -i 5i\ '/opt/kde3/bin/devmon-automounter.sh &' $RPM_BUILD_ROOT/opt/kde3/bin/startkde -%endif +mv $RPM_BUILD_ROOT/%{_tde_applicationsdir}/kde/konqueror.desktop $RPM_BUILD_ROOT/%{_tde_appsdir}/konqueror.desktop + +# while this script uses udisks, it's better to be fully integrated +# into Trinity. +#%if 0%{?with_hal} == 0 +#cp -f %{SOURCE24} $RPM_BUILD_ROOT/opt/kde3/bin +#chmod +x $RPM_BUILD_ROOT/opt/kde3/bin/devmon-automounter.sh +#sed -i 5i\ '/opt/kde3/bin/devmon-automounter.sh &' $RPM_BUILD_ROOT/opt/kde3/bin/startkde +#%endif %pre # we have this as link -if test -e opt/kde3/share/apps/ksplash/pics -a ! -L opt/kde3/share/apps/ksplash/pics ; +if test -e opt/tde/share/apps/ksplash/pics -a ! -L opt/tde/share/apps/ksplash/pics ; then - if test -e opt/kde3/share/apps/ksplash/pics-default; then - rm -rf opt/kde3/share/apps/ksplash/pics + if test -e opt/tde/share/apps/ksplash/pics-default; then + rm -rf opt/tde/share/apps/ksplash/pics else - mv opt/kde3/share/apps/ksplash/pics opt/kde3/share/apps/ksplash/pics-default + mv opt/tde/share/apps/ksplash/pics opt/tde/share/apps/ksplash/pics-default fi fi -kdmrc=/opt/kde3/share/config/kdm/kdmrc -# if the /opt/kde3 one is obviously wrong and we have one in /etc we move that one over to +kdmrc=/opt/tde/share/config/kdm/kdmrc +# if the /opt/tde one is obviously wrong and we have one in /etc we move that one over to # avoid confusion on update what's the right kdmrc -if test -f $kdmrc && grep -q "Session=/opt/kde3/share/config/kdm/Xsession" $kdmrc && test -f /etc$kdmrc; then +if test -f $kdmrc && grep -q "Session=/opt/tde/share/config/kdm/Xsession" $kdmrc && test -f /etc$kdmrc; then mv /etc$kdmrc $kdmrc fi @@ -943,12 +830,12 @@ fi %run_permissions %post kdm -%{fillup_only -an windowmanager-kdebase3} -/opt/kde3/bin/genkdmconf +%{fillup_only -an windowmanager-tdebase} +/opt/tde/bin/genkdmconf if test -f /etc/sysconfig/displaymanager ; then . /etc/sysconfig/displaymanager fi -%{fillup_only -n displaymanager -s kdebase3-SuSE} +%{fillup_only -n displaymanager -s tdebase-SuSE} %{remove_and_set -n displaymanager KDM_SHUTDOWN} if test -n "$KDM_SHUTDOWN" -a "$KDM_SHUTDOWN" != "no"; then if test "$KDM_SHUTDOWN" = "local" ; then @@ -970,31 +857,12 @@ fi %postun %insserv_cleanup /sbin/ldconfig -%if %suse_version < 1031 - -%post ksysguardd -%{fillup_and_insserv -sn kdebase3-ksysguardd ksysguardd RUN_KSYSGUARDD} -%verifyscript -%verify_permissions -e /opt/kde3/bin/kcheckpass -%verify_permissions -e /opt/kde3/bin/kdesud -%verify_permissions -e /opt/kde3/bin/khc_indexbuilder - -%postun ksysguardd -%restart_on_update ksysguardd -%insserv_cleanup - -%preun ksysguardd -%stop_on_removal ksysguardd -%endif %post runtime -p /sbin/ldconfig %postun runtime -p /sbin/ldconfig %post workspace -p /sbin/ldconfig -%if %suse_version > 1110 && 0%{?with_hal} > 0 -chkconfig haldaemon on -%endif %postun workspace -p /sbin/ldconfig @@ -1008,566 +876,511 @@ rm -rf $RPM_BUILD_ROOT %files -n misc-console-font %defattr(-,root,root) %doc COPYING -/opt/kde3/share/fonts/console8x16.pcf.gz +%{_tde_sharedir}/fonts/console8x16.pcf.gz %files %defattr(-,root,root) %doc AUTHORS COPYING README README.pam ../lame.spec ../README.mp3 -%exclude /opt/kde3/share/fonts/console8x16.pcf.gz -%dir /opt/kde3/share/icons/hicolor/* -%dir /opt/kde3/%_lib/kconf_update_bin -%dir /opt/kde3/share/apps/plugin -%dir /opt/kde3/share/applnk/ -%dir /opt/kde3/share/applnk/Settings -%dir /opt/kde3/share/applnk/Settings/WebBrowsing -%dir /opt/kde3/share/applnk/System/ScreenSavers -%dir /opt/kde3/share/applnk/apps -/opt/kde3/share/applnk/apps/ScreenSavers +%exclude %{_tde_sharedir}/fonts/console8x16.pcf.gz +%dir %{_tde_iconsdir}/hicolor/* +%dir %{_tde_libdir}/kconf_update_bin +%dir %{_tde_datadir}/plugin +%dir %{_tde_appsdir} +%dir %{_tde_appsdir}/Settings +%dir %{_tde_appsdir}/Settings/WebBrowsing +%dir %{_tde_appsdir}/System/ScreenSavers +%dir %{_tde_appsdir}/apps +%{_tde_appsdir}/apps/ScreenSavers /etc/xdg/menus/*.menu /etc/xdg/menus/applications-merged -%verify(not mode) %attr(2755,root,nogroup) /opt/kde3/bin/kdesud -%verify(not mode) %attr(0755,root,man) /opt/kde3/bin/khc_indexbuilder -/opt/kde3/env -/opt/kde3/bin/arts-start -/opt/kde3/bin/drkonqi -/opt/kde3/bin/kaccess -/opt/kde3/bin/kblankscrn.kss -/opt/kde3/bin/kbookmarkmerger -/opt/kde3/bin/kcminit -/opt/kde3/bin/kcminit_startup -/opt/kde3/%_lib/kde3/kcminit_startup.* -/opt/kde3/bin/kcontrol* -/opt/kde3/bin/kdeinstallktheme -/opt/kde3/bin/kdepasswd -/opt/kde3/bin/kdcop -/opt/kde3/bin/kdebugdialog -/opt/kde3/bin/kdeeject -/opt/kde3/bin/kdeprintfax -/opt/kde3/bin/keditfiletype -/opt/kde3/bin/khelpcenter -/opt/kde3/bin/kjobviewer -/opt/kde3/bin/kcheckrunning -/opt/kde3/bin/kpm -/opt/kde3/bin/krandom.kss -/opt/kde3/bin/krdb -/opt/kde3/bin/kxkb -/opt/kde3/bin/kdialog -/opt/kde3/bin/klocaldomainurifilterhelper -/opt/kde3/bin/kio_media_mounthelper -/opt/kde3/bin/knetattach -/opt/kde3/bin/ktrash -/opt/kde3/bin/khc_docbookdig.pl -/opt/kde3/bin/khc_mansearch.pl -/opt/kde3/bin/khc_htdig.pl -/opt/kde3/bin/khc_htsearch.pl -/opt/kde3/bin/kapplymousetheme -/opt/kde3/bin/kio_system_documenthelper -%if %suse_version > 1010 -/opt/kde3/bin/runupdater -%endif -/opt/kde3/bin/kstart -/opt/kde3/bin/ksystraycmd -/opt/kde3/%_lib/kde3/cursorthumbnail.* -/opt/kde3/%_lib/kde3/htmlthumbnail.* -/opt/kde3/%_lib/kde3/imagethumbnail.* -/opt/kde3/%_lib/kde3/kcm_a* -/opt/kde3/%_lib/kde3/kcm_bell* -/opt/kde3/%_lib/kde3/kcm_keyboard* -/opt/kde3/%_lib/kde3/kcm_c* -/opt/kde3/%_lib/kde3/kcm_d* -/opt/kde3/%_lib/kde3/kcm_e* -/opt/kde3/%_lib/kde3/kcm_f* -/opt/kde3/%_lib/kde3/kcm_h* -/opt/kde3/%_lib/kde3/kcm_i* -/opt/kde3/%_lib/kde3/kcm_l* -/opt/kde3/%_lib/kde3/kcm_nic.* -/opt/kde3/%_lib/kde3/kcm_p* -/opt/kde3/%_lib/kde3/kcm_smserver.* -/opt/kde3/%_lib/kde3/kcm_spellchecking.* -/opt/kde3/%_lib/kde3/kcm_style.* -/opt/kde3/%_lib/kde3/kcm_usb.* -/opt/kde3/%_lib/kde3/khelpcenter.* -/opt/kde3/%_lib/kde3/kcm_xinerama.* -/opt/kde3/%_lib/kde3/kxkb.* -/opt/kde3/%_lib/kde3/djvuthumbnail.* -/opt/kde3/%_lib/kde3/kaccess.* -/opt/kde3/%_lib/kde3/kcminit.* -/opt/kde3/%_lib/kde3/kcm_nsplugins.* -/opt/kde3/%_lib/kde3/kcontrol.* -/opt/kde3/%_lib/kde3/keditbookmarks.* -/opt/kde3/%_lib/kde3/kfmclient.* -/opt/kde3/%_lib/kde3/kjobviewer.* -/opt/kde3/%_lib/kde3/kprinter.* -/opt/kde3/%_lib/kde3/libkdeprint_part.* -/opt/kde3/%_lib/kde3/libkshorturifilter.* -/opt/kde3/%_lib/kde3/libkuri* -/opt/kde3/%_lib/kde3/libkonsolepart.* -/opt/kde3/%_lib/kde3/textthumbnail.* -/opt/kde3/%_lib/kde3/kcm_joystick.* -/opt/kde3/%_lib/kde3/kcm_useraccount.* -/opt/kde3/%_lib/kde3/kcontroledit.* -/opt/kde3/%_lib/kde3/kded_kwrited.* -/opt/kde3/%_lib/kde3/kstyle_keramik_config.* -/opt/kde3/%_lib/kde3/libkmanpart.* -/opt/kde3/%_lib/kde3/liblocaldomainurifilter.* -%if %suse_version > 1010 -/opt/kde3/%_lib/kde3/runupdater.* -/opt/kde3/%_lib/libkdeinit_runupdater.so -%endif -/opt/kde3/%_lib/libkdeinit_kaccess.so -/opt/kde3/%_lib/libkdeinit_kcminit.so -/opt/kde3/%_lib/libkdeinit_kcminit_startup.so -/opt/kde3/%_lib/libkdeinit_kcontrol.so -/opt/kde3/%_lib/libkdeinit_kcontroledit.so -/opt/kde3/%_lib/libkdeinit_keditbookmarks.so -/opt/kde3/%_lib/libkdeinit_kfmclient.so -/opt/kde3/%_lib/libkdeinit_khelpcenter.so -/opt/kde3/%_lib/libkdeinit_kjobviewer.so -/opt/kde3/%_lib/libkdeinit_kxkb.so -/opt/kde3/%_lib/kde3/libnsplugin.* -/opt/kde3/%_lib/kde3/kded_remotedirnotify.* -/opt/kde3/%_lib/kde3/kded_systemdirnotify.* -/opt/kde3/%_lib/kde3/libkhtmlkttsdplugin.* -/opt/kde3/%_lib/kde3/kcm_media.la -/opt/kde3/%_lib/kde3/kcm_media.so -/opt/kde3/%_lib/kde3/kded_homedirnotify.la -/opt/kde3/%_lib/kde3/kded_homedirnotify.so -/opt/kde3/%_lib/kde3/kded_medianotifier.la -/opt/kde3/%_lib/kde3/kded_medianotifier.so -%if 0%{?with_hal} > 0 -/opt/kde3/%_lib/kde3/media_propsdlgplugin.* -%endif -/opt/kde3/%_lib/kde3/kcm_kded.* -/opt/kde3/%_lib/kde3/kcm_kdnssd.* -/opt/kde3/%_lib/kde3/kcm_keyboard.* -/opt/kde3/%_lib/kde3/kcm_keys.* -/opt/kde3/%_lib/kde3/kcm_kio.* -/opt/kde3/%_lib/kde3/kcm_knotify.* -/opt/kde3/%_lib/kde3/kcm_konq.* -/opt/kde3/%_lib/kde3/kcm_konqhtml.* -/opt/kde3/%_lib/kde3/kcm_kthememanager.* -/opt/kde3/%_lib/kde3/kcm_kurifilt.* -/opt/kde3/share/applications/kde/khtml_filter.desktop -/opt/kde3/share/applications/kde/media.desktop -/opt/kde3/share/applications/kde/joystick.desktop -/opt/kde3/share/applications/kde/kcm_useraccount.desktop -/opt/kde3/share/applications/kde/kdepasswd.desktop -/opt/kde3/share/applications/kde/kthememanager.desktop -/opt/kde3/share/applications/kde/Help.desktop -/opt/kde3/share/applications/kde/KControl.desktop -/opt/kde3/share/applications/kde/arts.desktop -/opt/kde3/share/applications/kde/bell.desktop -/opt/kde3/share/applications/kde/cache.desktop -/opt/kde3/share/applications/kde/colors.desktop -/opt/kde3/share/applications/kde/componentchooser.desktop -/opt/kde3/share/applications/kde/cookies.desktop -/opt/kde3/share/applications/kde/crypto.desktop -/opt/kde3/share/applications/kde/display.desktop -/opt/kde3/share/applications/kde/dma.desktop -/opt/kde3/share/applications/kde/ebrowsing.desktop -/opt/kde3/share/applications/kde/filebrowser.desktop -/opt/kde3/share/applications/kde/filetypes.desktop -/opt/kde3/share/applications/kde/fonts.desktop -/opt/kde3/share/applications/kde/clock.desktop -/opt/kde3/share/applications/kde/icons.desktop -/opt/kde3/share/applications/kde/interrupts.desktop -/opt/kde3/share/applications/kde/installktheme.desktop -/opt/kde3/share/applications/kde/ioports.desktop -/opt/kde3/share/applications/kde/ioslaveinfo.desktop -/opt/kde3/share/applications/kde/kcmaccess.desktop -/opt/kde3/share/applications/kde/kcmcgi.desktop -/opt/kde3/share/applications/kde/kcmcss.desktop -/opt/kde3/share/applications/kde/kcmhistory.desktop -/opt/kde3/share/applications/kde/kcmkded.desktop -/opt/kde3/share/applications/kde/kcmlaunch.desktop -/opt/kde3/share/applications/kde/kcm_kdnssd.desktop -/opt/kde3/share/applications/kde/kcmnotify.desktop -/opt/kde3/share/applications/kde/kcmperformance.desktop -/opt/kde3/share/applications/kde/kcmusb.desktop -/opt/kde3/share/applications/kde/kdeprintfax.desktop -/opt/kde3/share/applications/kde/keyboard.desktop -/opt/kde3/share/applications/kde/keyboard_layout.desktop -/opt/kde3/share/applications/kde/keys.desktop -/opt/kde3/share/applications/kde/kfmclient.desktop -/opt/kde3/share/applications/kde/kfmclient_dir.desktop -/opt/kde3/share/applications/kde/kfmclient_html.desktop -/opt/kde3/share/applications/kde/kfmclient_war.desktop -/opt/kde3/share/applications/kde/khtml_behavior.desktop -/opt/kde3/share/applications/kde/khtml_fonts.desktop -/opt/kde3/share/applications/kde/khtml_java_js.desktop -/opt/kde3/share/applications/kde/khtml_plugins.desktop -/opt/kde3/share/applications/kde/kjobviewer.desktop -/opt/kde3/share/applications/kde/lanbrowser.desktop -/opt/kde3/share/applications/kde/language.desktop -/opt/kde3/share/applications/kde/memory.desktop -/opt/kde3/share/applications/kde/mouse.desktop -/opt/kde3/share/applications/kde/netpref.desktop -/opt/kde3/share/applications/kde/nic.desktop -/opt/kde3/share/applications/kde/partitions.desktop -/opt/kde3/share/applications/kde/pci.desktop -/opt/kde3/share/applications/kde/printers.desktop -/opt/kde3/share/applications/kde/privacy.desktop -/opt/kde3/share/applications/kde/processor.desktop -/opt/kde3/share/applications/kde/proxy.desktop -/opt/kde3/share/applications/kde/scsi.desktop -/opt/kde3/share/applications/kde/smbstatus.desktop -/opt/kde3/share/applications/kde/sound.desktop -/opt/kde3/share/applications/kde/spellchecking.desktop -/opt/kde3/share/applications/kde/style.desktop -/opt/kde3/share/applications/kde/useragent.desktop -/opt/kde3/share/applications/kde/xserver.desktop -/opt/kde3/share/applications/kde/cdinfo.desktop -/opt/kde3/share/applnk/.hidden -/opt/kde3/share/applnk/Settings/Information -/opt/kde3/share/applnk/Settings/LookNFeel -/opt/kde3/share/applnk/Settings/WebBrowsing/khtml_appearance.desktop -/opt/kde3/share/applnk/Settings/WebBrowsing/smb.desktop -/opt/kde3/share/apps/drkonqi -/opt/kde3/share/apps/kc* -/opt/kde3/share/apps/kdcop -/opt/kde3/share/apps/kdeprint* -/opt/kde3/share/apps/kdewizard -/opt/kde3/share/apps/kdisplay -/opt/kde3/share/apps/khelpcenter/searchhandlers/docbook.desktop -/opt/kde3/share/apps/khelpcenter -/opt/kde3/share/apps/kio* -/opt/kde3/share/apps/kjobviewer -/opt/kde3/share/apps/konsole -/opt/kde3/share/apps/khtml/kpartplugins -/opt/kde3/share/apps/kthememanager -/opt/kde3/share/apps/remoteview -/opt/kde3/share/apps/systemview -/opt/kde3/share/apps/kaccess -/opt/kde3/share/config.kcfg/klaunch.kcfg -/opt/kde3/share/config.kcfg/khelpcenter.kcfg -/opt/kde3/share/config.kcfg/keditbookmarks.kcfg -/opt/kde3/share/config.kcfg/launcherapplet.kcfg -/opt/kde3/share/config.kcfg/mediamanagersettings.kcfg -/opt/kde3/share/mimelnk/inode/system_directory.desktop -/opt/kde3/share/services/kded/remotedirnotify.desktop -/opt/kde3/share/services/kded/systemdirnotify.desktop -%if 0%{?with_hal} > 0 -/opt/kde3/share/services/media_propsdlgplugin.desktop - -%endif -%config(noreplace) /opt/kde3/share/config/kshorturifilterrc -%config(noreplace) /opt/kde3/share/config/kxkb_groups -/opt/kde3/share/desktop-directories -%exclude /opt/kde3/share/doc/HTML/en/kioslave -%dir /opt/kde3/share/fonts -%dir /opt/kde3/share/fonts/override -%verify(not md5 size mtime) /opt/kde3/share/fonts/override/fonts.dir -%dir /opt/kde3/share/icons/*/*/* -/opt/kde3/share/config.kcfg/kcm_useraccount.kcfg -/opt/kde3/share/config.kcfg/kcm_useraccount_pass.kcfg -%exclude /opt/kde3/share/icons/*/*/*/style.* -%exclude /opt/kde3/share/icons/*/*/*/looknfeel.* -%exclude /opt/kde3/share/icons/*/*/*/energy.* -%exclude /opt/kde3/share/icons/*/*/*/date.* -%exclude /opt/kde3/share/icons/*/*/*/filetypes.* -%exclude /opt/kde3/share/icons/*/*/*/personal.* -/opt/kde3/share/icons/*/*/*/a*.* -/opt/kde3/share/icons/*/*/*/b*.* -/opt/kde3/share/icons/*/*/*/c*.* -/opt/kde3/share/icons/*/*/*/d*.* -/opt/kde3/share/icons/*/*/*/f*.* -/opt/kde3/share/icons/*/*/*/g*.* -/opt/kde3/share/icons/*/*/*/help_index.* -/opt/kde3/share/icons/*/*/*/icons.* -/opt/kde3/share/icons/*/*/*/input_devices_settings.* -/opt/kde3/share/icons/*/*/*/kcmx.* -/opt/kde3/share/icons/*/*/*/kcmdf.* -/opt/kde3/share/icons/*/*/*/kbinaryclock.* -/opt/kde3/share/icons/*/*/apps/kcmcgi.* -/opt/kde3/share/icons/*/*/apps/kcmcolors.* -/opt/kde3/share/icons/*/*/apps/kcmcomponentchooser.* -/opt/kde3/share/icons/*/*/apps/kcmcrypto.* -/opt/kde3/share/icons/*/*/apps/kcmhistory.* -/opt/kde3/share/icons/*/*/apps/kcmjoystick.* -/opt/kde3/share/icons/*/*/apps/kcmkded.* -/opt/kde3/share/icons/*/*/apps/kcmkdnssd.* -/opt/kde3/share/icons/*/*/apps/kcmkhtml_filter.* -/opt/kde3/share/icons/*/*/apps/kcmlaunch.* -/opt/kde3/share/icons/*/*/apps/kcmmedia.* -/opt/kde3/share/icons/*/*/apps/kcmmouse.* -/opt/kde3/share/icons/*/*/apps/kcmnetpref.* -/opt/kde3/share/icons/*/*/apps/kcmnic.* -/opt/kde3/share/icons/*/*/apps/kcmperformance.* -/opt/kde3/share/icons/*/*/apps/kcmprivacy.* -/opt/kde3/share/icons/*/*/apps/kcmspellchecking.* -/opt/kde3/share/icons/*/*/*/ieee1394.* -/opt/kde3/share/icons/*/*/*/kdeprintfax.* -/opt/kde3/share/icons/*/*/*/kdisknav.* -/opt/kde3/share/icons/*/*/*/knetattach.* -/opt/kde3/share/icons/*/*/*/key_bindings.* -/opt/kde3/share/icons/*/*/*/keyboard_layout.* -/opt/kde3/share/icons/*/*/*/kfm_home.* -/opt/kde3/share/icons/*/*/*/khelpcenter.* -/opt/kde3/share/icons/*/*/*/kjobviewer.* -/opt/kde3/share/icons/*/*/*/konsole.* -/opt/kde3/share/icons/*/*/*/l*.* -/opt/kde3/share/icons/*/*/*/m*.* -/opt/kde3/share/icons/*/*/*/ne*.* -/opt/kde3/share/icons/*/*/*/opera.* -/opt/kde3/share/icons/*/*/*/r*.* -/opt/kde3/share/icons/*/*/*/s*.* -/opt/kde3/share/icons/*/*/*/usb.* -/opt/kde3/share/icons/*/*/*/vnc.* -/opt/kde3/share/icons/*/*/*/w*.* -/opt/kde3/share/icons/*/*/*/e*.* -/opt/kde3/share/icons/*/*/*/kcmdevices.* -/opt/kde3/share/icons/*/*/*/kcmdrkonqi.* -/opt/kde3/share/icons/*/*/*/kcmmemory.* -/opt/kde3/share/icons/*/*/*/kcmmidi.* -/opt/kde3/share/icons/*/*/*/kcmpartitions.* -/opt/kde3/share/icons/*/*/*/kcmpci.* -/opt/kde3/share/icons/*/*/*/kcmprocessor.* -/opt/kde3/share/icons/*/*/*/kcmscsi.* -/opt/kde3/share/icons/*/*/*/kthememgr.* -/opt/kde3/share/icons/*/*/*/kcontrol.* -/opt/kde3/share/icons/*/*/*/kxkb.* -/opt/kde3/share/icons/*/*/*/p*.* -/opt/kde3/share/icons/*/*/*/t*.* -/opt/kde3/share/icons/*/*/*/qtella.* -/opt/kde3/share/icons/*/*/*/x*.* +%verify(not mode) %attr(2755,root,nogroup) %{_tde_bindir}/kdesud +%verify(not mode) %attr(0755,root,man) %{_tde_bindir}/khc_indexbuilder +%{_tde_prefix}/env +%{_tde_bindir}/arts-start +%{_tde_bindir}/drkonqi +%{_tde_bindir}/kaccess +%{_tde_bindir}/kblankscrn.kss +%{_tde_bindir}/kbookmarkmerger +%{_tde_bindir}/kcminit +%{_tde_bindir}/kcminit_startup +%{_tde_modulesdir}/kcminit_startup.* +%{_tde_bindir}/kcontrol* +%{_tde_bindir}/kdeinstallktheme +%{_tde_bindir}/kdepasswd +%{_tde_bindir}/kdcop +%{_tde_bindir}/kdebugdialog +%{_tde_bindir}/kdeeject +%{_tde_bindir}/kdeprintfax +%{_tde_bindir}/keditfiletype +%{_tde_bindir}/khelpcenter +%{_tde_bindir}/kjobviewer +%{_tde_bindir}/kcheckrunning +%{_tde_bindir}/kpm +%{_tde_bindir}/krandom.kss +%{_tde_bindir}/krdb +%{_tde_bindir}/kxkb +%{_tde_bindir}/kdialog +%{_tde_bindir}/klocaldomainurifilterhelper +%{_tde_bindir}/kio_media_mounthelper +%{_tde_bindir}/knetattach +%{_tde_bindir}/ktrash +%{_tde_bindir}/khc_docbookdig.pl +%{_tde_bindir}/khc_mansearch.pl +%{_tde_bindir}/khc_htdig.pl +%{_tde_bindir}/khc_htsearch.pl +%{_tde_bindir}/kapplymousetheme +%{_tde_bindir}/kio_system_documenthelper +%{_tde_bindir}/runupdater +%{_tde_bindir}/kstart +%{_tde_bindir}/ksystraycmd +%{_tde_modulesdir}/cursorthumbnail.* +%{_tde_modulesdir}/htmlthumbnail.* +%{_tde_modulesdir}/imagethumbnail.* +%{_tde_modulesdir}/kcm_a* +%{_tde_modulesdir}/kcm_bell* +%{_tde_modulesdir}/kcm_keyboard* +%{_tde_modulesdir}/kcm_c* +%{_tde_modulesdir}/kcm_d* +%{_tde_modulesdir}/kcm_e* +%{_tde_modulesdir}/kcm_f* +%{_tde_modulesdir}/kcm_h* +%{_tde_modulesdir}/kcm_i* +%{_tde_modulesdir}/kcm_l* +%{_tde_modulesdir}/kcm_nic.* +%{_tde_modulesdir}/kcm_p* +%{_tde_modulesdir}/kcm_smserver.* +%{_tde_modulesdir}/kcm_spellchecking.* +%{_tde_modulesdir}/kcm_style.* +%{_tde_modulesdir}/kcm_usb.* +%{_tde_modulesdir}/khelpcenter.* +%{_tde_modulesdir}/kcm_xinerama.* +%{_tde_modulesdir}/kxkb.* +%{_tde_modulesdir}/djvuthumbnail.* +%{_tde_modulesdir}/kaccess.* +%{_tde_modulesdir}/kcminit.* +%{_tde_modulesdir}/kcm_nsplugins.* +%{_tde_modulesdir}/kcontrol.* +%{_tde_modulesdir}/keditbookmarks.* +%{_tde_modulesdir}/kfmclient.* +%{_tde_modulesdir}/kjobviewer.* +%{_tde_modulesdir}/kprinter.* +%{_tde_modulesdir}/libkdeprint_part.* +%{_tde_modulesdir}/libkshorturifilter.* +%{_tde_modulesdir}/libkuri* +%{_tde_modulesdir}/libkonsolepart.* +%{_tde_modulesdir}/textthumbnail.* +%{_tde_modulesdir}/kcm_joystick.* +%{_tde_modulesdir}/kcm_useraccount.* +%{_tde_modulesdir}/kcontroledit.* +%{_tde_modulesdir}/kded_kwrited.* +%{_tde_modulesdir}/kstyle_keramik_config.* +%{_tde_modulesdir}/libkmanpart.* +%{_tde_modulesdir}/liblocaldomainurifilter.* +%{_tde_modulesdir}/runupdater.* +%{_tde_libdir}/libkdeinit_runupdater.so +%{_tde_libdir}/libkdeinit_kaccess.so +%{_tde_libdir}/libkdeinit_kcminit.so +%{_tde_libdir}/libkdeinit_kcminit_startup.so +%{_tde_libdir}/libkdeinit_kcontrol.so +%{_tde_libdir}/libkdeinit_kcontroledit.so +%{_tde_libdir}/libkdeinit_keditbookmarks.so +%{_tde_libdir}/libkdeinit_kfmclient.so +%{_tde_libdir}/libkdeinit_khelpcenter.so +%{_tde_libdir}/libkdeinit_kjobviewer.so +%{_tde_libdir}/libkdeinit_kxkb.so +%{_tde_modulesdir}/libnsplugin.* +%{_tde_modulesdir}/kded_remotedirnotify.* +%{_tde_modulesdir}/kded_systemdirnotify.* +%{_tde_modulesdir}/libkhtmlkttsdplugin.* +%{_tde_modulesdir}/kcm_media.la +%{_tde_modulesdir}/kcm_media.so +%{_tde_modulesdir}/kded_homedirnotify.la +%{_tde_modulesdir}/kded_homedirnotify.so +%{_tde_modulesdir}/kded_medianotifier.la +%{_tde_modulesdir}/kded_medianotifier.so +%{_tde_modulesdir}/kcm_kded.* +%{_tde_modulesdir}/kcm_kdnssd.* +%{_tde_modulesdir}/kcm_keyboard.* +%{_tde_modulesdir}/kcm_keys.* +%{_tde_modulesdir}/kcm_kio.* +%{_tde_modulesdir}/kcm_knotify.* +%{_tde_modulesdir}/kcm_konq.* +%{_tde_modulesdir}/kcm_konqhtml.* +%{_tde_modulesdir}/kcm_kthememanager.* +%{_tde_modulesdir}/kcm_kurifilt.* +%{_tde_applicationsdir}/kde/khtml_filter.desktop +%{_tde_applicationsdir}/kde/media.desktop +%{_tde_applicationsdir}/kde/joystick.desktop +%{_tde_applicationsdir}/kde/kcm_useraccount.desktop +%{_tde_applicationsdir}/kde/kdepasswd.desktop +%{_tde_applicationsdir}/kde/kthememanager.desktop +%{_tde_applicationsdir}/kde/Help.desktop +%{_tde_applicationsdir}/kde/KControl.desktop +%{_tde_applicationsdir}/kde/arts.desktop +%{_tde_applicationsdir}/kde/bell.desktop +%{_tde_applicationsdir}/kde/cache.desktop +%{_tde_applicationsdir}/kde/colors.desktop +%{_tde_applicationsdir}/kde/componentchooser.desktop +%{_tde_applicationsdir}/kde/cookies.desktop +%{_tde_applicationsdir}/kde/crypto.desktop +%{_tde_applicationsdir}/kde/display.desktop +%{_tde_applicationsdir}/kde/dma.desktop +%{_tde_applicationsdir}/kde/ebrowsing.desktop +%{_tde_applicationsdir}/kde/filebrowser.desktop +%{_tde_applicationsdir}/kde/filetypes.desktop +%{_tde_applicationsdir}/kde/fonts.desktop +%{_tde_applicationsdir}/kde/clock.desktop +%{_tde_applicationsdir}/kde/icons.desktop +%{_tde_applicationsdir}/kde/interrupts.desktop +%{_tde_applicationsdir}/kde/installktheme.desktop +%{_tde_applicationsdir}/kde/ioports.desktop +%{_tde_applicationsdir}/kde/ioslaveinfo.desktop +%{_tde_applicationsdir}/kde/kcmaccess.desktop +%{_tde_applicationsdir}/kde/kcmcgi.desktop +%{_tde_applicationsdir}/kde/kcmcss.desktop +%{_tde_applicationsdir}/kde/kcmhistory.desktop +%{_tde_applicationsdir}/kde/kcmkded.desktop +%{_tde_applicationsdir}/kde/kcmlaunch.desktop +%{_tde_applicationsdir}/kde/kcm_kdnssd.desktop +%{_tde_applicationsdir}/kde/kcmnotify.desktop +%{_tde_applicationsdir}/kde/kcmperformance.desktop +%{_tde_applicationsdir}/kde/kcmusb.desktop +%{_tde_applicationsdir}/kde/kdeprintfax.desktop +%{_tde_applicationsdir}/kde/keyboard.desktop +%{_tde_applicationsdir}/kde/keyboard_layout.desktop +%{_tde_applicationsdir}/kde/keys.desktop +%{_tde_applicationsdir}/kde/kfmclient.desktop +%{_tde_applicationsdir}/kde/kfmclient_dir.desktop +%{_tde_applicationsdir}/kde/kfmclient_html.desktop +%{_tde_applicationsdir}/kde/kfmclient_war.desktop +%{_tde_applicationsdir}/kde/khtml_behavior.desktop +%{_tde_applicationsdir}/kde/khtml_fonts.desktop +%{_tde_applicationsdir}/kde/khtml_java_js.desktop +%{_tde_applicationsdir}/kde/khtml_plugins.desktop +%{_tde_applicationsdir}/kde/kjobviewer.desktop +%{_tde_applicationsdir}/kde/lanbrowser.desktop +%{_tde_applicationsdir}/kde/language.desktop +%{_tde_applicationsdir}/kde/memory.desktop +%{_tde_applicationsdir}/kde/mouse.desktop +%{_tde_applicationsdir}/kde/netpref.desktop +%{_tde_applicationsdir}/kde/nic.desktop +%{_tde_applicationsdir}/kde/partitions.desktop +%{_tde_applicationsdir}/kde/pci.desktop +%{_tde_applicationsdir}/kde/printers.desktop +%{_tde_applicationsdir}/kde/privacy.desktop +%{_tde_applicationsdir}/kde/processor.desktop +%{_tde_applicationsdir}/kde/proxy.desktop +%{_tde_applicationsdir}/kde/scsi.desktop +%{_tde_applicationsdir}/kde/smbstatus.desktop +%{_tde_applicationsdir}/kde/sound.desktop +%{_tde_applicationsdir}/kde/spellchecking.desktop +%{_tde_applicationsdir}/kde/style.desktop +%{_tde_applicationsdir}/kde/useragent.desktop +%{_tde_applicationsdir}/kde/xserver.desktop +%{_tde_applicationsdir}/kde/cdinfo.desktop +%{_tde_appsdir}/.hidden +%{_tde_appsdir}/Settings/Information +%{_tde_appsdir}/Settings/LookNFeel +%{_tde_appsdir}/Settings/WebBrowsing/khtml_appearance.desktop +%{_tde_appsdir}/Settings/WebBrowsing/smb.desktop +%{_tde_datadir}/drkonqi +%{_tde_datadir}/kc* +%{_tde_datadir}/kdcop +%{_tde_datadir}/kdeprint* +%{_tde_datadir}/kdewizard +%{_tde_datadir}/kdisplay +%{_tde_datadir}/khelpcenter/searchhandlers/docbook.desktop +%{_tde_datadir}/khelpcenter +%{_tde_datadir}/kio* +%{_tde_datadir}/kjobviewer +%{_tde_datadir}/konsole +%{_tde_datadir}/khtml/kpartplugins +%{_tde_datadir}/kthememanager +%{_tde_datadir}/remoteview +%{_tde_datadir}/systemview +%{_tde_datadir}/kaccess +%{_tde_configdir}.kcfg/klaunch.kcfg +%{_tde_configdir}.kcfg/khelpcenter.kcfg +%{_tde_configdir}.kcfg/keditbookmarks.kcfg +%{_tde_configdir}.kcfg/launcherapplet.kcfg +%{_tde_configdir}.kcfg/mediamanagersettings.kcfg +%{_tde_mimedir}/inode/system_directory.desktop +%{_tde_servicesdir}/kded/remotedirnotify.desktop +%{_tde_servicesdir}/kded/systemdirnotify.desktop +%config(noreplace) %{_tde_configdir}/kshorturifilterrc +%config(noreplace) %{_tde_configdir}/kxkb_groups +%{_tde_sharedir}/desktop-directories +%exclude %{_tde_htmldir}/en/kioslave +%dir %{_tde_sharedir}/fonts +%dir %{_tde_sharedir}/fonts/override +%verify(not md5 size mtime) %{_tde_sharedir}/fonts/override/fonts.dir +%dir %{_tde_iconsdir}/*/*/* +%{_tde_configdir}.kcfg/kcm_useraccount.kcfg +%{_tde_configdir}.kcfg/kcm_useraccount_pass.kcfg +%exclude %{_tde_iconsdir}/*/*/*/style.* +%exclude %{_tde_iconsdir}/*/*/*/looknfeel.* +%exclude %{_tde_iconsdir}/*/*/*/energy.* +%exclude %{_tde_iconsdir}/*/*/*/date.* +%exclude %{_tde_iconsdir}/*/*/*/filetypes.* +%exclude %{_tde_iconsdir}/*/*/*/personal.* +%{_tde_iconsdir}/*/*/*/a*.* +%{_tde_iconsdir}/*/*/*/b*.* +%{_tde_iconsdir}/*/*/*/c*.* +%{_tde_iconsdir}/*/*/*/d*.* +%{_tde_iconsdir}/*/*/*/f*.* +%{_tde_iconsdir}/*/*/*/g*.* +%{_tde_iconsdir}/*/*/*/help_index.* +%{_tde_iconsdir}/*/*/*/icons.* +%{_tde_iconsdir}/*/*/*/input_devices_settings.* +%{_tde_iconsdir}/*/*/*/kcmx.* +%{_tde_iconsdir}/*/*/*/kcmdf.* +%{_tde_iconsdir}/*/*/*/kbinaryclock.* +%{_tde_iconsdir}/*/*/apps/kcmcgi.* +%{_tde_iconsdir}/*/*/apps/kcmcolors.* +%{_tde_iconsdir}/*/*/apps/kcmcomponentchooser.* +%{_tde_iconsdir}/*/*/apps/kcmcrypto.* +%{_tde_iconsdir}/*/*/apps/kcmhistory.* +%{_tde_iconsdir}/*/*/apps/kcmjoystick.* +%{_tde_iconsdir}/*/*/apps/kcmkded.* +%{_tde_iconsdir}/*/*/apps/kcmkdnssd.* +%{_tde_iconsdir}/*/*/apps/kcmkhtml_filter.* +%{_tde_iconsdir}/*/*/apps/kcmlaunch.* +%{_tde_iconsdir}/*/*/apps/kcmmedia.* +%{_tde_iconsdir}/*/*/apps/kcmmouse.* +%{_tde_iconsdir}/*/*/apps/kcmnetpref.* +%{_tde_iconsdir}/*/*/apps/kcmnic.* +%{_tde_iconsdir}/*/*/apps/kcmperformance.* +%{_tde_iconsdir}/*/*/apps/kcmprivacy.* +%{_tde_iconsdir}/*/*/apps/kcmspellchecking.* +%{_tde_iconsdir}/*/*/*/ieee1394.* +%{_tde_iconsdir}/*/*/*/kdeprintfax.* +%{_tde_iconsdir}/*/*/*/kdisknav.* +%{_tde_iconsdir}/*/*/*/knetattach.* +%{_tde_iconsdir}/*/*/*/key_bindings.* +%{_tde_iconsdir}/*/*/*/keyboard_layout.* +%{_tde_iconsdir}/*/*/*/kfm_home.* +%{_tde_iconsdir}/*/*/*/khelpcenter.* +%{_tde_iconsdir}/*/*/*/kjobviewer.* +%{_tde_iconsdir}/*/*/*/konsole.* +%{_tde_iconsdir}/*/*/*/l*.* +%{_tde_iconsdir}/*/*/*/m*.* +%{_tde_iconsdir}/*/*/*/ne*.* +%{_tde_iconsdir}/*/*/*/opera.* +%{_tde_iconsdir}/*/*/*/r*.* +%{_tde_iconsdir}/*/*/*/s*.* +%{_tde_iconsdir}/*/*/*/usb.* +%{_tde_iconsdir}/*/*/*/vnc.* +%{_tde_iconsdir}/*/*/*/w*.* +%{_tde_iconsdir}/*/*/*/e*.* +%{_tde_iconsdir}/*/*/*/kcmdevices.* +%{_tde_iconsdir}/*/*/*/kcmdrkonqi.* +%{_tde_iconsdir}/*/*/*/kcmmemory.* +%{_tde_iconsdir}/*/*/*/kcmmidi.* +%{_tde_iconsdir}/*/*/*/kcmpartitions.* +%{_tde_iconsdir}/*/*/*/kcmpci.* +%{_tde_iconsdir}/*/*/*/kcmprocessor.* +%{_tde_iconsdir}/*/*/*/kcmscsi.* +%{_tde_iconsdir}/*/*/*/kthememgr.* +%{_tde_iconsdir}/*/*/*/kcontrol.* +%{_tde_iconsdir}/*/*/*/kxkb.* +%{_tde_iconsdir}/*/*/*/p*.* +%{_tde_iconsdir}/*/*/*/t*.* +%{_tde_iconsdir}/*/*/*/qtella.* +%{_tde_iconsdir}/*/*/*/x*.* # these have no PNG -/opt/kde3/share/icons/*/scalable/apps/hardware.svgz -/opt/kde3/share/icons/*/scalable/apps/kate2.svgz -/opt/kde3/share/icons/*/scalable/apps/kwrite2.svgz -/opt/kde3/share/icons/*/scalable/apps/openoffice.svgz -/opt/kde3/share/icons/*/scalable/apps/quicktime.svgz -/opt/kde3/share/locale -/opt/kde3/share/mimelnk/application/x-konsole.desktop -/opt/kde3/share/mimelnk/application/x-ktheme.desktop -/opt/kde3/share/mimelnk/application/x-smb-server.desktop -/opt/kde3/share/mimelnk/print -/opt/kde3/share/services/textthumbnail.desktop -/opt/kde3/share/services/htmlthumbnail.desktop -/opt/kde3/share/services/ka*.desktop -/opt/kde3/share/services/kdeprint_part.desktop -/opt/kde3/share/services/konsolepart.desktop -/opt/kde3/share/services/konsole-script.desktop -/opt/kde3/share/services/kshorturifilter.desktop -/opt/kde3/share/services/ku*.desktop -/opt/kde3/share/services/searchproviders -/opt/kde3/share/services/useragentstrings -/opt/kde3/share/services/imagethumbnail.desktop -/opt/kde3/share/services/kxkb.desktop -/opt/kde3/share/services/kmanpart.desktop -/opt/kde3/share/services/localdomainurifilter.desktop -/opt/kde3/share/services/kwrited.desktop -/opt/kde3/share/services/djvuthumbnail.desktop -/opt/kde3/share/services/kded/kwrited.desktop -/opt/kde3/share/servicetypes/terminalemulator.desktop -/opt/kde3/share/servicetypes/kateplugin.desktop -/opt/kde3/share/servicetypes/findpart.desktop -/opt/kde3/share/servicetypes/searchprovider.desktop -/opt/kde3/share/servicetypes/thumbcreator.desktop -/opt/kde3/share/servicetypes/uasprovider.desktop -%exclude /opt/kde3/share/sounds/KDE_Close_Window* -%exclude /opt/kde3/share/sounds/KDE_Dialog* -%exclude /opt/kde3/share/sounds/KDE_Desktop* -%exclude /opt/kde3/share/sounds/KDE_Logout* -%exclude /opt/kde3/share/sounds/KDE_Startup* -%exclude /opt/kde3/share/sounds/KDE_Window* -/opt/kde3/share/sounds -/opt/kde3/share/templates -/opt/kde3/share/services/khelpcenter.desktop -/opt/kde3/bin/keditbookmarks -/opt/kde3/bin/kfm* -/opt/kde3/share/apps/kbookmark -/opt/kde3/share/apps/keditbookmarks -/opt/kde3/share/icons/*/*/*/keditbookmarks.* -/opt/kde3/share/icons/*/*/*/kfm.* -/opt/kde3/share/icons/*/*/*/konqueror.* -/opt/kde3/share/services/konq* -/opt/kde3/share/servicetypes/konq* -/opt/kde3/share/services/cursorthumbnail.desktop -/opt/kde3/%_lib/kde3/kcm_randr.* -/opt/kde3/bin/krandrtray -/opt/kde3/share/applications/kde/krandrtray.desktop -/opt/kde3/%_lib/kde3/kded_mediamanager.* -/opt/kde3/%_lib/kde3/kfile_media.* -/opt/kde3/%_lib/kde3/kfile_trash.* -/opt/kde3/share/applications/kde/devices.desktop -/opt/kde3/share/applications/kde/knetattach.desktop -/opt/kde3/share/applications/kde/opengl.desktop -/opt/kde3/share/icons/*/*/*/kcmopengl.* -/opt/kde3/share/mimelnk/media -/opt/kde3/share/services/kded/mediamanager.desktop -/opt/kde3/share/services/kded/homedirnotify.desktop -/opt/kde3/share/services/kded/medianotifier.desktop -/opt/kde3/share/services/kfile_media.desktop -/opt/kde3/share/services/kfile_trash.desktop -/opt/kde3/share/services/kfile_trash_system.desktop -/opt/kde3/share/mimelnk/fonts/package.desktop -/opt/kde3/%_lib/kde3/exrthumbnail.* -/opt/kde3/share/services/exrthumbnail.desktop -%dir /opt/kde3/share/mimelnk/fonts -/opt/kde3/bin/kfontinst -/opt/kde3/%_lib/kde3/fontthumbnail.* -/opt/kde3/%_lib/kde3/kfile_font.* -/opt/kde3/%_lib/kde3/libkfontviewpart.* -%dir /opt/kde3/share/apps/kfontview -/opt/kde3/share/apps/kfontview/kfontviewpart.rc -/opt/kde3/share/applications/kde/kcmfontinst.desktop -/opt/kde3/share/mimelnk/fonts/folder.desktop -/opt/kde3/share/mimelnk/fonts/system-folder.desktop -/opt/kde3/share/services/fontthumbnail.desktop -/opt/kde3/share/services/kfile_font.desktop -/opt/kde3/share/services/kfontviewpart.desktop +%{_tde_iconsdir}/*/scalable/apps/hardware.svgz +%{_tde_iconsdir}/*/scalable/apps/kate2.svgz +%{_tde_iconsdir}/*/scalable/apps/kwrite2.svgz +%{_tde_iconsdir}/*/scalable/apps/openoffice.svgz +%{_tde_iconsdir}/*/scalable/apps/quicktime.svgz +%{_tde_sharedir}/locale +%{_tde_mimedir}/application/x-konsole.desktop +%{_tde_mimedir}/application/x-ktheme.desktop +%{_tde_mimedir}/application/x-smb-server.desktop +%{_tde_mimedir}/print +%{_tde_servicesdir}/textthumbnail.desktop +%{_tde_servicesdir}/htmlthumbnail.desktop +%{_tde_servicesdir}/ka*.desktop +%{_tde_servicesdir}/kdeprint_part.desktop +%{_tde_servicesdir}/konsolepart.desktop +%{_tde_servicesdir}/konsole-script.desktop +%{_tde_servicesdir}/kshorturifilter.desktop +%{_tde_servicesdir}/ku*.desktop +%{_tde_servicesdir}/searchproviders +%{_tde_servicesdir}/useragentstrings +%{_tde_servicesdir}/imagethumbnail.desktop +%{_tde_servicesdir}/kxkb.desktop +%{_tde_servicesdir}/kmanpart.desktop +%{_tde_servicesdir}/localdomainurifilter.desktop +%{_tde_servicesdir}/kwrited.desktop +%{_tde_servicesdir}/djvuthumbnail.desktop +%{_tde_servicesdir}/kded/kwrited.desktop +%{_tde_servicetypesdir}/terminalemulator.desktop +%{_tde_servicetypesdir}/kateplugin.desktop +%{_tde_servicetypesdir}/findpart.desktop +%{_tde_servicetypesdir}/searchprovider.desktop +%{_tde_servicetypesdir}/thumbcreator.desktop +%{_tde_servicetypesdir}/uasprovider.desktop +%exclude %{_tde_sounddir}/KDE_Close_Window* +%exclude %{_tde_sounddir}/KDE_Dialog* +%exclude %{_tde_sounddir}/KDE_Desktop* +%exclude %{_tde_sounddir}/KDE_Logout* +%exclude %{_tde_sounddir}/KDE_Startup* +%exclude %{_tde_sounddir}/KDE_Window* +%{_tde_sounddir} +%{_tde_sharedir}/templates +%{_tde_servicesdir}/khelpcenter.desktop +%{_tde_bindir}/keditbookmarks +%{_tde_bindir}/kfm* +%{_tde_datadir}/kbookmark +%{_tde_datadir}/keditbookmarks +%{_tde_iconsdir}/*/*/*/keditbookmarks.* +%{_tde_iconsdir}/*/*/*/kfm.* +%{_tde_iconsdir}/*/*/*/konqueror.* +%{_tde_servicesdir}/konq* +%{_tde_servicetypesdir}/konq* +%{_tde_servicesdir}/cursorthumbnail.desktop +%{_tde_modulesdir}/kcm_randr.* +%{_tde_bindir}/krandrtray +%{_tde_applicationsdir}/kde/krandrtray.desktop +%{_tde_modulesdir}/kded_mediamanager.* +%{_tde_modulesdir}/kfile_media.* +%{_tde_modulesdir}/kfile_trash.* +%{_tde_applicationsdir}/kde/devices.desktop +%{_tde_applicationsdir}/kde/knetattach.desktop +%{_tde_applicationsdir}/kde/opengl.desktop +%{_tde_iconsdir}/*/*/*/kcmopengl.* +%{_tde_mimedir}/media +%{_tde_servicesdir}/kded/mediamanager.desktop +%{_tde_servicesdir}/kded/homedirnotify.desktop +%{_tde_servicesdir}/kded/medianotifier.desktop +%{_tde_servicesdir}/kfile_media.desktop +%{_tde_servicesdir}/kfile_trash.desktop +%{_tde_servicesdir}/kfile_trash_system.desktop +%{_tde_mimedir}/fonts/package.desktop +%{_tde_modulesdir}/exrthumbnail.* +%{_tde_servicesdir}/exrthumbnail.desktop +%dir %{_tde_mimedir}/fonts +%{_tde_bindir}/kfontinst +%{_tde_modulesdir}/fontthumbnail.* +%{_tde_modulesdir}/kfile_font.* +%{_tde_modulesdir}/libkfontviewpart.* +%dir %{_tde_datadir}/kfontview +%{_tde_datadir}/kfontview/kfontviewpart.rc +%{_tde_applicationsdir}/kde/kcmfontinst.desktop +%{_tde_mimedir}/fonts/folder.desktop +%{_tde_mimedir}/fonts/system-folder.desktop +%{_tde_servicesdir}/fontthumbnail.desktop +%{_tde_servicesdir}/kfile_font.desktop +%{_tde_servicesdir}/kfontviewpart.desktop %_mandir/man1/* -%if %suse_version < 1001 -%config(noreplace) /etc/security/fileshare.conf -/opt/kde3/bin/filesharelist -%verify(not mode) /opt/kde3/bin/fileshareset -%endif %{_mandir}/man8/kcheckpass.8.gz -%doc %lang(en) /opt/kde3/share/doc/HTML/en/kcontrol -%doc %lang(en) /opt/kde3/share/doc/HTML/en/kdcop -%doc %lang(en) /opt/kde3/share/doc/HTML/en/kdebugdialog -%doc %lang(en) /opt/kde3/share/doc/HTML/en/kdeprint -%doc %lang(en) /opt/kde3/share/doc/HTML/en/kdesu -%exclude /opt/kde3/share/doc/HTML/en/khelpcenter/userguide -%exclude /opt/kde3/share/doc/HTML/en/khelpcenter/visualdict -%doc %lang(en) /opt/kde3/share/doc/HTML/en/khelpcenter -%doc %lang(en) /opt/kde3/share/doc/HTML/en/knetattach -/opt/kde3/share/applications/kde/desktoppath.desktop +%doc %lang(en) %{_tde_htmldir}/en/kcontrol +%doc %lang(en) %{_tde_htmldir}/en/kdcop +%doc %lang(en) %{_tde_htmldir}/en/kdebugdialog +%doc %lang(en) %{_tde_htmldir}/en/kdeprint +%doc %lang(en) %{_tde_htmldir}/en/kdesu +%exclude %{_tde_htmldir}/en/khelpcenter/userguide +%exclude %{_tde_htmldir}/en/khelpcenter/visualdict +%doc %lang(en) %{_tde_htmldir}/en/khelpcenter +%doc %lang(en) %{_tde_htmldir}/en/knetattach +%{_tde_applicationsdir}/kde/desktoppath.desktop %files samba %defattr(-,root,root) -/opt/kde3/%_lib/kde3/kcm_samba.* -/opt/kde3/%_lib/kde3/kio_smb.* -/opt/kde3/share/services/smb.protocol -%dir /opt/kde3/share/apps/konqueror/dirtree -%dir /opt/kde3/share/apps/konqueror/dirtree/remote -/opt/kde3/share/apps/konqueror/dirtree/remote/smb-network.desktop -/opt/kde3/share/mimelnk/application/x-smb-workgroup.desktop +%{_tde_modulesdir}/kcm_samba.* +%{_tde_modulesdir}/kio_smb.* +%{_tde_servicesdir}/smb.protocol +%dir %{_tde_datadir}/konqueror/dirtree +%dir %{_tde_datadir}/konqueror/dirtree/remote +%{_tde_datadir}/konqueror/dirtree/remote/smb-network.desktop +%{_tde_mimedir}/application/x-smb-workgroup.desktop %files kdm %defattr(-,root,root) -%dir /opt/kde3/share/doc/kdm -/opt/kde3/bin/genkdmconf -/opt/kde3/bin/kdm* -/opt/kde3/bin/krootimage -/opt/kde3/share/apps/kdm -/opt/kde3/%_lib/kde3/kgreet_pam.* -%doc /opt/kde3/share/doc/kdm/README -%if %suse_version < 1020 -%config /etc/pam.d/xdm-np -%endif -%dir /opt/kde3/share/config/kdm -%config(noreplace) /opt/kde3/share/config/kdm/kdmrc -%config(noreplace) /opt/kde3/share/config/kdm/backgroundrc -%if %suse_version < 1010 -%config /opt/kde3/share/config/kdm/Xaccess -%config /opt/kde3/share/config/kdm/Xreset -%config /opt/kde3/share/config/kdm/Xresources -%config /opt/kde3/share/config/kdm/Xsession -%config /opt/kde3/share/config/kdm/Xsetup -%config /opt/kde3/share/config/kdm/Xstartup -%config /opt/kde3/share/config/kdm/Xwilling -%endif +%dir %{_tde_docdir}/kdm +%{_tde_bindir}/genkdmconf +%{_tde_bindir}/kdm* +%{_tde_bindir}/krootimage +%{_tde_datadir}/kdm +%{_tde_modulesdir}/kgreet_pam.* +%doc %{_tde_docdir}/kdm/README +%dir %{_tde_configdir}/kdm +%config(noreplace) %{_tde_configdir}/kdm/kdmrc +%config(noreplace) %{_tde_configdir}/kdm/backgroundrc %ghost /var/run/xdmctl -/usr/sbin/rckdm -/opt/kde3/share/applications/kde/kdm.desktop -/opt/kde3/share/icons/*/*/*/kdmconfig.* -/opt/kde3/%_lib/kde3/kcm_kdm.* -%doc %lang(en) /opt/kde3/share/doc/HTML/en/kdm +# kdm has not been renamed. +%{_sbindir}/rckdm +%{_tde_applicationsdir}/kde/kdm.desktop +%{_tde_iconsdir}/*/*/*/kdmconfig.* +%{_tde_modulesdir}/kcm_kdm.* +%doc %lang(en) %{_tde_htmldir}/en/kdm %files session %defattr(-,root,root) -%if %suse_version > 1010 -/usr/bin/kde -/usr/bin/startkde3 -%else -/usr/X11R6/bin/kde -%endif -%if %suse_version < 1030 -%dir /usr/share/xsessions -%endif +/usr/bin/tde +/usr/bin/starttde /usr/share/xsessions/kde.desktop %files extra %defattr(-,root,root) -/opt/kde3/bin/kpersonalizer -/opt/kde3/share/applications/kde/kpersonalizer.desktop -/opt/kde3/share/apps/kpersonalizer -/opt/kde3/share/icons/*/*/*/kpersonalizer.* -/opt/kde3/bin/kfontview -/opt/kde3/share/applications/kde/kfontview.desktop -/opt/kde3/share/apps/kfontview/kfontviewui.rc -/opt/kde3/%_lib/kde3/khotkeys_arts.* +%{_tde_bindir}/kpersonalizer +%{_tde_applicationsdir}/kde/kpersonalizer.desktop +%{_tde_datadir}/kpersonalizer +%{_tde_iconsdir}/*/*/*/kpersonalizer.* +%{_tde_bindir}/kfontview +%{_tde_applicationsdir}/kde/kfontview.desktop +%{_tde_datadir}/kfontview/kfontviewui.rc +%{_tde_modulesdir}/khotkeys_arts.* %files nsplugin %defattr(-,root,root) -/opt/kde3/bin/nsplugin* -/opt/kde3/share/apps/plugin/nspluginpart.rc -%dir /opt/kde3/share/applnk/Settings/WebBrowsing -/opt/kde3/share/applnk/Settings/WebBrowsing/nsplugin.desktop +%{_tde_bindir}/nsplugin* +%{_tde_datadir}/plugin/nspluginpart.rc +%dir %{_tde_appsdir}/Settings/WebBrowsing +%{_tde_appsdir}/Settings/WebBrowsing/nsplugin.desktop %files devel %defattr(-,root,root) -/opt/kde3/include/* -/opt/kde3/%_lib/libkonq.so -/opt/kde3/%_lib/libkdecorations.so -/opt/kde3/%_lib/libkonqsidebarplugin.so -/opt/kde3/%_lib/libkickermain.so -/opt/kde3/%_lib/libtask*.so -/opt/kde3/%_lib/libksgrd.so -%if %suse_version > 1010 -/opt/kde3/%_lib/libkickoffsearch_interfaces.so -/opt/kde3/%_lib/libkickoffsearch_interfaces.la -%endif -/opt/kde3/%_lib/libksplashthemes.so -/opt/kde3/%_lib/libkateinterfaces.so -/opt/kde3/%_lib/libkateutils.so -/opt/kde3/%_lib/libkhotkeys_shared.so -/opt/kde3/%_lib/libkateinterfaces.la -/opt/kde3/%_lib/libkateutils.la -/opt/kde3/%_lib/libkdecorations.la -/opt/kde3/%_lib/libkfontinst.la -/opt/kde3/%_lib/libkfontinst.so -/opt/kde3/%_lib/libkhotkeys_shared.la -/opt/kde3/%_lib/libkickermain.la -/opt/kde3/%_lib/libkonq.la -/opt/kde3/%_lib/libkonqsidebarplugin.la -/opt/kde3/%_lib/libksgrd.la -/opt/kde3/%_lib/libksplashthemes.la -/opt/kde3/%_lib/libtaskbar.la -/opt/kde3/%_lib/libtaskmanager.la -/opt/kde3/%_lib/libkasbar.so -/opt/kde3/%_lib/libkasbar.la +%{_tde_includedir}/* +%{_tde_libdir}/libkonq.so +%{_tde_libdir}/libkdecorations.so +%{_tde_libdir}/libkonqsidebarplugin.so +%{_tde_libdir}/libkickermain.so +%{_tde_libdir}/libtask*.so +%{_tde_libdir}/libksgrd.so +%{_tde_libdir}/libkickoffsearch_interfaces.so +%{_tde_libdir}/libkickoffsearch_interfaces.la +%{_tde_libdir}/libksplashthemes.so +%{_tde_libdir}/libkateinterfaces.so +%{_tde_libdir}/libkateutils.so +%{_tde_libdir}/libkhotkeys_shared.so +%{_tde_libdir}/libkateinterfaces.la +%{_tde_libdir}/libkateutils.la +%{_tde_libdir}/libkdecorations.la +%{_tde_libdir}/libkfontinst.la +%{_tde_libdir}/libkfontinst.so +%{_tde_libdir}/libkhotkeys_shared.la +%{_tde_libdir}/libkickermain.la +%{_tde_libdir}/libkonq.la +%{_tde_libdir}/libkonqsidebarplugin.la +%{_tde_libdir}/libksgrd.la +%{_tde_libdir}/libksplashthemes.la +%{_tde_libdir}/libtaskbar.la +%{_tde_libdir}/libtaskmanager.la +%{_tde_libdir}/libkasbar.so +%{_tde_libdir}/libkasbar.la %files ksysguardd %defattr(-,root,root) %dir /etc/slp.reg.d -#%if %suse_version < 1020 -/usr/bin/ksysguardd -/opt/kde3/bin/ksysguardd +%{_bindir}/ksysguardd +%{_tde_bindir}/ksysguardd %config(noreplace) /etc/ksysguarddrc -#%endif -#%if %suse_version > 1030 -#/usr/bin/ksysguardd -#%config(noreplace) /etc/ksysguarddrc -#%endif /etc/init.d/ksysguardd -/usr/sbin/rcksysguardd +%{_sbindir}/rcksysguardd %config(noreplace) /etc/slp.reg.d/* -%if %suse_version > 1010 -%if %suse_version < 1140 - -%files beagle -%defattr(-,root,root) -/opt/kde3/bin/khc_beagle_search.pl -/opt/kde3/bin/khc_beagle_index.pl -/opt/kde3/share/apps/khelpcenter/searchhandlers/docbook.desktop -/opt/kde3/%_lib/kde3/kickoffsearch_beagle.* -/opt/kde3/share/services/kickoffsearch_beagle.desktop -%endif -%endif - %files -n fileshareset %defattr(-,root,root) %config(noreplace) /etc/security/fileshare.conf @@ -1577,275 +1390,270 @@ rm -rf $RPM_BUILD_ROOT %files apps %defattr(-,root,root) -/opt/kde3/bin/konsole* -/opt/kde3/%_lib/kde3/konsole.* -/opt/kde3/%_lib/kde3/kcm_konsole.* -/opt/kde3/%_lib/libkdeinit_konsole.so -/opt/kde3/share/applications/kde/konsole.desktop -/opt/kde3/share/applications/kde/konsolesu.desktop -%doc %lang(en) /opt/kde3/share/doc/HTML/en/konsole -/opt/kde3/share/applications/kde/Home.desktop -/opt/kde3/%_lib/libkdeinit_konqueror.so -/opt/kde3/share/apps/konqueror/konq-simplebrowser.rc -/opt/kde3/share/applications/kde/konquerorsu.desktop -/opt/kde3/share/applnk/konqueror.desktop -%doc %lang(en) /opt/kde3/share/doc/HTML/en/konqueror -/opt/kde3/share/config.kcfg/konqueror.kcfg -/opt/kde3/bin/konqueror -/opt/kde3/%_lib/kde3/konq*.so -/opt/kde3/%_lib/kde3/konq*.la -%dir /opt/kde3/share/apps/konqueror -/opt/kde3/share/apps/konqueror/tiles -/opt/kde3/share/apps/konqueror/about -/opt/kde3/share/apps/konqueror/icons -/opt/kde3/share/apps/konqueror/konqueror.rc -/opt/kde3/share/apps/konqueror/p* -/opt/kde3/share/apps/konqueror/servicemenus -/opt/kde3/%_lib/kde3/konqueror.* -/opt/kde3/share/apps/konqiconview -/opt/kde3/share/apps/konqlistview -/opt/kde3/share/apps/konqsidebartng -/opt/kde3/%_lib/kde3/kded_konqy_preloader.* -/opt/kde3/share/services/kded/konqy_preloader.desktop -/opt/kde3/share/applications/kde/konqbrowser.desktop -/opt/kde3/share/applications/kde/konqfilemgr.desktop -/opt/kde3/share/config.kcfg/konq_listview.kcfg -%config(noreplace) /opt/kde3/share/config/konqsidebartng.rc -/opt/kde3/bin/kfind -/opt/kde3/%_lib/kde3/libkfindpart.* -/opt/kde3/share/applications/kde/Kfind.desktop -/opt/kde3/share/apps/kfindpart -/opt/kde3/share/icons/*/*/*/kfind.* -/opt/kde3/share/services/kfindpart.desktop -%doc %lang(en) /opt/kde3/share/doc/HTML/en/kfind -/opt/kde3/bin/kwrite -/opt/kde3/%_lib/kde3/kwrite.* -/opt/kde3/%_lib/libkdeinit_kwrite.so -/opt/kde3/share/applications/kde/kwrite.desktop -/opt/kde3/share/apps/kwrite -/opt/kde3/share/icons/*/*/*/kwrite.* -%doc %lang(en) /opt/kde3/share/doc/HTML/en/kwrite -/opt/kde3/bin/kate -/opt/kde3/%_lib/kde3/kate.* -/opt/kde3/%_lib/libkateinterfaces.so.* -/opt/kde3/%_lib/libkateutils.so.* -/opt/kde3/%_lib/libkdeinit_kate.so -/opt/kde3/share/applications/kde/kate.desktop -/opt/kde3/share/apps/kate -/opt/kde3/share/config/katerc -/opt/kde3/share/icons/*/*/*/kate.* -%doc %lang(en) /opt/kde3/share/doc/HTML/en/kate +%{_tde_bindir}/konsole* +%{_tde_modulesdir}/konsole.* +%{_tde_modulesdir}/kcm_konsole.* +%{_tde_libdir}/libkdeinit_konsole.so +%{_tde_applicationsdir}/kde/konsole.desktop +%{_tde_applicationsdir}/kde/konsolesu.desktop +%doc %lang(en) %{_tde_htmldir}/en/konsole +%{_tde_applicationsdir}/kde/Home.desktop +%{_tde_libdir}/libkdeinit_konqueror.so +%{_tde_datadir}/konqueror/konq-simplebrowser.rc +%{_tde_applicationsdir}/kde/konquerorsu.desktop +%{_tde_appsdir}/konqueror.desktop +%doc %lang(en) %{_tde_htmldir}/en/konqueror +%{_tde_configdir}.kcfg/konqueror.kcfg +%{_tde_bindir}/konqueror +%{_tde_modulesdir}/konq*.so +%{_tde_modulesdir}/konq*.la +%dir %{_tde_datadir}/konqueror +%{_tde_datadir}/konqueror/tiles +%{_tde_datadir}/konqueror/about +%{_tde_datadir}/konqueror/icons +%{_tde_datadir}/konqueror/konqueror.rc +%{_tde_datadir}/konqueror/p* +%{_tde_datadir}/konqueror/servicemenus +%{_tde_modulesdir}/konqueror.* +%{_tde_datadir}/konqiconview +%{_tde_datadir}/konqlistview +%{_tde_datadir}/konqsidebartng +%{_tde_modulesdir}/kded_konqy_preloader.* +%{_tde_servicesdir}/kded/konqy_preloader.desktop +%{_tde_applicationsdir}/kde/konqbrowser.desktop +%{_tde_applicationsdir}/kde/konqfilemgr.desktop +%{_tde_configdir}.kcfg/konq_listview.kcfg +%config(noreplace) %{_tde_configdir}/konqsidebartng.rc +%{_tde_bindir}/kfind +%{_tde_modulesdir}/libkfindpart.* +%{_tde_applicationsdir}/kde/Kfind.desktop +%{_tde_datadir}/kfindpart +%{_tde_iconsdir}/*/*/*/kfind.* +%{_tde_servicesdir}/kfindpart.desktop +%doc %lang(en) %{_tde_htmldir}/en/kfind +%{_tde_bindir}/kwrite +%{_tde_modulesdir}/kwrite.* +%{_tde_libdir}/libkdeinit_kwrite.so +%{_tde_applicationsdir}/kde/kwrite.desktop +%{_tde_datadir}/kwrite +%{_tde_iconsdir}/*/*/*/kwrite.* +%doc %lang(en) %{_tde_htmldir}/en/kwrite +%{_tde_bindir}/kate +%{_tde_modulesdir}/kate.* +%{_tde_libdir}/libkateinterfaces.so.* +%{_tde_libdir}/libkateutils.so.* +%{_tde_libdir}/libkdeinit_kate.so +%{_tde_applicationsdir}/kde/kate.desktop +%{_tde_datadir}/kate +%{_tde_configdir}/katerc +%{_tde_iconsdir}/*/*/*/kate.* +%doc %lang(en) %{_tde_htmldir}/en/kate %files workspace %defattr(-,root,root) -%exclude /usr/share/wallpapers/default_blue.* -%doc %lang(en) /opt/kde3/share/doc/HTML/en/kicker -/usr/share/wallpapers -/opt/kde3/bin/startkde -/opt/kde3/bin/kdesktop -/opt/kde3/bin/kdesktop_lock -/opt/kde3/bin/ksmserver -/opt/kde3/%_lib/libkdeinit_ksmserver.so -/opt/kde3/bin/ksplash -/opt/kde3/bin/ksplashsimple -/opt/kde3/%_lib/kde3/kdesktop.* -/opt/kde3/share/apps/kdesktop -/opt/kde3/share/config.kcfg/kdesktop.kcfg -%config(noreplace) /opt/kde3/share/config/kdesktop_custom_menu* -/opt/kde3/bin/kicker -/opt/kde3/%_lib/kde3/kicker* -/opt/kde3/%_lib/kde3/kcm_kicker* -/opt/kde3/%_lib/libkickermain.so.* -/opt/kde3/share/applications/kde/kcmkicker.desktop -/opt/kde3/share/apps/kicker -/opt/kde3/share/config.kcfg/kickerSettings.kcfg -/opt/kde3/share/icons/*/*/*/kcmkicker.* -/opt/kde3/share/icons/*/*/*/kicker.* -/opt/kde3/%_lib/kconf_update_bin/kicker-3.4-reverseLayout -/opt/kde3/bin/kwin -/opt/kde3/bin/kwin_killer_helper -/opt/kde3/bin/kwin_rules_dialog -/opt/kde3/%_lib/kde3/kwin_* -/opt/kde3/share/apps/kwin -/opt/kde3/%_lib/kde3/kwin.* -/opt/kde3/%_lib/kde3/kwin3_* -/opt/kde3/%_lib/kconf_update_bin/kwin_update_default_rules -/opt/kde3/%_lib/kconf_update_bin/kwin_update_window_settings -/opt/kde3/share/applications/kde/kwinrules.desktop -/opt/kde3/share/applications/kde/kwindecoration.desktop -/opt/kde3/share/applications/kde/kwinoptions.desktop -/opt/kde3/share/config.kcfg/kwin.kcfg -/opt/kde3/share/icons/*/*/*/kwin.* +%exclude %{_datadir}/default_blue.* +%doc %lang(en) %{_tde_htmldir}/en/kicker +%{_datadir}/wallpapers +%{_tde_bindir}/startkde +%{_tde_bindir}/kdesktop +%{_tde_bindir}/kdesktop_lock +%{_tde_bindir}/ksmserver +%{_tde_libdir}/libkdeinit_ksmserver.so +%{_tde_bindir}/ksplash +%{_tde_bindir}/ksplashsimple +%{_tde_modulesdir}/kdesktop.* +%{_tde_datadir}/kdesktop +%{_tde_configdir}.kcfg/kdesktop.kcfg +%config(noreplace) %{_tde_configdir}/kdesktop_custom_menu* +%{_tde_bindir}/kicker +%{_tde_modulesdir}/kicker* +%{_tde_modulesdir}/kcm_kicker* +%{_tde_libdir}/libkickermain.so.* +%{_tde_applicationsdir}/kde/kcmkicker.desktop +%{_tde_datadir}/kicker +%{_tde_configdir}.kcfg/kickerSettings.kcfg +%{_tde_iconsdir}/*/*/*/kcmkicker.* +%{_tde_iconsdir}/*/*/*/kicker.* +%{_tde_libdir}/kconf_update_bin/kicker-3.4-reverseLayout +%{_tde_bindir}/kwin +%{_tde_bindir}/kwin_killer_helper +%{_tde_bindir}/kwin_rules_dialog +%{_tde_modulesdir}/kwin_* +%{_tde_datadir}/kwin +%{_tde_modulesdir}/kwin.* +%{_tde_modulesdir}/kwin3_* +%{_tde_libdir}/kconf_update_bin/kwin_update_default_rules +%{_tde_libdir}/kconf_update_bin/kwin_update_window_settings +%{_tde_applicationsdir}/kde/kwinrules.desktop +%{_tde_applicationsdir}/kde/kwindecoration.desktop +%{_tde_applicationsdir}/kde/kwinoptions.desktop +%{_tde_configdir}.kcfg/kwin.kcfg +%{_tde_iconsdir}/*/*/*/kwin.* /var/adm/fillup-templates/sysconfig.windowmanager-kdebase3 -/opt/kde3/share/apps/ksplash -/opt/kde3/share/services/ksplash.desktop -/opt/kde3/share/services/ksplashdefault.desktop -/opt/kde3/share/services/ksplashredmond.desktop -/opt/kde3/share/services/ksplashstandard.desktop -/opt/kde3/share/servicetypes/ksplashplugins.desktop -/opt/kde3/share/icons/*/*/*/ksplash.* -/opt/kde3/%_lib/kde3/ksplash* -/opt/kde3/%_lib/libksplashthemes.so.* -/opt/kde3/share/icons/*/*/apps/kcmsmserver.* -/opt/kde3/share/applications/kde/kcmsmserver.desktop -/opt/kde3/%_lib/kde3/ksmserver.* -/opt/kde3/share/apps/ksmserver -/opt/kde3/%_lib/kde3/clock_panelapplet.* -/opt/kde3/%_lib/kde3/dockbar_panelextension.* -/opt/kde3/%_lib/kde3/kasbar_panelextension.* -/opt/kde3/%_lib/kde3/menu_panelapplet.* -/opt/kde3/%_lib/kde3/klipper_panelapplet.* -/opt/kde3/%_lib/kde3/launcher_panelapplet.* -/opt/kde3/%_lib/kde3/lockout_panelapplet.* -/opt/kde3/%_lib/kde3/minipager_panelapplet.* -/opt/kde3/%_lib/kde3/naughty_panelapplet.* -/opt/kde3/%_lib/kde3/run_panelapplet.* -/opt/kde3/%_lib/kde3/sidebar_panelextension.* -/opt/kde3/share/applications/kde/panel.desktop -/opt/kde3/share/applications/kde/panel_appearance.desktop -/opt/kde3/%_lib/kde3/media_panelapplet.* -/opt/kde3/%_lib/kde3/kcm_taskbar.* -/opt/kde3/share/applications/kde/kcmtaskbar.desktop -/opt/kde3/share/config.kcfg/taskbar.kcfg -/opt/kde3/share/icons/*/*/apps/kcmtaskbar.* -/opt/kde3/%_lib/kde3/kcm_screensaver.* -/opt/kde3/share/applications/kde/screensaver.desktop -/opt/kde3/share/applnk/System/ScreenSavers/KBlankscreen.desktop -/opt/kde3/share/applnk/System/ScreenSavers/KRandom.desktop -/opt/kde3/bin/kwebdesktop -/opt/kde3/share/config.kcfg/kwebdesktop.kcfg -/opt/kde3/share/applications/kde/background.desktop -/opt/kde3/%_lib/kde3/kcm_background* -/opt/kde3/bin/default_desktop_aligning -/opt/kde3/share/applications/kde/desktop.desktop -/opt/kde3/share/applications/kde/desktopbehavior.desktop -/opt/kde3/share/applications/kde/ksplashthememgr.desktop -/opt/kde3/share/icons/*/*/apps/kcmdesktop.* -/opt/kde3/share/icons/*/*/apps/kcmdesktopbehavior.* -/opt/kde3/%_lib/kde3/kcm_ksplashthemes.* -/opt/kde3/%_lib/kde3/kcm_kwindecoration.* -/opt/kde3/%_lib/kde3/kcm_kwinoptions.* -/opt/kde3/%_lib/kde3/kcm_kwinrules.* -%doc %lang(en) /opt/kde3/share/doc/HTML/en/ksplashml -/opt/kde3/shutdown -%if %suse_version > 1010 -/opt/kde3/%_lib/libkickoffsearch_interfaces.so.* -/opt/kde3/share/servicetypes/kickoffsearchplugin.desktop -%endif -/opt/kde3/share/autostart/* -/opt/kde3/share/apps/naughtyapplet -/opt/kde3/%_lib/libtask*.so.* -/opt/kde3/bin/extensionproxy -/opt/kde3/bin/appletproxy -/opt/kde3/%_lib/kde3/appletproxy.* -/opt/kde3/%_lib/kde3/extensionproxy.* -/opt/kde3/%_lib/kde3/taskbar* -/opt/kde3/%_lib/kde3/trash_panelapplet* -/opt/kde3/%_lib/kde3/sys* -/opt/kde3/share/apps/clockapplet -/opt/kde3/bin/kasbar -/opt/kde3/%_lib/libkasbar.so.* -/opt/kde3/%_lib/libkdeinit_kicker.so -/opt/kde3/%_lib/libkdeinit_appletproxy.so -/opt/kde3/%_lib/libkdeinit_extensionproxy.so -/opt/kde3/%_lib/libkdeinit_kdesktop.so -/opt/kde3/%_lib/libkdeinit_kwin.so -/opt/kde3/%_lib/libkdeinit_kwin_rules_dialog.so -/opt/kde3/bin/ktip -/opt/kde3/share/appl*/*/ktip.desktop -/opt/kde3/share/icons/*/*/*/ktip.* -/opt/kde3/bin/kpager -/opt/kde3/share/appl*/*/kpager.desktop -/opt/kde3/share/icons/*/*/*/kpager.* -%doc %lang(en) /opt/kde3/share/doc/HTML/en/kpager -/opt/kde3/bin/klipper -/opt/kde3/%_lib/kde3/klipper.* -/opt/kde3/%_lib/libkdeinit_klipper.so -/opt/kde3/share/applications/kde/klipper.desktop -%config(noreplace) /opt/kde3/share/config/klipperrc -/opt/kde3/share/icons/*/*/*/klipper.* -%doc %lang(en) /opt/kde3/share/doc/HTML/en/klipper -/opt/kde3/share/applications/kde/kmenuedit.desktop -/opt/kde3/share/apps/kmenuedit -/opt/kde3/share/icons/*/*/*/kmenuedit.* -%doc %lang(en) /opt/kde3/share/doc/HTML/en/kmenuedit -/opt/kde3/bin/kmenuedit -/opt/kde3/%_lib/kde3/kmenuedit.* -/opt/kde3/%_lib/libkdeinit_kmenuedit.so -/opt/kde3/bin/kinfocenter -/opt/kde3/share/applications/kde/kinfocenter.desktop -/opt/kde3/share/apps/kinfocenter -%doc %lang(en) /opt/kde3/share/doc/HTML/en/kinfocenter -%doc %lang(en) /opt/kde3/share/doc/HTML/en/khelpcenter/userguide -%doc %lang(en) /opt/kde3/share/doc/HTML/en/khelpcenter/visualdict -/opt/kde3/share/sounds/KDE_Close_Window* -/opt/kde3/share/sounds/KDE_Dialog* -/opt/kde3/share/sounds/KDE_Desktop* -/opt/kde3/share/sounds/KDE_Logout* -/opt/kde3/share/sounds/KDE_Startup* -/opt/kde3/share/sounds/KDE_Window* -/opt/kde3/%_lib/libkdeinit_khotkeys.so -/opt/kde3/%_lib/kde3/kcm_khotkeys.* -/opt/kde3/%_lib/kde3/kcm_khotkeys_init.* -/opt/kde3/share/icons/*/*/*/khotkeys.* -/opt/kde3/bin/khotkeys -/opt/kde3/%_lib/kconf_update_bin/khotkeys_update -/opt/kde3/%_lib/kde3/khotkeys.* -/opt/kde3/%_lib/kde3/kded_khotkeys.* -/opt/kde3/%_lib/libkhotkeys_shared.so.* -/opt/kde3/share/applications/kde/khotkeys.desktop -/opt/kde3/share/apps/khotkeys -/opt/kde3/share/services/kded/khotkeys.desktop -/opt/kde3/bin/ksysguard -/opt/kde3/share/applications/kde/ksysguard.desktop -/opt/kde3/share/apps/ksysguard -/opt/kde3/share/icons/*/*/*/ksysguard.* -/opt/kde3/share/mimelnk/application/x-ksysguard.desktop -%doc %lang(en) /opt/kde3/share/doc/HTML/en/ksysguard -%doc %lang(en) /opt/kde3/share/doc/HTML/en/kxkb -/opt/kde3/%_lib/libksgrd.so.* -/opt/kde3/bin/kompmgr -%doc %lang(en) /opt/kde3/share/doc/HTML/en/kompmgr -%if 0%{?with_hal} == 0 -/opt/kde3/bin/devmon-automounter.sh -%endif +%{_tde_datadir}/ksplash +%{_tde_servicesdir}/ksplash.desktop +%{_tde_servicesdir}/ksplashdefault.desktop +%{_tde_servicesdir}/ksplashredmond.desktop +%{_tde_servicesdir}/ksplashstandard.desktop +%{_tde_servicetypesdir}/ksplashplugins.desktop +%{_tde_iconsdir}/*/*/*/ksplash.* +%{_tde_modulesdir}/ksplash* +%{_tde_libdir}/libksplashthemes.so.* +%{_tde_iconsdir}/*/*/apps/kcmsmserver.* +%{_tde_applicationsdir}/kde/kcmsmserver.desktop +%{_tde_modulesdir}/ksmserver.* +%{_tde_datadir}/ksmserver +%{_tde_modulesdir}/clock_panelapplet.* +%{_tde_modulesdir}/dockbar_panelextension.* +%{_tde_modulesdir}/kasbar_panelextension.* +%{_tde_modulesdir}/menu_panelapplet.* +%{_tde_modulesdir}/klipper_panelapplet.* +%{_tde_modulesdir}/launcher_panelapplet.* +%{_tde_modulesdir}/lockout_panelapplet.* +%{_tde_modulesdir}/minipager_panelapplet.* +%{_tde_modulesdir}/naughty_panelapplet.* +%{_tde_modulesdir}/run_panelapplet.* +%{_tde_modulesdir}/sidebar_panelextension.* +%{_tde_applicationsdir}/kde/panel.desktop +%{_tde_applicationsdir}/kde/panel_appearance.desktop +%{_tde_modulesdir}/media_panelapplet.* +%{_tde_modulesdir}/kcm_taskbar.* +%{_tde_applicationsdir}/kde/kcmtaskbar.desktop +%{_tde_configdir}.kcfg/taskbar.kcfg +%{_tde_iconsdir}/*/*/apps/kcmtaskbar.* +%{_tde_modulesdir}/kcm_screensaver.* +%{_tde_applicationsdir}/kde/screensaver.desktop +%{_tde_appsdir}/System/ScreenSavers/KBlankscreen.desktop +%{_tde_appsdir}/System/ScreenSavers/KRandom.desktop +%{_tde_bindir}/kwebdesktop +%{_tde_configdir}.kcfg/kwebdesktop.kcfg +%{_tde_applicationsdir}/kde/background.desktop +%{_tde_modulesdir}/kcm_background* +%{_tde_bindir}/default_desktop_aligning +%{_tde_applicationsdir}/kde/desktop.desktop +%{_tde_applicationsdir}/kde/desktopbehavior.desktop +%{_tde_applicationsdir}/kde/ksplashthememgr.desktop +%{_tde_iconsdir}/*/*/apps/kcmdesktop.* +%{_tde_iconsdir}/*/*/apps/kcmdesktopbehavior.* +%{_tde_modulesdir}/kcm_ksplashthemes.* +%{_tde_modulesdir}/kcm_kwindecoration.* +%{_tde_modulesdir}/kcm_kwinoptions.* +%{_tde_modulesdir}/kcm_kwinrules.* +%doc %lang(en) %{_tde_htmldir}/en/ksplashml +%{_tde_prefix}/shutdown +%{_tde_libdir}/libkickoffsearch_interfaces.so.* +%{_tde_servicetypesdir}/kickoffsearchplugin.desktop +%{_tde_sharedir}/autostart/* +%{_tde_datadir}/naughtyapplet +%{_tde_libdir}/libtask*.so.* +%{_tde_bindir}/extensionproxy +%{_tde_bindir}/appletproxy +%{_tde_modulesdir}/appletproxy.* +%{_tde_modulesdir}/extensionproxy.* +%{_tde_modulesdir}/taskbar* +%{_tde_modulesdir}/trash_panelapplet* +%{_tde_modulesdir}/sys* +%{_tde_datadir}/clockapplet +%{_tde_bindir}/kasbar +%{_tde_libdir}/libkasbar.so.* +%{_tde_libdir}/libkdeinit_kicker.so +%{_tde_libdir}/libkdeinit_appletproxy.so +%{_tde_libdir}/libkdeinit_extensionproxy.so +%{_tde_libdir}/libkdeinit_kdesktop.so +%{_tde_libdir}/libkdeinit_kwin.so +%{_tde_libdir}/libkdeinit_kwin_rules_dialog.so +%{_tde_bindir}/ktip +%{_tde_sharedir}/appl*/*/ktip.desktop +%{_tde_iconsdir}/*/*/*/ktip.* +%{_tde_bindir}/kpager +%{_tde_sharedir}/appl*/*/kpager.desktop +%{_tde_iconsdir}/*/*/*/kpager.* +%doc %lang(en) %{_tde_htmldir}/en/kpager +%{_tde_bindir}/klipper +%{_tde_modulesdir}/klipper.* +%{_tde_libdir}/libkdeinit_klipper.so +%{_tde_applicationsdir}/kde/klipper.desktop +%config(noreplace) %{_tde_configdir}/klipperrc +%{_tde_iconsdir}/*/*/*/klipper.* +%doc %lang(en) %{_tde_htmldir}/en/klipper +%{_tde_applicationsdir}/kde/kmenuedit.desktop +%{_tde_datadir}/kmenuedit +%{_tde_iconsdir}/*/*/*/kmenuedit.* +%doc %lang(en) %{_tde_htmldir}/en/kmenuedit +%{_tde_bindir}/kmenuedit +%{_tde_modulesdir}/kmenuedit.* +%{_tde_libdir}/libkdeinit_kmenuedit.so +%{_tde_bindir}/kinfocenter +%{_tde_applicationsdir}/kde/kinfocenter.desktop +%{_tde_datadir}/kinfocenter +%doc %lang(en) %{_tde_htmldir}/en/kinfocenter +%doc %lang(en) %{_tde_htmldir}/en/khelpcenter/userguide +%doc %lang(en) %{_tde_htmldir}/en/khelpcenter/visualdict +%{_tde_sounddir}/KDE_Close_Window* +%{_tde_sounddir}/KDE_Dialog* +%{_tde_sounddir}/KDE_Desktop* +%{_tde_sounddir}/KDE_Logout* +%{_tde_sounddir}/KDE_Startup* +%{_tde_sounddir}/KDE_Window* +%{_tde_libdir}/libkdeinit_khotkeys.so +%{_tde_modulesdir}/kcm_khotkeys.* +%{_tde_modulesdir}/kcm_khotkeys_init.* +%{_tde_iconsdir}/*/*/*/khotkeys.* +%{_tde_bindir}/khotkeys +%{_tde_libdir}/kconf_update_bin/khotkeys_update +%{_tde_modulesdir}/khotkeys.* +%{_tde_modulesdir}/kded_khotkeys.* +%{_tde_libdir}/libkhotkeys_shared.so.* +%{_tde_applicationsdir}/kde/khotkeys.desktop +%{_tde_datadir}/khotkeys +%{_tde_servicesdir}/kded/khotkeys.desktop +%{_tde_bindir}/ksysguard +%{_tde_applicationsdir}/kde/ksysguard.desktop +%{_tde_datadir}/ksysguard +%{_tde_iconsdir}/*/*/*/ksysguard.* +%{_tde_mimedir}/application/x-ksysguard.desktop +%doc %lang(en) %{_tde_htmldir}/en/ksysguard +%doc %lang(en) %{_tde_htmldir}/en/kxkb +%{_tde_libdir}/libksgrd.so.* +%{_tde_bindir}/kompmgr +%doc %lang(en) %{_tde_htmldir}/en/kompmgr %files runtime %defattr(-,root,root) -%doc %lang(en) /opt/kde3/share/doc/HTML/en/kioslave -%exclude /opt/kde3/%_lib/kde3/kio_smb.* -%exclude /opt/kde3/share/services/smb.protocol -/opt/kde3/bin/kde3 -/opt/kde3/bin/kreadconfig -/opt/kde3/bin/kwriteconfig -/opt/kde3/bin/kprinter -/opt/kde3/%_lib/libkdeinit_kprinter.so -/opt/kde3/bin/kdesu -/opt/kde3/%_lib/kde3/kio_* -/opt/kde3/%_lib/libkfontinst.so.* -/opt/kde3/share/services/*.protocol -/opt/kde3/%_lib/libkonq.so.* -/opt/kde3/%_lib/libkonqsidebarplugin.so.* -/opt/kde3/%_lib/kde3/kded_favicons.* -/opt/kde3/share/services/kded/favicons.desktop -/opt/kde3/%_lib/libkdecorations.so.* -/opt/kde3/%_lib/kde3/kgreet_winbind.* -/opt/kde3/%_lib/kde3/kgreet_classic.* +%doc %lang(en) %{_tde_htmldir}/en/kioslave +%exclude %{_tde_modulesdir}/kio_smb.* +%exclude %{_tde_servicesdir}/smb.protocol +%{_tde_bindir}/kde3 +%{_tde_bindir}/kreadconfig +%{_tde_bindir}/kwriteconfig +%{_tde_bindir}/kprinter +%{_tde_libdir}/libkdeinit_kprinter.so +%{_tde_bindir}/kdesu +%{_tde_modulesdir}/kio_* +%{_tde_libdir}/libkfontinst.so.* +%{_tde_servicesdir}/*.protocol +%{_tde_libdir}/libkonq.so.* +%{_tde_libdir}/libkonqsidebarplugin.so.* +%{_tde_modulesdir}/kded_favicons.* +%{_tde_servicesdir}/kded/favicons.desktop +%{_tde_libdir}/libkdecorations.so.* +%{_tde_modulesdir}/kgreet_winbind.* +%{_tde_modulesdir}/kgreet_classic.* %config /etc/pam.d/kcheckpass -%verify(not mode) %attr(4755,root,shadow) /opt/kde3/bin/kcheckpass -/opt/kde3/share/icons/*/*/*/knotify.* -/opt/kde3/share/icons/*/*/*/kscreensaver.* -/opt/kde3/share/icons/*/*/*/style.* -/opt/kde3/share/icons/*/*/*/looknfeel.* -/opt/kde3/share/icons/*/*/*/iconthemes.* -/opt/kde3/share/icons/*/*/*/keyboard.* -/opt/kde3/share/icons/*/*/*/kcmsound.* -/opt/kde3/share/icons/*/*/*/energy.* -/opt/kde3/share/icons/*/*/*/kcmkwm.* -/opt/kde3/share/icons/*/*/*/hwinfo.* -/opt/kde3/share/icons/*/*/*/date.* -/opt/kde3/share/icons/*/*/*/filetypes.* -/opt/kde3/share/icons/*/*/*/kcmsystem.* -/opt/kde3/share/icons/*/*/*/personal.* +%verify(not mode) %attr(4755,root,shadow) %{_tde_bindir}/kcheckpass +%{_tde_iconsdir}/*/*/*/knotify.* +%{_tde_iconsdir}/*/*/*/kscreensaver.* +%{_tde_iconsdir}/*/*/*/style.* +%{_tde_iconsdir}/*/*/*/looknfeel.* +%{_tde_iconsdir}/*/*/*/iconthemes.* +%{_tde_iconsdir}/*/*/*/keyboard.* +%{_tde_iconsdir}/*/*/*/kcmsound.* +%{_tde_iconsdir}/*/*/*/energy.* +%{_tde_iconsdir}/*/*/*/kcmkwm.* +%{_tde_iconsdir}/*/*/*/hwinfo.* +%{_tde_iconsdir}/*/*/*/date.* +%{_tde_iconsdir}/*/*/*/filetypes.* +%{_tde_iconsdir}/*/*/*/kcmsystem.* +%{_tde_iconsdir}/*/*/*/personal.* %changelog diff --git a/opensuse/core/tdelibs/tdelibs.spec b/opensuse/core/tdelibs/tdelibs.spec index 4e238d06f..2576ad4d8 100644 --- a/opensuse/core/tdelibs/tdelibs.spec +++ b/opensuse/core/tdelibs/tdelibs.spec @@ -26,7 +26,7 @@ BuildRequires: db-devel libacl-devel libattr-devel unsermake update-desktop-fil BuildRequires: unzip BuildRequires: avahi-compat-mDNSResponder-devel fdupes libbz2-devel libjasper-devel BuildRequires: libdrm-devel tde-filesystem cmake -URL: http://www.trinitydesktop.org +URL: http://www.trinitydesktop.org/ License: BSD3c(or similar) ; GPLv2+ ; LGPLv2.1+ Group: System/GUI/TDE BuildRoot: %{_tmppath}/%{name}-%{version}-build @@ -40,6 +40,7 @@ Requires: openssl tdelibs-default-style Requires: hicolor-icon-theme Recommends: ispell enscript Requires: sudo +Requires: libtqt4 Source0: kdelibs-%{version}.tar.bz2 Source3: baselibs.conf Source4: api_docu_description @@ -366,7 +367,8 @@ CXXFLAGS="$CXXFLAGS -fno-strict-aliasing" export PATH=/usr/lib/mit/bin:$PATH # fast-malloc is not needed anymore -%cmake_tde -d build \ +%cmake_tde -d build -- \ + -DCMAKE_SKIP_RPATH=OFF \ -DKDE_MALLOC_FULL=OFF \ -DKDE_MALLOC=OFF \ -DKDE_DISTRIBUTION="$DISTRI" \ -- cgit v1.2.3